From: Marcus Eggenberger Date: Sat, 19 Jul 2008 19:05:18 +0000 (+0200) Subject: language is now changable (settings -> appearance -> general). default is still the... X-Git-Tag: 0.3.0~251 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=665faa937a52fc6175741292737c4a52875b4f75 language is now changable (settings -> appearance -> general). default is still the system language --- diff --git a/src/common/main.cpp b/src/common/main.cpp index bac43084..d7cd4e54 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -106,11 +106,13 @@ int main(int argc, char **argv) { // Set up i18n support QLocale locale = QLocale::system(); - QTranslator qtTranslator; + QTranslator qtTranslator(&app); + qtTranslator.setObjectName("QtTr"); qtTranslator.load(QString(":i18n/qt_%1").arg(locale.name())); app.installTranslator(&qtTranslator); - QTranslator quasselTranslator; + QTranslator quasselTranslator(&app); + quasselTranslator.setObjectName("QuasselTr"); quasselTranslator.load(QString(":i18n/quassel_%1").arg(locale.name())); app.installTranslator(&quasselTranslator); diff --git a/src/common/util.cpp b/src/common/util.cpp index 4c1a22f2..9bd17d94 100644 --- a/src/common/util.cpp +++ b/src/common/util.cpp @@ -18,11 +18,12 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "util.h" + #include #include #include - -#include "util.h" +#include class QMetaMethod; @@ -104,7 +105,6 @@ bool readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVariant &item) { uint editingDistance(const QString &s1, const QString &s2) { uint n = s1.size()+1; uint m = s2.size()+1; - //uint matrix[n][m]; QVector< QVector< uint > >matrix(n,QVector(m,0)); for(uint i = 0; i < n; i++) @@ -159,6 +159,26 @@ QDir quasselDir() { return qDir; } +void loadTranslation(const QLocale &locale) { + QTranslator *qtTranslator = QCoreApplication::instance()->findChild("QtTr"); + QTranslator *quasselTranslator = QCoreApplication::instance()->findChild("QuasselTr"); + Q_ASSERT(qtTranslator); + Q_ASSERT(quasselTranslator); + + QLocale::setDefault(locale); + + QCoreApplication::removeTranslator(qtTranslator); + QCoreApplication::removeTranslator(quasselTranslator); + + if(locale.language() == QLocale::C) + return; + + qtTranslator->load(QString(":i18n/qt_%1").arg(locale.name())); + quasselTranslator->load(QString(":i18n/quassel_%1").arg(locale.name())); + + QCoreApplication::installTranslator(qtTranslator); + QCoreApplication::installTranslator(quasselTranslator); +} QString secondsToString(int timeInSeconds) { QList< QPair > timeUnit; diff --git a/src/common/util.h b/src/common/util.h index 5c954b29..36ef8139 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -18,11 +18,11 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _UTIL_H_ -#define _UTIL_H_ +#ifndef UTIL_H +#define UTIL_H #include -#include +#include #include #include #include @@ -46,14 +46,12 @@ QString secondsToString(int timeInSeconds); */ QString decodeString(const QByteArray &input, QTextCodec *codec = 0); -// NOTE: We have static copies of these in SignalProxy... -//void writeDataToDevice(QIODevice *, const QVariant &); -//bool readDataFromDevice(QIODevice *, quint32 &, QVariant &); - uint editingDistance(const QString &s1, const QString &s2); QByteArray methodName(const QMetaMethod &method); QDir quasselDir(); +void loadTranslation(const QLocale &locale); + #endif diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 9b73d55c..c1af8b0f 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -41,6 +41,7 @@ #include "irclistmodel.h" #include "verticaldock.h" #include "uisettings.h" +#include "util.h" #include "qtuisettings.h" #include "jumpkeyhandler.h" @@ -79,6 +80,14 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) settingsDlg(new SettingsDlg(this)), debugConsole(new DebugConsole(this)) { + UiSettings uiSettings; + loadTranslation(uiSettings.value("Locale", QLocale::system()).value()); + + QString style = uiSettings.value("Style", QString("")).toString(); + if(style != "") { + QApplication::setStyle(style); + } + ui.setupUi(this); setWindowTitle("Quassel IRC"); setWindowIcon(offlineTrayIcon); @@ -90,11 +99,6 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) installEventFilter(new JumpKeyHandler(this)); - UiSettings uiSettings; - QString style = uiSettings.value("Style", QString("")).toString(); - if(style != "") { - QApplication::setStyle(style); - } } void MainWin::init() { diff --git a/src/qtui/settingspages/appearancesettingspage.cpp b/src/qtui/settingspages/appearancesettingspage.cpp index 14c79240..4fcaa0d8 100644 --- a/src/qtui/settingspages/appearancesettingspage.cpp +++ b/src/qtui/settingspages/appearancesettingspage.cpp @@ -3,16 +3,16 @@ * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Appearance Public License as published by * + * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Appearance Public License for more details. * + * GNU General Public License for more details. * * * - * You should have received a copy of the GNU Appearance Public License * + * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * @@ -22,15 +22,19 @@ #include "qtui.h" #include "uisettings.h" +#include "util.h" +#include #include AppearanceSettingsPage::AppearanceSettingsPage(QWidget *parent) : SettingsPage(tr("Appearance"), tr("General"), parent) { ui.setupUi(this); initStyleComboBox(); + initLanguageComboBox(); connect(ui.styleComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(widgetHasChanged())); + connect(ui.languageComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(widgetHasChanged())); } void AppearanceSettingsPage::initStyleComboBox() { @@ -41,8 +45,17 @@ void AppearanceSettingsPage::initStyleComboBox() { } } -bool AppearanceSettingsPage::hasDefaults() const { - return true; +void AppearanceSettingsPage::initLanguageComboBox() { + QDir i18nDir(":/i18n", "quassel_*.qm"); + + foreach(QString translationFile, i18nDir.entryList()) { + QString localeName(translationFile.mid(8)); + localeName.chop(3); + QLocale locale(localeName); + _locales << locale; + ui.languageComboBox->addItem(QLocale::languageToString(locale.language())); + } + } void AppearanceSettingsPage::defaults() { @@ -62,6 +75,15 @@ void AppearanceSettingsPage::load() { QApplication::setStyle(settings["Style"].toString()); } + 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 + ui.languageComboBox->setCurrentIndex(ui.languageComboBox->findText(QLocale::languageToString(locale.language()), Qt::MatchExactly)); + loadTranslation(selectedLocale()); + setChangedState(false); } @@ -74,17 +96,36 @@ void AppearanceSettingsPage::save() { uiSettings.setValue("Style", ui.styleComboBox->currentText()); } + if(ui.languageComboBox->currentIndex() == 0) { + uiSettings.remove("Locale"); // force the default (QLocale::system()) + } else { + uiSettings.setValue("Locale", selectedLocale()); + } + load(); setChangedState(false); } +QLocale AppearanceSettingsPage::selectedLocale() const { + QLocale locale; + int index = ui.languageComboBox->currentIndex(); + if(index == 0) + locale = QLocale::system(); + else if(index == 1) + locale = QLocale::c(); + else if(index > 1) + locale = _locales[index - 2]; + + return locale; +} + void AppearanceSettingsPage::widgetHasChanged() { - bool changed = testHasChanged(); - if(changed != hasChanged()) setChangedState(changed); + setChangedState(testHasChanged()); } bool AppearanceSettingsPage::testHasChanged() { if(settings["Style"].toString() != ui.styleComboBox->currentText()) return true; + if(selectedLocale() != QLocale()) return true; // QLocale() returns the default locale (manipulated via loadTranslation()) return false; } diff --git a/src/qtui/settingspages/appearancesettingspage.h b/src/qtui/settingspages/appearancesettingspage.h index 6a4071f3..96b5cf5a 100644 --- a/src/qtui/settingspages/appearancesettingspage.h +++ b/src/qtui/settingspages/appearancesettingspage.h @@ -3,25 +3,27 @@ * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Appearance Public License as published by * + * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU Appearance Public License for more details. * + * GNU General Public License for more details. * * * - * You should have received a copy of the GNU Appearance Public License * + * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _APPEARANCESETTINGSPAGE_H_ -#define _APPEARANCESETTINGSPAGE_H_ +#ifndef APPEARANCESETTINGSPAGE_H +#define APPEARANCESETTINGSPAGE_H #include +#include +#include #include "settingspage.h" #include "ui_appearancesettingspage.h" @@ -29,25 +31,28 @@ class AppearanceSettingsPage : public SettingsPage { Q_OBJECT - public: - AppearanceSettingsPage(QWidget *parent = 0); - - bool hasDefaults() const; - - public slots: - void save(); - void load(); - void defaults(); - - private slots: - void widgetHasChanged(); - - private: - Ui::AppearanceSettingsPage ui; - QHash settings; - - bool testHasChanged(); - void initStyleComboBox(); +public: + AppearanceSettingsPage(QWidget *parent = 0); + + inline bool hasDefaults() const { return true; } + +public slots: + void save(); + void load(); + void defaults(); + +private slots: + void widgetHasChanged(); + +private: + Ui::AppearanceSettingsPage ui; + QHash settings; + QList _locales; + + bool testHasChanged(); + void initStyleComboBox(); + void initLanguageComboBox(); + QLocale selectedLocale() const; }; #endif diff --git a/src/qtui/settingspages/appearancesettingspage.ui b/src/qtui/settingspages/appearancesettingspage.ui index 3a9478f1..ba01cb15 100644 --- a/src/qtui/settingspages/appearancesettingspage.ui +++ b/src/qtui/settingspages/appearancesettingspage.ui @@ -5,14 +5,14 @@ 0 0 - 400 - 300 + 331 + 269 Form - + @@ -25,12 +25,42 @@ + + + + Language: + + + + + + + <System> + + + + + <Original> + + + + + + + + Note: needs client restart for full effect! + + + + + + Qt::Vertical - + 20 40 diff --git a/src/uisupport/uisettings.cpp b/src/uisupport/uisettings.cpp index 2b1a0b80..b923a4fa 100644 --- a/src/uisupport/uisettings.cpp +++ b/src/uisupport/uisettings.cpp @@ -20,9 +20,9 @@ #include "uisettings.h" -UiSettings::UiSettings(const QString &group) : ClientSettings(group) { - - +UiSettings::UiSettings(const QString &group) + : ClientSettings(group) +{ } void UiSettings::setValue(const QString &key, const QVariant &data) { @@ -32,3 +32,7 @@ void UiSettings::setValue(const QString &key, const QVariant &data) { QVariant UiSettings::value(const QString &key, const QVariant &def) { return localValue(key, def); } + +void UiSettings::remove(const QString &key) { + removeLocalKey(key); +} diff --git a/src/uisupport/uisettings.h b/src/uisupport/uisettings.h index b4d653b5..0f0f52e6 100644 --- a/src/uisupport/uisettings.h +++ b/src/uisupport/uisettings.h @@ -18,33 +18,18 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _UISETTINGS_H_ -#define _UISETTINGS_H_ +#ifndef UISETTINGS_H +#define UISETTINGS_H #include "clientsettings.h" class UiSettings : public ClientSettings { - - public: - UiSettings(const QString &group = "Ui"); - - void setValue(const QString &key, const QVariant &data); - QVariant value(const QString &key, const QVariant &def = QVariant()); - - +public: + UiSettings(const QString &group = "Ui"); + + void setValue(const QString &key, const QVariant &data); + QVariant value(const QString &key, const QVariant &def = QVariant()); + void remove(const QString &key); }; -/* -class GuiProfile : public ClientSettings { - - public: - GuiProfile(); - - static QStringList availableProfiles(); - static GuiProfile *profile(QString name); - - - -}; -*/ #endif