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