import json from functools import lru_cache from pathlib import Path _LOCALE_DIR = Path(__file__).parent / "locales" DEFAULT_LOCALE = "fr" @lru_cache def _catalog(locale: str) -> dict[str, str]: path = _LOCALE_DIR / f"{locale}.json" return json.loads(path.read_text(encoding="utf-8")) def t(key: str, locale: str = DEFAULT_LOCALE, **params: object) -> str: """Traduit une clé. Aucun texte visible par l'utilisateur ne doit être écrit en dur ailleurs que dans les fichiers `locales/*.json`.""" template = _catalog(locale).get(key, key) try: return template.format(**params) except (KeyError, IndexError): return template