Un caso particular: internacionalización

Para estudiar un caso particular que permita ver cómo se utilizan herramientas ajenas y se desarrollan herramientas propias dentro del proyecto Debian de cara a llevar a cabo un objetivo concreto, se va a estudiar con mayor detalle las capacidades de internacionalización que posee el sistema operativo Debian GNU/Linux. Así como las distintas iniciativas desarrolladas dentro del proyecto.

Para ello, se hará primero una introducción al problema de la internacionalización en general y en los proyectos de software libre en particular, abarcando los distintos elementos que pueden estar sujetos a internacionalización: entornos, programas, documentos, etc.

El inglés como idioma universal

El inglés es el idioma oficial por regla general en la práctica totalidad de proyectos de software libre en la actualidad. Este idioma se ha convertido en este siglo en el idioma internacional por excelencia, y es una realidad que afecta, no sólo a los usuarios dentro del mundo GNU/Linux sino a cualquier usuario de los sistemas de la información. Es por esto que el inglés es el idioma en el que habitualmente los programas presentan sus mensajes, y la mayoría de la documentación está realizada en inglés.

No cabe duda que el uso de un único lenguaje facilita la coordinación del trabajo de los desarrolladores, a la hora de intercambiar ideas, y la difusión de un proyecto, pero los usuarios desean más, desean que los entornos en los que trabajen estén adaptados a sus entornos específicos.

El proceso de internacionalización

La internacionalización es el proceso que permite que un programa ofrezca a un usuario un entorno de computación adaptado a su propio país: lenguaje, símbolos monetarios, formatos de fecha y hora... En éste artículo se verán los distintos esfuerzos que se están llevando a cabo para hacer al SO GNU/Linux internacional, centrándose en la internacionalización de programas.

Esta adaptación no es exclusivamente, aunque sí es la primera evidencia, la traducción de todos y cada uno de los mensajes, menús, botones, etc. que muestra el programa al usuario. También incluye la adaptación del programa para que al utilizar otras características eminentemente locales, se "adapte" al entorno. Por ejemplo, al utilizar unidades monetarias muestre preferentemente las unidades locales con las expresiones habituales de separación de decimales, nomenclatura, etc. o que la representación de fechas y horas se haga en la manera acostumbrada al usuario (día-mes-año en lugar de mes-día-año por ejemplo), o incluso que las unidades métricas utilizadas para la representación de distancias, pesos, etc. sean las utilizadas por el usuario.

La modificación de un software para que sea capaz de ofrecer estas funciones es lo que se conoce como internacionalización (muchas veces se reduce al acrónimo 'i18n'). Mientras que la modificación de estas funciones para adaptar un programa a un determinado entorno se conoce como localización (muchas veces reducido a 'l10n'). Explicándolo en forma simplista, los programadores internacionalizan y los traductores localizan.

En este documento no se van a tratar los aspectos de localización derivados de la representación de códigos, por considerarlo un aspecto que queda fuera del alcance del presente documento. Pero también es un tema importante a considerar, especialmente cuando se habla de localización a entornos que no utilizan el sistema de codificación occidental. Para más información se puede consultar el texto Introduction to i18n.

Herramientas para la internacionalización del entorno de usuario

Para llevar a cabo la internacionalización del entorno del usuario, el proyecto GNU ha desarrollado una serie de herramientas. Por un lado, está la definición de "locale" que es parte de POSIX.2 y que está implementada en la librería libc de GNU. Estas definiciones realizan las tareas básicas de representación de formatos de moneda, fecha o número. Pero también las tareas de ordenación y clasificación de códigos de acuerdo con la cultura del usuario (por ejemplo, el orden de las letras en el alfabeto). Este aspecto sólo es necesario definirlo una vez ya que, una vez cubiertas todas las reglas de formatos necesarias así como las definiciones asociadas a los mapas de caracteres, éstas no van a variar con el tiempo (salvo detección de problemas o introducción de nuevos idiomas).

