Tuesday, October 8, 2013

Автоматическое переключение языка сайта

Описание проблемы:
Имеется сайт с Magento на английском. Необходимо, чтобы для пользователей, которые используют русский язык, сайт переключался соответственно, на русскую версию.
От переключения по IP пришлось отказаться т.к. русский IP не означает, что пользователь говорит по-русски и наоборот, это раз, два - мне необходимо было свободно работать в обеих версиях сайта без постоянного переключения и три - особенность переключения языка в Magento.



Дано:
hitechdevice.net - собственно пациент,
ru.hitechdevice.net - русская версия,
/?___store=ru&___from_store=en - уже существующий механизм переключения языка вручную.

Итак, что получилось в итоге (Осторожно быдлокод!):
<script type="text/javascript">
var href = window.location.href;
var lang1 = navigator.language || navigator.systemLanguage;
var lang = lang1.toLowerCase();
lang = lang.substr(0,2);
var newpage = window.location.href;

if (href.indexOf("___store") == -1)
{
    if (lang=="ru"){
    if (href.indexOf("ru.") == -1) {
   newpage = newpage + '?___store=ru';
   window.location.replace ?window.location.replace(newpage) :window.location=newpage;
   }
}
}
</script>
Как это работает.
var href = window.location.href;
var lang1 = navigator.language || navigator.systemLanguage;
var lang = lang1.toLowerCase();
lang = lang.substr(0,2);
var newpage = window.location.href;
Дважды берем адрес, по которому зашел пользователь, в переменные href и newpage, они нам пригодятся дальше.
В переменную  lang1 записываем язык браузера пользователя (вида ru_RU, us_en и т.д.) вырезаем интересующую нас часть (последние 2 символа) и перегоняем их в строчные (на всякий случай).
if (href.indexOf("___store") == -1)
Проверяем, нет ли в URL  признаков переключения языка, на случай, если пользователь поменял язык вручную, и чтобы не было зацикливания.

if (lang=="ru"){
    if (href.indexOf("ru.") == -1) {
   newpage = newpage + '?___store=ru';
   window.location.replace ?window.location.replace(newpage) :window.location=newpage;
Попался пользователь с русским языком? Смотрим, на какой версии сайта он находится. Если не на русской - направляем его на поддомен ru.
Будьте внимательны! В зависимости от того, как у вас на сайте организована мультиязычность, последние строчки кода необходимо будет переделать под ваши нужды.
Вот, вроде бы и всё. Работу скрипта можно посмотреть на указанном выше сайте.

No comments:

Post a Comment