Dynamically retranslate some aspects of the UI

There are still many places missing but this is a first step.
This commit is contained in:
Martchus 2023-07-03 00:56:19 +02:00
parent 10aafceb68
commit 4effd6045b
6 changed files with 29 additions and 11 deletions

View File

@ -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

View File

@ -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
,

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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();
}