feat(i18n): enforce shared keyspace contract across django and spa
All checks were successful
CI / test-and-quality (push) Successful in 2m17s
CI / test-and-quality (pull_request) Successful in 2m23s

This commit is contained in:
2026-03-01 19:24:12 +00:00
parent 377722eb9a
commit b55b379134
3 changed files with 111 additions and 17 deletions

View File

@@ -19,7 +19,7 @@ from fupogfakta.models import (
RoundConfig,
RoundQuestion,
)
from lobby.i18n import resolve_error_message
from lobby.i18n import i18n_locale_config, lobby_i18n_catalog, resolve_error_message
User = get_user_model()
@@ -1206,3 +1206,27 @@ class SmokeStagingCommandTests(TestCase):
class I18nResolverTests(TestCase):
def test_missing_backend_key_returns_key_deterministically(self):
self.assertEqual(resolve_error_message(key="missing_key", locale="da"), "missing_key")
def test_shared_catalog_uses_en_default_and_da_en_matrix(self):
default_locale, supported_locales = i18n_locale_config()
catalog = lobby_i18n_catalog()
self.assertEqual(default_locale, "en")
self.assertIn("en", supported_locales)
self.assertIn("da", supported_locales)
for key, translations in catalog["backend"]["errors"].items():
self.assertTrue(translations.get("en"), f"backend key {key} missing en")
self.assertTrue(translations.get("da"), f"backend key {key} missing da")
for key, translations in catalog["frontend"]["errors"].items():
self.assertTrue(translations.get("en"), f"frontend key {key} missing en")
self.assertTrue(translations.get("da"), f"frontend key {key} missing da")
def test_backend_error_codes_map_to_same_named_translation_keys(self):
catalog = lobby_i18n_catalog()
backend_errors = catalog["backend"]["errors"]
for code, key in catalog["backend"]["error_codes"].items():
self.assertEqual(code, key)
self.assertIn(key, backend_errors)