# HG changeset patch # User Wuzzy # Date 1547595446 -3600 # Node ID b86e6e4f3c5893e12042b8cba665ba86d1f5dc7a # Parent 62dea281e4d5eaa051e3d4f0f040502d8fa19e0d Make game engine load the user's locale correctly (bug 688) diff -r 62dea281e4d5 -r b86e6e4f3c58 ChangeLog.txt --- a/ChangeLog.txt Wed Jan 16 00:01:29 2019 +0100 +++ b/ChangeLog.txt Wed Jan 16 00:37:26 2019 +0100 @@ -58,6 +58,7 @@ * Fix wind bar animation not looping properly * Fix airplane line being drawn above many HUD elements * Suppress “ is gone.” message at end of game + * Fix game engine ignoring appropriate number formatting of user language Frontend: + Restructure credits diff -r 62dea281e4d5 -r b86e6e4f3c58 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Wed Jan 16 00:01:29 2019 +0100 +++ b/QTfrontend/game.cpp Wed Jan 16 00:37:26 2019 +0100 @@ -53,7 +53,7 @@ QString trainingName, trainingScript, trainingTeam, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution? HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) : - TCPBase(true, 0), + TCPBase(true, !config->language().isEmpty(), 0), ammostr(ammo), m_pTeamSelWidget(pTeamSelWidget) { diff -r 62dea281e4d5 -r b86e6e4f3c58 QTfrontend/net/hwmap.cpp --- a/QTfrontend/net/hwmap.cpp Wed Jan 16 00:01:29 2019 +0100 +++ b/QTfrontend/net/hwmap.cpp Wed Jan 16 00:37:26 2019 +0100 @@ -25,7 +25,7 @@ #include "hwmap.h" HWMap::HWMap(QObject * parent) : - TCPBase(false, parent) + TCPBase(false, false, parent) { templateFilter = 0; m_mapgen = MAPGEN_REGULAR; diff -r 62dea281e4d5 -r b86e6e4f3c58 QTfrontend/net/hwmapoptimizer.cpp --- a/QTfrontend/net/hwmapoptimizer.cpp Wed Jan 16 00:01:29 2019 +0100 +++ b/QTfrontend/net/hwmapoptimizer.cpp Wed Jan 16 00:37:26 2019 +0100 @@ -2,7 +2,7 @@ #include "hwconsts.h" HWMapOptimizer::HWMapOptimizer(QObject *parent) : - TCPBase(parent) + TCPBase(false, false, parent) { } diff -r 62dea281e4d5 -r b86e6e4f3c58 QTfrontend/net/recorder.cpp --- a/QTfrontend/net/recorder.cpp Wed Jan 16 00:01:29 2019 +0100 +++ b/QTfrontend/net/recorder.cpp Wed Jan 16 00:37:26 2019 +0100 @@ -33,7 +33,7 @@ static QList queue; HWRecorder::HWRecorder(GameUIConfig * config, const QString &prefix) : - TCPBase(false) + TCPBase(false, !config->language().isEmpty()) { this->config = config; this->prefix = prefix; diff -r 62dea281e4d5 -r b86e6e4f3c58 QTfrontend/net/tcpBase.cpp --- a/QTfrontend/net/tcpBase.cpp Wed Jan 16 00:01:29 2019 +0100 +++ b/QTfrontend/net/tcpBase.cpp Wed Jan 16 00:37:26 2019 +0100 @@ -21,10 +21,12 @@ #include #include #include +#include #include "tcpBase.h" #include "hwconsts.h" #include "MessageDialog.h" +#include "gameuiconfig.h" #ifdef HWLIBRARY extern "C" { @@ -104,11 +106,12 @@ } -TCPBase::TCPBase(bool demoMode, QObject *parent) : +TCPBase::TCPBase(bool demoMode, bool usesCustomLanguage, QObject *parent) : QObject(parent), m_hasStarted(false), m_isDemoMode(demoMode), m_connected(false), + m_usesCustomLanguage(usesCustomLanguage), IPCSocket(0) { process = 0; @@ -183,6 +186,18 @@ process->setProcessChannelMode(QProcess::ForwardedChannels); #endif + // If game config uses non-system locale, we set the environment + // of the engine first + if(m_usesCustomLanguage) + { + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + QString hwengineLang = QLocale().name() + ".UTF8"; + qDebug("Setting hwengine environment: LANG=%s", qPrintable(hwengineLang)); + // TODO: Check if this is correct and works on all systems + env.insert("LANG", QLocale().name() + ".UTF8"); + process->setProcessEnvironment(env); + } + qDebug("Starting hwengine ..."); process->start(bindir->absolutePath() + "/hwengine", arguments); #endif m_hasStarted = true; diff -r 62dea281e4d5 -r b86e6e4f3c58 QTfrontend/net/tcpBase.h --- a/QTfrontend/net/tcpBase.h Wed Jan 16 00:01:29 2019 +0100 +++ b/QTfrontend/net/tcpBase.h Wed Jan 16 00:37:26 2019 +0100 @@ -41,7 +41,7 @@ Q_OBJECT public: - TCPBase(bool demoMode, QObject * parent = 0); + TCPBase(bool demoMode, bool usesCustomLanguage, QObject * parent = 0); virtual ~TCPBase(); virtual bool couldBeRemoved(); @@ -80,6 +80,7 @@ #endif bool m_isDemoMode; bool m_connected; + bool m_usesCustomLanguage; void RealStart(); QPointer IPCSocket; diff -r 62dea281e4d5 -r b86e6e4f3c58 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Wed Jan 16 00:01:29 2019 +0100 +++ b/hedgewars/hwengine.pas Wed Jan 16 00:37:26 2019 +0100 @@ -36,6 +36,7 @@ {$IFDEF USE_VIDEO_RECORDING}, uVideoRec {$ENDIF} {$IFDEF USE_TOUCH_INTERFACE}, uTouch {$ENDIF} {$IFDEF ANDROID}, GLUnit{$ENDIF} + {$IFDEF UNIX}, clocale{$ENDIF} {$IFDEF WINDOWS}, dynlibs{$ENDIF} ;