Traducir un programa no implica modificar su código y no es necesario saber programar para traducir un programa, cualquier persona puede hacerlo típicamente solamente hace falta saber inglés y conocer el idioma al cuál se va a traducir.
Los programas que pueden traducirse sin ser modificados se dice que están internacionalizados (i18n es un numerónimo de internationalization). Las adaptaciones a una región de un programa como puede ser una traducción se llaman localizaciones (L10n es un numerónimo de localization)[1].
Hay distintas herramientas para hacer las traducciones, la herramienta a elegir dependerá del formato usado por el desarrollador, en este documento se describe como editar los formatos:
Nota: Esta no es una guía de como escribir un programa internacionalizado, sino que es una guía de como traducir (localizar) un programa que ya tiene soporte de internacionalización.
La mayoría de los programas en GNU/Linux se suelen traducir con usando biblioteca gettext del proyecto GNU.
Hay varias formas de saber si un programa utiliza esta biblioteca.
está en:
/usr/share/locale/{idioma}/LC_MESSAGES/{nombre_programa}.mo
o si el paquete no fue instalado con apt-get en:
/usr/local/share/locale/{idioma}/LC_MESSAGES/{nombre_programa}.mo
Donde idioma es la abreviatura de algún idioma, por ejemplo: es, es_AR, en o en_US.
con la extensión .po para los distintos idiomas.
Existen distintos utilitarios para traducir estos programas, el que utilizamos en el grupo Lihuen es poedit.
Lo primero es encontrar un archivo con extensión .pot, este archivo contiene todos los strings a traducir. El archivo .pot se llama "template" y generalmente viene junto con el código fuente del programa o se puede generar automáticamente a partir del mismo.
Lamentablemente la forma de generar el .pot varía mucho de programa en programa comúnmente hay un script para generarla o un target de Makefile.
Veamos un ejemplo haciendo una traducción de tuxpaint-config, esta herramienta tiene un archivo pot en:
src/po/tuxpaint-config.pot
Creamos una traducción a partir del ".pot":
Llenamos los detalles de la traducción a conciencia (si falta alguno de los campos va a tirar errores pero puede llegar a funcionar igual).
Elegimos un nombre para la traducción, en este paso es importante poner el nombre correcto, por ejemplo si queremos escribir una traducción genérica al español debemos nombrar el archivo "es.po", para una traducción al español orientada a la Argentina el nombre sería "es_AR.po".
Para este ejemplo, dado que tuxpaint-config ya cuenta con una traducción al español genérica, escribiremos una para Argentina:
La ventana de traducción tiene varios elementos, los más básicos son el campo que muestra el texto original y el campo para escribir la traducción:
Por defecto el espacio para escribir es muy chico, pero se puede estirar haciendo clic en el borde señalado en la figura y arrastrando.
El siguiente paso es simplemente elegir la cadena a traducir en la parte superior de la ventana y empezar a escribir la traducción.
Es posible marcar una traducción como provisoria, de esa manera será fácil encontrarla en el futuro para revisarla, para esto hay que seleccionar la traducción en la parte superior de la ventana y hacer clic en el botón indicado en la figura.
Al guardar la traducción la lista de cadenas a traducir se reordena y se muestran los textos sin traducción, seguidos de las traducciones provisorias resaltadas en dorado y por último las traducciones normales.
Al guardar la traducción se genera una versión "compilada" de la traducción esta es la versión que realmente se usará, este archivo tiene una extensión ".mo".
Si estamos traduciendo un paquete de Debian es importante eliminar este archivo ".mo" antes de invocar a dpkg-buildpackage o este comando fallará notificando que no puede representar los cambios de un archivo binario.
Para programas que se compilen o empaqueten de otra forma este procedimiento puede variar, puede ser completamente automático, puede requerir que el archivo ".mo" esté presente o requerir que se edite alguna configuración o script para admitir el nuevo idioma.
Otro formato posible para los archivos de idioma es con extensión .ts.
En general si el programa está escrito con las librerías qt, lo m?as probable es que esté usando este tipo de archivos. Si se dispone del código fuente del programa, este cuenta con el directorio lang y dentro del mismo existe un archivo .ts por cada idioma traducido, por ejemplo: hotshots_cs.ts hotshots_fr.ts hotshots_pl.ts
Si el programa ya está instalado, los archivos traducidos se encuentran en el directorio: /usr/share/hotshots/locale/ pero con extensión .qm, lo cual es el archivo de idioma pero binario, es decir que no se puede visualizar directamente. Por lo tanto solamente podemos traducir a través del archivo de idioma en el código fuente de la aplicación.
La herramienta que permite trabajar con este tipo de archivo es Qt Linguist, generado en base a la librería qt. Las herramientas de Qt muestra información contextual de donde se encuentra la frase o palabra a traducir para comprender el significado exacto. Como vemos en la figura herramienta gráfica Qlinguistic cuenta con varias partes:
Una vez que empezamos a generar las traducciones nos muestra con un signo de admiración (1) los cambios no guardados, una vez que estamos seguros, para finalizar utilizamos la herramienta marcada con (2).
El archivo modificado se guarda en el mismo directorio con la misma extensión. Esta misma herramienta permite traducir otros tipos de archivos como .po, . qph, .xlf, etc.