mirror of
				https://github.com/django/django.git
				synced 2025-10-30 17:16:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.7 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), [])
 |