mirror of
				https://github.com/django/django.git
				synced 2025-10-30 17:16:10 +00:00 
			
		
		
		
	[1.10.x] Fixed #27063 -- Prevented i18n_patterns() from using too much of the URL as the language.
Backport of a01d887a3a from master
			
			
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							62c9894b34
						
					
				
				
					commit
					a7dabe4216
				
			| @@ -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) | ||||
|   | ||||
| @@ -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`). | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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, | ||||
| ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user