Uso de Translate Toolkit con extensiones de Mozilla

Este documento es una continuación del documento sobre el sistema de traducción de extensiones, que contiene la información sobre la instalación de básica y que se aplica en su totalidad a ese documento, con la excepción de lo relativo a la herramienta utilizada para traducir.

Los scripts que se mencionan en este documento se encuentran junto con los otros scripts que conforman el sistema.

  • Versión de este documento: 0.1
  • Autor: Oscar Manuel Gómez Senovilla
  1. Introducción
  2. Ventajas
  3. Memorias de traducción
  4. Instalación de Translate Toolkit
  5. Uso de las herramientas con productos Mozilla
  6. Uso de programas específicos

Introducción

El Translate Toolkit del proyecto Pootle es un conjunto de herramientas que tienen como objetivo integrar los sistemas de traducción bajo un estándar abierto de forma unificada. El software Pootle, en concreto, es una interfaz web para traducir en línea, y que nosotros no vamos a usar (al menos de momento, quién sabe lo que ocurrirá en un futuro, nunca digas "de este agua no beberé"). Del conjunto de herramientas de Pootle, las que nos interesan forman parte del "Translate toolkit", y dentro de éstas, las herramientas de conversión y filtrado de los ficheros utilizados por Mozilla, que son en su mayoría (a veces en su totalidad) dtd y properties.

La herramienta "Translate toolkit" es un conjunto de librerías escritas en el lenguaje de programación python que se pueden ejecutar desde cualquier entorno, siendo el preferido y mejor preparado bash, para el cual hay scripts que simplifican distintas tareas. El objetivo de estas librerías es proporcionar un entorno libre de traducciones de software, que no está sujeto a ningún programa específico. Se basa en el formato po, que son ficheros de texto conteniendo la cadena original y la cadena resultante traducida. En nuestro caso, lo que haremos será usarlas para convertir los ficheros .dtd y .properties en inglés a formato po para poder usar una de las muchas herramientas existentes para manejar ficheros .po, y después de la traducción, volver a exportar los ficheros .po traducidos a su formato original para crear el instalador correspondiente. Nota: el formato po tiene un sucesor, xliff, pero está en proceso de transición y a día de hoy apenas hay herramientas que manejen xliff.

En este documento se van a explicar conceptos genéricos sobre las traducciones, asi como técnicas de traducción (no puede ser de otro modo si tenemos herramientas que utilizan formatos comunes). También se intentará exponer un abanico global de aplicaciones que se pueden usar (con algún inciso extra). Finalmente, se tratarán algunos programas específicos, para ver un uso práctico de algunas aplicaciones.

Ventajas

  • Uso de un formato libre, (.po), que está soportado por múltiples aplicaciones en distintas plataformas.
  • Fácil importación y exportación mediante scripts, unificada de forma independiente del programa usado.
  • Los glosarios no se limitan al conjunto de cadenas existentes, sino que se puede buscar en una base de datos obtenida de otras traducciones.
  • Uso de memorias de traducción.
  • Se puede ampliar el glosario a partir de otros existentes en Internet
  • Se puede realizar la traducción viendo el contexto
  • Posibilidad de corrección ortográfica según se escribe
  • Se conserva la licencia original y cualquier otro comentario existente de cara a los traductores

Memorias de traducción

Las memorias de traducción es un concepto que vienen usando desde hace tiempo por los traductores profesionales, así como en muchos proyectos de traducción de software. El objetivo es compartir las traducciones entre programas, mediante la reutilización de las traducciones realizadas, intentando evitar las repeticiones de términos, así como la homogeneización a la hora de traducir los mismos términos.

A la hora de implementar memorias de traducción, el formato más estandarizado es el TMX. Para compartir traducciones, TMX usa una especificación basada en etiquetas XML. Hay distintas versiones de la especificación, y es tarea de cada herramienta de traducción implementar el soporte para memorias TMX. Por ello, aparte de intentar elegir una herramienta que pueda realizar búsquedas en una memoria TMX existente, y mediante la configuración adecuada en cada caso, intentaremos que las traducciones realizadas en un producto o extensión queden "automáticamente" disponibles para otros productos o extensiones. Si el programa elegido no soporta tmx, seguramente podrá usar un fichero po como compendio.

