From 016003905ca0e8e459e3dc33e786beda8ec92f45 Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Fri, 30 Jan 2015 17:00:07 -0500 Subject: Imported Upstream version 3.0.2 --- SQLiteStudio3/coreSQLiteStudio/translations.cpp | 108 ++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 SQLiteStudio3/coreSQLiteStudio/translations.cpp (limited to 'SQLiteStudio3/coreSQLiteStudio/translations.cpp') 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 +#include +#include +#include +#include + +QHash 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 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 getAvailableLanguages() +{ + QMap 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; +} -- cgit v1.2.3