¿Cómo Traducir Tu Aplicación PHP Con Gettext Y Archivos MO?

Hola, bienvenidos a este nuevo vídeo en el que vamos a ver cómo podemos hacer para internacionalizar nuestra aplicación PHP.

Cómo podemos hacer para que nuestra aplicación escrita en PHP disponga de varios idiomas y dependiendo de si seleccionamos uno u otro, pues la aplicación nos salga en un idioma o en otro.

Veremos lo que son los archivos mo y veremos lo que son los archivos po y veremos lo que es get text, que es una función de PHP que es nativa del propio lenguaje y que es una de las, una de las herramientas que tenemos para traducir nuestra aplicación.

Así que bueno, empezamos.

Yo aquí tengo mi mi proyecto creado justo para este video. Entonces voy a crear un index .PHP. Y bueno, nada hasta ahora, pues para hacer un link, un para pintar un lateral, pues hacemos un eco de ¡Hola mundo! Y bueno, yo aquí tengo la aplicación ejecutada y aquí vemos como se nos está pintando Hola mundo.

Bueno, ¿cómo hacemos para que este hola mundo salga diferente dependiendo del idioma que nosotros seleccionamos? Pues muy fácil y muy sencillo con get text. Bueno, para quien no lo sepa gettext, nada si ponéis aquí gettext pues PHP en la documentación oficial pues ya tenéis aquí para leer.

Básicamente lo que hace esto es nosotros hacemos un eco. Con gettext nos va a pedir un string, sería esto, ¡Hola Mundo! Aquí lo tenemos y ahora vamos a ejecutar. Aquí está. Vale, nos pinta. ¡Hola Mundo! Exactamente lo que nosotros hemos puesto aquí. Vale. Esta función tiene un alias que es es lo que vamos a usar que ese barra baja simplemente así, una barra baja y el nombre de la función. Y dentro de los y como primer parámetro, el string el literal, aquí está. Esto nos va a pintar también ¡Hola mundo! ¿Por qué? Bueno, ahora explico, vamos a ver lo que hace esto.

Entonces ahora es cuando vamos a ver el tema de los mo y el tema de los po file. Cuando nosotros le pasamos un literal este string a esta función, esta función lo que va a hacer es buscar. Hola Mundo en unos archivos, en los archivos mo del lenguaje que nosotros tengamos configurado en ese momento, va a buscar hola mundo como el ID de ese string y si encuentra una traducción, pues nos la va a pintar y si no, pues pinta lo que nosotros le hemos enviado. En este caso. Hola mundo, no es que no hemos creado aún los archivos po, los archivos mo. Entonces no encuentra Hola mundo en la traducción del sistema, digamos después devuelve hola mundo, esto cuando hayamos creado los mo pues nos devolverá Hola mundo.

Entonces. ¿Cómo hacemos para crear todo esto de los mo y los po file? Bueno. Aquí lo que vamos a hacer es crear una carpeta en la raíz, en la raíz de nuestra obligación, que la vamos a llamar local. Vale, y ahora lo que hacemos es crear tantas carpetas como lenguajes queremos que como lenguajes en los que queremos que nuestra aplicación esté disponible.

Por ejemplo. Eso es bueno. Esto es un código, esto no me lo he inventado. Esto sí buscáis en PHP ya os salen aquí la función de gettext ya veis como ellos ponen un ejemplo que es para el alemán de-de. Pues bueno, dependiendo del código que del idioma queráis, pues miráis el código que yo he puesto es-es para español.

Entonces ahora lo que tenemos que hacer es crear el ec message. Pero lo he puesto bien. Vamos a ver. Y ahora dentro de lo que vamos a crear es un archivo po que vamos a llamarle default.po.

Y ahora para quien no sepa lo que son los archivos po. Los archivos funcionan de la siguiente manera un poco lo que os comentaba hace un momento. Los archivos po tienen siempre, siempre esta sintaxis, primero tienen un MSG ID y luego tienen un MSG STR.

El msg id, es el id del literal que nosotros ponemos aquí en este dentro de esta función. Entonces y aquí en msg str lo que queremos que nos salga traducido. Entonces, en este caso, ¿qué va a hacer esto? Pues nosotros aquí le indicamos hola mundo, lo que va a ir es se va a ir bueno, a todo esto. La configuración del idioma que tengo ahora mismo en la aplicación no lo pongo por ningún lado pero es español es-es.

Entonces lo que va a hacer cuando nosotros hagamos este eco de Hola mundo, se va a ir a este po, realmente no se va a ir al po, se va a ir al archivo mo que el archivo mo no es más que el archivo po, pero generado de una forma que PHP lo va a entender. Vale, entonces lo que va a hacer es que se va a ir a buscar Hola mundo como msg id, Hola Mundo y si, si hay una msg id que sale hola mundo pues nos va a devolver su msg, etcétera.

Vale, entonces para que haga eso vamos a configurarlo. Yo tengo por aquí, vamos a ver, a ver, lo que voy a hacer es definir una ruta que es donde tengo yo esta aplicación de prueba. Ahora, lo que voy a hacer, todo este código está en la función de gettext. Lo podéis, podéis profundizar en el tema. Lo que especificará es que con estas dos líneas lo que hago es especificar que el idioma que estoy utilizando es el español.

