Commit bd4f4b8a authored by Jannis Leidel's avatar Jannis Leidel
Browse files

[1.2.X] Fixed #13726 -- Further refine changes made in r12384 and r13069 for...

[1.2.X] Fixed #13726 -- Further refine changes made in r12384 and r13069 for using non-English source languages in JavaScript translation catalogues. Thanks, Ramiro.

Backport from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14911 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 2ab1e928
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -177,7 +177,8 @@ def javascript_catalog(request, domain='djangojs', packages=None):
    locale = to_locale(get_language())
    t = {}
    paths = []
    en_catalog_missing = False
    en_selected = locale.startswith('en')
    en_catalog_missing = True
    # first load all english languages files for defaults
    for package in packages:
        p = importlib.import_module(package)
@@ -187,13 +188,12 @@ def javascript_catalog(request, domain='djangojs', packages=None):
            catalog = gettext_module.translation(domain, path, ['en'])
            t.update(catalog._catalog)
        except IOError:
            # 'en' catalog was missing.
            if locale.startswith('en'):
                # If 'en' is the selected language this would cause issues
                # later on if default_locale is something other than 'en'.
                en_catalog_missing = True
            # Otherwise it is harmless.
            pass
        else:
            # 'en' is the selected language and at least one of the packages
            # listed in `packages` has an 'en' catalog
            if en_selected:
                en_catalog_missing = False
    # next load the settings.LANGUAGE_CODE translations if it isn't english
    if default_locale != 'en':
        for path in paths:
@@ -205,12 +205,11 @@ def javascript_catalog(request, domain='djangojs', packages=None):
                t.update(catalog._catalog)
    # last load the currently selected language, if it isn't identical to the default.
    if locale != default_locale:
        # If the flag en_catalog_missing has been set, the currently
        # selected language is English but it doesn't have a translation
        # catalog (presumably due to being the language translated from).
        # If that is the case, a wrong language catalog might have been
        # loaded in the previous step. It needs to be discarded.
        if en_catalog_missing:
        # If the currently selected language is English but it doesn't have a
        # translation catalog (presumably due to being the language translated
        # from) then a wrong language catalog might have been loaded in the
        # previous step. It needs to be discarded.
        if en_selected and en_catalog_missing:
            t = {}
        else:
            locale_t = {}
+1 −0
Original line number Diff line number Diff line
#
+482 B

File added.

No diff preview for this file type.

+20 −0
Original line number Diff line number Diff line
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-09-15 19:15+0200\n"
"PO-Revision-Date: 2010-05-12 12:41-0300\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "il faut traduire cette chaîne de caractères de app0"
msgstr "this app0 string is to be translated"
+18 −4
Original line number Diff line number Diff line
@@ -40,9 +40,12 @@ class JsI18NTests(TestCase):

    def setUp(self):
        self.old_language_code = settings.LANGUAGE_CODE
        self.old_installed_apps = settings.INSTALLED_APPS

    def tearDown(self):
        deactivate()
        settings.LANGUAGE_CODE = self.old_language_code
        settings.INSTALLED_APPS = self.old_installed_apps

    def test_jsi18n_with_missing_en_files(self):
        """
@@ -72,14 +75,26 @@ class JsI18NTests(TestCase):
    def testI18NLanguageNonEnglishDefault(self):
        """
        Check if the Javascript i18n view returns an empty language catalog
        if the default language is non-English but the selected language
        is English. See #13388 and #3594 for more details.
        if the default language is non-English, the selected language
        is English and there is not 'en' translation available. See #13388,
        #3594 and #13726 for more details.
        """
        settings.LANGUAGE_CODE = 'fr'
        activate('en-us')
        response = self.client.get('/views/jsi18n/')
        self.assertNotContains(response, 'Choisir une heure')
        deactivate()

    def test_nonenglish_default_english_userpref(self):
        """
        Same as above with the difference that there IS an 'en' translation
        available. The Javascript i18n view must return a NON empty language catalog
        with the proper English translations. See #13726 for more details.
        """
        settings.LANGUAGE_CODE = 'fr'
        settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + ['regressiontests.views.app0']
        activate('en-us')
        response = self.client.get('/views/jsi18n_english_translation/')
        self.assertContains(response, javascript_quote('this app0 string is to be translated'))

    def testI18NLanguageNonEnglishFallback(self):
        """
@@ -90,7 +105,6 @@ class JsI18NTests(TestCase):
        activate('none')
        response = self.client.get('/views/jsi18n/')
        self.assertContains(response, 'Choisir une heure')
        deactivate()


class JsI18NTestsMultiPackage(TestCase):
Loading