<?php
$language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
echo $language;
?>
Когда я использую Firefox для тестирования этого блока кода, я добираюсь en-us,en;q=0.7,ja;q=0.3
,
когда я использую IE для тестирования блока кода, я добираюсь zh-cn
.
Значение $_SERVER['HTTP_ACCEPT_LANGUAGE']
строка? Как определить, является ли предпочтительный язык китайским или японским? Как я могу записать регулярное выражение для получения языка от значения $_SERVER['HTTP_ACCEPT_LANGUAGE']
?
Да, значение $ _ SERVER ['HTTP_ACCEPT_LANGUAGE']
является строкой - см. $ _ SERVER
.
Его содержимое отправляется браузером, что объясняет, почему вы получаете разные результаты в зависимости от того, какой браузер вы используете: скорее всего, ваш Firefox настроен на запрос страниц на английском языке (высокий приоритет) или японский (низкий приоритет) , в то время как ваш IE настроен на запрос страниц на китайском языке.
Это связано с тем, что этот HTTP-заголовок может содержать:
Идея состоит в том, что сервер должен отвечать, используя язык, который «лучше всего подходит» тому, что запрашивает пользователь.
О синтаксическом анализе этого заголовка может быть интересно прочитать это сообщение в блоге: Parse Accept-Language для определения языка пользователя
Предлагается часть кода для синтаксического анализа этого HTTP-заголовка - и он генерирует массив, который выглядит так (цитата) :
Array
(
[en-ca] => 1
[en] => 0.8
[en-us] => 0.6
[de-de] => 0.4
[de] => 0.2
)
Это массив языков, отсортированных по приоритету в порядке убывания - что, вероятно, именно то, что вам нужно.