Accept-Language
Применение
Заголовок Accept-Language является частью согласования содержимого. Клиент отправляет упорядоченный по предпочтению список языковых тегов, а сервер выбирает наилучший доступный перевод запрошенного ресурса.
Браузеры заполняют этот заголовок на основе языковых настроек операционной системы. Значение соответствует синтаксису языковых тегов BCP 47 и поддерживает коды основных языков (en, de, fr) и региональные подтеги (en-US, pt-BR, zh-CN). Когда указано несколько языков, значения качества упорядочивают предпочтения.
Язык возвращённого содержимого сервер сообщает через заголовок ответа Content-Language. Когда подходящего перевода нет, большинство серверов возвращают язык по умолчанию, а не отвечают 406 Not Acceptable, поскольку выдача содержимого на резервном языке обычно полезнее, чем возврат ошибки.
language-tag
Языковой тег BCP 47. Основной подтег вроде en совпадает с любым региональным вариантом. Тег с региональным подтегом, например en-GB, нацелен на конкретную локаль.
*
Подстановочный знак, совпадающий с любым языком, не указанным ранее.
;q= (значение качества)
Вес от 0 до 1, выражающий относительное предпочтение. Значение по умолчанию — 1.0. Значение 0 помечает язык как неприемлемый.
Пример
Клиент предпочитает британский английский, в качестве резервного варианта — общий английский, а немецкий — с пониженным приоритетом. Сервер отвечает содержимым на общем английском.
Запрос
GET / HTTP/1.1
Host: example.com
Accept-Language: en-GB, en;q=0.9, de;q=0.5
Ответ
HTTP/1.1 200 OK
Content-Language: en
Запрос из браузера, настроенного на французский, с резервным вариантом в виде любого языка.
Accept-Language: fr-FR, fr;q=0.9, *;q=0.5
Многоязычный список предпочтений, в котором испанский стоит первым, португальский вторым, а английский третьим.
Accept-Language: es, pt;q=0.8, en;q=0.6