From 575dcbc4383c893c1858ad1f336282a06b02d986 Mon Sep 17 00:00:00 2001 From: a1ext Date: Sun, 20 Jan 2019 03:55:17 +0300 Subject: [PATCH] Translations: fixed getting of translation folders --- src/CutterApplication.cpp | 71 +++++++++---------- src/common/Configuration.cpp | 36 ++++++++-- src/common/Configuration.h | 1 + src/dialogs/WelcomeDialog.cpp | 1 + src/dialogs/preferences/PreferencesDialog.cpp | 1 + 5 files changed, 66 insertions(+), 44 deletions(-) diff --git a/src/CutterApplication.cpp b/src/CutterApplication.cpp index e2c62ea8c..5329acfce 100644 --- a/src/CutterApplication.cpp +++ b/src/CutterApplication.cpp @@ -237,56 +237,49 @@ bool CutterApplication::loadTranslations() const auto &allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry); + bool cutterTrLoaded = false; + for (const QLocale &it : allLocales) { const QString &langPrefix = it.bcp47Name(); if (langPrefix == language) { - QTranslator *t = new QTranslator; - QTranslator *qtBaseTranslator = new QTranslator; - QTranslator *qtTranslator = new QTranslator; - - const QString &cutterTranslationPath = QCoreApplication::applicationDirPath() + QDir::separator() - + QStringLiteral("translations"); - const QString &translationsPath(QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - - const QStringList &cutterTrPaths = { - cutterTranslationPath, - translationsPath, -#ifdef Q_OS_MAC - QStringLiteral("%1/../Resources/translations").arg(QCoreApplication::applicationDirPath()), -#endif // Q_OS_MAC - }; - - bool cutterTrLoaded = false; - for (const auto &trPath : cutterTrPaths) { - if (t->load(it, QLatin1String("cutter"), QLatin1String("_"), trPath)) { - installTranslator(t); - cutterTrLoaded = true; - break; - } - } - if (!cutterTrLoaded) { - qWarning() << "Cannot load Cutter's translation for " << language; - delete t; - } QApplication::setLayoutDirection(it.textDirection()); QLocale::setDefault(it); - if (qtTranslator->load(it, "qt", "_", translationsPath)) { - installTranslator(qtTranslator); - } - else { - delete qtTranslator; - } + QTranslator *trCutter = new QTranslator; + QTranslator *trQtBase = new QTranslator; + QTranslator *trQt = new QTranslator; - if (qtBaseTranslator->load(it, "qtbase", "_", translationsPath)) { - installTranslator(qtBaseTranslator); - } - else { - delete qtBaseTranslator; + const QStringList &cutterTrPaths = Config()->getTranslationsDirectories(); + + for (const auto &trPath : cutterTrPaths) { + if (trCutter && trCutter->load(it, QLatin1String("cutter"), QLatin1String("_"), trPath)) { + installTranslator(trCutter); + cutterTrLoaded = true; + trCutter = nullptr; + } + if (trQt && trQt->load(it, "qt", "_", trPath)) { + installTranslator(trQt); + trQt = nullptr; + } + + if (trQtBase && trQtBase->load(it, "qtbase", "_", trPath)) { + installTranslator(trQtBase); + trQtBase = nullptr; + } } + + if (trCutter) + delete trCutter; + if (trQt) + delete trQt; + if (trQtBase) + delete trQtBase; return true; } } + if (!cutterTrLoaded) { + qWarning() << "Cannot load Cutter's translation for " << language; + } return false; } \ No newline at end of file diff --git a/src/common/Configuration.cpp b/src/common/Configuration.cpp index e0a427966..5162062a6 100644 --- a/src/common/Configuration.cpp +++ b/src/common/Configuration.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "common/ColorSchemeFileSaver.h" @@ -462,10 +463,21 @@ void Configuration::setConfig(const QString &key, const QVariant &value) */ QStringList Configuration::getAvailableTranslations() { - QDir dir(QCoreApplication::applicationDirPath() + QDir::separator() + - "translations"); - QStringList fileNames = dir.entryList(QStringList("cutter_*.qm"), QDir::Files, - QDir::Name); + const auto &trDirs = getTranslationsDirectories(); + + QSet fileNamesSet; + for (const auto &trDir : trDirs) { + QDir dir(trDir); + if (!dir.exists()) + continue; + const QStringList &currTrFileNames = dir.entryList(QStringList("cutter_*.qm"), QDir::Files, + QDir::Name); + for (const auto &trFile : currTrFileNames) + fileNamesSet << trFile; + } + + QStringList fileNames = fileNamesSet.toList(); + qSort(fileNames); QStringList languages; QString currLanguageName; auto allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, @@ -483,7 +495,7 @@ QStringList Configuration::getAvailableTranslations() } } } - return languages << "English"; + return languages << QLatin1String("English"); } /*! @@ -500,3 +512,17 @@ bool Configuration::isFirstExecution() return true; } } + +QStringList Configuration::getTranslationsDirectories() const +{ + static const QString cutterTranslationPath = QCoreApplication::applicationDirPath() + QDir::separator() + + QLatin1String("translations"); + + return { + cutterTranslationPath, + QLibraryInfo::location(QLibraryInfo::TranslationsPath), +#ifdef Q_OS_MAC + QStringLiteral("%1/../Resources/translations").arg(QCoreApplication::applicationDirPath()), +#endif // Q_OS_MAC + }; +} diff --git a/src/common/Configuration.h b/src/common/Configuration.h index 4ce633c0b..273d3648c 100644 --- a/src/common/Configuration.h +++ b/src/common/Configuration.h @@ -108,6 +108,7 @@ class Configuration : public QObject void setConfig(const QString &key, const QVariant &value); bool isFirstExecution(); + QStringList getTranslationsDirectories() const; signals: void fontsUpdated(); diff --git a/src/dialogs/WelcomeDialog.cpp b/src/dialogs/WelcomeDialog.cpp index 18b4f5933..73ef178da 100644 --- a/src/dialogs/WelcomeDialog.cpp +++ b/src/dialogs/WelcomeDialog.cpp @@ -16,6 +16,7 @@ WelcomeDialog::WelcomeDialog(QWidget *parent) : ui(new Ui::WelcomeDialog) { ui->setupUi(this); + setWindowFlag(Qt::WindowContextHelpButtonHint, false); ui->logoSvgWidget->load(Config()->getLogoFile()); ui->versionLabel->setText("" + tr("Version ") + CUTTER_VERSION_FULL + ""); ui->themeComboBox->setCurrentIndex(Config()->getTheme()); diff --git a/src/dialogs/preferences/PreferencesDialog.cpp b/src/dialogs/preferences/PreferencesDialog.cpp index b076ce35b..1e8745272 100644 --- a/src/dialogs/preferences/PreferencesDialog.cpp +++ b/src/dialogs/preferences/PreferencesDialog.cpp @@ -20,6 +20,7 @@ PreferencesDialog::PreferencesDialog(QWidget *parent) { setAttribute(Qt::WA_DeleteOnClose); ui->setupUi(this); + setWindowFlag(Qt::WindowContextHelpButtonHint, false); QList prefs {