gettext et site php multi-langues
Pense bête ultra-succint pour l'utilisation de gettext avec php. Fabrication des fichier de traduction pour l'instant seulement... Très incomplet.
Structure de répertoire pour acceuillir les traductions
+ locale
| + fr
| | + LC_MESSAGES
| | | messages.po
| | | messages.mo
| + en
| | + LC_MESSAGES
| | | messages.po
| | | messages.mo
| etc..
Fabrication du potfileIl faut récupérer les différentes chaine de caractères à traduire dans les fichiers source de toute l'application. Comme xgettext ne sait pas traverser les répertoires de façon récursive, on va utiliser la commande find pour lui passer les noms de fichier et l'option -j (join existing) de xgettext pour ajouter les chaines de caractère trouvée dans chaque fichier au potfile qu'on est en train de créer.
cd /path/to/app/source/dir
find . -regex ".*\.\(inc\|php\)" \
-exec xgettext -n -j -L PHP --from-code=ISO-8859-1 \
-p locale/fr/LC_MESSAGES {} \;
Compilation du potfileUne fois les messages traduit à partir du potfile original, il faut compiler les fichiers pour chaque langue afin de pouvoir les utiliser.
msgfmt messages.po
Gestion du potfile quand il y a eu des changementsTout d'abord on recré un potfile à zéro avec tous les messages à traduire. On change le nom par défaut du fichier d'output pour ne pas écraser le fichier existant
cd /path/to/app/source/dir
find . -regex ".*\.\(inc\|php\)" \
-exec xgettext -n -j -L PHP --from-code=ISO-8859-1 \
-p locale/fr/LC_MESSAGES -o new.po {} \;
On renomme ensuite l'ancien potfile
mv messages.po old.po
Puis on fusionne les changements
msgmerge old.po new.po --output-file=messages.po
On obtient un nouveau potfile dans lequel les traductions déjà faite sont toujours présentes. Il suffit de traduire les nouvelles chaines de caractères. Une fois que c'est fait, on compile le nouveau fichier.
Références
|