Для начала разберемся, что же это за элемент $_SERVER['HTTP_ACCEPT_LANGUAGE']
. В элементе $_SERVER['HTTP_ACCEPT_LANGUAGE'] описаны предпочтения клиента относительно языка. Эта информация извлекается из HTTP-заголовка Accept-Language, который присылает клиент серверу. Пример содержания элемента:
ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Эту строку можно трактовать следующим образом: клиент предпочитает русский язык, но в случае его отсутствия согласен принимать документы на английском.
На основе этих данных можно написать функцию (или класс), которая будет возвращать код языка для отображения определенного контента пользователю на основе его языковых предпочтений. Пример:
<?php class DetectLanguageController { /** * Вывод кода языка на основе предпочтений пользователя, * для примера */ public function showLanguageCode() { echo $this->getLanguageByBrowser('en'); die; } /** * Определение языка пользователя * на основе данных из $_SERVER['HTTP_ACCEPT_LANGUAGE'] * * @param string $defaultLanguage - код языка по-умолчанию, * в случае отсутствия на сайте языка пользователя * @return string - код языка для отображения контента */ public function getLanguageByBrowser($defaultLanguage) { //массив имеющихся языков на сайте, и их соответствия $siteLanguage = array( //для языков ru, uk, be ... отображать ru 'ru' => array('ru', 'uk', 'be', 'ky', 'ab', 'mo', 'et', 'lv'), 'en' => array('en'), 'de' => array('de'), ); $rLanguage = $defaultLanguage; if (($list = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']))) { if (preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', $list, $list)) { $language = array_combine($list[1], $list[2]); foreach ($language as $n => $v) { $language[$n] = $v ? $v : 1; } arsort($language, SORT_NUMERIC); foreach ($language as $value => $key) { $l = strtok($value, '-'); foreach ($siteLanguage as $siteLanguageValue) { if (in_array($l, $siteLanguageValue)) { return $siteLanguageValue[0]; } } } } } return $rLanguage; } }
Все, данную функцию можем вызывать перед загрузкой контента и определять на каком языке необходимо загрузить страницу (или на какой поддомен или домен необходимо перенаправить пользователя).
Коды языков указаны в стандарте ISO 639. Подробнее о стандарте ISO 639 можно почитать здесь: https://ru.wiktionary.org/wiki/Викисловарь:ISO_639
Комментарии
Комментарии отсутствуют, Вы можете быть первым