Posts Tagged “es_ES.mo”

Como ya mencioné en el artículo sobre qué hacer cuando el archivo .mo de traducción del tema de WordPress no funciona, para traducir un tema de WordPress en primer lugar es necesario aplicar las funciones __() y _e() a todas las frases y expresiones que se quieran traducir contenidas en los archivos del tema. La función __() devuelve la expresión traducida, mientras que la función _e() devuelve la expresión traducida y además la muestra por pantalla (echo), siempre que se disponga del archivo de traducción adecuado con extensión .mo. La mayoría de los temas vienen con las funciones __() y _e() aplicadas, aunque hay algunas expresiones en las que deberemos añadirlas nosotros a mano. Como se explica en el artículo mencionado, en las funciones __() y _e() también es necesario indicar el normbre del tema, de la forma:

_e('This post was written by ','nombre_tema');

y especificar que cargue el el archivo de localización .mo del tema añadiendo la línea

<?php load_theme_textdomain('nombre_tema'); ?>

en algún archivo que se cargue siempre (como header.php).

Una vez tengamos todas las expresiones que queremos traducir con las funciones __() y _e() aplicadas, hay que utilizar la herramienta gettext, que rastrea todos los archivos del tema y extrae todas las expresiones que encuentra que utilicen las funciones __() y _e(). Las expresiones las almacena en un archivo de texto con extensión .po. Existen muchas versiones de herramientas gettext, por ejemplo el popular programa PoEdit trae entre sus archivos el ejecutable xgettext.exe.

Para utilizar el programa xgettext, los pasos básicos a seguir son:

1.- Introducir en un archivo de texto una lista de los archivos a rastrear. Se puede hacer desde la carpeta donde tengamos el tema con “dir > archivos.txt” desde la línea de comandos y después editar el archivo para quedarnos sólo con la lista de archivos PHP.
2.- Ejecutar desde la línea de comandos “PATH c:\archivos de programa\poedit\bin” (o la ruta del ejecutable xgettext.exe) para que lo tengamos disponible desde la carpeta del tema.
3.- Ejecutar xgettext de la siguiente forma (todo en una línea):

xgettext.exe --keyword=__ --keyword=_e --language=PHP
--files-from=archivos.txt --from-code=UTF-8 -d es_ES

lo cual generará un archivo es_ES.po con todas las expresiones que haya encontrado en las funciones __() y _e(). Si queremos añadir nuevas expresiones para traducir a un catálogo .po ya existente, hay que utilizar -j:

xgettext.exe --keyword=__ --keyword=_e --language=PHP
--files-from=0.txt -j --from-code=UTF-8 -d es_ES

Una vez tengamos el archivo .po generado lo podemos traducir con la ayuda del programa PoEdit, que también genera el archivo .mo final.

Más info: Localización con WordPress

Etiquetas: , , , , , , , , ,

Comments 1 Comentario »

Como ya sabe cualquier usuario avanzado de WordPress, el panel de control y algunas frases genéricas de este CMS se pueden traducir al español poniendo el archvio es_ES.mo en /wp-content/languages y definiendo en /wp-config.php la línea define(‘WPLANG’,’es_ES’);

Pero para traducir un tema en particular, es necesario poner todas las frases que se quieran traducir entre las funciones __() y _e(), generar el archivo .po a partir de una herramienta como gettext y traducir todas las expresiones con la ayuda de algún programa como PoEdit, que también genera el archivo .mo final. No es mi intención explicar este proceso en este artículo (más sobre la herramienta gettext), sino abordar un problema que se me ha planteado y me ha costado mucho de solucionar.

Cuando tenemos el archivo de traducción del tema al español es_ES.mo generado, suele ocurrir que al actualizarlo en Internet el tema sigue apareciendo en inglés. Después de buscar mucho por Internet y no hallar solución, me fijé en algunos temas ya traducidos como mandingo y encontré la causa del problema. Pensaba que por defecto cualquier tema buscaba en la carpeta raíz el archivo de traducción a partir del parámetro WPLANG (en nuestro caso ‘es_ES’), pero no es así, hay que indicárselo.

En primer lugar, hemos de cargar el archivo de localización .mo del tema y esto se hace con la función load_theme_textdomain(‘nombre_tema’), así que hay que poner en algún archivo que se cargue siempre (como header.php) la siguiente línea:

<?php load_theme_textdomain('nombre_tema'); ?>

A continuación, en todos los archivos php del tema donde se utilicen las funciones de traducción __() y _e(), hay que especificarle el tema en todas las llamadas a esas funciones, por ejemplo:

_e('This post was written by ');

cambia a

_e('This post was written by ','nombre_tema');

y eso es todo. Es un poco de trabajo adicional pero así conseguimos que funcione nuestra propia traducción del tema.

Para no tener que hacer esto con todas las llamadas a las funciones __() y _e(), pensé en ir a su definición y modificar directamente el $domain, que por defecto es ‘default’, es decir, en /wp-includes/l10n.php cambiar el tema por defecto:

function __($text, $domain = 'default')

cambia a

function __($text, $domain = 'nombre_tema')

pero esto hace que el panel de control de WordPress pierda la traducción, ya que deja de cargar el archivo es_ES.mo genérico de /wp-content/languages, así que no tendremos más remedio que modificar todas las llamadas a las funciones __() y _e().

Etiquetas: , , , , , , , ,

Comments 11 Comentarios »