Cómo internacionalizar los temas y complementos de WordPress

En 5 Cardinal Sins of WordPress Theme Development, hablamos brevemente sobre el significado de la internacionalización de temas y complementos, pero en realidad no discutimos cómo para hacerlo. 

Si se encuentra en el tema comercial o en el espacio de complementos, es probable que su trabajo admita varios idiomas. En este artículo, analizaremos qué es realmente la internacionalización, por qué es importante y qué pasos son necesarios para internacionalizar su proyecto..


Entendiendo la internacionalización

Cuando se trata de internacionalizar proyectos de WordPress, quizás el aspecto más difícil es realmente entender cómo hacerlo: internacionalizar un proyecto de WordPress es realmente muy fácil de hacer..

Antes de ver cómo hacerlo, es importante echar un vistazo a la importancia de la internacionalización y por qué nosotros, como desarrolladores, debemos siquiera molestarnos en hacerlo..

Internacionalización definida

En pocas palabras, la internacionalización es el proceso mediante el cual preparamos nuestro tema para la traducción. Esto significa que no importa qué idioma [hablado] se utilizó para desarrollar nuestro trabajo, los futuros usuarios (o incluso los desarrolladores) pueden traducir fácilmente el proyecto al idioma que sea necesario. La internacionalización en realidad no requiere que nosotros proporcionar las traducciones (aunque el multilingüe entre nosotros podría hacerlo fácilmente), solo tomamos las medidas necesarias para que los futuros traductores lo hagan.

Por qué molestarse?

Hace años, hubiera dicho que la internacionalización solo debería hacerse si el mercado objetivo para su trabajo fuera algo diferente a su idioma nativo, pero ya no es así. Gracias a Internet, podemos conversar, colaborar, y comunicarse con personas de todo el mundo. La audiencia potencial para cualquier proyecto dado es más amplia que nunca antes.

Más aún, WordPress potencia un número significativo de sitios web modernos. Con ese fin, deberíamos pensar globalmente sobre nuestro trabajo. Argumentaría que la internacionalización de los temas o complementos comerciales ya no es negociable. Si la plataforma en la que se construye su trabajo es utilizada por una variedad de idiomas (y lo es WordPress), y dicha plataforma proporciona una forma limpia y sencilla de internacionalizar un tema, y ​​WordPress lo hace, entonces es más una cuestión de por qué lo hago. no internacionalizando mi trabajo.

Cómo internacionalizar

Como se mencionó anteriormente, en realidad la internacionalización de un tema es más un esfuerzo para comprender las funciones clave en la API de WordPress que el proceso real de preparación del texto. Entonces, antes de echar un vistazo a un ejemplo concreto, definamos algunos términos y funciones importantes: - Clave de internacionalización. Puede pensar en esto como un contexto, dominio o identificador único para sus cadenas.

