国际化如何在JavaScript中运行?

时间:2010-06-21 12:39:04

标签: javascript internationalization

我想知道如何在JavaScript中处理国际化。我用谷歌搜索,但我没有得到令人信服的答案:

  • JavaScript是否支持国际化?
  • JavaScript中的i18n是什么?
  • 如何处理日历,货币,日期等?

我已阅读Internationalization inside JavaScript

4 个答案:

答案 0 :(得分:156)

旧版浏览器中的本地化支持很差。最初,这是由于ECMAScript语言规范中的短语看起来像这样:

  

<强> Number.prototype.toLocaleString()
  生成一个字符串值,表示根据的格式设置的Number值   主机环境的当前区域设置的约定。此函数依赖于实现,并且   允许但不鼓励它返回与 toString 相同的东西。

规范中定义的每个本地化方法都被定义为“依赖于实现”,这会导致很多不一致。在这种情况下,Chrome Opera和Safari会返回与.toString()相同的内容。 Firefox和IE将返回语言环境格式的字符串,IE甚至包括千位分隔符(非常适合货币字符串)。 Chrome最近更新为返回千位分隔的字符串,但没有固定的小数。

对于现代环境ECMAScript Internationalization API spec是一种补充ECMAScript语言规范的新标准,它为字符串比较,数字格式设置以及日期和时间格式提供了更好的支持;它还修复了语言规范中的相应功能。可以找到介绍here。实现可在以下位置获得:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • Opera 15

还有一个兼容性实现Intl.js,它将在尚不存在的环境中提供API。

确定用户的首选语言仍然是个问题,因为没有获取当前语言的规范。每个浏览器都实现了一种获取语言字符串的方法,但这可以基于用户的操作系统语言或仅基于浏览器的语言:

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;

一个很好的解决方法是将Accept-Language标头从服务器转储到客户端。如果格式化为JavaScript,则可以将其传递给Internationalization API构造函数,这将自动选择最佳(或首先支持的)区域设置。

简而言之,您必须自己完成大量工作,或者使用framework/library,因为您不能依赖浏览器为您完成这项工作。

用于本地化的各种库和插件:

随意添加/编辑。

答案 1 :(得分:10)

Mozilla最近发布了令人敬畏的L20n或本地化2.0。用他们自己的话说L20n是

  

一种开源的,特定于本地化的脚本语言,用于处理性别,复数,变形以及大多数其他自然语言的古怪元素。

他们的js实现在github L20n repository.

答案 2 :(得分:0)

其中一些是原生的,其余部分可通过图书馆获得。

例如Datejs是一个很好的国际日期库。

其他方面,它只是语言翻译,JavaScript本身是Unicode兼容的(以及所有主流浏览器)。

答案 3 :(得分:0)

您还可以尝试其他图书馆 - https://github.com/wikimedia/jquery.i18n

除了参数替换和多个复数形式之外,它还支持性别,这是某些语言需要的自定义语法规则的一个相当独特的功能。