diff --git a/locales.cpp b/locales.cpp index c3d21ef..e94c59f 100644 --- a/locales.cpp +++ b/locales.cpp @@ -12,21 +12,35 @@ #include #include #include -#include #include -#include #include "params.h" using namespace QuasarAppUtils; -bool Locales::setLocalePrivate(const QLocale &locale) { - removeOldTranslation(); - QFileInfoList qmFiles; +bool QuasarAppUtils::Locales::findQm(const QString& localePrefix, + QFileInfoList &qmFiles) { for (const auto &location: qAsConst(_locations)) { - qmFiles += QDir(location).entryInfoList({"*" + locale.bcp47Name() + "*.qm"}, QDir::Files); + qmFiles += QDir(location).entryInfoList({"*" + localePrefix + "*.qm"}, QDir::Files); } + return qmFiles.size(); +} + +bool Locales::setLocalePrivate(const QLocale &locale) { + removeOldTranslation(); + + const auto list = locale.uiLanguages(); + QFileInfoList qmFiles; + + auto it = list.begin(); + while (it != list.end() && !findQm(*it, qmFiles)) { + it++; + } + + if (qmFiles.isEmpty()) + return false; + for (const auto & file: qAsConst(qmFiles)) { auto translator = new QTranslator(); diff --git a/locales.h b/locales.h index 8db21a4..8e094ed 100644 --- a/locales.h +++ b/locales.h @@ -14,6 +14,7 @@ #include #include #include +#include class QCoreApplication; class QTranslator; @@ -90,6 +91,9 @@ private: const QLocale ¤tLocatePrivate() const; + bool findQm(const QString &localePrefix, + QFileInfoList& result); + QLocale _currentLocate; QSet _locations; QList _translations;