Traducciones de software con xgettext

Entre las responsabilidades que me ha tocado cumplir en el trabajo con Canaima GNU/Linux está la de traducir al español parte de algunas aplicaciones que aun no están traducidas. Tal es el caso de Ucumari y más recientemente software-properties-gtk.

Cada vez que me toca trabajar con esto choco con la necesidad de recordar los comandos que permiten la actualización de los archivos de traducción del programa (es el caso de los .po y .pot) por lo cual me veo dando vueltas por internet volviendo a buscar como se aplican los mismos comandos (mi mala memoria es brillante).

El comando en cuestión es:

find . -type f -name \*.py | xgettext --copyright-holder "Erick Birbe <erickcion@...>" --package-name "Ucumari" --package-version "0.1" --msgid-bugs-address "desarrolladores@..." --no-wrap -d es -j -f -

Este comando en particular es el que utilizo para actualizar los archivos de traducción (.po) cuando agrego nuevas cadenas de texto a Ucumari. La funcionalidad del mismo es recorrer recursivamente el código fuente buscando archivos de Python (.py) que son pasados como parámetro al comando xgettext el cual se encarga de buscar las cadenas de texto y pasarlas al archivo .po

La intención de este post no es explicar todas las funcionalidades de xgettext ni hacer un curso completo, solo voy a hacer referencia a los valores utilizados en el comando anterior.

En primer lugar tenemos una sentencia find que encuentra todos los archivos Python que pasa los valores encontrados a xgettext a través de una tubería (en Shell se representa con una barra |), luego encontramos el comando xgettext en sí el cual se encarga de procesar los archivos pasados por find y generar el .po para las traducciones.

La sentencia find

Como lo mencioné antes find sirve para buscar archivos en la consola, a continuación explicare los parametros usados:

. (el Punto)

Indica a find que comience a buscar a partir del directorio actual donde estamos ubicados en la consola.

-type f

Lista sólo los archivos regulares, no directorios ni otras cosas innecesarias. Se puede omitir este parámetro.

-name \*.py

Lista los archivos cuyo nombre sea cualquiera que termine en .py, es decir archivos python.

La sentencia xgettext

Este comando hace la extracción de las cadenas de texto y las coloca el el archivo .po listas para ser traducidas. Los parámetros utilizados fueron:

–copyright-holder

Indica el nombre y correo electrónico que se agregará en la cabecera de Copyright. En este caso coloqué mi nombre y correo electrónico. Se puede omitir este parámetro.

–package-name

Indica el nombre de la aplicación o paquete que está siendo traducido, en este caso yo coloqué Ucumari. Este parametro se puede omitir.

–package-version

Versión del paquete que se está traduciendo. Se puede omitir.

–msgid-bugs-address

Una dirección de correo donde las personas podrán enviar los reportes de bugs relacionados con la traducción del paquete, en este caso indico el correo de los desarrolladores de Canaima. Se puede omitir.

–no-wrap

Las líneas de traducción en el archivo son generadas de forma continua, si elimina este parámetro xgettext no permitirá que las líneas del archivo superen las 80 columnas, esto para facilitar la lectura del archivo en entornos como la consola de Linux por ejemplo. Es un parámetro opcional pero yo lo prefiero activo para facilitar la edición de las líneas.

-d o –default-domain

Indica el nombre del archivo .po que será generado como salida, en mi caso usé es que se refiere al idioma que estoy por traducir, de este modo se genera el archivo es.po

-j o –join-existing

Si ya existe un archivo .po con el mísmo nombre del archivo de salida, no lo borra sino que lo adapta a las nuevas cadenas de texto encontradas. Es decir que si nuestro archivo es.po ya contiene cadenas traducidas, estas no se perderán sino que serán dejadas intactas. Esto evitará rehacer el trabajo desde cero. Si no se coloca este parámetro el archivo es creado como un .po totalmente nuevo, es decir, sin traducciones.

-f o –files-from

Recibe una lista de los archivos que serán procesador por xgettext, se le pueden indicar de forma manual pero si son muchos como en mi caso, sería un trabajo eterno. Si le pasamos un guión como valor, entonces los archivos pueden ser leídos de la entrada estándar, gracias a esto podemos utilizar como en mi caso el comando find para que automaticamente escriba los nombres de los archvos a traves de una tubería |.

Hay mucho más detrás de todo esto. Es momento de seguir investigando.

Referencias

Traducciones de software con xgettext

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s