国际化如何在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之外,它还支持性别,这是一些语言所需的自定义语法规则的一个相当独特的特征。