Intl.PluralRules
基线 广泛可用
此功能已非常成熟,并在许多设备和浏览器版本上都能正常运行。自 2019 年 9 月.
报告反馈
描述
Intl.PluralRules
对象支持对敏感于复数的格式和与复数相关的语言规则进行格式化。
不同的语言使用不同的模式来表达项目的复数(基数)和项目的顺序(序数)。英语有两种表达基数的形式:一种用于单数形式的“item”(1 小时、1 只狗、1 条鱼),另一种用于零或其他任何数量的“items”(0 小时、2 只旅鼠、100000.5 条鱼),而汉语只有一种形式,阿拉伯语则有六种!类似地,英语有四种表达序数的形式:“th”、“st”、“nd”、“rd”,形成以下序列:0th、1st、2nd、3rd、4th、5th、...、21st、22nd、23rd、24th、25th,依此类推,而汉语和阿拉伯语都只有一种序数形式。
给定一种特定的语言和格式选项集,方法 Intl.PluralRules.prototype.select()
和 Intl.PluralRules.prototype.selectRange()
将返回一个标签,该标签表示一个或多个数字(基数或序数)的复数形式。代码可以使用返回的标签来适当地表示给定语言的数字。
由于英语只有两种基数形式,因此select()
方法只返回两个标签:"one"
用于单数情况,"other"
用于所有其他基数。这允许构建对英语来说有意义的句子,例如:“1 只狗很高兴;你想和它一起玩吗?”以及“10 只狗很高兴;你想和它们一起玩吗?”。
- 为每种形式创建合适的句子取决于语言,即使在英语中也不像在名词后面添加“s”来构成复数形式那样简单。使用上面的示例,我们可以看到该形式可能影响
- 名词:1 只狗/2 只狗(但不包括“鱼”或“绵羊”,它们的单数和复数形式相同)。
- 动词:1 只狗很高兴,2 只狗很高兴
代词(和其他指代词):你想和它/它们一起玩吗?
其他语言有更多形式,选择合适的句子可能更加复杂。
select()
可以为英语的序数返回四个标签中的任何一个,表示每种允许的形式:one
用于“st”数字(1、21、31,...),two
用于“nd”数字(2、22、32,...),few
用于“rd”数字(3、33、43,...),other
用于“th”数字(0、4-20 等)。同样,返回的标签允许对描述序数的字符串进行适当的格式化。
构造函数
静态方法
Intl.PluralRules.supportedLocalesOf()
-
创建一个新的
Intl.PluralRules
对象。
实例属性
返回一个数组,其中包含无需回退到运行时默认区域设置即可支持的提供的区域设置。
这些属性在
Intl.PluralRules.prototype
上定义,并由所有Intl.PluralRules
实例共享。-
Intl.PluralRules.prototype.constructor
创建实例对象的构造函数。对于
Intl.PluralRules
实例,初始值为Intl.PluralRules
构造函数。-
Intl.PluralRules.prototype[Symbol.toStringTag]
实例方法
Intl.PluralRules.prototype.resolvedOptions()
-
属性
[Symbol.toStringTag]
的初始值为字符串"Intl.PluralRules"
。此属性在Object.prototype.toString()
中使用。 Intl.PluralRules.prototype.select()
-
返回一个新对象,其属性反映了在对象初始化期间计算出的区域设置和排序规则选项。
Intl.PluralRules.prototype.selectRange()
-
返回一个字符串,指示使用哪个复数规则进行符合区域设置的格式化。
示例
此方法接收两个值,并返回一个字符串,指示使用哪个复数规则进行符合区域设置的格式化。
使用区域设置
此示例显示了基数的本地化复数规则的一些变化。
locales
参数指定该语言(以及可能的一些备用语言)。// US English
const enCardinalRules = new Intl.PluralRules("en-US");
console.log(enCardinalRules.select(0)); // "other"
console.log(enCardinalRules.select(1)); // "one"
console.log(enCardinalRules.select(2)); // "other"
console.log(enCardinalRules.select(3)); // "other"
// Arabic
const arCardinalRules = new Intl.PluralRules("ar-EG");
console.log(arCardinalRules.select(0)); // "zero"
console.log(arCardinalRules.select(1)); // "one"
console.log(arCardinalRules.select(2)); // "two"
console.log(arCardinalRules.select(6)); // "few"
console.log(arCardinalRules.select(18)); // "many"
js
使用选项
指定数字的复数形式也可能取决于 构造函数options
,例如数字如何舍入以及它是基数还是序数。
locales
参数指定该语言(以及可能的一些备用语言)。// US English - ordinal
const enOrdinalRules = new Intl.PluralRules("en-US", { type: "ordinal" });
console.log(enOrdinalRules.select(0)); // "other" (0th)
console.log(enOrdinalRules.select(1)); // "one" (1st)
console.log(enOrdinalRules.select(2)); // "two" (2nd)
console.log(enOrdinalRules.select(3)); // "few" (3rd)
console.log(enOrdinalRules.select(4)); // "other" (4th)
console.log(enOrdinalRules.select(21)); // "one" (21st)
此示例显示了如何将规则类型设置为“ordinal”,以及这将如何影响美式英语中某些数字的形式。
使用返回的标签格式化文本
locales
参数指定该语言(以及可能的一些备用语言)。const enOrdinalRules = new Intl.PluralRules("en-US", { type: "ordinal" });
const suffixes = new Map([
["one", "st"],
["two", "nd"],
["few", "rd"],
["other", "th"],
]);
const formatOrdinals = (n) => {
const rule = enOrdinalRules.select(n);
const suffix = suffixes.get(rule);
return `${n}${suffix}`;
};
formatOrdinals(0); // '0th'
formatOrdinals(1); // '1st'
formatOrdinals(2); // '2nd'
formatOrdinals(3); // '3rd'
formatOrdinals(4); // '4th'
formatOrdinals(11); // '11th'
formatOrdinals(21); // '21st'
formatOrdinals(42); // '42nd'
formatOrdinals(103); // '103rd'
规范
下面的代码扩展了前面的示例,展示了如何使用返回的序数标签来格式化英语文本。 |
---|
规范 # ECMAScript 国际化 API 规范 |
浏览器兼容性
pluralrules-objects