From 10684b6d82f1843eff3921da40802d335fb3cf5c Mon Sep 17 00:00:00 2001 From: "Felix (xq) Queißner" Date: Wed, 17 Mar 2021 11:54:43 +0100 Subject: Further improves localization (#191). Allows switching and setting the chosen localization properly. --- src/dialogs/certificateiodialog.cpp | 7 +++ src/dialogs/certificatemanagementdialog.cpp | 6 +++ src/dialogs/certificateselectiondialog.cpp | 7 +++ src/dialogs/newidentitiydialog.cpp | 6 +++ src/dialogs/settingsdialog.cpp | 44 ++++++++++++++++++ src/dialogs/settingsdialog.hpp | 6 +++ src/dialogs/settingsdialog.ui | 70 ++++++++++++++++------------- 7 files changed, 116 insertions(+), 30 deletions(-) (limited to 'src/dialogs') diff --git a/src/dialogs/certificateiodialog.cpp b/src/dialogs/certificateiodialog.cpp index 75b9775..1f2b975 100644 --- a/src/dialogs/certificateiodialog.cpp +++ b/src/dialogs/certificateiodialog.cpp @@ -1,5 +1,6 @@ #include "certificateiodialog.hpp" #include "ui_certificateiodialog.h" +#include "kristall.hpp" #include #include @@ -11,6 +12,12 @@ CertificateIoDialog::CertificateIoDialog(QWidget *parent) : { ui->setupUi(this); + connect( // connect with "this" as context, so the connection will die when the window is destroyed + kristall::globals().localization.get(), &Localization::translationChanged, + this, [this]() { this->ui->retranslateUi(this); }, + Qt::DirectConnection + ); + this->ui->key_type->clear(); this->ui->key_type->addItem("RSA", QVariant::fromValue(QSsl::Rsa)); this->ui->key_type->addItem("ECDSA", QVariant::fromValue(QSsl::Ec)); diff --git a/src/dialogs/certificatemanagementdialog.cpp b/src/dialogs/certificatemanagementdialog.cpp index 9b43ba7..e2db96b 100644 --- a/src/dialogs/certificatemanagementdialog.cpp +++ b/src/dialogs/certificatemanagementdialog.cpp @@ -17,6 +17,12 @@ CertificateManagementDialog::CertificateManagementDialog(QWidget *parent) : { ui->setupUi(this); + connect( // connect with "this" as context, so the connection will die when the window is destroyed + kristall::globals().localization.get(), &Localization::translationChanged, + this, [this]() { this->ui->retranslateUi(this); }, + Qt::DirectConnection + ); + this->ui->certificates->setModel(&identity_set); this->ui->certificates->expandAll(); diff --git a/src/dialogs/certificateselectiondialog.cpp b/src/dialogs/certificateselectiondialog.cpp index 4d7d5ff..334fd7c 100644 --- a/src/dialogs/certificateselectiondialog.cpp +++ b/src/dialogs/certificateselectiondialog.cpp @@ -14,6 +14,13 @@ CertificateSelectionDialog::CertificateSelectionDialog(QWidget *parent) : ui(new Ui::CertificateSelectionDialog) { ui->setupUi(this); + + connect( // connect with "this" as context, so the connection will die when the window is destroyed + kristall::globals().localization.get(), &Localization::translationChanged, + this, [this]() { this->ui->retranslateUi(this); }, + Qt::DirectConnection + ); + this->ui->server_request->setVisible(false); this->ui->certificates->setModel(&kristall::globals().identities); diff --git a/src/dialogs/newidentitiydialog.cpp b/src/dialogs/newidentitiydialog.cpp index 567fc7d..dc22e5f 100644 --- a/src/dialogs/newidentitiydialog.cpp +++ b/src/dialogs/newidentitiydialog.cpp @@ -13,6 +13,12 @@ NewIdentitiyDialog::NewIdentitiyDialog(QWidget *parent) : { ui->setupUi(this); + connect( // connect with "this" as context, so the connection will die when the window is destroyed + kristall::globals().localization.get(), &Localization::translationChanged, + this, [this]() { this->ui->retranslateUi(this); }, + Qt::DirectConnection + ); + ui->display_name->setText("Unnamed"); ui->common_name->setText("Unnamed"); ui->expiration_date->setDate(QDate::currentDate().addYears(1)); diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp index c97d74c..19b0fd9 100644 --- a/src/dialogs/settingsdialog.cpp +++ b/src/dialogs/settingsdialog.cpp @@ -21,6 +21,12 @@ SettingsDialog::SettingsDialog(QWidget *parent) : { ui->setupUi(this); + connect( // connect with "this" as context, so the connection will die when the window is destroyed + kristall::globals().localization.get(), &Localization::translationChanged, + this, [this]() { this->ui->retranslateUi(this); }, + Qt::DirectConnection + ); + static_assert(DocumentStyle::Fixed == 0); static_assert(DocumentStyle::AutoDarkTheme == 1); static_assert(DocumentStyle::AutoLightTheme == 2); @@ -103,6 +109,11 @@ SettingsDialog::SettingsDialog(QWidget *parent) : this->ui->style_scroll_layout->minimumSize().width() + this->ui->style_scroll_area->verticalScrollBar()->sizeHint().width()); }); + + this->ui->selected_language->clear(); + this->ui->selected_language->addItem(QIcon(), tr("System language"), QString("")); + this->ui->selected_language->addItem(QIcon(":/icons/languages/en.svg"), QLocale("en").nativeLanguageName(), QString("en")); + this->ui->selected_language->addItem(QIcon(":/icons/languages/ru.svg"), QLocale("ru").nativeLanguageName(), QString("ru")); } SettingsDialog::~SettingsDialog() @@ -387,6 +398,32 @@ void SettingsDialog::setOptions(const GenericSettings &options) } } +std::optional SettingsDialog::locale() const +{ + QString locale_str = this->ui->selected_language->currentData().toString(); + if(locale_str.isEmpty()) + return std::nullopt; + else + return QLocale(locale_str); +} + +void SettingsDialog::setLocale(std::optional locale) +{ + if(locale == std::nullopt) + { + this->ui->selected_language->setCurrentIndex(0); + } + else + { + switch(locale->language()) + { + default: this->ui->selected_language->setCurrentIndex(0); break; + case QLocale::English: this->ui->selected_language->setCurrentIndex(1); break; + case QLocale::Russian: this->ui->selected_language->setCurrentIndex(2); break; + } + } +} + GenericSettings SettingsDialog::options() const { return this->current_options; @@ -988,3 +1025,10 @@ void SettingsDialog::on_session_restore_behaviour_currentIndexChanged(int index) { this->current_options.session_restore_behaviour = GenericSettings::SessionRestoreBehaviour(this->ui->session_restore_behaviour->itemData(index).toInt()); } + +void SettingsDialog::on_selected_language_currentIndexChanged(int index) +{ + auto const language_id = this->ui->selected_language->itemData(index, Qt::UserRole).toString(); + + kristall::globals().localization->translate(QLocale(language_id)); +} diff --git a/src/dialogs/settingsdialog.hpp b/src/dialogs/settingsdialog.hpp index 97b1549..9176cea 100644 --- a/src/dialogs/settingsdialog.hpp +++ b/src/dialogs/settingsdialog.hpp @@ -2,6 +2,7 @@ #define SETTINGSDIALOG_HPP #include +#include #include "renderers/geminirenderer.hpp" #include "protocolsetup.hpp" @@ -39,6 +40,9 @@ public: GenericSettings options() const; void setOptions(GenericSettings const & options); + std::optional locale() const; + void setLocale(std::optional locale); + private slots: void on_std_change_font_clicked(); @@ -178,6 +182,8 @@ private slots: void on_session_restore_behaviour_currentIndexChanged(int index); + void on_selected_language_currentIndexChanged(int index); + private: void reloadStylePreview(); diff --git a/src/dialogs/settingsdialog.ui b/src/dialogs/settingsdialog.ui index cfcd44f..45d9787 100644 --- a/src/dialogs/settingsdialog.ui +++ b/src/dialogs/settingsdialog.ui @@ -32,42 +32,42 @@ Generic - + Start Page: - + about://blank - + Search engine: - + true - + Additional toolbar buttons - + @@ -99,54 +99,54 @@ - + Startup Behaviour - + - + UI Theme - + - + Icon Theme - + - + UI Density - + - + Enabled Protocols - + @@ -191,14 +191,14 @@ - + Unknown Scheme - + @@ -222,38 +222,38 @@ - + Max. Number of Redirections - + 5 - + Redirection Handling - + - + Network Timeout - + ms @@ -266,6 +266,16 @@ + + + + Language + + + + + + @@ -1651,14 +1661,14 @@ - - - - - - + + + + + + -- cgit v1.2.3