El proyecto de traducción gnu.es Resumen Cada vez hay más proyectos de software libre desarrollados por la comunidad internacional. Sin embargo, no hay suficientes traductores que los hagan legibles en la lengua de Cervantes. El objetivo de esta charla es comentar como es el proceso de traducción utilizando la herramienta gettext y como incorporarse al grupo de trabajo de traductores al español. Esta es una forma simple de colaborar con la comunidad del software libre. Introducción El proyecto de traducción de GNU está dividido en una gran variedad de equipos, uno por cada idioma, aunque es posible hacer subdivisiones por localismos. En castellano, sin embargo, el proyecto predominante en castellano es el dirigido por el equipo GNU-es, cuya dirección electrónica es http://www2.iro.umontreal.ca/translation/registry.cgi?team=es y está compuesto principalmente por traductores españoles, aunque hay algunos latinoamericanos allí. Los programas que se traducen en este grupo son los que tienen licencia GNU y además han decidido utilizar las herramientas de traducción estandarizadas, en este caso, el programa gettext, del que hablaremos más adelante. Desafortunadamente, en el mundo del Software Libre, no suele haber recursos para la internacionalización de programas, por lo que muchos de ellos, operan únicamente en inglés. Esto representa un obstáculo muy fuerte que se debe superar para poder incrementar la masa crítica de usuarios de GNU/Linux. La internacionalización (i18n=internationalization) se refiere a modificar el código fuente del programa de tal forma que pueda ser traducido a otros idiomas y la localización (l10n=localization) se refiere a la traducción a un idioma o región. Estas localizaciones se suelen asociar a la variable de ambiente LOCALE. Para que un programa tenga el llamado soporte de idioma nativo (o NLS por sus siglas en inglés de Native Language Support), es necesario hacer varias consideraciones, primero que gettext puede traducir las cadenas de salida de programas en C y otros lenguajes, pero es necesario considerar también los scripts en Bash, Perl o AWK; también es necesario verificar que los programas que generan otros programas tales como Bison y autoconf, deben ser internacionalizados. Algunos otros programas toman información de archivos externos, tales como un RFC, si es así, también será necesario traducir dichos RFC fuente. También es necesario considerar si se deben traducir los nombres de las opciones y la respuesta a ellas. Finalmente es todo un reto traducir, además del programa, el manual que lo acompaña y sincronizarlo en cada cambio de versión. Hay dos tipos de archivos principales, los PO (.po) u Objetos Portátiles y los MO (.mo) u Objetos de Máquina, los primeros es donde se escribe la traducción y son legibles por seres humanos, los segundos sólo los pueden leer los programas. Los archivos PO se generan utilizando el programa xgettext que extrae todas las cadenas traduccibles del código fuente y luego pueden ser actualizados usando el programa msgmerge que actualiza las cadenas que cambiaron de una versión a otra. El archivo resultante tiene la extensión .pot y, a partir de allí se puede hacer la localización. Funcionamiento del gettext Fuentes originales en C ---> modo PO ---> Fuentes marcadas en C ---. | .---------<--- Biblioteca GNU gettext | .--- make <---+ | | `---------<--------------------+---------------------' | | | .-----<--- PAQUETE.pot <--- xgettext <---' .---<--- Compendio PO | | | ^ | | `---. | | `---. +---> modo PO ---. | +----> msgmerge ------> LANG.po ---->--------' | | .---' | | | | | `-------------<---------------. | | +--- Nuevo LANG.po <----------------' | .--- LANG.gmo <--- msgfmt <---' | | | `---> install ---> /.../LANG/PACKAGE.mo ---. | +---> "¡Hola mundo!" `-------> install ---> /.../bin/PROGRAM -------' Estructura de un archivo PO espacio-en-blanco # comentarios-del-traductor #. comentarios-automáticos #: referencia... #, bandera... msgid cadena-no-traducida msgstr cadena-traducida Cuando hay un comentario # seguido de una coma, quiere decir que alguno de los programas xgettext o msgmerge lo insertaron allí. Suele venir acompañado de #,fuzzy que significa que hubo un cambio ligero en la cadena de traducción original, o de #,c-format o #,no-c-format que significan que la cadena contiene un formato que entiende el lenguaje C. Hay otro tipo de entradas cuando se usan formas plurales espacio-en-blanco # comentarios-del-traductor #. comentarios-automáticos #: referencia... #, bandera... msgid cadena-no-traducida-en-singular msgid_plural cadena-no-traducida-en-plural msgstr[0] cadena-traducida-caso-0 ... msgstr[N] cadena-traducida-caso-n En este caso, se traducen todas las formas posibles de plural, en cada una de las cadenas msgstr[i]. Las herramientas del traductor Gettext Gettext es un conjunto de herramientas para la internacionalización de programas de Software Libre y consta de una biblioteca en tiempo de ejecución que recupera los archivos que contienen las traducciones, un conjunto de convenciones de programación para hacerlos traducibles, una organización de directorios y nombres para los catálogos, algunos programas que permiten manipular las traducciones y un modo especial en Emacs que sirven para traducir y actualizar las traducciones. Como colaborar en el proyecto de traducción Conclusión Los proyectos de traducción como GNU-es permiten a quienes no son programadores, ni diseñadores, incorporarse a un grupo de voluntarios y hacer una pequeña aportación a la causa del software libre. Participar en estos grupos brinda una gran satisfacción a los participantes pues, aunque es una pequeña aportación, se difunde a nivel internacional.