123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 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), [])
|