Python et gettext

De Octet.ca

Cet article explique comment utiliser l'utilitaire gettext pour créer des fichiers de traduction pour des chaînes de caractères dans des fichiers python.

Les instructions sont valides pour les systèmes libres GNU/Linux.

Préparation du fichier python

Il faut identifier toutes les chaînes de caractères (string) dans les fichiers python. Toutes les chaînes de caractères doivent être enrobées avec _('...'), c'est-à-dire un appel à la fonction _().

Par exemple:

fichier = 'mylog.txt'
message = _('ceci est du texte')
fp = open(fichier, 'w')
fp.write(message)
fp.close()

Préparer chaque fichier en suivant les étapes suivantes (anglais, source: Internationalizing your programs and modules).

Quelque part dans un des fichiers python, probablement dans le fichier contenant le main, quel est la langue par défaut:

if 'LANGUAGE' not in os.environ:
   os.environ.setdefault("LANGUAGE","en")


Traduction

Vous pouvez traduire le fichier en utilisant le logiciel lokalize:

lokalize fichier.po

Création du fichier po

Pour tous les fichiers python dans le projet, executer (source):

xgettext --language=Python --keyword=_ --output=fichier.pot fichier.py
msginit --input=fichier.pot --locale=fr --output=fichier.po

La dernière commande créera un fichier "fr.po" qui sera le fichier à traduire pour la langue française.

Comment fusionner 2 fichier .po

Une fois que vous avez fait des changements sur les chaînes de caractères d'un fichier python, il est sage de ne pas refaire toutes les traductions. Il est possible de fusionner 2 fichiers, un avec les traductions originales et l'autre toute juste créé avec les champs vides:

Utiliser la commande msgmer:

msgmerge fichier1.po fichier2.po -o fichier3.po

Le fichier fichier3.po est le résultat de la fusion. L'ordre des arguments est capital. Le premier est le fichier dans lequel on veut ajouter des messages.

Aller dans lokalize et éditer le résultat. Recréer le fichier binaire.

Création d'un fichier binaire

Convertir le fichier catalogue en format texte (fichier .po) dans un fichier catalogue en format GNU binaire (fichier .mo).

C'est essentiellement la même application que le programme GNU msgfmt, cependant, c'est une implémentation plus simple. L'extension .po est implicite dans la commande, c'est pourquoi le dernier argument est simplement écrit fichier et non fichier.po.

msgfmt -o fichier.mo fichier

Ne pas effacer le fichier .po. Il sera utilisé dans des sessions futures pour fusionner les nouvelles chaîne de caractères.

Comment choisir la langue

Pour que les chaînes de caractères s'affichent dans la bonne langue, il suffit d'assigner la variable LC_ALL à la valeur voulue. Par exemple, pour avoir les messages en français:

export LC_ALL=fr

Vous n'avez ensuite qu'à démarrer l'application.