diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp index 09226e97992..48996eaacbb 100644 --- a/src/corelib/text/qlocale.cpp +++ b/src/corelib/text/qlocale.cpp @@ -770,6 +770,16 @@ static QLocalePrivate *c_private() noexcept return &c_locale; } +static constexpr QLocale::NumberOptions defaultNumberOptions(QLocale::Language forLanguage) +{ + return forLanguage == QLocale::C ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions; +} + +static constexpr QLocale::NumberOptions defaultNumberOptions(quint16 forLanguage) +{ + return defaultNumberOptions(QLocale::Language(forLanguage)); +} + #ifndef QT_NO_SYSTEMLOCALE /****************************************************************************** ** Default system locale behavior @@ -954,7 +964,8 @@ QDataStream &operator>>(QDataStream &ds, QLocale &l) #endif // QT_NO_DATASTREAM Q_GLOBAL_STATIC(QSharedDataPointer, defaultLocalePrivate, - new QLocalePrivate(defaultData(), defaultIndex())) + new QLocalePrivate(defaultData(), defaultIndex(), + defaultNumberOptions(defaultData()->m_language_id))) static QLocalePrivate *localePrivateByName(QStringView name) { @@ -963,8 +974,7 @@ static QLocalePrivate *localePrivateByName(QStringView name) const qsizetype index = QLocaleData::findLocaleIndex(QLocaleId::fromName(name)); Q_ASSERT(index >= 0 && index < locale_data_size); return new QLocalePrivate(locale_data + index, index, - locale_data[index].m_language_id == QLocale::C - ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions); + defaultNumberOptions(locale_data[index].m_language_id)); } static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script, @@ -2971,6 +2981,7 @@ QLocale QLocale::system() // to ensure that locale's index stays up to date: systemData(&locale.m_index); Q_ASSERT(locale.m_index >= 0 && locale.m_index < locale_data_size); + locale.m_numberOptions = defaultNumberOptions(locale.m_data->m_language_id); return QLocale(locale); } diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index 2c13af1f4a1..d421aecb6b8 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -4232,17 +4232,22 @@ void tst_QLocale::mySystemLocale() QFETCH(QLocale::Language, language); QFETCH(QStringList, uiLanguages); + const QLocale::NumberOptions eno + = language == QLocale::C ? QLocale::OmitGroupSeparator : QLocale::DefaultNumberOptions; + { MySystemLocale sLocale(name); QCOMPARE(QLocale().language(), language); - QCOMPARE(QLocale::system().language(), language); + const QLocale sys = QLocale::system(); + QCOMPARE(sys.language(), language); auto reporter = qScopeGuard([]() { qDebug("Actual entries:\n\t%s", qPrintable(QLocale::system().uiLanguages().join(u"\n\t"))); }); - QCOMPARE(QLocale::system().uiLanguages(), uiLanguages); - QCOMPARE(QLocale::system().uiLanguages(QLocale::TagSeparator::Underscore), + QCOMPARE(sys.uiLanguages(), uiLanguages); + QCOMPARE(sys.uiLanguages(QLocale::TagSeparator::Underscore), uiLanguages.replaceInStrings(u"-", u"_")); + QCOMPARE(sys.numberOptions(), eno); reporter.dismiss(); }