diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 7a2a1c63a2..d7e97e7ed2 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -113,6 +113,9 @@ class DjangoTranslation(gettext_module.GNUTranslations): self.__to_language = to_language(language) self.__locale = to_locale(language) self._catalog = None + # If a language doesn't have a catalog, use the Germanic default for + # pluralization: anything except one is pluralized. + self.plural = lambda n: int(n != 1) if self.domain == 'django': if localedirs is not None: diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 5084f2dc1d..7292bd5a0a 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -1925,3 +1925,16 @@ class NonDjangoLanguageTests(SimpleTestCase): def test_non_django_language(self): self.assertEqual(get_language(), 'xxx') self.assertEqual(ugettext("year"), "reay") + + @override_settings( + USE_I18N=True, + LANGUAGES=[ + ('en-us', 'English'), + # xyz language has no locale files + ('xyz', 'XYZ'), + ], + ) + @translation.override('xyz') + def test_plural_non_django_language(self): + self.assertEqual(get_language(), 'xyz') + self.assertEqual(ungettext('year', 'years', 2), 'years')