Técnicas comunes para realizar el proceso de traducción

Si la aplicación elegida usa memorias de traducción (bien en tmx, bien en po), tendremos que acostumbrarnos al término "fuzzy" (dudoso), que será lo que normalmente nos ayudará a la hora de buscar en el texto existente. Seguramente podremos definir en las preferencias de la aplicación detalles relativos a las palabras dudosas, como puede ser el porcentaje de similitud necesario como para que una palabra o frase pueda ser considerada lo suficientemente válida como para ser ofrecida como sugerencia. Esto tiene dos utilidades: ver si la cadena coincide completamente (un caso ideal, puesto que sólo tendríamos que trasladar la cadena ofrecida al recuadro de traducción), o ver aproximaciones. Esto último sirve para intentar hacer una traducción lo más homogénea posible de los mismos términos a lo largo de la traducción. Dos frases no tienen por qué ser idénticas, pero sí pueden incluir alguna palabra clave que nos interese ver cómo se tradujo anteriormente. En cualquier caso, también podemos utilizar las herramientas de búsqueda que tenga integradas la aplicación.

Independientemente de la aplicación utilizada, intentaremos configurarla teniendo en cuenta otros aspectos como:

  • El juego de caracteres siempre es utf-8
  • Desactivar la compilación o generación de archivos .mo (los productos mozilla no usan .mo, a diferencia de la mayoría
    de programas libres).
  • Los ficheros po suelen llevar cabeceras con información sobre el fichero. Si existe la posibilidad de indicarlos, o la
    aplicación solicita datos, intentar poner éstos:
    • Nombre: <tu nombre="">
    • Correo:
    • Correo de la lista: nave_at_elistas.net # sustituir "_at_" por "@"
    • Zona horaria: CEST
    • Nombre completo del idioma: Spanish (Spain)
    • Idioma: es-ES # puede ser también "es" si presentase algún problema con la aplicación
    • Plurales: "nplurals=2; plural=(n != 1);" # sin comillas dobles

En cualquier caso, se intentará proporcionar ficheros a modo de plantilla con unos datos mínimos ya introducidos y que se repitan en cada traducción, para evitar errores y dedicar tiempo a repetir estos datos.

Un último detalle: para que funcione la plantilla, en el directorio raíz de la extensión, tendremos un enlace simbólico llamado "ACTUAL" (en mayúsculas) apuntando al directorio de la versión que vayamos a traducir. Esto se hace desde el directorio raíz de la extensión con ln -sf <dir_version_actual> ACTUAL.

Instalación del "Translate Toolkit"

Necesitamos tener las librerías de desarrollo de python (mínimo 2.3) instaladas en el sistema (existe un paquete para Windows ). Después, necesitas descargar la última versión de aquí. Este último paquete lo descomprimes en un directorio temporal, y dentro de este directorio, ejecutas ./setup.py install --home=/dir/destino (el argumento --home es opcional, que sólo es necesario si no eres root o no tienes permiso de escritura en un directorio del path). En mi caso, he preferido hacer la instalación como usuario (para hacer más fáciles las actualizaciones), y he puesto --home=/home/oscar/MT/translate. Luego, he creado un fichero vars.inc.sh dentro de este directorio cuyo contenido es éste:

========== vars.inc.sh ===========
#!/bin/bash
# Script to be included in scripts to set paths
INSDIR=~/MT/translate
PATH=$INSDIR/bin:$PATH
export PYTHONPATH=$INSDIR/lib/python
convert=$PYTHONPATH/translate/convert
# This is just to be aware of the version
moz2po --version
======== fin vars.inc.sh =========

Deberemos incluir este script en los scripts que ejecutemos sólo si hemos indicado la opción --home al instalar, y que necesiten usar las herramientas. Esto lo hacemos con . ~/MT/translate/vars.inc.sh, al principio, ajustando el valor de $INSDIR con la ruta adecuada en cada caso.

Uso de las herramientas con productos mozilla

He intentado simplificar al máximo el asunto, y creo que lo he conseguido, ya que sólo son necesarios dos scripts para hacer un proceso de traducción compatible con los productos Mozilla, ambos en el mismo directorio que el XPI_lang.sh:

Después, desde el directorio de trabajo, necesitamos que haya enlaces a estos scripts (ya están incluidos en _PLANTILLA, por lo que no deberín ser necesario crearlos), que hacemos con ln -s ../../moz2po.sh y ln -s ../../po2moz.sh. Luego procedemos a preparar el directorio de trabajo con los ficheros originales tal y como se describe en el documento de traducción de extensiones. Con esto, ya sólo nos queda hacer los preparativos específicos para crear los ficheros .po.

Preparar los ficheros a traducir

Vamos a preparar lo necesario para que en el directorio po/es-ES se creen o guarden los ficheros con los que vamos a  trabajar. Lo primero es tener unos "ficheros de plantilla" (.pot), que son el conjunto de cadenas a traducir, pero sin ningún idioma asociado. El objetivo es que sirvan para cualquier idioma. Esto lo hace automáticamente el script moz2po.sh, independientemente de las opciones empleadas, dejando los ficheros en pot/en-US.

Importar una traducción anterior

El script moz2po.sh tiene la misión de convertir los ficheros de mozilla a formato po. Acepta como argumentos un directorio de versión anterior y una cadena indicando el idioma de destino, ambos opcionales (el idioma prederminado lo he dejado fijado en es-ES). Por ello, si tenemos la versión (más concretamente el directorio) "0.5" traducido y deseamos importar la traducción existente para no empezar de cero, ejecutamos ./moz2po.sh 0.5, lo que nos crea el directorio po/es-ES con los ficheros importados y convertidos a la versión actual.

Empezar una traducción nueva

Si es la primera versión que vamos a traducir y no tenemos una traducción anterior que importar, ejecutamos ./moz2po.sh y ya se crea el directorio po/es-ES preparado para empezar a traducir desde cero. Si existe el directorio jar/locale/es-ES/, se intentan importar las cadenas existentes.

Traducción de cadenas con Translate toolkit

