Las funcionalidades de localización de WordPress te permiten hacer que plugins y temas sean fácilmente traducibles mediante archivos de idioma de WordPress (archivos po/mo).
Esto es especialmente cierto desde WordPress 3.7 y se simplificó considerablemente desde WordPress 4.6.
Se han realizado muchas mejoras en todo el sistema de traducción de WordPress, y sentí que realmente necesitaba una entrada actualizada.
Archivos de idioma de WordPress – La confusión (edición para desarrolladores)
Para los desarrolladores, todo se reduce a cómo indicarle a WordPress de la manera correcta que tienes archivos de traducción.
Como desarrolladores, se nos indicó usar
Sin embargo, en el pasado este sería el único lugar donde WordPress buscaría y si un cliente añadía su propio archivo de idioma allí, ¡en la próxima actualización desaparecería!
Hace un tiempo había un artículo en la web que promovía el uso de una segunda llamada, esta vez usando la función
Esto significaba que los usuarios podían colocar sus archivos de idioma en un lugar predeterminado dentro de la carpeta de idiomas de WP, y la traducción no se perdería al actualizar el plugin.
Archivos de idioma de WordPress – La confusión (Edición para usuarios)
Los usuarios necesitan saber dónde colocar una traducción personalizada para un plugin/tema; el problema es que en el pasado esto podía hacerse en varios lugares.
La documentación de WP indica a los desarrolladores que enlacen a una carpeta dentro de la carpeta de su plugin llamada e incluso así, esto se perderá cuando el plugin/tema sea actualizado.
Algunos desarrolladores añadirían una segunda comprobación en un lugar elegido por ellos, pero a menudo en una carpeta con nombre personalizado dentro de la carpeta de idiomas de WP.
Esto significaba que no había una forma consistente para que un usuario supiera dónde colocar sus archivos de traducción personalizados de forma segura.
Cargando archivos de idioma de la forma correcta (2017)
¡Desde WP 4.6 esto se volvió mucho más fácil tanto para usuarios como para desarrolladores!
Como desarrollador, ahora solo tienes que asegurarte de que estás cargando tus archivos de idioma correctamente, siguiendo la documentación de WP como se indica a continuación:
<br />
// for plugins<br />
add_action( 'init', 'myplugin_load_textdomain' );<br />
function myplugin_load_textdomain() {<br />
load_plugin_textdomain( 'my-plugin', false, basename( dirname( __FILE__ ) ) . '/languages' );<br />
}<br />
<br />
// for themes<br />
add_action( 'after_setup_theme', 'my_theme_setup' );<br />
function my_theme_setup(){<br />
load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );<br />
}<br />
Observa que los ejecutamos en los hooks 'init' y 'after_setup_theme'; esto debería garantizar que todo se cargue correctamente.
Si los ejecutas directamente o antes de sus hooks respectivos, puedes tener problemas con algunas cadenas que no se traducen, y plugins para manipular traducciones o crear sitios web multilingües como WPML podrían no funcionar en absoluto.
Como usuarios, ahora tenemos un lugar conveniente y con un nombre consistente donde podemos colocar nuestros archivos de idioma.
- Para plugins: /wp-content/languages/plugins/my-plugin-en_US.mo
- Para temas: /wp-content/languages/themes/my-theme-en_US.mo
'my-plugin' y 'my-theme' son el textdomain del plugin/tema (que generalmente se encuentra en el archivo readme.txt del plugin o en el archivo style.css del tema, al inicio).
Esta es una gran mejora respecto al método antiguo y evitará la pérdida de traducción en las actualizaciones en la mayoría de los casos.
En algunos casos, el plugin/tema puede que ya tenga una nueva traducción en tu idioma almacenada en wp.org; si este es el caso, podría sobrescribir tu archivo .mo, aunque en la mayoría de los casos esto será lo deseado.
Puedes contribuir con traducciones en wp.org si el plugin está alojado allí; si es un plugin premium, hay pocas probabilidades de que sea sobrescrito.
Información adicional
WordPress intentará encontrar tus archivos de idioma de WordPress en varios lugares; para un plugin con el textdomain 'my-plugin', primero buscará aquí:
/wp-content/languages/plugins/my-plugin-en_US.mo
Si no encuentra una traducción allí y el plugin especifica dónde encontrar una localmente, buscará allí:
/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo
Si el plugin no especifica una ruta, WordPress buscará aquí en su lugar:
/wp-content/languages/my-plugin-en_US.mo
La documentación de WordPress debe seguirse, pero en la práctica, desde WP 4.6 ni siquiera es necesario especificar un archivo local si no estás incluyendo ninguno (si están almacenados en el repositorio de wp.org), por lo que podrías simplemente añadir esto:
<br />
// for plugins<br />
add_action( 'init', 'myplugin_load_textdomain' );<br />
function myplugin_load_textdomain() {<br />
load_plugin_textdomain( 'my-plugin');<br />
}<br />
<br />
// for themes<br />
add_action( 'after_setup_theme', 'my_theme_setup' );<br />
function my_theme_setup(){<br />
load_theme_textdomain( 'my-theme');<br />
}<br />
Espero que esto aclare un poco el tema de las traducciones y, si tienes alguna pregunta o algo que agregar, por favor deja un comentario a continuación.