Browse Source

Fixed #33078 -- Added support for language regions in i18n_patterns().

Maxim Piskunov 3 years ago
parent
commit
d3f4c2b95d
3 changed files with 13 additions and 4 deletions
  1. 1 1
      django/utils/translation/trans_real.py
  2. 2 1
      docs/releases/4.1.txt
  3. 10 2
      tests/i18n/tests.py

+ 1 - 1
django/utils/translation/trans_real.py

@@ -43,7 +43,7 @@ language_code_re = _lazy_re_compile(
     re.IGNORECASE
 )
 
-language_code_prefix_re = _lazy_re_compile(r'^/(\w+([@-]\w+)?)(/|$)')
+language_code_prefix_re = _lazy_re_compile(r'^/(\w+([@-]\w+){0,2})(/|$)')
 
 
 @receiver(setting_changed)

+ 2 - 1
docs/releases/4.1.txt

@@ -183,7 +183,8 @@ Generic Views
 Internationalization
 ~~~~~~~~~~~~~~~~~~~~
 
-* ...
+* The :func:`~django.conf.urls.i18n.i18n_patterns` function now supports
+  languages with both scripts and regions.
 
 Logging
 ~~~~~~~

+ 10 - 2
tests/i18n/tests.py

@@ -1593,11 +1593,15 @@ class MiscTests(SimpleTestCase):
     @override_settings(
         LANGUAGES=[
             ('en', 'English'),
+            ('en-latn-us', 'Latin English'),
+            ('en-Latn-US', 'BCP 47 case format'),
             ('de', 'German'),
             ('de-1996', 'German, orthography of 1996'),
             ('de-at', 'Austrian German'),
+            ('de-ch-1901', 'German, Swiss variant, traditional orthography'),
             ('i-mingo', 'Mingo'),
             ('kl-tunumiit', 'Tunumiisiut'),
+            ('nan-hani-tw', 'Hanji'),
             ('pl', 'Polish'),
         ],
     )
@@ -1609,13 +1613,17 @@ class MiscTests(SimpleTestCase):
             ('/xyz/', None),
             ('/en/', 'en'),
             ('/en-gb/', 'en'),
+            ('/en-latn-us/', 'en-latn-us'),
+            ('/en-Latn-US/', 'en-Latn-US'),
             ('/de/', 'de'),
             ('/de-1996/', 'de-1996'),
             ('/de-at/', 'de-at'),
             ('/de-ch/', 'de'),
-            ('/de-simple-page/', None),
+            ('/de-ch-1901/', 'de-ch-1901'),
+            ('/de-simple-page-test/', None),
             ('/i-mingo/', 'i-mingo'),
             ('/kl-tunumiit/', 'kl-tunumiit'),
+            ('/nan-hani-tw/', 'nan-hani-tw'),
         ]
         for path, language in tests:
             with self.subTest(path=path):
@@ -1824,7 +1832,7 @@ class UnprefixedDefaultLanguageTests(SimpleTestCase):
 
     def test_page_with_dash(self):
         # A page starting with /de* shouldn't match the 'de' language code.
-        response = self.client.get('/de-simple-page/')
+        response = self.client.get('/de-simple-page-test/')
         self.assertEqual(response.content, b'Yes')
 
     def test_no_redirect_on_404(self):