[Python-es] Traducir correctamente aplicación con gettext bajo windows.

manuelcortez manuelcortez00 en gmail.com
Jue Mayo 2 08:15:43 CEST 2013


Hola a todos,

Ahora escribo por aquí para pedir un poco de ayuda porque tengo un 
problema con la traducción de una aplicación en Python, que se supone 
debería funcionar bajo un entorno Windows. Paso a explicar.

Hace dos o tres meces, para un centro al que colaboro, empecé a hacer 
una aplicación de asistencia para practicar la dactilografía [escritura 
en el teclado con los dedos de las dos manos]. Hoy intenté ver si podía 
traducirlo, porque en principio solo lo escribí pensando en el español. 
La aplicación es multiplataforma, aunque tiene variaciones (en Windows 
usé PyGtk2.24 y en GNU/Linux Gtk+3 con GObject). El problema, es que 
nada de lo que he hecho funciona en lo más mínimo. Se supone que las 
traducciones están creadas, y se encuentran en la carpeta locale de la 
aplicación. Solo traduje un mensaje, para ver si me funcionaba, y parece 
que no hay caso.

Hice lo siguiente, en este orden:
Primero, en la parte de la aplicación que despliega la interfaz gráfica, 
puse estas líneas, según leí en esta dirección [1]:
import gettext
gettext.textdomain("app")
gettext.bindtextdomain("app", "./locale")
_ = gettext.gettext

Luego, en uno de los mensajes (realmente fue uno bastante al azar, el 
primero que vi), intenté probar esto, haciendo _("message"), con lo que 
según entiendo, se marcan las cadenas para traducción.

Después usé un script por línea de comandos que descargué de este 
proyecto [2], el cual modifiqué para que me generara la plantilla de 
traducción para el programa con PyGettext. Se generó bien. Luego, el 
archivo para traducir ese mensaje al español lo hice con este comando:
msginit -i messages.pot -o es.po
Igual que el anterior, todo fue sin problemas. Eso sí, por motivos que 
aún desconozco, tuve que establecer la codificación del archivo como 
cp1252 porque así toma las cadenas el programa.
Una vez todo estuvo listo, y el único mensaje traducido, con esto creé 
el archivo que la máquina ha de leer:
msgfmt es.po -o locale/es/LC_MESSAGES/app.mo

Coloco este directorio en la misma carpeta donde están los demás 
archivos de la aplicación, intento abrirla, pero sale el mensaje en 
inglés, como si es que no existiera la traducción. El windows está 
configurado en español, y no sé exactamente qué de todo esto estoy 
haciendo mal para que no funcione como se espera.

Ya intenté también copiar el directorio es como es_ES y es_MX, incluso 
los tres al mismo tiempo, y en la llamada a gettext.bindtextdomain() 
cambiar de "./locale" a solo "locale" y a "/locale", pero nada.

¿Alguna idea?

Gracias y saludos.
Manuel.

[1]: 
http://pythonmania.wordpress.com/2008/09/10/traducir-aplicaciones-en-python/
[2]: http://bitbucket.org/stickbear/twitmonger



Más información sobre la lista de distribución Python-es