Определение языка пользователя на PHP
Сайты, которые рассчитаны на множество стран мира, как правило, имеют несколько языков. Безусловно, на всех страницах сайта там можно переключиться с одного языка на другой. Однако, Вы, наверняка, замечали, что в большинстве случаев сайты каким-то образом определяют Ваш язык и устанавливают сразу для Вас наиболее подходяющий. Вот о том, как определяется язык пользователя на PHP, я и расскажу в данной статье.
В основе лежит константа $_SERVER["HTTP_ACCEPT_LANGUAGE"], которая как раз и содержит сведения о предпочитаемых языках пользователя. Выглядит она примерно так: "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3". Здесь перечисляются языки и регионы, а также приоритет q. Чем больше q, тем больше пользователь предпочитает данный язык. Если q нет, значит, оно равно 1. Например, у ru-RU нет q, значит, оно равно 1, и данный язык наиболее подходящий.
Чтобы определить язык пользователя на PHP, надо воспользоваться следующим кодом:
<?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
$default_lang = key($langs); // Берём 1-й ключ первого (текущего) элемента (он же максимальный по q)
echo $default_lang; // Выводим язык по умолчанию
?>
Получив язык по умолчанию, мы можем сразу же установить его и на сайте, тем самым, выводя контент для пользователя на том языке, который он предпочитает.
Таким образом определяется язык пользователя на PHP, что очень пригодится мультиязычным сайтам.
-
- Михаил Русаков
Комментарии (7):
приятного вам отдыха. можно ли применить этот код на сайте ,с переключениями "en","ru"? Это для меня сложновато,но хотелось бы потестировать.там нужны какие-то изменения в коде,можно узнать подробнее?
Ответить
Это полученное значение нужно предавать в движок Вашего сайта, чтобы он знал на каком языке все шаблоны выводить.
Ответить
В вашем коде 2 ошибки. Поправьте
Ответить
Ошибочка в коде! В конце $langs[0] не работает! Это же ассоциативный массив и для сайта важно не значение первого элемента, а ключ! echo key($langs);
Ответить
А вы проверяли,работает или нет,о великий гуру?)
Ответить
Да. Я прям этот код у себя на денвере запустил и получил пустую страницу. Порылся в интернете - у некоторых тоже не работает обращение к нулевому элементу ассоциативного массива.
Ответить
может,перепутали чего?)или забыли? синтаксических ошибок точно нет.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.