From a48cc0125470e75ad5ff24d7575d7c96826fb60b Mon Sep 17 00:00:00 2001 From: claudi Date: Tue, 10 Mar 2026 14:38:17 +0100 Subject: [PATCH] feat: add language change handling and prompts for restart in settings --- resources/translations/de.json | 5 +++++ resources/translations/en.json | 5 +++++ resources/translations/fr.json | 5 +++++ src/webdrop_bridge/ui/main_window.py | 27 ++++++++++++++++++++++++ src/webdrop_bridge/ui/settings_dialog.py | 1 + 5 files changed, 43 insertions(+) diff --git a/resources/translations/de.json b/resources/translations/de.json index 25c936f..d37c9a8 100644 --- a/resources/translations/de.json +++ b/resources/translations/de.json @@ -54,6 +54,10 @@ "dialog.domain_changed.msg": "Die Web-Anwendungs-Domain wurde ge\u00e4ndert\n\nSie haben zu einer anderen Domain gewechselt. F\u00fcr maximale Stabilit\u00e4t und korrekte Authentifizierung sollte die Anwendung neu gestartet werden.\n\nProfil und Cache wurden geleert, aber ein Neustart wird empfohlen.", "dialog.domain_changed.restart_now": "Jetzt neu starten", "dialog.domain_changed.restart_later": "Sp\u00e4ter neu starten", + "dialog.language_changed.title": "Sprache ge\u00e4ndert", + "dialog.language_changed.msg": "Die Spracheinstellung wurde aktualisiert. Starten Sie jetzt neu, um die ausgew\u00e4hlte Sprache \u00fcberall anzuwenden.", + "dialog.language_changed.restart_now": "Jetzt neu starten", + "dialog.language_changed.restart_later": "Sp\u00e4ter neu starten", "dialog.restart_failed.title": "Neustart fehlgeschlagen", "dialog.restart_failed.msg": "Die Anwendung konnte nicht automatisch neu gestartet werden:\n\n{error}\n\nBitte starten Sie manuell neu.", "dialog.update_timeout.title": "Zeitüberschreitung bei der Update-Pr\u00fcfung", @@ -109,6 +113,7 @@ "settings.profiles.export_btn": "Konfiguration exportieren", "settings.profiles.import_btn": "Konfiguration importieren", "settings.general.language_label": "Sprache:", + "settings.general.language_auto": "Systemstandard (Auto)", "settings.general.language_restart_note": "Sprach\u00e4nderung wirksam nach Neustart.", "settings.add_mapping.url_title": "URL-Zuordnung hinzuf\u00fcgen", "settings.add_mapping.url_prompt": "Azure Blob Storage URL-Pr\u00e4fix eingeben:\n(z.B. https://myblob.blob.core.windows.net/container/)", diff --git a/resources/translations/en.json b/resources/translations/en.json index 650c508..27cfa09 100644 --- a/resources/translations/en.json +++ b/resources/translations/en.json @@ -54,6 +54,10 @@ "dialog.domain_changed.msg": "Web Application Domain Has Changed\n\nYou've switched to a different domain. For maximum stability and to ensure proper authentication, the application should be restarted.\n\nThe profile and cache have been cleared, but we recommend restarting.", "dialog.domain_changed.restart_now": "Restart Now", "dialog.domain_changed.restart_later": "Restart Later", + "dialog.language_changed.title": "Language Changed", + "dialog.language_changed.msg": "The language setting was updated. Restart now to apply the selected language everywhere.", + "dialog.language_changed.restart_now": "Restart Now", + "dialog.language_changed.restart_later": "Restart Later", "dialog.restart_failed.title": "Restart Failed", "dialog.restart_failed.msg": "Could not automatically restart the application:\n\n{error}\n\nPlease restart manually.", "dialog.update_timeout.title": "Update Check Timeout", @@ -109,6 +113,7 @@ "settings.profiles.export_btn": "Export Configuration", "settings.profiles.import_btn": "Import Configuration", "settings.general.language_label": "Language:", + "settings.general.language_auto": "System Default (Auto)", "settings.general.language_restart_note": "Language change takes effect after restart.", "settings.add_mapping.url_title": "Add URL Mapping", "settings.add_mapping.url_prompt": "Enter Azure Blob Storage URL prefix:\n(e.g., https://myblob.blob.core.windows.net/container/)", diff --git a/resources/translations/fr.json b/resources/translations/fr.json index 457f3e1..62d631d 100644 --- a/resources/translations/fr.json +++ b/resources/translations/fr.json @@ -54,6 +54,10 @@ "dialog.domain_changed.msg": "Le domaine de l'application web a chang\u00e9\n\nVous avez chang\u00e9 de domaine. Pour une stabilit\u00e9 maximale et une authentification correcte, il est recommand\u00e9 de red\u00e9marrer l'application.\n\nLe profil et le cache ont \u00e9t\u00e9 vid\u00e9s, mais un red\u00e9marrage est recommand\u00e9.", "dialog.domain_changed.restart_now": "Red\u00e9marrer maintenant", "dialog.domain_changed.restart_later": "Red\u00e9marrer plus tard", + "dialog.language_changed.title": "Langue modifi\u00e9e", + "dialog.language_changed.msg": "Le param\u00e8tre de langue a \u00e9t\u00e9 mis \u00e0 jour. Red\u00e9marrez maintenant pour appliquer la langue s\u00e9lectionn\u00e9e partout.", + "dialog.language_changed.restart_now": "Red\u00e9marrer maintenant", + "dialog.language_changed.restart_later": "Red\u00e9marrer plus tard", "dialog.restart_failed.title": "\u00c9chec du red\u00e9marrage", "dialog.restart_failed.msg": "Impossible de red\u00e9marrer automatiquement l'application\u00a0:\n\n{error}\n\nVeuillez red\u00e9marrer manuellement.", "dialog.update_timeout.title": "D\u00e9lai de v\u00e9rification des mises \u00e0 jour d\u00e9pass\u00e9", @@ -109,6 +113,7 @@ "settings.profiles.export_btn": "Exporter la configuration", "settings.profiles.import_btn": "Importer la configuration", "settings.general.language_label": "Langue\u00a0:", + "settings.general.language_auto": "Par d\u00e9faut du syst\u00e8me (Auto)", "settings.general.language_restart_note": "Le changement de langue prend effet apr\u00e8s red\u00e9marrage.", "settings.add_mapping.url_title": "Ajouter un mappage d'URL", "settings.add_mapping.url_prompt": "Entrez le pr\u00e9fixe URL Azure Blob Storage\u00a0:\n(p.ex. https://myblob.blob.core.windows.net/container/)", diff --git a/src/webdrop_bridge/ui/main_window.py b/src/webdrop_bridge/ui/main_window.py index a0dcd4d..6462ca6 100644 --- a/src/webdrop_bridge/ui/main_window.py +++ b/src/webdrop_bridge/ui/main_window.py @@ -1662,6 +1662,7 @@ class MainWindow(QMainWindow): # Store current URL before opening dialog old_webapp_url = self.config.webapp_url + old_language = self.config.language # Show dialog dialog = SettingsDialog(self.config, self) @@ -1669,6 +1670,7 @@ class MainWindow(QMainWindow): # Check if webapp URL changed new_webapp_url = self.config.webapp_url + language_changed = old_language != self.config.language if old_webapp_url != new_webapp_url: logger.info(f"Web application URL changed: {old_webapp_url} → {new_webapp_url}") @@ -1685,6 +1687,10 @@ class MainWindow(QMainWindow): self.web_view.clear_cache_and_cookies() QTimer.singleShot(100, self._navigate_home) + if language_changed: + logger.info(f"Language changed: {old_language} → {self.config.language}") + self._handle_language_change_restart() + def _check_domain_changed(self, old_url: str, new_url: str) -> bool: """Check if the domain/host has changed between two URLs. @@ -1745,6 +1751,27 @@ class MainWindow(QMainWindow): self.web_view.clear_cache_and_cookies() self._navigate_home() + def _handle_language_change_restart(self) -> None: + """Handle language change by prompting for an optional restart.""" + from PySide6.QtWidgets import QMessageBox + + msg = QMessageBox(self) + msg.setWindowTitle(tr("dialog.language_changed.title")) + msg.setIcon(QMessageBox.Icon.Information) + msg.setText(tr("dialog.language_changed.msg")) + + restart_now_btn = msg.addButton( + tr("dialog.language_changed.restart_now"), QMessageBox.ButtonRole.AcceptRole + ) + msg.addButton( + tr("dialog.language_changed.restart_later"), QMessageBox.ButtonRole.RejectRole + ) + + msg.exec() + + if msg.clickedButton() == restart_now_btn: + self._restart_application() + def _restart_application(self) -> None: """Restart the application automatically. diff --git a/src/webdrop_bridge/ui/settings_dialog.py b/src/webdrop_bridge/ui/settings_dialog.py index 9299bc0..935aee1 100644 --- a/src/webdrop_bridge/ui/settings_dialog.py +++ b/src/webdrop_bridge/ui/settings_dialog.py @@ -129,6 +129,7 @@ class SettingsDialog(QDialog): lang_layout.addWidget(QLabel(tr("settings.general.language_label"))) self.language_combo = QComboBox() + self.language_combo.addItem(tr("settings.general.language_auto"), "auto") available = get_available_languages() current_lang = self.config.language for code, name in available.items():