From: Caisking <3449750381@qq.com> Date: Thu, 28 Mar 2024 02:25:14 +0000 (+0800) Subject: 实现切换语言接口 X-Git-Tag: release_V1.2.70_20241020_135402~1251 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=1e4553961dd418e184971b7c3d97299bd24d6c5a;p=mirrors%2FFD230.git 实现切换语言接口 --- diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp index e1ca7d961..ebabd1d75 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp @@ -341,22 +341,16 @@ namespace OHOS void NativeLauncher::InitNativeLauncher() { - + ConfigModel::GetInstance()->Init(); // 初始化语言 GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, DEFAULT_VECTOR_FONT_FILENAME); WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "NativeLauncher::InitNativeLauncher"); /* -------------------------------------------------------------------------- */ // 从语言json配置里面读取语言包 -#if 1 if (language::GetInstance()->InitLangues() == false) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues error"); } -#endif - /* ------------------------------- ConfigModel ------------------------------ */ - ConfigModel::GetInstance()->Init(); - /* -------------------------------------------------------------------------- */ - // 初始化所有预加载slice InitBtHeadsetEvent(); // 蓝牙ct和tg适配初始化 InitAllNativeSlices(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/ConfigModel.json b/code/sdk/application/wearable/fd230app/nativeui/config/ConfigModel.json index 6d62501ac..8850d8c78 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/ConfigModel.json +++ b/code/sdk/application/wearable/fd230app/nativeui/config/ConfigModel.json @@ -5,13 +5,6 @@ "TradionalBlueToothToggleButtonState": false, "HeartRateOrBloodOxygenQuickAccessSwitch": 0, "Dial_Id": 0, - "languages": { - "zh": { - "path": "user/res/language_config/font/zh.lang" - }, - "en": { - "path": "user/res/language_config/font/en.lang" - } - }, - "languages_satuas": 0 + "Dial_Name": "KUMI", + "Language_Id": 0 } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h index a48f0fadd..b42db7c95 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h @@ -42,7 +42,7 @@ namespace OHOS int GetHeartRateOrBloodOxygenQuickAccessSwitch(void); void SetDialId(uint8_t id); int GetDialId(); - void SetLanguage(uint8_t language); + void SetLanguage(int languageid); int GetLanguage(); char *Getimei(); char *GetpyVer(); @@ -68,7 +68,7 @@ namespace OHOS bool TradionalBlueToothToggleButtonState{false}; // 用来记录蓝牙开关状态,默认关闭状态 int HeartRateOrBloodOxygenQuickAccessSwitch{0}; // 心率或血氧快速访问开关,默认快速访问血氧打开 int dialid_; // 表盘id - int language_; // 语言状态 + int languageid_; // 语言状态 char *imei_str = NULL; char *pyVer = NULL; char *moderVer = NULL; @@ -89,7 +89,7 @@ namespace OHOS { if (cJSON_IsString(field_item)) { - return T(field_item->valuestring); + return T(field_item->string); } else if (cJSON_IsNumber(field_item)) { diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp index 068acf695..447d4f922 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp @@ -141,21 +141,20 @@ namespace OHOS return dialid_; } - void ConfigModel::SetLanguage(uint8_t language) + void ConfigModel::SetLanguage(int language) { - language_ = language; - WriteJsonData(GetcJSON(), "languages_satuas", language_); + languageid_ = language; + WriteJsonData(GetcJSON(), "Language_Id", languageid_); } int ConfigModel::GetLanguage() { - language_ = (ReadJsonData(GetcJSON(), "languages_satuas")); - return language_; + languageid_ = (ReadJsonData(GetcJSON(), "Language_Id")); + return languageid_; } char *ConfigModel::Getimei() { - return imei_str; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp b/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp index be594528f..8f9132781 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp @@ -7,12 +7,77 @@ #include "wearable_log.h" #include "language/LanguageInit.h" #include "config/include/ConfigModel.h" -#include + namespace OHOS { - cJSON *cjson_json = NULL; + // 定义语言结构体 + struct Language + { + const char *code; + const char *name; + const char *description; + }; + + // 初始化 languages 数组 + struct Language languages[] = { + {"zh_CN", "中文", "中文"}, + {"en", "English", "英语"}, + {"ja", "日本語", "日语"}, + {"ko", "한국어", "韩语"}, + {"es", "Español", "西班牙语"}, + {"ru", "Русский", "俄语"}, + {"hr", "Hrvatski", "克罗地亚语"}, + {"de", "Deutsch", "德语"}, + {"pt", "Português", "葡萄牙语"}, + {"fr", "Français", "法语"}, + {"nl", "Nederlands", "荷兰语"}, + {"it", "Italiano", "意大利语"}, + {"cs", "ČeÅ¡tina", "捷克语"}, + {"el", "Ελληνικά", "希腊语"}, + {"hi", "हिन्दी", "印地语"}, + {"id", "Bahasa Indonesia", "印尼语"}, + {"ms", "Bahasa Melayu", "马来语"}, + {"pl", "Polski", "波兰语"}, + {"th", "ไทย", "泰语"}, + {"vi", "Tiếng Việt", "越南语"}, + {"fi", "Suomi", "芬兰语"}, + {"ro", "Română", "罗马尼亚语"}, + {"tr", "Türkçe", "土耳其语"}, + {"fa", "فارسی", "波斯语"}, + {"ar", "العربية", "阿拉伯语"}, + {"he", "עברית", "希伯来语"}, + {"uk", "Українська", "乌克兰语"}, + {"sv", "Svenska", "瑞典语"}, + {"uz", "O‘zbek", "乌兹别克语"}, + {"az", "Azərbaycan dili", "阿塞拜疆语"}}; + + static const char *en = "user/res/language_config/font/en.lang"; + static const char *zh_CN = "user/res/language_config/font/zh.lang"; + static const uint8_t langcount = 2; + const char *resFiles[langcount] = {zh_CN, en}; + static language *g_planguage{nullptr}; + /*** + * @description: 通过元素找下标 + * @param {char} *arr + * @param {int} size + * @param {char} *target + * @return {*} + * @brief + */ + int FindIndex(const char *arr[], int size, const char *target) + { + for (int i = 0; i < size; i++) + { + if (strcmp(arr[i], target) == 0) + { + return i; // 返回找到的元素的下标 + } + } + return -1; // 如果未找到目标元素,返回-1 + } + language::language() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "language::language"); @@ -32,42 +97,34 @@ namespace OHOS bool language::InitLangues() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues"); - static const char *BIN_LANG_EN = "user/res/language_config/font/en.lang"; - static const char *BIN_LANG_ZH = "user/res/language_config/font/zh.lang"; - const char *resFiles[] = {BIN_LANG_ZH, BIN_LANG_EN}; - - // Check if the language files exist before registering them - if (!fileExists(BIN_LANG_ZH) || !fileExists(BIN_LANG_EN)) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Language files do not exist"); - return false; - } + // 获取json里面的语言 + int thelanguage = ConfigModel::GetInstance()->GetLanguage(); - FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, (sizeof(resFiles) / sizeof(char *)), 1); - // FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, (sizeof(resFiles) / sizeof(char *)), languages_satuas); + FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, langcount, thelanguage); return true; } bool language::fileExists(const char *fileName) { std::ifstream file(fileName); - return file.good(); + return file.is_open(); } - // 改变语言之后,应该保存状态进去json文件 - bool language::changelanguage(int languages_satuas) + // 切换语言功能 + bool language::ChangeLanguage(int language_status) { -#if 0 - UIFont *uiFont = UIFont::GetInstance(); - if (uiFont == nullptr) + + if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get UIFont error"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error getting FontGlobalManager or UIFont"); return false; } - FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, (sizeof(resFiles) / sizeof(char *)), languages_satuas); - uiFont->SetCurrentLangId(languages_satuas); -#endif + FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, langcount, language_status); + UIFont::GetInstance()->SetCurrentLangId(language_status); + + ConfigModel::GetInstance()->SetLanguage(language_status); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "resFiles[language_status]:%s", resFiles[language_status]); return true; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h b/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h index 77213160d..590f1c2ae 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h +++ b/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h @@ -13,6 +13,40 @@ namespace OHOS { + // 定义语言ID的枚举类 + enum LanguageId + { + ZH_CN = 0, + EN, + JA, + KO, + ES, + RU, + HR, + DE, + PT, + FR, + NL, + IT, + CS, + EL, + HI, + ID, + MS, + PL, + TH, + VI, + FI, + RO, + TR, + FA, + AR, + HE, + UK, + SV, + UZ, + AZ + }; class language { public: @@ -20,13 +54,8 @@ namespace OHOS ~language(); static language *GetInstance(); bool InitLangues(); - bool changelanguage(int languages_satuas); + bool ChangeLanguage(int language_status); bool fileExists(const char *fileName); - - private: - std::string JsonFilePath = "user/res/language_config/config.json"; - int16_t languages_satuas; - const char *resFiles[2]; }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp index 7834817cc..b5b41514c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp @@ -9,6 +9,7 @@ #include "../../../../../../drivers/peripheral/utils/custom_utils.h" #include "common/key_code.h" #include "custom_utils.h" +#include "language/LanguageInit.h" namespace OHOS { @@ -195,27 +196,21 @@ namespace OHOS // 用来监听语言切换 bool RadiobuttonOnChangeListener::OnChange(UICheckBox::UICheckBoxState state) { -#if 0 - // 获取字体单例 - UIFont *uiFont = UIFont::GetInstance(); - if (uiFont == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get UIFont error"); - return false; - } - /* -------------------------------------------------------------------------- */ + language *g_planguage; + // static const char *en = "user/res/language_config/font/en.lang"; + // static const char *zh_CN = "user/res/language_config/font/zh.lang"; switch (state) { case UICheckBox::SELECTED: if (isChineseRadioButtonSelected()) { // 中文文本 - g_planguage->changelanguage(0); + g_planguage->ChangeLanguage(LanguageId::ZH_CN); } else if (isEnglishRadioButtonSelected()) { // 英语文本 - g_planguage->changelanguage(1); + g_planguage->ChangeLanguage(LanguageId::EN); } m_label->SetTextId(11); // 强制刷新 @@ -228,7 +223,6 @@ namespace OHOS default: break; } -#endif return true; } diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/userdata/ConfigModel.json b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/userdata/ConfigModel.json index 957f11962..8850d8c78 100644 --- a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/userdata/ConfigModel.json +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/userdata/ConfigModel.json @@ -4,5 +4,7 @@ "ScreenDurationRadioButtonSlectValue": 1, "TradionalBlueToothToggleButtonState": false, "HeartRateOrBloodOxygenQuickAccessSwitch": 0, - "Dial_Id":0 + "Dial_Id": 0, + "Dial_Name": "KUMI", + "Language_Id": 0 } \ No newline at end of file