Re: gettext

Top Page

Reply to this message
Author: Miguel Moquillon
Date:  
To: guilde
Subject: Re: gettext
On Sun, Dec 12, 2004 at 05:04:29PM +0100, anne aublanc wrote:
> bonjour,
>
> Je recherche une doc simple pour utiliser gettext...
>
> Je souhaite utiliser : "use Locale::gettext;" dans des pgm perl...
>
> Ce que je n'arrive pas à trouver c'est où et comment mettre les
> traductions...

Bonjour,

J'ai déjà utiliser gettext avec des programmes en Ruby par exemple.
Je met toutes les traductions de textes dans un fichier dédié qu'inclue
les fichier du programme. Ce fichier est en faite toute une suite de
définition de variables contenant le texte de traduction. Par exemple :
toto = _( "chez les papoos" )
L'opérateur '_' est un raccourcis à la fonction 'gettext' (il y a aussi
'N_' si mes souvenirs sont bons mais je ne l'utilise pas).

Il ne faut pas oublier de préciser le domaine dans le code auquel
s'attache le programme à traduire ; dans mon cas, c'est le nom du
programme :
require 'gettext'
bindtextdomain( "monprogramme" )

Ensuite je crée un fichier po à partir de ce dernier. C'est dans ce
fichier qu'il faut écrire les traductions pour une langue donnée.
Avec Ruby, la commande est :
rgettext text.rb -o monprogramme-fr.po
Avec des programmes C/C++, python, Lisp, Java, ObjC, etc. :
xgettext text.h -o monprogramme-fr.po (par exemple).

Ensuite je transforme le fichier po en fichier exploitable par gettext,
c'est à dire en fichier mo:
rmsgfmt monprogramme-fr.po -o fr.mo
Ce fichier mo doit être placé, pour être exploitable dans le répertoire
des locales :
cp fr.mo /usr/share/locale/fr/LC_MESSAGES/monprogramme.mo
(ici le bintextdomain recherche en fait un fichier monprogramme.mo dans
la locale donnée par les variables d'environnement LC_ALL, LANG, etc.;
donc attention au nom donnée au fichier mo).

Il existe peut-être des wrappeurs à gettext en Perl commen en Ruby
(rgettext et rmsgfmt par exemple).

--
Miguel Moquillon
jabber:moqui@???, moqui@???
http://miguel.moquillon.free.fr