Un aspecto, sin embargo, más variable dentro de la internacionalización de programas, es la traducción de los mensajes que presenta un determinado programa al usuario. No sólo los mensajes que puedan aparecer en el interfaz gráfico, por ejemplo, sino todo tipo de mensajes de error que genere el programa, ayuda en las opciones al ejecutarse, etc.

La herramienta GNU para la internacionalización de mensajes en programas es Gettext. Esta herramienta, desarrollada entre 1994 y 1995 por un grupo variado de programadores, facilita la creación de programas que pueden distribuirse con múltiples catálogos de mensajes en distintos idiomas. Posteriormente, en entornos localizados, los programas pueden presentar los mensajes correspondientes al entorno declarado por el usuario.

Esta herramienta es relativamente transparente al programador, ya que sólo tiene que marcar los mensajes que cree que deben traducirse. Asimismo, la modificación del código fuente y reubicación de los mensajes es relativamente transparente al traductor, que sólo tiene que mantener actualizado un listado de traducciones de los mensajes. Las herramientas de gettext se encargan, por debajo, de homogeneizar los catálogos y modificar éstos cuando las fuentes cambian, pero preservando las traducciones ya realizadas.

De esta forma, el trabajo de traducción de los mensajes de un programa se reduce a una traducción inicial de todos los mensajes y al mantenimiento de los pequeños (o grandes) cambios en el código que puedan suponer la introducción (o desaparición) de mensajes. Y el trabajo del programador se limita a incorporar las funciones necesarias en su programa. Una vez hecho esto, el trabajo de ambos grupos puede proceder por separado, lo cual facilita el desarrollo en ambos sentidos. Es decir, un traductor no tiene que depender del programador para incorporar un nuevo idioma y un programador no depende del esfuerzo de traducción para la generación de nuevas versiones de su programa.

Se puede encontrar más información, en gettext.gnu.org. Si se tiene instalado el software de gettext, también dispondrá de la ayuda en línea, que se podrá consultar ejecutando info gettext.

La traducción de mensajes, utilizando gettext, es muy sencilla. Basta coger un fichero .po traducido parcialmente y rellenar los "huecos" que falten. Este hecho, en el mundo GNU lleno de personas de muchas capacidades distintas dispuestas a colaborar, garantiza la posibilidad de colaborar y de formar parte de un equipo de traducción a los propios usuarios. Así pues, uno de los logros de la librería gettext es que cualquier persona, con unos mínimos conocimientos, pueda colaborar en la internacionalización de los programas derivados del software libre. No siendo necesario ser un desarrollador de programas, ni una persona experta en programación para llevar estas tareas a cabo. Ya que, para mantener un fichero .po al día sólo es necesario conocer el idioma original del texto y el idioma final de la traducción.

En el proyecto GNU se dan soporte a distintos grupos de internacionalización que son las personas responsables de la traducción de los programas. Aún así no es necesario una dedicación permanente a estos grupos para internacionalizar un programa, como ya se ha visto, la internacionalización puede ser un esfuerzo puntual y concreto. La existencia de los grupos garantiza, sin embargo, la correcta revisión de estos trabajos puntuales que pueden realizar los usuarios, la elaboración de glosarios que den uniformidad a los programas traducidos y la actualización de las traducciones en vista a nuevas versiones de programas.

Estos trabajo se contribuyen través del Proyecto de Traducciones Libres (Free Translation Proyect, n. del a.) en http://www.iro.umontreal.ca/contrib/po/. Se puede ver el estado de las traducciones existe una base de datos de traducciones y traductores que puede consultar en http://www.iro.umontreal.ca/~pinard/po/registry.cgi?team=es

Internacionalización de la Documentación

La documentación en el mundo GNU/Linux, a pesar de ser un mundo dinámico y variable, ha sido la referencia más directa para usuarios y administradores. Desde las páginas de manual provenientes del mundo UNIX pasando por los HOWTOs (guías rápidas para temas específicos) hasta los textos genéricos, más parecidos a libros. Los documentos más espefícificos tienen generalmente un tratamiento más genérico e independiente de la implementación particular usada (la distribución), estos documentos, redactados por usuarios y desarrolladores son la más rápida referencia para un usuario general.

