多元化支撑¶
多元化支持提供围绕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 -- 如果表达式格式不正确
转换功能¶
- 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 -- 如果表达式格式不正确