hch
5 天以前 447e07c49ee36931b9b4bcfcfee38a5892be5fcd
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;