From 447e07c49ee36931b9b4bcfcfee38a5892be5fcd Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 24 三月 2026 18:34:18 +0800
Subject: [PATCH] 585 趣动海外渠道对接 - 多语言界面

---
 Main/System/PlayerProfile/PlayerProfileWin.cs       |   11 ++
 Main/System/Language/Language.cs                    |   96 ++++++++++++++++++-----
 Main/System/HeroUI/HeroBestWin.cs                   |    6 +
 Main/System/PlayerProfile/ChangeLanguageWin.cs.meta |   11 ++
 Main/System/PlayerProfile/ChangeLanguageWin.cs      |   77 +++++++++++++++++++
 5 files changed, 178 insertions(+), 23 deletions(-)

diff --git a/Main/System/HeroUI/HeroBestWin.cs b/Main/System/HeroUI/HeroBestWin.cs
index 634fa5a..8ae5787 100644
--- a/Main/System/HeroUI/HeroBestWin.cs
+++ b/Main/System/HeroUI/HeroBestWin.cs
@@ -222,6 +222,12 @@
         HeroUIManager.Instance.selectForPreviewHeroID = HeroUIManager.Instance.heroCollectList[resultIndex];
         Display();
         
+        //鎺у埗涓�绾у姛鑳界晫闈㈢殑鐨偆鎸夐挳
+        var ui = UIManager.Instance.GetUI<HeroBestBaseWin>();
+        if (ui != null)
+        {
+            ui.ShowSkinBtn();
+        }
     }
 
 
diff --git a/Main/System/Language/Language.cs b/Main/System/Language/Language.cs
index 9eb65ec..7261706 100644
--- a/Main/System/Language/Language.cs
+++ b/Main/System/Language/Language.cs
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System;
 using UnityEngine;
+using LitJson;
 
 
 public static class Language
@@ -22,38 +23,74 @@
         }
     }
 
+    public static Dictionary<string, string> languageShowDict = new Dictionary<string, string>();//鐣岄潰鏄剧ず鐨勫璇█鐗堟湰
+
+    //鍚姩澶氳瑷�鐨勬笭閬�,濡倇appid:[榛樿璇█鏍囪瘑,鏄惁棣栨瀹夎寮哄埗鎸囧畾璇█,鍙寘鍚摢浜涜瑷�鐗堟湰]}
+    // 濡倇"sghy":["en","0","en,zh,ft"]}锛屽瓧绗�0浠h〃闅忕郴缁熼�夋嫨濡傛灉鎵句笉鍒板垯鐢ㄩ粯璁わ紝閰�1鍒欎笉妫�鏌ョ郴缁熺洿鎺ョ敤榛樿
+    //涓轰簡鍚屼唬鐮佺増鏈悓琛ㄧ淮鎶わ紝淇濇寔閰嶇疆涓�鑷存寜appid鍖哄垎锛屽彧鍋氱炕璇戝鐞�
+    public static Dictionary<string, string[]> languageStartDict = new Dictionary<string, string[]>();//鍚姩澶氳瑷�鐨勬笭閬�
+    static Dictionary<string, string> languageDict = new Dictionary<string, string>();// unity璇█閰嶇疆瀵瑰簲鐨勭害瀹氬瓧绗� 鎵句笉鍒扮敤榛樿
 
     /// <summary>