Aún más, cada distribución genera documentación para sus propios usuarios. Como pueden ser las guías de instalación, información de la nueva versión de la distribución, documentos específicos a través de sus propios proyectos de documentación o, incluso, la información publicada a través de sus servidores de WWW.

Esta documentación se ha convertido en una ayuda utilizada ampliamente. Para ofrecer esta información a los usuarios finales se hace uso de formatos estandarizados: man, info, sgml, xml (docbook) o html. Muchas distribuciones (y los entornos de escritorio como KDE o GNOME) ofrecen un interfaz único a toda esta documentación, simplificando así la tarea de búsqueda de ésta por parte del usuario.

Parece evidente, pues, que toda esta documentación dentro de un sistema operativo internacionalizado, deba estar traducida de forma que un usuario no tenga que dominar el idioma original en el que de dichos documentos se escribieron. El hecho de tener manuales de instalación y documentos de ayuda de partes vitales del sistema en el idioma del usuario, favorece la introducción de nuevos usuarios en un sistema para los cuales la barrera idiomática inicial pudiera ser demasiado alta.

Proyectos de documentación

Dentro del mundo GNU/Linux hay una variedad de proyectos de documentación que funcionan de manera independiente. El más grande y más particular de Linux es, sin duda el LDP (Linux Documentation Project, Proyecto de Documentación de Linux). Este proyecto abarca la realización de dos tipos distintos de documentación: las guías rápidas o HOWTOs y los manuales, entre los que se encuentran, por ejemplo: Linux Installation and Guetting Started, y Linux Systems and Administrations Guide.

En ambos tipos de documentación se utiliza como formato linuxdoc-sgml, que permite el paso de esta documentación a diferentes formatos: html, postscript y otros. Aunque desde hace tiempo ha comenzado un movimiento importante para utilizar como formato para esta documentación el estándar Docbook, que permite una mayor versatilidad en la generación de distintos formatos de documento y en la inclusión de ciertas ayudas (gráficos, tablas) en la documentación.

Por otro lado, y más asociados a los programas con los que se distribuyen están las páginas de manual (man) y de información (info). Las primeras son una herencia del mundo UNIX, y constituyen una referencia rápida a programas (documentando sus opciones en línea de comandos, configuración y comportamiento), ficheros de configuración, juegos, llamadas al sistema y funciones de librería (para C y otros lenguajes). Los segundos son una documentación más extensa de los programas y que surge en el seno del proyecto GNU como sustituto a las página de manual. En ellas se documenta de una forma más exhaustiva y haciendo uso de hiper-enlaces, el comportamiento de un programa, librería o conjunto de ambos, con ejemplos de uso y de programación.

Asimismo, dentro de los diversos proyectos en el mundo GNU/Linux, como KDE o GNOME, existen diferentes proyectos de documentación, no integrada en la LDP al tratarse de documentos específicos útiles solamente a desarrolladores o usuarios de éstos. GNU también tiene su propio proyecto de documentación.

Finalmente se puede encontrar otro tipo de documentación no asociada a ninguno de los grupos anteriores, aunque los complemente. Se trata de las publicaciones relacionadas con el mundo GNU/Linux, de gran interés divulgativo y también susceptibles de traducción. Más accesibles a los usuarios de Linux en todo el mundo son las revistas electrónicas (LinuxFocus, Linux Gazzette, OpenResources ...) y también son más susceptibles de ser traducidas si se distribuyen mediante una licencia abierta, esquema natural para este tipo de revistas en parte porque surgen a raíz de un proyecto abierto como GNU/Linux. Para más información sobre licencias de documentación, se puede consultar la Licencia Libre de Documentación de GNU.

La traducción de esta documentación no es una tarea que esté asociada en particular a una distribución de GNU/Linux. En el caso de la traducción en castellano existen dos proyectos encargados de llevar a cabo estas traducciones. Por un lado está LuCAS (Linux en Castellano) encargado de coordinar la traducción de los documentos genéricos del Linux Documentation Proyect.

