What are Content-Language and Accept-Language?
Solution 1
Content-Language
, an entity header, is used to describe the language(s) intended for the audience, so that it allows a user to differentiate according to the users' own preferred language. Entity headers are used in both, HTTP requests and responses.1
Accept-Language
, a request HTTP header, advertises which languages the client is able to understand, and which locale variant is preferred.2 There can be multiple languages, each with an optional weight or 'quality' value. For example:
Accept-Language: da, en-GB;q=0.8, en;q=0.7
(The default weight is 1, so this is equivalent to da;q=1, en-GB;q=0.8, en;q=0.7
).
You're going to have to parse the values and weights to see if an appropriate translation is available, and provide the user the translation in the highest preferred language weight.
It is recommended you give the users an alternative, such as a cookie set value, to force a certain language for your site. This is because some users may want to see your site in a certain language, without changing their language acceptance preferences.
Solution 2
Content-Language
describes the language that a particular piece of content is intended for. Accept-Language
is the list of languages that a user agent wants content in. The best way to think of this is that Content-Language
describes content and Accept-Language
conveys a preference.
Solution 3
The Content-Language entity-header field describes the natural language(s) of the intended audience for the enclosed entity. Note that this might not be equivalent to all the languages used within the entity-body.
The Accept-Language request-header field restricts the set of natural languages that are preferred as a response to the request
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Solution 4
The
Content-Language
entity header is used to describe the language(s) intended for the audience, so that it allows a user to differentiate according to the users' own preferred language.Header type Entity header Forbidden header name no CORS-safelisted response-header yes CORS-safelisted request-header yes
The
Accept-Language
request HTTP header advertises which languages the client is able to understand, and which locale variant is preferred. (By languages, we mean natural languages, such as English, and not programming languages.)Header type Request header Forbidden header name no CORS-safelisted request-header yes
amateur
Updated on July 08, 2022Comments
-
amateur almost 2 years
I have seen the HTTP headers of
Content-Language
andAccept-Language
, could someone explain what these are for and the difference between them? I have a multilingual site and wondering should I be setting both to the sites current selected language, by the user. -
james.garriss over 12 yearsSlight tweak to your answer: Content-Language is a content header, so it applies to content whether from server to client or from client to server.
-
Yarl about 7 yearsRFC2616: “The Content-Language entity-header field describes the natural language(s) of the intended audience for the enclosed entity. However, just because multiple languages are present within an entity does not mean that it is intended for multiple linguistic audiences. An example would be a beginner's language primer, such as "A First Lesson in Latin," which is clearly intended to be used by an English-literate audience. In this case, the Content-Language would properly only include "en".” R. Fielding, UC Irvine, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee; 1999.
-
Yarl about 7 yearsSo that are not definitely languages on page. See RFC 2616 Section 14.12.