Вопрос или проблема
Мы ведем сайт на WordPress с греческим контентом (политический и экономический анализ) и хотим создать английскую версию нашего сайта.
Английский сайт будет работать на своей собственной установке WordPress в поддомене основного сайта. Если основной сайт – http://www.analyst.gr, то английский сайт будет http://en.analyst.gr.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти подходящее решение для переключения языков. Идеально, если переключатель языков распознает язык браузера и перенаправляет соответственно, сохраняет язык в куки и, если пользователь выбирает другой сайт, сохраняет этот выбор.
Например, если я посещаю основной сайт, введя URL analyst.gr (или перейдя по какой-то ссылке), и попадаю на главную страницу, а затем переключаю язык, фактически переходя на en.analyst.gr, я хотел бы сохранить эту информацию, чтобы в следующий раз, когда я посещу analyst.gr, он автоматически перенаправил меня на en.analyst.gr.
Я пробовал использовать WPML, но он предполагает, что разные языки идут на одну и ту же установку wp с использованием vhosts
, и на данный момент сопоставление постов и меню не требуется.
Чтобы использовать переключатель языков для многосайтового WordPress, я советую несколько плагинов:
1) MultiLanguage Site Framework – имеет переключатель языков/флагов вверху и над постами, а также другие опции.
2) MultiSite language switcher – добавляет переключатель только для флагов/языков.
Из вашего вопроса я понял, что вам нужно три вещи:
- Прочитать куки, чтобы узнать предпочитаемый язык пользователя.
- Если куки нет, определить язык браузера, чтобы узнать предпочитаемый язык пользователя.
- На основе предпочитаемого языка перенаправить пользователя на греческий или английский сайт.
Существует множество способов работы с куки в WordPress. Вы можете начать ищите здесь. Вы можете сохранить код языка в куки и извлечь его, сохранив в переменной $wpse189348_lang
. Определить язык браузера можно с помощью этого кода:
$wpse189348_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
// $wpse189348_lang будет 'en' или 'fr' или какой-то другой код, но может быть пустым
Этот подход не является безупречным, как вы можете видеть здесь. Теперь у вас есть код языка в $wpse189348_lang
, вы можете использовать его для перенаправления пользователей с международного сайта на греческий сайт (‘el’ является кодом языка для греческого).
add_action ('after_setup_theme', wpse189348_lang_redirect);
function wpse189348_lang_redirect {
// считываем куки и/или язык браузера здесь, чтобы получить $wpse189348_lang
if ('el' == $wpse189348_lang) {
wp_redirect( 'http://www.analyst.gr' );
exit;
}
}
Так как международный сайт может иметь много разных языковых кодов, вы бы использовали отрицательный тест для перенаправления в другую сторону:
if ('el' !== $wpse189348_lang) {
wp_redirect( 'http://en.analyst.gr' );
exit;
}
Будьте осторожны, это довольно грубый способ перенаправления. Для чего-то более тонкого потребуется плагин или значительная работа.
Ответ или решение
Для создания двуязычного сайта на платформе WordPress с использованием субдоменов основной задачей является реализация корректного переключателя языков, который учитывает предпочтения пользователя и обеспечивает плавный переход между версиями сайта. Рассмотрим, как можно достичь этой цели, используя подходящие инструменты и технологии.
Теория
Когда мы говорим о сайте с несколькими языковыми версиями, ключевой аспект — удобство пользователя. Переключатель языков должен обеспечивать не только мгновенный переход между языками, но и учитывать предыдущий выбор пользователя, а также его предпочтения, указанные в браузере. Это позволяет создавать комфортные условия для взаимодействия с сайтом.
Основные шаги включают:
- Определение языка по умолчанию. Если пользователь впервые посещает сайт, система должна определить язык на основе настроек браузера.
- Использование куки для хранения выбора языка. Это обеспечивает возврат пользователя на сайт на желаемом языке при последующих посещениях.
- Реализация логики переключения. При первом посещении и при изменении языка пользователем, информация о предпочитаемом языке записывается, и дальнейшие посещения оптимизируются на базе этих данных.
Пример
Предположим, у нас есть два сайта: основной на греческом http://www.analyst.gr
и английская версия на субдомене http://en.analyst.gr
. Мы можем использовать следующие шаги для реализации логики переключения языков:
-
Определение языка браузера:
$user_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // Извлечение первых двух символов из строки языка браузера
-
Настройка куки для хранения выбора языка:
setcookie('preferred_language', $user_language, time() + (86400 * 30), "/");
-
Логика редиректа на основание языка:
add_action ('after_setup_theme', 'language_redirect'); function language_redirect() { // Проверка наличия куки и/или определение языка браузера $preferred_language = isset($_COOKIE['preferred_language']) ? $_COOKIE['preferred_language'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); if ($preferred_language === 'el') { wp_redirect('http://www.analyst.gr'); exit; } elseif ($preferred_language === 'en') { wp_redirect('http://en.analyst.gr'); exit; } }
-
Переключение языка пользователем:
- Добавьте переключатель на ваш сайт, который позволит пользователю явно указать желаемый язык. При выборе обновите куки.
Применение
Подход, описанный выше, позволяет автоматизировать язык сайта на основе предпочтений пользователя и создать более персонализированное взаимодействие. Однако, для реализации на профессиональном уровне стоит рассмотреть использование специализированных плагинов, таких как Multisite Language Switcher или MultiLanguage Site Framework, которые обеспечивают интуитивно понятный интерфейс для управления языковыми версиями и упрощают настройку переключателя языков.
Такое решение требует тестирования, чтобы убедиться, что все варианты использования учтены и пользователи получают корректный опыт вне зависимости от первичной точки входа на сайт.