i18n: cómo crear un sitio web cultural global y multilingüe

Página principal de Paulina en finlandés.

En el post anterior les presentamos Paulina, el proyecto de datos para el dominio público en el que estamos trabajando en este momento. Paulina es una aplicación web que permite aprender sobre el patrimonio cultural de todo el mundo, y para lograrlo es necesario que las personas puedan acceder en su propio idioma. Recientemente estuvimos encarando esta tarea y de eso vamos a hablar a lo largo de este post.

Qué es i18n

i18n es un numerónimo que significa «internacionalización». La internacionalización es el proceso por el cual una aplicación es diseñada para que pueda ser traducida a múltiples idiomas y adaptada a contextos locales y regionales. Esta adaptación incluye también la conversión de medidas, el uso de zonas horarias, diferentes formatos de números y fechas, e incluso el diseño de una interfaz que se pueda adaptar a distintos alfabetos y orientaciones de la escritura.

Junto con la accesibilidad, i18n es una pieza clave para no dejar a nadie en el camino a la hora de implementar un proyecto web que busca ser global.

Cómo se hace i18n en proyectos web

Cuando tenemos un documento y queremos traducirlo a otro idioma, basta con crear un nuevo documento, realizar allí la traducción y luego distribuir ambos documentos de manera conjunta. Pero en un software o en un sitio web las cosas no son tan sencillas. Para empezar, un sitio web está compuesto por muchos documentos. Además, los contenidos se actualizan periódicamente, la cantidad de idiomas puede llegar a ser muy grande y puede surgir la necesidad de agregar traducciones a nuevos idiomas. Es por esto que hay software especialmente diseñado para facilitar el flujo de trabajo que incluye todas las traducciones y adaptaciones necesarias.

Si nuestro proyecto web está hecho con WordPress, tenemos algunos plugins que proveen esta funcionalidad. Por ejemplo, Polylang nos permite publicar los posts y páginas en múltiples idiomas de manera sencilla, gestionando automáticamente las URL de las distintas versiones de un mismo post y permitiendo que las personas usuarias cambien fácilmente de idioma. Loco Translate, por su parte, sirve para traducir plugins o temas de WordPress a nuestro idioma cuando aún no hay una traducción disponible o está incompleta.

Paulina, sin embargo, no está hecha con WordPress. Es una aplicación web construida desde cero usando el lenguaje de programación Python para la parte funcional que tiene lugar en el servidor y Wikidata como fuente de datos. Su cara visible está desarrollada en los lenguajes estándar de la web, que son los que pueden interpretar los navegadores: HTML para la estructura del documento, CSS para el diseño y JavaScript para pequeñas funcionalidades que no ocurren en el servidor sino en el navegador de las personas usuarias.

Cuando trabajamos en la internacionalización de software, el estándar más difundido es el sistema gettext. Su implementación más conocida, GNU gettext, tiene una estructura relativamente sencilla. Todas las cadenas de texto que necesitamos traducir se marcan manualmente en el código del programa. Una vez que están marcadas, el programa construye automáticamente una plantilla, que es un archivito con la extensión .pot (Portable Object Template), donde están recopiladas todas las cadenas a traducir. De esa plantilla se desprenden tantos archivos de traducción como idiomas haya en la aplicación. Cada archivo de traducción es un simple archivo de texto que tiene la extensión .po (Portable Object). Las personas traductoras editan el archivo .po traduciendo cada cadena. Pueden hacerlo en un bloc de notas o cualquier otro editor de texto, pero lo más común es usar un programa específico de traducciones, como Poedit, que permite editar ese mismo archivo de texto .po de manera más sencilla y ordenada. Una vez que la traducción está lista, el archivo .po es compilado en un archivo binario .mo (Machine Object), que es lo que finalmente va a leer el sistema gettext a la hora de mostrar las cadenas de texto. El resultado es una estructura de directorios como esta:

En el caso de Paulina, usamos gettext a través de una extensión llamada Flask-Babel, específica para proyectos web como el nuestro que utilizan el marco Flask. Flask-Babel está a su vez está basada en otro módulo muy popular de Python llamado Babel. Lo importante, de todos modos, es que estos módulos de Python son tan solo una manera de automatizar tareas del proceso de internacionalización con gettext que describimos en el párrafo anterior.

La clave social

