2009-04-11 16 views
21

Actualmente estoy escribiendo una aplicación en Python y necesito proporcionarle una localización.La forma más fácil de generar archivos de localización

Puedo usar gettext y las utilidades que vienen con él para generar archivos .po y .mo. Pero editar los archivos .po para cada idioma, uno por uno, parece un poco tedioso. Entonces, crear directorios para cada idioma y generar los archivos .mo, uno por uno, parece exagerado. El resultado final es algo así como:

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

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

¡Gracias de antemano!

EDITAR: Para ser un poco más claro, estoy buscando algo que acelera el proceso. ya que es bastante fácil Por ejemplo, en .NET, puedo generar todas las cadenas que deben traducirse a un archivo de Excel. Luego, los traductores pueden completar el archivo Excel y agregar columnas para cada idioma. Entonces, puedo usar xls2resx para generar los archivos de recursos de idiomas. ¿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. Esperaba que ya hubiera algo hecho.

Respuesta

26

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

En primer lugar, Tengo un archivo POTFILES.in que contiene una lista de archivos fuente 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. De modo 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 del POTFILES.in:

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

Ejecutar el comando arriba del directorio po /, que debe ser un subdirectorio de su proyecto y contener la POTFILES. en archivo. 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 siempre que se hayan agregado nuevas cadenas traducibles a sus archivos de origen.

para actualizar los archivos ya traducidos .po y añadir nuevas cadenas a ellos, ejecute:

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

En el ejemplo anterior desactivo coincidencia aproximada, ya que nuestras cadenas son un desastre y lo hizo más daño que bien . También deshabilité los archivos de respaldo, ya que todo está en subversión aquí. Ejecute el comando anterior para cada idioma, en este caso actualicé la traducción danesa.

Finalmente ejecutar msgfmt para crear los archivos .mo de los archivos .po:

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

Por supuesto, usted no quiere ejecutarlo de forma manual cada vez que, por tanto, crear algunas secuencias de comandos (o preferiblemente uno o más ficheros Makefile) para hacer esto por ti.

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

4

¿Me elude cómo quiere lograr una traducción real sin editar los archivos .po para cada idioma? ¿Magia?

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

No consumo Gettext, pero desde el wiki page parece que es suficiente con llamar

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

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

+0

Obviamente, quiero que se editen los archivos .po, pero abrirlos uno por uno es una pérdida de tiempo increíble. ¿No hay una forma de definir TODOS los idiomas y las traducciones en una hoja de cálculo o algo así, y luego generar los archivos .po? – landyman

3

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

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

Ahora puede utilizar los siguientes comandos (dentro del directorio $ SRC):

Para la actualización del archivo maestro messages.pot:

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

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

msgmerge -U fr.po messages.pot 

Para generar mo comando use archivo:

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

Por supuesto directorio fr/LC_MESSAGES/deben crearse antes de que la llamada, también puede eliminar FR/LC_MESSAGES existente/nombrePrograma.mo antes de la ejecución

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

3

Puede probar Translate Toolkit para varias conversiones de archivos po (po2csv, por ejemplo). Los proyectos secundarios Pootle le permiten administrar traducciones en la web.

2

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

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

6

Puede usar Transifex, utilizado por bastantes proyectos de Python (Django, Mercurial). Tiene un editor basado en 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.

+0

¡Transifex es el camino a seguir! Lo usamos en http://www.bugsense.com y no podemos pensar en otra forma de administrar la localización – PanosJee

Cuestiones relacionadas