Localisation de la plateforme - nouvelingenieur/Refresh GitHub Wiki

Nous avons décidé de localiser la plateforme en utilisant la fonction gettext() ou _() de PHP associée au logiciel poedit.

Une documentation plus élaborée est disponible ici.

Indiquer les textes à traduire grâce à gettext :

Dans les pages PHP, les textes à traduire sont indiqués grâce à la fonctione gettext() dont un alias est _(). Le texte à traduire est donné en tant qu'argument de cette fonction. Nous avons choisi d'utiliser l'anglais comme texte de base pour faciliter le déploiement de Refresh à l'internationale.

Le titre d'un bouton est par exemple marqué :

ECHO '<submit name="'._('Validate').'">'

Poedit pour traduire le site :

Le logiciel poedit permet de retrouver dans le code toutes les utilisations de la fonction gettext() et de les traduire.

Il faut créer un catalogue et indiquer comme dossier à explorer le dossier SITE. Poedit retourne alors une liste des labels indiqués dans le site (comme Validate) sur une première colonne et une seconde colonne pour les traductions.

Une fois les traductions terminées, il génère deux fichiers. Un fichier .mo et un fichier .po.

Les fichiers de langue .po sont au format suivant :

#: /home/asimov4/Refresh/SITE/script_php/menu_compte.php:31
msgid "Disconnect"
msgstr "Disconnect"

Les fichiers de langue .mo sont la version compilée des fichiers .po qui permette d'accélérer le chargement des traductions, donc des pages.

Initialiser la traduction :

Pour que toutes ces instances de texte soient bien traduites, il faut préciser au début de chaque page PHP ou aller chercher la traduction. Dans refresh, le fichier index.php est celui qui génère toutes les pages de la plateforme. C'est donc là qu'est placée l'initialisation.

putenv("LC_ALL=".LANG);
setlocale(LC_ALL, LANG);
bindtextdomain("messages", "locale");
textdomain("messages");

LANG ('en_EN' ou 'fr_FR' par exemple) est défini dans le fichier config.php. Les fichiers de langue sont placés dans les dossiers locale/en_EN/LC_MESSAGES. Les fichiers lus sont les fichiers compilés en messages.mo. Attention à bien respecter les nomenclatures et l'arborescence pour éviter les bugs.

Si aucune traduction n'est trouvée, le label indiqué dans la fonction gettext() est affiché.

Pluriel (un commentaire des commentaires)

Il est possible de localiser les pluriels grâce à la fonction ngettext. Cela peut s'avérer très utile pour des langues comme le polonais où il existe 3 formes de pluriel (1 plik, 2 pliki, 5 plikov).

printf(ngettext("%d comment", "%d comments", $n), $n);