Untuk menemukan jawaban untuk pertanyaan ini, Anda hanya perlu melihat bagaimana WordPress mengambil terjemahan. Pada akhirnya itu adalah load_textdomain()
fungsi yang melakukan ini. Ketika kita melihat sumbernya, kita menemukan bahwa ia menciptakan MO
objek dan memuat terjemahan dari .mo
file ke dalamnya. Kemudian ia menyimpan objek itu dalam variabel global yang disebut $l10n
, yaitu array yang diketik oleh textdomain.
Untuk memuat lokal yang berbeda untuk domain tertentu, kita hanya perlu memanggil load_textdomain()
dengan path ke .mo
file untuk lokal itu:
$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;
Untuk mengetahui logika apa yang digunakan WordPress untuk menentukan di mana mencari .mo
file untuk sebuah plugin (seperti cara mendapatkan lokasi saat ini), lihat sumbernya load_plugin_textdomain()
.
load_plugin_textdomain()
.$l10n[$textdomain]
tidak diselesaikan, bahkan setelah memuat domain teks dalam suatuafter_setup_theme
tindakan.Jadi terima kasih kepada JD, saya akhirnya mendapatkan kode ini:
Sekarang, saya tahu seharusnya tidak, sesuai dengan artikel terkenal ini:
http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong/
Tapi, saya tidak tahu, itu berfungsi ... Dan bonus: katakan Anda ingin menggunakannya di admin, karena bahasa admin adalah x, tetapi Anda ingin mendapatkan / menyimpan data dalam bahasa, dan Anda menggunakan polylang . Jadi, mis. Admin Anda adalah bahasa Inggris, tetapi Anda berada di terjemahan bahasa Spanyol dari sebuah pos, dan Anda perlu mendapatkan data bahasa Spanyol dari tema lokal Anda:
sumber