diff options
Diffstat (limited to 'src/sdk/installerbase.cpp')
-rw-r--r-- | src/sdk/installerbase.cpp | 104 |
1 files changed, 58 insertions, 46 deletions
diff --git a/src/sdk/installerbase.cpp b/src/sdk/installerbase.cpp index 77b37ea09..8d7518fcf 100644 --- a/src/sdk/installerbase.cpp +++ b/src/sdk/installerbase.cpp @@ -61,6 +61,7 @@ #include <kdrunoncechecker.h> #include <kdupdaterfiledownloaderfactory.h> +#include <QDirIterator> #include <QtCore/QTranslator> #include <QMessageBox> @@ -105,10 +106,10 @@ int main(int argc, char *argv[]) #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) std::string standardString; std::string cleanLooks ="-style=cleanlooks"; - std::ifstream input("/etc/lsb-release"); + std::ifstream input("/etc/os-release"); bool isUbuntu = false; while (std::getline(input, standardString)) { - if (standardString == "DISTRIB_ID=Ubuntu") + if (standardString == "ID=ubuntu") isUbuntu = true; } @@ -248,43 +249,16 @@ int main(int argc, char *argv[]) QInstaller::setVerbose(true); } - // install the default translator - const QString localeFile = - QString::fromLatin1(":/translations/qt_%1").arg(QLocale::system().name()); - { - QTranslator* const translator = new QTranslator(&app); - translator->load(localeFile); - app.installTranslator(translator); - } - - // install English translation as fallback so that correct license button text is used - const QString enLocaleFile = QString::fromLatin1(":/translations/en_us.qm"); - if (QFile::exists(enLocaleFile)) { - QTranslator* const translator = new QTranslator(&app); - translator->load(enLocaleFile); - app.installTranslator(translator); - } - - // install "our" default translator - const QString ourLocaleFile = - QString::fromLatin1(":/translations/%1.qm").arg(QLocale().name().toLower()); - if (QFile::exists(ourLocaleFile)) { - QTranslator* const translator = new QTranslator(&app); - translator->load(ourLocaleFile); - app.installTranslator(translator); - } - if (QInstaller::isVerbose()) { qDebug() << VERSION; qDebug() << "Arguments:" << args; - qDebug() << "Language: " << QLocale().name().toLower(); qDebug() << "Resource tree before loading the in-binary resource:"; + qDebug() << "Language: " << QLocale().uiLanguages().value(0, QLatin1String("No UI language set")); - QDir dir(QLatin1String(":/")); - foreach (const QString &i, dir.entryList()) { - const QByteArray ba = i.toUtf8(); - qDebug().nospace() << " :/" << ba.constData(); - } + QDirIterator it(QLatin1String(":/"), QDir::NoDotAndDotDot | QDir::AllEntries | QDir::Hidden, + QDirIterator::Subdirectories); + while (it.hasNext()) + qDebug() << QString::fromLatin1(" %1").arg(it.next()); } // register custom operations before reading the binary content cause they may used in @@ -322,18 +296,6 @@ int main(int argc, char *argv[]) // instantiate the installer we are actually going to use QInstaller::PackageManagerCore core(content.magicMarker(), content.performedOperations()); - if (QInstaller::isVerbose()) { - qDebug() << "Resource tree after loading the in-binary resource:"; - - QDir dir = QDir(QLatin1String(":/")); - foreach (const QString &i, dir.entryList()) - qDebug() << QString::fromLatin1(" :/%1").arg(i); - - dir = QDir(QLatin1String(":/metadata/")); - foreach (const QString &i, dir.entryList()) - qDebug() << QString::fromLatin1(" :/metadata/%1").arg(i); - } - QString controlScript; QHash<QString, QString> params; for (int i = 1; i < args.size(); ++i) { @@ -398,6 +360,56 @@ int main(int argc, char *argv[]) } } + // this needs to happen after we parse the arguments, but before we use the actual resources + const QString newDefaultResource = core.value(QString::fromLatin1("DefaultResourceReplacement")); + if (!newDefaultResource.isEmpty()) + content.registerAsDefaultQResource(newDefaultResource); + + if (QInstaller::isVerbose()) { + qDebug() << "Resource tree after loading the in-binary resource:"; + QDirIterator it(QLatin1String(":/"), QDir::NoDotAndDotDot | QDir::AllEntries | QDir::Hidden, + QDirIterator::Subdirectories); + while (it.hasNext()) + qDebug() << QString::fromLatin1(" %1").arg(it.next()); + } + + const QString directory = QLatin1String(":/translations"); + const QStringList translations = core.settings().translations(); + + // install the default Qt translator + QScopedPointer<QTranslator> translator(new QTranslator(&app)); + foreach (const QLocale locale, QLocale().uiLanguages()) { + // As there is no qt_en.qm, we simply end the search when the next + // preferred language is English. + if (locale.language() == QLocale::English) + break; + if (translator->load(locale, QLatin1String("qt"), QString::fromLatin1("_"), directory)) { + app.installTranslator(translator.take()); + break; + } + } + + translator.reset(new QTranslator(&app)); + // install English translation as fallback so that correct license button text is used + if (translator->load(QLatin1String("en_us"), directory)) + app.installTranslator(translator.take()); + + if (translations.isEmpty()) { + translator.reset(new QTranslator(&app)); + foreach (const QLocale locale, QLocale().uiLanguages()) { + if (translator->load(locale, QLatin1String(""), QLatin1String(""), directory)) { + app.installTranslator(translator.take()); + break; + } + } + } else { + foreach (const QString &translation, translations) { + translator.reset(new QTranslator(&app)); + if (translator->load(translation, QLatin1String(":/translations"))) + app.installTranslator(translator.take()); + } + } + // Create the wizard gui TabController controller(0); controller.setManager(&core); |