diff options
| author | Claude Paroz <claude@2xlibre.net> | 2015-12-18 17:00:53 +0100 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2015-12-18 17:53:16 +0100 |
| commit | 67a62703cc8ade30df875ec272113cc157c067f0 (patch) | |
| tree | 07eb5fcaf4b7377221bfc693a797d112f1c4f670 /django | |
| parent | ad8cb985a9e54012c36c10095c6cb821283653fa (diff) | |
[1.8.x] Fixed #25915 -- Allowed language not in Django's default LANGUAGES
This fixes a regression introduced by a5f6cbce07.
Thanks Gavin Wahl for the report and Tim Graham for the review.
Backport of cd3c042b0 from master.
Diffstat (limited to 'django')
| -rw-r--r-- | django/utils/translation/trans_real.py | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 6e7ef9b742..aa50c02fb2 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -112,10 +112,14 @@ class DjangoTranslation(gettext_module.GNUTranslations): self.__language = language self.__to_language = to_language(language) self.__locale = to_locale(language) + self._catalog = None self._init_translation_catalog() self._add_installed_apps_translations() self._add_local_translations() + if self.__language == settings.LANGUAGE_CODE and self._catalog is None: + # 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() def __repr__(self): @@ -129,32 +133,19 @@ class DjangoTranslation(gettext_module.GNUTranslations): Using param `use_null_fallback` to avoid confusion with any other references to 'fallback'. """ - translation = gettext_module.translation( + return gettext_module.translation( domain='django', localedir=localedir, languages=[self.__locale], codeset='utf-8', fallback=use_null_fallback) - if not hasattr(translation, '_catalog'): - # provides merge support for NullTranslations() - translation._catalog = {} - translation._info = {} - translation.plural = lambda n: int(n != 1) - return translation def _init_translation_catalog(self): """Creates a base catalog using global django translations.""" settingsfile = upath(sys.modules[settings.__module__].__file__) localedir = os.path.join(os.path.dirname(settingsfile), 'locale') - use_null_fallback = True - if self.__language == settings.LANGUAGE_CODE: - # default lang should be present and parseable, if not - # 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() + translation = self._new_gnu_trans(localedir) + self.merge(translation) def _add_installed_apps_translations(self): """Merges translations from each installed app.""" @@ -187,7 +178,15 @@ class DjangoTranslation(gettext_module.GNUTranslations): def merge(self, other): """Merge another translation into this catalog.""" - self._catalog.update(other._catalog) + if not getattr(other, '_catalog', None): + return # NullTranslations() has no _catalog + if self._catalog is None: + # Take plural and _info from first catalog found (generally Django's). + self.plural = other.plural + self._info = other._info.copy() + self._catalog = other._catalog.copy() + else: + self._catalog.update(other._catalog) def language(self): """Returns the translation language.""" |
