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

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

Немного теории.

Я выбрал самый простой вариант определения языка у пользователя (есть и сложные), но не самый надежный (хотя абсолютно надежных вариантов не существует).
У каждого браузера есть поддержка локализаций (это то, на каком языке интерфейс браузера у вас). У FireFox локализация выставляется в меню «Инструменты->Дополнения->Локализации», в Opera в меню «Настройки->Общие настройки->Основные->Язык», в остальных ищите сами. Так вот наша задача узнать какой язык выставлен у пользователя, и согласно этому языку отдавать необходимую версию сайта.
У себя я сделал так, что если у пользователя выставлена русская, украинская или белорусская локализация, то отдавать ему русскую версию сайта, в противном случае отдавать английскую. Значение локализации браузера хранится в строке $_SERVER[«HTTP_ACCEPT_LANGUAGE»], эту строку мы и будем проверять (учтите, что в этой строке через запятую могут быть указаны разные локализации, нам же важно только самое первое значение — оно имеет высший приоритет). Но проверять значение этой строки мало, могут быть ситуации, когда пользователю надо другую языковую версию сайта, например, он иностранец, сидящий в русском интернет кафе, и ему нужна англоязычная версия сайта, не смотря на русскую локализацию браузера. Этому пользователю при первой загрузке отдаем версию согласно его локализации, но далее, если он вручную на сайте выберет другую, более приемлемую ему версию сайта, то надо его выбор запомнить, и больше не навязывать ему то, от чего он ушел. Поэтому выбор пользователя мы будем сохранять в куках при помощи setcookie(); и далее проверять не сохранен ли выбор пользовательских языковых предпочтений в куках, если сохранен, то отдавать ему согласно его предпочтений до тех пор, пока эти предпочтения не поменяются.

А теперь практика.

Если теория ясна, то написать код не составит проблем, но для примера делюсь своим вариантом с комментариями.

{code type=PHP}
// действие с проверкой языка и установкой куки языка проводим только на странице index.php
if (strpos($_SERVER["REQUEST_URI"], "/index.php") or (substr($_SERVER["REQUEST_URI"], -1) == "/")) {

// если вход произведен без указания языка
if (!$_GET['lang']) {

// то проверяем, может язык указан в куках, если нет, то то смотрим локализацию браузера
if (!$_COOKIE['lang']) {

$b_lang = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]);

// если локализация русская или украинская или белорусская, то считаем, что пользователю необходимо отдавать русскую версию сайта.
if (($b_lang[0] == "ru") or ($b_lang[0] == "be") or ($b_lang[0] == "ru-UA")) $lang = "rus";

// при всех остальных локализациях отдаем английскую версию
else $lang = "eng";

}

// если язык уже указан в куках, то его и используем в системе
else $lang = $_COOKIE['lang'];
}

// если страница запрошена с указанием языка, то этот язык и используем в системе, и запоминаем его в куку
else {
$lang = $_GET['lang'];
setcookie("lang", $lang, time()+30758400, "/");
}

}
{/code}

На выходе в переменной $lang получаем рабочее значение языка — rus или eng.

Share

Comments

  1. Холмс
    14.08.2015 - 19:05

    Здравствуй автор 🙂 Сайт на ВП. 2 языка (РУ, УА) созданы путем пененоса копии сайта на поддомен типа уа.мойсайт.ком
    Встал вопрос грамотного определения локали пользователя и соответственно редиректа на нужную языковую версию сайта.
    Описаное тут решение вроде как раз то что мне нужно (теорию прочитал, суть понял, даже по коду понял что и как). Но только я совсем не разбираюсь в программировании и не знаю как настроить саму механику этого процесса (выбора и редиректа на нужную версию сайта). По этому буду рад помощи

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

Your email address will not be published / Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.