Fils RSS pour les
Articles
Commentaires

Maintenant que nous avons transformé les fichiers php de notre thème pour les rendre compatibles 'gettext', nous pouvons enfin générer le fichier POT, le fichier catalogue reprenant tous les messages à traduire, la clé de voûte de tout notre système d'internationalisation.

Installation de gettext pour Windows

  • télécharger les programmes 'gettext for windows'
  • installer en prenant toutes les valeurs par défaut
  • gettext se trouve maintenant dans C:\Program Files\GnuWin32\bin

    bin_gettext.jpg

(i)Pour éviter de traîner le nom complet du chemin des exécutables de gettext1 dans la fenêtre de commande windows, je vous conseille très vivement d'ajouter le chemin C:\Program Files\GnuWin32\bin dans le chemin des exécutables de windows2:

  • Démarrer/Panneau de configuration/Système/Paramètres Système/
  • Avancé/Variables d'Environnement/Variables Système/Path/Modifier
  • ajouter 'C:\Program Files\GnuWin32\bin' à la fin et valider.
  • path1.jpg path2.jpg path3.jpg

Première génération du fichier POT

Ouvrir une fenêtre DOS et aller vers le répertoire de travail (c:\greenbridge)

Microsoft Windows XP [version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Noel>cd C:\greenbridge

C:\greenbridge>

tester si le chemin vers xgettext est reconnu

C:\greenbridge>xgettext
xgettext: no input file given
Try `(null) --help' for more information.

C:\greenbridge>

Nous allons générer un fichier greenbridgei.pot qui va contenir les messages que nous avons préparés dans le fichier index.php lors du travail sur les sources du billet précédent.

La commande à entrer est3:

C:\greenbridge>xgettext --keyword=__ --keyword=_e --default-domain=GreenBridge --language=php index.php --output=greenbridgei.pot

firstpot.jpg

le fichier généré contient les informations suivantes:

  1. # SOME DESCRIPTIVE TITLE.
  2. # Copyright ( C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  3. # This file is distributed under the same license as the PACKAGE package.
  4. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
  5. #
  6. #, fuzzy
  7. msgid ""
  8. msgstr ""
  9. "Project-Id-Version: PACKAGE VERSION\n"
  10. "Report-Msgid-Bugs-To: \n"
  11. "POT-Creation-Date: 2006-09-22 23:06+0200\n"
  12. "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
  13. "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  14. "Language-Team: LANGUAGE <LL@li.org>\n"
  15. "MIME-Version: 1.0\n"
  16. "Content-Type: text/plain; charset=CHARSET\n"
  17. "Content-Transfer-Encoding: 8bit\n"
  18.  
  19. #: index.php:10
  20. msgid "Permanent Link to "
  21. msgstr ""
  22.  
  23. #: index.php:11
  24. msgid "F jS, Y"
  25. msgstr ""
  26.  
  27. #: index.php:11
  28. msgid " by "
  29. msgstr ""
  30.  
  31. #: index.php:15
  32. msgid "Continue Reading &raquo;"
  33. msgstr ""
  34.  
  35. #: index.php:18
  36. msgid "Posted in "
  37. msgstr ""
  38.  
  39. #: index.php:18
  40. msgid "Edit"
  41. msgstr ""
  42.  
  43. #: index.php:18
  44. msgid "No Comments &#187;"
  45. msgstr ""
  46.  
  47. #: index.php:18
  48. msgid "1 Comment &#187;"
  49. msgstr ""
  50.  
  51. #: index.php:18
  52. msgid "% Comments &#187;"
  53. msgstr ""
  54.  
  55. #: index.php:24
  56. msgid "&#171; Prev"
  57. msgstr ""
  58.  
  59. #: index.php:24
  60. msgid "Next &#187;"
  61. msgstr ""
  62.  
  63. #: index.php:28
  64. msgid "Not Found"
  65. msgstr ""
  66.  
  67. #: index.php:29
  68. msgid "Sorry, but you are looking for something that isn't here."
  69. msgstr ""

Quelques remarques

  • Nous retrouvons bien tous les messages que nous avions travaillés en suivant la méthode du billet précédent4.
  • Si on retape la même commande, le fichier POT est généré à nouveau et l'ancienne version est écrasée.

Manipulations du fichier POT

Nous avions vu dans le billet précédent que certains fichiers possédaient déjà des messages compatibles avec notre technique. C'est le cas, notamment, du fichier sidebar.php.

:(Attention, bien que compatibles avec la commande xgettext, les formats d'appel de la fonction _e() utilisés par défaut dans sidebar.php (et les autres) ne tiennent pas compte de notre variable $textdomain, 'GreenBridge'. Lors du passage en revue de tous les fichiers php, nous devrons rajouter, pour rester rigoureux et consistants, ce paramètre dans tous les appel à la fonction _e().

Nous pouvons ajouter les messages contenu dans le fichier sidebar.php et mettre le fichier POT à jour en ajoutant le paramètre --join-existing à la ligne de commande:

C:\greenbridge>xgettext --keyword=__ --keyword=_e --default-domain=GreenBridge --language=php sidebar.php --join-existing --output=greenbridgei.pot

Le contenu de notre fichier greenbridgei.pot a été mis à jour et contient également les cinq messages au format _e() du fichier sidebar.php :

  1. # SOME DESCRIPTIVE TITLE.
  2. # Copyright ( C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  3. # This file is distributed under the same license as the PACKAGE package.
  4. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
  5. #
  6. #, fuzzy
  7. msgid ""
  8. msgstr ""
  9. "Project-Id-Version: PACKAGE VERSION\n"
  10. "Report-Msgid-Bugs-To: \n"
  11. "POT-Creation-Date: 2006-09-22 23:45+0200\n"
  12. "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
  13. "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  14. "Language-Team: LANGUAGE <LL@li.org>\n"
  15. "MIME-Version: 1.0\n"
  16. "Content-Type: text/plain; charset=CHARSET\n"
  17. "Content-Transfer-Encoding: 8bit\n"
  18.  
  19. #: index.php:10
  20. msgid "Permanent Link to "
  21. msgstr ""
  22.  
  23. #: index.php:11
  24. msgid "F jS, Y"
  25. msgstr ""
  26.  
  27. #: index.php:11
  28. msgid " by "
  29. msgstr ""
  30.  
  31. #: index.php:15
  32. msgid "Continue Reading &raquo;"
  33. msgstr ""
  34.  
  35. #: index.php:18
  36. msgid "Posted in "
  37. msgstr ""
  38.  
  39. #: index.php:18
  40. msgid "Edit"
  41. msgstr ""
  42.  
  43. #: index.php:18
  44. msgid "No Comments &#187;"
  45. msgstr ""
  46.  
  47. #: index.php:18
  48. msgid "1 Comment &#187;"
  49. msgstr ""
  50.  
  51. #: index.php:18
  52. msgid "% Comments &#187;"
  53. msgstr ""
  54.  
  55. #: index.php:24
  56. msgid "&#171; Prev"
  57. msgstr ""
  58.  
  59. #: index.php:24
  60. msgid "Next &#187;"
  61. msgstr ""
  62.  
  63. #: index.php:28
  64. msgid "Not Found"
  65. msgstr ""
  66.  
  67. #: index.php:29
  68. msgid "Sorry, but you are looking for something that isn't here."
  69. msgstr ""
  70.  
  71. #: sidebar.php:6
  72. msgid "Categories"
  73. msgstr ""
  74.  
  75. #: sidebar.php:13
  76. msgid "Archives"
  77. msgstr ""
  78.  
  79. #: sidebar.php:17
  80. msgid "Links"
  81. msgstr ""
  82.  
  83. #: sidebar.php:22
  84. msgid "Pages"
  85. msgstr ""
  86.  
  87. #: sidebar.php:27
  88. msgid "Meta"
  89. msgstr ""

La dernière façon d'utiliser la commande gettext est de traiter en un passage l'ensemble des fichiers php présents dans le répertoire courant en passant le paramètre *.php dans la ligne de commande. C'est la commande que nous utiliserons lorsque nous aurons modifié tous les fichiers php et que nous les aurons transférés dans notre répertoire de test au sein de notre structure Apache/MySQL/PHP.





Dans le prochain billet, nous allons voir comment générer et tenir à jour les fichiers de traduction fr_FR.po et fr_FR.mo en partant du fichier POT que nous venons de créer.


  1. nous n'utiliserons pour ainsi dire que xgettext [retour]
  2. la variable path [retour]
  3. les paramètres sont suffisamment parlants [retour]
  4. ouf! c'est beau l'informatique quand ça fonctionne [retour]

Tags: , , , , , , , , ,

8 réponses à “Internationalisation des thèmes::partie 4::le fichier POT”

  1. le 25 jan 2007 à 19:16 Mat_

    Bonsoir !
    Voilà, j’ai essayé de suivre tout ca mais lorsque je lance une invite de commande , le message est que xgettext n’est pas reconnu en tant que commande interne ou externe, un programme executable ou un fichier de commande … Vous avez une idée ?
    Merci d’avance !

  2. le 25 jan 2007 à 20:48 Marc Charlet

    bonjour,

    peut-être relire le début de l’article et modifier la variable d’environnement path comme suggéré

    (i) Pour éviter de traîner le nom complet du chemin des exécutables de gettext1 dans la fenêtre de commande windows, je vous conseille très vivement d’ajouter le chemin C:\Program Files\GnuWin32\bin dans le chemin des exécutables de windows.

    (panneau de configuration/système/avancé/variables d’environnement/modifier path)

  3. le 14 juin 2007 à 1:28 Arena

    J’ai le meme problème que Mat…
    Même en modifiant le path…

    le problème est lié à la dll libintl3.dll.

    En placant la dite dll dans le dossier Windows (qui est dans le path) même problème !

    snif !

    je suis sous XP.

  4. le 14 juin 2007 à 16:10 Marc Charlet

    bonjour Arena,

    chez moi le fichier libintl3.dll (version 0.14.4.1952) se trouve dans
    C:\Program Files\GnuWin32\bin
    et ma variable path reprend bien
    Path=C:\Program Files\GnuWin32\bin;…….

    quel est la valeur de ta variable path? (dans une fenêtre dos faire set p)

    Après xgettext (tout seul dans une fenêtre dos), il y a t’il un message d’erreur et que dit-il?

  5. le 15 juin 2007 à 0:18 Arena

    Bonjour
    merci de la reponse

    lorsque je fais SET
    j’obtiens

    GETTEXT=C:Program FilesGnuWin32bin

    après à partir d’un répertoire lambda je tape xgettext
    et j’obtiens :

    ‘XGETTEXT’ n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

    si cela peut aider…

  6. le 15 juin 2007 à 0:18 Arena

    le smiley en moins bien sur -)

  7. le 15 juin 2007 à 0:25 Arena

    Oups ! j’ai vu mon erreur, ca y est ca marche ! Merci de m’avoir mis les yeux en face des trous.
    Bonne nuit.

  8. le 29 oct 2007 à 20:54 sousou

    Comment faire pour que la recherche se fasse dans le repertoire complet?

    J’ai essayé d’ajouter –directory=mon_repertoire mais ça donne rien