import json from pathlib import Path from webapp.i18n import load_translations def test_load_translations_uses_english_fallback_for_missing_values() -> None: translations = load_translations("fi") assert translations["nav.instructions"] assert translations["app.title"] == "Linkki Botti" def test_load_translations_prefers_requested_language_value() -> None: translations = load_translations("sv") assert translations["nav.instructions"] != "Instructions" def test_translation_catalog_has_no_common_utf8_mojibake_in_finnish_or_swedish() -> None: catalog = json.loads( (Path(__file__).resolve().parents[1] / "webapp/translations/catalog.json").read_text( encoding="utf-8" ) ) def visit(value: object) -> list[str]: if isinstance(value, str): return [value] if isinstance(value, list): result: list[str] = [] for item in value: result.extend(visit(item)) return result if isinstance(value, dict): result: list[str] = [] for nested in value.values(): result.extend(visit(nested)) return result return [] suspicious_markers = ("\u00c3", "\u00c2", "\ufffd") for entry in catalog.values(): for language in ("fi", "sv"): for text in visit(entry.get(language, "")): assert not any(marker in text for marker in suspicious_markers), text