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

我想知道如何在 JavaScript 中处理国际化问题。我谷歌了一下,但没有得到令人信服的答案:

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

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

114539 次浏览

其中一些是原生的,其余的可以通过库获得。

例如,约会是一个很好的国际数据库。

对于其他浏览器来说,它只是语言转换,而 JavaScript 本身是 Unicode 兼容的(以及所有主流浏览器)。

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

ToLocaleString ()
生成一个字符串值,该值表示根据 这个函数依赖于实现,并且 允许返回与 ToString相同的内容,但不鼓励返回。

规范中定义的每个定位方法都被定义为“依赖于实现”,这导致了很多不一致性。在这个例子中,ChromeOpera 和 Safari 将返回与 .toString()相同的内容。Firefox 和 IE 将返回区域设置格式的字符串,IE 甚至包括一个千分隔符(对于货币字符串来说是完美的)。Chrome 最近进行了更新,返回了一个数千分隔的字符串,但没有固定的小数。

对于现代环境 ,作为对 ECMAScript Language Spec 的补充的新标准 国际化 API 规范为字符串比较、数字格式化、日期和时间格式化提供了更好的支持; 它还修复了 Language Spec 中的相应函数。介绍可以找到 给你。实施方法包括:

  • Chrome 24
  • 火狐29
  • Internet Explorer 11
  • 歌剧15

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

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

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

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

简而言之,您必须自己投入大量的工作,或者使用 框架/库,因为您不能依赖浏览器来完成这些工作。

本地化的各种库和插件:

  • 其他:

请随意添加/编辑。

您还可以尝试另一个库 -https://github.com/wikimedia/jquery.i18n

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

Mozilla 最近发布了令人敬畏的 L20n 或本地化2.0

一个开源的、本地化的脚本语言,用于处理性别、复数、变形和大多数自然语言的古怪元素。

他们的 js 实现在 Github L20n 存储库。