Load Qt's default translations if available, fixes BR #400
authorManuel Nickschas <sputnick@quassel-irc.org>
Sat, 15 Nov 2008 22:33:16 +0000 (23:33 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sat, 15 Nov 2008 22:33:16 +0000 (23:33 +0100)
src/common/quassel.cpp
src/common/quassel.h
src/common/util.cpp
src/core/core.cpp

index 29b6e55..773f409 100644 (file)
@@ -77,7 +77,6 @@ bool Quassel::init() {
   qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
 
   registerMetaTypes();
-  setupTranslations();
 
   QCoreApplication::setApplicationName(buildInfo().applicationName);
   QCoreApplication::setOrganizationName(buildInfo().organizationName);
@@ -130,21 +129,6 @@ void Quassel::registerMetaTypes() {
   qRegisterMetaTypeStreamOperators<MsgId>("MsgId");
 }
 
-void Quassel::setupTranslations() {
-  // Set up i18n support
-  QLocale locale = QLocale::system();
-
-  QTranslator *qtTranslator = new QTranslator(qApp);
-  qtTranslator->setObjectName("QtTr");
-  qtTranslator->load(QString(":i18n/qt_%1").arg(locale.name()));
-  qApp->installTranslator(qtTranslator);
-
-  QTranslator *quasselTranslator = new QTranslator(qApp);
-  quasselTranslator->setObjectName("QuasselTr");
-  quasselTranslator->load(QString(":i18n/quassel_%1").arg(locale.name()));
-  qApp->installTranslator(quasselTranslator);
-}
-
 void Quassel::setupBuildInfo(const QString &generated) {
   _buildInfo.applicationName = "Quassel IRC";
   _buildInfo.coreApplicationName = "Quassel Core";
@@ -228,7 +212,7 @@ void Quassel::logFatalMessage(const char *msg) {
   QFile dumpFile(coreDumpFileName());
   dumpFile.open(QIODevice::Append);
   QTextStream dumpStream(&dumpFile);
-  
+
   dumpStream << "Fatal: " << msg << '\n';
   dumpStream.flush();
   dumpFile.close();
index 539b579..24459cd 100644 (file)
@@ -81,7 +81,6 @@ protected:
   inline void setRunMode(RunMode mode);
 
 private:
-  void setupTranslations();
   void registerMetaTypes();
 
   static void handleSignal(int signal);
index f52154c..e978a7f 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <QCoreApplication>
 #include <QDebug>
+#include <QLibraryInfo>
 #include <QTextCodec>
 #include <QTranslator>
 
@@ -182,22 +183,25 @@ QDir quasselDir() {
 void loadTranslation(const QLocale &locale) {
   QTranslator *qtTranslator = QCoreApplication::instance()->findChild<QTranslator *>("QtTr");
   QTranslator *quasselTranslator = QCoreApplication::instance()->findChild<QTranslator *>("QuasselTr");
-  Q_ASSERT(qtTranslator);
-  Q_ASSERT(quasselTranslator);
 
-  QLocale::setDefault(locale);
+  if(!qtTranslator) {
+    qtTranslator = new QTranslator(qApp);
+    qtTranslator->setObjectName("QtTr");
+    qApp->installTranslator(qtTranslator);
+  }
+  if(!quasselTranslator) {
+    quasselTranslator = new QTranslator(qApp);
+    quasselTranslator->setObjectName("QuasselTr");
+    qApp->installTranslator(quasselTranslator);
+  }
 
-  QCoreApplication::removeTranslator(qtTranslator);
-  QCoreApplication::removeTranslator(quasselTranslator);
+  QLocale::setDefault(locale);
 
   if(locale.language() == QLocale::C)
     return;
 
-  qtTranslator->load(QString(":i18n/qt_%1").arg(locale.name()));
+  qtTranslator->load(QString("%2/qt_%1").arg(locale.name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)));
   quasselTranslator->load(QString(":i18n/quassel_%1").arg(locale.name()));
-
-  QCoreApplication::installTranslator(qtTranslator);
-  QCoreApplication::installTranslator(quasselTranslator);
 }
 
 QString secondsToString(int timeInSeconds) {
index 383526a..77de257 100644 (file)
@@ -52,6 +52,8 @@ void Core::destroy() {
 Core::Core() : storage(0) {
   _startTime = QDateTime::currentDateTime().toUTC();  // for uptime :)
 
+  loadTranslation(QLocale::system());
+
   // Register storage backends here!
   registerStorageBackend(new SqliteStorage(this));
 
@@ -359,7 +361,7 @@ bool Core::startListening() {
   // in mono mode we only start a local port if a port is specified in the cli call
   if(Quassel::runMode() == Quassel::Monolithic && !Quassel::isOptionSet("port"))
     return true;
-  
+
   bool success = false;
   uint port = Quassel::optionValue("port").toUInt();