From e5e22eb9256f5b85ae0a7a55cb12f27dfa7508ca Mon Sep 17 00:00:00 2001 From: sledgehammer999 Date: Sun, 30 Nov 2014 01:58:07 +0200 Subject: [PATCH] Fix the language selection in the combobox when the system locale only has a lang equivalent and not a lang_COUNTRY one. Closes #1786. --- src/preferences/options_imp.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/preferences/options_imp.cpp b/src/preferences/options_imp.cpp index b22bc7a14..99636b16b 100755 --- a/src/preferences/options_imp.cpp +++ b/src/preferences/options_imp.cpp @@ -275,8 +275,8 @@ void options_imp::initializeLanguageCombo() localeStr.chop(3); // Remove ".qm" QLocale locale(localeStr); QString language_name = languageToLocalizedString(locale); - comboI18n->addItem(/*QIcon(":/Icons/flags/"+country+".png"), */language_name, locale.name()); - qDebug() << "Supported locale:" << locale.name(); + comboI18n->addItem(/*QIcon(":/Icons/flags/"+country+".png"), */language_name, localeStr); + qDebug() << "Supported locale:" << localeStr; } } @@ -1026,10 +1026,19 @@ QString options_imp::getLocale() const { void options_imp::setLocale(const QString &localeStr) { QLocale locale(localeStr); + QString name = locale.name(); // Attempt to find exact match - int index = comboI18n->findData(locale.name(), Qt::UserRole); + int index = comboI18n->findData(name, Qt::UserRole); + if (index < 0 ) { + //Attempt to find a language match without a country + int pos = name.indexOf('_'); + if (pos > -1) { + QString lang = name.left(pos); + index = comboI18n->findData(lang, Qt::UserRole); + } + } if (index < 0) { - // Unreconized, use US English + // Unrecognized, use US English index = comboI18n->findData(QLocale("en").name(), Qt::UserRole); Q_ASSERT(index >= 0); }