Hasta aquí hablamos de la parte técnica, pero i18n es mucho más que eso. Lo más importante es que haya una comunidad de personas interesadas en adaptar y usar el software a distintos idiomas y regiones. Con i18n preparamos nuestro proyecto para que esto sea posible, pero sin la parte social no habrá lo que se conoce con otro numerónimo: l10n, o localización. En síntesis, i18n brinda un entorno que sienta las bases para l10n. Habrá tantas localizaciones como adaptaciones a idiomas o regiones concretas la comunidad necesite.

Paulina tiene la ventaja de que se inserta en el movimiento Wikimedia, y eso abre puertas para colaborar con personas de todo el mundo. Así, por ejemplo, se interesaron en el proyecto personas de lugares tan diversos como Colombia, Finlandia, India o Indonesia. Hasta el momento, la aplicación está disponible en inglés, español, portugués, finlandés y noruego, y está en proceso la traducción al bengalí.

Cuando participan muchas personas en el proceso de traducción, enviar y recibir archivos .po de manera individual con cada persona que traduce en un idioma diferente puede llegar a convertirse en una pesadilla. Para facilitar la tarea de traducción entre muchas personas existen sistemas web de gestión de traducciones. El más conocido de ellos es Weblate, una aplicación libre que puede instalarse en un servidor propio o puede usarse en la instancia que sus desarrolladores ofrecen. Esta instancia en la nube, además, permite alojar gratuitamente proyectos de traducción de software libre.

A modo de ejemplo, el proyecto de traducción de Paulina en Weblate incluye actualmente 10 idiomas. Lo que hicimos inicialmente fue subir una plantilla .pot con todas las cadenas de texto del proyecto. Ahora cualquier persona puede sumarse a traducir en los idiomas ya iniciados o puede abrir la traducción a un nuevo idioma. Weblate indica el estado de avance de cada idioma, permite colocar comentarios, actualizar la plantilla de traducción cuando se incorporan nuevas cadenas de texto, incluir información de contexto y capturas de pantalla para cada cadena, apoyarse en traductores automáticos para agilizar la traducción, consultar el historial de ediciones, e incluso brinda sugerencias automatizadas cuando detecta anomalías (espacios duplicados, puntos finales donde no debería haberlos, etc).

Página con las estadísticas del proyecto de traducción de Paulina en Weblate.

Cuando consideramos que una o varias traducciones en Weblate ya están aptas para usarse en nuestro sitio, podemos descargar los archivitos .po y colocarlos manualmente en el directorio correspondiente dentro del árbol de directorios de nuestro proyecto, o podemos también conectar Weblate con nuestro repositorio de código para que se actualicen las traducciones directamente.

Otra ventaja de Weblate es que cuenta con una comunidad propia de simpatizantes del software libre y activistas de idiomas minoritarios, lo que provoca hermosas sorpresas como cuando, en nuestro caso, nos despertamos un día con la novedad de que Paulina había sido traducida a la variante bokmål del idioma noruego.

Wikidata: una base de datos multilingüe

Paulina es por ahora una aplicación web cultural pequeña. Cuenta con tan solo 120 cadenas de texto traducibles. Sin embargo, gran parte de su potencia deriva de que usa los datos de Wikidata. Wikidata es la base de datos colaborativa del movimiento Wikimedia. Los datos de Wikidata están disponibles en cientos de idiomas. Cada ítem o elemento de la base de datos (por ejemplo, un autor o autora, una obra cultural, una disciplina artística, etc) puede tener un nombre y una descripción en cada idioma. Por supuesto, no todos los elementos están disponibles en todos los idiomas, pero los elementos más consultados suelen estar disponible en un número importante de lenguas. En suma, Wikidata brinda enormes posibilidades que pueden ayudar en la internacionalización de un proyecto web. Y por eso vale la pena también colaborar con Wikidata traduciendo elementos.

El ítem «escritor» de Wikidata, con su nombre y descripción en múltiples idiomas.

Ideas finales

La internacionalización es una tarea sumamente compleja y al mismo tiempo apasionante. Todo proyecto cultural web que aspire a ser relevante más allá de una región acotada debería trabajar en i18n. Aprender sobre i18n implica adquirir conocimientos interdisciplinarios que van desde el software hasta las peculiaridades de distintos idiomas, pasando por las costumbres y convenciones de diferentes regiones y las formas de comprender el mundo que hay más allá de nuestra propia cultura. La magnitud del desafío no debería acobardarnos; por el contrario, todo esfuerzo que hagamos hacia la internacionalización nos ayudará a conectarnos con personas de otros lugares y a colaborar en intereses comunes.


Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Avísame por correo electrónico si aparecen nuevos comentarios. También puedes suscribirte sin comentar.