Internationalisation des thèmes::partie 4::le fichier POT
23 septembre 2006 par Marc Charlet
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
(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:
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
le fichier généré contient les informations suivantes:
-
# SOME DESCRIPTIVE TITLE.
-
# Copyright ( C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-
# This file is distributed under the same license as the PACKAGE package.
-
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-
#
-
#, fuzzy
-
msgid ""
-
msgstr ""
-
"Project-Id-Version: PACKAGE VERSION\n"
-
"Report-Msgid-Bugs-To: \n"
-
"POT-Creation-Date: 2006-09-22 23:06+0200\n"
-
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-
"Language-Team: LANGUAGE <LL@li.org>\n"
-
"MIME-Version: 1.0\n"
-
"Content-Type: text/plain; charset=CHARSET\n"
-
"Content-Transfer-Encoding: 8bit\n"
-
-
#: index.php:10
-
msgid "Permanent Link to "
-
msgstr ""
-
-
#: index.php:11
-
msgid "F jS, Y"
-
msgstr ""
-
-
#: index.php:11
-
msgid " by "
-
msgstr ""
-
-
#: index.php:15
-
msgid "Continue Reading »"
-
msgstr ""
-
-
#: index.php:18
-
msgid "Posted in "
-
msgstr ""
-
-
#: index.php:18
-
msgid "Edit"
-
msgstr ""
-
-
#: index.php:18
-
msgid "No Comments »"
-
msgstr ""
-
-
#: index.php:18
-
msgid "1 Comment »"
-
msgstr ""
-
-
#: index.php:18
-
msgid "% Comments »"
-
msgstr ""
-
-
#: index.php:24
-
msgid "« Prev"
-
msgstr ""
-
-
#: index.php:24
-
msgid "Next »"
-
msgstr ""
-
-
#: index.php:28
-
msgid "Not Found"
-
msgstr ""
-
-
#: index.php:29
-
msgid "Sorry, but you are looking for something that isn't here."
-
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 :
-
# SOME DESCRIPTIVE TITLE.
-
# Copyright ( C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-
# This file is distributed under the same license as the PACKAGE package.
-
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-
#
-
#, fuzzy
-
msgid ""
-
msgstr ""
-
"Project-Id-Version: PACKAGE VERSION\n"
-
"Report-Msgid-Bugs-To: \n"
-
"POT-Creation-Date: 2006-09-22 23:45+0200\n"
-
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-
"Language-Team: LANGUAGE <LL@li.org>\n"
-
"MIME-Version: 1.0\n"
-
"Content-Type: text/plain; charset=CHARSET\n"
-
"Content-Transfer-Encoding: 8bit\n"
-
-
#: index.php:10
-
msgid "Permanent Link to "
-
msgstr ""
-
-
#: index.php:11
-
msgid "F jS, Y"
-
msgstr ""
-
-
#: index.php:11
-
msgid " by "
-
msgstr ""
-
-
#: index.php:15
-
msgid "Continue Reading »"
-
msgstr ""
-
-
#: index.php:18
-
msgid "Posted in "
-
msgstr ""
-
-
#: index.php:18
-
msgid "Edit"
-
msgstr ""
-
-
#: index.php:18
-
msgid "No Comments »"
-
msgstr ""
-
-
#: index.php:18
-
msgid "1 Comment »"
-
msgstr ""
-
-
#: index.php:18
-
msgid "% Comments »"
-
msgstr ""
-
-
#: index.php:24
-
msgid "« Prev"
-
msgstr ""
-
-
#: index.php:24
-
msgid "Next »"
-
msgstr ""
-
-
#: index.php:28
-
msgid "Not Found"
-
msgstr ""
-
-
#: index.php:29
-
msgid "Sorry, but you are looking for something that isn't here."
-
msgstr ""
-
-
#: sidebar.php:6
-
msgid "Categories"
-
msgstr ""
-
-
#: sidebar.php:13
-
msgid "Archives"
-
msgstr ""
-
-
#: sidebar.php:17
-
msgid "Links"
-
msgstr ""
-
-
#: sidebar.php:22
-
msgid "Pages"
-
msgstr ""
-
-
#: sidebar.php:27
-
msgid "Meta"
-
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.
Tags: gettext, guide-débutant, mo, po, pot, thème, Traductions, utilitaire, Web, Wordpress
8 réponses à “Internationalisation des thèmes::partie 4::le fichier POT”

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 !
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)
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.
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?
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…
le smiley en moins bien sur
Oups ! j’ai vu mon erreur, ca y est ca marche ! Merci de m’avoir mis les yeux en face des trous.
Bonne nuit.
Comment faire pour que la recherche se fasse dans le repertoire complet?
J’ai essayé d’ajouter –directory=mon_repertoire mais ça donne rien