X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fquassel.cpp;h=35c674b002da345fcb04f2a348426bd223023ff6;hb=c7724e5b1404e82ce3b0d5a96b7e1f260e7dc212;hp=5444979e9665a311e8084c0ac7d4b882ddf41f7b;hpb=4261ffff050064aebc8b4d0566886c3ef7352cfa;p=quassel.git diff --git a/src/common/quassel.cpp b/src/common/quassel.cpp index 5444979e..35c674b0 100644 --- a/src/common/quassel.cpp +++ b/src/common/quassel.cpp @@ -25,9 +25,9 @@ #include #include #include -#include -#include +#include #include +#include #include "message.h" #include "identity.h" @@ -40,6 +40,7 @@ Quassel::BuildInfo Quassel::_buildInfo; AbstractCliParser *Quassel::_cliParser = 0; Quassel::RunMode Quassel::_runMode; QString Quassel::_configDirPath; +QString Quassel::_translationDirPath; QStringList Quassel::_dataDirPaths; bool Quassel::_initialized = false; bool Quassel::DEBUG = false; @@ -334,3 +335,42 @@ QString Quassel::findDataFilePath(const QString &fileName) { } return QString(); } + +void Quassel::loadTranslation(const QLocale &locale) { + if(_translationDirPath.isEmpty()) { + // We support only one translation dir; fallback mechanisms wouldn't work else. + // This means that if we have a $data/i18n dir, the internal :/i18n resource won't be considered. + foreach(const QString &dir, dataDirPaths()) { + if(QFile::exists(dir + "translations/")) { + _translationDirPath = dir + "translations/"; + break; + } + } + if(_translationDirPath.isEmpty()) + _translationDirPath = ":/i18n/"; + } + + QTranslator *qtTranslator = QCoreApplication::instance()->findChild("QtTr"); + QTranslator *quasselTranslator = QCoreApplication::instance()->findChild("QuasselTr"); + + if(!qtTranslator) { + qtTranslator = new QTranslator(qApp); + qtTranslator->setObjectName("QtTr"); + qApp->installTranslator(qtTranslator); + } + if(!quasselTranslator) { + quasselTranslator = new QTranslator(qApp); + quasselTranslator->setObjectName("QuasselTr"); + qApp->installTranslator(quasselTranslator); + } + + QLocale::setDefault(locale); + + if(locale.language() == QLocale::C) + return; + + bool success = qtTranslator->load(QString("qt_%1").arg(locale.name()), _translationDirPath); + if(!success) + qtTranslator->load(QString("qt_%1").arg(locale.name()), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + quasselTranslator->load(QString("quassel_%1").arg(locale.name()), _translationDirPath); +}