8000 Fixed #24063 -- Allowed locale variants supported by gettext. · ddriddle/django@76d26d8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 76d26d8

Browse files
nijeltimgraham
authored andcommitted
Fixed #24063 -- Allowed locale variants supported by gettext.
The locale code can contain a variant after @, so allowed that.
1 parent 9d6914d commit 76d26d8

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

django/utils/translation/trans_real.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@
4343
(?:\s*,\s*|$) # Multiple accepts per header.
4444
''', re.VERBOSE)
4545

46-
language_code_re = re.compile(r'^[a-z]{1,8}(?:-[a-z0-9]{1,8})*$', re.IGNORECASE)
46+
language_code_re = re.compile(
47+
r'^[a-z]{1,8}(?:-[a-z0-9]{1,8})*(?:@[a-z0-9]{1,20})?$',
48+
re.IGNORECASE
49+
)
4750

48-
language_code_prefix_re = re.compile(r'^/([\w-]+)(/|$)')
51+
language_code_prefix_re = re.compile(r'^/([\w@-]+)(/|$)')
4952

5053

5154
@receiver(setting_changed)

docs/releases/1.9.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@ Internationalization
162162
* The :func:`django.utils.timezone.make_aware` function gained an ``is_dst``
163163
argument to help resolve ambiguous times during DST transitions.
164164

165+
* You can now use locale variants supported by gettext. These are usually used
166+
for languages which can be written in different scripts, for example Latin
167+
and Cyrillic (e.g. ``be@latin``).
168+
165169
Management Commands
166170
^^^^^^^^^^^^^^^^^^^
167171

tests/i18n/tests.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1420,9 +1420,18 @@ def test_check_for_language(self):
14201420
self.assertTrue(check_for_language('en'))
14211421
self.assertTrue(check_for_language('en-us'))
14221422
self.assertTrue(check_for_language('en-US'))
1423+
self.assertTrue(check_for_language('be'))
1424+
self.assertTrue(check_for_language('be@latin'))
1425+
self.assertTrue(check_for_language('sr-RS@latin'))
1426+
self.assertTrue(check_for_language('sr-RS@12345'))
14231427
self.assertFalse(check_for_language('en-ü'))
14241428
self.assertFalse(check_for_language('en\x00'))
14251429
self.assertFalse(check_for_language(None))
1430+
self.assertFalse(check_for_language('be@ '))
1431+
# Specifying encoding is not supported (Django enforces UTF-8)
1432+
self.assertFalse(check_for_language('tr-TR.UTF-8'))
1433+
self.assertFalse(check_for_language('tr-TR.UTF8'))
1434+
self.assertFalse(check_for_language('de-DE.utf-8'))
14261435

14271436
def test_get_language_from_request(self):
14281437
# issue 19919

0 commit comments

Comments
 (0)
0