i18n python localization internationalization translation

i18n - gettext python



La forma más fácil de generar archivos de localización. (7)

¿Me escapa cómo quieres lograr una traducción real sin editar los archivos .po para cada idioma? ¿Mágico?

Editar (después del comentario): cómo automatizar la generación de los archivos .po :

No uso Gettext, pero desde la página wiki parece que solo tienes que llamar

msginit --locale = xx --input = name.pot

para cada idioma que quieras apoyar. Generaría un script que generara todos los archivos de idioma, se los entregaría a los traductores y, cuando los recupere, ejecute msgfmt en ellos.

Actualmente estoy escribiendo una aplicación en Python y necesito proporcionarle localización.

Puedo usar gettext y las utilidades que vienen con él para generar archivos .po y .mo. Pero la edición de los archivos .po para cada idioma, uno por uno, parece un poco tediosa. Luego, crear directorios para cada idioma y generar los archivos .mo, uno por uno, parece una exageración. El resultado final es algo como:

/en_US/LC_MESSAGES/en_US.mo /en_CA/LC_MESSAGES/en_CA.mo etc.

Podría estar equivocado, pero parece que tiene que haber una mejor manera de hacer esto. ¿Alguien tiene alguna herramienta, truco o conocimiento general que no haya encontrado todavía?

¡Gracias por adelantado!

EDITAR: Para ser un poco más claro, estoy buscando algo que acelere el proceso. ya que es bastante facil Por ejemplo, en .NET, puedo generar todas las cadenas que deben traducirse en un archivo de Excel. Luego, los traductores pueden completar el archivo de Excel y agregar columnas para cada idioma. Luego, puedo usar xls2resx para generar los archivos de recursos de idioma. ¿Hay algo así para gettext? Me doy cuenta de que podría escribir un script para crear y leer desde un csv y generar los archivos; solo esperaba que ya hubiera algo hecho.


Acabo de hacer esto para un proyecto en el que estoy trabajando, para nosotros el proceso es así:

Primero, tengo un archivo POTFILES.in que contiene una lista de archivos de origen que necesitan traducción. En realidad, tenemos dos archivos (por ejemplo, admin.in y user.in), ya que la interfaz de administración no siempre necesita traducción. Así que podemos enviar a los traductores solo el archivo que contiene las cadenas que ven los usuarios.

Ejecutar el siguiente comando creará una plantilla .pot desde POTFILES.in:

xgettext --files-from=POTFILES.in --directory=.. --output=messages.pot

Ejecute el comando anterior desde el directorio po /, que debe ser un subdirectorio de su proyecto y debe contener el archivo POTFILES.in. El archivo .pot tiene exactamente el mismo formato que un archivo .po, pero es una plantilla que no contiene traducciones. Usted crea una nueva plantilla cada vez que se agregan nuevas cadenas traducibles a sus archivos de origen.

Para actualizar los archivos .po ya traducidos y agregarles nuevas cadenas, ejecute:

msgmerge --update --no-fuzzy-matching --backup=off da.po messages.pot

En el ejemplo anterior, deshabilito la coincidencia difusa, ya que nuestras cadenas son un desastre y causaron más daño que beneficio. También deshabilité los archivos de copia de seguridad, ya que todo está en subversión aquí. Ejecute el comando anterior para cada idioma, en este caso actualicé la traducción al danés.

Finalmente ejecute msgfmt para crear los archivos .mo a partir de los archivos .po:

msgfmt nl.po --output-file nl.mo

Por supuesto, no querría ejecutar esto manualmente cada vez, así que cree algunos scripts (o preferiblemente uno o más Makefiles) para hacer esto por usted.

Tenga en cuenta que el diseño de su directorio es ligeramente diferente al de mi situación, por lo que tendrá que ajustar un poco los nombres / rutas de salida, pero los pasos deberían ser los mismos.


Estoy usando poEdit para traducciones.


Mi sugerencia es django-rosetta , que le brinda una interfaz basada en la web para editar sus traducciones. Django no necesita involucrarse en absoluto con su aplicación, solo la está utilizando para una instalación de edición de .PO en línea.

Otro sitio de traducción nuevo e interesante, que creo que fue creado usando Django / Pinax es Transifex , aunque no estoy seguro de si permite la edición directa de los archivos .PO.


Puede probar el kit de herramientas de conversión para varias conversiones de archivos po (por ejemplo, po2csv). Proyectos infantiles Pootle permite gestionar traducciones a través de la web.


Puede usar Transifex , utilizado por bastantes proyectos de Python (Django, Mercurial). Tiene un editor basado en la web y un cliente de línea de comandos para la automatización y también es compatible con .NET, si eso puede ser de ayuda.

Descargo de responsabilidad: Soy el líder del proyecto Transifex.


Utilice scripts. Suponga que su código fuente está en el directorio $ SRC, así que cree el directorio $ SRC / po para los archivos i18n (pot, po, mo, etc.). Luego cree el archivo $ SRC / po / POTFILES.in donde especifique la ruta a los archivos de código fuente con llamadas a la función gettext. Puede parecer que:

[encoding: UTF-8] ./main.cpp ./plugins/list.cpp

Ahora puedes usar los siguientes comandos (dentro del directorio $ SRC):

Para actualizar los mensajes del archivo maestro.pot:

intltool-update --pot --gettext-package=messages --verbose

Para fusionar cambios de messages.pot a fr.po archivo, por ejemplo:

msgmerge -U fr.po messages.pot

Para generar el archivo mo use el comando:

msgmerge -o - fr.po messages.pot | msgfmt -c -o fr/LC_MESSAGES/programname.mo -

Por supuesto, el directorio fr / LC_MESSAGES / debe crearse antes de esa llamada, también puede eliminar fr / LC_MESSAGES / programname.mo antes de la ejecución

Para acelerar el proceso, coloque todos estos comandos en los archivos .sh correspondientes, por ejemplo.