Para encontrar la respuesta a esta pregunta, solo necesita ver cómo WordPress recupera las traducciones. En última instancia, es la load_textdomain()
función la que hace esto. Cuando miramos su fuente, encontramos que crea un MO
objeto y carga las traducciones de un .mo
archivo en él. Luego almacena ese objeto en una variable global llamada $l10n
, que es una matriz con clave de dominio de texto.
Para cargar una configuración regional diferente para un dominio particular, solo necesitamos llamar load_textdomain()
con la ruta al .mo
archivo para esa configuración regional:
$textdomain = 'your-textdomain';
// First, back up the default locale, so that we don't have to reload it.
global $l10n;
$backup = $l10n[ $textdomain ];
// Now load the .mo file for the locale that we want.
$locale = 'en_US';
$mo_file = $textdomain . '-' . $locale . '.mo';
load_textdomain( $textdomain, $mo_file );
// Translate to our heart's content!
_e( 'Hello World!', $textdomain );
// When we are done, restore the translations for the default locale.
$l10n[ $textdomain ] = $backup;
Para averiguar qué lógica usa WordPress para determinar dónde buscar el .mo
archivo para un complemento (como cómo obtener la configuración regional actual), eche un vistazo a la fuente de load_plugin_textdomain()
.
load_plugin_textdomain()
.$l10n[$textdomain]
no está configurado, incluso después de cargar el dominio de texto en unaafter_setup_theme
acción.Entonces, gracias a JD, finalmente terminé con este código:
Ahora, sé que no debería ser, según este famoso artículo:
http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong/
Pero, no sé, funciona ... Y extra: digamos que quiere usarlo en admin, porque el lenguaje de administración es x, pero desea obtener / guardar datos en lang y, y está usando polylang . Entonces, es decir, su administrador es inglés, pero está en la traducción al español de una publicación y necesita obtener datos en español de las configuraciones regionales de su tema:
fuente