Donnez moi du texte

Publié le 05 novembre 2007 par Peck

Retrouvez cet article sur http://linux-attitude.fr/post/Donnez-moi-du-texte
Niveau :


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 message originaux dans le code (en anglais de préférence) et d'externaliser les versions localisées de ces messages dans d'autres fichiers.


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 correspondante localisée.
Son activité est simple, elle connaît la locale en cours, en fonction de la locale elle va chercher dans un fichier de texte localisé la chaîne de caractère correspondant à la chaîne originale qu'on vient de lui passer. Si elle la trouve elle retourne celle-ci, sinon elle retourne l'original.
Par conséquent, toutes les chaînes non traduites dans un logiciel sont tout de même présentes, mais 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.


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 le fichier de localisation compilé (test.mo qui sera finalement 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 :