diff --git a/src/Audio/AudioOutput.cc b/src/Audio/AudioOutput.cc index fe6234aeffdce5693d5eb448cb858bab4a60f7cb..5f48d8f85ad517b402a8492ed5c86744eafdc293 100644 --- a/src/Audio/AudioOutput.cc +++ b/src/Audio/AudioOutput.cc @@ -20,7 +20,14 @@ AudioOutput::AudioOutput(QGCApplication* app, QGCToolbox* toolbox) : QGCTool(app, toolbox) , _tts(new QTextToSpeech(this)) { + _tts->setLocale(QLocale::system()); connect(_tts, &QTextToSpeech::stateChanged, this, &AudioOutput::_stateChanged); + connect(qgcApp(), &QGCApplication::languageChanged, this, &AudioOutput::_languageChanged); +} + +void AudioOutput::_languageChanged(const QLocale locale) +{ + _tts->setLocale(locale); } bool AudioOutput::say(const QString& inText) diff --git a/src/Audio/AudioOutput.h b/src/Audio/AudioOutput.h index b97d81f4e996581f518c3dae0083282e82f3c92d..d3e0a34db108c4ae04938d8c7d4b38e650c1875e 100644 --- a/src/Audio/AudioOutput.h +++ b/src/Audio/AudioOutput.h @@ -33,6 +33,7 @@ public slots: private slots: void _stateChanged (QTextToSpeech::State state); + void _languageChanged (const QLocale locale); protected: QTextToSpeech* _tts; diff --git a/src/QGCApplication.cc b/src/QGCApplication.cc index d258e8c31aa8b976b32eba4b358507c059b6551c..6367e758f8247562c4e50123315a31433e566347 100644 --- a/src/QGCApplication.cc +++ b/src/QGCApplication.cc @@ -351,74 +351,74 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) void QGCApplication::setLanguage() { - QLocale locale = QLocale::system(); - qDebug() << "System reported locale:" << locale << locale.name(); + _locale = QLocale::system(); + qDebug() << "System reported locale:" << _locale << _locale.name(); int langID = toolbox()->settingsManager()->appSettings()->language()->rawValue().toInt(); //-- See App.SettinsGroup.json for index if(langID) { switch(langID) { case 1: - locale = QLocale(QLocale::Bulgarian); + _locale = QLocale(QLocale::Bulgarian); break; case 2: - locale = QLocale(QLocale::Chinese); + _locale = QLocale(QLocale::Chinese); break; case 3: - locale = QLocale(QLocale::Dutch); + _locale = QLocale(QLocale::Dutch); break; case 4: - locale = QLocale(QLocale::English); + _locale = QLocale(QLocale::English); break; case 5: - locale = QLocale(QLocale::Finnish); + _locale = QLocale(QLocale::Finnish); break; case 6: - locale = QLocale(QLocale::French); + _locale = QLocale(QLocale::French); break; case 7: - locale = QLocale(QLocale::German); + _locale = QLocale(QLocale::German); break; case 8: - locale = QLocale(QLocale::Greek); + _locale = QLocale(QLocale::Greek); break; case 9: - locale = QLocale(QLocale::Hebrew); + _locale = QLocale(QLocale::Hebrew); break; case 10: - locale = QLocale(QLocale::Italian); + _locale = QLocale(QLocale::Italian); break; case 11: - locale = QLocale(QLocale::Japanese); + _locale = QLocale(QLocale::Japanese); break; case 12: - locale = QLocale(QLocale::Korean); + _locale = QLocale(QLocale::Korean); break; case 13: - locale = QLocale(QLocale::Norwegian); + _locale = QLocale(QLocale::Norwegian); break; case 14: - locale = QLocale(QLocale::Polish); + _locale = QLocale(QLocale::Polish); break; case 15: - locale = QLocale(QLocale::Portuguese); + _locale = QLocale(QLocale::Portuguese); break; case 16: - locale = QLocale(QLocale::Russian); + _locale = QLocale(QLocale::Russian); break; case 17: - locale = QLocale(QLocale::Spanish); + _locale = QLocale(QLocale::Spanish); break; case 18: - locale = QLocale(QLocale::Swedish); + _locale = QLocale(QLocale::Swedish); break; case 19: - locale = QLocale(QLocale::Turkish); + _locale = QLocale(QLocale::Turkish); break; } } //-- We have specific fonts for Korean - if(locale == QLocale::Korean) { - qDebug() << "Loading Korean fonts" << locale.name(); + if(_locale == QLocale::Korean) { + qDebug() << "Loading Korean fonts" << _locale.name(); if(QFontDatabase::addApplicationFont(":/fonts/NanumGothic-Regular") < 0) { qWarning() << "Could not load /fonts/NanumGothic-Regular font"; } @@ -426,22 +426,23 @@ void QGCApplication::setLanguage() qWarning() << "Could not load /fonts/NanumGothic-Bold font"; } } - qDebug() << "Loading localization for" << locale.name(); + qDebug() << "Loading localization for" << _locale.name(); _app->removeTranslator(&_QGCTranslator); _app->removeTranslator(&_QGCTranslatorQt); - if(_QGCTranslatorQt.load("qt_" + locale.name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { + if(_QGCTranslatorQt.load("qt_" + _locale.name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { _app->installTranslator(&_QGCTranslatorQt); } else { - qDebug() << "Error loading Qt localization for" << locale.name(); + qDebug() << "Error loading Qt localization for" << _locale.name(); } - if(_QGCTranslator.load(locale, QLatin1String("qgc_"), "", ":/i18n")) { - QLocale::setDefault(locale); + if(_QGCTranslator.load(_locale, QLatin1String("qgc_"), "", ":/i18n")) { + QLocale::setDefault(_locale); _app->installTranslator(&_QGCTranslator); } else { - qDebug() << "Error loading application localization for" << locale.name(); + qDebug() << "Error loading application localization for" << _locale.name(); } if(_qmlAppEngine) _qmlAppEngine->retranslate(); + emit languageChanged(_locale); } void QGCApplication::_shutdown() diff --git a/src/QGCApplication.h b/src/QGCApplication.h index 4b7c3afa80c1fb708a34bd8d8c38f544b1a59997..606b10eb1811bd7c0322de14e089eb744b1fd0fe 100644 --- a/src/QGCApplication.h +++ b/src/QGCApplication.h @@ -118,10 +118,15 @@ public slots: /// Check that the telemetry save path is set correctly void checkTelemetrySavePathOnMainThread(); + /// Get current language + const QLocale getCurrentLanguage() { return _locale; } + signals: /// This is connected to MAVLinkProtocol::checkForLostLogFiles. We signal this to ourselves to call the slot /// on the MAVLinkProtocol thread; - void checkForLostLogFiles(); + void checkForLostLogFiles (); + + void languageChanged (const QLocale locale); public: // Although public, these methods are internal and should only be called by UnitTest code @@ -184,6 +189,7 @@ private: bool _bluetoothAvailable = false; QTranslator _QGCTranslator; QTranslator _QGCTranslatorQt; + QLocale _locale; static const char* _settingsVersionKey; ///< Settings key which hold settings version static const char* _deleteAllSettingsKey; ///< If this settings key is set on boot, all settings will be deleted