区域设置:浏览器还是操作系统设置?

3

当"locale"被设置为例如日语时,意味着什么?这是指浏览器已准备好识别日语字符吗?还是更多地与操作系统设置相关?

关于i18n(国际化和本地化),如何使用JavaScript检测访问我们网站的用户是否具有例如日语的地区设置?以下简单检查是否足够?

var userLocale = navigator.language || navigator.userLanguage;
if (userLocale.toLowerCase() == 'ja-jp') { ... }

日语区域设置的浏览器是否可以返回ja-jp以外的其他内容?

提前感谢。


顺便说一句,如果Siku-Siku.com是您的域名,我建议您选择一个不同的域名,如果您将来想在波兰做生意。在波兰语中听起来太有趣了。 - Paweł Dyda
谢谢,Pawel!在一种语言中意思良好的东西在另一种语言中可能会变得非常有趣;很高兴它不是什么恶意或不礼貌的东西。 :) - moey
2个回答

6
首先,我们需要定义Locale是什么。在您使用的上下文中,它是一个ISO639语言标识符,后面可以选择跟着ISO3166国家标识符。这用于确定最终用户的偏好(例如本地化内容的语言或日期和时间格式以及数字格式)。
现在,Locale可能设置在多个位置。操作系统通常有多个设置,例如键盘布局、格式设置、语言偏好、代码页(针对非Unicode程序)等。
除此之外,Web浏览器通常允许您选择自己的偏好(Safari在这里是个例外)。这些偏好随每个请求通过HTTP Accept-Language头发送到Web服务器。这是您应该在服务器端以某种方式读取的内容(不幸的是,这意味着一些服务器端代码,如PHP、C#、Java等),并可能传递给客户端脚本。
我必须在这里声明,像navigator.language这样的东西不是正确的方法,有两个原因:
  1. 这不是跨浏览器兼容的,也就是说其他Web浏览器需要不同的代码。如果他们首先允许读取此信息。

  2. 此设置通常指的是Web浏览器的语言(Web浏览器用户界面翻译为的语言),与实际用户的偏好无关。

因此,回答您的问题:不,这种检查是不够的。

HTTP的Accept-Language在所有浏览器上都兼容吗? - moey
Accept-Language是Hyper-Text Transfer Protocol(HTTP)头之一,因此必须跨浏览器兼容。 - Paweł Dyda

0

这主要是操作系统/浏览器设置,控制操作系统语言、日期/时间格式、小数点/逗号等——换句话说,在世界各地的不同区域有不同的设置。这与字体/字符支持无直接关联。

据我所知,ja-jp 是唯一标准化的日语区域设置/语言组合;但正如 @Siku-siku.com 在评论中建议的那样“(基于使用日语版 IE/WinXP 进行的真实测试)还要检查 ja,因为在 IE 语言设置中这是可用选项之一。”


那么,为了检测本地化设置,是建议检查浏览器中设置的语言偏好(例如 工具 > Internet选项 > 常规 > 语言)还是操作系统设置(例如 开始 > 控制面板 > 区域和语言选项 > 区域选项)? - moey
你无法从浏览器中的JavaScript访问它们中的任何一个,因此你最好使用你发布的代码。 - Piskvor left the building
以上代码片段实际上使用后一种方法(控制面板)获取设置的值,如此处所述:https://dev59.com/j3NA5IYBdhLWcg3wPLL- - moey
正如你所链接的问题中所讨论的那样,这个数据从哪里来是相当依赖于浏览器的(并且无关紧要)。 - Piskvor left the building
一个建议(基于使用日语版IE/WinXP进行的实际测试)是也检查 ja,因为那是IE语言设置中可用选项之一。 - moey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接