Traducir una plantilla de wordpress

ejemplo PoEdit

Traducir una plantilla de worpress o tema o template o theme como gusten llamarle puede ser algo complicado y aburrido por que a veces las herramientas no funcionan como deberian, y en internet no te dicen bien como hacerlo,  y si te lo dicen te lo explican de una manera muy general y si no eres programador o no tienes mucha experiencia con wordpress, te pones bien fiera a leer mucha información para que luego no te sirva de mucho.

Así que tratare de dejaros un tutorial mas o menos facil segun mi criterio, eso si tienen que tener conocimientos basicos de php y un poco de linux, no linux en si, mas bien unix algunos comandos basicos, para poder hacer esto, por lo que si no sabes nada de eso te sugiero que te  estudies algo de php y unix para que se te haga mas facil.

Para la traduccion yo lo hice en un macbook con Lion pero tambien se puede en windows y en linux es solo una aclaración.

PASO 1 Internacionalizar nuestros archivos con las funciones __() y _e()

Lo primero que tenemos que hacer es hacer traducible los archivos de la plantilla, ¿como hacemos eso? identificamos donde se encuentran los textos que se le muestran al usuario final y estos los ponemos en formato para que el gettext lo entienda algo asi:
[cc lang=”php”]

//este funciona cuando pasamos texto a funciones o se ocupa hacer return y alguien le hace echo
__(“mi texto traducible”);

//este es por si es texto directo o hay un echo
_e(“mi texto traducible”);

[/cc]

Paso 2 Crear Nuestra Plantilla de traduccion o Archivo POT

Una vez que terminemos de editar nuestros archivos de la plantilla ahora, lo que sigue es crear un archivo POT, que es nuestro archivo de plantilla para las traducciones, lo que hace este archivo es generar algo como si fuera un hashmap de java, o como lo explico a usuarios normales, genera un archivo de 2 columnas unas es la clave y la otra el valor para esa clave.

Al tener el archivo de esta forma: “clave : valor” donde la primer columna clave es el texto en ingles por ejemplo “Comments : Comentarios”, comments es la clave y comentarios es el valor para esa key, para nuestra traducción en español, depende del idioma para este caso es de ingles a español.

En realidad el contenido de ese archivo es algo como esto:
[cc lang=”bash”]
msgid “Comments”
msgstr “Comentarios”
[/cc]

Para generar nuestro archivo POT en mac o linux bueno en sistemas basados en unix, se supone que en mac con el POEdit los genera automaticamente pero en mi caso no me dejo, no entiendo todavaia el por que, asi que tuve que hacer el proceso desde la terminal e invocar el comando xgettext  en el directorio raiz de nuestra plantilla y ejecutar xgettext de la siguiente manera:

[cc lang=”bash]
xgettext -f filelist -d test -L PHP –keyword=__ –keyword=_e
[/cc]
Tambien se puede hacer de esta manera:
[cc lang=”bash]
find . -type f -iname “*.php” | xgettext -d test –keyword=__ –keyword=_e
[/cc]

Que significa eso de arriba bueno lo explicare de manera rapida En la primera forma tiene las opciones -f, -d, -L y –keyword:
La -f no indica el archivo que contiene los archivos que se escanearan para este ejemplo se llama filelist y tiene el siguiente contenido:
[cc lang=”bash”]
guide.php
index.php
search.php
slide.php
ad1.php
footer.php
header.php
searchform.php
sponsors.php
archive.php
fullwide.php
homewidget.php
page.php
sidebar.php
comments.php
functions.php
single.php
[/cc]
Que son los archivos que buscara para generar nuestro catalogo POT o PO para luego abrirlo con POEdit.

La opcion -d nos indica el nombre del archivo que se generara en este caso se genera un archivo llamado test.po la extencion se agrega automaticamente.
La opción -L nos indica el lenguaje de programación en este caso PHP.
La opción –keyword nos indica que buscara los 2 guiones bajos __ y _e para generar el archivo con clave:valor.

La segunda forma lo que hace es encontrar todos los archivos con extension php y por cada 1 que encuentra lo pasa al parametro -f pero generan basicamente lo mismo yo utilice la primera forma para así limitar a que busque en los archivos que yo solo le indico de igual manera la segunda forma ayuda cuando tienes mas archivos o piensas hacer traducibles un numero desconocido de archivos utilicen cualquiera de todos funciona igual.

Si quieren mas información pueden ver la documentación de xgettext en los links que dejare al final de este post ya que ahi viene mas explicado y detallado.

Bien ahora ya tenemos nuestro catalogo de traducción como les digo puede ser PO o POT en este caso se crea un PO pero no hay problema tambien sirve para nuestro proposito, nos genero un archivo llamado test.po.

PASO 3 Generar Traducciones para nuestro idioma.

Abrimos PoEdit, si no lo tenemos instalado ir a poedit.net y descargarlo lo bueno que es multiplataforma, bueno una vez que lo abran, abren el archivo que acabamos de crear en este caso test.po y deberia aparecerles algo como esto al abrirlo:

