hch
4 天以前 447e07c49ee36931b9b4bcfcfee38a5892be5fcd
585 趣动海外渠道对接 - 多语言界面
3个文件已修改
2个文件已添加
201 ■■■■ 已修改文件
Main/System/HeroUI/HeroBestWin.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Language/Language.cs 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/PlayerProfile/ChangeLanguageWin.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/PlayerProfile/ChangeLanguageWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/PlayerProfile/PlayerProfileWin.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
        }
    }
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代表随系统选择如果找不到则用默认,配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 @@
        }
    }
    //多语言的路径
    //默认路径不附加地址,Id不为空时附加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;
Main/System/PlayerProfile/ChangeLanguageWin.cs
New file
@@ -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);
            }
        }
    }
}
Main/System/PlayerProfile/ChangeLanguageWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2e64ebc16632a5d4895be9d2e57e2650
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
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());
    }
}