From c6a86b61642e2e8ab20e51e28079a83dd7547772 Mon Sep 17 00:00:00 2001 From: Lauri Pohjanheimo Date: Mon, 6 Nov 2023 16:45:24 +0200 Subject: [PATCH] Fix Japan locale not showing japanese fonts correctly Fallback font determination did not take locale into account when Japanese locale was used. Android devices show Chinese fonts instead. Fixes the problem by prepending japanese defaut "Noto Sans Mono CJK ..." type font before other fonts. Does same for Chinese and Korean locales. Fixes: QTBUG-111528 Pick-to: 6.5 6.2 5.15 Change-Id: I70994c0059c3819eeb09dacb9bbe6634490ecf37 Reviewed-by: Edward Welbourne Reviewed-by: Assam Boudjelthia (cherry picked from commit 476e8f8aef52592d3908b9d5cf6711af7a7d631d) Reviewed-by: Qt Cherry-pick Bot --- .../android/qandroidplatformfontdatabase.cpp | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp b/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp index 01636d2ba5c..82a10dac075 100644 --- a/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp +++ b/src/plugins/platforms/android/qandroidplatformfontdatabase.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include +#include #include "qandroidplatformfontdatabase.h" @@ -47,6 +48,38 @@ QStringList QAndroidPlatformFontDatabase::fallbacksForFamily(const QString &fami QChar::Script script) const { QStringList result; + + // Prepend CJK fonts by the locale. + QLocale locale = QLocale::system(); + switch (locale.language()) { + case QLocale::Chinese: { + switch (locale.territory()) { + case QLocale::China: + case QLocale::Singapore: + result.append(QStringLiteral("Noto Sans Mono CJK SC")); + break; + case QLocale::Taiwan: + case QLocale::HongKong: + case QLocale::Macao: + result.append(QStringLiteral("Noto Sans Mono CJK TC")); + break; + default: + // no modifications. + break; + } + break; + } + case QLocale::Japanese: + result.append(QStringLiteral("Noto Sans Mono CJK JP")); + break; + case QLocale::Korean: + result.append(QStringLiteral("Noto Sans Mono CJK KR")); + break; + default: + // no modifications. + break; + } + if (styleHint == QFont::Monospace || styleHint == QFont::Courier) result.append(QString(qgetenv("QT_ANDROID_FONTS_MONOSPACE")).split(u';')); else if (styleHint == QFont::Serif)