2010-09-09 4 views
7

Ce morceau de code particulier fonctionne très bien sur Linux, mais pas sous Windows:Python: gettext ne se charge pas de traductions sur Windows

locale.setlocale(locale.LC_ALL, '') 
gettext.bindtextdomain('exposong', LOCALE_PATH) 
gettext.textdomain('exposong') 

code de here

Même si je spécifie les paramètres régionaux dans locale.setlocale (j'ai essayé différents formats) ça ne marche pas. Un problème peut être que les paramètres régionaux ne sont pas définis dans les variables d'environnement (mais j'utilise une version Windows allemande, testée sur XP et Vista). Si je fais "Set Lang=de_DE" sur la ligne de commande, tout fonctionne comme prévu.

Des idées?

Répondre

8

module standard gettext en Python n'utilise pas paramètres de langue startdard de paramètres Windows, mais repose sur la présence d'une des variables d'environnement: LANGUAGE, LC_MESSAGES, LC_ALL ou LANG. Les variables d'environnement mentionnées ci-dessus ne se présentent pas sur une machine Windows standard, car OS Windows et les applications natives utilisent les paramètres du registre à la place. . Vous devez donc obtenir les paramètres de langue du registre Windows et les mettre dans l'environnement de processus.

Vous pouvez utiliser mon module d'aide pour cela: https://launchpad.net/gettext-py-windows

Cette aide obtient les paramètres de langue de paramètres Windows et définir la variable LANG pour le processus en cours, de sorte gettext peuvent utiliser ces paramètres. Par conséquent, si l'application en question ne vous appartient pas, vous pouvez procéder comme suit. Installez mon assistant gettext comme d'habitude avec python setup.py install. Ensuite, ajoutez ces lignes avant :

import gettext_windows 
gettext_windows.setup_env() 

C'est tout.

+0

Excellent travail! Je vais essayer d'intégrer cela dans le projet ASAP (la question est de mon autre développeur). – bradlis7

+0

@ bradlis7 vous êtes les bienvenus :-) La licence de mon assistant gettext_windows est très permissive (MIT) donc vous pouvez simplement la fusionner avec votre base de code et la mentionner dans votre readme. Ainsi, l'utilisateur n'aura pas besoin d'installer une autre dépendance de bibliothèque séparée. – bialix

6

L'explication de l'utilisateur bialix est correcte. Mais au lieu d'utiliser un autre module cela a fonctionné pour moi:

if sys.platform.startswith('win'): 
    import locale 
    if os.getenv('LANG') is None: 
     lang, enc = locale.getdefaultlocale() 
     os.environ['LANG'] = lang 

C'est, obtenir les paramètres régionaux à partir du module d'environnement local et définir la variable d'environnement.

Testé uniquement sur Windows 7, veuillez le vérifier sur d'autres versions avant de l'utiliser.