Изменение языка интерфейса, определяя настройки языка браузера пользователя, с возможностью выбора предпочтительного языка позже.

Вопрос или проблема

Я пришел из многоязычной страны, и зрители могут говорить на разных языках.

Я пишу тему и заметил, что язык моей темы изменяется только в зависимости от настроек моей административной панели, что означает, что только зарегистрированные пользователи или администраторы могут это сделать.

Что, если я захочу сделать это автоматически, определяя предпочтения браузера пользователя? Я использую jQuery для достижения некоторых из этих функций, но думаю, что это не самый правильный способ.

Я использую jQuery для установки первоначального языка по локали браузера и позволяю пользователю изменять его нажатием кнопки, а затем сохраняю настройку в куки.

Я также пытался использовать PHP для определения языка браузера, но какой API позволяет WordPress показать правильный язык (например, screen-reader-text)? Или позволить посетителю сайта изменить язык на лету?

Существует ли “более чистый” способ сделать это в WordPress, используя i18n на стороне сервера (определяя настройки браузера и затем позволяя зрителям изменять предпочтения языка)?

Вы можете получить язык браузера из глобальной переменной PHP $_SERVER['HTTP_ACCEPT_LANGUAGE'] )

Ответ или решение

Для решения проблемы автоматического определения языка пользователя в WordPress и предоставления возможности выбора предпочтительного языка, мы можем использовать комбинацию PHP для обработки серверных запросов и JavaScript (jQuery) для клиентской части. Вот пошаговое руководство для реализации этой функциональности.

Шаг 1: Определение языка браузера

Вы можете использовать переменную PHP $_SERVER['HTTP_ACCEPT_LANGUAGE'] для определения языка, установленного в браузере пользователя. Для этого создайте функцию, которая будет анализировать значение этой переменной и возвращать подходящий язык.

function detect_browser_language() {
    $langs = ['ru', 'en', 'fr', 'de']; // Добавьте поддерживаемые языки
    $accepted_languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

    foreach ($accepted_languages as $lang) {
        $lang = substr($lang, 0, 2); // Получаем только первые 2 символа
        if (in_array($lang, $langs)) {
            return $lang;
        }
    }

    return 'en'; // Язык по умолчанию
}

Шаг 2: Установка языка по умолчанию

Вам нужно установить язык по умолчанию для посетителей. Вы можете сделать это в файле functions.php вашей темы. Добавьте следующее:

add_action('after_setup_theme', 'set_default_language');
function set_default_language() {
    if (!is_user_logged_in()) {
        $lang = detect_browser_language();
        switch_to_locale($lang);
    }
}

Шаг 3: Позволяем пользователям выбирать язык

Создайте форму выбора языка, которая будет выводиться на сайте. Вы можете добавить это в шорткод или в виджет.

function language_selector() {
    $current_lang = get_locale();
    $langs = ['ru' => 'Русский', 'en' => 'English', 'fr' => 'Français', 'de' => 'Deutsch'];

    $output = '<form id="language-switcher" method="post">';
    foreach ($langs as $lang_code => $lang_name) {
        $output .= '<button type="submit" name="language" value="' . $lang_code . '"' . selected($current_lang, $lang_code, false) . '>' . $lang_name . '</button>';
    }
    $output .= '</form>';

    return $output;
}
add_shortcode('lang_selector', 'language_selector');

Шаг 4: Сохранение выбора языка

Для обработки выбора языка, добавьте следующий код в тот же файл functions.php:

if (isset($_POST['language'])) {
    $selected_lang = $_POST['language'];
    setcookie('preferred_language', $selected_lang, time() + (86400 * 30), "/"); // Сохраняем cookie на 30 дней
    switch_to_locale($selected_lang);
}

Шаг 5: Установка языка на основании куки

В functions.php добавьте следующую логику, чтобы при последующих посещениях пользователя устанавливался сохраненный язык из cookie:

function apply_preferred_language() {
    if (isset($_COOKIE['preferred_language'])) {
        $lang = $_COOKIE['preferred_language'];
        switch_to_locale($lang);
    }
}
add_action('after_setup_theme', 'apply_preferred_language');

Шаг 6: Локализация контента

Убедитесь, что в вашей теме правильно реализована локализация. Для этого используйте функцию __() и _e() для перевода текстовых строк.

echo __('Hello, World!', 'text-domain');

Заключение

С помощью данной схемы вы можете автоматически определять язык браузера посетителя, а также предоставлять возможность выбирать и сохранять предпочтительный язык. Это позволяет пользователям получать контент на своем языке, что значительно улучшает пользовательский опыт.

Не забудьте протестировать все изменения на различных языке браузеров, чтобы убедиться, что ваша реализация работает корректно.

Оцените материал
Добавить комментарий

Капча загружается...