国际化在 JavaScript 中是如何工作的? [英] How does internationalization work in JavaScript?

查看:18
本文介绍了国际化在 JavaScript 中是如何工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm wondering how to deal internationalization in JavaScript. I googled but I'm not getting convincing answers for:

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

我已经阅读了JavaScript 中的国际化.

推荐答案

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

Localization support in legacy browsers is poor. Originally, this was due to phrases in the ECMAScript language spec that look like this:

Number.prototype.toLocaleString()
生成一个字符串值,该值表示根据格式化的 Number 的值宿主环境当前语言环境的约定.这个函数是依赖于实现的,并且允许但不鼓励它返回与 toString 相同的内容.

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

Every localization method defined in the spec is defined as "implementation-dependent", which results in a lot of inconsistencies. In this instance, Chrome Opera and Safari would return the same thing as .toString(). Firefox and IE will return locale formatted strings, and IE even includes a thousand separator (perfect for currency strings). Chrome was recently updated to return a thousands-separated string, though with no fixed decimal.

对于现代环境ECMAScript Internationalization API 规范,一个补充 ECMAScript 语言规范的新标准,为字符串比较、数字格式以及日期和时间格式提供了更好的支持;它还修复了语言规范中的相应功能.可以在这里找到介绍.实现可用于:

For modern environments, the ECMAScript Internationalization API spec, a new standard that complements the ECMAScript Language spec, provides much better support for string comparison, number formatting, and the date and time formatting; it also fixes the corresponding functions in the Language Spec. An introduction can be found here. Implementations are available in:

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

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

There is also a compatibility implementation, Intl.js, which will provide the API in environments where it doesn't already exist.

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

Determining the user's preferred language remains a problem since there's no specification for obtaining the current language. Each browser implements a method to obtain a language string, but this could be based on the user's operating system language or just the language of the browser:

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

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

A good workaround for this is to dump the Accept-Language header from the server to the client. If formatted as a JavaScript, it can be passed to the Internationalization API constructors, which will automatically pick the best (or first-supported) locale.

简而言之,您必须自己投入大量工作,或者使用 framework/library,因为你不能依赖浏览器为你做这件事.

In short, you have to put in a lot of the work yourself, or use a framework/library, because you cannot rely on the browser to do it for you.

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

Various libraries and plugins for localization:

  • Mantained by an open community (no order):
  • Polyglot.js - AirBnb's internationalization library
  • Intl.js - a compatibility implementation of the Internationalisation API
  • i18next (home) for i18n (incl. jquery plugin, translation ui,...)
  • moment.js (home) for dates
  • numbro.js (home) (was numeral.js (home)) for numbers and currency
  • l10n.js (home)
  • L10ns (home) tool for i18n workflow and complex string formatting
  • jQuery Localisation (plugin) (home)
  • YUI Internationalization support
  • jquery.i18Now for dates
  • browser-i18n with support to pluralization
  • counterpart is inspired by Ruby's famous I18n gem
  • jQuery Globalize jQuery's own i18n library
  • js-lingui - MessageFormat implementation for JS (ES2016) and React
  • 其他:
  • jQuery Globalization (plugin)
  • requirejs-i18n Define an I18N Bundle with RequireJS.

随意添加/编辑.

这篇关于国际化在 JavaScript 中是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