我想知道如何在JavaScript中处理国际化。我用谷歌搜索,但我没有得到令人信服的答案:
答案 0 :(得分:156)
旧版浏览器中的本地化支持很差。最初,这是由于ECMAScript语言规范中的短语看起来像这样:
<强> Number.prototype.toLocaleString()强>
生成一个字符串值,表示根据的格式设置的Number值 主机环境的当前区域设置的约定。此函数依赖于实现,并且 允许但不鼓励它返回与 toString 相同的东西。
规范中定义的每个本地化方法都被定义为“依赖于实现”,这会导致很多不一致。在这种情况下,Chrome Opera和Safari会返回与.toString()
相同的内容。 Firefox和IE将返回语言环境格式的字符串,IE甚至包括千位分隔符(非常适合货币字符串)。 Chrome最近更新为返回千位分隔的字符串,但没有固定的小数。
对于现代环境,ECMAScript Internationalization API spec是一种补充ECMAScript语言规范的新标准,它为字符串比较,数字格式设置以及日期和时间格式提供了更好的支持;它还修复了语言规范中的相应功能。可以找到介绍here。实现可在以下位置获得:
还有一个兼容性实现Intl.js,它将在尚不存在的环境中提供API。
确定用户的首选语言仍然是个问题,因为没有获取当前语言的规范。每个浏览器都实现了一种获取语言字符串的方法,但这可以基于用户的操作系统语言或仅基于浏览器的语言:
// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
一个很好的解决方法是将Accept-Language标头从服务器转储到客户端。如果格式化为JavaScript,则可以将其传递给Internationalization API构造函数,这将自动选择最佳(或首先支持的)区域设置。
简而言之,您必须自己完成大量工作,或者使用framework/library,因为您不能依赖浏览器为您完成这项工作。
用于本地化的各种库和插件:
由open community(无订单)引人注目:
随意添加/编辑。
答案 1 :(得分:10)
Mozilla最近发布了令人敬畏的L20n或本地化2.0。用他们自己的话说L20n是
一种开源的,特定于本地化的脚本语言,用于处理性别,复数,变形以及大多数其他自然语言的古怪元素。
他们的js实现在github L20n repository.
答案 2 :(得分:0)
答案 3 :(得分:0)
您还可以尝试其他图书馆 - https://github.com/wikimedia/jquery.i18n。
除了参数替换和多个复数形式之外,它还支持性别,这是某些语言需要的自定义语法规则的一个相当独特的功能。