Skip to content

Commit f5ad78b

Browse files
committed
qt: fonts: allow SubstituteFonts to filter based on user's language
SubstituteFonts() has been moved to after app identification so that QSettings are accessible.
1 parent 9fe53a8 commit f5ad78b

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

src/qt/bitcoin.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,24 @@ static std::string Translate(const char* psz)
8989
return QCoreApplication::translate("bitcoin-core", psz).toStdString();
9090
}
9191

92+
static QString GetLangTerritory()
93+
{
94+
QSettings settings;
95+
// Get desired locale (e.g. "de_DE")
96+
// 1) System default language
97+
QString lang_territory = QLocale::system().name();
98+
// 2) Language from QSettings
99+
QString lang_territory_qsettings = settings.value("language", "").toString();
100+
if(!lang_territory_qsettings.isEmpty())
101+
lang_territory = lang_territory_qsettings;
102+
// 3) -lang command line argument
103+
lang_territory = QString::fromStdString(GetArg("-lang", lang_territory.toStdString()));
104+
return lang_territory;
105+
}
106+
92107
/** Set up translations */
93108
static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTranslator, QTranslator &translatorBase, QTranslator &translator)
94109
{
95-
QSettings settings;
96110

97111
// Remove old translators
98112
QApplication::removeTranslator(&qtTranslatorBase);
@@ -102,13 +116,7 @@ static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTrans
102116

103117
// Get desired locale (e.g. "de_DE")
104118
// 1) System default language
105-
QString lang_territory = QLocale::system().name();
106-
// 2) Language from QSettings
107-
QString lang_territory_qsettings = settings.value("language", "").toString();
108-
if(!lang_territory_qsettings.isEmpty())
109-
lang_territory = lang_territory_qsettings;
110-
// 3) -lang command line argument
111-
lang_territory = QString::fromStdString(GetArg("-lang", lang_territory.toStdString()));
119+
QString lang_territory = GetLangTerritory();
112120

113121
// Convert to "de" only by truncating "_DE"
114122
QString lang = lang_territory;
@@ -498,8 +506,6 @@ int main(int argc, char *argv[])
498506
Q_INIT_RESOURCE(bitcoin);
499507
Q_INIT_RESOURCE(bitcoin_locale);
500508

501-
GUIUtil::SubstituteFonts();
502-
503509
BitcoinApplication app(argc, argv);
504510
#if QT_VERSION > 0x050100
505511
// Generate high-dpi pixmaps
@@ -521,6 +527,7 @@ int main(int argc, char *argv[])
521527
QApplication::setOrganizationName(QAPP_ORG_NAME);
522528
QApplication::setOrganizationDomain(QAPP_ORG_DOMAIN);
523529
QApplication::setApplicationName(QAPP_APP_NAME_DEFAULT);
530+
GUIUtil::SubstituteFonts(GetLangTerritory());
524531

525532
/// 4. Initialization of translations, so that intro dialog is in user's language
526533
// Now that QSettings are accessible, initialize translations

src/qt/guiutil.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ void openDebugLogfile()
383383
QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathDebug)));
384384
}
385385

386-
void SubstituteFonts()
386+
void SubstituteFonts(const QString& language)
387387
{
388388
#if defined(Q_OS_MAC)
389389
// Background:

src/qt/guiutil.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ namespace GUIUtil
107107
void openDebugLogfile();
108108

109109
// Replace invalid default fonts with known good ones
110-
void SubstituteFonts();
110+
void SubstituteFonts(const QString& language);
111111

112112
/** Qt event filter that intercepts ToolTipChange events, and replaces the tooltip with a rich text
113113
representation if needed. This assures that Qt can word-wrap long tooltip messages.

0 commit comments

Comments
 (0)