[whatwg] Client side value for language preference

Jukka K. Korpela jkorpela at cs.tut.fi
Thu Mar 29 13:18:49 PDT 2012

2012-03-29 22:02, Matthew Nuzum wrote:

> Hello, on every HTTP request your browser sends header called
> Accept-Language with a value something like this:
>      en-gb,en-us;q=0.7,en;q=0.3
– –
> Browsers support a value called navigator.language but it does not
> convey the same information as the HTTP header.

Browsers have different features in this respect, but indeed they are 
quite distinct from the language preferences.

The language preferences used to have little impact, because few sites 
made use of them. And most users never learned about them, and there was 
little reason to learn… and therefore the settings are often inadequate, 
so it was a vicious circle. Well, still is. But interactive applications 
like many Google services are changing the situation: the language 
preferences sent are used to affect the language in generated texts and 
user interfaces, rather than just selecting between language versions of 

> Some browsers have gotten smarter and now send the first value from
> the user's language preference, which is definitely an improvement.

I think browsers have generally sent an Accept-Language header 
constructed from user preferences, for many years. The problem is that 
these settings seldom reflect the user’s real preferences, because the 
defaults generally depend on the browser language, or on the system 
language, not on any action by the user. If you use an English-language 
browser, the preference defaults might contain just English in different 
flavors, even though English might be the user’s fourth-best language.

> What would be great is if client side scripts could access the same
> information the server side code could access.

Sounds like a useful thing. It would support the idea of enabling 
standalone applications that can run offline, too. Along similar lines, 
it might be useful to give access to other settings that affect HTTP 
headers, but language settings seem to be far more important than other 

Note, however, that the idea postulates a simple model where the header 
only depends on certain settings and is the same for all resources. But 
this is probably acceptable. It is difficult to imagine a situation 
where a user preferred HTML documents in French and images in Italian, 
for example.

> That could be done
> simply be creating a new property that contains the same string as is
> sent to the server. It's easily parseable. But if we're going to make
> a new interface then maybe it would be good to make one that reduces
> the amount of work that client side developers would need to do.

I think the simple idea of a string is the best way to go. Anything 
beyond that can be handled by a library that can be written in a 
cross-browser way—not quite trivial, but surely doable. The problem is 
to get some basic data from the browser in well-defined way. I’d suggest 
a name like


> A very naive and probably flawed example could be:
> navigator.language.preference = [{lang:'en-gb', weight: 0.7},{lang:
> 'en-us', weight: 0.7},{lang:'en', weight: 0.3}];
> Then JS could:
> var n = navigator.language.preferences
> for (i in n) {
>    // check if n[i].lang is supported by the application, if so do
> something about it
> }
> This would give users a list of languages with the first in the list
> being the most preferred.

Actually, it’s the q (weight) values that matter, not the order, so a 
routine that selects the most preferred language would need to compare 
them. Moreover, the language negotiation mechanism can be more 
complicated: it need not select the language with highest q value, since 
the resources themselves may have been classified as having different 
qualities. This might not matter in most cases, but applications should 
still have access to the full information, with q values, either in form 
of an Accept-Header string or as a constructed array or object. I’m just 
spelling this out to emphasize that simple information about the most 
preferred language is not enough, even if the information is taken from 
user preferences.


More information about the whatwg mailing list