Polyglot: WordPress multilenguaje


Wordpress MultilanguageDebemos admitir que el lenguaje de Internet es el inglés. Si queremos que un artículo o un comentario de nuestros blogs pueda ser leído por la mayor cantidad posible de personas, independientemente de cual sea su idioma nativo, debemos escribir en inglés. Mi interés por hacer de “Mi aldea” un sitio bilingüe se remonta a mis inicios en la blogosfera. Afortunadamente para mí, mi amigo Gustavo también estaba interesado en este tema, así que pusimos manos a la obra juntos (y yo pude capitalizar la experiencia que él tiene con PHP ;-) ). Luego de probar varios plugins de WordPress para internacionalización nos decidimos por Polyglot que hace lo que se necesita sin incomodar a quien lo use.

Como usarlo

La instalación es demasiado sencilla, simplemente se descarga el archivo desde su sitio y se descomprime en el directorio wp-content/plugins de WordPress. Seguidamente se debe activar el plugin y estamos en condiciones (o casi) de agregar entradas en tantos idiomas como queramos. En realidad antes de poder hacerlo debemos cambiar su configuración para reflejar el ambiente que tenemos en nustro sitio y agregar la función que permita cambiar entre idiomas en las plantillas de nuestros temas. Gustavo escribió instrucciones mas detalladas al respecto en su blog. Lo interesante de Polyglot es que puede funcionar como filtro tanto para las entradas en sí como para los comentarios y títulos. Para usarlo basta con envolver lo que queramos poner en un determinado idioma entre marcas de lenguaje que usan identificadores ISO como parte de la marca. Por ejemplo, si quisiéramos texto en español (identificador ISO “es”) y texto en inglés (identificador ISO “en”) en una misma entrada escribiríamos:
< lang_es >Texto en español< /lang_es >
< lang_en >Text in English< /lang_en >

Nota: Los espacios en blanco dentro de las marcas de lenguaje del ejemplo no deben usarse, fueron agregados para que Polyglot las ignore.

En el caso de los títulos también se pueden usar marcas de lenguaje. Para los comentarios se usan las mismas marcas pero entre paréntesis rectos.

Otros ajustes

Una vez que Polyglot está funcionando es muy probable que se deban realizar otros ajustes para poder dejar mas prolijo el sitio. Estos ajustes pueden requerir editar los archivos del template, de Polyglot o incluso de otros plugins. Esto es necesario porque no siempre se usan las interfaces de programa o las llamadas a la funciones que permiten una fácil internacionalización ( __() y _e() ). Algunos de los cambios que hice:

Texto del menú de selección de lenguage:

Quise usar un texto mas descriptivo que solo el nombre del lenguaje en el menú de selección del mismo. Para lograr esto se debe cambiar el archivo wp-content/plugins/polyglot.php cerca del principio donde se definen variables de configuración:
$polyglot_settings['trans']['en'] = 'Also available in English.';
$polyglot_settings['trans']['es'] = 'También disponible en español.';

Lista de lenguajes:

En su configuración por omisión Polyglot usa una lista no ordenada para mostrar los diferentes lenguajes disponibles para una entrada. Yo quería incluir la selección de lenguaje en el bloque de metainformación de la entrada por lo que fue necesario quitar la lista. Para esto hice la llamada con parámetros vacíos en los archivos de la plantilla del tema.
< ?php if(function_exists('lp_other_langs')) { lp_other_langs(' ','', '', '', ''); }?>

Bandera y texto:

