宣布 Globalize 1.0
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 Consortium 标准和规范 (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 (Wikipedia);Axel Hecht (Mozilla);Bruno Lewin 和 Daniel Goldschmidt (Microsoft);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 的一部分。举几个例子:运行时优化 和 非格里高利日历支持。因此,如果你对其中任何一个感兴趣,请务必参与进来。表达你的想法和需求(例如,你想支持哪些日历)。
我们一直在寻找贡献者加入我们的团队。如果你想参与进来,请阅读 贡献指南。你的帮助将受到热烈欢迎。
希伯来语支持?
我很高兴它支持阿拉伯语!
与 FormatJS 有什么区别?
好消息,看起来是一个非常酷的库,其他项目可能会从中受益!
PS:我认为这里有一个拼写错误
`.dateFormatter({ skeleton “GyMMMd” })( new Date() );`
你错过了“skeleton”后面的冒号
:)
非常激动地要使用它。非常感谢你们。
中国时间格式我们通常
zh-u-nu-native “????:???:??”
另请参阅:http://dev.w3.org/csswg/css-counter-styles/?c=M%3BO%3DD#limited-chinese
我喜欢它,它可以帮助我
非常激动地要使用它。非常感谢你们。
感谢帖子
非常好,感谢分享
哇!!!!!!
不错的帖子,感谢帖子
感谢帖子,我喜欢,感谢分享
太好了,我将在我的工作中使用它
这对我们来说非常有用,可能将会是,但为什么只有公元前和公元? 应该提供公元前和公元的替代方案。 公元纪年的名称对于一些非基督教读者来说是一个敏感点。
数字缩写呢? 1.000 => 1K。 对于大于 100 万的数字,我们不会缩写它,因为十亿/万亿不一致的问题。 谢谢!
喜欢帖子,我是 mercedeshn,感谢分享
它可以帮助我,我已经使用它了,太棒了。 而且我喜欢 jQuery,因为它的团队能非常快地修复 bug。