Según tengo entendido, aunque esto no lo tengo muy claro, creo que esta línea es para Windows y ésta es para Linux. Pero bueno, luego ya os contaré que tuve un montón de rulas con estas tres historias y y las pruebas que hice las hice bajo champ, bajo, bajo Windows, con champ y a mi no me ha funcionado la historia, pero bueno, es otra historia. Os cuento que os la contaré después. Bueno.

Luego, aquí, con esta línea de aquí, vamos a ver con esta línea de aquí lo que hacemos es indicarle a PHP que nuestra nuestras carpetas de la configuración de los idiomas se encuentran en la carpeta locale. Vale, esta está aquí. Y ahora, con esta otra línea, lo que le decimos es que el archivo mo se va a llamar default. Y bueno, y básicamente, pues ya está así, así de simple. No, no hay más.

Entonces bueno que nos falta, crear el archivo mo, para ello hay muchas alternativas, una de ellas es un programa que se llama poedit. Otra de ellas es generarlo online, con esta herramienta que es potomo, que es la que voy a usar yo aquí lo tengo default.po, le damos a convertir. Nos va a generar el po, nosotros en el po ya sabemos que son, nos genera po file y mo file, descargamos el mo.

Vale, yo aquí tengo el mo que acabamos de descargar, le ponemos recordamos default de nombre, sino no nos funcionaría porque es lo que le hemos indicado aquí, vale que en texto main que en los archivos mo se llama default.mo. Pues básicamente ya lo tenemos.

Entonces ahora nosotros cuando hacemos un hola mundo, como estamos, como el idioma es español, pues se y la carpeta donde esta este idioma español es locale, pues lo que van a hacer es irse a locale, es irse, es irse a es-es, luego se va a ir a lcmessage y va a coger como indicó aquí el default.mo. Vale.

Entonces pues lo que lo que os digo va a buscarse este msg id y pues bueno, nos va nos si funciona nos va a tener que devolver el Hello. Lo probamos vamos, y vemos que no nos funciona. Vale, estoy refrescando y vamos, que no funciona. Nos sigue lanzando ¡Hola mundo! Cuando debería de ponernos Hello world Bueno, esto es porque por la caché del apache vale, entonces lo que hacemos es lo que tengo el control de cham y reiniciamos el Apache, vale, lo cierro y lo vuelvo a abrir. Lo volvemos a probar y sigue sin funcionar.

Pero esta vez es por que me he equivocado aquí en la ruta está que es get text, vamos a probar. Vale, y ahora ya si me dice Hello world. Entonces bueno, básicamente esto es como funciona gettext y cómo hacemos para traducirla, para producir una aplicación.

Entonces ahora lo que haríamos es coger un idioma por defecto. Pongamos por ejemplo el español y pues nada, haríamos nuestro eco, nuestros ecos en español y digamos, no crearíamos aquí una carpeta para español, vale. Creemos aquí, por ejemplo esto sería para el inglés, por ejemplo, que viene siendo, por ejemplo, para el inglés de los Estados Unidos, si no me equivoco. De Reino Unido si no me equivoco es así. Tendría que mirarlo, no estoy seguro.

Bueno. Ahora sí, ahora sí. Esto sí que estaría bien traducido. Veis que no pongo carpeta es-es? ¿Por qué? Porque no hace falta. Yo si aquí pinto un literal que es Hola mundo, se iría a la carpeta es-es, buscaría el id de Hola mundo, pero como no hay carpeta no lo va a encontrar, se va a ir, no lo va a encontrar entonces lo que me va a devolver es hola mundo.

¿Qué hago con esto? Que por defecto la aplicación esté en español y luego pues si quiero traducirlo, pues le meto en barra baja uk. He aquí se lo hago a medida también. Vale, ahora la aplicación estaría en inglés y esto en el mundo así sería, aquí sería este mo y me pintaría Hello world.

Bueno, básicamente esto es todo. Yo hice pruebas. Ya os digo lo que os decía antes, hice pruebas bajo Windows con Champ y a mí esto no me ha funcionado, vale. Yo por más que en put event y en chain locale, ponía cualquier otro idioma y además con distinta, con distintos códigos, no sólo éste, sino el ISO no sé qué y el ISO no sé cuánto, con varios códigos no me ha funcionado siempre, siempre la aplicación tomaba como idioma el español, por lo que pusiera lo que pusiera siempre me iba a la carpeta es barra baja es y me cogía de allí las traducciones.

No sé de quién es culpa si de champ o mi Windows, la versión de PHP que estoy usando, no lo sé. Pero bueno, la idea que os comento aquí en el vídeo es la idea sale de documentación de PHP y es como debería de ser y como debe de funcionar.

Seguramente en Linux pues pienso que esto por lo que estuve leyendo, pienso que esto me funcionaría a mi, no me funciona. Pero bueno, básicamente la historia es está.

Entonces nada espero haberos ayudado o que os quedara clara en la medida de lo posible, cómo traducir una aplicación en PHP y como usar los archivos mo y los archivos po. Bueno, nos vemos en el siguiente vídeo.

Un saludo y hasta la próxima.

Dejá tu comentario

Tu dirección de correo electrónico no será publicada.