Как получить значение языка от $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] использующий PHP?

<?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']?

14
задан Tim Visée 13 March 2014 в 16:38
поделиться

1 ответ

Да, значение $ _ 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
)

Это массив языков, отсортированных по приоритету в порядке убывания - что, вероятно, именно то, что вам нужно.

28
ответ дан 1 December 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: