1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
#include <QSettings>
#include <QLocale>
#include <QApplication>
#include <QStringList>
#include <QFile>
#include "languageoptions.h"
LanguageOptions::LanguageOptions(QObject *parent)
: QObject(parent)
{
_defaultLanguage = "default";
addLanguage(_defaultLanguage, _defaultLanguage);
QSettings settings(QSettings::UserScope, "OpenMFG.com", "OpenRPT");
_selectedLanguage = settings.value("/OpenRPT/_selectedLanguage", _defaultLanguage).toString();
addLanguage("en", "English");
}
LanguageOptions::~LanguageOptions()
{
}
void LanguageOptions::addLanguage(QString languageID, QString languageTitle)
{
if(_languages.contains(languageID))
{
return;
}
QStringList content;
content << languageTitle;
_languages.insert(languageID,content);
}
void LanguageOptions::addTranslation(QString languageID, QString translationFile)
{
if(_languages.contains(languageID))
{
_languages[languageID] << translationFile;
}
}
void LanguageOptions::select(QString languageID)
{
_selectedLanguage = languageID;
QSettings settings(QSettings::UserScope, "OpenMFG.com", "OpenRPT");
settings.setValue("/OpenRPT/_selectedLanguage", _selectedLanguage);
}
void LanguageOptions::installLanguage(QString languageID)
{
QStringList content = _languages[languageID];
for (int i=1; i<content.size(); i++)
{
QTranslator *ptranslator = new QTranslator;
ptranslator->load(content[i]);
qApp->installTranslator(ptranslator);
}
// translation for Default title (can't do it before because the translations are not loaded)
_languages[_defaultLanguage][0] = tr("Default");
}
void LanguageOptions::installSelected(void)
{
installLanguage(_selectedLanguage);
}
void LanguageOptions::addTranslationToDefault(QString file)
{
/* check if we want a resource language translation */
if (file.startsWith(":")) {
/* check if have a lg_CO/file.qm file in the locales which would override resource */
QString base = QApplication::applicationDirPath() + "/locales/";
QString fname = file.right(file.length()-1);
QString locale = QLocale::system().name();
if (QFile::exists(base + locale + fname)) {
addTranslation(_defaultLanguage, base + locale + fname);
} else {
/* check if have a lg/file.qm file in the locales which would override resource */
locale = locale.left(2);
if (QFile::exists(base + locale +fname)) {
addTranslation(_defaultLanguage, base + locale + fname);
} else {
/* load default resource file */
addTranslation(_defaultLanguage, file);
}
}
} else {
/* load requested file */
addTranslation(_defaultLanguage, file);
}
}
QStringList LanguageOptions::languageTitlesList(void)
{
QStringList res;
foreach (QStringList value, _languages)
{
res << value[0];
}
return res;
}
QString LanguageOptions::selectedTitle()
{
return _languages.value(_selectedLanguage)[0];
}
void LanguageOptions::selectFromTitle(QString title)
{
QString id = _defaultLanguage;
QMapIterator<QString,QStringList> i(_languages);
while (i.hasNext())
{
i.next();
QString currentTitle = i.value()[0];
if(currentTitle==title) {
id = i.key();
break;
}
}
select(id);
}
|