El proyecto PAMELI, que coordina la traducción de las páginas de manual de programas del proyecto GNU. Y el proyecto INSFLUG , que coordina la traducción de los HOWTOs (COMOs) al castellano. Y actualmente cuente con un buen número documentos incluyendo algunos específicos de países hispano-parlantes (como el Infobia-COMO).

Internacionalización de sitios de web

Los sitios de web se convierten frecuentemente en el punto de acceso de los usuarios a muchos de los recursos de Linux, engloban desde servidores genéricos como http://www.linux.com, o los dedicados a programas como http://sourceforge.net o http://www.freshmeat.org.

Estos sitios han de considerarse documentación adicional, complementaria a la ofrecida al usuario a través de otros métodos y, frecuentemente, con un período mayor de actualización. Es por esto que todos ellos deben formar parte del ejercicio de internacionalización ya que, aunque el usuario tenga documentación en línea dentro de las distribuciones y programas, en los servidores podrá encontrar siempre nueva información y programas más actualizados, noticias y novedades que puedan ser de su interés. Esta información quedará devaluada si el usuario no puede acceder a la misma debido a barreras idiomáticas.

La tecnología que permite realizar esto dentro de los diversos servidores es la Negociación de contenido, definida en el estándar HTTP 1.1. Los navegadores que soportan dicho estándar envían, al realizar la solicitud de un documento a un servidor, una cabecera que indica al servidor el idioma del usuario (Preferred-Language), el servidor puede decidir, a la hora de remitir el documento al usuario, qué documento envía basándose en el URL y el idioma indicado por el usuario.

Los administradores del servidor pueden, así, mantener varios conjuntos de documentos, el documento original y sus traducciones a diversos idiomas. De esta forma, un usuario podrá ser mostrado el documento traducido cuando éste esté disponible.

La internacionalización en Debian

¿Qué recursos dispone, pues, el proyecto Debian para facilitar la internacionalización del sistema operativo? Debian facilita a los grupos de desarrolladores o usuarios interesados en dedicarse a la internacionalización de la distribución a sus respectivos idiomas los recursos que necesiten del propio proyecto. Así, se han formado distintos grupos de internacionalización, coordinados a través de más de diez listas de correo.

Evidentemente, Debian GNU/Linux incorpora todas las funcionalidades de localización ofrecida por la libc de GNU ya que ésta es una de las librerías básicas del sistema operativo. De igual manera, con respecto a las traducciones de programas, el proyecto Debian por sí no coordina la traducción de los programas de la propia distribución, sino que se basa en las traducciones ofrecidas por los desarrolladores principales e incluidas en cada nueva versión de los programas. Sin embargo, es común que las traducciones de muchos programas no se hayan incluido explícitamente dentro del proyecto GNU sino que hayan sido realizadas por personas de forma esporádica. Para contrastar éste hecho, se puede consultar el Monitor de traducciones de Debian en http://www.debian.org/intl/l10n/po-es para el castellano y compararlo con el indicado en la la sección de nombre Herramientas para la internacionalización del entorno de usuario.

Aunque la base de la localización esté integrada en Debian mediante el uso de estas librerías, es necesario, sin embargo que el usuario la adapte para hacer uso de ésta. Este proceso de adaptación de la localización no depende únicamente, en muchas ocasiones, del establecimiento de las variables de entorno necesarias por parte del usuario, sino que puede significar la modificación de ficheros de configuración y de llamadas a distintos programas. Por ejemplo, en el caso de los lenguajes occidentales, puede ser necesario para algunos programas indicar mediante parámetros el uso de caracteres fuera del conjunto de caracteres no ASCII (de 8-bits). Para llevar a cabo esta tarea de adaptación del entorno y de los programas instalados de forma automática, el proyecto ha desarrollado, de forma experimental, tres entornos de localización distintos para el alemán, el japonés y el castellano. Estos entornos de localización se establecen a través de los paquetes user-XX (donde XX será 'de', 'ja' y 'es', respectivamente). Esto permite que el usuario que desee adaptar el entorno a su idioma nativo pueda, simplemente, instalar estos entornos y éste quedará preparado.

