mirror of https://github.com/django/django.git
124 lines
4.6 KiB
Python
124 lines
4.6 KiB
Python
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), [])
|