Multilanguage site con PHP y Smarty (Parte 1)

imagen con banderas de distintos paises

Muy bien. Así que quieres que tu página esté disponible en varios idiomas.

Pues ¡Manos a la obra!.

En esta serie de posts vamos a explicar como conseguir una página que esté disponible en múltiples idiomas. Usando el lenguaje de programación PHP y el motor de plantillas Smarty. Comencemos !!!

Ok. Pero… exactamente… ¿Qué vamos a hacer?

Bueno, como ya se ha comentado en el título del post. Vamos a explicar como crear una página en distintos idiomas. Además, vamos a explicar varios conceptos como i18n, l10n, POT, PO y MO, las diferentes opciones que existen para la internacionalización, el sistema de traducciones gettext y el uso del programa POedit.

Casi ná !

Ingredientes:

Para nuestro proyecto vamos a utilizar:

  • El lenguaje de programación PHP.
  • El motor de plantillas Smarty 
  • Sistema gettext usando por los sistemas operativos GNU. Es decir usando archivos de tipo POT, PO y MO.
  • La librería php-gettext. Que nos permitirá utilizar el sistema gettext sin preocuparnos de tener los idiomas instalados, ni la librería compilada en nuestro sistema.
  • El plugin de Smarty smarty-gettext que nos permitirá usar la librería php-gettext con el motor de plantillas Smarty.

De esta forma, nuestro sistema va a tener las siguientes características:

  • Independiente de los idiomas instalados en el sistema.
  • Independiente de si la librería gettext esta compilada.
  • Facilidad para extraer los texto a traducir de nuestras plantillas.
  • Facilidad para incluir nuevas traducciones y manejar las ya existentes.

No te preocupes si no comprendes alguno de estos términos. Los iremos explicando poco a poco y de forma razonada para que se entiendan correctamente.

Algunos conceptos: i18n, l10n, r2d2 y c3p0.

Cuando alguien se interesa en la forma de dar soporte multi-idioma hay dos palabras o conceptos que aparecen continuamente y que no todo el mundo tiene claro su significado:

Internacionalización y localización. En ingles, internationalizationlocalizationCansados de escribir estas palabras una y otra vez mucha gente a adoptado el hábito de escribirlas como i18n y l10n.

  • Internationalization: Se suele abreviar con i18n. La razón es que hay 18 letras entre la primera i y la última ene.  Por internacionalización se a la operación en la que un programa o en este caso un sitio web es capaz de soportar diferentes idiomas. Esto es una generalización de un proceso en el que algo pensado para que sea presentado en un idioma concreto. Se pueda presentar en varios idiomas. Esto se hace cambiando los textos al idioma que se puede presentar.

hello world -> i18n -> hola mundo.

  •  localization: Al igua que internationalization, se suele abreviar con l10n. Por el mismo motivo. 10 letras entre la primera ele y la última ene. Este concepto supone un paso mas que la i18n puesto que supone no solo traducir los textos. Además, hay que proporcionar al programa la información necesaria para que se adapte y maneje los input y output de forma que se adapte no solo al lenguaje, sino a los hábitos culturales. Este proceso es mucho más complejo y queda fuera del ámbito de este manual.

1 pint of beer -> l20 -> 0,473176 litros de cerveza

  • r2d2: Es un personaje de ficción del universo de Star Wars. Es un androide astro mecánico,. Habla en idioma binario y se comunica con otras computadores en este mismo idioma. Curiosamente entiende perfectamente el ingles pero solo es capaz de responder en Binario. Pequeñito, azul, con ruedas, lleno de gadgets y mega molón. Fue interpretado por Kenny Baker hasta su fallecimiento el 16 de Agosto de 2016. En Sudamérica se le conoce como Arturito debido a la que R2D2 en ingles  se dice ar-two-di-two (R-2-D-2)
  • c3p0: Es un personaje ficticio del universo de la Guerra de las Galaxias. Se trata de un androide de protocolo, diseñado para el servicio de los humanos para llevar a cabo dichas tareas, para lo que domina seis millones de formas de comunicación. Eí, un momento. Seis millones de formas de comunicación. ¿Eso es i18n o l10n?. Si yo voy a la taberna de mos eisley y le digo que me pida un litro de cerveza en klingon. ¿Lo traducirá como 1,5 medias de volumen interestelar?.mmm . Yo creo que no. Mas bien solo pedirá una jara y listo.

HIq liter -> c3po-> ponte una jarra

En el siguiente post comentaremos los diferentes sistema que se pueden usar para la i18n de los sitios web y comentaremos como funciona el sistema gettext.

Pero eso ya, otro día.

Deja un comentario

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