diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index b73f2b48698..5208e7a96fd 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -117,6 +117,9 @@ class DjangoTranslation(gettext_module.GNUTranslations): # default lang should have at least one translation file available. raise IOError("No translation files found for default language %s." % settings.LANGUAGE_CODE) self._add_fallback() + if self._catalog is None: + # No catalogs found for this language, set an empty catalog. + self._catalog = {} def __repr__(self): return "" % self.__language diff --git a/docs/releases/1.8.9.txt b/docs/releases/1.8.9.txt index be3b719b1e1..823bd9b3eb8 100644 --- a/docs/releases/1.8.9.txt +++ b/docs/releases/1.8.9.txt @@ -11,3 +11,6 @@ Bugfixes * Fixed a regression that caused the "user-tools" items to display on the admin's logout page (:ticket:`26035`). + +* Fixed a crash in the translations system when the current language has no + translations (:ticket:`26046`). diff --git a/docs/releases/1.9.2.txt b/docs/releases/1.9.2.txt index 4cddae39380..f486d00311f 100644 --- a/docs/releases/1.9.2.txt +++ b/docs/releases/1.9.2.txt @@ -9,8 +9,11 @@ Django 1.9.2 fixes several bugs in 1.9.1. Bugfixes ======== -* Fixed a regression in ``ConditionalGetMiddleware`` causing ``If-None-Match`` checks - to always return HTTP 200 (:ticket:`26024`). +* Fixed a regression in ``ConditionalGetMiddleware`` causing ``If-None-Match`` + checks to always return HTTP 200 (:ticket:`26024`). * Fixed a regression that caused the "user-tools" items to display on the admin's logout page (:ticket:`26035`). + +* Fixed a crash in the translations system when the current language has no + translations (:ticket:`26046`). diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 6456a08e241..02eff1c7f2a 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -1581,6 +1581,10 @@ class TestLanguageInfo(SimpleTestCase): def test_unknown_language_code(self): six.assertRaisesRegex(self, KeyError, r"Unknown language code xx\.", get_language_info, 'xx') + with translation.override('xx'): + # A language with no translation catalogs should fallback to the + # untranslated string. + self.assertEqual(ugettext("Title"), "Title") def test_unknown_only_country_code(self): li = get_language_info('de-xx')