jQuery 基金会很高兴地宣布 Globalize 项目的 1.0 版本发布,这是我们的国际化 (i18n) 库。这个版本已经期待了很长时间,随着 Globalize 越来越受欢迎,并且每天都在获得越来越多的采用,我们很自豪地终于宣布这个项目的第一个稳定版本。我们可以继续谈论这个最新版本的特性和优点,但我们认为听取来自源头的消息很重要。以下是 Globalize 项目负责人 Rafael Xavier 详细介绍了你需要了解的关于 Globalize 1.0 版本以及未来即将发生的事情的所有信息。
一个始终是最新的、模块化和简单的 i18n 库
让我跳过细节,直接进入有趣的部分。以下是今天 Globalize 提供的功能,包括数字格式化和解析、日期和时间格式化和解析、货币格式化、消息格式化(ICU 消息格式模式,支持性别和复数形式)。
日期格式化和解析
日期模块提供将日期和时间从其内部表示形式转换为文本形式(格式化)以及反之(解析)的方法,且不依赖于语言。你的代码可以方便地控制格式化日期的长度、时间、日期时间。
| locale |
.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”选择以缩写形式表示的纪元、年、月份的缩写形式和日。
| locale |
.dateFormatter({ skeleton "GyMMMd" })( new Date() ); |
| en |
"Feb 20, 2015 AD" |
| zh |
"公元2015年2月20日" |
| es |
"20 feb. de 2015 d. C." |
| ar |
"٢٠ فبراير، ٢٠١٥ م" |
相对时间格式化
除了格式化日期和时间外,相对时间模块还提供日期和时间字段的国际化消息,使用习惯用词或短语(如果可用)。
| locale, value |
.relativeTimeFormatter( "day" )( value ); |
| en, -15 |
"15 days ago" |
| en, 0 |
"today" |
| en, 1 |
"tomorrow" |
数字格式化和解析
数字模块提供格式化和解析数字的方法。你的代码可以完全独立于区域设置约定,例如小数点、千位分隔符,甚至使用的十进制数字,或者数字格式是否为十进制。但是,它仍然可以方便地控制格式化数字的各个方面,例如最小和最大小数位数、整数填充、舍入方法、显示为百分比等。
| locale |
.numberFormatter()( Math.PI ); |
| en (英语) |
"3.142" |
| es (西班牙语) |
"3,142" |
| ar (阿拉伯语) |
"٣٫١٤٢" |
格式化千位分隔符
| locale |
.numberFormatter()( 1000000 ); |
| en-US (美国英语) |
"1,000,000" |
| en-IN (印度英语) |
"10,00,000" |
格式化百分比
| locale |
.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$ ١٫٠٠" |
以完整名称格式化货币
| locale |
.currencyFormatter( "USD", { style: "name" })( 1 ); |
| en (英语) |
"1.00 US dollar" |
| de (德语) |
"1,00 US-Dollar" |
| zh (中文) |
"1.00美元" |
| ar (阿拉伯语) |
"١٫٠٠ دولار أمريكي" |
以会计形式格式化货币,例如,在英语区域设置中使用括号代替负数的减号
| locale |
.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}",
"}"
]
}
});
| locale, count |
.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 格式的 Vanilla CLDR(无需预处理)。因此,(a) Globalize 避免了由过时的 i18n 内容引起的错误。开发人员可以直接从 Unicode 获取最新的 CLDR 数据,而无需等待我们这边进行任何管道处理。(b) 开发人员可以完全控制他们希望在其应用程序上提供的区域设置覆盖范围。(c) 开发人员能够在其应用程序之间共享相同的 i18n 数据集。无需复制数据。有关更多信息,请阅读我们的文档 CLDR Usage。
浏览器和 Node.js 支持
Globalize 会系统地针对桌面和移动浏览器以及 Node.js 进行测试。因此,使用它你将在各种浏览器和客户端与服务器之间获得一致的结果。有关更多详细信息,请阅读我们的 Browser Support 部分。
开始使用
安装它并立即使用它。在我们的 Usage 部分中查看 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 和 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 的一部分。例如:运行时优化和 非格里高利历日历支持。因此,如果这些内容对您有兴趣,请务必发表您的意见。表达您的想法和需求(例如,您希望支持哪些日历)。
我们一直在寻找贡献者加入我们的团队。如果您想参与,请阅读 贡献指南。您的帮助将不胜感激。