WPML

captura de pantalla de AtahualpaVoy a mostrar cómo usar Atahualpa, de Bytes For All, para crear sitios multilingües de WordPress usando WPML.

Un tema para un sitio multilingüe de WordPress necesita tener todas las cadenas envueltas en llamadas gettext, pero no es suficiente. El uso de gettext en el tema permite que se muestre en un idioma diferente (único) a aquel con el que se creó originalmente.

Para funcionar de forma multilingüe, el tema debe permitir a los visitantes elegir su idioma de visualización y ofrecer el contenido correcto para cada idioma.

Una versión multilingüe para Atahualpa


Empecemos por el final. Aquí tiene un sitio de demostración que funciona con una versión modificada de Atahualpa y aquí está el tema modificado que puede descargar y usar.

Qué cambiamos para hacer que Atahualpa sea multilingüe

1. Añadir wpml-integration.php al directorio del tema


wpml-integration.php se encuentra en el directorio de WPML bajo docs/theme-integration. Incluye una colección de funciones que ayudan a convertir los temas en multilingües.

Todas estas funciones están diseñadas para hacer que los temas usen WPML si está activo o lo ignoren si no lo está. Esto significa que el tema funcionará de forma multilingüe si WPML está disponible, o de forma normal (en un solo idioma) en caso contrario.

Añadido a functions.php:

include dirname(__FILE__) . '/wpml-integration.php';

Esta declaración carga wpml-integration.php y lo hace disponible para todos los archivos del tema.

2. Añadir selectores de idiomas


Los selectores de idiomas hacen posible que los visitantes elijan el idioma en el que se muestra el sitio. A menudo, es una buena idea añadir varios tipos de selectores de idiomas. Los visitantes escanean el sitio rápidamente y buscan pistas visuales de los contenidos en sus idiomas. Diferentes personas miran en diferentes lugares, por lo que añadir diferentes tipos de selectores de idiomas a diferentes partes de la página ayudará a los visitantes a encontrar su idioma.

Añadimos el selector de idiomas desplegable de WPML a la barra lateral añadiéndolo a header.php:

<?php wpml_languages_selector() ?>
selector_de_idiomas_desplegable_de_atahualpa
Selector de idiomas desplegable

También añadimos una lista horizontal de idiomas al pie de página del sitio. Muchos usuarios primero se desplazan hasta el final para ver qué hay allí (y qué tan largas son las páginas), por lo que es un buen lugar para indicar que las páginas están disponibles en otros idiomas. Añadimos el siguiente código a footer.php:

<?php wpml_languages_list() ?>
Selector de idiomas horizontal en el pie de página
Selector de idiomas horizontal en el pie de página

Por último, añadimos un selector de idiomas al final de cada entrada. Esto añade una oración a cada entrada, indicando en qué otros idiomas está disponible. Añadimos lo siguiente a index.php (que incluye una versión personalizada del bucle de visualización de WordPress):

<?php if(is_singular()) wpml_content_languages(); ?>
Lista de idiomas de traducción
Lista de idiomas de traducción

Cuando los visitantes hacen clic en «Inicio», esperan llegar a la página de inicio sin cambiar de idioma. Dado que cada idioma tiene una «página de inicio» con una URL diferente, un único valor para todos no funcionará.

Normalmente, los temas de WordPress calculan la dirección de la página de «Inicio» en función del valor de la «URL del blog» establecido en la página de administración. WPML creó una función que calcula la dirección de inicio correcta según el idioma de visualización.

Reemplazamos get_option('home') con wpml_get_home_url(). Además, la función get_option('home') devuelve la ubicación del sitio sin una barra diagonal final (/), por lo que los temas la añaden manualmente. La función de WPML incluye esta barra diagonal (hay una larga historia detrás de esto).

Para hacer este cambio, tuvimos que editar dos archivos. Modificamos functions/bfa_get_options.php y cambiamos:

$bfa_ata['get_option_home'] = get_option('home');

por
$bfa_ata['get_option_home'] = wpml_get_home_url();

Además, editamos functions/bfa_header_config.php y eliminamos la barra diagonal final del enlace de la página de inicio:
'<a href="' . $bfa_ata['get_option_home'] . '">' . $bfa_ata['bloginfo_name'] . '</a>'

4. Muy avanzado: traducir los textos que los usuarios introducen en la pantalla de administración del tema


Atahualpa permite controlar algunos textos a través de la pantalla de administración. Esto es algo fantástico que permite gestionar el sitio sin editar archivos PHP. WPML también puede traducir estas cadenas utilizando su mecanismo Traducción de cadenas.

Para hacer esto, el tema necesita decirle a WPML qué cadenas deben traducirse y luego mostrar la traducción si existe.

Cuando los usuarios van a la pantalla de administración del tema, actualizan los textos y hacen clic en Guardar, se ejecuta la función bfa_ata_add_admin de functions/bfa_ata_add_admin.php. Le añadimos la siguiente sección (comenzando en la línea 11):

global $wpml_translatable_strings;

 foreach($wpml_translatable_strings as $wpml_str ){

   if(isset($_REQUEST['bfa_ata_'.$wpml_str]) && trim($_REQUEST['bfa_ata_'.$wpml_str])){

    wpml_register_string('atahualpa theme', $wpml_str, stripslashes($_REQUEST['bfa_ata_'.$wpml_str]));

  }

 }

Lo que hace esto es recorrer una lista de cadenas definidas en la variable global $wpml_translatable_strings. Registra cada cadena en la lista de traducción de cadenas de WPML.

El primer argumento es el contexto para las cadenas. Cualquier nombre serviría, pero debería seleccionar un nombre que describa las cadenas. El segundo argumento es el nombre de la cadena (no se traduce). El último argumento es el valor de la cadena (se traduce).

Para mostrar las traducciones (si existen), añadimos la función wpml_t a functions/bfa_get_options.php (comenzando en la línea 204):

global $wpml_translatable_strings;

foreach($bfa_ata as $k=>$v){

   if(in_array($k, $wpml_translatable_strings) || $__first){

    $bfa_ata[$k] = wpml_t('atahualpa theme', $k, $v);     

  }

}

Este código se ejecuta cuando el sitio se muestra a los visitantes. Recorrerá la lista de cadenas, comprobará si se ha registrado para su traducción (in_array) y, de ser así, obtendrá la traducción. La función wpml_t devolverá la cadena traducida en el idioma actual, si la traducción existe, o simplemente devolverá la cadena original si no hay traducción.

Convertir otros temas de WordPress en multilingües


Ya hemos realizado un trabajo similar en iNove y Arras y planeamos convertir más temas en multilingües.

Nuestra intención es proporcionar temas multilingües listos para usar y ayudarle a crear sus propios temas preparados para ser multilingües. Usando las técnicas que describimos aquí, puede crear temas que funcionarán de forma multilingüe cuando WPML esté disponible o en un solo idioma sin WPML.

Si está creando temas y necesita ayuda para hacerlos multilingües, no dude en abrir nuevos hilos en el foro.

También puede ganar dinero (ingresos realmente pasivos) añadiendo compatibilidad multilingüe a sus temas. Hablaremos sobre cómo incluir ID de afiliados en los temas en la próxima entrada.

¿Le ha resultado útil? Comparta este artículo: