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(Google);Steven Loomis、Steven Atkin 和 John Emmons(IBM);Rick Waldron(Ecma-402 第 2 版编辑);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 的一部分。举几个例子:运行时优化 和 非公历支持。因此,如果您对这些功能感兴趣,请务必参与进来。表达您的想法和需求(例如,您希望支持哪些日历)。
我们一直在寻找加入我们团队的贡献者。如果您想参与进来,请阅读 贡献指南。您的帮助将不胜感激。