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

How does internationalization work in JavaScript?(国际化在 JavaScript 中是如何工作的?)
本文介绍了国际化在 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 的国际化库
  • Intl.js - 国际化 API 的兼容性实现
  • i18next (home) 用于 i18n(包括 jquery 插件、翻译 ui、...)
  • moment.js (home) 日期
  • numbro.js (home) (原为 numeral.js (home)) 用于数字和货币
  • l10n.js (主页)
  • L10ns (home) 用于 i18n 工作流程和复杂字符串格式化的工具
  • jQuery 本地化(插件) (主页)
  • YUI 国际化支持
  • jquery.i18Now 日期
  • browser-i18n 支持复数形式
  • counterpart 的灵感来自于 Ruby 著名的 I18n gem
  • jQuery Globalize jQuery 自己的 i18n 库
  • js-lingui - JS (ES2016) 和 React 的 MessageFormat 实现
  • 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 全球化 (插件)
  • requirejs-i18n 使用 RequireJS 定义 I18N 包.
  • jQuery Globalization (plugin)
  • requirejs-i18n Define an I18N Bundle with RequireJS.

随意添加/编辑.

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

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)