diff options
| author | 2015-01-30 17:00:07 -0500 | |
|---|---|---|
| committer | 2015-01-30 17:00:07 -0500 | |
| commit | 016003905ca0e8e459e3dc33e786beda8ec92f45 (patch) | |
| tree | 34aba2d2e0d66fbf2c3821ee8358f56e40c4c95e /SQLiteStudio3/coreSQLiteStudio/translations.cpp | |
| parent | 724c012ada23ef480c61fe99e3c9784b91aeb1ca (diff) | |
Imported Upstream version 3.0.2upstream/3.0.2
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/translations.cpp')
| -rw-r--r-- | SQLiteStudio3/coreSQLiteStudio/translations.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations.cpp b/SQLiteStudio3/coreSQLiteStudio/translations.cpp new file mode 100644 index 0000000..56dc5f6 --- /dev/null +++ b/SQLiteStudio3/coreSQLiteStudio/translations.cpp @@ -0,0 +1,108 @@ +#include "translations.h" +#include "sqlitestudio.h" +#include <QTranslator> +#include <QCoreApplication> +#include <QDir> +#include <QDebug> +#include <QRegularExpression> + +QHash<QString,QTranslator*> SQLITESTUDIO_TRANSLATIONS; +QStringList SQLITESTUDIO_TRANSLATION_DIRS = QStringList({":/msg", ":/msg/translations", "msg", "translations"}); + +void loadTranslation(const QString& baseName) +{ + if (SQLITESTUDIO_TRANSLATIONS.contains(baseName)) + return; + + QTranslator* translator = new QTranslator(); + + QString fName; + bool res = false; + QString lang = SQLITESTUDIO->getCurrentLang(); + QStringList filters = QStringList({baseName+"_"+lang+".qm"}); + QDir dir; + + for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS) + { + dir = dirPath; + for (const QString& f : dir.entryList(filters)) + { + res = translator->load(f, dirPath); + if (res) + { + fName = dirPath + "/" + f; + break; + } + } + + if (res) + break; + } + + if (!res) + return; + + qApp->installTranslator(translator); + SQLITESTUDIO_TRANSLATIONS[baseName] = translator; + qDebug() << "Loaded:" << fName; +} + +void unloadTranslation(const QString& baseName) +{ + if (!SQLITESTUDIO_TRANSLATIONS.contains(baseName)) + return; + + QTranslator* trans = SQLITESTUDIO_TRANSLATIONS[baseName]; + SQLITESTUDIO_TRANSLATIONS.remove(baseName); + qApp->removeTranslator(trans); + delete trans; +} + +void loadTranslations(const QStringList& baseNames) +{ + for (const QString& name : baseNames) + loadTranslation(name); +} + +QStringList getAvailableTranslations() +{ + QSet<QString> locales; + QRegularExpression re("[^\\_]+\\_(\\w+)\\.qm"); + QRegularExpressionMatch match; + QDir dir; + QStringList filters = QStringList({"*_*.qm"}); + for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS) + { + dir = dirPath; + for (const QString& f : dir.entryList(filters)) + { + match = re.match(f); + if (!match.isValid()) + continue; + + locales << match.captured(1).toLower(); + } + } + locales << "en"; + + return locales.toList(); +} + +QMap<QString,QString> getAvailableLanguages() +{ + QMap<QString,QString> langs; + QStringList translations = getAvailableTranslations(); + QLocale locale; + QString langName; + for (const QString& trans : translations) + { + locale = QLocale(trans); + langName = locale.nativeLanguageName(); + if (langName.isEmpty()) + langName = trans; + + langs[langName] = trans; + } + + return langs; +} |