-    /// 鏍规嵁绯荤粺璇█鑷姩璁剧疆榛樿璇█
+    /// 鏈己鍒惰瑷�鐨� 鏍规嵁绯荤粺璇█鑷姩璁剧疆榛樿璇█ 绛夋儏鍐�
     /// </summary>
     public static void InitDefaultLanguage()
     {
-        var config = InitialFunctionConfig.Get("Language").Numerical1;
-        Debug.LogFormat("绯荤粺璇█锛歿0} {1}", Application.systemLanguage, config);
-        if (string.IsNullOrEmpty(config))
+        //鍒濆鍖�, 璇ヨ〃鏄殢鍖呭畨瑁呯殑濡傛灉鐑洿闇�瑕佷簩娆℃墠鐢熸晥
+        var config = InitialFunctionConfig.Get("LanguageEx");
+
+        languageShowDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical1);
+        languageStartDict = JsonMapper.ToObject<Dictionary<string, string[]>>(config.Numerical2);
+        languageDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical3);
+
+        if (languageStartDict == null || !languageStartDict.ContainsKey(VersionConfigEx.Get().appId))
+        {
+            //妫�鏌ユ湁娌″璇█
+            Debug.Log("褰撳墠娓犻亾鏈紑鍚璇█:" + VersionConfigEx.Get().appId);
             return;
+        }
+
+        Debug.LogFormat("绯荤粺璇█锛歿0} {1}", Application.systemLanguage, config.Numerical1);
+
         var id = LocalSave.GetString("LANGUAGE_ID1");
         if (!string.IsNullOrEmpty(id))
-            return;
-
-        switch (Application.systemLanguage)
         {
-            case SystemLanguage.Chinese:
-            case SystemLanguage.ChineseSimplified:
-            case SystemLanguage.ChineseTraditional:
-                {
-                    id = "zh";
-                    break;
-                }
+            //鐜╁宸茬粡閫夋嫨杩囪瑷�锛屼笉鍋氬鐞�
+            Debug.Log("褰撳墠閫夋嫨璇█锛�" + id);
+            return;
         }
-        var json = LitJson.JsonMapper.ToObject(config);
-        if (json.Keys.Contains(id))
-            Id = id;
+
+        var defaultCfg = languageStartDict[VersionConfigEx.Get().appId];
+        string languageMark;
+        if (defaultCfg[1] == "0")
+        {
+            //闅忕郴缁熼�夋嫨
+            languageMark = ((int)Application.systemLanguage).ToString();
+            if (languageDict.ContainsKey(languageMark))
+            {
+                id = languageDict[languageMark];
+                var lanArr = defaultCfg[2].Split(',');
+                if (Array.IndexOf(lanArr, id) == -1)
+                {
+                    //涓嶅寘鍚殑璇█ 鐢ㄩ粯璁�
+                    id = defaultCfg[0];
+                }
+
+            }
+            else
+            {
+                //榛樿
+                id = defaultCfg[0];
+            }
+        }
         else
         {
-            //寮�鍚殑鎯呭喌涓嬪繀椤昏鏈変釜榛樿鍊�
-            Id = InitialFunctionConfig.Get("Language").Numerical2;
+            //寮哄埗鎸囧畾榛樿
+            id = defaultCfg[0];
         }
+
+        Id = id;
+        Debug.LogFormat("绯荤粺璇█锛歿0} 璁剧疆涓簕1}", Application.systemLanguage, Id);
     }
 
     /// <summary>
@@ -64,9 +101,14 @@
     {
         get
         {
-            var config = InitialFunctionConfig.Get("Language").Numerical1;
-            if (string.IsNullOrEmpty(config))
+            if (languageStartDict == null || languageStartDict.Count == 0)
+            {
                 return "";
+            }
+            if (!languageStartDict.ContainsKey(VersionConfigEx.Get().appId))
+            {
+                return "";
+            }
             return LocalSave.GetString("LANGUAGE_ID1");
         }
         set
@@ -75,6 +117,7 @@
         }
     }
 
+    //澶氳瑷�鐨勮矾寰�
     //榛樿璺緞涓嶉檮鍔犲湴鍧�锛孖d涓嶄负绌烘椂闄勫姞Id
     public static string fixPath
     {
@@ -86,6 +129,17 @@
         }
     }
 
