PHP et Python étant les deux langages que je connais le mieux, dans la lignée de la réalisation d’un application Python en multilingue (disponible ici), nous allons voir rapidement la même procédure mais en PHP.
Nous allons utiliser xgettext qui fonctionne sensiblement de la même manière.
Tout d’abord, les différents dossiers, un par langue, dans mon cas, l’anglais et le français :
mkdir -p locales/fr/LC_MESSAGES mkdir -p locales/en/LC_MESSAGES mkdir src
Maintenant le fichier main.php qui sera enregistré dans le dossier src, je mets l’ensemble y compris l’exemple sur la pluralité :
<?php // Mise en place de la langue pour le script setlocale(LC_ALL, "en_US.utf8"); // Définition du domaine pour la traduction bindtextdomain("main", "locales"); // Sélection du domaine de texte textdomain("main"); function print_some_strings(){ echo _("Bonjour le monde\n"); echo _("Ceci est une phrase traduite\n"); } function print_some_plural_strings($num){ $message1 = ngettext("%d homme", "%d hommes",$num); $message2 = ngettext("Je possede %d portables", "Je possede %d portables",$num); printf($message1."\n", $num); printf($message2."\n", $num); } print_some_strings(); print_some_plural_strings(1); print_some_plural_strings(5); ?>
Dans notre script (par exemple une page web), il faudra venir modifier le paramètre « en_US.utf8 » en fonction soit du choix de l’utilisateur, soit de la langue du navigateur.
Pour générer le template (.pot) :
xgettext --add-comments src/main.php -o locales/main.pot
Une fois le template créé, nous allons créer les fichiers de traduction (.po) :
msginit -l en -i locales/main.pot -o locales/en/LC_MESSAGES/main.po msginit -l fr -i locales/main.pot -o locales/fr/LC_MESSAGES/main.po
Les traductions seront à mettre dans les fichiers .po.
Une fois les traductions inscrites dans le marbre, il nous reste à générer le fichier compréhensible par le script :
msgfmt locales/fr/LC_MESSAGES/main.po -o locales/fr/LC_MESSAGES/main.mo msgfmt locales/en/LC_MESSAGES/main.po -o locales/en/LC_MESSAGES/main.mo
Une fois cela fait, quand tu lances ton script, tu vois bien ta traduction.
Pour la mise à jour, on regénère le template :
xgettext --add-comments src/main.php -o locales/main.pot
Cette fois-ci, on vient fusionner avec le fichier .mo existant (pour ne pas perdre ce qui a déjà été traduit :
msgmerge --update locales/en/LC_MESSAGES/main.po locales/main.pot msgmerge --update locales/en/LC_MESSAGES/main.po locales/main.pot
On mets à jours les traductions et on finit par :
msgfmt locales/fr/LC_MESSAGES/main.po -o locales/fr/LC_MESSAGES/main.mo msgfmt locales/en/LC_MESSAGES/main.po -o locales/en/LC_MESSAGES/main.mo
Conclusion
Que ce soit en Python ou PHP, la mise en place de traduction pour son script est très accessible.