三国卡牌客户端基础资源仓库
hch
5 天以前 bb189e775d3ee605724c62067e527f7cb6706644
585 趣动海外渠道对接 - 多语言界面
1个文件已修改
84 ■■■■ 已修改文件
Assets/Launch/Manager/LocalResManager.cs 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Launch/Manager/LocalResManager.cs
@@ -107,7 +107,7 @@
    public static string versionUrlResult { get; private set; }
        /// <summary>
    /// <summary>
    /// 语言的ID,用于区分下载资源
    /// </summary>
    /// <value></value>
@@ -115,9 +115,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
@@ -126,6 +131,7 @@
        }
    }
    //多语言的路径
    //默认路径不附加地址,Id不为空时附加Id
    public static string fixPath
    {
@@ -292,37 +298,69 @@
    }
    static Dictionary<string, string> languageShowDict = new Dictionary<string, string>();//射中显示的多语言版本
    Dictionary<string, string> languageDict = new Dictionary<string, string>();// unity语言配置对应的约定字符
    string defaultLanguage = string.Empty;
    static Dictionary<string, string> languageShowDict = new Dictionary<string, string>();//界面显示的多语言版本
    //启动多语言的渠道,如{appid:[默认语言标识,是否首次安装强制指定语言,只包含哪些语言版本]}
    // 如{"sghy":["en","0","en,zh,ft"]},字符0代表随系统选择如果找不到则用默认,配1则不检查系统直接用默认
    //为了同代码版本同表维护,保持配置一致按appid区分,只做翻译处理
    static Dictionary<string, string[]> languageStartDict = new Dictionary<string, string[]>();//启动多语言的渠道
    Dictionary<string, string> languageDict = new Dictionary<string, string>();// unity语言配置对应的约定字符 找不到用默认
    public void InitDefaultLanguage()
    {
        if (languageShowDict == null || languageShowDict.Count == 0)
        //初始化, 该表是随包安装的如果热更需要二次才生效
        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))
        {
            var config = InitialFunctionConfig.Get("Language");
            Debug.LogFormat("系统语言:{0} {1}", Application.systemLanguage, config.Numerical1);
            if (string.IsNullOrEmpty(config.Numerical1))
                return;
            languageShowDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical1);
            languageDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical5);
            defaultLanguage = config.Numerical2;
            if (!languageShowDict.ContainsKey(defaultLanguage))
                defaultLanguage = string.Empty;
            //检查有没多语言
            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;
        string languageMark = ((int)Application.systemLanguage).ToString();
        if (languageDict.ContainsKey(languageMark))
        {
            id = languageDict[languageMark];
            //玩家已经选择过语言,不做处理
            Debug.Log("当前选择语言:" + id);
            return;
        }
        Id = languageShowDict.ContainsKey(id) ? id : defaultLanguage;
        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 = defaultCfg[0];
        }
        Id = id;
        Debug.LogFormat("系统语言:{0} 设置为{1}", Application.systemLanguage, Id);
    }