跳到主要内容

5 篇博文 含有标签「Intl」

查看所有标签

`Intl.DisplayNames`

· 阅读需 4 分钟
Shu-yu Guo ([@_shu](https://twitter.com/_shu)) 和 Frank Yung-Fong Tang

面向全球用户的 Web 应用需要以许多不同语言显示语言、地区、书写系统和货币的名称。这些名称的翻译需要数据,该数据可在 Unicode CLDR 中找到。将数据打包为应用的一部分会耗费开发时间。用户往往更喜欢语言和地区名称的统一翻译,而随着全球地缘政治情况的变化保持数据更新需要持续维护。

`Intl.NumberFormat`

· 阅读需 4 分钟
Mathias Bynens ([@mathias](https://twitter.com/mathias)) 和 Shane F. Carr

你可能已经熟悉了 Intl.NumberFormat API,因为它已经在现代环境中被支持了一段时间。

在其最基本的形式中,Intl.NumberFormat 允许创建一个可重用的格式化实例,该实例支持基于区域的数字格式化。就像其他 Intl.*Format API 一样,格式化实例支持 formatformatToParts 方法:

`Intl.ListFormat`

· 阅读需 3 分钟
Mathias Bynens ([@mathias](https://twitter.com/mathias)) 和 Frank Yung-Fong Tang

现代的网页应用通常使用包含动态数据的列表。例如,一个照片查看器应用可能会显示如下内容:

此照片包含了 Ada、Edith 和 Grace

而一个基于文本的游戏可能需要展示不同形式的列表:

选择你的超级能力: 隐身、心灵致动 或 共情

由于每种语言具有不同的列表格式化惯例和用词,实现一个本地化列表格式化工具是极其复杂的。这不仅需要列出每种语言中所有的单词(如上述例子中的 “和” 或 “或”),还需要在编码时定义这些语言的具体格式化规则。Unicode CLDR 提供了这些数据,但在 JavaScript 中使用这些数据需要事先嵌入,并与其他库代码一起发送。这不幸会增加这些库的打包体积,从而对加载时间、解析/编译成本以及内存消耗产生负面影响。

`Intl.RelativeTimeFormat`

· 阅读需 5 分钟
Mathias Bynens ([@mathias](https://twitter.com/mathias))

现代 Web 应用程序通常使用诸如“昨天”、“42 秒前”或“3 个月后”的短语代替完整的日期和时间戳。这种 相对时间格式化值 已经变得如此普遍,以至于许多流行的库都实现了以本地化方式格式化它们的工具函数。(例如 Moment.jsGlobalize、和 date-fns。)

`Intl.PluralRules`

· 阅读需 4 分钟
Mathias Bynens([@mathias](https://twitter.com/mathias))

国际化是一件难事。处理复数是一个可能看起来很简单的问题,直到你发现每种语言都有自己的复数规则。

对于英语的复数化规则,只有两种可能的结果。让我们以“cat(猫)”这个词为例:

  • 1 cat,即 'one' 形式,在英语中称为单数。
  • 2 cats,但也包括 42 cats、0.5 cats 等,即 'other' 形式(唯一的其它形式),在英语中称为复数。

全新的 Intl.PluralRules API 可以告诉你,在给定语言中哪种形式适用于特定数字。

const pr = new Intl.PluralRules('en-US');
pr.select(0); // 'other' (例如 '0 cats')
pr.select(0.5); // 'other' (例如 '0.5 cats')
pr.select(1); // 'one' (例如 '1 cat')
pr.select(1.5); // 'other' (例如 '1.5 cats')
pr.select(2); // 'other' (例如 '2 cats')