diff --git a/Qv2ray.pro b/Qv2ray.pro index c61ffce1..0a044058 100644 --- a/Qv2ray.pro +++ b/Qv2ray.pro @@ -143,6 +143,7 @@ Qv2rayAddSource(common, _, HTTPRequestHelper, cpp, hpp) Qv2rayAddSource(common, _, LogHighlighter, cpp, hpp) Qv2rayAddSource(common, _, QJsonModel, cpp, hpp) Qv2rayAddSource(common, _, QvHelpers, cpp, hpp) +Qv2rayAddSource(common, _, QvTranslator, hpp) Qv2rayAddSource(components, autolaunch, QvAutoLaunch, cpp, hpp) Qv2rayAddSource(components, pac, QvGFWPACConverter, cpp) Qv2rayAddSource(components, pac, QvPACHandler, cpp, hpp) diff --git a/src/base/GlobalInstances.hpp b/src/base/GlobalInstances.hpp index 569dac45..e58a0d24 100644 --- a/src/base/GlobalInstances.hpp +++ b/src/base/GlobalInstances.hpp @@ -22,5 +22,5 @@ namespace Qv2ray inline base::config::Qv2rayConfig GlobalConfig = base::config::Qv2rayConfig(); inline base::QvStartupOptions StartupOption = base::QvStartupOptions(); // - inline QTranslator *Qv2rayTranslator; + inline std::unique_ptr Qv2rayTranslator; } diff --git a/src/common/QvHelpers.cpp b/src/common/QvHelpers.cpp index 32eba204..7d1791ba 100644 --- a/src/common/QvHelpers.cpp +++ b/src/common/QvHelpers.cpp @@ -160,13 +160,6 @@ namespace Qv2ray::common return QString::fromStdString(_name); } - QTranslator *getTranslator(const QString &lang) - { - QTranslator *translator = new QTranslator(); - translator->load(lang + ".qm", ":/translations/"); - return translator; - } - /// This returns a file name without extensions. void DeducePossibleFileName(const QString &baseDir, QString *fileName, const QString &extension) { diff --git a/src/common/QvHelpers.hpp b/src/common/QvHelpers.hpp index fa6d88af..8e7a0c99 100644 --- a/src/common/QvHelpers.hpp +++ b/src/common/QvHelpers.hpp @@ -7,7 +7,6 @@ namespace Qv2ray::common { - QTranslator *getTranslator(const QString &lang); QStringList GetFileList(QDir dir); QString Base64Encode(QString string); QString Base64Decode(QString string); diff --git a/src/common/QvTranslator.hpp b/src/common/QvTranslator.hpp new file mode 100644 index 00000000..23002b28 --- /dev/null +++ b/src/common/QvTranslator.hpp @@ -0,0 +1,21 @@ +#pragma once +#include +#include +#include + +namespace Qv2ray::common +{ + class QvTranslator + { + public: + QvTranslator(const QString &lang) + { + QTranslator *translator = new QTranslator(); + translator->load(lang + ".qm", ":/translations/"); + this->pTranslator.reset(translator); + } + + public: + std::unique_ptr pTranslator; + }; +} // namespace Qv2ray::common diff --git a/src/main.cpp b/src/main.cpp index e974b77e..7d107138 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include "ui/w_MainWindow.hpp" #include "common/QvHelpers.hpp" #include "common/CommandArgs.hpp" +#include "common/QvTranslator.hpp" #ifdef Q_OS_UNIX // For unix root user check @@ -222,7 +223,7 @@ int main(int argc, char *argv[]) std::unique_ptr consoleApp(new QCoreApplication(argc, argv)); // // Install a default translater. From the OS/DE - consoleApp->installTranslator(getTranslator(QLocale::system().name())); + consoleApp->installTranslator(QvTranslator(QLocale::system().name()).pTranslator.get()); QvCommandArgParser parser; QString errorMessage; @@ -280,10 +281,10 @@ int main(int argc, char *argv[]) // Not duplicated. // Install a default translater. From the OS/DE auto _lang = QLocale::system().name(); - Qv2rayTranslator = getTranslator(_lang); + Qv2rayTranslator = std::move(QvTranslator(_lang).pTranslator); // // Do not install en-US as it's the default language. - bool _result_ = _qApp.installTranslator(Qv2rayTranslator); + bool _result_ = _qApp.installTranslator(Qv2rayTranslator.get()); LOG(UI, "Installing a tranlator from OS: " + _lang + " -- " + (_result_ ? "OK" : "Failed")) // LOG("LICENCE", NEWLINE "This program comes with ABSOLUTELY NO WARRANTY." NEWLINE @@ -350,7 +351,7 @@ int main(int argc, char *argv[]) // Load config object from upgraded config QJsonObject auto confObject = StructFromJsonString(JsonToString(conf)); // Remove system translator, for loading custom translations. - qApp->removeTranslator(Qv2rayTranslator); + qApp->removeTranslator(Qv2rayTranslator.get()); LOG(INIT, "Removed system translations") if (confObject.uiConfig.language.isEmpty()) { @@ -359,9 +360,9 @@ int main(int argc, char *argv[]) confObject.uiConfig.language = "en-US"; } - Qv2rayTranslator = getTranslator(confObject.uiConfig.language); + Qv2rayTranslator = std::move(QvTranslator(confObject.uiConfig.language).pTranslator); - if (qApp->installTranslator(Qv2rayTranslator)) { + if (qApp->installTranslator(Qv2rayTranslator.get())) { LOG(INIT, "Successfully installed a translator for " + confObject.uiConfig.language) } else { // Do not translate these..... diff --git a/src/ui/w_PreferencesWindow.cpp b/src/ui/w_PreferencesWindow.cpp index 9d0f0417..843fac76 100644 --- a/src/ui/w_PreferencesWindow.cpp +++ b/src/ui/w_PreferencesWindow.cpp @@ -12,6 +12,7 @@ #include "core/kernel/KernelInteractions.hpp" #include "components/plugins/toolbar/QvToolbar.hpp" #include "components/autolaunch/QvAutoLaunch.hpp" +#include #define LOADINGCHECK if(!finishedLoading) return; #define NEEDRESTART if(finishedLoading) IsConnectionPropertyChanged = true; @@ -233,11 +234,11 @@ void PreferencesWindow::on_buttonBox_accepted() this->exec(); } else { if (CurrentConfig.uiConfig.language != GlobalConfig.uiConfig.language) { - qApp->removeTranslator(Qv2rayTranslator); - Qv2rayTranslator = getTranslator(CurrentConfig.uiConfig.language); + qApp->removeTranslator(Qv2rayTranslator.get()); + Qv2rayTranslator = std::move(QvTranslator(CurrentConfig.uiConfig.language).pTranslator); // Install translator - if (!qApp->installTranslator(Qv2rayTranslator)) { + if (!qApp->installTranslator(Qv2rayTranslator.get())) { LOG(UI, "Failed to translate UI to: " + CurrentConfig.uiConfig.language) } else { messageBus.EmitGlobalSignal(QvMessage::RETRANSLATE);