- Correction des 907 erreurs ruff (pathlib, imports, nommage, simplifications, docstrings) - Fix déduplication labels dans multiselect nœuds d'arrivée (analyse) - Expansion 1→N label→IDs pour le Sankey (Pays d'opération) - Ajout CLAUDE.md et document de design de l'audit - Mise à jour .gitignore (artefacts tests exploratoires) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
import json
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
import streamlit as st
|
|
|
|
# Configuration du logger
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger("translations")
|
|
|
|
def load_translations(lang="fr"):
|
|
"""Charge les traductions depuis le fichier JSON correspondant à la langue spécifiée.
|
|
|
|
Args:
|
|
lang (str): Code de langue (par défaut: "fr" pour français)
|
|
|
|
Returns:
|
|
dict: Dictionnaire des traductions ou un dictionnaire vide en cas d'erreur
|
|
"""
|
|
try:
|
|
file_path = Path("assets") / "locales" / f"{lang}.json"
|
|
if not file_path.exists():
|
|
logger.warning(f"Fichier de traduction non trouvé: {file_path}")
|
|
return {}
|
|
|
|
with file_path.open(encoding="utf-8") as f:
|
|
translations = json.load(f)
|
|
logger.info(f"Traductions chargées: {lang}")
|
|
return translations
|
|
except Exception as e:
|
|
logger.error(f"Erreur lors du chargement des traductions: {e}")
|
|
return {}
|
|
|
|
def get_translation(key):
|
|
"""Récupère une traduction par sa clé.
|
|
|
|
Les clés peuvent être hiérarchiques, séparées par des points.
|
|
Exemple: "header.title" pour accéder à translations["header"]["title"]
|
|
|
|
Args:
|
|
key (str): Clé de traduction (peut être hiérarchique comme "header.title")
|
|
default (str, optional): Valeur par défaut si la traduction n'est pas trouvée
|
|
|
|
Returns:
|
|
str: Texte traduit ou valeur par défaut
|
|
"""
|
|
# Initialiser les traductions si nécessaire
|
|
if "translations" not in st.session_state:
|
|
st.session_state.translations = load_translations("fr")
|
|
st.session_state.lang = "fr"
|
|
|
|
# Si aucune traduction n'est chargée, retourner la valeur par défaut
|
|
if not st.session_state.get("translations"):
|
|
return f"⊗⤇ {key} ⤆⊗"
|
|
|
|
# Parcourir la hiérarchie des clés
|
|
keys = key.split(".")
|
|
current = st.session_state.translations
|
|
|
|
for k in keys:
|
|
if not isinstance(current, dict) or k not in current:
|
|
return f"⊗⤇ {key} ⤆⊗"
|
|
current = current[k]
|
|
|
|
return current
|
|
|
|
def set_language(lang="fr"):
|
|
"""Force l'utilisation d'une langue spécifique.
|
|
|
|
Args:
|
|
lang (str): Code de langue à utiliser
|
|
"""
|
|
st.session_state.lang = lang
|
|
st.session_state.translations = load_translations(lang)
|
|
|
|
# Initialiser la langue française par défaut
|
|
def init_translations():
|
|
"""Initialise les traductions avec la langue française."""
|
|
if "translations" not in st.session_state:
|
|
set_language("fr")
|
|
|
|
# Raccourci pour get_translation
|
|
_ = get_translation
|