>> This question came up in WebKit because ECMA-402’s DefaultLocale()
>> incorporates both language and locale and, to avoid confusion, we
>> wanted navigator.language, HTTP Accept-Language, and ECMA-402
>> DefaultLocale() to agree with each other.
> 
> It confuses me why you would want to have those three to agree.

We want them to agree because old code has been written to infer locale based 
on navigator.language, while new code will be written to infer locale based on 
EMCA-402, and we don’t want a webpage to display two distinct localizations 
simply because two library authors adopted two distinct APIs.

> • navigator.language is the language of the interface
> • HTTP Accept-Language is the language of content

I don’t think this is correct.

As Anne points out later, these two values *should* agree with each other 
according to HTML.

> • ECMA-402 DefaultLocale() is the user's locale
> 
> To me, these seem like completely different things. For example, I am
> currently on a computer in Germany where LANG is de_DE.UTF-8, but my
> browser uses HTTP Accept-Language to display web sites in English.
> 
>> Alexey has raised the point that “English as spoken in Poland” /
>> “English with a Polish locale” is not a language, and is a potentially
>> surprising value. Therefore, it might risk breaking websites.
> 
> Do you have evidence for web sites being broken by this string?

No.

> 
>> On the other hand, “en-pl” is a syntactically valid BCP 47 language
>> tag, and it’s the only way to avoid incompatibility between code that
>> uses ECMA-402 and code that uses navigator.language and/or HTTP
>> Accept-Language.
> 
> What incompatibilities are there? I do not understand this.

Let’s say that my system is set up for English language with Polish locale. 
ECMA-402 APIs honors this setup. But navigator.language reports “en-us”.

Now I navigate to a news website with ads. The news website author uses 
navigator.language to infer my locale but the ad author uses ECMA-402. So, all 
the dates on the news stories display as MM/DD/YYY while all the dates on the 
ads display as DD/MM/YYYY. This is a bad experience. 

If navigator.language reported “en-pl”, all my dates would display as 
DD/MM/YYYY. This is a good experience.

Geoff

Reply via email to