diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp index 684365f3406..6d96ca70d9d 100644 --- a/src/corelib/text/qlocale.cpp +++ b/src/corelib/text/qlocale.cpp @@ -5036,8 +5036,10 @@ QStringList QLocale::uiLanguages(TagSeparator separator) const const auto prior = QString::fromLatin1(id.name(sep)); if (isSystem && i < uiLanguages.size()) { // Adding likely-adjusted forms to system locale's list. + Q_ASSERT(uiLanguages.at(i) == prior + // A legacy code may get mapped to an ID with a different name: + || QLatin1String(QLocaleId::fromName(uiLanguages.at(i)).name(sep)) == prior); // Insert just after the entry we're supplementing: - Q_ASSERT(uiLanguages.at(i) == prior); j = i + 1; } else { // Plain locale or empty system uiLanguages; just append. diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index 6ec8fa9aecd..a842841949f 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -4090,6 +4090,10 @@ public: return QVariant(QStringList{u"en-CA"_s, u"fr-CA"_s, u"de-AT"_s, u"en-GB"_s, u"fr-FR"_s}); } + if (m_name == u"no") // QTBUG-131127 + return QVariant(QStringList{u"no"_s, u"en-US"_s, u"nb"_s}); + if (m_name == u"no-US") // Empty query result: + return QVariant(QStringList{}); return QVariant(QStringList{m_name}); case LanguageId: return m_id.language_id; @@ -4122,6 +4126,15 @@ void tst_QLocale::mySystemLocale_data() QTest::addColumn("language"); QTest::addColumn("uiLanguages"); + QTest::addRow("empty") + << u"no-US"_s << QLocale::NorwegianBokmal + << QStringList{u"nb-US"_s, u"nb-Latn-US"_s, + u"nb-Latn-NO"_s, u"nb-NO"_s, u"nb"_s, u"nb-Latn"_s}; + QTest::addRow("no") // QTBUG-131127 + << u"no"_s << QLocale::NorwegianBokmal + << QStringList{u"no"_s, u"nb-Latn-NO"_s, u"nb-NO"_s, u"en-US"_s, u"en-Latn-US"_s, u"en"_s, + u"nb"_s, u"nb-Latn-NO"_s, u"nb-NO"_s, u"nb-Latn"_s, u"en-Latn"_s}; + QTest::addRow("catalan") << u"ca"_s << QLocale::Catalan << QStringList{u"ca"_s, u"ca-Latn-ES"_s, u"ca-ES"_s, u"ca-Latn"_s};