2011-08-02 71 views
3

当“区域设置”设置为例如“日本?这是否意味着浏览器已准备好识别日文字符?或者,它与OS设置更相关吗?区域设置:浏览器或操作系统设置?

与i18n(国际化和本地化)相关,我们如何检测访问我们网站的用户是否拥有日语语言环境使用JavaScript?下面的简单检查就足够了吗?

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

能否日语语言浏览器返回别的东西,而不是ja-jp

预先感谢。

+0

顺便说一句。如果Siku-Siku.com是您域名的名称,如果您想在波兰做生意,我会建议您选择一个不同的域名。这在波兰听起来太有趣了。 –

+0

谢谢,帕维尔!对另一种语言来说,好的意思可能会很有趣;很高兴这不是什么卑鄙或不礼貌的事情。 :) – moey

回答

6

首先,我们需要定义什么区域设置。在上下文中,您使用的是ISO639 Language Identifier,可选的是ISO3166 Country Identifier。这用于确定最终用户的偏好(如本地化内容的语言或日期和时间格式以及数字格式)。

现在,区域设置可以设置在多个地方。操作系统通常具有多种设置,例如键盘布局,格式化首选项,语言首选项,代码页(非Unicode程序)等。
除此之外,Web浏览器通常允许您选择自己的首选项(Safari是一个例外这里)。这些首选项通过HTTP Accept-Language头与每个请求一起发送到Web服务器。这是你应该在服务器端读取的东西(不幸意味着PHP,C#,Java等服务器端代码),也可能传递给客户端脚本。
我必须在此指出,像navigator.language是不是要走的原因有两个方式:

  1. 这不是跨浏览器兼容,这是其他网络浏览器将需要不同的代码。那就是如果他们允许首先阅读这些信息。

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

所以要回答你的问题:不,这个检查是不够的。

+0

HTTP Accept-Language跨浏览器是否兼容? – moey

+0

Accept-Language是超文本传输​​协议(HTTP)标头之一,因此它必须是跨浏览器兼容的。 –

0

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

据我所知,ja-jp是唯一标准化的日语语言环境/语言组合;但作为@Siku-siku.com在评论中提出的建议(基于使用日文版IE/WinXP的真实测试),还请检查ja,因为这是IE语言设置中的一个可用选项。“

+0

因此,要检测语言环境,建议检查浏览器中设置的语言首选项(例如,“工具”>“Internet选项”>“常规”>“语言”)或OS设置(例如,“开始”>“控制面板”语言选项>区域选项')? – moey

+0

您无法通过浏览器内JavaScript访问这些内容,因此您最好的选择是您发布的代码。 – Piskvor

+0

上面的代码片段实际上会使用后一种方法(控制面板)来拉取值集合,这里也讨论了这个问题:http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference – moey

相关问题