Pull to refresh

Автоопределение языка пользователя на modx

Здравствуй, Хабр!

Писать о том, как сделать мультиязычность на 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>
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.