Board logo

标题: 使用 Dojo 实现站点的跨浏览器本地化支持(2) [打印本页]

作者: look_w    时间: 2018-11-2 16:39     标题: 使用 Dojo 实现站点的跨浏览器本地化支持(2)

Dojo 本地化在跨浏览器支持上的问题上一节中我们提到了 Dojo 提供的两种设置本地语言环境的方法,出于便利性,很多人选择了借助浏览器的默认本地语言环境设置的方法。开发者通常会认为,在这种情况下,Dojo 会根据浏览器设置里面的"语言"设置来进行相应的本地化。然而,在实际编程中我们发现,在不同的浏览器下,采用此种方法会产生不同的效果。以 Firfox 和 IE 为例:
这是什么原因引起的呢?让我们来查看一下 Dojo 的源代码,看一下在没有设置 dojoConfig 的 locale 属性时 Dojo 是如何处理的。
清单 5. dojo/_base/config.js
1
2
3
4
5
6
...
if(!result.locale && typeof navigator != "undefined"){
// Default locale for browsers.
result.locale = (navigator.language || navigator.userLanguage).toLowerCase();
}
...




由 Dojo 的源代码可以看出,在 locale 属性未指定的情况下,Dojo 会去读 navigator 的 language 属性,如果没有此属性,则去读 userLanguage 属性,根据这两个属性的值去设置 locale 的值。navigator 对象的 language 和 userLanguage 属性在 Firfox 和 IE 下面分别有如下特点:
由此我们便可以看出 Dojo 本地化在跨浏览器支持上问题的原因。
解决问题的两种思路事实上,不管是 IE 还是 Firfox,浏览器里面的"语言"设置真正影响的是 HTTP header 里面的 Accept-Language 属性。而 Firfox    又会根据 Accept-Language 的值去设置 navigator.language 的值,而 IE 不会。然而 HTTP header 里面的    Accept-Language 的值无法在浏览器端通过 JavaScript 获取到,只能有 Server 端的程序获取到。
因此,根据 Web 站点所用技术的不同,我们设计出两种不同的解决方案:





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0