PHP: определение языка пользователя сайта
В ранние годы, чаще всего определяли языка пользователя на основании его IP. Да и до исх пор так часто делают. И всё чаще ошибаются из-за широкого распространения VPN и всяческих аномайзеров. Поэтом правильнее будет полагаться на стандарт W3C, согласно которому браузер должен передавать на сервер в заголовке HTTP заполненую переменную HTTP_ACCEPT_LANGUAGE. Собстевенно в PHP оно попадает в $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]. Далее остается распрасить переменную с сортировкой по «весам»:
1 2 3 4 5 6 7 8 |
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); } } else $language = array(); |
Получаем массив вида:
1 2 3 4 5 6 7 |
Array ( [ru-ru] => 1 [ru] => 0.8 [en-us] => 0.6 [en] => 0.4 ) |