class _GettextCompiler(_Compiler):
"""Compile into a gettext plural expression."""
+ compile_i = _Compiler.compile_n
+ compile_v = compile_zero
+ compile_w = compile_zero
+ compile_f = compile_zero
+ compile_t = compile_zero
+
def compile_relation(self, method, expr, range_list):
rv = []
expr = self.compile(expr)
import unittest
import pytest
-from babel import plural
+from babel import plural, localedata
from babel._compat import Decimal
source = Decimal(source) if isinstance(source, str) else source
assert (plural.extract_operands(source) ==
Decimal(n), i, v, w, f, t)
+
+
+@pytest.mark.parametrize('locale', ('ru', 'pl'))
+def test_gettext_compilation(locale):
+ # Test that new plural form elements introduced in recent CLDR versions
+ # are compiled "down" to `n` when emitting Gettext rules.
+ ru_rules = localedata.load(locale)['plural_form'].rules
+ chars = 'ivwft'
+ # Test that these rules are valid for this test; i.e. that they contain at least one
+ # of the gettext-unsupported characters.
+ assert any((" " + ch + " ") in rule for ch in chars for rule in ru_rules.values())
+ # Then test that the generated value indeed does not contain these.
+ ru_rules_gettext = plural.to_gettext(ru_rules)
+ assert not any(ch in ru_rules_gettext for ch in chars)