Accept-Language

HTTP-заголовок Accept-Language сообщает серверу, какие языки клиент понимает, и какая локаль предпочтительна. Используя механизм обсуждения содержимого  (content negotiation), сервер выбирает наиболее подходящий вариант и сообщает клиенту о своем выборе при помощи заголовка Content-Language. Браузер устанавливает соответствующие значение данного заголовка, основываясь на языке интерфейса, и даже если у пользователя есть возможность изменить значение заголовка Accept-Language, это происходит редко.

Данный заголовок является подсказкой для сервера, на каком языке отдавать содержимое пользователю, когда нет другого способа определить это (например, явно указанный язык в URL'е, который пользователь явно выбрал). Рекомендуется никогда не переопределять на стороне сервера явный выбор пользователем языка. Содержимое заголовка Accept-Language часто не может быть переопределено пользователем (например, в путешествии, когда пользователь пользуется услугами интернет-кафе); также пользователь может захотеть посмотреть содержимое сайта на языке отличном от языка интерфейса.

Если сервер не может предоставить содержимое на языке переданном в заголовке Accept-Language, теоретически он может вернуть HTTP-статус 406 (Not Acceptable). Однако, для удобства пользователя, зачастую сервер в данном случае просто игнорирует заголовок  Accept-Language .

Header type Request header
Forbidden header name нет
CORS-safelisted request-header да

Синтаксис

Accept-Language: <language>
Accept-Language: <locale>
Accept-Language: *

// Multiple types, weighted with the quality value syntax:
Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5

Директивы

<language>
Тег языка. Он состоит с основного тега (2-3 буквы) который представляет язык и может быть расширен дополнительными под-тегами, разделенными '-'. Найболее часто подтегами являются указания на страну или регион (например 'en-US' или 'fr-CA') или тип используемый тип алфавита (например 'sr-Latn'). Другие варианты такие как тип орфографии ('de-DE-1996') обычно не используються в качестве значений для этого заголовка.
*
Значение '*' указывает на возможность использования любого языка.
;q= (q-factor weighting)
Любое с указанных значений в порядке предпочтения, выраженном значением quality value, которое называют весами.

Примеры

Accept-Language: *

Accept-Language: de

Accept-Language: de-CH

Accept-Language: en-US,en;q=0.5

Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5

Accept-Language: ru-RU, ru;q=0.9, en-US;q=0.8, en;q=0.7, fr;q=0.6

Спецификации

Спецификация Название
RFC 7231, секция 5.3.5: Accept-Language Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context

Совместимость с браузером

Update compatibility data on GitHub
КомпьютерыМобильные
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung Internet
Accept-LanguageChrome Полная поддержка ДаEdge Полная поддержка ДаFirefox Полная поддержка ДаIE Полная поддержка ДаOpera Полная поддержка ДаSafari Полная поддержка ДаWebView Android Полная поддержка ДаChrome Android Полная поддержка ДаFirefox Android Полная поддержка ДаOpera Android Полная поддержка ДаSafari iOS Полная поддержка ДаSamsung Internet Android Полная поддержка Да

Легенда

Полная поддержка  
Полная поддержка

Смотрите также