Siempre que comenzamos un proyecto lo hacemos con las ilusión de que tenga el máximo éxito posible, y si una de las medidas del éxito es la cantidad de usuarios que utilizan nuestro producto es lógico que intentemos que llegue al mayor número de usuarios potenciales. Para ello no deberíamos limitar el contenido de nuestra aplicación a nuestro idioma materno y tratar de tener en más idiomas nuestro interfaz y los contenidos.
Lo de traducir una aplicación a otros idiomas no tiene por que ser un requisito para poner en marcha el proyecto, pero merece la pena dejar nuestro código preparado para el multi-idioma ya que no habrá que hacer un trabajo tan duro a posteriori y nos vamos acostumbrando a utilizarlo en nuestro estilo de programación. Después la traducción a otros idiomas se limita a añadir un fichero con la traducción de los vocablos (para la interfaz) y los contenidos ya no es trabajo de programación.
Para ello nos basaremos en la librería i18n opensource muy extendida que es gettext. Se usa en muchos lenguajes de programación su idea principal mu simple como es el usar un identificador de mensaje msgid igual para todos los idiomas y un msgstr por idioma que contiene la traducción. Y para la implementación de esta solución se apoya en el uso de tres tipos de ficheros que definen las traducciones:
- Fichero .pot (Portable Object Template): Es la plantilla, el primer paso donde estarán todos los msgid con su msgstr vacío.
- Fichero .po (Portable Object): Son ficheros de texto basados en la plantilla que serán tantos como idiomas maneje la aplicación siguiendo la nomenclatura nombre_de_plantilla + idioma + _Pais.po (fich_es_ES.po, fich_en_US.po). Estos ya cuentan con las cadenas msgstr con la traducción correspondiente.
- Fichero .mo (Machine Object): El último paso, es la compilación en código binario optimizado para tratar textos de manera eficiente por el motor de traducción. El nombre es exactamente el mismo que el .po cambiando la extensión por .mo.
Para casi cualquier lenguaje que podamos utilizar existen implementaciones de la librería y un conjunto de utilidades para ayudarnos a la construcción de los ficheros.
La primera es xgettex que examina nuestro código buscando todas las ocurrencias de llamadas a los métodos usados para la traducción y genera el .pot con todas las entradas a traducir. En segunda instancia con msginit se generan los ficheros .po de lenguaje para editar y poner la traducción y por último msgfmt compila los .po en .mo.
Las labores de traducción mejor utilizar programas especializados como poEdit (los hay incluso online) que editan y generan los .mo automáticamente.
Ya hemos visto en que consiste y en el próximo veremos cómo se usa y que no sólo de traducción vive gettext.

Comentarios recientes