jQuery 基金会很高兴地宣布发布 Globalize 项目的 1.0 版本,这是我们的国际化 (i18n) 库。这个版本已经酝酿了很长时间,随着 Globalize 的发展壮大和每天越来越多的采用,我们很自豪地宣布该项目的第一个稳定版本终于发布了。我们本来可以继续介绍这个最新版本的特性和优势,但我们认为重要的是让你从源头听到它。以下是 Globalize 项目负责人 Rafael Xavier 的详细介绍,概述了 Globalize 1.0 版本的一切你需要知道的以及未来的计划。
一个始终保持最新,模块化且简单的 i18n 库
让我跳过细节,直接进入有趣的部分。以下是您今天使用 Globalize 可以获得的功能,它提供数字格式化和解析、日期和时间格式化和解析、货币格式化、消息格式化(ICU 消息格式模式,支持性别和复数)。
日期格式化和解析
日期模块提供方法,可以以语言无关的方式将日期和时间从它们的内部表示转换为文本形式(格式化)并反过来(解析)。您的代码可以方便地控制格式化日期、时间、日期时间的长度。
语言环境 | .dateFormatter({ datetime: "medium" })( new Date() ); |
---|---|
en | "Feb 20, 2015, 12:15:00 PM" |
zh | "2015年2月20日 下午12:15:00" |
zh-u-nu-native | "二〇一五年二月二〇日 下午一二:一五:〇〇" |
es | "20 de feb. de 2015 12:15:00" |
ar | "٢٠/٠٢/٢٠١٥ ١٢،١٥،٠٠ م" |
您的代码甚至可以单独选择字段,完全独立于语言环境约定。模式“GyMMMd”选择其缩写形式的纪元、年份、其缩写形式的月份和日期。
语言环境 | .dateFormatter({ skeleton "GyMMMd" })( new Date() ); |
---|---|
en | "Feb 20, 2015 AD" |
zh | "公元2015年2月20日" |
es | "20 feb. de 2015 d. C." |
ar | "٢٠ فبراير، ٢٠١٥ م" |
相对时间格式化
除了格式化日期和时间之外,相对时间模块还提供国际化的日期和时间字段消息,在可用时使用习惯用语或短语。
语言环境,值 | .relativeTimeFormatter( "day" )( value ); |
---|---|
en, -15 | "15 days ago" |
en, 0 | "today" |
en, 1 | "tomorrow" |
数字格式化和解析
数字模块提供方法来格式化和解析数字。您的代码可以完全独立于语言环境约定,例如小数点、千位分隔符,甚至使用的特定小数位,或者数字格式是否是十进制。不过,它仍然可以方便地控制格式化数字的各个方面,例如最小和最大小数位、整数填充、舍入方法、显示为百分比等。
语言环境 | .numberFormatter()( Math.PI ); |
---|---|
en(英语) | "3.142" |
es(西班牙语) | "3,142" |
ar(阿拉伯语) | "٣٫١٤٢" |
格式化千位分隔符
语言环境 | .numberFormatter()( 1000000 ); |
---|---|
en-US(美式英语) | "1,000,000" |
en-IN(印度英语) | "10,00,000" |
格式化百分比
语言环境 | .numberFormatter({ style: "percent" })( 0.15 ); |
---|---|
en(英语) | "15%" |
es(西班牙语) | "15 %" |
ar(阿拉伯语) | "١٥٪" |
货币格式化
货币模块提供方法,允许格式化货币。您的代码可以完全独立于语言环境约定,例如使用哪个货币符号、货币符号和值之间是否有空格、货币符号必须放置在哪一侧,甚至特定货币使用的小数位。货币可以使用符号(默认值)、会计格式、3 个字母的代码或复数消息来显示。
使用符号格式化货币
3 个字母的货币代码 | en(英语) | de(德语) | zh(中文) | ar(阿拉伯语) |
---|---|---|---|---|
.currencyFormatter( "USD" )( 1 ); |
"$1.00" |
"1,00 $" |
"US$ 1.00" |
"US$ ١٫٠٠" |
.currencyFormatter( "EUR" )( 1 ); |
"€1.00" |
"1,00 €" |
"€ 1.00" |
"€ ١٫٠٠" |
.currencyFormatter( "CNY" )( 1 ); |
"CN¥1.00" |
"1,00 CN¥" |
"¥ 1.00" |
"ي.ص ١٫٠٠" |
.currencyFormatter( "JPY" )( 1 ); |
"¥1" |
"1 ¥" |
"JP¥ 1" |
"JP¥ ١" |
.currencyFormatter( "GBP" )( 1 ); |
"£1.00" |
"1,00 £" |
"£ 1.00" |
"£ ١٫٠٠" |
.currencyFormatter( "BRL" )( 1 ); |
"R$1.00" |
"1,00 R$" |
"R$ 1.00" |
"R$ ١٫٠٠" |
以完整名称格式化货币
语言环境 | .currencyFormatter( "USD", { style: "name" })( 1 ); |
---|---|
en(英语) | "1.00 US dollar" |
de(德语) | "1,00 US-Dollar" |
zh(中文) | "1.00美元" |
ar(阿拉伯语) | "١٫٠٠ دولار أمريكي" |
以会计格式格式化货币,例如,在英语语言环境中,使用括号而不是减号表示负数
语言环境 | .currencyFormatter( "USD", { style: "accounting" })( -1 ); |
---|---|
en(英语) | "($1.00)" |
ICU 消息格式支持(支持性别和复数)
消息模块提供方法,允许创建国际化消息,并带有可选参数(变量/占位符),这些参数允许进行简单的替换、性别和复数变格。参数可以以任何顺序出现,这对于翻译成语法不同的语言是必要的。
Globalize.loadMessages({
en: {
likeIncludingMe: [
"{count, plural,",
" one {You have one task remaining}",
" other {You have {count} tasks remaining}",
"}"
]
}
});
语言环境,计数 | .messageFormatter( "likeIncludingMe" )({ count: count }); |
---|---|
en, 1 | "You have one task remaining" |
en, 99 | "You have 99 tasks remaining" |
基于标准
Globalize 基于 Unicode 联盟的标准和规范(UTS#35),它使用其通用语言环境数据存储库 (CLDR),这是可用的最大和最广泛的语言环境数据标准存储库。CLDR 不断更新,并被许多大型应用程序和操作系统使用,因此您始终可以使用最准确和最新的语言环境数据。
CLDR 内容
Globalize 需要 CLDR 内容才能正常运行,尽管它没有嵌入或托管此类内容。相反,Globalize 使开发人员能够以他们想要的方式加载 CLDR 数据。官方 JSON 格式的原生 CLDR(无预处理)将被提供。因此,(a) Globalize 避免了由过时的 i18n 内容引起的错误。开发人员可以从 Unicode 直接使用最新的 CLDR 数据,一旦发布,无需等待我们这边的任何管道。 (b) 开发人员可以完全控制他们在应用程序中希望提供的语言环境覆盖率。 (c) 开发人员能够在 Globalize 和利用 CLDR 的其他库之间共享相同的 i18n 数据集。无需复制数据。有关更多信息,请阅读我们有关CLDR 使用的文档。
浏览器和 Node.js 支持
Globalize 系统地针对桌面和移动浏览器以及 Node.js 进行测试。因此,使用它您将在各种浏览器以及客户端和服务器之间获得一致的结果。有关更多详细信息,请阅读我们的浏览器支持部分。
入门
安装它 并在今天使用它。在我们的使用部分查看 AMD + bower、Node.js + npm 或纯 JavaScript 的示例。
如果您是从 Globalize 0.x 迁移过来的,请不要惊慌。我们已经为您创建了迁移指南 。
团队和社区
我们感谢我们收到的所有支持,特别是感谢 Jörn Zaefferer 和 Scott González 在最初的重写概念方面提供的帮助以及他们一直以来的建议;感谢 John Emmons、Steven R. Loomis 和 Mark Davis(Unicode)在 CLDR 和 UTS#35 规范方面提供的帮助;感谢 Alex Sexton 和 Eemeli Aro 为我们提供 messageformat.js 和 make-plural.js 库,分别为我们的 MessageFormat 和 Plural 模块提供支持;感谢 jQuery 基金会为社区建设、协作努力以及对 Globalize 和网络国际化的持续支持。
我们还要感谢 Nebojša Ćirić、Mihai Niță 和 Shanjian Li(谷歌);Steven Loomis、Steven Atkin 和 John Emmons(IBM);Rick Waldron(ECMA-402 第二版编辑);Caridy Patiño 和 Eric Ferraiuolo(雅虎);Christophe Jolif 和 Clement Mathieu(Dojo);Cameron Dutro 和 Kirill Lashuk(推特);Craig Cummings 和 Tex Texin(jsi18n.com);Santhosh Thottingal 和 Kartik Mistry(维基百科);Axel Hecht(Mozilla);Bruno Lewin 和 Daniel Goldschmidt(微软);Lily Wen(Adobe);Edwin Hoogerbeets(LG);Eirik Rude(Oracle);Xiang Xu(贝宝);Iskren Chernev(moment.js);以及 Tingan Ho(l10ns.org),他们加入了我们,共同努力更好地协调 JavaScript 社区的全球化(国际化和本地化)活动。如果您想参与其中或了解更多信息,请访问javascript-globalization@googlegroups.com 邮件列表或查看我们的 JavaScript 全球化概述页面。
即将推出
我们正在开发更多令人兴奋的功能,这些功能将很快成为 Globalize 的一部分。举几个例子:运行时优化 和非公历支持。因此,如果您对这些功能感兴趣,请务必参与进来。表达您的想法和需求(例如,您希望支持哪些日历)。
我们一直在寻找贡献者加入我们的团队。如果您想参与进来,请阅读贡献指南。您的帮助将受到热烈欢迎。