summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2015-02-27 20:17:04 +0100
committerClaude Paroz <claude@2xlibre.net>2015-02-28 10:09:01 +0100
commitc0df8d1be9890a7914c7942defbce636573a434e (patch)
treef997847780353bcd9ee95daeda7e12950ea70e51
parent5a3b59370c9da4232206dd38f84de458ade7d062 (diff)
[1.8.x] Fixed #24413 -- Prevented translation fallback for English
Thanks Tomasz Kontusz for the report, Baptiste Mispelon for analysis and Tim Graham for the review. Backport of 3cf1c02695 from master.
-rw-r--r--django/utils/translation/trans_real.py8
-rw-r--r--tests/i18n/tests.py15
2 files changed, 18 insertions, 5 deletions
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index a8cc44e835..376723ebe8 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -176,11 +176,9 @@ class DjangoTranslation(gettext_module.GNUTranslations):
def _add_fallback(self):
"""Sets the GNUTranslations() fallback with the default language."""
- # Don't set a fallback for the default language or for
- # en-us (as it's empty, so it'll ALWAYS fall back to the default
- # language; found this as part of #21498, as we set en-us for
- # management commands)
- if self.__language == settings.LANGUAGE_CODE or self.__language == "en-us":
+ # Don't set a fallback for the default language or any English variant
+ # (as it's empty, so it'll ALWAYS fall back to the default language)
+ if self.__language == settings.LANGUAGE_CODE or self.__language.startswith('en'):
return
default_translation = translation(settings.LANGUAGE_CODE)
self.add_fallback(default_translation)
diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py
index 2c1adf0241..59ddd23556 100644
--- a/tests/i18n/tests.py
+++ b/tests/i18n/tests.py
@@ -901,6 +901,21 @@ class MiscTests(TestCase):
super(MiscTests, self).setUp()
self.rf = RequestFactory()
+ @override_settings(LANGUAGE_CODE='de')
+ def test_english_fallback(self):
+ """
+ With a non-English LANGUAGE_CODE and if the active language is English
+ or one of its variants, the untranslated string should be returned
+ (instead of falling back to LANGUAGE_CODE) (See #24413).
+ """
+ self.assertEqual(ugettext("Image"), "Bild")
+ with translation.override('en'):
+ self.assertEqual(ugettext("Image"), "Image")
+ with translation.override('en-us'):
+ self.assertEqual(ugettext("Image"), "Image")
+ with translation.override('en-ca'):
+ self.assertEqual(ugettext("Image"), "Image")
+
def test_parse_spec_http_header(self):
"""
Testing HTTP header parsing. First, we test that we can parse the