summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/text/qlocale.cpp12
-rw-r--r--tests/auto/corelib/text/qlocale/tst_qlocale.cpp75
2 files changed, 49 insertions, 38 deletions
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index 47fb6dcb9d..5f3e859667 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -4270,6 +4270,9 @@ QStringList QLocale::uiLanguages() const
}
for (int i = locales.size(); i-- > 0; ) {
const QLocale &locale = locales.at(i);
+ const auto data = locale.d->m_data;
+ QLocaleId id = data->id();
+
int j;
QByteArray prior;
if (i < uiLanguages.size()) {
@@ -4278,13 +4281,18 @@ QStringList QLocale::uiLanguages() const
prior = uiLanguages.at(i).toLatin1();
// Insert just after the entry we're supplementing:
j = i + 1;
+ } else if (id.language_id == C) {
+ // Attempt no likely sub-tag amendments to C:
+ uiLanguages.append(locale.name());
+ continue;
} else {
// Plain locale, not system locale; just append.
+ const QString name = locale.bcp47Name();
+ uiLanguages.append(name);
+ prior = name.toLatin1();
j = uiLanguages.size();
}
- const auto data = locale.d->m_data;
- QLocaleId id = data->id();
const QLocaleId max = id.withLikelySubtagsAdded();
const QLocaleId min = max.withLikelySubtagsRemoved();
id.script_id = 0; // For re-use as script-less variant.
diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
index 7bfa366b66..32b47dbe01 100644
--- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
@@ -128,6 +128,7 @@ private slots:
void ampm();
void currency();
void quoteString();
+ void uiLanguages_data();
void uiLanguages();
void weekendDays();
void listPatterns();
@@ -2741,47 +2742,49 @@ void tst_QLocale::quoteString()
QCOMPARE(de_CH.quoteString(someText), QString::fromUtf8("\xe2\x80\x9e" "text" "\xe2\x80\x9c"));
QCOMPARE(de_CH.quoteString(someText, QLocale::AlternateQuotation),
QString::fromUtf8("\xe2\x80\x9a" "text" "\xe2\x80\x98"));
-
}
-void tst_QLocale::uiLanguages()
+void tst_QLocale::uiLanguages_data()
{
- const QLocale c(QLocale::C);
- QCOMPARE(c.uiLanguages().size(), 1);
- QCOMPARE(c.uiLanguages().at(0), QLatin1String("C"));
+ QTest::addColumn<QLocale>("locale");
+ QTest::addColumn<QStringList>("all");
- const QLocale en_US("en_US");
- QCOMPARE(en_US.uiLanguages().size(), 3);
- QCOMPARE(en_US.uiLanguages().at(0), QLatin1String("en"));
- QCOMPARE(en_US.uiLanguages().at(1), QLatin1String("en-US"));
- QCOMPARE(en_US.uiLanguages().at(2), QLatin1String("en-Latn-US"));
-
- const QLocale en_Latn_US("en_Latn_US");
- QCOMPARE(en_Latn_US.uiLanguages().size(), 3);
- QCOMPARE(en_Latn_US.uiLanguages().at(0), QLatin1String("en"));
- QCOMPARE(en_Latn_US.uiLanguages().at(1), QLatin1String("en-US"));
- QCOMPARE(en_Latn_US.uiLanguages().at(2), QLatin1String("en-Latn-US"));
-
- const QLocale en_GB("en_GB");
- QCOMPARE(en_GB.uiLanguages().size(), 2);
- QCOMPARE(en_GB.uiLanguages().at(0), QLatin1String("en-GB"));
- QCOMPARE(en_GB.uiLanguages().at(1), QLatin1String("en-Latn-GB"));
-
- const QLocale en_Dsrt_US("en_Dsrt_US");
- QCOMPARE(en_Dsrt_US.uiLanguages().size(), 2);
- QCOMPARE(en_Dsrt_US.uiLanguages().at(0), QLatin1String("en-Dsrt"));
- QCOMPARE(en_Dsrt_US.uiLanguages().at(1), QLatin1String("en-Dsrt-US"));
+ QTest::newRow("C") << QLocale::c() << QStringList{QString("C")};
- const QLocale ru_RU("ru_RU");
- QCOMPARE(ru_RU.uiLanguages().size(), 3);
- QCOMPARE(ru_RU.uiLanguages().at(0), QLatin1String("ru"));
- QCOMPARE(ru_RU.uiLanguages().at(1), QLatin1String("ru-RU"));
- QCOMPARE(ru_RU.uiLanguages().at(2), QLatin1String("ru-Cyrl-RU"));
-
- const QLocale zh_Hant("zh_Hant");
- QCOMPARE(zh_Hant.uiLanguages().size(), 2);
- QCOMPARE(zh_Hant.uiLanguages().at(0), QLatin1String("zh-TW"));
- QCOMPARE(zh_Hant.uiLanguages().at(1), QLatin1String("zh-Hant-TW"));
+ QTest::newRow("en_US")
+ << QLocale("en_US")
+ << QStringList{QString("en"), QString("en-US"), QString("en-Latn-US")};
+
+ QTest::newRow("en_Latn_US")
+ << QLocale("en_Latn_US") // Specifying the default script makes no difference
+ << QStringList{QString("en"), QString("en-US"), QString("en-Latn-US")};
+
+ QTest::newRow("en_GB")
+ << QLocale("en_GB")
+ << QStringList{QString("en-GB"), QString("en-Latn-GB")};
+
+ QTest::newRow("en_Dsrt_US")
+ << QLocale("en_Dsrt_US")
+ << QStringList{QString("en-Dsrt"), QString("en-Dsrt-US")};
+
+ QTest::newRow("ru_RU")
+ << QLocale("ru_RU")
+ << QStringList{QString("ru"), QString("ru-RU"), QString("ru-Cyrl-RU")};
+
+ QTest::newRow("zh_Hant")
+ << QLocale("zh_Hant")
+ << QStringList{QString("zh-TW"), QString("zh-Hant-TW")};
+
+ QTest::newRow("zh_Hans_CN")
+ << QLocale(QLocale::Chinese, QLocale::SimplifiedHanScript, QLocale::China)
+ << QStringList{QString("zh"), QString("zh-CN"), QString("zh-Hans-CN")};
+}
+
+void tst_QLocale::uiLanguages()
+{
+ QFETCH(const QLocale, locale);
+ QFETCH(const QStringList, all);
+ QCOMPARE(locale.uiLanguages(), all);
}
void tst_QLocale::weekendDays()