From 4effd6045be0b5e4a96fad2764ed4853d316d607 Mon Sep 17 00:00:00 2001 From: Martchus Date: Mon, 3 Jul 2023 00:56:19 +0200 Subject: [PATCH] Dynamically retranslate some aspects of the UI There are still many places missing but this is a first step. --- plasmoid/lib/CMakeLists.txt | 2 +- plasmoid/lib/settingsdialog.cpp | 12 ++++++++---- syncthingwidgets/CMakeLists.txt | 2 +- syncthingwidgets/settings/settingsdialog.cpp | 6 +++--- tray/CMakeLists.txt | 2 +- tray/gui/traywidget.cpp | 16 +++++++++++++++- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/plasmoid/lib/CMakeLists.txt b/plasmoid/lib/CMakeLists.txt index 6db6f11..849109d 100644 --- a/plasmoid/lib/CMakeLists.txt +++ b/plasmoid/lib/CMakeLists.txt @@ -8,7 +8,7 @@ endforeach () set(TS_FILES ../translations/${META_PROJECT_NAME}_de_DE.ts ../translations/${META_PROJECT_NAME}_en_US.ts) # find qtutilities -find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.7.0 REQUIRED) +find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.13.0 REQUIRED) use_qt_utilities() # find qtforkawesomequickimageprovider diff --git a/plasmoid/lib/settingsdialog.cpp b/plasmoid/lib/settingsdialog.cpp index 5d6a4d5..c00fe49 100644 --- a/plasmoid/lib/settingsdialog.cpp +++ b/plasmoid/lib/settingsdialog.cpp @@ -125,7 +125,7 @@ SettingsDialog::SettingsDialog(Plasmoid::SyncthingApplet &applet) category = new OptionCategory; m_appearanceOptionPage = new AppearanceOptionPage(applet); - category->setDisplayName(QCoreApplication::translate("Plasmoid::SettingsDialog", "Plasmoid")); + translateCategory(category, [] { return QCoreApplication::translate("Plasmoid::SettingsDialog", "Plasmoid"); }); category->assignPages({ new ConnectionOptionPage(applet.connection()), new NotificationsOptionPage(GuiType::Plasmoid), m_appearanceOptionPage, new IconsOptionPage, new ShortcutOptionPage(applet) }); category->setIcon(QIcon::fromTheme(QStringLiteral("plasma"))); @@ -133,15 +133,19 @@ SettingsDialog::SettingsDialog(Plasmoid::SyncthingApplet &applet) // most startup options don't make much sense for a Plasmoid, so merge webview with startup auto *const generalWebViewPage = new GeneralWebViewOptionPage; - generalWebViewPage->widget()->setWindowTitle(QCoreApplication::translate("Plasmoid::SettingsDialog", "General web view settings")); auto *const builtinWebViewPage = new BuiltinWebViewOptionPage; - builtinWebViewPage->widget()->setWindowTitle(QCoreApplication::translate("Plasmoid::SettingsDialog", "Built-in web view")); + auto setWindowTitle = [generalWebViewPage, builtinWebViewPage] { + generalWebViewPage->widget()->setWindowTitle(QCoreApplication::translate("Plasmoid::SettingsDialog", "General web view settings")); + builtinWebViewPage->widget()->setWindowTitle(QCoreApplication::translate("Plasmoid::SettingsDialog", "Built-in web view")); + }; + setWindowTitle(); + connect(this, &QtUtilities::SettingsDialog::retranslationRequired, this, std::move(setWindowTitle)); #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD auto *const systemdPage = new SystemdOptionPage; #endif category = new OptionCategory; - category->setDisplayName(QCoreApplication::translate("Plasmoid::SettingsDialog", "Extras")); + translateCategory(category, [] { return QCoreApplication::translate("Plasmoid::SettingsDialog", "Extras"); }); category->assignPages({ generalWebViewPage, builtinWebViewPage #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD , diff --git a/syncthingwidgets/CMakeLists.txt b/syncthingwidgets/CMakeLists.txt index edfe375..5d61749 100644 --- a/syncthingwidgets/CMakeLists.txt +++ b/syncthingwidgets/CMakeLists.txt @@ -91,7 +91,7 @@ find_package(${PACKAGE_NAMESPACE_PREFIX}c++utilities${CONFIGURATION_PACKAGE_SUFF use_cpp_utilities(VISIBILITY PUBLIC) # find qtutilities -find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.11.0 REQUIRED) +find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.13.0 REQUIRED) use_qt_utilities() # find backend libraries diff --git a/syncthingwidgets/settings/settingsdialog.cpp b/syncthingwidgets/settings/settingsdialog.cpp index 63d259c..43d1eea 100644 --- a/syncthingwidgets/settings/settingsdialog.cpp +++ b/syncthingwidgets/settings/settingsdialog.cpp @@ -1618,21 +1618,21 @@ SettingsDialog::SettingsDialog(Data::SyncthingConnection *connection, QWidget *p OptionCategory *category; category = new OptionCategory(this); - category->setDisplayName(tr("Tray")); + translateCategory(category, [] { return tr("Tray"); }); category->assignPages({ m_connectionsOptionPage = new ConnectionOptionPage(connection), new NotificationsOptionPage, new AppearanceOptionPage, new IconsOptionPage(IconsOptionPage::Context::UI), new IconsOptionPage(IconsOptionPage::Context::System) }); category->setIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg"))); categories << category; category = new OptionCategory(this); - category->setDisplayName(tr("Web view")); + translateCategory(category, [] { return tr("Web view"); }); category->assignPages({ new GeneralWebViewOptionPage, new BuiltinWebViewOptionPage }); category->setIcon( QIcon::fromTheme(QStringLiteral("internet-web-browser"), QIcon(QStringLiteral(":/icons/hicolor/scalable/apps/internet-web-browser.svg")))); categories << category; category = new OptionCategory(this); - category->setDisplayName(tr("Startup")); + translateCategory(category, [] { return tr("Startup"); }); category->assignPages({ new AutostartOptionPage, new LauncherOptionPage, new LauncherOptionPage(QStringLiteral("Process"), tr("additional tool"), tr("Extra launcher")) #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD diff --git a/tray/CMakeLists.txt b/tray/CMakeLists.txt index 8fc78e8..c5257f1 100644 --- a/tray/CMakeLists.txt +++ b/tray/CMakeLists.txt @@ -104,7 +104,7 @@ find_package(${PACKAGE_NAMESPACE_PREFIX}c++utilities${CONFIGURATION_PACKAGE_SUFF use_cpp_utilities() # find qtutilities -find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.12.0 REQUIRED) +find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.13.0 REQUIRED) use_qt_utilities() # find backend libraries diff --git a/tray/gui/traywidget.cpp b/tray/gui/traywidget.cpp index 6f6d479..c46f547 100644 --- a/tray/gui/traywidget.cpp +++ b/tray/gui/traywidget.cpp @@ -20,6 +20,7 @@ // use meta-data of syncthingtray application here #include "resources/../../tray/resources/config.h" +#include "resources/../../tray/resources/qtconfig.h" #include "ui_traywidget.h" @@ -627,6 +628,14 @@ bool TrayWidget::event(QEvent *event) setLabelPixmaps(); setTrafficPixmaps(true); break; + case QEvent::LanguageChange: + m_ui->retranslateUi(this); + applyLauncherSettings(false, true, false); + handleStatusChanged(m_connection.status()); + if (m_menu && m_menu->icon()) { + m_menu->icon()->updateStatusIconAndText(); + } + break; default:; } return res; @@ -634,7 +643,12 @@ bool TrayWidget::event(QEvent *event) void TrayWidget::applySettingsOnAllInstances() { - Settings::values().qt.apply(); + auto &qtSettings = Settings::values().qt; + qtSettings.apply(); + if (qtSettings.hasLocaleChanged()) { + QtUtilities::TranslationFiles::clearTranslationFiles(); + LOAD_QT_TRANSLATIONS; + } for (TrayWidget *instance : s_instances) { instance->applySettings(); }