Multilanguage site con PHP y Smarty (Parte 2)

imagen con banderas de distintos paises

Continuamos con nuestro pequeño repaso sobre la internacionalización de tu web usando PHP y Smarty. En la anterior post comentamos las diferencias entre internacionalización y localización. Una vez aclarados estos conceptos pasaremos a repasar las diferentes maneras de realizar la internacionalización.

Buenos, después del repaso de los conceptos i18n y l10n vamos a repasar los principales sistemas para la internacionalización.

Métodos de internacionalización

Básicamente la internacionalización se consigue cambiando los textos que aparecen en un sitio web por el mismo texto traducido en otro idioma.  Para esto existen 3 sistemas.

  • Uso de un archivo.
  • Uso de una base de datos.
  • uso de la biblioteca gettext.


Uso de un archivo.

Este fue el primer método usado para la i18n. Consiste en generar diferentes archivos. Cada uno con la traducción de todos los textos necesarios para el sitio web.

Se crea un archivo por cada idioma y se nombra al archivo siguiendo algún tipo de regla. Por ejemplo en_string para ingles es_string para español, etc.

El archivo que queremos traducir en lugar de los textos tiene variables y se implemente un sistema para seleccionar el archivo indicado según el idioma que se quiere traducir.

Muchas aplicaciones usan este sistema puesto que resulta muy sencillo y efectivo de instalar para pequeños proyectos.

El problema de este sistema es su dificultad de mantenimiento. Hay que generar un archivo que puede ser bastante grande y tenerlo actualizado de manera manual.

Uso de una base de datos.

Otro sistema es el uso de la base de datos.  En este sistema las traducciones se guardan en  una base de datos. Cada vez que se genera una página web se realiza una consulta en la base de datos que devuelve el valor necesario para la correcta traducción.

Este sistema es usado por ejemplo por prestashop. En donde podemos encontrar tablas con todas las traducciones de los diferentes idiomas.

Este sistema es también muy utilizado. Sin embargo, al tener que realizar una consulta a la base de datos cada vez que se recarga la página puede perjudicar el rendimiento.

Uso de la biblioteca gettext

La biblioteca gettext es la usada por los sistemas GNU para solucionar el problema de la i18n podéis encontrar más información aquí.

Este sistema se basa en el uso de una estructura predeterminada de nombres y directorios que el dice al sistema operativo donde buscar las traducciones. Para las traducciones a su vez se usan 3 tipos de archivos POT, PO, y MO.

No os preocupéis por ahora por esto, ya entraremos con más detalle. Por ahora lo importante es que el archivo MO es un archivo binario que además se guarda en cache por lo que es más eficiente que los otros dos métodos.

Además existen herramientas gratuitas como POedit que te permiten trabajar de manera muy sencilla con estos archivos. Entre otras cosas te permite parsear un archivo de forma que extrae los textos que hay en el de manera automática.

Este sistema esta muy extendido y se considera prácticamente un standard. PHP viene con una API la su utilización. Es usado por multitud de aplicaciones. Por ejemplo, el popular CMS WordPress utiliza este sistema.

Sin duda esta última es la mejor opción y por eso es la escogida para nuestro ejercicio de i18n. El problema es que no es perfecto y para nuestro caso en el que usamos PHP y Smarty tiene algunas pegas.

Pegas

Para empezar es necesario tener instalado el paquete del idioma al que queremos traducir en el sistema operativo donde se ejecuta. De forma que aunque todo esté perfectamente instalado puede que la librería no cumpla su función.

Además, por defecto la librería no esta pensada para PHP. Es decir tiene la API para que funciona pero los programas como POedit (que es el que usaremos ) no tienen la capacidad de trabajar con archivos PHP y mucho menos con Smarty.

Sin embargo estas pegas las solucionaremos con el uso de algunas librerías que veremos más adelante.

Vamos a utilizar la librería gettext

Bueno.yo creo que por ahora esta bien. En el próximo post explicaré como funciona la librería gettext

 

 

 

Deja una respuesta

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