WordPressi jaoks on mõned fantastilised mitmekeelsed pistikprogrammid, kuid ühe kliendiprojekti jaoks vajasin midagi palju paindlikumat, kuna see konkreetne klient pidi toitlustama mitut riiki, millest igaüks rääkis mitut keelt.
Lühidalt öeldes pidi kliendil olema mitme saidi eksemplar, mille vaikeseadeks on määratud riik ja keel, ning võimalus alistada riik ja keel igal lehel/postitusel.
Mitmekeelse pistikprogrammi loomine
Kui piisavalt palju inimesi veab mind seda tegema, võin kaaluda kogu selle eraldiseisva pistikprogrammi väljaandmist, kuid minu loodud mitmekeelse pistikprogrammi süda põhineb localeWordPressi filtril ja pistikprogrammi süda on järgmises koodilõigul:
function wholesomecode_example_redefine_locale( $locale) {
$country = get_post_meta( get_the_id(), '_wholesomecode_example_global_country_override', true );
$lang = get_post_meta( get_the_id(), '_wholesomecode_example_global_language_override', true );
if (( empty( $lang) ||! (is_page() || is_single() || is_singular()) )) {
$country = get_theme_mod( 'wholesomecode_example_multilingual_country', 'gb' );
$lang = get_theme_mod( 'wholesomecode_example_multilingual_language', 'en' );
}
if ('default' !== $country) {
$locale = $lang. '_'. strtoupper( $country );
} else {
$locale = $lang. '-'. $country;
}
return $locale;
}
add_filter( 'locale', 'wholesomecode_example_redefine_locale', 10 );
Tada! Teie lokaat on nüüd määratud ja teie mitmekeelne sait peaks nüüd keeli vahetama teie lehe/saidi meta põhjal.
Oota! Minu WordPressi põhivaiketõlked ei tööta!
See on probleem, millega puutusin kokku ja ma ei saanud sellest elu jooksul aru. Minu teema tõlgiti suurepäraselt pärast seda, kui olin lisanud asjakohased .mo- ja .po-failid, kuid WordPressi põhivaikimisi tõlkeid (nt kommentaarimalli sõnum "Jäta vastus") ei tõlgitud.
Selgus, et lahendus oli üsna lihtne! Kuigi olin hoolitsenud kohandatud domeeni tõlgete eest, olin unustanud oma teemasse lisada ühe lihtsa koodijupi: load_default_textdomain().
load_default_textdomain();
Kui olen selle "ühe imeliku näpunäide" abil teie silumist paar tundi maha ajanud, olete teretulnud!