Karrigell Documentation

Version 2.2.1 13 12 05

English

15. Internationalisation

Comme les lecteurs de la documentation en anglais l'auront remarqué, je ne suis pas originaire d'un pays anglophone (je suis français, et plus précisément breton - "Karrigell" est un mot breton). J'ai donc inclus un programme pour faciliter l'internationalisation des scripts.

15.1 Introduction

La traduction est effectuée en utilisant le module gettext fourni dans la bibliothèque standard de Python. La traduction figure dans un fichier texte qui a une extension .po, dans un répertoire appelé langue/LC_MESSAGES ; dans ce fichier, le texte anglais est sur une ligne qui commence par msgid et la traduction sur la ligne suivante qui commence par msgstr. Par exemple :

msgid "Server got itself in trouble"
msgstr "Quelque chose ne va pas dans le serveur"

Ce fichier texte est transformé en un fichier binaire avec une extension .mo par un programme Python appelé msgfmt.py, écrit par Martin v. Löwis (il est inclus dans le Répertoire Serveur de Karrigell)

Dans un script, à chaque fois que vous voulez qu'un message soit traduit ans une langue donnée, au lieu de l'écrire comme une chaîne normale avec des guillemets, on l'écrit comme argument d'une fonction appelée _, de cette façon :

print _("Server got itself in trouble")

Pour que la traduction dans la langue voulue soit activée :

import gettext
t=gettext.translation(domaine,repBase,langue)
t.install()

domaine est le nom du fichier .po, repBase le répertoire dans lequel se trouve le sous-répertoire langue/LC_MESSAGES, et langue est la langue voulue

Par exemple, si la langue est "francais", que le fichier .po file s'appelle messages.po, et qu'il se trouve dans c:\Mes documents\Traductions\francais\LC_MESSAGES vous écrirez :

import gettext
t=gettext.translation("messages","c:\Mes documents\Traductions","francais")
t.install()

15.2 Programme d'internationalisation

L'utilisation de gettext seul peut s'avérer un peu lourd quand on écrit ou qu'on met au point un programme ; pour chaque nouvelle chaîne de caractères à traduire il faut recréer l'ensemble du fichier .po puis le fichier .mo sans effacer les traductions précédentes. Karrigell fournit une interface web simple pour créer et modifier les traductions de chaînes, en cachant le mécanisme sous-jacent de gettext

Pour des raisons de sécurité, ce script est réservé à l'administrateur. Un script d'authentification est exécuté, il s'appuie sur des condensés md5 stockés dans un fichier appelé admin.ini, que l'administrateur doit définir en exécutant le script k_password.py

Avec votre navigateur, appelez le script http://localhost/admin/internat.pih. Il s'ouvre sur un explorateur de répertoires avec lequel on peut accéder à tous les fichiers susceptibles de contenir des chaînes à traduire (c'est-à-dire tous les fichiers qui ont une extension .py, .pyw, .pih, .hip). En cliquant sur le nom d'un fichier une page affiche toutes les chaînes à traduire (les arguments de la fonction _()) et demande une traduction dans toutes les langues qui sont actuellement sélectionnées dans les préférences du navigateur (1). Si des traductions ont déjà été faites elles apparaissent dans les champs du formulaire

Remplissez les champs et validez le formulaire ; les traductions sont automatiquement créées ou modifiées

Vous pouvez vérifier l'effet en appelant le script que vous venez de traiter et en changeant l'ordre des langues dans les préférences

La traduction est conservée dans un fichier qui est commun à tous les fichiers d'un même répertoire. On peut aussi éditer tout le dictionnaire en cliquant sur le premier élément de la liste des scripts


(1) Sur Microsoft Internet Explorer la préférence de langue est définie par Outils/Options Internet/Général/Langues ; les langues acceptées sont sélectionnées à partir d'une liste et classées par ordre de préférence. Sur Netscape utiliser Edition/Préférences/Langues