Commit 8e4b0d60 authored by Claude Paroz's avatar Claude Paroz
Browse files

[1.8.x] Fixed #24515 -- Fixed DjangoTranslation plural handling

Backport of 9e83f30c from master.
parent 744d9a10
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -111,7 +111,6 @@ class DjangoTranslation(gettext_module.GNUTranslations):
        self.__language = language
        self.__to_language = to_language(language)
        self.__locale = to_locale(language)
        self.plural = lambda n: int(n != 1)

        self._init_translation_catalog()
        self._add_installed_apps_translations()
@@ -139,6 +138,7 @@ class DjangoTranslation(gettext_module.GNUTranslations):
            # provides merge support for NullTranslations()
            translation._catalog = {}
            translation._info = {}
            translation.plural = lambda n: int(n != 1)
        return translation

    def _init_translation_catalog(self):
@@ -151,6 +151,7 @@ class DjangoTranslation(gettext_module.GNUTranslations):
            # gettext will raise an IOError (refs #18192).
            use_null_fallback = False
        translation = self._new_gnu_trans(localedir, use_null_fallback)
        self.plural = translation.plural
        self._info = translation._info.copy()
        self._catalog = translation._catalog.copy()

+11 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ from django.utils.translation import (
    get_language, get_language_from_request, get_language_info, gettext,
    gettext_lazy, ngettext_lazy, npgettext, npgettext_lazy, pgettext,
    pgettext_lazy, string_concat, to_locale, trans_real, ugettext,
    ugettext_lazy, ungettext_lazy,
    ugettext_lazy, ungettext, ungettext_lazy,
)

from .forms import CompanyForm, I18nForm, SelectDateForm, SelectDateWidget
@@ -56,6 +56,16 @@ def patch_formats(lang, **settings):

class TranslationTests(TestCase):

    @translation.override('fr')
    def test_plural(self):
        """
        Test plurals with ungettext. French differs from English in that 0 is singular.
        """
        self.assertEqual(ungettext("%d year", "%d years", 0) % 0, "0 année")
        self.assertEqual(ungettext("%d year", "%d years", 2) % 2, "2 années")
        self.assertEqual(ungettext("%(size)d byte", "%(size)d bytes", 0) % {'size': 0}, "0 octet")
        self.assertEqual(ungettext("%(size)d byte", "%(size)d bytes", 2) % {'size': 2}, "2 octets")

    def test_override(self):
        activate('de')
        try: