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

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