Как определить язык пользователя средствами PHP?
Всё очень просто. Для определения ip, домен, адреса, браузера и других вещей в php есть стандартные элементы суперглобального массива - $_SERVER. Но нам нужен один из них:
$_SERVER["HTTP_ACCEPT_LANGUAGE"]
Данный элемент передаёт серверу информацию о языке посетителя. Он возвращает нам, например, либо en, либо ru и тд. Сама информация выглядит примерно следующим образом:
ru-RU,ru;q=0.8,
en-US;q=0.5,
en;q=0.3
Сначала язык (ru), потом регион (RU), а после уже приоритет (q=0.8). Чем больше приоритет (q), тем больше пользователь предпочитает данный язык. Если q нет, значит, оно равно 1. Например, у ru-RU нет q, значит, оно равно 1, и данный язык наиболее подходящий.
Теперь воспользуемся следующим кодом для определения языка:
Код PHP
preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches); // вычисляем соответствия с массивом $matches $langs = array_combine($matches[1], $matches[2]); // Создаём массив с ключами $matches[1] и значениями $matches[2] foreach ($langs as $n =--> $v) $langs[$n] = $v ? $v : 1; // Если нет q, то ставим значение 1 arsort($langs); // Сортируем по убыванию q echo key($langs); // Выводим язык по умолчанию
В результате получаем язык пользователя по умолчанию. После его можно установить на сайте, а посетители увидят интерфейс уже с нужным ему языком, причём для этого ему не нужно будет совершать каких-либо действий! Всё это будет незаменимо для сайтов, которые подразумевают работу с мультиязычной аудиторией и контентом.
И другой способ определения языка пользователя PHP
preg_match('/^\w{2}/',$_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); switch (strtolower($matches[0])){ case "ru": $accept_lang="ru";break; // если русский case "de": $accept_lang="de";break; // если немецкий case "en": case "uk": case "us": $accept_lang="en";break; // если английский case "ua": $accept_lang="ua";break; // если украинский default: $accept_lang="en";break; // если нет совпадений, то по умолчанию, например, английский } echo $accept_lang;
Как автоматически переслать посетителя нужную языковую версию сайта PHP?
Для начала создаём массив с адресами (+ нужные поддомены) для каждого языка. Допустим, русская версия будет иметь стандартный адрес. Английская будет иметь вначале en. , испанская es. , а французская fr.
// Создаем массив с адресами для каждого языкового кода $sites = array( "ru" => "http://mysite.com/", "en" => "http://en.mysite.com/", "es" => "http://es.mysite.com/", "fr" => "http://fr.mysite.com/", ); // получаем язык $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // вырезаем первые две буквы // проверяем язык if (!in_array($lang, array_keys($sites))){ $lang = 'ru'; } // перенаправление на субдомен header('Location: ' . $sites[$lang]);
Спасибо за внимание!
Комментарии