Return "en" for QLocale::c().bcp47Name()

Currently QLocale::c().bcp47Name() returns "C" which, according to [BCP47], is
not a valid language tag. In particular it does not conform to the ABNF grammar
in section 2.1 which specifies a minimum length of 2 characters for all language
tags.

[BCP47]: https://tools.ietf.org/html/bcp47

This patch changes the return value to "en" seeing as the documentation for
QLocale::Language states that the C language is identical in behavior to
English.

Task-number: QTBUG-61949
Change-Id: I2a381def8fb7156467e01d105da92bb1f4821204
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
bb10
Jüri Valdmann 2017-07-18 10:41:20 +02:00
parent 2031196ad1
commit af7e756155
2 changed files with 2 additions and 2 deletions

View File

@ -328,7 +328,7 @@ QByteArray QLocalePrivate::bcp47Name(char separator) const
if (m_data->m_language_id == QLocale::AnyLanguage)
return QByteArray();
if (m_data->m_language_id == QLocale::C)
return QByteArrayLiteral("C");
return QByteArrayLiteral("en");
QLocaleId localeId = QLocaleId::fromIds(m_data->m_language_id, m_data->m_script_id, m_data->m_country_id);
return localeId.withLikelySubtagsRemoved().name(separator);

View File

@ -2529,7 +2529,7 @@ void tst_QLocale::textDirection()
void tst_QLocale::bcp47Name()
{
QCOMPARE(QLocale("C").bcp47Name(), QStringLiteral("C"));
QCOMPARE(QLocale("C").bcp47Name(), QStringLiteral("en"));
QCOMPARE(QLocale("en").bcp47Name(), QStringLiteral("en"));
QCOMPARE(QLocale("en_US").bcp47Name(), QStringLiteral("en"));
QCOMPARE(QLocale("en_GB").bcp47Name(), QStringLiteral("en-GB"));