ejemplo PoEdit

Ven como les decia clave:valor en este caso texto original:traduccion ya tenemos nuestro archivo de plantilla ahora solo falta llenar las traducciones que deseamos, una vez que terminemos nuestro archivo quedaria de la siguiente manera:

ejemplo archivo PO

Despues le damos guardar como y depende de nuestro idioma nombramos el archivo por ejemplo si eres de mexico y hablas español entonces tu archivo deberá llamarse ES_mx.po pero si lo quieres en español de españa entonces tu archivo se llamara ES_es.po y lo guardamos en el directorio raiz de nuestra plantilla, yo en este caso genere un archivo de traducción para español de España.

PASO 4 GENERAR ARCHIVO MO

Este paso esta de mas si no configuras el poedit para que te compile un archivo MO cada vez que guardas tu archivo PO, para configurar el POedit para que nos genere automaticamente un archivo MO es sencillo nos vamos a Preferencias->Editor y seleccionamos compilar archivo .MO al guardar y listo cada vez que guardemos nos genera nuestro archivo MO, que es el que lee nuestra aplicación (en este caso PHP y la plantilla) para aplicar las traducciones.

Pero tambien existe una forma de generar archivos MO mediante la consola y es utilizando el comando msgfmt que es lo que estaba utilizando antes de darme cuenta que generaba solo el archivo MO y este comando se utiliza de la siguiente manera:
[cc lang=”bash”]
msgfmt -o ES_es.mo ES_es.po
[/cc]
y listo ya generas tu archivo MO.

Ya hice todo lo de las traducciones y genere los archivos correspondientes y ahora ¿que sigue para que en mi plantilla se reflejen las traducciones?, este paso pueden hacerlo desde antes yo lo deje aqui por que asi lo hice yo.

PASO 5 Modificar Functions.php de nuestra plantilla

Para que nuestra plantila cargue nuestras traducciones debemos agregar la funcion load_theme_textdomain(‘nombre de plantilla’); en el archivo functions.php de nuestra plantilla en la parte que quieras, solo agrega estas lineas de codigo:

[cc lang=”php”]
if(function_exists(‘load_theme_textdomain’))
load_theme_textdomain(‘Medusa’);
[/cc]

La plantilla que yo internacionalice se llama Medusa es la que tengo en el blog.

 

Problemas que detecte durante mi viaje por la internacionalizacion de la plantilla:

Problema 1 version de xgettext incompatibles en Osx Lion:

 

Library not loaded: /opt/local/lib/libiconv.2.dylib
Referenced from: /opt/local/bin/xgettext
Reason: Incompatible library version: xgettext requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0

Para resolver el problema de que requiere la version 8.0.0 me sugirieron instalar el xcode y tambien el xgettext, para instalar el xcode solo abres el appstore y lo buscas y los instalas si ya lo tienes instalado instala el xgettext, lo descargas de la pagina oficial y luego te lees este post http://techshow.me/doc/276, si ya lo instalas y te sigue marcando el error de las versiones de las librerias entonces tendras que reemplazar mediante un link simbolico el xgetext de la siguiente manera:

[cc lang=”bash”]
sudo ln -f -s /usr/local/bin/xgettext /opt/local/bin/xgettext
[/cc]
A mi me funciono.

Problema 2 El archivo MO de traduccion no funciona.
Una cosa que me paso fue que ya tenia todo y no wordpress no aplicacba las traducciones, y no sabia por que si yo ya tenia todo montado correctamente, el problema era que con las funciones __() y _e() no habia puesto el dominio del texto y lo que se tuvo que hacer fue agregar en todas partes donde utilizaba las funciones agregarle de segundo parametro “Medusa”  ya que es donde quiero que aplique las traducciones pueden ver mas informacion de esto en este post http://programadorasp.com/solucionado-el-archivo-mo-de-traduccion-del-tema-de-wordpress-no-funciona/.

Pero basicamente lo que tenia era __(“Comments”)  y lo debi poner asi __(“Comments”,”Medusa”).

Aqui les dejo la plantilla con la que yo estuve jugando para hacer las traducciones, descargar Medusa mirror.

Este templete pertenece a los compas de web2feel  y les dejo el link del original http://www.web2feel.com/medusa/.

Ya por ultimo les dejo la documentación de algunas cosas que me sirvieron y agrader a estas personas por documentar algunos procesos.

Aaaa me falto indicar que el termino no es Traducir si no hacer internacionalizable una plantilla pero como traducir es mas comun así lo dejare. Pero la intención es hacer multilenguaje tu plantilla.

Fuentes:

http://www.gnu.org/s/hello/manual/gettext/xgettext-Invocation.html

http://codex.wordpress.org/Theme_Development#Translation_.2F_i18n_Support

http://codex.wordpress.org/I18n_for_WordPress_Developers#MO_files

http://www.lxg.de/code/playing-with-xgettext

Artículos Relacionados

Comentarios

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: No hay resumen disponible para esta anotación…