国际化如何在JavaScript中工作?

我想知道如何处理JavaScript的国际化。 我GOOGLE了,但我没有得到令人信服的答案:

  • JavaScript是否具有本地化的国际化支持?
  • 什么是国际化的JavaScript在JavaScript中?
  • 如何处理日历,货币,date等?

我已经阅读过JavaScript中的国际化 。

传统浏览器中的本地化支持很差。 最初,这是由于ECMAScript语言规范中的短语如下所示:

Number.prototype.toLocaleString()
生成一个string值,该值表示根据主机环境当前语言环境约定格式化的数字的值。 这个函数是依赖于实现的,它可以返回与toString相同的东西,但是并不鼓励。

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

对于现代环境 , ECMAScript国际化API规范 (补充ECMAScript语言规范的新标准)为string比较,数字格式设置和date和时间格式提供了更好的支持; 它还修复了语言规范中的相应function。 介绍可以在这里find。 实现可在以下位置获得:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • 歌剧15

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

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

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

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

总之,你必须自己做很多工作,或者使用框架/库 ,因为你不能依靠浏览器来为你做。

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

  • 由一个开放的社区 (无订单)遏制:

    • Intl.js – 国际化API的兼容性实现
    • i18next ( home )for i18n(包括jquery插件,翻译ui,…)
    • moment.js ( 家 )date
    • 数字和货币的numbro.js ( 家庭 )(数字.js ( 家庭 ))
    • l10n.js ( 家 )
    • 用于i18n工作stream程和复杂string格式的L10ns ( 家庭 )工具
    • jQuery本地化(插件) ( 家 )
    • YUI国际化支持
    • jquery.i18现在date
    • browser-i18n支持复数
    • 同行的灵感来自Ruby的着名I18ngem
    • jQuery全球化 jQuery自己的i18n库
    • js-lingui – JS(ES2016)和React的MessageFormat实现
  • 其他:
    • jQuery全球化(插件)
    • requirejs-i18n用RequireJS定义一个I18N Bundle。

随意添加/编辑。

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

一个开源的,本地化特定的脚本语言,用于处理性别,复数,共轭和大部分其他古怪的自然语言元素。

他们的js实现在github L20n仓库中。

其中一些是本地的,其余的是通过图书馆。

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

剩下的就是关于语言翻译,而JavaScript本身就是Unicode兼容的(以及所有主stream浏览器)。

你也可以尝试另一个库 – https://github.com/wikimedia/jquery.i18n

除了参数replace和多个复数forms之外,它还支持性别,这是一些语言所需的自定义语法规则的一个相当独特的特征。