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 和 Plural 模块提供的 messageformat.js 和 make-plural.js 库;感谢 jQuery 基金会对社区建设、协作工作和对 Globalize 以及 Web 国际化的持续支持。
我们还要感谢 Nebojša Ćirić、Mihai Niță 和 Shanjian Li(Google);Steven Loomis、Steven Atkin 和 John Emmons(IBM);Rick Waldron(Ecma-402 第二版编辑);Caridy Patiño 和 Eric Ferraiuolo(Yahoo);Christophe Jolif 和 Clement Mathieu(Dojo);Cameron Dutro 和 Kirill Lashuk(Twitter);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(Paypal);Iskren Chernev(moment.js);以及 Tingan Ho(l10ns.org)加入我们,共同努力更好地协调 JavaScript 社区的全球化(国际化和本地化)活动。如果您想参与其中或了解更多信息,请访问 javascript-globalization@googlegroups.com 邮件列表或查看我们的 JavaScript 全球化 概述页面。
即将推出
我们正在努力开发更多激动人心的功能,这些功能将很快成为 Globalize 的一部分。举几个例子:运行时优化 和 非格里高利历支持。因此,如果您对其中任何一个感兴趣,请务必参与进来。表达您的想法和需求(例如,您希望支持哪些日历)。
我们一直在寻找加入我们团队的贡献者。如果您想参与其中,请阅读 贡献指南。您的帮助将受到热烈欢迎。