各语言的复数形式数量不同
别名: 复数类别 · CLDR plural rules · grammatical number
概念解释
地区特定复数类别(locale-specific plural categories)指数量变化会在不同语言中触发不同组的语法表达。Unicode CLDR 用 zero、one、two、few、many、other 作为跨语言选择键;这些键不是英语字面上的“零、单数、双数、少数、许多”,而是由数字变化引起的语法必需变化通过最小对证明的类别。某语言只使用其中一部分,other 始终作为兜底。
机制
语法数可能通过名词、动词、代词、形容词或格变化表现。CLDR 从源数值及其表示形式计算操作数:v 是包含尾随零的可见小数位数,w 去掉尾随零;f 是包含尾随零的小数数字整数,t 去掉尾随零。因此 1、1.0、1.00,以及 1.3 与 1.30,可在采用这些操作数的地区规则中产生不同结果。规则还可使用整数部分和模运算;cardinal 与 ordinal 使用不同规则与模板。若 API 先把输入转成丢失可见精度的普通数值,后续格式器便无法恢复这些操作数。
怎么研究
验证分三层。第一层把运行时对官方代表值、整数/小数边界值的类别输出与当前 CLDR 规则比对,测规则引擎一致性,并确保输入经过产品真实 formatter 而未丢尾随零。第二层建立一组最小对(minimal pairs):只改变数字,除语法所迫的名词、动词、代词等变化外,不允许换成语义不同的措辞;一个模板无法显露全部类别时,应使用多个名词或结构。母语专家判断一致关系与可接受性。只有关键界面确有理解风险时,第三层才设置真实任务,测选择错误与理解,而不把“任务理解”当作默认指标。cardinal 与 ordinal 分别使用各自模板。
边界
CLDR 类别是消息选择接口,不是对语言全部语法数的完整语言学分类;一个类别内部仍可能因格、性或词项发生变化。规则会随语言资料修订,应用应使用所依赖运行时版本的数据。显式 =0 只匹配数值零,而某地区可能没有 zero 类别,零也可能落入 one 或 other;同样,one 不保证只包含整数一。产品特例和语言类别必须分开表达。
怎么落地
- 用成熟的地区化消息格式和 CLDR 数据选择复数分支,不在业务代码里写
count == 1。 - 分开配置 cardinal 与 ordinal,提供该地区可产生的类别并保留
other;产品特例另用消息格式明确支持的 exact-value selector,不伪装成zero或one。 - 把完整句子交给译者,让每个分支可调整名词、动词、代词和语序,不只替换词尾。
- 为每个支持地区从当前规则生成代表值与小数边界测试,逐分支渲染并由母语审校确认语法和含义。