多元化支撑

多元化支持提供围绕CLDR多元化规则的功能。它可以解析和评估多元化规则,并将其转换为其他格式,如gettext。

基本界面

class babel.plural.PluralRule(rules: Mapping[str, str] | Iterable[tuple[str, str]])

表示一组语言多元化规则。构造函数接受(标记,表达式)元组列表或 CLDR rules 。生成的对象是可调用的,它接受一个带有正数或负数(整数和浮点数)的参数来表示字符串的复数形式,并返回格式的标记:

>>> rule = PluralRule({'one': 'n is 1'})
>>> rule(1)
'one'
>>> rule(2)
'other'

目前,CLDR定义了这些标记:零、一、二、少、多和OTHER,其中OTHER是隐式缺省值。规则应该是互斥的;对于给定的数值,只应该应用一个规则(即,条件应该只对多个规则元素中的一个为真。

classmethod parse(rules: Mapping[str, str] | Iterable[tuple[str, str]] | PluralRule) PluralRule

创建一个 PluralRule 实例。如果规则是 PluralRule 对象,则返回该对象。

参数:

rules -- 列表或字典形式的规则,或 PluralRule 对象

抛出:

RuleError -- 如果表达式格式不正确

property rules: Mapping[str, str]

这个 PluralRule 作为Unicode复数规则的字典。

>>> rule = PluralRule({'one': 'n is 1'})
>>> rule.rules
{'one': 'n is 1'}
property tags: frozenset[str]

此规则中明确定义的一组标记。隐式缺省 'other' 除非有明确的规则,否则规则不是此集合的一部分。

转换功能

babel.plural.to_javascript(rule: Mapping[str, str] | Iterable[tuple[str, str]] | PluralRule) str

转换规则列表/字典或 PluralRule 对象转换为JavaScript函数。此函数不依赖于外部库:

>>> to_javascript({'one': 'n is 1'})
"(function(n) { return (n == 1) ? 'one' : 'other'; })"

实现细节:生成的函数可能会多次对涉及范围操作的表达式求值。这样做的优点是不需要外部辅助函数,并且对于这些简单的计算来说不会对性能造成太大影响。

参数:

rule -- 列表或字典形式的规则,或 PluralRule 对象

抛出:

RuleError -- 如果表达式格式不正确

babel.plural.to_python(rule: Mapping[str, str] | Iterable[tuple[str, str]] | PluralRule) Callable[[float | Decimal], str]

转换规则列表/字典或 PluralRule 对象转换为常规Python函数。这在需要实函数而与实际规则对象无关的情况下非常有用:

>>> func = to_python({'one': 'n is 1', 'few': 'n in 2..4'})
>>> func(1)
'one'
>>> func(3)
'few'
>>> func = to_python({'one': 'n in 1,11', 'few': 'n in 3..10,13..19'})
>>> func(11)
'one'
>>> func(15)
'few'
参数:

rule -- 列表或字典形式的规则,或 PluralRule 对象

抛出:

RuleError -- 如果表达式格式不正确

babel.plural.to_gettext(rule: Mapping[str, str] | Iterable[tuple[str, str]] | PluralRule) str

作为gettext表达式的复数规则。从技术上讲,gettext表达式仅限于整数,并返回索引而不是标记。

>>> to_gettext({'one': 'n is 1', 'two': 'n is 2'})
'nplurals=3; plural=((n == 1) ? 0 : (n == 2) ? 1 : 2);'
参数:

rule -- 列表或字典形式的规则,或 PluralRule 对象

抛出:

RuleError -- 如果表达式格式不正确