From 4f53c703e40bea3203259c212c54dc4816c08b09 Mon Sep 17 00:00:00 2001 From: Ievgenii Meshcheriakov Date: Mon, 22 Nov 2021 15:56:53 +0100 Subject: QLocale: Extend support for language codes This commit extends functionality for QLocale::codeToLanguage() and QLocale::languageToCode() by adding an additional argument that allows selection of the ISO 639 code-set to consider for those operations. The following ISO 639 codes are supported: * Part 1 * Part 2 bibliographic * Part 2 terminological * Part 3 As a result of this change the codeToLanguage() overload without the additional argument now returns a Language value if it matches any know code. Previously a valid language was returned only if the function argument matched the first code defined for that language from the above list. [ChangeLog][QtCore][QLocale] Added overloads for codeToLanguage() and languageToCode() that support specifying which ISO 639 codes to consider. Fixes: QTBUG-98129 Change-Id: I4da8a89e2e68a673cf63a621359cded609873fa2 Reviewed-by: Edward Welbourne --- tests/auto/corelib/text/qlocale/tst_qlocale.cpp | 38 ++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'tests/auto/corelib/text') diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp index 2a752e486f..52224701f6 100644 --- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp @@ -3501,6 +3501,23 @@ void tst_QLocale::lcsToCode() QCOMPARE(QLocale::languageToCode(QLocale::AnyLanguage), QString()); QCOMPARE(QLocale::languageToCode(QLocale::C), QString("C")); QCOMPARE(QLocale::languageToCode(QLocale::English), QString("en")); + QCOMPARE(QLocale::languageToCode(QLocale::Albanian), u"sq"_qs); + QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part1), u"sq"_qs); + QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part2B), u"alb"_qs); + QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part2T), u"sqi"_qs); + QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part3), u"sqi"_qs); + + QCOMPARE(QLocale::languageToCode(QLocale::Taita), u"dav"_qs); + QCOMPARE(QLocale::languageToCode(QLocale::Taita, + QLocale::ISO639Part1 | QLocale::ISO639Part2B + | QLocale::ISO639Part2T), + QString()); + QCOMPARE(QLocale::languageToCode(QLocale::Taita, QLocale::ISO639Part3), u"dav"_qs); + QCOMPARE(QLocale::languageToCode(QLocale::English, QLocale::LanguageCodeTypes {}), QString()); + + // Legacy codes can only be used to convert them to Language values, not other way around. + QCOMPARE(QLocale::languageToCode(QLocale::NorwegianBokmal, QLocale::LegacyLanguageCode), + QString()); QCOMPARE(QLocale::territoryToCode(QLocale::AnyTerritory), QString()); QCOMPARE(QLocale::territoryToCode(QLocale::UnitedStates), QString("US")); @@ -3518,9 +3535,28 @@ void tst_QLocale::codeToLcs() QCOMPARE(QLocale::codeToLanguage(QString("e")), QLocale::AnyLanguage); QCOMPARE(QLocale::codeToLanguage(QString("en")), QLocale::English); QCOMPARE(QLocale::codeToLanguage(QString("EN")), QLocale::English); - QCOMPARE(QLocale::codeToLanguage(QString("eng")), QLocale::AnyLanguage); + QCOMPARE(QLocale::codeToLanguage(QString("eng")), QLocale::English); QCOMPARE(QLocale::codeToLanguage(QString("ha")), QLocale::Hausa); + QCOMPARE(QLocale::codeToLanguage(QString("ha"), QLocale::ISO639Alpha3), QLocale::AnyLanguage); QCOMPARE(QLocale::codeToLanguage(QString("haw")), QLocale::Hawaiian); + QCOMPARE(QLocale::codeToLanguage(QString("haw"), QLocale::ISO639Alpha2), QLocale::AnyLanguage); + + QCOMPARE(QLocale::codeToLanguage(u"sq"), QLocale::Albanian); + QCOMPARE(QLocale::codeToLanguage(u"alb"), QLocale::Albanian); + QCOMPARE(QLocale::codeToLanguage(u"sqi"), QLocale::Albanian); + QCOMPARE(QLocale::codeToLanguage(u"sq", QLocale::ISO639Part1), QLocale::Albanian); + QCOMPARE(QLocale::codeToLanguage(u"sq", QLocale::ISO639Part3), QLocale::AnyLanguage); + QCOMPARE(QLocale::codeToLanguage(u"alb", QLocale::ISO639Part2B), QLocale::Albanian); + QCOMPARE(QLocale::codeToLanguage(u"alb", QLocale::ISO639Part2T | QLocale::ISO639Part3), + QLocale::AnyLanguage); + QCOMPARE(QLocale::codeToLanguage(u"sqi", QLocale::ISO639Part2T), QLocale::Albanian); + QCOMPARE(QLocale::codeToLanguage(u"sqi", QLocale::ISO639Part3), QLocale::Albanian); + QCOMPARE(QLocale::codeToLanguage(u"sqi", QLocale::ISO639Part1 | QLocale::ISO639Part2B), + QLocale::AnyLanguage); + + // Legacy code + QCOMPARE(QLocale::codeToLanguage(u"no"), QLocale::NorwegianBokmal); + QCOMPARE(QLocale::codeToLanguage(u"no", QLocale::ISO639Part1), QLocale::AnyLanguage); QCOMPARE(QLocale::codeToTerritory(QString()), QLocale::AnyTerritory); QCOMPARE(QLocale::codeToTerritory(QString("ZZ")), QLocale::AnyTerritory); -- cgit v1.2.3