PythonApplicationTemplate/app/core/language_manager.py

41 lines
1.5 KiB
Python

from json import JSONDecodeError, load
from os import listdir, path
from typing import Dict
import app.utils.paths as paths
from app.core.settings_manager import SettingsManager
class LanguageManager:
"""
Gère les traductions pour l'application.
Charge les fichiers JSON de langue dans data/lang/, permet
de changer la langue courante, et récupérer des textes traduits.
"""
def __init__(self, settings_manager: SettingsManager) -> None:
self.translations: Dict[str, Dict[str, str]] = {}
self.settings_manager: SettingsManager = settings_manager
self.load_all_translations()
def load_all_translations(self) -> None:
"""
Charge tous les fichiers JSON dans data/lang/ comme dictionnaires.
"""
lang_dir: str = paths.get_lang_path()
for filename in listdir(lang_dir):
if filename.endswith(".json"):
lang_code: str = filename[:-5] # strip .json
file_path: str = path.join(lang_dir, filename)
try:
with open(file_path, "r", encoding="utf-8") as f:
self.translations[lang_code] = load(f)
except JSONDecodeError as e:
pass
def get_text(self, key: str) -> str:
"""
Retourne le texte traduit correspondant à la clé dans la langue courante.
Si la clé n'existe pas, retourne la clé elle-même.
"""
return self.translations.get(self.settings_manager.get_language(), {}).get(key, key)