Index: main.cpp =================================================================== diff -u -r563e34706a5c39070a603725bc021fcdc3424cac -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- main.cpp (.../main.cpp) (revision 563e34706a5c39070a603725bc021fcdc3424cac) +++ main.cpp (.../main.cpp) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -54,12 +53,15 @@ #include "WifiInterface.h" #include "BluetoothInterface.h" #include "CloudSyncController.h" +//AMIR +#include "Settings.h" #include "Threads.h" // kernel #include + /*! * \brief signalhandler * \details When application terminates it quits gracefully. @@ -547,12 +549,12 @@ // Storage::FileHandler::copyFolder(QString(Storage::USB_Mount_Point) + "Instructions", QString(Storage::Settings_Path())); //! - Translation initialization - QTranslator translator; - bool trLoaded = translator.load(QLocale(), app.applicationName(), QLatin1String("_"), QLatin1String(":/translations")); - if (trLoaded) { - app.installTranslator(&translator); - } + //! AMIR + //! + Storage::Settings settings; + settings.loadTranslation(); + //! - Initializing required thread types Threads::registerTypes(); Index: sources/ApplicationController.cpp =================================================================== diff -u -rc70ae33e19c08779ce89e2f1728f2d1af7b5c100 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision c70ae33e19c08779ce89e2f1728f2d1af7b5c100) +++ sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -162,6 +162,12 @@ connect(&_settingsWatcher, SIGNAL(finished ()), this , SLOT(onSettingsUpdate())); +// connect(&_settingsWatcher, SIGNAL(finished ()), +// this , SLOT(onLoadTranslation())); + + + + // Device Signal/Slots DEVICE_APP_INIT_CONNECTIONS_LIST @@ -773,3 +779,9 @@ emit didPOSTPass (_post.isDone( )); // GuiController -> GuiView : didPOSTPass(bool) } +void ApplicationController::onLoadTranslation() +{ + Storage::Settings settings; + settings.loadTranslation(); +} + Index: sources/ApplicationController.h =================================================================== diff -u -rc70ae33e19c08779ce89e2f1728f2d1af7b5c100 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/ApplicationController.h (.../ApplicationController.h) (revision c70ae33e19c08779ce89e2f1728f2d1af7b5c100) +++ sources/ApplicationController.h (.../ApplicationController.h) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -128,6 +128,7 @@ void onLogIOFail(); void onTreatmentRangesDone(bool vPass); + void onLoadTranslation (); signals: void didPOSTOSVersion (bool vPass); Index: sources/gui/qml/KeyboardItem.qml =================================================================== diff -u -r2ef03b2ce51b4dc507f66e9671953a8e0824bde9 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/gui/qml/KeyboardItem.qml (.../KeyboardItem.qml) (revision 2ef03b2ce51b4dc507f66e9671953a8e0824bde9) +++ sources/gui/qml/KeyboardItem.qml (.../KeyboardItem.qml) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -32,6 +32,8 @@ function setVisible(vVisible) { Qt.inputMethod.show() visible = vVisible + // AMIR + console.log("-----------keyboard locale is : " + VirtualKeyboardSettings.locale) } externalLanguageSwitchEnabled: true @@ -54,7 +56,7 @@ anchors.top: _root.bottom } Component.onCompleted: { - VirtualKeyboardSettings.locale = "en_US"; + VirtualKeyboardSettings.locale = vLocalization.keyboardAcronym; console.log("Default keyboard locale set to : " + VirtualKeyboardSettings.locale) } } Index: sources/storage/Settings.cpp =================================================================== diff -u -ra75bc5b80ad4ebde50f028b550cd534e589bd059 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/storage/Settings.cpp (.../Settings.cpp) (revision a75bc5b80ad4ebde50f028b550cd534e589bd059) +++ sources/storage/Settings.cpp (.../Settings.cpp) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -99,13 +99,14 @@ detail.location = mSettingFile.absolutePath() + "/"; detail.category = mCategory; - if ( parse(detail) ) { - LOG_DEBUG( (QString("Configuration file '%1' successfully loaded").arg(mSettingFile.fileName())) ); + if ( ! parse(detail) ) { + LOG_DEBUG( (QString("Configuration file '%1' failed to load").arg(mSettingFile.fileName())) ); } else { - LOG_DEBUG( (QString("Configuration file '%1' failed to load").arg(mSettingFile.fileName())) ); + LOG_DEBUG( (QString("Configuration file '%1' successfully loaded").arg(mSettingFile.fileName())) ); } } + return err; } @@ -270,3 +271,55 @@ if ( vMessage ) { *vMessage = msg; } return err; } + +/*! + * \brief Settings::loadTranslation + * \return + */ +int Settings::loadTranslation() +{ + int err = Settings_Error::eError_None; + QString qmFile; + bool ok = true; + +// QString mCategory = Storage::Settings_Category_SettingsSystem; +// QString mLanguage = ""; +// mLanguage = _Settings.value(mCategory, "Localization", "Language").toString(); +// if ( mLanguage.isEmpty() ) { +// qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------Could Not Find the Language"; +// } +// else { +// qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------mLanguage:" << mLanguage; +// } +// QLocale::setDefault(QLocale::German); + + + QString locale = _Settings.systemLocale(); + if( locale.isEmpty()) { + err = Settings_Error::eError_No_SettingsLocale; + qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------Could Not Find the Language"; + LOG_DEBUG(errorMessage(err)); +// goto lOut; + } + + qmFile = QString("%1%2%4.%3") + .arg(Storage::Settings_Path()) + .arg(Storage::Settings_Category_Translation) + .arg("qm") + .arg(_settingsLocalSeparator + QString("de")); // locale); + + qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------qmFile:" << qmFile; + + ok = _translator.load(qmFile); + if ( ! ok) { + qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------FAILED"; + err = Settings_Error::eError_SettingNotExists; + goto lOut; + } + + QApplication::installTranslator(&_translator); + +lOut: + + return err; +} Index: sources/storage/Settings.h =================================================================== diff -u -ra75bc5b80ad4ebde50f028b550cd534e589bd059 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/storage/Settings.h (.../Settings.h) (revision a75bc5b80ad4ebde50f028b550cd534e589bd059) +++ sources/storage/Settings.h (.../Settings.h) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -18,6 +18,7 @@ #include #include #include +#include // Project #include "main.h" // Doxygen : do not remove @@ -39,6 +40,7 @@ class Settings { +private: // Settings const char *_config_attribute_tag = "#--"; const char *_duplicate_key_on = "duplicate_key_on"; @@ -47,6 +49,8 @@ const char *_settingsFormat = "%1/%2.%3"; const char *_settingsLocalSeparator = "_"; + QTranslator _translator; + struct Detail { QString category; QString location; @@ -69,6 +73,7 @@ eError_No_SettingsFolder , eError_No_SettingsFile , eError_SettingNotExists , + eError_No_SettingsLocale , }; private: const QHash settingsError_Message { // no translation for the error. My experience shows the error messages if translated is not useful for serviceability and debugging. @@ -84,6 +89,7 @@ { eError_No_SettingsFolder , "No settings folder in the %1 path found." }, { eError_No_SettingsFile , "No settings file in the %1 folder found." }, { eError_SettingNotExists , "The setting file %1 doesn't exists." }, + { eError_No_SettingsLocale , "The system locale no defined." }, }; public: const QString errorMessage(int vErr, QString vArg1 = "", QString vArg2 = "") { @@ -108,6 +114,7 @@ bool parse(const Detail &vDetail); + public: Settings() {} @@ -139,6 +146,7 @@ int saveSystem (const QString &vGroup, const QString &vKey, const QString &vValue); int configurationsMove (QString *vMessage = nullptr, bool vIsUpdate = false); int configurationsPOST (Location_Enum vLoc = Location_Enum::eSecured) { Q_UNUSED(vLoc); return true; } + int loadTranslation (); static QString category(Category_Enum vCategory) { switch (vCategory) { // NOTE: don't use default case Index: sources/storage/StorageGlobals.cpp =================================================================== diff -u -ra75bc5b80ad4ebde50f028b550cd534e589bd059 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision a75bc5b80ad4ebde50f028b550cd534e589bd059) +++ sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -100,6 +100,7 @@ const char *Settings_Category_MessagesUnhandled = "Messages/Unhandled" ; const char *Settings_Category_SettingsSystem = "Settings/System" ; const char *Settings_Category_GenericConfirm = "Confirm/Confirm" ; + const char *Settings_Category_Translation = "Translation/Translation" ; const char *Settings_Key_Title = "Title" ; const char *Settings_Key_Message = "Message" ; const char *Settings_Key_ListTitle = "ListTitle" ; Index: sources/storage/StorageGlobals.h =================================================================== diff -u -ra75bc5b80ad4ebde50f028b550cd534e589bd059 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision a75bc5b80ad4ebde50f028b550cd534e589bd059) +++ sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -63,6 +63,7 @@ extern const char *Settings_Category_MessagesUnhandled ; extern const char *Settings_Category_SettingsSystem ; extern const char *Settings_Category_GenericConfirm ; + extern const char *Settings_Category_Translation ; // Settings - Keys extern const char *Settings_Key_Title ; extern const char *Settings_Key_Message ; Index: sources/view/settings/VLocalization.cpp =================================================================== diff -u -ra75bc5b80ad4ebde50f028b550cd534e589bd059 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/view/settings/VLocalization.cpp (.../VLocalization.cpp) (revision a75bc5b80ad4ebde50f028b550cd534e589bd059) +++ sources/view/settings/VLocalization.cpp (.../VLocalization.cpp) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -48,6 +48,8 @@ // FIXME: Notify UI with a message for success + keyboardAcronym( _keyboardLocaleMap.value(vLanguageIndex) ); + qDebug() << __FUNCTION__ << ":" << __LINE__ << ":" << "------------------keyboardAcronym:" << keyboardAcronym(); return; Index: sources/view/settings/VLocalization.h =================================================================== diff -u -rd866ef66b21f114f07cb80a07860900cd43daff0 -ra522e6aa7a36ac696a9a956200e89d838f319e25 --- sources/view/settings/VLocalization.h (.../VLocalization.h) (revision d866ef66b21f114f07cb80a07860900cd43daff0) +++ sources/view/settings/VLocalization.h (.../VLocalization.h) (revision a522e6aa7a36ac696a9a956200e89d838f319e25) @@ -49,13 +49,22 @@ {3, "fr"} }; + QMap _keyboardLocaleMap { + {0, "en_US"}, + {1, "es_ES"}, + {2, "de_DE"}, + {3, "fr_FR"} + }; + // The property adjustment_Triggered has to be always true // and to always trigger the change event to work as a notifier for GUI // has been manually tested that it works perfectly fine TRIGGER ( bool , adjustment , 0) PROPERTY( QString , notification ,"") PROPERTY( quint8 , languageIndex , 0) + PROPERTY( QString , keyboardAcronym ,"de_DE") + READONLY( QStringList, languageList, _languageMap.values()) VIEW_DEC_CLASS(VLocalization)