From 8f251dcf91634bc74d42a229d023f872f8238880 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 9 Sep 2025 12:06:01 +0300 Subject: [PATCH] localizate patch --- app/core/localizer.py | 35 +++++++++++++++++++++++++++-------- app/ui/views/login_view.py | 24 ++++++++++++++---------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/app/core/localizer.py b/app/core/localizer.py index 16a5110..1718c47 100644 --- a/app/core/localizer.py +++ b/app/core/localizer.py @@ -11,20 +11,34 @@ class Localizer: self.locales_path = os.path.join("app/locales") self.translations = {} - self.lang = self.settings.value("language", "ru") + 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.lang = available_langs[0] if available_langs else ('ru', 'Русский') - self.load_language(self.lang) + self.load_language(self.lang[0]) def get_available_languages(self): - """Возвращает список доступных языков по файлам в папке locales""" + """ + Возвращает список доступных языков как список кортежей: + (код_языка, отображаемое_имя) + """ langs = [] if os.path.exists(self.locales_path): for file in os.listdir(self.locales_path): if file.endswith(".json"): - langs.append(os.path.splitext(file)[0]) + 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): @@ -34,7 +48,7 @@ class Localizer: with open(lang_file, "r", encoding="utf-8") as file: self.translations = json.load(file) self.lang = lang - self.settings.setValue("language", 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}") @@ -48,10 +62,15 @@ class Localizer: def switch_language(self, lang): """Переключает языки, если язык доступен""" - if lang in self.get_available_languages(): + 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}") + if config.DEBUG: + print(f"[Localizer.switch_language] ❌ Язык не найден: {lang}") # Глобальный экземпляр localizer = Localizer() diff --git a/app/ui/views/login_view.py b/app/ui/views/login_view.py index 05b7253..2cfe0af 100644 --- a/app/ui/views/login_view.py +++ b/app/ui/views/login_view.py @@ -72,19 +72,23 @@ class LoginView(QWidget): self.theme_button.setFixedWidth(50) self.theme_button.clicked.connect(self.toggle_theme) - self.lang_combo = QComboBox() self.lang_combo.setFixedWidth(100) - self.lang_map = {} # lang_code: display_name - for lang in localizer.get_available_languages(): - # Попробуем достать из локализации display name (если есть) - lang_name = localizer.translations.get("__name__", lang) - self.lang_map[lang_name] = lang + self.lang_map = {} # display_name: lang_code + + for lang_code, lang_name in localizer.get_available_languages(): + self.lang_map[lang_name] = lang_code self.lang_combo.addItem(lang_name) - # Устанавливаем текущий язык - current_lang_name = [k for k, v in self.lang_map.items() if v == localizer.lang] - if current_lang_name: - self.lang_combo.setCurrentText(current_lang_name[0]) + + # ✅ Устанавливаем текущий язык по индексу + for i in range(self.lang_combo.count()): + item_text = self.lang_combo.itemText(i) + if self.lang_map.get(item_text) == localizer.lang: + self.lang_combo.setCurrentIndex(i) + break + + print("localizer.lang", localizer.lang) + self.lang_combo.currentTextChanged.connect(self.change_language) theme_layout.addSpacerItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))