实现切换语言接口
authorCaisking <3449750381@qq.com>
Thu, 28 Mar 2024 02:25:14 +0000 (10:25 +0800)
committerCaisking <3449750381@qq.com>
Thu, 28 Mar 2024 02:25:14 +0000 (10:25 +0800)
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/config/ConfigModel.json
code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h
code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/userdata/ConfigModel.json

index e1ca7d9..ebabd1d 100644 (file)
@@ -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();
index 6d62501..8850d8c 100644 (file)
@@ -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
index a48f0fa..b42db7c 100644 (file)
@@ -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))
             {
index 068acf6..447d4f9 100644 (file)
@@ -141,21 +141,20 @@ namespace OHOS
         return dialid_;
     }
 
-    void ConfigModel::SetLanguage(uint8_t language)
+    void ConfigModel::SetLanguage(int language)
     {
-        language_ = language;
-        WriteJsonData<int>(GetcJSON(), "languages_satuas", language_);
+        languageid_ = language;
+        WriteJsonData<int>(GetcJSON(), "Language_Id", languageid_);
     }
 
     int ConfigModel::GetLanguage()
     {
-        language_ = (ReadJsonData<int>(GetcJSON(), "languages_satuas"));
-        return language_;
+        languageid_ = (ReadJsonData<int>(GetcJSON(), "Language_Id"));
+        return languageid_;
     }
 
     char *ConfigModel::Getimei()
     {
-
         return imei_str;
     }
 
index be59452..8f91327 100644 (file)
@@ -7,12 +7,77 @@
 #include "wearable_log.h"
 #include "language/LanguageInit.h"
 #include "config/include/ConfigModel.h"
-#include <fstream>
+
 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;
     }
 
index 7721316..590f1c2 100644 (file)
 
 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];
     };
 }
 
index 7834817..b5b4151 100644 (file)
@@ -9,6 +9,7 @@
 #include "../../../../../../drivers/peripheral/utils/custom_utils.h"\r
 #include "common/key_code.h"\r
 #include "custom_utils.h"\r
+#include "language/LanguageInit.h"\r
 \r
 namespace OHOS\r
 {\r
@@ -195,27 +196,21 @@ namespace OHOS
     // 用来监听语言切换\r
     bool RadiobuttonOnChangeListener::OnChange(UICheckBox::UICheckBoxState state)\r
     {\r
-#if 0\r
-        // 获取字体单例\r
-        UIFont *uiFont = UIFont::GetInstance();\r
-        if (uiFont == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get UIFont error");\r
-            return false;\r
-        }\r
-        /* -------------------------------------------------------------------------- */\r
+        language *g_planguage;\r
+        // static const char *en = "user/res/language_config/font/en.lang";\r
+        // static const char *zh_CN = "user/res/language_config/font/zh.lang";\r
         switch (state)\r
         {\r
         case UICheckBox::SELECTED:\r
             if (isChineseRadioButtonSelected())\r
             {\r
                 // 中文文本\r
-                g_planguage->changelanguage(0);\r
+                g_planguage->ChangeLanguage(LanguageId::ZH_CN);\r
             }\r
             else if (isEnglishRadioButtonSelected())\r
             {\r
                 // 英语文本\r
-                g_planguage->changelanguage(1);\r
+                g_planguage->ChangeLanguage(LanguageId::EN);\r
             }\r
             m_label->SetTextId(11);\r
             // 强制刷新\r
@@ -228,7 +223,6 @@ namespace OHOS
         default:\r
             break;\r
         }\r
-#endif\r
         return true;\r
     }\r
 \r
index 957f119..8850d8c 100644 (file)
@@ -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