From 165d6f5b65794d5fb9087ae863f21242fc9008a6 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Wed, 13 Jan 2010 20:09:29 +0100 Subject: [PATCH] Fix selection and loading of translations; allow to run untranslated In addition to having a proper list of installed languages again, we now also have replaced the "" language by "Untranslated". Contrary to my intention back when I first implemented this, "Original" means "C" means "en_US" rather than untranslated. Some users have expressed desire to not translate their UI; they can do so now. --- src/common/quassel.cpp | 27 ++++++++++--------- .../settingspages/appearancesettingspage.cpp | 26 +++++++++++------- .../settingspages/appearancesettingspage.ui | 4 +-- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/common/quassel.cpp b/src/common/quassel.cpp index 864403d8..e69d0bd6 100644 --- a/src/common/quassel.cpp +++ b/src/common/quassel.cpp @@ -401,22 +401,25 @@ void Quassel::loadTranslation(const QLocale &locale) { 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(qtTranslator) + qApp->removeTranslator(qtTranslator); + if(quasselTranslator) + qApp->removeTranslator(quasselTranslator); + // We use QLocale::C to indicate that we don't want a translation if(locale.language() == QLocale::C) return; + qtTranslator = new QTranslator(qApp); + qtTranslator->setObjectName("QtTr"); + qApp->installTranslator(qtTranslator); + + quasselTranslator = new QTranslator(qApp); + quasselTranslator->setObjectName("QuasselTr"); + qApp->installTranslator(quasselTranslator); + + QLocale::setDefault(locale); + 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)); diff --git a/src/qtui/settingspages/appearancesettingspage.cpp b/src/qtui/settingspages/appearancesettingspage.cpp index 22ecd04d..d5d63d3e 100644 --- a/src/qtui/settingspages/appearancesettingspage.cpp +++ b/src/qtui/settingspages/appearancesettingspage.cpp @@ -77,10 +77,13 @@ void AppearanceSettingsPage::initStyleComboBox() { void AppearanceSettingsPage::initLanguageComboBox() { QDir i18nDir(Quassel::translationDirPath(), "*.qm"); + QRegExp rx("(qt_)?([a-zA-Z_]+)\\.qm"); foreach(QString translationFile, i18nDir.entryList()) { - QString localeName(translationFile.mid(8)); - localeName.chop(3); - QLocale locale(localeName); + if(!rx.exactMatch(translationFile)) + continue; + if(!rx.cap(1).isEmpty()) + continue; + QLocale locale(rx.cap(2)); _locales << locale; ui.languageComboBox->addItem(QLocale::languageToString(locale.language())); } @@ -88,6 +91,7 @@ void AppearanceSettingsPage::initLanguageComboBox() { void AppearanceSettingsPage::defaults() { ui.styleComboBox->setCurrentIndex(0); + ui.languageComboBox->setCurrentIndex(1); SettingsPage::defaults(); widgetHasChanged(); @@ -108,9 +112,9 @@ void AppearanceSettingsPage::load() { // Language QLocale locale = uiSettings.value("Locale", QLocale::system()).value(); if(locale == QLocale::system()) - ui.languageComboBox->setCurrentIndex(0); - else if(locale.language() == QLocale::C) ui.languageComboBox->setCurrentIndex(1); + else if(locale.language() == QLocale::C) // we use C for "untranslated" + ui.languageComboBox->setCurrentIndex(0); else ui.languageComboBox->setCurrentIndex(ui.languageComboBox->findText(QLocale::languageToString(locale.language()), Qt::MatchExactly)); ui.languageComboBox->setProperty("storedValue", ui.languageComboBox->currentIndex()); @@ -146,12 +150,15 @@ void AppearanceSettingsPage::save() { uiSettings.setValue("Style", ui.styleComboBox->currentText()); QApplication::setStyle(ui.styleComboBox->currentText()); } + ui.styleComboBox->setProperty("storedValue", ui.styleComboBox->currentIndex()); - if(ui.languageComboBox->currentIndex() == 0) { + if(ui.languageComboBox->currentIndex() == 1) { uiSettings.remove("Locale"); // force the default (QLocale::system()) + qDebug() << "removing"; } else { uiSettings.setValue("Locale", selectedLocale()); } + ui.languageComboBox->setProperty("storedValue", ui.languageComboBox->currentIndex()); bool needsStyleReload = ui.useCustomStyleSheet->isChecked() != ui.useCustomStyleSheet->property("storedValue").toBool() @@ -194,9 +201,9 @@ void AppearanceSettingsPage::save() { QLocale AppearanceSettingsPage::selectedLocale() const { QLocale locale; int index = ui.languageComboBox->currentIndex(); - if(index == 0) + if(index == 1) locale = QLocale::system(); - else if(index == 1) + else if(index == 0) locale = QLocale::c(); else if(index > 1) locale = _locales[index - 2]; @@ -222,8 +229,7 @@ void AppearanceSettingsPage::widgetHasChanged() { bool AppearanceSettingsPage::testHasChanged() { if(ui.styleComboBox->currentIndex() != ui.styleComboBox->property("storedValue").toInt()) return true; - - if(selectedLocale() != QLocale()) return true; // QLocale() returns the default locale (manipulated via loadTranslation()) + if(ui.languageComboBox->currentIndex() != ui.languageComboBox->property("storedValue").toInt()) return true; if(SettingsPage::hasChanged(ui.userNoticesInStatusBuffer)) return true; if(SettingsPage::hasChanged(ui.userNoticesInDefaultBuffer)) return true; diff --git a/src/qtui/settingspages/appearancesettingspage.ui b/src/qtui/settingspages/appearancesettingspage.ui index 641687e5..4b071acd 100644 --- a/src/qtui/settingspages/appearancesettingspage.ui +++ b/src/qtui/settingspages/appearancesettingspage.ui @@ -44,12 +44,12 @@ - <System Default> + <Untranslated> - <Original> + <System Default> -- 2.20.1