Blog de Gonzalo

Proyectos en varios idiomas

Una manera sencilla de tener un proyecto php en varios idiomas es usando las funciones gettext lo que se denomina i18n que significa internacionalización y localización, que es poder usar varios idiomas sin tener que cambiar el código por cada idioma ya que los literales están seprados del código. Voy a intentar explicarlo de una manera sencilla:
Primero habrá que hacer los ficheros con los textos en los idiomas que se vayan a usar en la web. En este caso se usan ficheros con extension "po",dichos ficheros se pueden editar con la aplicación PoEdit. Estos ficheros hay que crearlos en la carpeta locale/es_ES/messages.po. Los mensajes tienen que ser escritos de la siguiente manera:

msgid "Nombre"
msgstr "Name"
msgid "buenos_dias" msgstr "Good morning"

En el código anterior esta la clave "msgid", que será común para todos los idiomas que se vayan a usar en el proyecto, y el mensaje "msgstr" que es lo que se va a traducir.
Fijaos que en la ruta del fichero con los literales del directorio "locale" cuelga el directorio "es_ES" que es el idioma que se ha definido para usar en la web. Si se quiere añadir el inglés americano la ruta sería locale/en_US/messages.po.
El siguiente paso es separar los literales del código para tener el mismo código para todos los idiomas y no tener que duplicar nada. Hay que usar la función gettext:
//Para inglés
echo gettext("Nombre"); // mostaría el texto Name
echo _("Nombre"); // Es un alias de la función gettext
//Para español
echo gettext("Nombre"); // mostaría el texto Nombre
echo _("Nombre");

Después de los pasos anteriores hay que decirle al código que idioma debe coger ya sea detectando el idioma el visitante o con la opción de elegir el idioma en la página web. Y esto se peude ver en el siguiente código
putenv("LC_ALL=es_ES");
setlocale(LC_ALL, $language);