✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Динамическое изменение языка сайта WordPress (локали)

16

Есть несколько фантастических многоязычных плагинов для WordPress, однако для одного клиентского проекта мне нужно было что-то гораздо более гибкое, так как этот конкретный клиент должен был обслуживать несколько стран, каждая из которых говорила на нескольких языках.

Короче говоря, клиент должен был иметь многосайтовый экземпляр, в котором страна и язык были установлены по умолчанию, а также возможность переопределять страну и язык на каждой странице/сообщении.

Создание многоязычного плагина

Если достаточное количество людей заставит меня это сделать, я могу рассмотреть возможность выпуска всего этого в виде отдельного плагина, однако сердце многоязычного плагина, который я создаю, опирается на localeфильтр WordPress, а сердце плагина находится в следующем фрагменте кода:


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 );

Тада! Ваша локаль теперь установлена, и ваш многоязычный сайт теперь должен переключать языки в зависимости от метаданных вашей страницы/сайта.

Ждать! Мои стандартные переводы ядра WordPress не работают!

Это проблема, с которой я столкнулся, и не мог в жизни понять это. Моя тема отлично переводится после того, как я добавил соответствующие файлы .mo и .po, однако основные переводы WordPress по умолчанию (например, сообщение «Оставить ответ» в шаблоне комментариев) не переводились.

Оказывается, решение было довольно простым! Хотя я обслуживал переводы пользовательских доменов, я забыл поместить в свою тему один простой код: load_default_textdomain().


load_default_textdomain();

Если я сэкономил пару часов на вашей отладке с помощью этого «одного странного совета», добро пожаловать!

Источник записи: wholesomecode.ltd

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее