mirror of
https://github.com/arcan1s/qtadds-language.git
synced 2025-07-10 04:15:51 +00:00
rewrite class, update to qt-5.5 (ref to
https://github.com/arcan1s/netctl-gui/issues/45)
This commit is contained in:
@ -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 */
|
||||||
|
56
language.cpp
56
language.cpp
@ -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;
|
||||||
}
|
}
|
||||||
|
12
language.h
12
language.h
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user