Cómo internacionalizar WordPress para la localización

Cómo internacionalizar WordPress para la localización

¡Guau! Si te preguntas qué significa este artículo, no te preocupes, ¡no eres el único! Como sabes, WordPress está traducido a muchos idiomas, pero muy a menudo los plugins o temas contienen cadenas que no están traducidas a tu propio idioma y es más que frustrante: es irritante.

Entonces, ¿por qué está pasando esto? Probablemente porque los desarrolladores no están usando como deberían internacionalización. Es decir, el uso de funciones específicas incluidas en WordPress que permiten traducir todo fácilmente.

Paso 1: cargar archivos de traducción

El primer paso al crear un tema es cargar archivos de traducción, hay muchas formas de hacerlo, pero la más fácil es usar este código:

add_action('after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
    load_theme_textdomain('my_theme', get_template_directory() . '/languages');
}

Cuando se trabaja en un complemento, es más o menos lo mismo:

function myplugin_init() {
  load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) ); 
}
add_action('plugins_loaded', 'myplugin_init');

Ahora que los archivos están cargados en una carpeta de “idiomas”, puede crear un archivo .pot o .po usando PO Editar software libre.

Paso 2: traduce las cadenas

Cuando necesite una cadena traducible, debe incluir la cadena contiene en una función. Las funciones más utilizadas son _e () y __ (). Aquí hay un ejemplo del uso de __ ():

echo '<p>' . __( 'This is the string content', 'textdomain' ) . '</p>';

Qué devuelve esta función que contiene la cadena, pero no la muestra. Por eso tenemos que usar echo. Pero la función _e () imprime la cadena que contiene sin usar echo o print:

echo '<p>';
_e( 'This is the string content', 'textdomain' );
echo '</p>';

Paso 3: traducción de la cadena que contiene variables

Pero a veces su cadena puede contener variables. Usar _e () y __ () no funciona. Entonces, en este caso, debe usar las funciones printf () y sprintf (). Como vimos anteriormente, printf () hace eco de la cadena mientras que sprintf () la almacena.

echo '<p>';
printf( __( 'I bought %d books.' ), $_books_count );
echo '</p>';

echo '<p>';
echo sprintf( __( 'I bought %d books.' ), $_books_count );
echo '</p>';

Paso 4: cadenas con más de una variable

Para una cadena que contiene múltiples variables, use el siguiente código:

printf( __( 'I bought %1$s books, and %2$s tomatoes.' ), $books_count, $tomatoes_count );

Paso 5: administrar plurales

En el ejemplo anterior, compré algunos libros y algunos tomates. Pero, ¿qué compré un solo libro? El código imprimirá “1 libra” y no es correcto. Entonces, para lidiar con el plural, hay otra función llamada _n (). He aquí cómo usarlo:

printf( _n( 'i bought %d book.', 'i bought %d books.', $books_count ), $books_count );

Paso 6 – Contextos

A veces, una palabra puede tener diferentes significados debido a su contexto. Luego puede usar estas funciones _x () y _ex (). El segundo hace eco del canal mientras que el primero almacena solo su contenido. Estas funciones tienen un segundo argumento para explicar su contexto. Ejemplo de Fo si una palabra se usa dos veces en una página pero tiene diferentes significados en el contenido y en la barra lateral, entonces su código se vería así:

/*
APPARENT (obvious vs. not clear) — It was apparent to all, Joe was the apparent loser. 
Two different contexts for the word "apparent"
*/

// In the content
echo _x( 'apparent', 'in_content', 'my-plugin-domain' );

// In the sidebar
echo _x( 'apparent', 'in_sidebar', 'my-plugin-domain' );

Paso 7: internacionalización de JavaScript

Y finalmente, cuando tenga una cadena para traducir en un archivo javascript, puede usar un método definido en el códice usando wp_localize_script ().

// In your PHP file:

wp_enqueue_script( 'script-handle', … );
wp_localize_script( 'script-handle', 'objectL10n', array(
	'speed'  => $distance / $time,
	'submit' => __( 'Submit', 'my-plugin-domain' ),
) );

// in the javascript file:

$('#submit').val(objectL10n.submit);
$('#speed').val('{speed} km/h'.replace('{speed}', objectL10n.speed));

¡Simplemente reemplace sus propias variables y listo!

Deja un comentario

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

Ir arriba