Niveau :
Résumé : gettext
Connaissez vous la différence entre internationalisation et localisation (i18n et l10n) ? Hé bien il s'agit tout simplement de deux parties du même processus.
L'internationalisation c'est le fait de développer votre code pour qu'il supporte n'importe quelle locale. Par locale on entend la plupart du temps la langue, mais il ne faut pas oublier qu'il y a quelques autres particularités comme l'heure, la monnaie, l'affichage des dates ...
La localisation, c'est le fait de définir les propriétés locales du logiciel. Contrairement à l'internationalisation, ce n'est pas particulièrement un travail de développeur de s'occuper de la localisation. Il s'agit la plupart du temps de traduire du texte (l'heure et la monnaie étant en général fixe et donc déjà localisées).
Gettext est une bibliothèque pour vous faciliter l'internationalisation et la localisation du texte dans vos programmes. Elle a été pensée pour être utilisée dans du code existant aussi bien que dans du nouveau code. Le principe est de conserver les messages originaux dans le code (en anglais de préférence) et d'externaliser les versions localisées de ces messages dans d'autres fichiers.
Comment l'utiliser ?
La fonction principale de gettext est ... gettext. On lui passe en paramètre une chaîne de caractères et elle retourne la chaîne de caractères traduite correspondante.
Son action est simple, elle connaît la locale en cours, et en fonction de cette locale elle va chercher dans un fichier de texte localisé la chaîne de caractère correspondant à la chaîne en VO qu'on vient de lui passer. Si elle la trouve c'est gagné, sinon elle retourne la VO. Par conséquent, toutes les chaînes non traduites dans un logiciel fonctionnent, elles sont juste en VO.
Commençons par un exemple en php. En php, comme dans la plupart des autres langages, la fonction gettext() existe aussi sous le nom de _(), bien plus rapide à écrire et aussi plus lisible.
<?php // version non internationalisée echo "Hello World\n"; // version internationalisée echo _("Hello World\n"); ?>
Ouah trop dur ! Mieux, si vous décidez de ne pas traduire votre logiciel maintenant, ce n'est pas grave car la chaîne originale sera retournée (VO).
Nous avons internationalisé notre soft, il faut maintenant le localiser, c'est un peu plus de travail. Tout d'abord une petite partie dans le code lui-même pour fixer la locale à utiliser :
// locale choisie setlocale(LC_ALL, "fr_FR.UTF-8"); // choix du fichier de localisation bindtextdomain('test','/chemin/kivabien'); textdomain('test');
Ensuite, il faut lancer la commande suivante :
$ xgettext test.php
Elle produira un fichier messages.po, c'est lui le fichier de localisation. Éditez le (avec un simple éditeur pour l'instant) et complétez la ligne msgstr tout en bas du fichier, remplacez les champs qui vous intéressent, et surtout remplacez CHARSET par votre charset (UTF-8 ou ISO-8859-15 en général).
Une fois que c'est traduit, créons un fichier de localisation compilé (test.mo qui sera vraiment utilisé par le programme) :
$ msgfmt -o test.mo messages.po
Il faut placer ce dernier fichier dans le répertoire /chemin/kivabien/fr/LC_MESSAGES
Et voila !
Notez que gettext est disponible dans la plupart des langages :
- C
- Perl
- Python
- Ruby
- Cherchez
Comments