Ir al contenido

Traducción de aplicaciones con gettext (parte 1)

Hace unos días escribía sobre la importancia de utilizar el inglés como la lengua de facto en proyectos de software. Para mi, tener convenciones es muy importante sin embargo, como lo comentaba en la publicación del enlace, hay casos donde queremos proveer un lenguaje diferente al inglés en nuestro software y, de hecho, si nuestro target o mercado de usuarios será diferente al de habla inglesa pues esto se vuelve un requerimiento. Aunque existen varias herramientas diferentes para internacionalizar nuestro software me enfocaré en gettext en una serie de 3 artículos, siendo este el primero, para mantenerlos cortos, sobre como manejar varios idiomas en nuestras aplicaciones y mantenerlas actualizadas.

Internacionalización y localización

En terminología de computación la internacionalización y localización no es mas que el simple hecho de adaptar el software a otros lenguajes y formatos. Comúnmente y para ahorrarse texto se les abrevia a estos dos términos i18n y l10n respectivamente, estas abreviaciones provienen del hecho de que entre la primer letra y la última hay 18 caracteres para el caso de internationalization y 10 para el de localization y puesto que es más simple referirnos con estas abreviaciones, a partir de este momento me referiré a dichos términos así.

¿Cuál es la diferencia entre los dos términos? Bien, resulta que i18n se refiere a la infraestructura necesaria para adaptar software para ser localizado y l10n al propio hecho de localizar o “traducir” nuestro software. Hay que pensar en la internacionalización como la base para poder aplicar varias localizaciones. En resumen:

Internacionalización: Metodología para “preparar” los mensajes en el código fuente para poder ser traducido a otros lenguajes y aplicar formatos de otras culturas.

Localización: La actividad específica de utilizar la capacidad del software de ser traducido (internacionalización) y escribir dichas traducciones.

¿Por qué internacionalizar nuestro software?

Lo primero que nos preguntaríamos es ¿Cuál es la ventaja de internacionalizar nuestro software? Bueno podría listas varias razones:

  • Lo obvio: ofrecer nuestro producto en otros países de diferente lengua. Si nuestro producto o proyecto no está enfocado en solucionar un problema de naturaleza local o regional entonces tenemos oportunidad de comercializarlo en otros países y obtener mas ventas.
  • Si nuestro proyecto es OpenSource. Una de las actividades más comunes entre contribuyentes de proyectos de software libre y OpenSource es precisamente ayudar con las traducciones, sobre todo para aquellos que no son programadores pero desean colaborar.
  • Dejar “preparado” el software aun cuando no sea localizado inicialmente, esto con el propósito de satisfacer cualquiera de los dos puntos anteriores.

Noten que en el último punto mencionó el hecho de dejar “preparada” la aplicación, es decir, al internacionalizar solamente estamos dejando la infraestructura preparada para aplicar las traducciones; no es un requerimiento localizarla inicialmente.

Herrramientas de internacionalización

Existen varias metodologías y herramientas para internacionalizar software. Muchas de ellas son propias de cada framework o entorno de desarrollo, por ejemplo, en el caso de las aplicaciones de ruby on rails, por default, se utilizan archivos YAML los cuales contienen los mensajes para cada lenguaje, Laravel usa archivos .php con arrays de mensajes y .NET utiliza archivos “resource” para guardar dichos mensajes. Aunque cada una de estas herramientas tiene ventajas me parece que la mejor es gettext, parte de las herramientas GNU, y para los que lo desconozcan, las herramientas GNU son esos pequeños programas usualmente de linea de comandos que vienen incluidos en la mayoría de las distribuciones de Linux, herramientas como grep, awk, sed, etc.

Una de las misiones del proyecto GNU de la Free Software Foundation es precisamente proveer herramientas que permitan que la tecnología llegue a todos de manera libre y accesible, parte de esta accesibilidad es primordialmente poder utilizar el software en un lenguaje nativo al usuario y es así como nace gettext. Existe un manual con la historia, misión y el uso de cada una de las opciones que contiene gettext aquí pero me enfocaré en las opciones básicas para este demo.

Pero, si ya existen otras herramientas, ¿Por qué usaríamos gettext entonces? Bueno, podría decir que la principal ventaja es el hecho de que nos permite mantener actualizados los catálogos de traducciones haciendo introspección en el código por medio de sus herramientas, de manera que podemos mantener bitácora de que partes de la aplicación NO están traducidas o cuales les falta ciertas partes de una traducción. Esto lo veremos más adelante. Por otra parte, gettext está disponible para ser utilizado en muchos lenguajes de programación: C, C++, C#, Python, Ruby, JavaScript, PHP, Java, etc.

Otra herramienta muy útil, aunque no indispensable, es Poedit, que es una interfáz gráfica que nos permite mantener actualizados los catálogos de traducciones. Además de ser gratuito (licencia MIT) tiene versiones disponibles para los 3 principales sistemas operativos: Windows, macOS y por supuesto Linux.

En la siguiente parte de esta publicación explicaré como utilizar estas herramientas y también algunos conceptos que debemos analizar como los catálogos de mensajes, plantillas y objetos compilados. Posteriormente, en la tercera y última parte realizaré un pequeño demo con PHP para mostrar como utilizar gettext para internacionalizar y localizar aplicaciones.

 

Publicado elprogramación

3 Comentarios

  1. Y Gettext no únicamente sirve para software: Yo estoy gestionando la traducción de un libro. Además, en vez de poedit, lo estoy haciendo con un servicio en línea (Web) bien alineado con el software libre – Weblate.

    • Orale, esa no me la sabía. En realidad yo solo lo he usado en un par de proyectos personales para traducir software. Voy a echarle una revisada a weblate. Saludos!

Deja un comentario

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

Anti-spam (comprueba que eres humano!) *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.