[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.
This commit is contained in:
Claude Paroz 2015-02-27 20:17:04 +01:00
parent 5a3b59370c
commit c0df8d1be9
2 changed files with 18 additions and 5 deletions

View File

@ -176,11 +176,9 @@ class DjangoTranslation(gettext_module.GNUTranslations):
def _add_fallback(self): def _add_fallback(self):
"""Sets the GNUTranslations() fallback with the default language.""" """Sets the GNUTranslations() fallback with the default language."""
# Don't set a fallback for the default language or for # Don't set a fallback for the default language or any English variant
# en-us (as it's empty, so it'll ALWAYS fall back to the default # (as it's empty, so it'll ALWAYS fall back to the default language)
# language; found this as part of #21498, as we set en-us for if self.__language == settings.LANGUAGE_CODE or self.__language.startswith('en'):
# management commands)
if self.__language == settings.LANGUAGE_CODE or self.__language == "en-us":
return return
default_translation = translation(settings.LANGUAGE_CODE) default_translation = translation(settings.LANGUAGE_CODE)
self.add_fallback(default_translation) self.add_fallback(default_translation)

View File

@ -901,6 +901,21 @@ class MiscTests(TestCase):
super(MiscTests, self).setUp() super(MiscTests, self).setUp()
self.rf = RequestFactory() 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): def test_parse_spec_http_header(self):
""" """
Testing HTTP header parsing. First, we test that we can parse the Testing HTTP header parsing. First, we test that we can parse the