Damos un repaso a los distintos distintos métodos de implementación de páginas web multilenguaje, mostrando cómo implementar algunos de ellos. Si estás pensando en crear una web con contenido en varios idiomas… ¡tienes que leer esto!
Introducción
Hoy en día, gracias a Internet, tenemos la capacidad de llegar a cualquier persona del mundo, desde al vecino del quinto hasta alguien perdido en algún lugar remoto de las antípodas. Esto es una enorme ventaja que no se puede desaprovechar cuando tienes un nicho de mercado global.
Si tu web ofrece un servicio o información que puede ser consumido por cualquier persona del mundo, tienes que cuidar muchos detalles para que el usuario final se sienta satisfecho y conforme. Se tiene que sentir como en casa.
Es importante presentar al usuario una web adaptada a su localización, tanto en idioma como en formatos (fecha, moneda, etc…) de forma que su experiencia en el sitio sea buena y así, mejorar la calidad de las visitas.
Sin embargo, tener una web en varios idiomas es algo complejo, tanto desde punto de vista técnico (que es la parte que ocuparemos en este artículo) como de mantenimiento. A continuación veremos los distintos métodos que puedes usar para convertir tu aplicación PHP en multilenguaje.
Formatos para las traducciones
La primera pregunta que te viene a la cabeza cuando comienzas con el diseño de una aplicación multilenguaje es: ¿cómo hago para abstraer los textos de las plantillas? ¿uso un array? ¿uso variables globales? ¿un fichero csv?.
Bien, a continuación os muestro un listado de los métodos más usados con sus ventajas e inconvenientes:
Array
Este es el formato más sencillo para los programadores, pero es ineficaz cuando tienes muchas cadenas de texto o muchos idiomas a traducir. Sin embargo puede ser una buena elección cuando se trata de un sitio pequeño con poco texto y en el cual es el programador quien se encarga de hacer las traducciones (si le pasas un array a alguna persona no técnica para traducir, seguramente se cargue algo).
Ficheros CSV
Este formato es cómodo cuando es el cliente (persona no técnica) el que se encarga de la traducción, pues es legible por cualquier editor de texto estándard. Sin embargo, se debe de tener cuidado con la codificación UTF8.
Gettext
Este es uno de los métodos más utilizados. gettext es la biblioteca GNU de internacionalización usada para crear programas de interfaz en múltiples lenguajes, y que en los últimos años ha dado el salto al mundo web.
Es un formato de traducción profesional, ya que no es legible como texto plano, sino que necesitas un programa de edición como POEdit, que evitará problemas de codificación y hará del proceso de traducción una experiencia más agradable. PHP incorpora funciones para trabajar con esta librería de forma nativa.
Ficheros Ini
Tiene las mismas características que los ficheros CSV, lo único que cambia es la forma de organizar los textos. Es un formato legible por el ser humano y adecuado para que el cliente edite los ficheros sin complicaciones. Se debe tener especial cuidado con la codificación UTF8.
TMX
Este formato será usado por clientes que tengan varios sistemas que usan una única fuente de traducción, o cuando la fuente de traducción necesita ser independiente del sistema (system-independent). TMX es un fichero basado en XML que parece encaminado a ser el próximo estándard en la industria.
Este tipo de ficheros son legibles por el ser humano, pero su procesamiento es más lento que el de ficheros gettext.
Usando gettext en PHP
De todos los formatos que he citado anteriormente, he elegido este para mostrar una implementación porque para mí es el más cómodo y profesional tanto para los traductores como para los programadores.
Primer paso: Instalar un editor y crear un catálogo
Como ya os he comentado antes, para este formato se necesita un editor capaz de manejar este tipo de ficheros. Yo os recomiendo POEdit, que es fácil de instalar y de aprender a manejar.
Antes de nada, tenéis que saber como funciona el programa, ya que, seguramente si no os lo dicen, no conseguiréis hacer nada con él. El concepto general de su funcionamiento sería el siguiente:
- Le especificamos en que directorio(s) se encuentran los ficheros que contendrán los textos traducibles.
- Le especificamos cual será lar marca que identificará que textos son traducibles. Normalmente el guión bajo (_) .
- El programa se encarga de buscar en todos los ficheros, los textos traducibles y los añade a una lista para su traducción.
Vamos entonces a crear nuestro primer catálogo. Teniendo en cuenta que tenemos un fichero como el siguiente en /path/templates/template.php en donde path es el directorio del proyecto:
<html>
<body>
<h1><?=_("Hola Mundo!")?></h1>
</body>
</html>
Aquí hay que destacar el uso de la funcion _ (guión bajo). Dicha función nos ofrece dos cosas: por un lado, es un alias de la función de PHP gettext, por lo tanto se encargará automáticamente de traducir ese texto una vez configurado. Y por otro lado ayudará al POEdit a encontrar las cadenas de texto traducibles.
Abrimos POEdit y vamos a Archivo > Nuevo catálogo y rellenamos información relativa al proyecto:

