# HG changeset patch # User Chris Cannam # Date 1385462155 0 # Node ID 86d1f640ae1e761acd305376b2c79273e7b64acc # Parent 1938702bb3bf360d776e3564d1623383626ea6ed Add choice of interface language to the prefs dialog (in case user is unhappy with system locale) diff -r 1938702bb3bf -r 86d1f640ae1e main/PreferencesDialog.cpp --- a/main/PreferencesDialog.cpp Thu Nov 21 17:05:03 2013 +0000 +++ b/main/PreferencesDialog.cpp Tue Nov 26 10:35:55 2013 +0000 @@ -142,7 +142,7 @@ QString targetName = settings.value("audio-target", "").toString(); settings.endGroup(); - for (int i = 0; i < devices.size(); ++i) { + for (int i = 0; i < (int)devices.size(); ++i) { audioDevice->addItem(AudioTargetFactory::getInstance() ->getCallbackTargetDescription(devices[i])); if (targetName == devices[i]) audioDevice->setCurrentIndex(i); @@ -205,6 +205,41 @@ this, SLOT(backgroundModeChanged(int))); #endif + settings.beginGroup("Preferences"); + QString userLocale = settings.value("locale", "").toString(); + m_currentLocale = userLocale; + settings.endGroup(); + + QComboBox *locale = new QComboBox; + QStringList localeFiles = QDir(":i18n").entryList(QStringList() << "*.qm"); + locale->addItem(tr("Follow system locale")); + m_locales.push_back(""); + if (userLocale == "") { + locale->setCurrentIndex(0); + } + foreach (QString f, localeFiles) { + QString f0 = f; + f.replace("sonic-visualiser_", "").replace(".qm", ""); + if (f == f0) { // our expectations about filename format were not met + std::cerr << "INFO: Unexpected filename " << f << " in i18n resource directory" << std::endl; + } else { + m_locales.push_back(f); + QString displayText; + // Add new translations here + if (f == "ru") displayText = tr("Russian"); + else if (f == "en_GB") displayText = tr("British English"); + else if (f == "en_US") displayText = tr("American English"); + else if (f == "cs_CZ") displayText = tr("Czech"); + else displayText = f; + locale->addItem(QString("%1 [%2]").arg(displayText).arg(f)); + if (userLocale == f) { + locale->setCurrentIndex(locale->count() - 1); + } + } + } + connect(locale, SIGNAL(currentIndexChanged(int)), + this, SLOT(localeChanged(int))); + QSpinBox *fontSize = new QSpinBox; int fs = prefs->getPropertyRangeAndValue("View Font Size", &min, &max, &deflt); @@ -239,6 +274,10 @@ int row = 0; + subgrid->addWidget(new QLabel(tr("%1:").arg(tr("User interface language"))), + row, 0); + subgrid->addWidget(locale, row++, 1, 1, 1); + subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel ("Temporary Directory Root"))), row, 0); @@ -484,6 +523,14 @@ } void +PreferencesDialog::localeChanged(int i) +{ + m_currentLocale = m_locales[i]; + m_applyButton->setEnabled(true); + m_changesOnRestart = true; +} + +void PreferencesDialog::tempDirRootChanged(QString r) { m_tempDirRoot = r; @@ -564,6 +611,10 @@ settings.setValue("sessiontemplate", m_currentTemplate); settings.endGroup(); + settings.beginGroup("Preferences"); + settings.setValue("locale", m_currentLocale); + settings.endGroup(); + m_applyButton->setEnabled(false); if (m_changesOnRestart) { diff -r 1938702bb3bf -r 86d1f640ae1e main/PreferencesDialog.h --- a/main/PreferencesDialog.h Thu Nov 21 17:05:03 2013 +0000 +++ b/main/PreferencesDialog.h Tue Nov 26 10:35:55 2013 +0000 @@ -60,6 +60,7 @@ void viewFontSizeChanged(int sz); void showSplashChanged(int state); void defaultTemplateChanged(int); + void localeChanged(int); void tempDirButtonClicked(); @@ -78,6 +79,9 @@ QString m_currentTemplate; QStringList m_templates; + + QString m_currentLocale; + QStringList m_locales; WindowType m_windowType; int m_spectrogramSmoothing; diff -r 1938702bb3bf -r 86d1f640ae1e main/main.cpp --- a/main/main.cpp Thu Nov 21 17:05:03 2013 +0000 +++ b/main/main.cpp Tue Nov 26 10:35:55 2013 +0000 @@ -317,6 +317,10 @@ QString language = QLocale::system().name(); + settings.beginGroup("Preferences"); + language = settings.value("locale", language).toString(); + settings.endGroup(); + QTranslator qtTranslator; QString qtTrName = QString("qt_%1").arg(language); SVDEBUG << "Loading " << qtTrName << "... ";