From dbc9327fc55302cc21ad7daac8a56b7a743a811b Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 7 Feb 2022 11:35:32 -0300 Subject: [i18n] store locale change in settings and retranslate app --- gui/main.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/gui/main.cpp b/gui/main.cpp index 1cb2d0e..affbabd 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -36,11 +36,11 @@ std::string getEnv(std::string const& key) return val == NULL ? std::string() : std::string(val); } -QString getAppName(QJsonValue info, QString provider) { +QString getProviderConfig(QJsonValue info, QString provider, QString key, QString defaultValue) { for (auto p: info.toArray()) { QJsonObject item = p.toObject(); - if (item["name"].toString().toLower() == provider.toLower()) { - return item["applicationName"].toString(); + if (item["name"].toString().toLower() == provider.toLower() && item[key].toString() != "") { + return item[key].toString(); } } return "BitmaskVPN"; @@ -101,9 +101,11 @@ int main(int argc, char **argv) { providers->loadJson(providerJsonBytes); QJsonValue defaultProvider = providers->json().object().value("default"); QJsonValue providersInfo = providers->json().object().value("providers"); - QString appName = getAppName(providersInfo, defaultProvider.toString()); + QString appName = getProviderConfig(providersInfo, defaultProvider.toString(), "applicationName", "BitmaskVPN"); + QString organizationDomain = getProviderConfig(providersInfo, defaultProvider.toString(), "providerURL", "riseup.net"); QApplication::setApplicationName(appName); + QApplication::setOrganizationDomain(organizationDomain); QCommandLineParser parser; parser.setApplicationDescription( @@ -203,12 +205,15 @@ int main(int argc, char **argv) { app.setWindowIcon(QIcon(":/vendor/riseup.svg")); } + QSettings settings; + QString locale = settings.value("locale", QLocale().name()).toString(); + settings.setValue("locale", locale); + /* load translations */ QTranslator translator; - translator.load(QLocale(), QLatin1String("main"), QLatin1String("_"), QLatin1String(":/i18n")); + translator.load(QLocale(locale), QLatin1String("main"), QLatin1String("_"), QLatin1String(":/i18n")); app.installTranslator(&translator); - QQmlApplicationEngine engine; QQmlContext *ctx = engine.rootContext(); @@ -247,6 +252,15 @@ int main(int argc, char **argv) { model->loadJson(js.toUtf8()); }); + QObject::connect(&backend, &Backend::localeChanged, [&app, &translator, &engine, &settings](QString locale) { + settings.setValue("locale", locale); + + app.removeTranslator(&translator); + translator.load(QLocale(locale), QLatin1String("main"), QLatin1String("_"), QLatin1String(":/i18n")); + app.installTranslator(&translator); + engine.retranslate(); + }); + /* connect quitDone signal, exit app */ QObject::connect(&backend, &Backend::quitDone, []() { QApplication::quit(); -- cgit v1.2.3