Browse Source

Fix the language selection in the combobox when the system locale only has a lang equivalent and not a lang_COUNTRY one. Closes #1786.

adaptive-webui-19844
sledgehammer999 10 years ago
parent
commit
e5e22eb925
  1. 17
      src/preferences/options_imp.cpp

17
src/preferences/options_imp.cpp

@ -275,8 +275,8 @@ void options_imp::initializeLanguageCombo()
localeStr.chop(3); // Remove ".qm" localeStr.chop(3); // Remove ".qm"
QLocale locale(localeStr); QLocale locale(localeStr);
QString language_name = languageToLocalizedString(locale); QString language_name = languageToLocalizedString(locale);
comboI18n->addItem(/*QIcon(":/Icons/flags/"+country+".png"), */language_name, locale.name()); comboI18n->addItem(/*QIcon(":/Icons/flags/"+country+".png"), */language_name, localeStr);
qDebug() << "Supported locale:" << locale.name(); qDebug() << "Supported locale:" << localeStr;
} }
} }
@ -1026,10 +1026,19 @@ QString options_imp::getLocale() const {
void options_imp::setLocale(const QString &localeStr) { void options_imp::setLocale(const QString &localeStr) {
QLocale locale(localeStr); QLocale locale(localeStr);
QString name = locale.name();
// Attempt to find exact match // Attempt to find exact match
int index = comboI18n->findData(locale.name(), Qt::UserRole); int index = comboI18n->findData(name, Qt::UserRole);
if (index < 0 ) { if (index < 0 ) {
// Unreconized, use US English //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) {
// Unrecognized, use US English
index = comboI18n->findData(QLocale("en").name(), Qt::UserRole); index = comboI18n->findData(QLocale("en").name(), Qt::UserRole);
Q_ASSERT(index >= 0); Q_ASSERT(index >= 0);
} }

Loading…
Cancel
Save