Gettext+PHP: El duo perfecto para webs multilenguaje

Hasta hoy no había usado gettext, más que para traducir aplicaciones, nunca en desarrollos mios, por que nunca he desarrollado nada multilenguaje, hasta ahora, que estoy reprogramando y mejorando mi “web insignia”, y la verdad, me he quedado impresionado…

Muchos ven gettext como algo complciado y poco flexible (principalmente por las exigencias a nivel servidor), pero para programar, a mi me ha parecido lo más comodo, pero para que me entendais, vamos a ir paso a paso.

Actualmente, la opción más extendida, por la nula exigencia de prestaciones por parte del servidor, es crear un archivo.php por cada lenguaje, que incluye variables/array de cada cadena, algo tal que así:

spanish.php
$String['user']=’usuario’;
$String['pass']=’clave’;

english.php
$String['user']=’user’;
$String['pass']=’password’;

Y así con cada idioma, esto, como veis, obliga al programador a ir creando cada variable, y andar pendiente de controlar el cerro de strings que se pueden llegar a necesitar, algo sumamente tedioso a mi parecer, y que descarté en el acto.

Gettext, debido a su cantidad de utilidades, me permite programar en php, poniendo las cadenas que necesito en el codigo (igual que harias un echo, o setearias una variable), y luego extraer las cadenas a un archivo para su traducción, osea.

< ?
echo gettext(’Usuario’);
echo gettext(’Clave’);
?>

Y así con todas las cadenas, y luego, con ejecutar un simple comando (xgettext -n *.php) la aplicación extrae todas las cadenas, y genera el archivo de traduccion (messages.po).

Este archivo tiene una estructura simple, simple

msgid “Cadena original”
msgstr “Original string”

Osea, el msgid es la original, y el msgstr la traducida (a cualquier idioma, tan sol otendremso que ir traduciendo esos archivos, o encargarle a alguien que lo haga, sin necesidad de tocar codigo alguno).

pero es que, hay más :), no tenemos por que usar gettext(’cadena’) en php, podemos usar _(’cadena’) lo cual, acelerá mucho más la progrmación…

Y por si esto fuese poco… si añadiesemos cadenas, podemso usar msgmerge, para agregar los cambios, y hasta añade traducciones estimadas… vamos, toda una joya…

Y ahora, preguntareis ¿entonces por que no se usa en desarrollo web?, pues por que, como dije antes, requiere varias cosas en el servidor:

- PHP debe tener soporte Gettext.
- El servidor debe tener las utilidades Gettext.
- El servidor debe tener los locales de los idiomas que queramos usar.

Cosas, que como supondreis, son difiles de obtener en un hosting

Pero a mi parecer, aunque exija mucho más por parte del servidor (cualquiera que tenga una mínima experiencia instala todo esto sin problema y en minutos), merece la pena, ya que ahorro muchísimo tiempo, ya que no tengo que generar a mano las cadenas, simplemente las escribo en el código según las voy necesitando, y luego las tools de gettext se encargan de sacarlas, y prepararme el archivo de traducción :).

En cuanto tenga un rato, escribiré un articulo más extenso, por que la verdad es que tiene más cosas interesantes, es una autentica joya…

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • meneame
  • del.icio.us
  • digg

Deja un comentario:

Los comentarios en esta página no están moderados, aparecerán inmediatamente en la página al ser enviados. Evita, por favor, las descalificaciones personales, los comentarios maleducados, los ataques directos o ridiculizaciones personales, o los calificativos insultantes de cualquier tipo, sean dirigidos al autor de la página o a cualquier otro comentarista. Estás en tu perfecto derecho de comentar anónimamente, pero por favor, no utilices el anonimato para decirles a las personas cosas que no les dirías en caso de tenerlas delante. Intenta mantener un ambiente agradable en el que las personas puedan comentar sin temor a sentirse insultados o descalificados. No comentes de manera repetitiva sobre un mismo tema, y mucho menos con varias identidades (astroturfing) o suplantando a otros comentaristas. Los comentarios que incumplan esas normas básicas serán eliminados.

XHTML: Puedes utilizar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Comment moderation is enabled. Your comment may take some time to appear.