Internationalization

Reading time aprox: 3 minutes, 42 seconds

La Internacionalización (Internationalization) en WordPress

Este título tan largo y en inglés… Lo cierto es que está hecho adrede, su traducción al español no es tan difícil ¿o si?.

Vamos a hablar de un término un tanto polémico, no todos le llaman así y muchos discuten su significado pero, en fin, vamos a ver de qué se trata.

Tabla de contenido

¿Qué es la Internacionalización?

La internacionalización es el proceso de desarrollar tu tema o plugin, de forma que sea fácilmente traducible a otras lenguas. A menudo, este término se abrevia como i18n, porque hay 18 letras entre la «i» y la «n»

¿Por qué es importante la internacionalización?

El CMS WordPress se usa en todo el mundo, y si, en muchos países, ni el inglés ni el español, son la lengua principal. Por tanto, debemos codificar los plugin y los temas, en una forma en la que sea fácil traducirlos a otras lenguas. Como desarrollador, puede que no puedas facilitar tus creaciones en todas las lenguas de tus usuarios, pero un traductor puede hacer ese trabajo si solo ha de traducir y no codificar él mismo.

¿Cómo internacionalizar tu tema o plugin?

Para que los textos en el tema o plugin sean traducibles, no deben estar fijos en el sitio, sino ser pasados como argumentos de una función de «localización» de WordPress.

El siguiente ejemplo muestra un código fijo, que no podría ser traducido sin cambiar el archivo que lo contiene, lo cual no es muy eficiente.

<h1>Settings Page</h1>

Sin embargo, pasando la cadena de caracteres como parámetro de una función de localización, puede ser fácilmente traducida.

<h1><?php _e( 
'Settings Page'
); ?></h1>

WordPress usa las librerías gettext para poder añadir las traducciones en PHP. Deberías usar las funciones de localización de WordPress en lugar de las nativas de PHP.

El «Text Domain» o «Dominio del texto»

En las funciones de internalización, como segundo argumento tenemos el «text domain». Se trata de un identificador único que permite a WordPress distinguir entre todas las traducciones que maneja. El «text domain» sólo es necesario definirlo en temas y plugins.

Para los temas que están albergados en WordPress.org, «text domain» debe ser igual al «slug» de la URL del tema o plugin (wordpress.org/themes/<slug>); esto es necesario para que las traducciones funcionen correctamente.

Existen unas reglas sencillas para el «text domain», deben usarse guiones () y no «guión bajo» o «subrayado» (_) y debe estar en minúsculas. Por ejemplo, si en la cabecera del archivo style.css del tema se hace a: mi tema, o el tema está almacenado en un directorio, el «text domain» debe ser: «mi-tema».

El «text domain» se usa en tres sitios distintos:

  1. En el style.css de cabecera del tema.
  2. Como un argumento de las funciones de localización.
  3. Como un argumento al cargar las traducciones usando load_theme_textdomain() o load_child_theme_textdomain()span>

La cabecera del style.css del tema

El «text domain» se integra en la cabecera del archivo style.css para que el meta-dato de la descripción pueda ser traducido aún si el tema no está activo.

Ejemplo:

/*
* Theme Name: Mi tema
* Author: Autor del tema
* Text Domain: mi-tema
*/

Camino del dominio (Domain Path)

El Domain Path se necesita cuando las traducciones están almacenadas en un directorio distinto de languages. De esta forma, WordPress sabe dónde encontrar las traducciones cuando el tema no está activo. Por ejemplo, si los archivos ‘ .mo’ están almacenados en el directorio idiomas, el Domain Path será /idiomas y deberá estar escrito con la barra inclinada incial (/). Por defecto, se asume la carpeta languages en el mismo directorio del tema.

Ejemplo:

/*
* Theme Name: Mi tema
* Author: Autor del tema
* Text Domain: mi-tema
* Domain Path: /idiomas
*/

Añadir «text domain» a las cadenas (string)

Para que las traducciones funcionen correctamente, el «text domain» deberá estar como argumento en todas las llamadas a las funciones de localización.

Ejemplo Nº 1:

__( 
'Post'
)

Deberá ser

__( 
'Post', 'mi-tema'
)

Ejemplo Nº 2:

__e( 
'Post'
)

Deberá ser

__e( 
'Post', 'mi-tema'
)

Ejemplo Nº 3:

__n( 
'One post', '%s posts', $count
)

Deberá ser

__n( 
'One post', '%s posts', $count, 'mi-tema'
)

Atención: El «text domain» deberá pasarse como una cadena y NO como una variable. Esto permite que las herramientas de análisis diferencien entre distintos «text domain». Por ejemplo, esto NO debe hacerse:

__( 'Traduzcanme', $text_domain);

Cargando las traducciones en WordPress

Las traducciones en WordPress se almacenan en archivos ‘ .po’ y ‘ .mo’ que deben ser cargados usando las funciones de load_theme_textdomain() o load_child_theme_textdomain(). Esto cargará el archivo {locale}.mo desde el directorio de idiomas del tema de WordPress en /wp-content/languages/themes/(tema)/.

Nota: A partir de la versión 4.6 de WordPress, se comprueba automáticamente el directorio en /wp-content/ en busca traducciones descargadas desde translate.wordpress.org. Esto quiere decir que los plugins que hayan sido traducidos usando «translate.wordpress.org», no necesitan la función load_plugin_textdomain(). Así que si no quieres usar la función load_plugin_textdomain() tienes que especificar en la descripción de tu plugin (el archivo readme.txt): Requires at least: 4.6.

Si quieres saber más sobre los diferentes lenguajes y sus correspondientes códigos de país, visita la lista en https://make.wordpress.org/polyglots/teams/.

Cuidado:

  1. Recuerda renombrar el archivo MO a ‘{locale}.mo’ (P.e.: es_ES.po y es_ES.mo) si pones las traducciones en la carpeta del tema o plugin.
  2. Renombra tu archivo MO como ‘{text-domain}-{locale}.mo’ (P.e.: mi-tema-es_ES.po y mi-tema-es_ES.mo) si pones las traducciones en la carpeta de idiomas de WordPress.

Ejemplo:

function my_theme_load_theme_textdomain() {
    load_theme_textdomain( 
    'mi-tema', get_template_directory() . '/idiomas');
}
add_action( 'after_setup_theme', 'my_theme_load_theme_textdomain');

Idealmente, esta función debe ser parte del archivo functions.php del tema.

Paquetes de Idiomas

Si te interesa el tema de los paquetes de idiomas y de cómo importarlos a translate.wordpress.org, hay una buena documentación en inglés en: https://make.wordpress.org/meta/handbook/documentation/translations/.

Internacionalizando tu tema

Ahora ya sabes como hacer que tus creaciones (temas y plugins) estén preparados para ser traducidos a otros idiomas.

Te recomiendo la lectura de un artículo (en inglés) sobre la internacionalización, escrito por los creadores de la API. Encontrarás información y consejos para unas buenas prácticas. Visita:https://developer.wordpress.org/apis/handbook/internationalization/.


¡Gracias por leernos!


¡Tus comentarios y preguntas nos ayudan a mejorar, por favor comenta!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

1 × 1 =

Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.    Más información
Privacidad