¡Guau! Si te preguntas qué significa esta publicación, ¡no te preocupes, no eres el único! Como sabes, WordPress está traducido a muchos idiomas, pero muy a menudo los complementos o temas contienen algunas cadenas que no están traducidas a tu propio idioma y esto es más que frustrante: es irritante.
Entonces, ¿por qué sucede esto? Probablemente porque los desarrolladores no usan como deberían internacionalización. Es decir, el uso de funciones específicas incluidas en WordPress que permiten una manera fácil de traducir todo.
Paso 1: carga de 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 simple 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 POeditar software libre.
Paso 2: traducción de cadenas
Cuando necesite que una cadena sea traducible, debe incluir la cadena contiene en una función. Las funciones más utilizadas son _e () y __ (). Aquí hay una muestra de cómo usar __ ():
echo '<p>' . __( 'This is the string content', 'textdomain' ) . '</p>';
Lo que esta función devuelve contiene la cadena, pero no la imprime. Es por eso que necesitamos usar echo. Pero la función _e () está imprimiendo 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 cadenas que contienen variables
Pero a veces su cadena puede contener variables. Usar _e () y __ () no funciona. Entonces, en ese caso, necesita las funciones printf () y sprintf (). Como vimos anteriormente, printf () repite 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
En el caso de una cadena que contenga más de una variable, use el siguiente código:
printf( __( 'I bought %1$s books, and %2$s tomatoes.' ), $books_count, $tomatoes_count );
Paso 5 – Manejo de plurales
En el ejemplo anterior, compré libros y tomates. ¿Pero lo que compré solo un libro? El código imprimirá «1 libros», y esto no es correcto. Entonces, para lidiar con el plural, hay otra función llamada _n (). Así es como se usa:
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 de la cadena, mientras que el primero solo almacena su contenido. Estas funciones tienen un segundo argumento para explicar su contexto. Por ejemplo, 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 que deba ser traducible 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!