优化ChangeLanguage类
authorluozheng <1732036298@qq.com>
Mon, 1 Apr 2024 08:14:11 +0000 (16:14 +0800)
committerluozheng <1732036298@qq.com>
Mon, 1 Apr 2024 08:14:11 +0000 (16:14 +0800)
code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp
code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h
code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchPresenter.cpp

index cf8caed..33ab06c 100644 (file)
@@ -169,7 +169,7 @@ namespace OHOS
             cJSON_ReplaceItemInObject(json_obj, field_name, data_obj);
 
             char *jsonString = cJSON_Print(json_obj);
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "有格式的方式打印Json:\n%s\n", jsonString);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "有格式的方式打印Json:\n%s\n", jsonString);
             if (jsonString != nullptr)
             {
                 FILE *file = fopen(filePath.c_str(), "wb");
index b141cab..8e9758e 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-30 09:14:38
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-03-30 16:10:56
+ * @LastEditTime: 2024-04-01 16:12:50
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.cpp
  */
 #include <fstream>
@@ -109,4 +109,58 @@ namespace OHOS
         return true;
     }
 
+    bool language::ChangeLanguage(char *language_code)
+    {
+        if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error getting FontGlobalManager or UIFont");
+            return false;
+        }
+
+        // 获取语言Code对应的语言Id
+        LanguageId currentLanguageId = LanguageManager::GetInstance().GetLanguageIdByCode(language_code);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %s", currentLanguageId, language_code);
+        FontGlobalManager::GetInstance()->RegisterLanguageInfo(resFiles, langcount, currentLanguageId);
+        UIFont::GetInstance()->SetCurrentLangId(currentLanguageId);
+
+        ConfigModel::GetInstance()->SetLanguageCode(language_code);
+        ConfigModel::GetInstance()->SetLanguage(currentLanguageId);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "resFiles[%d]:%s", currentLanguageId, resFiles[currentLanguageId]);
+        return true;
+    }
+
+    /* ----------------------------- LanguageManager ---------------------------- */
+
+    LanguageManager::LanguageManager()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageManager::LanguageManager");
+        // 初始化语言代码到语言ID的映射关系
+        for (int i = 0; i < MAX_LANGUAGE; i++)
+        {
+            codeToIdMap[languages[i].code] = languages[i].languageid;
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%s %d", languages[i].code, languages[i].languageid);
+        }
+    }
+
+    LanguageManager::~LanguageManager()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LanguageManager::~LanguageManager");
+    }
+
+    LanguageManager &LanguageManager::GetInstance()
+    {
+        static LanguageManager instance;
+        return instance;
+    }
+
+    LanguageId LanguageManager::GetLanguageIdByCode(const std::string &code) const
+    {
+        auto it = codeToIdMap.find(code);
+        if (it != codeToIdMap.end())
+        {
+            return it->second;
+        }
+        // 如果找不到对应的语言ID,返回一个默认值
+        return LanguageId::ZH_CN; // 默认返回中文
+    }
 }
index a3934b8..4f71525 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-30 09:30:03
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-03-30 15:57:41
+ * @LastEditTime: 2024-04-01 16:00:57
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/LanguageInit.h
  */
 #ifndef LANGUAGE_INIT_H
@@ -66,40 +66,22 @@ namespace OHOS
         static language *GetInstance();
         bool InitLangues();
         bool ChangeLanguage(int language_status);
+        bool ChangeLanguage(char *language_code);
         bool fileExists(const char *fileName);
     };
 
     class LanguageManager
     {
     public:
-        static LanguageManager &GetInstance()
-        {
-            static LanguageManager instance;
-            return instance;
-        }
-        LanguageManager()
-        {
-            // 初始化语言代码到语言ID的映射关系
-            for (int i = 0; i < MAX_LANGUAGE; i++)
-            {
-                codeToIdMap[languages->code] = languages->languageid;
-            }
-        }
-        // 根据语言代码查找对应的语言ID
-        LanguageId GetLanguageIdByCode(const std::string &code) const
-        {
-            auto it = codeToIdMap.find(code);
-            if (it != codeToIdMap.end())
-            {
-                return it->second;
-            }
-            // 如果找不到对应的语言ID,返回一个默认值
-            return LanguageId::EN; // 这里假设默认返回英语
-        }
-        ~LanguageManager() {}
+        static LanguageManager &GetInstance();
+        //根据语言代码查找对应的语言ID
+        LanguageId GetLanguageIdByCode(const std::string &code) const;
 
     private:
-        // 假设有一个存储所有语言的容器 languages
+        LanguageManager(); // 私有构造函数,确保无法在外部实例化
+        ~LanguageManager();
+        LanguageManager(const LanguageManager &) = delete;            // 禁止拷贝构造
+        LanguageManager &operator=(const LanguageManager &) = delete; // 禁止赋值运算符
         std::map<std::string, LanguageId> codeToIdMap;
     };
 }
index 17cf4fe..50a757f 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-28 14:17:43
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-04-01 11:21:08
+ * @LastEditTime: 2024-04-01 14:41:00
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/language/src/LanguageSwitchPresenter.cpp
  */
 #include "AppViewIDs.h"
@@ -113,11 +113,9 @@ namespace OHOS
         }
         else
         {
-            LanguageId currentLanguageId = LanguageManager::GetInstance().GetLanguageIdByCode(p_LanguageSwitchModel->GetCurLanguageCode());
-            g_planguage->ChangeLanguage(currentLanguageId);
-            ConfigModel::GetInstance()->SetLanguageCode(p_LanguageSwitchModel->GetCurLanguageCode());
+            g_planguage->ChangeLanguage(p_LanguageSwitchModel->GetCurLanguageCode());
             m_labelext->SetTextId(STR_LANGUAGE);
-            m_labelext->ForceResetText();// 强制刷新
+            m_labelext->ForceResetText(); // 强制刷新
 
             p_UILabelButtonExt->SetImageSrc(SelectedImg, SelectedImg);
             p_UILabelButtonExt->Invalidate();