GNU GetText et les accents

GNU GetText est un outil qui facilite le développement d’application multi-langue. Grâce à cet outil, il suffit d’élaborer un fichier avec l’extension .po dans lequel sont définis les termes dans la langue originale, on associe à chaque terme la traduction correspondante et au moyen de la commande msgfmt de GetText on génère un fichier .mo. On indique finalement à l’application le fichier .mo à utiliser pour que celle-ci visualise les textes dans la langue traduite.

Récemment j’ai dû adapter au français une application en espagnol qui utilise GetText pour gérer les textes et littéraux. Quelle n’a pas été ma surprise de constater que GetText n’interprétait pas correctement les termes originaux espagnols possédant des accents, en fait ces termes espagnols avec accents ne se traduisaient tout simplement pas. Visiblement GetText est prévu pu supporter des termes originaux en anglais (dans le fichier original .po), donc sans accent…si les termes originaux possèdent des accents, là ça foire…après avoir sué plusieurs heures, j’ai finalement trouvé d’où venait le problème. GetText utilise internement une fonction de hash, et c’est de là que vient le problème. Si on désactive cette fonction de hash au moment de la génération du fichier compilé .mo, les traductions s’effectuent correctement. Voilà la commande à appliquer:

msgfmt –no-hash –output-file=fichier.mo fichier.po

La désactivation de la fonction de hash a l’inconvénient d’amener un perte de rapidité de traduction, mais au moins celle-ci s’effectue correctement.

Serait-ce un bug de GetText? Avez-vous été confronté à ce problème?

De plus si la traduction se fait vers une langue qui possède aussi des accents (le français par exemple), il se peut que ceux-ci se traduisent mal et qu’un caractère ‘?’ soit inséré en lieu et place du caractère accentué. L’utilisation de l’encodage en UTF-8 est indispensable. Dans le cas de PHP, la configuration GetText de l’application devrait être la suivante:

putenv (’LANGUAGE=fr_FR’);
setlocale(LC_MESSAGES, ‘fr_FR’);
bindtextdomain (’nom_domaine’, mon_repertoire_de_langue);
bind_textdomain_codeset (’nom_domaine’, ‘UTF-8′);
textdomain(’nom_domaine’);

  • Mes Visiteurs

  • Mes Photos

    • This is a Flickr badge showing public photos and videos from mfavez. Make your own badge here.
    •  
  • Mes vidéos


    •  
  • Ma Musique

    •  
  • Mes profils

    • Mon blogasty  Mon bloglog  Mon cocomment  Mon delicious  Mon flickr  Mon youtube  Mon twitter  Mon jaiku  Mon facebook  Mon plaxo  Mon friendfeed  Mon wikio  Mon xing  Mon linkedin  Mon lastfm  Mon technorati  Mon ziki   
    •  
    • TwitterCounter pour @mfavez
    • Mes Liens