1 #include "translations.h" 2 #include "sqlitestudio.h" 3 #include <QTranslator> 4 #include <QCoreApplication> 5 #include <QDir> 6 #include <QDebug> 7 #include <QRegularExpression> 8 9 QHash<QString,QTranslator*> SQLITESTUDIO_TRANSLATIONS; 10 QStringList SQLITESTUDIO_TRANSLATION_DIRS = QStringList({"msg", "translations", ":/msg", ":/msg/translations"}); 11 loadTranslation(const QString & baseName)12void loadTranslation(const QString& baseName) 13 { 14 if (SQLITESTUDIO_TRANSLATIONS.contains(baseName)) 15 return; 16 17 QTranslator* translator = new QTranslator(); 18 19 QString fName; 20 bool res = false; 21 QString lang = SQLITESTUDIO->getCurrentLang(); 22 QStringList filters = QStringList({baseName+"_"+lang+".qm"}); 23 QDir dir; 24 25 for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS) 26 { 27 dir.setPath(dirPath); 28 for (const QString& f : dir.entryList(filters)) 29 { 30 res = translator->load(f, dirPath); 31 if (res) 32 { 33 fName = dirPath + "/" + f; 34 break; 35 } 36 } 37 38 if (res) 39 break; 40 } 41 42 if (!res) 43 return; 44 45 qApp->installTranslator(translator); 46 SQLITESTUDIO_TRANSLATIONS[baseName] = translator; 47 qDebug() << "Loaded:" << fName; 48 } 49 unloadTranslation(const QString & baseName)50void unloadTranslation(const QString& baseName) 51 { 52 if (!SQLITESTUDIO_TRANSLATIONS.contains(baseName)) 53 return; 54 55 QTranslator* trans = SQLITESTUDIO_TRANSLATIONS[baseName]; 56 SQLITESTUDIO_TRANSLATIONS.remove(baseName); 57 qApp->removeTranslator(trans); 58 delete trans; 59 } 60 loadTranslations(const QStringList & baseNames)61void loadTranslations(const QStringList& baseNames) 62 { 63 for (const QString& name : baseNames) 64 loadTranslation(name); 65 } 66 getAvailableTranslations()67QStringList getAvailableTranslations() 68 { 69 QSet<QString> locales; 70 QRegularExpression re("[^\\_]+\\_(\\w+)\\.qm"); 71 QRegularExpressionMatch match; 72 QDir dir; 73 QStringList filters = QStringList({"*_*.qm"}); 74 for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS) 75 { 76 dir.setPath(dirPath); 77 for (const QString& f : dir.entryList(filters)) 78 { 79 match = re.match(f); 80 if (!match.isValid()) 81 continue; 82 83 locales << match.captured(1).toLower(); 84 } 85 } 86 locales << "en"; 87 88 return locales.values(); 89 } 90 getAvailableLanguages()91QMap<QString,QString> getAvailableLanguages() 92 { 93 QMap<QString,QString> langs; 94 QStringList translations = getAvailableTranslations(); 95 QLocale locale; 96 QString langName; 97 for (const QString& trans : translations) 98 { 99 locale = QLocale(trans); 100 langName = locale.nativeLanguageName(); 101 if (langName.isEmpty()) 102 langName = trans; 103 104 langs[langName] = trans; 105 } 106 107 return langs; 108 } 109 setDefaultLanguage(const QString & lang)110void setDefaultLanguage(const QString& lang) 111 { 112 CFG_CORE.General.Language.set(lang); 113 } 114 getConfigLanguageDefault()115QString getConfigLanguageDefault() 116 { 117 return CFG_CORE.General.Language.getDefultValue().toString(); 118 } 119