Здравствуй, Хабр!
Писать о том, как сделать мультиязычность на modx revo не буду, а вот как определить язык пользователя и сделать редирект на подходящую версию — думаю будет многим интересно.
Под катом написан плагин для этой задачи и его описание.
Есть основной домен site.com и его русская копия site.com/ru/.
При входе на главную страницу сайта (русская или английская версия) определить язык пользователя.
Если пользователь русскоязычный — его надо перевести на site.com/ru/. Иначе оставить на английской версии сайта.
Язык пользователя записать в куки.
В дальнейшем, если этот пользователь войдёт на главную страницу любой версии сайта — его переводим на версию сайта по кукам.
Писать о том, как сделать мультиязычность на modx revo не буду, а вот как определить язык пользователя и сделать редирект на подходящую версию — думаю будет многим интересно.
Под катом написан плагин для этой задачи и его описание.
Задача:
Есть основной домен site.com и его русская копия site.com/ru/.
При входе на главную страницу сайта (русская или английская версия) определить язык пользователя.
Если пользователь русскоязычный — его надо перевести на site.com/ru/. Иначе оставить на английской версии сайта.
Язык пользователя записать в куки.
В дальнейшем, если этот пользователь войдёт на главную страницу любой версии сайта — его переводим на версию сайта по кукам.
Собственно код плагина:
<code>
<?php
$browserLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // Определяем язык пользователя
$contextLang = $modx->context->config['cultureKey']; // Код контекста
$selectLang = isset($_COOKIE['selectLang']) ? $_COOKIE['selectLang'] : false; // Изменялся ли язык (клик по флагу)?
$changeLang = isset($_GET['lang']) ? $_GET['lang'] : false; // Если в адресной строке есть есть параметр GET['lang'] - пользователь хочет изменить язык сайта
if(!$changeLang)
{
if($contextLang == 'ru' && (($selectLang == 'en' && $_SERVER['REQUEST_URI'] == '/ru/') || ($selectLang == false && $browserLang == 'en' && $_SERVER['REQUEST_URI'] == '/ru/')))
{
header('Location: http://new.granart.com.ua/');
}
if($contextLang == 'en' &&(($selectLang == 'ru' && $_SERVER['REQUEST_URI'] == '/') || ($selectLang == false && $browserLang == 'ru' && $_SERVER['REQUEST_URI'] == '/')))
{
header('Location: http://new.granart.com.ua/ru/');
}
}
if($changeLang == $contextLang)
setcookie("selectLang", $changeLang, time() + 3600 * 24 * 10, "/"); // Настроить куки можно в этом месте.
</code>