From 0392d7e7892bafee907c2e5293700d67c9872fff Mon Sep 17 00:00:00 2001 From: Bas Pape Date: Fri, 23 Nov 2012 19:01:35 +0100 Subject: [PATCH 1/1] Let quassel honour locale language settings When the language setting (LC_MESSAGES) differs from the global locale set, quassel will use the wrong language. Qt 4.8 introduces some changes to QLocale which make this pretty much Just Work; this patch copies the necessary bits for older Qts. Fixes #1194 --- src/common/quassel.cpp | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/common/quassel.cpp b/src/common/quassel.cpp index e9763fc7..c60f5ec1 100644 --- a/src/common/quassel.cpp +++ b/src/common/quassel.cpp @@ -40,6 +40,7 @@ #include "bufferinfo.h" #include "types.h" #include "syncableobject.h" +#include "logger.h" Quassel::BuildInfo Quassel::_buildInfo; AbstractCliParser *Quassel::_cliParser = 0; @@ -494,10 +495,32 @@ void Quassel::loadTranslation(const QLocale &locale) quasselTranslator->setObjectName("QuasselTr"); qApp->installTranslator(quasselTranslator); - QLocale::setDefault(locale); +#if QT_VERSION >= 0x040800 + bool success = qtTranslator->load(locale, QString("qt_%1"), translationDirPath()); + if (!success) + qtTranslator->load(locale, QString("qt_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + quasselTranslator->load(locale, QString(""), translationDirPath()); +#else + QString localeName = locale.name(); + + // if the user did not specify a language in the settings, the system locale + // is used, but Qt < 4.8 does not respect language settings. This bit is + // based on QLocale::uiLanguages() as in Qt 4.8.3 + if (locale == QLocale::system()) { + // FIXME: does it make sense to set the locale to the system locale? + QLocale::setDefault(locale); + QVariant res = QSystemLocale().query(QSystemLocale::UILanguages, QVariant()); + if (!res.isNull()) { + QString newName = res.toStringList()[0]; + if (!newName.isEmpty()) { + localeName = newName.replace('-', "_"); // silly Qt. + } + } + } - bool success = qtTranslator->load(QString("qt_%1").arg(locale.name()), translationDirPath()); + bool success = qtTranslator->load(QString("qt_%1").arg(localeName), translationDirPath()); if (!success) - qtTranslator->load(QString("qt_%1").arg(locale.name()), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - quasselTranslator->load(QString("%1").arg(locale.name()), translationDirPath()); + qtTranslator->load(QString("qt_%1").arg(localeName), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + quasselTranslator->load(QString("%1").arg(localeName), translationDirPath()); +#endif } -- 2.20.1