+
+    // 鑾峰彇璇█閫夐」
+    public static string[] GetLanguages()
+    {
+        if (languageStartDict == null || !languageStartDict.ContainsKey(VersionConfig.Get().appId))
+        {
+            return null;
+        }
+        return languageStartDict[VersionConfig.Get().appId][2].Split(',');
+    }
+
     public static string Get(string _id)
     {
         // return string.Empty;
diff --git a/Main/System/PlayerProfile/ChangeLanguageWin.cs b/Main/System/PlayerProfile/ChangeLanguageWin.cs
new file mode 100644
index 0000000..8bd5bfe
--- /dev/null
+++ b/Main/System/PlayerProfile/ChangeLanguageWin.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ChangeLanguageWin : UIBase
+{
+    [SerializeField] Toggle[] languageToggles;
+    [SerializeField] Text[] languageTexts;
+    [SerializeField] Button changeBtn;
+
+    List<string> languageList = new List<string>();
+    protected override void InitComponent()
+    {
+        changeBtn.AddListener(() =>
+        {
+            int index = 0;
+            for (int i = 0; i < languageToggles.Length; i++)
+            {
+                if (languageToggles[i].isOn)
+                {
+                    index = i;
+                    break;
+                }
+            }
+
+            var lgId = languageList[index];
+            ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("language_tip_info"),
+                Language.Get("language_tip_btn2"), Language.Get("language_tip_btn1"), (yes) =>
+            {
+                if (yes)
+                {
+                    Language.Id = lgId;
+#if UNITY_EDITOR
+                    UnityEditor.EditorApplication.isPlaying = false;
+#else
+                    Application.Quit();
+#endif
+                }
+            });
+        });
+    }
+
+    protected override void OnPreOpen()
+    {
+        languageList = new List<string>();
+        Display();
+    }
+
+    protected override void OnPreClose()
+    {
+        base.OnPreClose();
+    }
+
+    void Display()
+    {
+        var languages = Language.GetLanguages();
+        for (int i = 0; i < languageToggles.Length; i++)
+        {
+            if (i < languages.Length)
+            {
+                languageToggles[i].SetActive(true);
+                languageTexts[i].text = Language.languageShowDict[languages[i]];
+                if (Language.Id == languages[i])
+                {
+                    languageToggles[i].isOn = true;
+                }
+                languageList.Add(languages[i]);
+            }
+            else
+            {
+                languageToggles[i].SetActive(false);
+            }
+        }
+    }
+    
+}
\ No newline at end of file
diff --git a/Main/System/PlayerProfile/ChangeLanguageWin.cs.meta b/Main/System/PlayerProfile/ChangeLanguageWin.cs.meta
new file mode 100644
index 0000000..0684b8b
--- /dev/null
+++ b/Main/System/PlayerProfile/ChangeLanguageWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2e64ebc16632a5d4895be9d2e57e2650
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/PlayerProfile/PlayerProfileWin.cs b/Main/System/PlayerProfile/PlayerProfileWin.cs
index b08f0aa..fd0d335 100644
--- a/Main/System/PlayerProfile/PlayerProfileWin.cs
+++ b/Main/System/PlayerProfile/PlayerProfileWin.cs
@@ -21,7 +21,8 @@
     [SerializeField] ButtonEx btnSyncPlatformAvatar;
     [SerializeField] ButtonEx btnCopy;
     [SerializeField] ButtonEx btnChangeName;
-    [SerializeField] ButtonEx btnText1;
+    [SerializeField] ButtonEx btnLanguage;
+    [SerializeField] ButtonEx btnText1; // 闅愮鍗忚
     [SerializeField] ButtonEx btnText2;
     protected override void InitComponent()
     {
@@ -57,6 +58,10 @@
         avatarCell.SetListener(() =>
         {
             UIManager.Instance.OpenWindow<PhantasmPavilionWin>();
+        });
+        btnLanguage.AddListener(()=>
+        {
+            UIManager.Instance.OpenWindow<ChangeLanguageWin>();
         });
     }
 
@@ -105,6 +110,8 @@
         avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
                                                     PlayerDatas.Instance.baseData.face,
                                                     PlayerDatas.Instance.baseData.facePic));
-        officialTitleCell.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID,1f);
+        officialTitleCell.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID, 1f);
+        var languages = Language.GetLanguages();
+        btnLanguage.SetActive(!languages.IsNullOrEmpty());
     }
 }
\ No newline at end of file

--
Gitblit v1.8.0