Code/utils/translations.py
2025-05-13 16:31:53 +02:00

85 lines
2.6 KiB
Python

import streamlit as st
import json
import os
import logging
# 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 = os.path.join("assets", "locales", f"{lang}.json")
if not os.path.exists(file_path):
logger.warning(f"Fichier de traduction non trouvé: {file_path}")
return {}
with open(file_path, "r", 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, default=None):
"""
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 default if default is not None else 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 default if default is not None else 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