En cualquier caso, Debian, como proyecto, no dedica un gran número de recursos a estos aspectos a los aspectos de localización en sí. Esto no significa, por ejemplo, que los propios desarrolladores no contribuyan trabajo a estas tareas, por ejemplo, el grupo de internacionalización al japonés ha hecho un esfuerzo increíble para poder ofrecer dentro de Debian, no sólo a traducciones, sino programas con soporte de localización a su propio idioma. Sin embargo, en el área de documentación si que los incorpora. Esto es así porque Debian, entre los paquetes ofrecidos por la propia distribución, ofrece documentación de utilidad para los usuarios contribuida por los proyectos de documentación antes mencionados. Por ejemplo, la documentación ofrecida por el Proyecto de Documentación de Linux, en formato de "HOWTO" es incluida en el sistema al instalar el paquete doc-linux. Pues bien, ésta misma documentación ha sido recogida por los respectivos grupos de trabajo de internacionalización de Debian y los documentos traducidos disponibles han sido empaquetados también para Debian. La versión 2.2 cuenta con el mismo paquete doc-linux que recoge traducciones en diez idiomas distintos. De igual forma sucede, por ejemplo, con las compilaciones de páginas de manual (paquetes manpages). Estos paquetes de documentación traducida se nombran como el paquete pero con el sufijo característico del idioma traducido (i.e. -es para el castellano, -ja para el japonés).

La documentación generada por el propio proyecto, sin embargo, sí se traduce dentro de éste en coordinación con el Proyecto de Documentación de Debian. Dentro de la documentación se pueden distinguir dos grupos generales: los manuales de documentación y el servidor de WWW en sí. El trabajo no es igual en ambas áreas ya que la primera de éstas exige una mayor dedicación que la segunda. Así, mientras que el manual de instalación de Debian 2.2 ha sido traducido, dentro del proyecto, a doce idiomas distintos, pero otros documentos que forman parte del Proyecto de Documentación aún están sin traducir o han sido traducidos a sólo un par de idiomas.

Las traducciones del servidor de WWW, sin embargo, sí están siendo realizadas para veintitrés idiomas distintos. Y, siendo una de las tareas más activas del proceso de internacionalización, conviene analizarla su funcionamiento en más detalle.

Para la internacionalización de contenidos del servidor de WWW se utilizan las capacidades de negociación de contenidos del servidor Apache (siguiendo el estándar, como ya se ha comentado). Además, toda la generación del servidor de WWW se realiza utilizando el programa wml que permite separar la definición de las plantillas de aspecto del contenido en sí y que, además permite la generación en tiempo de compilación de ciertos funcionalidades. De alguna manera, wml es a html lo que un programa en C es a su código objeto, la compilación del documento wml tiene como consecuencia la generación de la página html en sí.

La información del servidor de WWW se distribuye en un árbol de directorios, gestionados por el servidor de CVS, que incluye un directorio para cada uno de los idiomas en los que está traducido. En principio los idiomas tienen la misma estructura jerárquica, aunque en realidad ésta va creciendo en cada idioma igualándose a la del idioma en el que se escriben inicialmente los documentos (el inglés) a medida que se incorporan nuevas traducciones. La estructura de generación de las páginas finales, a través de ficheros Makefile, permite la compilación, en cada directorio, de los ficheros wml y su publicación diaria en un punto común.

Gracias a la independencia del aspecto con respecto a la información en sí, los traductores pueden ir recogiendo los ficheros depositados en el árbol del idioma inglés e incorporándolos, traducidos, a sus propios árboles. Una parte importante de la traducción reside también en las plantillas utilizadas para generar todo el sitio. Éstas utilizan las capacidades de internacionalización de wml y la posibilidad de definición multilingüe de etiquetas para aglomerar las traducciones de todos los elementos comunes del aspecto (botones, barras de menús laterales, textos fijos en todas las páginas, etc..)

