En esta guía vamos a ver cómo traducir o internacionalizar Temas y Plugins de WordPress. Se trata de algo muy útil si eres un desarrollador que saca partido comercial a sus temas o Plugins de WordPress, ya que la traducción a diferentes lenguajes es una funcionalidad que se espera que esté incluida. Vamos a explicar la importancia de la internacionalización y seguidamente a explicar cómo dejar nuestras creaciones listas para que puedan adaptarse a nuevos idiomas.
Contenidos
Acerca de la internacionalización
A la hora de traducir proyectos basados en WordPress, el aspecto más complicado suele ser el pensar en cómo hacerlo, aunque una vez lo hayamos hecho, será siempre repetir lo mismo. Antes de nada, vamos a ver por qué es importante dejar todos nuestros proyectos listos para ser traducidos.
¿Qué es la internacionalización?
La internacionalización es el proceso mediante el cual preparamos nuestros Temas y nuestros Plugins para que puedan ser traducidos. Esto significa que da igual el idioma que hayamos utilizado a la hora de desarrollar el Plugin o el Tema, puesto que cualquier usuario podrá ser capaz de traducirlo con facilidad. No necesitamos proporcionar traducciones, sino que se trata de dejar todo listo para que los traductores puedan hacer su trabajo.
¿Por qué es importante tenerla en cuenta?
En la actualidad es muy común que varios desarrolladores trabajen en un mismo proyecto y además, en el mudno del software libre nunca sabes quién terminará haciendo uso de tu creación, ya disponga o no tu trabajo de una licencia comercial.
Un porcentaje muy significativo de páginas web han sido creadas con WordPress, por lo que resulta casi una obligación lo de internacionalizar Plugins y Temas. WordPress nos provee de un modo de traducir nuestro trabajo, así que… ya de paso que programamos. ¿Por qué no seguir unos sencillos pasos? Cuando digo sencillos es que no nos costará más que un par de líneas de código y unos caracteres extra.
Cómo internacionalizar nuestro código
Existe una función clave que es la que utilizaremos:
- __($texto, $clave)
Se trata de una función que devuelve una cadena de texto traducida, si es que ésta existe. Esta función no imprime ni muestra la cadena. Suele utilizarse con otras funciones para, por ejemplo, pasársela a otra función. Acepta dos parámetros, que son la cadena a traducir y la clave de internacionalización.
También tenemos la siguiente función:
- _e($text, $key)
Ésta función si que imprime por pantalla la cadena traducida si es que existe. ¿Pero qué es exactamente el segundo parámetro? Se trata del dominio o ámbito del Tema o Plugin que traducimos para que así no se solapen nuestras traducciones con las de WordPress o con las de otros Temas y Plugins. Para cargar un dominio podemos utilizar las siguientes dos funciones dependiendo de si estamos internacionalizando un Plugin o un Tema:
- load_theme_textdomain($dominio, $directorio_de_traducciones)
- load_plugin_textdomain($dominio, $directorio_de_traducciones)
Internacionalizando nuestro trabajo
Mostrar un texto traducido
Antes de ver cómo internacionalizar un tema vamos a basarnos en un pequeño ejemplo:
<h1>Mi página de WordPress</h1>
<h2>Es sencilla pero efectiva</h2>
<p>Comienza a leer mi blog y disfruta de los contenidos</p>
Se trata de un poco de HTML que vamos a internacionalizar. Para ello debemos pensar primero en el identificador que vamos a utilizar. Usaremos el de ‘neoguias’ a modo de ejemplo. Dado que el texto anterior era puro HTML destinado a ser impreso en pantalla, utilizaremos la función __e(). El código resultante sería el siguiente:
<h1><code class="html plain"><?</code><code class="html keyword">php</code> <code class="html plain">_e('</code>Mi página de WordPress', 'neoguias'); ?></h1>
<h2><code class="html plain"><?</code><code class="html keyword">php</code> <code class="html plain">_e('</code>Es sencilla pero efectiva', 'neoguias'); ?></h2>
<p><code class="html plain"><?</code><code class="html keyword">php</code> <code class="html plain">_e('</code>Comienza a leer mi blog y disfruta de los contenidos', 'neoguias'); ?></p>
Procesando el texto antes de ser mostrado
En caso de que necesitemos traducir el texto antes de ser mostrado en pantalla, el proceso es muy similar. Vamos a ver un ejemplo de cómo traducir una barra lateral o sidebar de WordPress:
register_sidebar(
array(
'name' => 'Mi barra lateral',
'id' => 'barra_lateral'
)
);
A modo de referencia, estamos utilizando la función register_sidebar que nos ofrece WordPress. El nombre de la barra lateral se mostrará en la pantalla en la que agregamos o eliminamos los Widgets, por lo que deberíamos internacionalizarlo. En este caso utilizaremos la función __(). El resultado sería el siguiente:
register_sidebar(
array(
'name' => __('Mi barra lateral', 'neoguias'),
'id' => 'barra_lateral'
)
);
Es importante que al internacionalización solamente se aplica a los textos de la interfaz, por lo que no deberíamos intentar traducir los contenidos de las páginas o de los posts.
Preparando nuestro Plugin o nuestro Tema para ser internacionalizado
Lo primero que deberemos hacer es decirle a WordPress los textos que serán traducibles y seguidamente indicar en dónde encontrar las traducciones. Lo habitual es crear un directorio llamado lang dentro del directorio de nuestro Tema o de nuestro Plugin con estos fines, pero puede tener el nombre que queramos.
Antes hemos visto las funciones load_plugin_text_domain y load_theme_text_domain que se utilizan para indicar en dónde encontrar las traducciones de los textos de cada dominio que hayamos definido al traducir los textos, que habitualmente será solamente uno por Tema o por Plugin. En el caso de un tema, tendremos que llamar a la función load_theme_text_domain dentro del hook after_setup_theme. El resultado sería el siguiente:
function configuracion_extra_tema() {
// Indicamos el directorio en donde estarán los archivos de texto
$lang_dir = get_template_directory() . '/lang');
// Cargamos el dominio textual usando la referencia que usemos al escribir los textos del tema
load_theme_textdomain('neoguias', $lang_dir);
}
add_action('after_setup_theme', 'configuracion_extra_tema');
Para los Plugins es más de lo mismo. Creamos el directorio lang (u otro) e indicamos a WordPress en dónde se encuentran los archivos:
load_plugin_textdomain(‘neoguias’, false, dirname(plugin_basename(__FILE__)) . ‘/lang/’);
Después, tendremos que determinar en dónde llamar a la función load_plugin_textdomain, que puede ser exactamente en la misma hook del tema que antes. Un ejemplo completo sería el siguiente:
function configuracion_extra_plugin() {
load_plugin_textdomain('neoguias', false, dirname(plugin_basename(__FILE__)) . '/lang/');
}
add_action('after_setup_theme', 'configuracion_extra_plugin');
Y tanto tus Temas como tus Plugins estarán ya listos para ser traducidos.
Traduciendo los textos internacionalizados
Ahora solamente queda un paso adicional que no tenemos por qué hacerlo nosotros salvo que así lo queramos. Podemos utilizar apliciones como POEdit para crear archivos que serán guardados dentro del directorio que hemos indicado a WordPress (/lang).