✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Dynamiczna zmiana języka (lokal) witryny WordPress

18

Istnieje kilka fantastycznych wielojęzycznych wtyczek do WordPressa, jednak w przypadku jednego projektu klienta potrzebowałem czegoś znacznie bardziej elastycznego, ponieważ ten konkretny klient musiał obsługiwać kilka krajów, z których każdy mówił kilkoma językami.

Krótko mówiąc, klient musiał mieć instancję wielostanowiskową, która miała ustawiony domyślnie kraj i język, a także możliwość nadpisania kraju i języka na każdej stronie / poście.

Tworzenie wtyczki wielojęzycznej

Jeśli wystarczająco dużo osób mnie wkurzy, mogę rozważyć wydanie całości jako samodzielnej wtyczki, jednak serce tworzonej przeze mnie wielojęzycznej wtyczki opiera się na localefiltrze WordPress, a serce wtyczki znajduje się w następującym fragmencie kodu:


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! Twój język jest teraz ustawiony, a Twoja wielojęzyczna witryna powinna teraz przełączać języki na podstawie meta strony/witryny.

Czekać! Moje domyślne tłumaczenia WordPress Core nie działają!

To jest problem, na który natknąłem się i nie mogłem go rozgryźć. Mój motyw został idealnie przetłumaczony po dodaniu odpowiednich plików .mo i .po, jednak domyślne tłumaczenia WordPress (takie jak wiadomość „Zostaw odpowiedź" w szablonie komentarzy) nie były tłumaczone.

Okazuje się, że rozwiązanie było dość proste! Chociaż zajmowałem się niestandardowymi tłumaczeniami domen, zapomniałem wstawić do motywu jednego prostego fragmentu kodu: load_default_textdomain().


load_default_textdomain();

Jeśli skróciłem twoje debugowanie o kilka godzin dzięki tej „jednej dziwnej wskazówce”, nie ma za co!

Źródło nagrywania: wholesomecode.ltd

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów