40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from json import JSONDecodeError, load
|
|
from os import listdir, path
|
|
from typing import Dict
|
|
import app.utils.paths as paths
|
|
|
|
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) -> None:
|
|
self.translations: Dict[str, Dict[str, str]] = {}
|
|
self.settings_manager = settings_manager
|
|
|
|
self.load_all_translations()
|
|
|
|
def load_all_translations(self) -> None:
|
|
"""
|
|
Charge tous les fichiers JSON dans data/lang/ comme dictionnaires.
|
|
"""
|
|
lang_dir = paths.get_lang_path()
|
|
|
|
for filename in listdir(lang_dir):
|
|
if filename.endswith(".json"):
|
|
lang_code = filename[:-5] # strip .json
|
|
file_path = 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)
|