Como se expuso anteriormente, existen varias herramientas que pueden manejar archivos .po. Vamos a citar algunas (la lista está sacada de http://translate.sourceforge.net/wiki/guide/tools/list):

Otras herramientas que no admiten po, pero pueden ser igualmente útiles:

  • OmegaT. Aplicación desarrollada en Java
  • Hoja de cálculo (OOo calc, MS Excel, y cualquiera que soporte csv). Instrucciones en inglés.
  • Como último recurso, siempre existen editores de texto:
    • Bloc de notas (Win32) Ojo, guardar en utf-8.
    • Cualquier editor de texto que soporte utf-8.

Creo que de todas ellas, la más fácil de usar es KBabel, que es la que yo he usado más. Poeditor y GTranslator funcionan a nivel de fichero (lo cual no es malo en sí), lo que impide tener una visión más global del progreso de la traducción. Voy a exponer los conceptos sobre los cuales se asienta KBabel, que espero sean aplicables a todos los demás.

Uso de programas específicos

Vamos a detallar el uso de algunos programas. Esperamos poder ampliar esta lista con las sugerencias que vayamos recibiendo. En este instante, tenemos KBabel, poEdit e IniTranslator.

KBabel

KBabel es una herramientas de las muchas existentes para edición de archivos .po. Quizá sea la que mejor los maneja, lo que le dota de una gran potencia, pero para nuestras necesidades sólo vamos a necesitar una pequeña cantidad de las opciones disponibles, a las cuales intentaré ceñirme.

Al menos para kbabel, se proporciona un fichero de plantilla que, editándolo, ya tiene estos detalles. Inicialmente, para tener una plantilla personal adecuada, habrá que sustituir en el fichero _PLANTILLA/extension.kbabel, el nombre y dirección de correo (para no repetirlo con cada extensión nueva). Después ya se puede copiar al directorio de la extensión, donde se sustituye la cadena "@@EXTENSION@@" por el nombre del directorio actual. En el caso de la extensión fireftp, el fichero resultante se llamaría fireftp.kbabel, y la sutitución sería con sed s/@@EXTENSION@@/fireftp/g extension.cfg > fireftp.kbabel. Después, se puede borrar el fichero extension.cfg del directorio de la extensión.

El administrador de catálogos

Ejecutamos el administrador de catálogos de KBabel (está en el menú K -> Desarrollo). Desde aquí, vamos a gestionar nuestro proyecto, para lo que vamos al menú Proyectos -> Abrir, y elegimos nuestro fichero que acabamos de crear desde la plantilla. Después de abrirlo, debe ir a la pantalla principal del gestor de catálogos. Sobre los detalles de todas las opciones, KBabel tiene una ayuda extensa al respecto, que no se va a reproducir aquí, salvo los detalles necesarios más básicos.

En la pantalla del gestor de catálogos deberías ver, quizás tras esperar unos segundos en lo que se leen los directorios, el estado de la traducción de todos los ficheros implicados en la traducción. Según vas destapando secciones, aparecen a nivel de fichero los estados, donde conviene centrarse en las cadenas sin traducir y en las dudosas (fuzzy). Si el icono de un directorio es verde, es que en su interior todas las cadenas están traducidas y no hay cadenas dudosas. Si hay alguna cadena sin traducir o dudosa, entonces el icono será rojo. De esta forma, podemos saber si hay alguna cosa pendiente. Para editar un fichero, hacemos doble clic en el mismo, con lo que se se abre el editor de KBabel con el fichero para poder editarlo.

El editor de KBabel

El editor consta de varios espacios en la ventana. Un recuadro no editable en la parte superior izquierda, que contiene la cadena original en inglés (msgid); otro editable en la parte inferior izquierda, que es donde escribimos la cadena traducida (msgstr). En la parte superior derecha, vemos los comentarios existentes en el fichero de origen relativos a la cadena actual, y que conviene tener a la vista para ver advertencias que puedan ser útiles en muchos casos sobre los valores o no que puedan tomar ciertas cadenas. En la parte inferior derecha, una serie de pestañas con distintas opciones, entre las que destaca la de "Contexto de PO", donde podremos ver un extracto del contenido del fichero en la zona donde se encuentra la cadena actual. En la parte inferior tenemos la barra de estado, que nos indica el número de la cadena actual en el fichero, el número total de cadenas del fichero, el número de cadenas dudosas y las no traducidas. En la parte superior del cuadro editable, tenemos tres rectángulos que están en rojo si la cadena es dudosa, no está traducida o contiene un error.

Para traducir, normalmente introduciremos el texto en el recuadro de traducción, y podemos pasar de uno en uno, ir a la siguiente cadena dudosa o no traducida. Cuando estemos en una cadena dudosa y comprobemos que la traducción es correcta, podemos pulsar Ctrl+U para quitar la marca de dudosa (con lo que veremos que en la parte de comentarios se quita la línea de "fuzzy"). La mayoría de acciones también se pueden realizar desde los menús Editar e Ir, en donde puedes ver las opciones y las teclas de acceso rápido equivalentes, para mayor comodidad.

Al terminar de realizar los cambios, pulsas el icono de Guardar, y así ya tienes guardado el fichero, y se actualiza la ventana del administrador de catálogos. No necesitas cerrar el editor, pudiendo volver al administrador de catálogos para ver el siguiente fichero que quieras editar, que pasaría a ocupar la ventana abierta del editor en lugar del fichero anterior, y así hasta el final.

poEdit

PoeEdit es un editor sencillo de ficheros po, muy útil y ligero para el sistema. Es multiplataforma, ya que funciona en Unix y Windows, y hay una versión alpha para MACOSX.

Instalación

La última versión disponible es la 1.3.4, que puedes descargar de
la página de descargas de poedit en sf.net.

Para Debian Sarge, o dejas la 1.3.1 que viene, o actualizas mediante este poEdit y esta librería. Para otras distribuciones, o buscas en los repositorios adecuados, o puedes convertir con los ficheros de debian con alien a rpm o tgz (mejor este último).

Uso de poEdit

PoEdit, al igual que KBabel, usa un sistema de catálogos de para cada proyecto. Por ello, nos aparecerá el gestor de catálogos de poEdit al ejecutarlo. La primera vez, nos avisa de ello y nos pide unos datos, que intentaremos se ajusten a lo especificado más arriba en técnicas comunes.

Proyectos de traducción con poEdit

En el gestor de catálogos tendremos que crear o editar un proyecto de traducción. Para crearlo, pulsamos el botón de la izquierda, donde aparece un texto de ayuda indicando la función del botón. Introducimos el nombre descriptivo del proyecto y elegimos el directorio (que será el directorio ACTUAL/po/es-ES/ de la extensión que queramos). Al pulsar el botón Aceptar, se cargarán los ficheros po existentes en el directorio (resultado de haber ejecutado previamente el script moz2po.sh).

Edición de ficheros con poEdit

Una vez cargados los archivos, en la ventana derecha del gestor de catálogos se nos muestra la estadística del estado de cada fichero (posiblemente tengamos que redimensionar alguna columna), jugando con los colores rojo, amarillo y verde según las cadenas traducidas y dudosas. Una vez visto el estado de cada fichero, vamos editando los que tengan algún problema (obviamente, también podemos revisar los que en teorí están correctos), haciendo doble clic en cada fichero. Como pista, el icono que acompaña a cada fichero tienes dos valores posibles: verde (todas las cadenas están traducidas) o amarillo (falta alguna cadena por traducir, o hay cadenas dudosas).

Al abrir el fichero elegido en el editor, sobre todo si es la primera vez, es posible que a pesar de estar aparentemente todo o casi todo correcto, las líneas estén resaltadas en rojo. No es imprescindible arreglar esto, pero se puede conseguir quitar el color rojo yendo el menú Catálogo, opción Opciones, y rellenamos la pestaña "Información de proyecto" con estos datos:

A continuación, vamos al menú Catálogo y elegimos "Actualizar desde archivo POT", y elegimos el mismo fichero que estamos editando, pero en el directorio pot/en-US. Al pulsar Aceptar, ya debe quitarse el color rojo, aunque puede quedar alguna cadena que, o esté dudosa o mal.

En la parte inferior del editor tendremos cuatro recuadros, siendo los de la parte izquierda la cadena original (el de arriba) y la cadena traducida (el de abajo). En la parte derecha se pueden ver los comentarios automáticos (arriba) y los introducidos por el programador para la cadena en cuestión, los cuales son muy ótiles para conocer detalles necesarios para poner ciertos valores en ciertas cadenas.

La interfaz del editor nos permite tener información sobre varios aspectos:

  • Podemos saber si una cadena tiene un comentario si en la parte superior, junto a la cadena en inglés, aparece a la izquierda un icono de un lápiz.
  • Podemos saber la etiqueta original de una cadena pulsando con el botón derecho sobre la misma en la mitad superior de la ventana.
  • Se puede marcar o desmarcar una cadena como provisional pulsando Alt+U, o yendo al menú Editar -> Traducción provisional. Esto pone un fondo amarillo pálido a la línea en cuestión.
  • Cuando una cadena que ha sido modificada, se pone un círculo verde junto a la cadena en cuestión.
  • Cuando se ha realizado alg´n cambio en el documento y no se ha salvado, en el título de la ventana aparece al final la cadena "(modificado)".
  • En la barra de estado de la parte inferior, podemos ver un resumen con el número de cadenas del fichero, las provisionales, las erróneas y las que están sin traducir.
  • Hay varias opciones que se pueden activar o desactivar desde el menú Ver, al gusto de cada uno. Una es la de mostrar las comillas dobles o no.

Cuando se acaba con cada fichero, se guarda (también se guarda la configuración en cada fichero individual), y conviene cerrar la ventana del editor porque poEdit no reutiliza la ventana del editor para cada fichero, sino que abre una ventana nueva.

IMPORTANTE: En la pantalla del gestor de catálogos, si pulsamos el botón de actualizar todos los archivos, lo más normal es que perdamos la traducción, así que cuidado con pulsarlo.

Memorias de traducción con poEdit

El uso de memorias de traducción es posible con poEdit. Para ello, desde el gestor de catálogos, elegimos Archivo -> Preferencias, y vamos a la pestañ de Traducciones memorizadas. Elegimos directamente el botón de generar la base de datos, damos a siguiente y elegimos manualmente ficheros po que tengamos (podemos hacer selecciones múltiples pulsando mayúsculas), repitiendo el procedimiento las veces que sea necesario hasta considerar que tenemos lo que queremos en nuestra base de datos.

La ayuda de poEdit explica por qué no funciona (con es-ES) la exploración de directorios para las memorias de traducción, junto con otros temas relativos al uso y configuración de poEdit.

IniTranslator

Introducción

Initranslator es una herramienta para Windows, y que realiza una traducción sencilla de cadenas. Admite varios formatos de entrada y varios de salida, entre los que están .dtd, .properties y .po. Con la intención de unificar criterios utilizaremos siempre .po.

Precisamente por su sencillez, initranslator no tiene la capacidad de crear un proyecto, por lo que tendremos que ir traduciendo los ficheros uno a uno. Para ello, vamos al menú File-> Import, y elegimos importar desde PO. Si se empieza desde cero, entonces tendremos que usar los ficheros de pot/en-US/, y si ya tenemos una traducción (o parte de ella), entonces importamos desde po/es-ES/. No abrir ficheros po/pot desde el menú File desde otra opción que no sea la de importar, ya que se tratará el fichero como si fuera de texto y no tendremos los resultados deseados.

Traducción con IniTranslator

La traducción se realiza en la parte inferior, en donde editamos el texto. Para pasar a la siguiente cadena sin traducir, pulsamos Ctrl+U.

Dentro de la limitación de IniTranslator, puede ser una buena idea al empezar una traducción de un fichero. Para ello, vamos al menú Dictionary-> Load dictionary, y elegimos el diccionario en_sp.dct (también puedes hacer una copia del mismo y trabajar con ésta). Después, elegimos la opción del menú Dictionary -> Translate using dictionary (Ctrl+Alt+T), para que al menos se rellenen huecos, que posteriormente revisaremos. Aparentemente, cuando una cadena ya está traducida, la traducción automática respeta lo que se ha puesto. Para diferenciar si una cadena está traducida, veo tres formas: 1) La parte de la traducción está en blaco; 2) Las cadenas sin traducir tienen un icono, en su parte izquierda, que contiene una especie de explosión en rojo, a diferencia de las traducidas, que no lo tienen; 3) La línea de la cadena traducida está en blanco, mientras que si no está traducida, tiene un tono gris claro.

Cuando se acaba de traducir un fichero po, tenemos que exportarlo desde File-> Export, elegir po como formato y se exporta en el directorio "po/es-ES/", exactamente con la misma estructura que tiene el directorio "pot/en-US/" (tenemos que crear el directorio manualmente si no existe). Después, importamos el siguiente fichero, y así sucesivamente hasta tener todos los ficheros traducidos.

La estrategia de reutilización de traducciones anteriores consiste en añadirlas al diccionario. Para añadir una frase al diccionario, pulsamos Ctrl+Alt+A (o el botón derecho del ratón y la opción "Add to dictionary") para añadir esa frase al diccionario. IMPORTANTE: las frases nuevas se quedan en la memoria, y si no las guardamos en el disco, las perderemos al salir de la aplicación. Para ello, vamos al menú Dictionary-> Save dictionary (o pulsamos Ctrl+Alt+S) y sobreescribimos el elegido (el que estábamos usando).

Por último, IniTranslator tiene una buena ayuda en línea, que siempre es aconsejable mirar para sacar el mayor rendimiento posible del programa.