国际化在JavaScript中是如何工作的?

国际化在JavaScript中是如何工作的?,javascript,internationalization,Javascript,Internationalization,我想知道如何用JavaScript处理国际化。我在谷歌上搜索过,但我没有得到令人信服的答案: JavaScript是否具有对国际化的本机支持 什么是JavaScript中的i18n 如何处理日历、货币、日期等 我已经读过了。其中一些是本地的,其余的可以通过图书馆获得 例如,它是一个很好的国际数据库 对于其他浏览器来说,这只是语言翻译,JavaScript本身与Unicode兼容(与所有主流浏览器一样)。传统浏览器中的本地化支持很差。最初,这是由于ECMAScript语言规范中的短语如下所示:

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

  • JavaScript是否具有对国际化的本机支持
  • 什么是JavaScript中的i18n
  • 如何处理日历、货币、日期等

我已经读过了。

其中一些是本地的,其余的可以通过图书馆获得

例如,它是一个很好的国际数据库


对于其他浏览器来说,这只是语言翻译,JavaScript本身与Unicode兼容(与所有主流浏览器一样)。

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

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

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

对于现代环境,是一个补充ECMAScript语言规范的新标准,它为字符串比较、数字格式以及日期和时间格式提供了更好的支持;它还修复了语言规范中相应的函数。可通过以下方式实现:

  • 铬24
  • 火狐29
  • Internet Explorer 11
  • 歌剧15
还有一个兼容性实现,它将在不存在API的环境中提供API

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

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
一个很好的解决方法是将Accept Language头从服务器转储到客户端。如果格式化为JavaScript,则可以将其传递给国际化API构造函数,后者将自动选择最佳(或首先支持的)语言环境

简而言之,您必须自己投入大量的工作,或者使用浏览器,因为您不能依靠浏览器来为您完成这项工作

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

  • 由一个(无订单)标记:
  • -AirBnb的国际化图书馆
  • -国际化API的兼容性实现
  • ()用于i18n(包括jquery插件、翻译ui等)
  • ()日期
  • ()(was())表示数字和货币
  • ()
  • ()用于i18n工作流和复杂字符串格式的工具
  • ()
  • 约会
  • 支持多元化
  • 灵感来源于Ruby著名的
  • jQuery自己的i18n库
  • -JS的MessageFormat实现(ES2016)和React
  • 其他:
  • 使用RequireJS定义一个I18N包

请随意添加/编辑。

您也可以尝试其他库-


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

Mozilla最近发布了awesome L20n或本地化2.0。用他们自己的话来说,L20n是

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


他们的js实现在

上,感谢所有的贡献者;我从来没有想过我可以通过阅读我的旧答案学到一些东西。我很高兴在那里看到国际化API规范的更新,这真是太棒了,我刚刚在Chrome中进行了测试。感谢您的出色编译。从积极的方面来看,Mozilla可能很快就会推出一款现代的toLocaleString()——可能是FF28:现在它的顶部内置了翻译管理功能——如果您需要解决完整的翻译过程,这可能是一个巨大的胜利——而不仅仅是为i18n插入代码。Plus有一个很好的Incontext编辑器功能…我已经开始了一个需要本地化的项目,我们也决定使用L20n;)。因此,我为RequireJS()编写了L20n插件的第一个版本,以防您使用RequireJS,我希望它对您也有用。任何建议都将受到欢迎。这是不推荐的,因为微软最近发布了一个jquery全球化插件。详情如下: