Work around Windows' inappropriate, ugly default fonts when using an East Asian language when it is not also the system language.

This commit is contained in:
OBattler
2026-02-03 03:29:38 +01:00
parent 4ff39f3bdf
commit 657155ac97
2 changed files with 58 additions and 0 deletions

View File

@@ -159,6 +159,8 @@ ProgSettings::~ProgSettings()
delete ui;
}
static QString sys_lang;
#ifdef Q_OS_WINDOWS
/* Returns the standard UI font for Windows, which by default varies for different
languages. It can also be changed via external tools, if the user wants that.
@@ -168,6 +170,28 @@ ProgSettings::~ProgSettings()
QFont
ProgSettings::getUIFont()
{
QString langCode = languageIdToCode(lang_id);
if ((langCode != sys_lang) && ((langCode == "ja-JP") || (langCode == "ko-KR") ||
(langCode == "zh-CN") || (langCode == "zh-TW"))) {
/*
Work around Windows' inappropriate, ugly default fonts when using an East Asian
language when it is not also the system language.
*/
if (langCode == "ja-JP") {
/* Check for Windows 10 or later to choose the appropriate system font */
if (QVersionNumber::fromString(QSysInfo::kernelVersion()).majorVersion() >= 10)
return QFont("Yu Gothic UI", 9);
else
return QFont("Meiryo UI", 9);
} else if (langCode == "ko-KR")
return QFont("Malgun Gothic", 9);
else if (langCode == "zh-CN")
return QFont("Microsoft YaHei", 9);
else if (langCode == "zh-TW")
return QFont("Microsoft JhengHei", 9);
}
// Get the system (primary monitor) DPI. The font returned by
// SystemParametersInfo is scaled according to this and we need
// to get the font size in points to pass into QFont's constructor.
@@ -219,9 +243,42 @@ ProgSettings::languageIdToCode(int id)
return languages[id].first;
}
void
ProgSettings::getSysLang(QObject *parent)
{
if (qtTranslator) {
QApplication::removeTranslator(qtTranslator);
qtTranslator = nullptr;
}
if (translator) {
QApplication::removeTranslator(translator);
translator = nullptr;
}
qtTranslator = new QTranslator(parent);
translator = new CustomTranslator(parent);
QString localetofilename = "";
for (int i = 0; i < QLocale::system().uiLanguages().size(); i++) {
localetofilename = QLocale::system().uiLanguages()[i];
if (translator->load(QLatin1String("86box_") + localetofilename, QLatin1String(":/"))) {
qDebug() << "Translations loaded.";
QCoreApplication::installTranslator(translator);
/* First try qtbase */
if (!loadQtTranslations(QLatin1String("qtbase_") + localetofilename.replace('-', '_')))
/* If that fails, try legacy qt_* translations */
if (!loadQtTranslations(QLatin1String("qt_") + localetofilename.replace('-', '_')))
qDebug() << "Failed to find Qt translations!";
if (QCoreApplication::installTranslator(qtTranslator))
qDebug() << "Qt translations loaded.";
sys_lang = localetofilename;
break;
}
}
}
void
ProgSettings::loadTranslators(QObject *parent)
{
getSysLang(parent);
if (qtTranslator) {
QApplication::removeTranslator(qtTranslator);
qtTranslator = nullptr;

View File

@@ -19,6 +19,7 @@ public:
#endif
static int languageCodeToId(QString langCode);
static QString languageIdToCode(int id);
static void getSysLang(QObject *parent = nullptr);
static void loadTranslators(QObject *parent = nullptr);
static void reloadStrings();
class CustomTranslator : public QTranslator {