Traducir un tema de WordPress

Esta web es bilingüe, pero cuando seleccionais el castellano quiero que todo (contenido+theme) se vean en castellano. Si vuestra web no es bilingüe podeis traducir el theme de forma limpia y rápida con los pasos que os daré a continuación.

Para castellanizar un theme (o traducir la parte visual a cualquier idioma) de wordpres me he basado en la información vertida por anieto2k y yukei en sendos posts de su propiedad (por si quereis profundizar más). anieto2k tiene también un repositorio donde puedes compartir con todos tu tema una vez traducido.

Vamos a detallar todo el proceso de traducción. Para ello utilizaremos el theme en que se basa este blog: Web 2.0 (descargar). Pero vale para cualquier otro tema de wp.

El tema Web 2.0 castellanizado os lo he dejado aquí­ (para mapas ISO-8859-1, para UTF-8 os dejo los ficheros de idioma) y en el repositorio de anieto2k.

Marcar cadenas

Lo primero será marcar las cadenas de texto que queremos traducir en nuestro código PHP.

Esto es lo más tedioso, se trata de ir por todos los ficheros php del theme marcando las cadenas que queremos traducir de la siguiente manera:

  • RETURN __(): Para las cadenas dentro de funciones, devolverá mediante el “return” la cadena traducida.
    • e.g.: <?php next_posts_link(‘Older Entries’) ?> ———–> <?php next_posts_link(__(‘Older Entries’,’w2′)) ?>
  • ECHO _e(): Para las cadenas estampadas directamente en el HTML, digamos que la función hace un “echo” de lo traducido.
    • e.g.: <h2>Not Found</h2> ———–> <h2><?php _e(‘Not Found’,’w2′); ?></h2>

Donde w2 es el dominio de traducción del tema. Utilizado para la posible definición de varios ficheros de traducción en el mismo idioma dentro del mismo código php.

Faltará decirle al servidor que haga la traducción donde haya marcas. Esto se hace en la cabecera (…../wp-content/themes/web-20-100/header.php), cargando la función load_theme_textdomain(‘dominio’):

.....................
<head>
   .....................
   <meta http-equiv="Content-Language" content="<?php the_language_locale(); ?>" />
   .....................
   <?php load_theme_textdomain('w2'); ?>
</head>
   .....................
   .....................

OJO: El lenguaje se define en el metacontenido “Content-Language”, de donde tomará el valor para conmutar entre los lenguajes según los ficheros: es_ES.mo, es_AR.mo,… ó no traducir si no lo reconoce.

Extracción de cadenas marcadas

El software Gettext extraerá las cadenas que hemos marcado según el punto anterior, unificándolas todas en un fichero de extensión .po.

Instalar gettext en debian:

elite:~# apt-get install gettext
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Paquetes sugeridos:
  cvs gettext-doc
Se instalarán los siguientes paquetes NUEVOS:
  gettext
0 actualizados, 1 se instalarán, 0 para eliminar y 1 no actualizados.
Necesito descargar 2190kB de archivos.
Se utilizarán 6582kB de espacio de disco adicional después de desempaquetar.

En el raí­z de nuestro theme (…../wp-content/themes/web-20-100/ en nuestro caso) creamos un fichero (file-list.txt) que contenga el nombre de todos los ficheros php que hemos tocado marcando su interior:

404.php
attachment.php
comments.php
functions.php
index.php
page.php
search.php
single.php
archives.php
comments-ajax.php
footer.php
header.php
links.php
searchform.php
sidebar.php
style.php

Y ejecutamos gettext con las siguientes opciones:

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

Con lo que tendremos el fichero generador de catálogos: es_ES.po. Si lo abrís con un editor vereis apuntadas todas y cada una de las cadenas referenciadas por la función y la línea en la que se encuentran.

Si modificamos el theme y queremos rehacer el catálogo, pero sin perder las cadenas ya traducidas. Utilizamos la opción -j, que en vez de generar un nuevo es_ES.po, hace un “join” con el contenido del anterior. Mas o menos:

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

Traducción de las cadenas

Utilizaremos PoEdit para traducir las cadenas de texto. Para los usuarios de Debian (ó sistemas basados como Ubuntu) tenemos PoEdit en los repositorios:

elite:~# apt-get install poedit

Editamos el fichero es_ES.po, y a traducir …:

poedit.JPG

Cuando guardemos el fichero se generará es_ES.mo que es el fichero en “código máquina” que realmente traducirá las cadenas.

OJO: Si en el fichero .mo (ó en el .po después de guardar) veis símbolos raros (í) en lugar de acentos, es posible que tengais que jugar con la configuración del charset en PoEdit, que se encuentra en el menú Catálogo –> Opciones. Y poner como en mi caso, el latin1: ISO-8859-1.

Finalmente hay que colocar en el raí­z de nuestro theme (…../wp-content/themes/web-20-100/ en nuestro caso) el fichero es_ES.mo.

pun

Leave a Reply

Your email address will not be published. Required fields are marked *