Las entradas de la lista de lenguajes disponibles para un artículo consisten o bien de una bandera o bien del texto descriptivo. Queda mas prolijo y claro si se usan ambos elementos, máxime si ya cambiamos dicho texto.
function polyglot_other_langs(...
...
$foo = ($polyglot_settings['use_flags'] ) ? "\"".get_trans($lang)."\" ".get_trans($lang) : get_trans($lang);
...

Botones para el editor:

Ya que vamos a estar abriendo y cerrando muchas marcas y en mas de un lenguage, ¿no sería interesante contar con botones del editor que nos ayuden a hacerlo? El archivo que se necesita editar para esto es el wp-includes/js/quicktags.js. Cada entrada consiste de un nombre, una etiqueta para el boton, una marca de apertura, una marca de cierre, una tecla asociada y si la entrada queda abierta o no. Las marcas son las que ya vimos y para la etiqueta yo usé los códigos ISO. La tecla asociada se usa en conjunto con “Alt” para el mismo efecto.
edButtons[edButtons.length] = new edButton('ed_es','es','< lang_es >','< /lang_es >','e');
edButtons[edButtons.length] = new edButton('ed_en','en','< lang_en >','< /lang_en >','n');

Hay muchas mas cosas para comentar y ajustes para hacer. Sigan en sintonía..

Information and Links

Join the fray by commenting, tracking what others have to say, or linking to it from your blog.


Other Posts

Write a Comment

Take a moment to comment and tell us what you think. Some basic HTML is allowed for formatting.

Reader Comments

Is there a way to make a drop down list with available languages. When selection is made the correct language loads?

There is a function, polyglot_list_langs() , that gives you a list of languages available for you to choose one for the entire site. It is demonstrated on the author’s site. Look for the “Preferred language” part at http://fredfred.net/skriker/index.php/polyglot. This function can be used in a sidebar. Maybe you can have its output as an input for a drop down menu list. I have not tried to do so, my site only has two languages to choose from.

Thank you for putting me in the right direciton.

I was using lp_other_langs(‘ ‘,”, ”, ”, ”)

now I’m using polyglot_list_langs() and changed the polyglot.php file a bit. I have to further tweak to get it working perfectly.

When a user changes to an other language with the dropdown box the correct language should load. I guess I have to write a javascript event listener.

thanks

hello mauricio

do you happen to know how i could display both the flag and the language name with this function (let’s you chose the language for the whole blog)


been looking for a solution now for ages.

i am offering the rss feed in different languages as well, but i would only like to display, say the english rss feeds when english is selected and the german feeds, when german is selected as the language for the blog. nobody could give me an answer so far.
i would really appreciate your help.

merry x-mas, by the way…

Hi!
I really cant manage on changing the blog visual (the sidebar with the “categories” translated to “categorias”, for example)
I did not know how or where to use the _e( ) writing mode…
Could you help me (and many more of us) with this issue or create kind of a “tutorial” explaining these procedures?

Thank you very much!

Buenas, 1 el post … una pasada de util, gracias.
2 He metido el
solo en la cabecera y me andava por la cabeza si A) puedo forzar a que se muestre siempre? B)puedo forzar a que se muestren todas mis lenguas, ahunque algun post no este escrito en ellas?
Muchas gracias otra vez.

Buenas, 1 el post … una pasada de util, gracias.
2 He metido el php if(function_exists(‘lp_other_langs’)) { lp_other_langs(‘ ‘, ”, ”, ”, ”); }
solo en la cabecera y me andava por la cabeza si A) puedo forzar a que se muestre siempre? B)puedo forzar a que se muestren todas mis lenguas, ahunque algun post no este escrito en ellas?
Muchas gracias otra vez.

para saver el pluguin que usas que jo tambien lo quieroooo jopeee.

Hola Mauricio, lo primero gracias por este buen post.

Estoy intentando sacar tanto el texto como las banderas dado que como comentas queda mucho mejor pero me encuentro con que al intentar usar tu código dentro de la función polyglot_other_langs() me da un error al insertar el módulo. Finalemnte he hecho mi arreglo “ad hoc” pero la verdad es que me gustaría haber entendido un poco mejor si hay una forma más elegante y correcta de hacerlo. ¿Puedes aclarar un poco donde insertarías en código justamente para hacerlo funcionar?
Yo lo he probado bajo y sobre el código en el que se introduce el valor a la variable foo y me ha fallado.
Finalemnte he tenido que hacerlo modificando la linea original del código así:

//Modificación para introducir el texto además de las banderas
$foo = ($polyglot_settings['use_flags'] ) ? “” . get_trans($lang) : get_trans($lang);

Simplemente en caso de que esten activadas las banderitas, al final le añado el texto pero queda muy feo porque claro sale la típica barra de enlace debajo de la imagen y del texto.

Gracias por tu atención y un saludo,

javi.

Wenas!! Polyglot es compatible con WP 2.8.2?? Por más que intento me aparece el enlace para el idioma “English” en texto en lugar de la bandera (a pesar de estar la opción como true) y además me redirecciona a una carpeta llamada “weblang” o me parece ke le hace falta una “/” en el código por que la carpeta raiz se llama web… a lo mejor es “web/lang”. Es caso es que no funciona y me gustaria si es por temas de compatibilidad.

Saludos!

Hola! Tengo un problema, tengo un blog en inglés y también en español. El default language es en inglés. En español el blog funciona bien, pero cuando busco por categorías en el default language (inglés) las categorías aparecen sin el texto y se me desarma el sitio. Te pasó algo parecido alguna vez?