Fixed #24413 -- Prevented translation fallback for English

Thanks Tomasz Kontusz for the report, Baptiste Mispelon for
analysis and Tim Graham for the review.
This commit is contained in:
Claude Paroz 2015-02-27 20:17:04 +01:00
parent dcdef1fe2e
commit 3cf1c02695
2 changed files with 18 additions and 5 deletions

View File

@ -169,11 +169,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)

View File

@ -902,6 +902,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