2009-03-29 4 views
2

Je suis une application internationalisant Python, avec deux objectifs en tête:Quelle est la meilleure façon d'internationaliser une application Python avec plusieurs domaines i18n?

  1. Les charges d'application des classes de plusieurs paquets, chacun avec son propre domaine i18n. Ainsi, les modules du paquet A utilisent le domaine A, les modules du paquet B utilisent le domaine B, etc.

  2. Les paramètres régionaux peuvent être modifiés pendant l'exécution de l'application.

Module de Python gettext fait internationalisant un seul domaine application seule langue très facile; vous venez de définir les paramètres régionaux, puis appelez gettext.install(), qui trouve le droit Translation et installe sa méthode ugettext dans l'espace de noms global comme _. Mais évidemment, une valeur globale ne fonctionne que pour un seul domaine, et comme il charge un seul Translation, il ne fonctionne que pour cette locale.

Je pourrais au lieu de charger le Translation en haut de chaque module, et lier sa méthode ugettext comme _. Ensuite, chaque module utiliserait le _ pour son propre domaine. Mais cela se casse toujours lorsque les paramètres régionaux sont modifiés, car _ est incorrect.

Donc je suppose que je pourrais charger le ugettext correct au début de chaque fonction, mais cela semble terriblement lourd. Une alternative serait de toujours le faire par module, mais au lieu de lier ugettext, je substituerais ma propre fonction, ce qui permettrait de vérifier les paramètres régionaux actuels, obtenir son Translation, et de transmettre la chaîne à elle. Est-ce que quelqu'un a une solution plus propre?

Répondre

2

que diriez-vous liez _ à une fonction à peu près comme celui-ci (pour chaque module):

def _(message): 
    return my_gettext(__name__, message) 

Cela vous permet d'utiliser gettext tout en même temps effectuer une recherche sur un par module-per- call-base qui vous permet également de changer de locale.

Questions connexes