diff --git a/django/views/i18n.py b/django/views/i18n.py index eda8422f69..c8cc5d043f 100644 --- a/django/views/i18n.py +++ b/django/views/i18n.py @@ -356,7 +356,8 @@ class JavaScriptCatalog(View): domain = kwargs.get('domain', self.domain) # If packages are not provided, default to all installed packages, as # DjangoTranslation without localedirs harvests them all. - packages = kwargs.get('packages', '').split('+') or self.packages + packages = kwargs.get('packages', '') + packages = packages.split('+') if packages else self.packages paths = self.get_paths(packages) if packages else None self.translation = DjangoTranslation(locale, domain=domain, localedirs=paths) context = self.get_context_data(**kwargs) diff --git a/docs/releases/1.10.3.txt b/docs/releases/1.10.3.txt index 13aadb30ee..a45124fb3a 100644 --- a/docs/releases/1.10.3.txt +++ b/docs/releases/1.10.3.txt @@ -17,3 +17,6 @@ Bugfixes * Added ``model_name`` to the ``allow_migrate()`` calls in ``makemigrations`` (:ticket:`27200`). + +* Made the ``JavaScriptCatalog`` view respect the ``packages`` argument; + previously it was ignored (:ticket:`27374`). diff --git a/tests/view_tests/tests/test_i18n.py b/tests/view_tests/tests/test_i18n.py index ae56990fe6..4778b5dd37 100644 --- a/tests/view_tests/tests/test_i18n.py +++ b/tests/view_tests/tests/test_i18n.py @@ -384,9 +384,21 @@ class JsI18NTestsMultiPackage(SimpleTestCase): translations of multiple Python packages is requested. See #13388, #3594 and #13514 for more details. """ + base_trans_string = 'il faut traduire cette cha\\u00eene de caract\\u00e8res de ' + app1_trans_string = base_trans_string + 'app1' + app2_trans_string = base_trans_string + 'app2' with self.settings(LANGUAGE_CODE='en-us'), override('fr'): response = self.client.get('/jsi18n_multi_packages1/') - self.assertContains(response, 'il faut traduire cette cha\\u00eene de caract\\u00e8res de app1') + self.assertContains(response, app1_trans_string) + self.assertContains(response, app2_trans_string) + + response = self.client.get('/jsi18n/app1/') + self.assertContains(response, app1_trans_string) + self.assertNotContains(response, app2_trans_string) + + response = self.client.get('/jsi18n/app2/') + self.assertNotContains(response, app1_trans_string) + self.assertContains(response, app2_trans_string) @modify_settings(INSTALLED_APPS={'append': ['view_tests.app3', 'view_tests.app4']}) def test_i18n_different_non_english_languages(self):