Desarrollando aplicaciones multidioma con PHP

May 9th, 2008 | by necudeco |

Las aplicaciones Web al igual que cualquier otro tipo de aplicacion son mucho mas faciles de utilizar si son visualizadas en el idioma nativo del usuario. Claro que a diferencia de las aplicaciones de escritorio, las aplicaciones Web no tienen un ambiente controlado. Es por eso que se hace mucho mas necesario darles el soporte multidioma.

Hoy vamos a aprender como hacerlo usando las librerias gettext de Linux.

  • Establecer el idioma

El primer paso es establecer el idioma para la visualizacion del contenido. Esto se lleva a cabo con la funcion setlocale.

setlocale(”LC_ALL”,”es_PE”);

El segundo parametro ( es_PE ), indica el idioma usado, en este caso español de Peru. Esa informacion puede ser almacenada en el perfil del usuario dentro de la base de datos o ser obtenida a traves de un formulario en la misma pagina web. Una lista codigos para los locales los podes encontrar en:

ls /usr/share/locale

  • Definir la carpeta de los archivos de traduccion

bindtextdomain(”myapp”,”/var/www/myapp/locale”);

Esta funcion, le indica al sistema en que carpeta se encuentran las traducciones para el dominio myapp. Esto nos permite usar varios sistemas de traduccion para la misma aplicacion.

  • Elegir el dominio

textdomain(”myapp”);

Elegimos el dominio que usaremos, como solo hemos definido un dominio no tenemos mucho que pensar aca.

  • Imprimimos nuestros mensajes.

Para imprimir los mensajes traducidos, debemos usar la funcion _.

echo _(”Hola mundo”);

  • Crear los ficheros de traduccion

Los ficheros de traduccion deben estar en la carpeta /var/www/myapp/locale ( que fue la carpeta que indicamos en el paso 2 ). En esta carpeta se debe definir un directorio por cada idioma soportado. Por ejemplo, para el idioma español de Peru, se debera crear un directorio llamado es_PE.

Dentro del directorio es_PE, se debera crear el directorio LC_MESSAGES.

mkdir /{directorioweb}/locale/{idioma}/LC_MESSAGES -p

Los ficheros de traduccion ( .po ) son simples archivos de texto donde tienen la cadena original ( tal como aparece en php ) y la cadena traducida. Por ejemplo

msgid “Hola mundo”
msgstr “Hello world”

Si se te hace lio crear todas las cadenas, puedes usar xgettext para recorrer tus archivos fuentes en busca de cadenas para traducir. Este programa te arma el fichero .po, ahora solo nos resta escribir las cadenas traducidas ahi y compilarlo.

Para compilarlo ejecutamos el siguiente comando

msgfmt messages.po

Y Listo, tenemos una aplicacion multi idioma, funcionando.

UPDATE:

Si trabajas en un entorno Windows, ve con un cura y confiesate. SI ya lo habias hecho, y tu jefe aun insiste en tener un “servidor” windows, pues ni modo. Una forma mas facil de hacerlo en Windows es Traducir aplicaciones Web en Windows el aporte es gracias a deLaPipol

  1. 3 Responses to “Desarrollando aplicaciones multidioma con PHP”

  2. By delaPipol on May 15, 2008 | Reply

    Mis dos céntimos:

    1: hay un error mecanográfico, pusiste setlocalte en vez de setlocale.

    2: no hace falta compilar los .po, hay una forma más fácil de trabajar con locales, aquí viene explicada por si quieres ampliar tu tutorial:

    http://www.mclibre.org/consultar/php/lecciones/php_gettext.html

    ¡Saludos!

  3. By necudeco on May 15, 2008 | Reply

    A estas alturas, ya no me sorprenden mis errores de “imprenta”. A veces hasta medio dormido escribo y no siempre le atino a la tecla :P.

    En cuanto a compilar, pues no es tan complicado … es solo un comando :P. Ademas tu tuto es mas windowsero y yo solo trabajo en Linux ( Windows es para warcraft :P )

    Pero gracias por el aporte.

  1. 1 Trackback(s)

  2. May 10, 2008: HOWTO: Crear aplicacion Web multilingüe con PHP

Post a Comment