23

我想检测用户的语言环境(而不是他们的位置)。问题是这些方法似乎都不可靠。

接受语言标题

优点

  1. 如果浏览器已更改为默认设置,您将获得一个可以显示真实语言环境的值列表。
  2. 默认情况下在 IE 中似乎准确?
  3. 默认情况下在 IE 中准确意味着默认情况下在 Windows 上的 FF 中准确?(即您从 mozilla.org 下载正确的版本)
  4. 与 Windows 上的 Opera 的 #3 相同吗?

缺点

  1. 服务器端开销和对缓存的干扰(或额外的 XHR)。
  2. 在所有英语系统上的 Chrome 中默认为“en-us”,除非您安装本地词典并将其拖到顶部。
  3. 不是 Safari 发送的?
  4. 在 Safari 和 Chrome 中默认不正确意味着http://mozilla.orghttp://opera.com将用户定向到错误的下载,并且还会安装它们自己的“en-us”版本。

结论

  • 在 OSX 上完全不可靠,因为默认情况下每个浏览器都会出错。但是在 Windows 上的 IE 和 FF 中应该是准确的。

window.navigator.language/userLanguage

优点

  1. 最好的部分是它是一个很好的轻量级客户端解决方案。
  2. 默认情况下在 IE 中似乎准确?
  3. 默认情况下,在 Windows 上的 FF 中似乎准确?

缺点

  1. 默认情况下,在所有系统上的 Safari 中始终“en-us”。
  2. 在所有英语系统上的 Chrome 中默认为“en-us”,除非您安装本地词典并将其拖到顶部。
  3. 在 Opera 中总是只有“en”。

结论

  • 甚至比 Accept-Language 更不可靠。

IP地理定位

优点

  1. 独立于浏览器和操作系统语言设置工作。

缺点

  1. 独立于浏览器和操作系统语言设置工作。
  2. 关于性能、定价、保持最新等的所有常见问题。

结论

  • 这是否真的有效取决于您为什么要尝试检测用户的语言环境。此方法为您提供用户的位置,这与 i18n 意义上的区域设置不同。

HTML5 地理位置

优点

  1. 通常与 IP 地理定位一样准确,无需服务器开销。

缺点

  1. 要求用户允许您访问他们的位置。
  2. 浏览器支持(实际上支持看起来很不错)。

结论

  • 不得不征求许可通常会破坏交易。也与 IP 地理定位相同的结论。

概括

现在似乎检测用户的区域设置比以往任何时候都更难,而检测他们的物理位置变得更容易了。最大的罪魁祸首是 Safari,它至少应该在 OSX 上默认反映操作系统设置,但 Chrome 也没有设置任何示例。即使人们将他们的本地词典安装到 Chrome,我真的怀疑他们也会将其拖到列表的顶部。

我不能责怪 Mozilla 和 Opera 被其他浏览器误报到他们的下载页面所拖累。但是,如果他们将下载页面切换为使用地理定位而不是可能查看 Accept-Language,这将缓解问题。

但实际上,既然 IE 不再占主导地位,还剩下哪些选项可以检测用户的语言环境?还剩下什么吗?

4

1 回答 1

2

这取决于您所说的“用户区域设置”是什么意思。问题中列出的可能性反映了“用户区域设置”的不同含义。它们都没有反映现代本地化中的充分含义,即用户偏好的一组文化约定(包括按偏好顺序排列的人类语言列表)。找到它的方法是向用户询问它们。

自然,您应该只询问在上下文中真正重要的约定,并且您可以考虑将用户表达的偏好存储在 cookie、HTML5 存储、用户数据库或其他地方。

浏览器通常允许用户指定首选语言列表,以在Accept-Language标题中发送。然而,这仅与区域设置概念的一个方面有关,大多数用户都不知道它,并且已知它经常具有不正确的默认值。

于 2012-09-19T05:42:55.560 回答