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…




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.