Para encontrar a resposta para essa pergunta, basta ver como o WordPress recupera as traduções. Em última análise, é a load_textdomain()
função que faz isso. Quando olhamos para sua fonte, descobrimos que ele cria um MO
objeto e carrega as traduções de um .mo
arquivo para ele. Em seguida, ele armazena esse objeto em uma variável global chamada $l10n
, que é uma matriz digitada pelo domínio de texto.
Para carregar um código de idioma diferente para um domínio específico, basta chamar load_textdomain()
o caminho para o .mo
arquivo desse código de idioma:
$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 descobrir qual lógica o WordPress usa para determinar onde procurar o .mo
arquivo para um plug-in (como obter o código do idioma atual), dê uma olhada na fonte de load_plugin_textdomain()
.
load_plugin_textdomain()
.$l10n[$textdomain]
não é definido, mesmo depois de carregar o domínio de texto em umaafter_setup_theme
ação.Então, graças a JD, eu finalmente acabei com este código:
Agora, eu sei que não deveria ser, de acordo com este famoso artigo:
http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong/
Mas, eu não sei, funciona ... E bônus: digamos que você queira usá-lo no admin, porque o idioma do admin é x, mas você deseja obter / salvar dados no idioma, e você está usando o polylang . Portanto, ou seja, seu administrador é inglês, mas você está na tradução de um post para o espanhol e precisa obter dados em espanhol dos locais dos temas:
fonte