Gettext est en fait un ensemble d’applications permettant d’internationaliser un programme en C. En pratique, on écrit notre code de cette manière :
Bon, ce n’est pas tout, il faut aussi installer les locales, (notamment inclure le fichier "locale.h"), puis mettre les textes traduits dans une arborescence précise, avec un formattage précis.
On va commencer par installer php-gettext, en root : apt-get install php-gettext gettext (sous debian). Normalement, on devrait avoir installé un fichier nommé ’ /usr/share/php/php-gettext/gettext.inc’. On va alors creer un petit fichier PHP :
que l’on va mettre avec un environnement de type
Et ensuite, on lance la commande (pour le php) :
Lorsque la traduction [2] est effectuée, nous transformons ces messages.po en messages.mo grâce à la commande msgfmt messages.po.
Lorsque nous travaillons avec un texte déjà traduit, il faut faire une fusion entre les différent messages.po. En renommant le vieux messages.po en old.po et en voulant créer un nouveau.po, le code est : msgmerge old.po messages.po --output-file=nouveau.po
Pour les habitués de gettext, il n’y a pas de T_ devant les fonctions, on a soit gettext("blabla"), soit _("blabla). Mais voilà, pour que l’internationalisation soit possible, il faut que toutes( !) les locales soient installées sur le serveur. C’est fortement improbable lorsque l’on travaille sur un serveur qui ne nous appartient pas. C’est pour celà que j’ai utilisé les fonctions gettext spécifiques au PHP, d’où l’installation de php_gettext.
Si on utilise le moteur de template smarty, il peut être intéressant de faire les traductions directement sur les templates. C’est le travail de smarty-gettext.
Pour faire celà avec php-gettext, il faut commencer par modifier le fichier "/usr/share/php/smarty/libs/plugins/block.t.php"
Lorsque l’on a modifié ce fichier, il faut mettre en en-tête du programme php :
Pour les templates, il faut les faire du type "truc.tpl" :
L’utilisation de tsmarty2c.php truc.tpl > truc.c" que l’on peut analyser avec la commande xgettext -n *.c permet d’avoir un fichier .po que l’on peut traduire de manière usuelle.
Les programmes de traduction comme gtranslator (gnome), kbabel (kde) et PoEdit (multiplateforme) permettent de voir plus facilement quelles chaines ne sont pas traduites. Et sont plus agréables aux traducteurs, qui ne sont pas obligatoirement programmeurs !
[1] Nous pouvons aussi ajouter l’option -j pour joindre différents types de fichiers lors de la traduction, on peut ainsi joindre des fichiers php et c pour l’analyse, ce qui est pratique dans l’utilisation de smarty-gettext
[2] Il y a aussi 2-3 petites choses à coder, dont l’utilisation du charset UTF-8, mais c’est assez simple, et on pourra utiliser des logiciels appropriés pour la traduction