rewrite class, update to qt-5.5 (ref to

https://github.com/arcan1s/netctl-gui/issues/45)
This commit is contained in:
arcan1s
2015-06-26 02:58:27 +03:00
parent 204943574a
commit 319125b1fa
3 changed files with 42 additions and 28 deletions

View File

@ -9,6 +9,8 @@
#define LANGUAGES "en" #define LANGUAGES "en"
// language key in the configuration file // language key in the configuration file
#define LANGUAGE_KEY "LANGUAGE" #define LANGUAGE_KEY "LANGUAGE"
// name of config section in the file if any
#define LANGUAGE_SECTION "Common"
#endif /* LANGUAGE_CONFIG_H */ #endif /* LANGUAGE_CONFIG_H */

View File

@ -21,11 +21,18 @@
#include <QFile> #include <QFile>
#include <QLocale> #include <QLocale>
#include <QSettings> #include <QSettings>
#include <QRegExp>
#include "config.h" #include "config.h"
Language::Language() Language::Language(QObject *parent)
: QObject(parent)
{
}
Language::~Language()
{ {
} }
@ -33,30 +40,33 @@ Language::Language()
QString Language::checkLanguage(const QString language) QString Language::checkLanguage(const QString language)
{ {
QStringList availableLanguages = getAvailableLanguages(); QStringList availableLanguages = getAvailableLanguages();
if (availableLanguages.count() == 0) return QString(""); if (availableLanguages.isEmpty()) return QString();
for (int i=0; i<availableLanguages.count(); i++)
if (language == availableLanguages[i])
return availableLanguages[i];
for (int i=0; i<availableLanguages.count(); i++)
if (language.contains(availableLanguages[i] + QChar('_')))
return availableLanguages[i];
return availableLanguages[0]; QStringList filtered = availableLanguages.filter(language);
filtered.append(availableLanguages.filter(QRegExp(QString("^%1").arg(language.split(QChar('_'))[0]))));
if (filtered.isEmpty())
return availableLanguages[0];
else
return filtered[0];
} }
QString Language::defineLanguage(const QString configPath, const QString options) QString Language::defineLanguage(const QString configPath, const QString options)
{ {
QMap<QString, QString> optionsDict = parseOptions(options); // create instance
if (optionsDict.contains(QString(LANGUAGE_KEY))) Language *langObject = new Language(nullptr);
if (getAvailableLanguages().contains(optionsDict[QString(LANGUAGE_KEY)]))
return optionsDict[QString(LANGUAGE_KEY)];
QString language; // define language
language = defineLanguageFromFile(configPath); QString language = langObject->parseOptions(options);
if (language.isEmpty()) if (language.isEmpty())
language = defineLanguageFromLocale(); language = langObject->defineLanguageFromFile(configPath);
language = checkLanguage(language); if (language.isEmpty())
language = langObject->defineLanguageFromLocale();
language = langObject->checkLanguage(language);
// clear
delete langObject;
return language; return language;
} }
@ -66,7 +76,7 @@ QString Language::defineLanguageFromFile(const QString configPath)
{ {
QSettings settings(configPath, QSettings::IniFormat); QSettings settings(configPath, QSettings::IniFormat);
settings.beginGroup("Common"); settings.beginGroup(QString(LANGUAGE_SECTION));
QString language = settings.value(QString(LANGUAGE_KEY), QString()).toString(); QString language = settings.value(QString(LANGUAGE_KEY), QString()).toString();
settings.endGroup(); settings.endGroup();
@ -86,14 +96,14 @@ QStringList Language::getAvailableLanguages()
} }
QMap<QString, QString> Language::parseOptions(const QString options) QString Language::parseOptions(const QString options)
{ {
QMap<QString, QString> optionsDict; QString language;
for (int i=0; i<options.split(QChar(',')).count(); i++) { for (int i=0; i<options.split(QChar(',')).count(); i++) {
if (options.split(QChar(','))[i].split(QChar('=')).count() < 2) continue; if (options.split(QChar(','))[i].split(QChar('=')).count() < 2) continue;
optionsDict[options.split(QChar(','))[i].split(QChar('='))[0]] = if (options.split(QChar(','))[i].split(QChar('='))[0] != QString(LANGUAGE_KEY)) continue;
options.split(QChar(','))[i].split(QChar('='))[1]; language = options.split(QChar(','))[i].split(QChar('='))[1];
} }
return optionsDict; return language;
} }

View File

@ -19,6 +19,7 @@
#define LANGUAGE_H #define LANGUAGE_H
#include <QStringList> #include <QStringList>
#include <QObject>
class Language : public QObject class Language : public QObject
@ -26,16 +27,17 @@ class Language : public QObject
Q_OBJECT Q_OBJECT
public: public:
explicit Language(); explicit Language(QObject *parent);
static QString checkLanguage(const QString language); virtual ~Language();
static QString defineLanguage(const QString configPath, static QString defineLanguage(const QString configPath,
const QString options = QString("OPTIONS")); const QString options = QString("OPTIONS"));
static QString defineLanguageFromFile(const QString configPath);
static QString defineLanguageFromLocale();
static QStringList getAvailableLanguages(); static QStringList getAvailableLanguages();
private: private:
static QMap<QString, QString> parseOptions(const QString options); QString checkLanguage(const QString language);
QString defineLanguageFromFile(const QString configPath);
QString defineLanguageFromLocale();
QString parseOptions(const QString options);
}; };