En cualquier caso, este es un valor único y único que WordPress utilizará para internacionalizar el texto en todo su tema.- __ ($ text, $ key) es una función que devuelve una cadena traducida. Esta función no hace eco, imprime ni muestra la cadena. Se usa a menudo cuando se necesita realizar otra operación en la cadena traducida (como pasarla a otra función). Acepta dos argumentos: la cadena a traducir y la clave de internacionalización. __ (($ text, $ key) es una función que realmente hace eco de la cadena traducida.

Esto se usa mejor cuando necesita recuperar un valor traducido y mostrarlo en algún lugar de su tema o complemento. Load_theme_textdomain ($ domain, $ translation_directory), load_plugin_textdomain ($ domain, $ translation_directory) son dos funciones que le indican a WordPress dónde ubicar su traducciones Vamos a echar un vistazo a estas funciones un poco más en detalle momentáneamente.

Por ahora, solo sepa que cada función sirve para el mismo propósito, aunque una es para temas, otra es para complementos. En su mayor parte, esto es todo lo que hay para entender cómo internacionalizar su tema. A partir de aquí, analizaremos exactamente lo que implica poner en práctica estas funciones..


Internacionalizando tu trabajo

Visualización de texto traducido

Antes de internacionalizar un tema, echemos un vistazo a cómo se ve un marcado estándar:

Mi blog de WordPress

Solo uno de los mejores sitios de internet.

Este párrafo es solo el mejor párrafo que existe en todos los blogs de WordPress en Internet. Léelo y disfruta.

Nada espectacular, ¿verdad? Parece una pieza estándar de HTML (que es todo lo que es). Por supuesto, este es un ejemplo simple pero es todo lo que se necesita para demostrar cómo internacionalizar un tema.

Para internacionalizar este texto anterior, debemos determinar qué identificador único vamos a utilizar para internacionalizar nuestro texto. Voy a usar "tutsplus". En segundo lugar, dado que todo el texto anterior se muestra en la pantalla, usaremos la función __e (). El código internacionalizado debe ser:

Pero, ¿qué pasa con el texto que debe traducirse antes de mostrarse en la pantalla? No es muy diferente, pero echemos un vistazo a cómo podemos internacionalizar las barras laterales..

Procesando texto traducido

Primero, configuremos la barra lateral:

register_sidebar (array ('name' => 'Custom Sidebar', 'id' => 'sidebar'));

Para referencia, estoy usando la función register_sidebar disponible a través de la API de WordPress. Tenga en cuenta que el nombre de la barra lateral se representa en la pantalla Widgets. Como tal, necesitamos internacionalizarlo; sin embargo, una matriz no acepta una cadena con eco, acepta un valor de cadena.

En este caso, aprovecharemos la función __ ():

register_sidebar (array ('name' => __ ('Custom Sidebar', 'tutsplus'), 'id' => 'sidebar'));

Bastante fácil, eh?

Recuerde, la internacionalización solo debe aplicarse a texto estático. No es responsabilidad del desarrollador proporcionar la internacionalización del contenido de la página, publicar contenido, etc..


Preparación del tema y / o complemento para la internacionalización.

Una vez que haya revisado su tema y haya abordado correctamente el texto que debe internacionalizarse, debe indicar al tema o complemento dónde encontrar los archivos de internacionalización. Vamos a ver esto en mayor profundidad en un momento, pero primero siempre recomiendo crear un directorio 'lang' en la raíz del directorio de temas o complementos para almacenar archivos de internacionalización..

¿Recuerda las funciones load_theme_text_domain y las funciones load_plugin_text_domain de antes? Aquí es donde los usamos. Si está trabajando con un tema, necesitaremos definir una función personalizada que se llame en el gancho after_setup_theme:

función custom_theme_setup ()  // fin de custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

A continuación, le diremos a la función dónde ubicar las traducciones. Para hacer esto, agregue lo siguiente a las líneas de su tema (tenga en cuenta los comentarios que explican lo que hace cada línea):

function custom_theme_setup () // Recupere el directorio para los archivos de internacionalización $ lang_dir = get_template_directory (). '/ lang'); // Establezca el dominio de texto del tema usando el identificador único de arriba load_theme_textdomain ('tutsplus', $ lang_dir);  // finalizar custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

Relativamente simple, ¿verdad? Tampoco es muy diferente para los complementos. Al igual que con los temas, siempre coloco mis archivos de internacionalización de complementos en un subdirectorio 'lang'. Primero, tenemos que decirle a WordPress dónde se encuentran los archivos de internacionalización. Suponiendo que los suyos se encuentran en un directorio 'lang':

load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');

El segundo parámetro, donde hemos especificado 'falso', es necesario pero corresponde a una función en desuso en WordPress.

Finalmente, tenemos que determinar dónde llamar a la función load_plugin_textdomain. Si estamos escribiendo un Widget, entonces normalmente pongo esta llamada de función en el constructor:

class My_Custom_Widget function My_Custom_Widget () load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');  // finaliza el constructor // finaliza My_Custom_Widget

Si estamos escribiendo un complemento de vainilla, hay varias formas de decirle a WordPress dónde se encuentran los archivos de traducción, pero tiene flexibilidad para conectarse a la after_setup_theme función. Al igual que en el código del tema anterior, puedes colocarlo en tu complemento:

function custom_plugin_setup () load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');  // finalizar custom_theme_setup add_action ('after_setup_theme', 'custom_plugin_setup');

En este punto, su tema o plugin están listos para la internacionalización..


Dos consideraciones más

En este punto, ya ha terminado, pero siempre vale la pena saber qué se requiere para llevar su trabajo y seguir adelante. Estas son las dos tareas pendientes que los traductores realizarán normalmente para traducir su tema

  • Traduce el texto. Los traductores procesarán su tema a través de una aplicación de traducción (como POEdit) que generará los archivos que se almacenan en su directorio 'lang', que es donde WordPress recuperará los archivos.
  • Actualizaciones a WP-Config.php. En este punto, los traductores deberán indicar a WordPress que habilite la internacionalización y especifique qué idioma están usando. Esto está fuera del alcance de este artículo, pero puede leer más sobre esto en el Codex.

A diferencia de algunos de los otros entornos de desarrollo disponibles, WordPress hace que sea increíblemente fácil internacionalizar su trabajo. Podría decirse que la parte más difícil es entender las funciones clave necesarias para preparar sus cadenas para la internacionalización..

Además, refactorizar el trabajo existente siempre puede ser un proceso lento. En el contexto de WordPress, puede ser tedioso, pero es relativamente fácil de hacer. Si tiene alguna sugerencia o pregunta adicional con respecto a la internacionalización, no dude en dejarlos en los comentarios.!