1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
from django.core.checks import Error
from django.core.checks.translation import (
check_language_settings_consistent,
check_setting_language_code,
check_setting_languages,
check_setting_languages_bidi,
)
from django.test import SimpleTestCase, override_settings
class TranslationCheckTests(SimpleTestCase):
def setUp(self):
self.valid_tags = (
"en", # language
"mas", # language
"sgn-ase", # language+extlang
"fr-CA", # language+region
"es-419", # language+region
"zh-Hans", # language+script
"ca-ES-valencia", # language+region+variant
# FIXME: The following should be invalid:
"sr@latin", # language+script
)
self.invalid_tags = (
None, # invalid type: None.
123, # invalid type: int.
b"en", # invalid type: bytes.
"eü", # non-latin characters.
"en_US", # locale format.
"en--us", # empty subtag.
"-en", # leading separator.
"en-", # trailing separator.
"en-US.UTF-8", # language tag w/ locale encoding.
"en_US.UTF-8", # locale format - language w/ region and encoding.
"ca_ES@valencia", # locale format - language w/ region and variant.
# FIXME: The following should be invalid:
# 'sr@latin', # locale instead of language tag.
)
def test_valid_language_code(self):
for tag in self.valid_tags:
with self.subTest(tag), self.settings(LANGUAGE_CODE=tag):
self.assertEqual(check_setting_language_code(None), [])
def test_invalid_language_code(self):
msg = "You have provided an invalid value for the LANGUAGE_CODE setting: %r."
for tag in self.invalid_tags:
with self.subTest(tag), self.settings(LANGUAGE_CODE=tag):
self.assertEqual(
check_setting_language_code(None),
[
Error(msg % tag, id="translation.E001"),
],
)
def test_valid_languages(self):
for tag in self.valid_tags:
with self.subTest(tag), self.settings(LANGUAGES=[(tag, tag)]):
self.assertEqual(check_setting_languages(None), [])
def test_invalid_languages(self):
msg = "You have provided an invalid language code in the LANGUAGES setting: %r."
for tag in self.invalid_tags:
with self.subTest(tag), self.settings(LANGUAGES=[(tag, tag)]):
self.assertEqual(
check_setting_languages(None),
[
Error(msg % tag, id="translation.E002"),
],
)
def test_valid_languages_bidi(self):
for tag in self.valid_tags:
with self.subTest(tag), self.settings(LANGUAGES_BIDI=[tag]):
self.assertEqual(check_setting_languages_bidi(None), [])
def test_invalid_languages_bidi(self):
msg = (
"You have provided an invalid language code in the LANGUAGES_BIDI setting: "
"%r."
)
for tag in self.invalid_tags:
with self.subTest(tag), self.settings(LANGUAGES_BIDI=[tag]):
self.assertEqual(
check_setting_languages_bidi(None),
[
Error(msg % tag, id="translation.E003"),
],
)
@override_settings(USE_I18N=True, LANGUAGES=[("en", "English")])
def test_inconsistent_language_settings(self):
msg = (
"You have provided a value for the LANGUAGE_CODE setting that is "
"not in the LANGUAGES setting."
)
for tag in ["fr", "fr-CA", "fr-357"]:
with self.subTest(tag), self.settings(LANGUAGE_CODE=tag):
self.assertEqual(
check_language_settings_consistent(None),
[
Error(msg, id="translation.E004"),
],
)
@override_settings(
USE_I18N=True,
LANGUAGES=[
("de", "German"),
("es", "Spanish"),
("fr", "French"),
("ca", "Catalan"),
],
)
def test_valid_variant_consistent_language_settings(self):
tests = [
# language + region.
"fr-CA",
"es-419",
"de-at",
# language + region + variant.
"ca-ES-valencia",
]
for tag in tests:
with self.subTest(tag), self.settings(LANGUAGE_CODE=tag):
self.assertEqual(check_language_settings_consistent(None), [])
|