summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2022-04-05 10:53:06 +0200
committerIvan Solovev <ivan.solovev@qt.io>2022-04-08 00:13:01 +0200
commit44f3fe1cf4e2319e012207eba3afe7adfe09cad6 (patch)
tree1e68ce60de8d7914f55d45f7d7082f637eefa9eb /src
parent9fee35a2eda68b5968d911d5e14d298b91418d2c (diff)
Android: use BCP 47 tag to create a correct Locale for QTimeZone::displayName()
Before the patch we tried to create a java Locale object by passing the human-readable language, territory and variant strings. However, the Locale constructor accepts ISO-defined codes. Fix it by using a factory method Locale.forLanguageTag() [0] that constructs a Java Locale object based on BCP 47 tag. [0]: https://developer.android.com/reference/java/util/Locale#forLanguageTag(java.lang.String) Fixes: QTBUG-101460 Pick-to: 6.3 6.2 5.15 Change-Id: If414c66cf0e5b7e8299ffc3a6038b6f9eb79d5ec Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/time/qtimezoneprivate_android.cpp15
1 files changed, 4 insertions, 11 deletions
diff --git a/src/corelib/time/qtimezoneprivate_android.cpp b/src/corelib/time/qtimezoneprivate_android.cpp
index 4d98597dc7..7cd4117a66 100644
--- a/src/corelib/time/qtimezoneprivate_android.cpp
+++ b/src/corelib/time/qtimezoneprivate_android.cpp
@@ -88,17 +88,10 @@ QAndroidTimeZonePrivate::~QAndroidTimeZonePrivate()
static QJniObject getDisplayName(QJniObject zone, jint style, jboolean dst,
const QLocale &locale)
{
- QJniObject jlanguage
- = QJniObject::fromString(QLocale::languageToString(locale.language()));
- QJniObject jterritory
- = QJniObject::fromString(QLocale::territoryToString(locale.territory()));
- QJniObject
- jvariant = QJniObject::fromString(QLocale::scriptToString(locale.script()));
- QJniObject jlocale("java.util.Locale",
- "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
- jlanguage.object<jstring>(),
- jterritory.object<jstring>(),
- jvariant.object<jstring>());
+ QJniObject jbcpTag = QJniObject::fromString(locale.bcp47Name());
+ QJniObject jlocale = QJniObject::callStaticObjectMethod(
+ "java/util/Locale", "forLanguageTag", "(Ljava/lang/String;)Ljava/util/Locale;",
+ jbcpTag.object<jstring>());
return zone.callObjectMethod("getDisplayName",
"(ZILjava/util/Locale;)Ljava/lang/String;",