Bibliotheque d'internationalisation (i18n) pour Firmware Generator
Le besoin d'un système i18n
Chaque projet doit utiliser un systeme i18n afin de traduire les messages et permettre l'affichage de format de date localisé. Dans ce projet, nous avons choisi d'utiliser un système très répandu (au moins dans le cadre des logiciels libres) : PO-Gettext.
- Dans le code source, on doit appeler une fonction avant chaque affichage de message, i.e. translate("English string")
- Un utilitaire extrait ces messages dans un fichier PO
- Un traducteur se charge d'éditer un fichier PO et de traduire les messages
- Après compilation du fichier PO (= construction d'un fichier MO), les messages traduits sont visibles dans l'application
PHP-Gettext
Par défaut, PHP doit être compilé avec le support de Gettext pour permettre d'utiliser les fonctions PO-Gettext. Beaucoup d'hébergeurs PHP ne mettent pas en place cette option par défaut. Le but du projet PHP-Gettext est de proposer une solution de contournement : utiliser les fonctions PO-Gettext sans être dépendant d'un module PHP. Ainsi, quand le module PHP est présent PHP-Gettext l'utilise et quand ce module est manquant ou mal configuré il utilise une implémentation entièrement en PHP des fonctions.
... dans le projet Firmware Generator
Chargement de la bibliothèque i18n
Firmware Generator contient une classe I18N qui est chargée par index.php. Cette classe permet de charger PHP-Gettext (dans __construct()) et de connaitre la locale de l'utilisateur d'après les entêtes HTTP (dans getBestLang()). Cette locale est utilisée pour configurer les messages affichés par PHP-Gettext.
Utiliser la bonne fonction
Chaque message affiché par le projet doit être "i18n"-isé. Ceci doit être fait en utilisant la fonction T_() fournie par PHP-Gettext :
T_("English string");
Si vous souhaitez insérer une valeur dans le message, vous devez utiliser sprintf() :
sprintf(T_("Launch download of %s"), $packageName);
Extraction des chaines
Après avoir utiliser la fonction T_() dans le code, vous devez extraire les messages des fichiers sources et créer un fichier PO.
Firmware Generator fournit un script locale/update-template.sh qui permet :
- Extrait les chaines des un PO par défaut : locale/fw-generator.pot
- Ajout des nouvelles chaines dans les fichiers PO existants : locale/$LANG/LC_MESSAGES/fw-generator.po
- Compilation des fichiers PO existants vers leurs fichiers MO : locale/$LANG/LC_MESSAGES/fw-generator.mo