En la pestaña Carpetas debes indicar en que directorio se encuentran los ficheros con textos traducibles:

Y en la pestaña Palabras Clave seleccionamos cual va a ser el identificador de los textos traducibles. Como hemos dicho antes, lo más común es el guion bajo (_):

Una vez acaba la configuración, os pedirá en donde queréis guardar el fichero. Lo guardamos en /path/locale/en_US/LC_MESSAGES/app.po . En ese directorio, se creará tambien un fichero app.mo, que es el que nos interesa.
Segundo paso: Hacer la traducción
Una vez creado y guardado el catálogo, podemos comenzar la traducción. Como ves, el programa ha detectado los textos traducibles y te los sirve en bandeja para que los traduzcas. Más fácil imposible

Tercer paso: Traducir desde PHP
Como ya hemos dicho, en PHP exite la función gettext que nos permitirá trabajar con el fichero que acabamos de generar. Creamos el fichero /path/index.php
<?php
//Establecemos el idioma a inglés
putenv('LC_ALL=en_US');
setlocale(LC_ALL, 'en_US.UTF8');
//Establecemos en que directorio se encuentran las traducciones
bindtextdomain("app", "./locale");
//Elegimos el dominio (aka tabla o fichero)
textdomain("app");
// Incluyo el fichero plantilla
require 'templates/template.php';
¡Así de sencillo! Ahora PHP ya se encarga de cargar los textos según el locale establecido. Pero…¿cómo lo encuentra si tenemos un esqueleto de carpetas bastante complejo? La respuesta es: tenemos ese esqueleto complejo porque es el que PHP espera tener. Analicemos directorio por directorio la ruta del fichero app.mo:
- /path/locale: Con la función bindtextdomain le decimos a PHP que debe de buscar en ese directorio las traducciones.
- /path/locale/en_US: Al establecer la configuración local a en_US con las funciones putenv y setlocale, PHP buscará este directorio.
- /path/locale/en_US/LC_MESSAGES: este es un directorio en el que PHP busca por defecto.
- /path/locale/en_US/LC_MESSAGES/app.mo: Cargará este fichero porque así se le ha especificado en la función textdomain.
Cuarto paso: Agregando nuevos textos
Si vuelves a agregar algun texto a la plantilla, no pasa nada, por defecto se mostrara sin traducir (que ya es algo mejor que nada) y luego simplemente tienes que abrir el catálogo con el editor y pinchar en el botón Actualizar catálogo

Y el programa ya te saca un listado de los nuevos textos que se han añadido:

Reflexion final
Como has visto, existen múltiples metodos para incorporar sistema multilenguaje en tu aplicación web. De ti, del usuario final, y del número de cadenas de texto a traducir depende la elección entre uno u otro, ya que cualquiera puede ser efectivo bajos determinadas condiciones.
Si te decantas por usar gettext, te darás cuenta que lo único que tienes que hacer es definir bien los catálogos y luego todo son ventajas, tanto para los desarrolladores como para los traductores.
Espero que os haya parecido interesante el artículo y que dejéis vuestra opinión sobre el tema…
¡Nos vemos en el próximo artículo!
Te sugerimos otras entradas relacionadas...
¿Necesitas desarrollar un proyecto web o para móviles? ¡Estamos disponibles!

Cokidoo, los creadores de Ontuts, desarrollamos proyectos tecnológicos centrados en redes sociales y aplicaciones web, aplicaciones móviles y consultoría web y bases de datos.
Somos jóvenes, inquietos, versátiles, apasionados por la innovación y enfocados en las nuevas tecnologías. Con Ontuts tratamos de compartir nuestro conocimiento adquirido en los distintos proyectos, ayudando a la comunidad y mostrando nuestra capacidad tecnológica.
Si necesitas un presupuesto sin compromiso, estamos disponibles, no dudes en contactar con nosotros.


















Comentarios en esta publicación (16 comentarios)
¿Te ha gustado esta publicación? ¡Puedes compartir tu opinión con todos nosotros! Simplemente pincha aquí mismo.