import json import os from PySide6.QtCore import QSettings from app.core import config class Localizer: """Класс для загрузки и работы с переводами""" def __init__(self): self.settings = QSettings("yobble_messenger", "Localization") self.locales_path = os.path.join("app/locales") self.translations = {} self.lang = self.settings.value("language", ('ru', 'Русский')) available_langs = self.get_available_languages() if self.lang not in available_langs: self.lang = available_langs[0] if available_langs else ('ru', 'Русский') self.load_language(self.lang[0]) def get_available_languages(self): """ Возвращает список доступных языков как список кортежей: (код_языка, отображаемое_имя) """ langs = [] if os.path.exists(self.locales_path): for file in os.listdir(self.locales_path): if file.endswith(".json"): lang_code = os.path.splitext(file)[0] lang_file = os.path.join(self.locales_path, file) try: with open(lang_file, "r", encoding="utf-8") as f: data = json.load(f) display_name = data.get("__name__", lang_code) langs.append((lang_code, display_name)) except Exception as e: if config.DEBUG: print(f"[Localizer] Ошибка чтения {file}: {e}") langs.append((lang_code, lang_code)) # fallback if config.DEBUG: print("langs", langs) return langs def load_language(self, lang): """Загружает перевод из JSON-файла""" lang_file = os.path.join(self.locales_path, f"{lang}.json") if os.path.exists(lang_file): with open(lang_file, "r", encoding="utf-8") as file: self.translations = json.load(file) self.lang = lang self.settings.setValue("language", lang[0]) if config.DEBUG: print(f"[Localizer.load_language] ✅ Язык загружен: {lang}") else: if config.DEBUG: print(f"[Localizer.load_language] ❌ Файл локализации не найден: {lang_file}") def translate(self, key, code=None): """Возвращает перевод слова""" text = self.translations.get(key, key) if code is not None: text = f"{text} {code}" return text def switch_language(self, lang): """Переключает языки, если язык доступен""" if isinstance(lang, (tuple, list)): lang = lang[0] available_langs = [code for code, _ in self.get_available_languages()] if lang in available_langs: self.load_language(lang) else: if config.DEBUG: print(f"[Localizer.switch_language] ❌ Язык не найден: {lang}") # Глобальный экземпляр localizer = Localizer()