在浏览器中确定用户区域设置的最佳方法

我有一个网站(Flash)本地化到十几种语言,我想根据用户的浏览器设置自动定义一个默认值,以尽量减less访问内容的步骤。

仅供参考,由于代理限制,我无法使用服务器脚本,所以我想JavaScript或ActionScript是适合解决问题的。

问题:

  1. 什么是最好的方法来猜测用户的语言环境?

  2. 是否有任何现有的简单的类/function可以帮助我(没有复杂的本地化包)? 特别是要巧妙地将所有可能的语言分解成更小的数字(我有翻译)。

  3. 我可以相信这样的解决scheme?

  4. 任何其他解决方法或build议?

提前致谢!

正确的方法是查看发送到服务器的HTTP Accept-Language头。 这包含用户configuration其浏览器更喜欢的有序,加权语言列表。

不幸的是,这个头文件不能在JavaScript里面读取; 所有你得到的是navigator.language ,它告诉你什么本地化版本的网页浏览器安装。 这不一定与用户的首选语言相同。 在IE浏览器上,你会得到systemLanguage (操作系统安装的语言), browserLanguagelanguage相同)和userLanguage (用户configuration的操作系统区域),这些都是同样无益的。

如果我必须在这些属性之间进行select,那么我会首先嗅探userLanguage ,然后回到language然后才能看到browserLanguage ,最后是systemLanguage (如果那些语言不匹配)。

如果你可以把一个服务器端脚本放在networking的其他地方,它只读取Accept-Language头文件,并将其作为一个带有string头部值的JavaScript文件返回,例如:

 var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3'; 

那么你可以在HTML中包含指向外部服务的<script src>,并使用JavaScript来parsing语言头文件。 我不知道任何现有的库代码来做到这一点,因为接受语言parsing几乎总是在服务器端完成。

无论你最终做什么,你当然需要一个用户覆盖,因为它总是会猜对某些人错误。 通常,将语言设置放入url(例如,http://www.example.com/en/site vs http://www.example.com/de/site)是最容易的,并让用户点击两者之间的联系。 有时候,您确实希望为这两种语言版本创build一个URL,在这种情况下,您必须将设置存储在Cookie中,但这可能会使用户代理不支持Cookie和search引擎。

本文build议浏览器的导航器对象的以下属性:

  • navigator.language(Netscape – 浏览器本地化)
  • navigator.browserLanguage(特定于IE的浏览器本地化语言)
  • navigator.systemLanguage(IE专用 – Windows操作系统 – 本地化语言)
  • navigator.userLanguage

把这些变成一个javascript函数,在大多数情况下,你应该能够猜出正确的语言。 一定要优雅地退化,所以有一个包含您的语言select链接的div,以便如果没有JavaScript或方法不起作用,用户仍然可以决定。 如果确实有效,只需隐藏div。

在客户端执行此操作的唯一问题是要么将所有语言提供给客户端,要么必须等到脚本运行并在请求正确版本之前检测到语言。 也许提供最stream行的语言版本作为默认会刺激最less的人。

编辑:我会第二伊万的cookiesbuild议,但要确保用户可以随时更改语言; 不是每个人都喜欢他们的浏览器默认的语言。

在Chrome和Firefox 32+上,navigator.languages包含用户首选项的语言环境数组,并且比navigator.language更精确,但要使其向后兼容(经过testing的Chrome / IE / Firefox / Safari),然后使用这个:

 function getLang() { if (navigator.languages != undefined) return navigator.languages[0]; else return navigator.language; } 

对于Flash你有flash.system.Capabilities.language – 考虑操作系统语言检测 猜测 approprieate语言环境。

在地址栏中键入:about:config,然后在页面上search“general.useragent.locale”其他用法: https : //addons.mozilla.org/en-US/firefox/addon/quick-locale-switcher /