localizate patch
This commit is contained in:
parent
8d923d6a6a
commit
8f251dcf91
@ -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()
|
||||
|
||||
@ -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))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user