Sin embargo, uno de los problemas básicos de las traducciones, es la detección de que un documento ha sido modificado y la necesidad de traducir el original. En el caso del servidor de web es un problema fundamental ya que el usuario, a través de la negociación de contenido ve siempre la página en su idioma pero no es directamente consciente de que la versión en inglés puede ser más actualizada que la versión que está consultado. Esto no sucede cuando no exista una traducción el servidor ya que en éste caso el servidor envía el documento original.

Para poder solventar este problema los desarrolladores han implementado dos técnicas distintas para asegurar que se puede mantener la consistencia entre traducciones y los documentos originales. Ambas técnicas se aprovechan de la existencia de números de versiones en los documentos (gestionados por el propio sistema de control de versiones). Así, los traductores sólo necesitan incorporar una marca determinada en el momento de traducir un documento indicando la versión traducida para que :

Dado que las traducciones irán, por regla general, a la zaga de los originales, este sistema de publicación permite una adecuada utilización, de cara a los traductores y a los usuarios de la información publicada.

De igual forma, dos de los proyectos de internacionalización (el francés y el español) incorporan actualmente un sistema de gestión de la documentación traducida correspondiente al Proyecto de Documentación de Debian. En este caso, los proyectos de internacionalización gestionan una base de datos que incorpora los documentos disponibles en dicho proyecto y la situación de las traducciones. Utilizando éste sistema de gestión es posible automatizar el hecho de que cuando un documento que está en estado de "actualizado", al ser modificado a través del sistema de control de versiones pase a un estado "pendiente de ser actualizado". Sin embargo, este sistema de gestión aún está por incorporarse al propio sistema de gestión de documentación y a los demás idiomas para evitar duplicidades en cada una de las bases de datos.

Éste no es el único esfuerzo de internacionalización interno de los contenidos de Debian. Dentro de los sistemas básicos de Debian también se van incluyendo capacidades de internacionalización. Los sistemas de instalación (dinstall), de gestión de paquetes (dpkg,dselect), de gestión de menús (paquete menu) y de presentación de notas (debconf) también han sido internacionalizados de forma que, por ejemplo, la instalación completa de un sistema operativo Debian GNU/Linux y su actualización pueda ser realizada íntegramente en el idioma del usuario.

Otra de las grandes tareas abordadas por los proyectos de internacionalización de Debian es el trabajo de traducción de las descripciones del software ofrecido dentro del sistema operativo. Todo paquete de software en Debian GNU/Linux viene acompañado de dos descripciones. Una corta (menor de ochenta caracteres) que indica, brevemente, el contenido del paquete. Y otra, de contenido variable, que expresa las funcionalidades del software que incluye, sus características, etc. Esta información es de vital importancia para que el usuario en busca de una determinada funcionalidad pueda buscarla utilizando algunas de las herramientas específicas diseñadas para buscar en esta base de datos. Sin embargo, el hecho de que todas estas descripciones estén en inglés dificulta el proceso de búsqueda de software por parte de un usuario no nativo ya que, aún disponiendo de un interfaz sobre el que poder hacer consultas sobre ésta información, no podrá precisar los términos de la búsqueda con la misma precisión que si utilizar su idioma nativo.

Para resolver este problema se inició un proyecto de traducción de las descripciones de los paquetes. Este proyecto, de hecho, fue iniciado, simultáneamente por dos equipos de trabajo, dando como resultado dos sistemas de gestión diferentes pero que actualmente están integrados entre sí. Bajo el nombre de Debian Description Translation Project (Proyecto de Traducción de descripciones de Debian, n. del t.) se encuentran dos sistemas: uno mediante correo electrónico y otro mediante WWW. El sistema de gestión de las descripciones mediante correo electrónico disponible en http://people.debian.org/~grisu/ddts permite que los traductores reciban descripciones de forma automática y las envíen al sistema una vez traducidas. El sistema con interfaz web disponible en http://www.laespiral.org/ddts/ permite gestionar la traducción y revisión mediante un acceso autenticado a un servidor de WWW. La Espiral también llevó a cabo un proyecto previo de traducción de las descripciones cortas de los paquetes Debian a través de un interfaz web, aunque éste proyecto ha quedado introducido en el mostrado anteriormente.