Определение языка посетителя сайта
Категория: Php | Автор: admins | (3 февраля 2017)
 

Определение языка посетителя сайта


Иногда бывает нужно автоматически перенаправить посетителя сайта на нужную языковую версию.
Самый распространенный метод – использование базы GeoIP, где собраны всевозможные IP-адреса и информация их принадлежности к странам и городам.


Решить задачу автоматического языка посетителя сайта и перенаправления поможет использование супер-массива $_SERVER.

В массив $_SERVER интерпретатор PHP помещает переменные, полученные от сервера. Без данных переменных сложно организовать полноценную поддержку Web-приложений. Одним из элементов этого массива является элемент $_SERVER['HTTP_ACCEPT_LANGUAGE'].

В элементе $_SERVER['HTTP_ACCEPT_LANGUAGE'] хранятся предпочтения посетителя относительно языка. Эта информация берется из HTTP-заголовка Accept-Language, который присылает клиент серверу.

Посмотрим что хранится в $_SERVER['HTTP_ACCEPT_LANGUAGE']:

Получаем в результате примерно следующее:
ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4

Эти данные можно интерпретировать следующим образом: клиент предпочитает русский язык, но в случае его отсутствия согласен принимать документы на английском. Как раз эти данные и можно использовать для определения национальной принадлежность посетителей. Однако результаты будут приблизительными, так как многие пользователи используют английские варианты браузеров, которые будут извещать сервер о том, что посетитель предпочитает лишь один язык — английский.
<?php
// Делаем массив из данных $_SERVER['HTTP_ACCEPT_LANGUAGE']
$str_exp = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$str_imp = implode(",", $str_exp);
$str_exp = explode(",", $str_imp);
$rus = 0;
$eng = 0;
for ($i = 0; $i <= count($str_exp); $i++)
{
$ok=0;
// Выделяем максимальное число для Русского языка
if (strspn($str_exp[$i],"ru") > 0)
{
for ($xx = $i; $xx < count($str_exp); $xx++)
{
if ((strspn($str_exp[$xx],"q=")>0) and ($ok == 0) and (substr($str_exp[$xx], 2) > $rus ))
{
$ok = 1;
$rus = substr($str_exp[$xx], 2);
}
}
}
// Выделяем максимальное число для Английского языка
if (strspn($str_exp[$i],"en") > 0)
{
for ($xx = $i; $xx < count($str_exp); $xx++)
{
if ((strspn($str_exp[$xx],"q=")>0) and ($ok == 0) and (substr($str_exp[$xx], 2) > $eng ))
{
$ok = 1;
$eng = substr($str_exp[$xx], 2);
}
}
}
}
// Распечатаем результат
print_r("Rus -> $rus <br> Eng -> $eng");
?>
В результате получаем переменные с рейтингом языка:
Rus -> 0.8
Eng -> 0.6

Далее можно сравнить эти цифры и перенаправить посетителя сайта на страницу с нужным языком.
<?php
// Сравниваем переменные
if ($rus >= $eng)
{
// Перенаправляем на русскую версию сайта
print_r('Перенаправляем на русскую версию сайта...
<a href="http://www.your-site.com/eng/">Спасибо, не хочу!</a>');
header("Location:http://www.your-site.com/rus/");
}
else
{
// Иначе перенаправляем на английскую версию сайта
print_r('вы будете перенаправлены на английскую версию сайта...
<a href="http://www.your-site.com/rus/">Спасибо, не хочу!</a>');
header("Location:http://www.your-site.com/eng/");
}
?>






 (Голосов: 0)

 



Была ли полезной Вам статья?
Да Нет

Только зарегистрированные пользователи могут оставлять в данной новости свои комментарии.

У нас искали: