2010-09-09 8 views
7

Esta pieza de código en particular funciona muy bien en Linux, pero no en Windows:Python: gettext no se carga en Windows traducciones

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

Código de here

aunque especifique la configuración regional en locale.setlocale (Probé con diferentes formatos) no funciona. Un problema podría ser que la configuración regional no está configurada en las variables de entorno (pero yo uso una versión alemana de Windows, probada en XP y Vista). Si hago "Set Lang=de_DE" en la línea de comandos, todo funciona como se espera.

¿Alguna idea?

Respuesta

8

módulo estándar gettext en Python no utiliza la configuración de idioma startdard de la configuración de Windows, sino que se basa en la presencia de una de las variables de entorno: LANGUAGE, LC_MESSAGES, LC_ALL o LANG. (Yo diría que esto es ejemplo de holgura portabilidad de la biblioteca de Unix/Linux a Windows.)

Las variables de entorno antes mencionados no presentan en la máquina típica de Windows, debido a sistema operativo Windows y las aplicaciones nativas utilizan la configuración de registro en lugar . Por lo tanto, debe obtener las configuraciones de idioma del registro de Windows y ponerlas en el entorno del proceso.

Puedes usar mi módulo de ayuda para esto: https://launchpad.net/gettext-py-windows

Este ayudante obtiene la configuración de idioma de la configuración de Windows y establecer la variable LANG para el proceso actual, por lo gettext pueden utilizar estos ajustes.

Por lo tanto, si la aplicación en cuestión no es suya, puede hacer lo siguiente. Instalar mi ayudante de texto gettext como de costumbre con python setup.py install. A continuación, añadir estas líneas antes locale.setlocale(locale.LC_ALL, ''):

import gettext_windows 
gettext_windows.setup_env() 

eso es todo.

+0

¡Gran trabajo! Trataré de integrar esto en el proyecto lo antes posible (la pregunta es de mi otro desarrollador). – bradlis7

+0

@ bradlis7 eres bienvenido :-) La licencia de mi gettext_windows helper es muy permisiva (MIT) así que puedes unirla a tu código base y mencionarla en tu archivo Léame. Por lo tanto, no se requerirá que el usuario instale una dependencia de biblioteca separada más. – bialix

6

La explicación del usuario bialix es correcta. Pero en lugar de utilizar otro módulo de esto funcionó para mí:

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

Es decir, obtener la localización del módulo de configuración regional y establecer la variable de entorno.

Se probó solo en Windows 7, por lo que debe comprobarlo en otras versiones antes de su uso.

Cuestiones relacionadas