diff options
| author | Krzysztof Urbaniak <urban@fail.pl> | 2016-10-28 11:36:53 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-10-31 14:33:42 -0400 |
| commit | a7dabe421684e6cb2f2abce659d60fa3bb1bb71b (patch) | |
| tree | 6d73c86b0c7f8500120ccd6e6513829baebc4bc1 | |
| parent | 62c9894b347999bf44417ee6ab31e1a66628cf36 (diff) | |
[1.10.x] Fixed #27063 -- Prevented i18n_patterns() from using too much of the URL as the language.
Backport of a01d887a3ad9029ed198b6af974534fec46223f9 from master
| -rw-r--r-- | django/utils/translation/trans_real.py | 2 | ||||
| -rw-r--r-- | docs/releases/1.10.3.txt | 3 | ||||
| -rw-r--r-- | tests/i18n/tests.py | 7 | ||||
| -rw-r--r-- | tests/i18n/urls_default_unprefixed.py | 1 |
4 files changed, 12 insertions, 1 deletions
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 7a2a1c63a2..ad4d521590 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -48,7 +48,7 @@ language_code_re = re.compile( re.IGNORECASE ) -language_code_prefix_re = re.compile(r'^/([\w@-]+)(/|$)') +language_code_prefix_re = re.compile(r'^/(\w+([@-]\w+)?)(/|$)') @receiver(setting_changed) diff --git a/docs/releases/1.10.3.txt b/docs/releases/1.10.3.txt index 5bb340a3a8..ba01287aa5 100644 --- a/docs/releases/1.10.3.txt +++ b/docs/releases/1.10.3.txt @@ -23,3 +23,6 @@ Bugfixes * Fixed ``QuerySet.bulk_create()`` on PostgreSQL when the number of objects is a multiple plus one of ``batch_size`` (:ticket:`27385`). + +* Prevented ``i18n_patterns()`` from using too much of the URL as the language + to fix a use case for ``prefix_default_language=False`` (:ticket:`27063`). diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 219d2b4022..0f80e0ae91 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -1474,6 +1474,7 @@ class MiscTests(SimpleTestCase): self.assertEqual(g('/de/'), 'de') self.assertEqual(g('/de-at/'), 'de-at') self.assertEqual(g('/de-ch/'), 'de') + self.assertIsNone(g('/de-simple-page/')) def test_get_language_from_path_null(self): from django.utils.translation.trans_null import get_language_from_path as g @@ -1806,6 +1807,7 @@ class LocaleMiddlewareTests(TestCase): USE_I18N=True, LANGUAGES=[ ('en', 'English'), + ('de', 'German'), ('fr', 'French'), ], MIDDLEWARE=[ @@ -1836,6 +1838,11 @@ class UnprefixedDefaultLanguageTests(SimpleTestCase): with self.assertRaisesMessage(AssertionError, "Unexpected kwargs for i18n_patterns(): {'foo':"): i18n_patterns(object(), foo='bar') + def test_page_with_dash(self): + # A page starting with /de* shouldn't match the 'de' langauge code. + response = self.client.get('/de-simple-page/') + self.assertEqual(response.content, b'Yes') + @override_settings( USE_I18N=True, diff --git a/tests/i18n/urls_default_unprefixed.py b/tests/i18n/urls_default_unprefixed.py index 8cadbfaa73..92ef8c6246 100644 --- a/tests/i18n/urls_default_unprefixed.py +++ b/tests/i18n/urls_default_unprefixed.py @@ -4,6 +4,7 @@ from django.http import HttpResponse from django.utils.translation import ugettext_lazy as _ urlpatterns = i18n_patterns( + url(r'^(?P<arg>[\w-]+)-page', lambda request, **arg: HttpResponse(_("Yes"))), url(r'^simple/$', lambda r: HttpResponse(_("Yes"))), prefix_default_language=False, ) |
