Skip to content

Commit 8b515c9

Browse files
committed
Refactored i18n module and updated translations in MainWindow.py
1 parent 650aafe commit 8b515c9

2 files changed

Lines changed: 210 additions & 393 deletions

File tree

Core/MainWindow.py

Lines changed: 8 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
from .utils import _UiInvoker, _run_coro_async
3030
from .dialogs import ProgressDialog, CompilationProcessDialog
3131
from .Venv_Manager import VenvManager
32+
from .i18n import (
33+
_apply_main_app_translations as _i18n_apply_translations,
34+
show_language_dialog as _i18n_show_dialog,
35+
)
3236

3337
# Référence globale vers l'instance GUI pour récupération du workspace par l'API_SDK
3438
_latest_gui_instance = None
@@ -1073,72 +1077,8 @@ def show_statistics(self):
10731077
current_language = "English"
10741078

10751079
def _apply_main_app_translations(self, tr: dict):
1076-
# Utilitaires internes pour éviter les valeurs codées en dur
1077-
def _set(attr: str, key: str, method: str = "setText"):
1078-
try:
1079-
widget = getattr(self, attr, None)
1080-
value = tr.get(key)
1081-
if widget is not None and value:
1082-
getattr(widget, method)(value)
1083-
except Exception:
1084-
pass
1085-
1086-
# Sidebar & main buttons
1087-
_set("btn_select_folder", "select_folder")
1088-
_set("btn_select_files", "select_files")
1089-
_set("btn_build_all", "build_all")
1090-
_set("btn_export_config", "export_config")
1091-
_set("btn_import_config", "import_config")
1092-
_set("btn_cancel_all", "cancel_all")
1093-
_set("btn_suggest_deps", "suggest_deps")
1094-
_set("btn_help", "help")
1095-
_set("btn_show_stats", "show_stats")
1096-
1097-
# Bouton de langue (variante System vs simple), sans valeur de secours
1098-
try:
1099-
if getattr(self, "select_lang", None):
1100-
if (
1101-
getattr(self, "language_pref", getattr(self, "language", "System"))
1102-
== "System"
1103-
):
1104-
val = tr.get("choose_language_system_button") or tr.get(
1105-
"choose_language_button"
1106-
)
1107-
else:
1108-
val = tr.get("choose_language_button")
1109-
if val:
1110-
self.select_lang.setText(val)
1111-
except Exception:
1112-
pass
1113-
1114-
# Bouton de thème (variante System vs simple), sans valeur de secours
1115-
try:
1116-
if getattr(self, "select_theme", None):
1117-
if getattr(self, "theme", "System") == "System":
1118-
val = tr.get("choose_theme_system_button") or tr.get(
1119-
"choose_theme_button"
1120-
)
1121-
else:
1122-
val = tr.get("choose_theme_button")
1123-
if val:
1124-
self.select_theme.setText(val)
1125-
except Exception:
1126-
pass
1127-
1128-
# Workspace
1129-
_set("venv_button", "venv_button")
1130-
_set("label_workspace_section", "label_workspace_section")
1131-
_set("venv_label", "venv_label")
1132-
_set("label_folder", "label_folder")
1133-
1134-
# Files
1135-
_set("label_files_section", "label_files_section")
1136-
_set("btn_remove_file", "btn_remove_file")
1137-
1138-
# Logs
1139-
_set("label_logs_section", "label_logs_section")
1140-
1141-
# Note: Tabs are now dynamically created by engines, no static translation needed
1080+
"""Apply translations to UI elements - uses centralized i18n module version."""
1081+
_i18n_apply_translations(self, tr)
11421082

11431083
def apply_language(self, lang_display: str):
11441084
# Launch non-blocking translation loading and apply when ready
@@ -1235,83 +1175,8 @@ def set_compilation_ui_enabled(self, enabled):
12351175
self.set_controls_enabled(enabled)
12361176

12371177
def show_language_dialog(self):
1238-
from PySide6.QtWidgets import QInputDialog
1239-
1240-
from .i18n import available_languages, get_translations, resolve_system_language
1241-
1242-
async def _prepare():
1243-
langs = await available_languages()
1244-
name_to_code = {l.get("name", l.get("code")): l.get("code") for l in langs}
1245-
display = ["System"] + list(name_to_code.keys())
1246-
current = getattr(
1247-
self, "language_pref", getattr(self, "language", "System")
1248-
)
1249-
try:
1250-
start_index = display.index(current if current in display else "System")
1251-
except Exception:
1252-
start_index = 0
1253-
return name_to_code, display, start_index
1254-
1255-
def _after_prepared(res):
1256-
if isinstance(res, Exception):
1257-
try:
1258-
self.log_i18n(
1259-
"❌ Échec de chargement des langues disponibles.",
1260-
"❌ Failed to load available languages.",
1261-
)
1262-
except Exception:
1263-
pass
1264-
return
1265-
name_to_code, display, start_index = res
1266-
title = self.tr("Choisir la langue", "Choose language")
1267-
label = self.tr("Langue :", "Language:")
1268-
choice, ok = QInputDialog.getItem(
1269-
self, title, label, display, start_index, False
1270-
)
1271-
if ok and choice:
1272-
if choice == "System":
1273-
self.language_pref = "System"
1274-
# Apply resolved system language for UI strings, but keep pref as System
1275-
self.apply_language("System")
1276-
if self.select_lang:
1277-
1278-
async def _fetch_sys():
1279-
code = await resolve_system_language()
1280-
return await get_translations(code)
1281-
1282-
_run_coro_async(
1283-
_fetch_sys(),
1284-
lambda tr: self.select_lang.setText(
1285-
tr.get("choose_language_system_button")
1286-
or tr.get("select_lang")
1287-
or ""
1288-
),
1289-
ui_owner=self,
1290-
)
1291-
else:
1292-
code = name_to_code.get(choice) or choice
1293-
self.language_pref = code
1294-
self.apply_language(code)
1295-
if self.select_lang:
1296-
_run_coro_async(
1297-
get_translations(code),
1298-
lambda tr2: self.select_lang.setText(
1299-
tr2.get("choose_language_button")
1300-
or tr2.get("select_lang")
1301-
or ""
1302-
),
1303-
ui_owner=self,
1304-
)
1305-
else:
1306-
try:
1307-
self.log_i18n(
1308-
"Sélection de la langue annulée.",
1309-
"Language selection canceled.",
1310-
)
1311-
except Exception:
1312-
pass
1313-
1314-
_run_coro_async(_prepare(), _after_prepared, ui_owner=self)
1178+
"""Show language selection dialog - uses centralized i18n module version."""
1179+
_i18n_show_dialog(self)
13151180

13161181
from .deps_analyser import (
13171182
_install_next_dependency,

0 commit comments

Comments
 (0)