using System.Collections;
|
using System.Collections.Generic;
|
using System;
|
using UnityEngine;
|
using LitJson;
|
|
|
public static class Language
|
{
|
public static int languageNumber
|
{
|
get;
|
set;
|
}
|
|
public static event Action languageChangeEvent;
|
|
public static void ChangeLanguage(int _number)
|
{
|
if (languageChangeEvent != null)
|
{
|
languageChangeEvent();
|
}
|
}
|
|
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("LanguageEx");
|
if (config.Numerical1 == null || config.Numerical2 == null || config.Numerical3 == null)
|
{
|
return;
|
}
|
|
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))
|
{
|
//玩家已经选择过语言,不做处理
|
Debug.Log("当前选择语言:" + id);
|
return;
|
}
|
|
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);
|
}
|
|
/// <summary>
|
/// 语言的ID,用于区分下载资源
|
/// </summary>
|
/// <value></value>
|
public static string Id
|
{
|
get
|
{
|
if (languageStartDict == null || languageStartDict.Count == 0)
|
{
|
return "";
|
}
|
if (!languageStartDict.ContainsKey(VersionConfigEx.Get().appId))
|
{
|
return "";
|
}
|
return LocalSave.GetString("LANGUAGE_ID1");
|
}
|
set
|
{
|
LocalSave.SetString("LANGUAGE_ID1", value);
|
}
|
}
|
|
//多语言的路径
|
//默认路径不附加地址,Id不为空时附加Id
|
public static string fixPath
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(Id))
|
return "";
|
return string.Format("/{0}", Id);
|
}
|
}
|
|
|
// 获取语言选项
|
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;
|
var languageInfo = LanguageConfig.Get(_id);
|
if (languageInfo == null)
|
{
|
#if UNITY_EDITOR
|
// TODO YYL
|
// if (_id.StartsWith(NewBieGuideScriptableObject.GuidesPrefixNewBie) ||
|
// _id.StartsWith(NewBieGuideScriptableObject.GuidesPrefixFun))
|
// return string.Empty;
|
Debug.LogErrorFormat("缺少语言表配置,id: {0}", _id);
|
#endif
|
return string.Empty;
|
}
|
|
if (string.IsNullOrEmpty(languageInfo.content))
|
{
|
Debug.LogFormat("语言内容为空,id: {0}", _id);
|
}
|
|
return languageInfo.content;
|
}
|
|
public static string Get(string _id, params object[] _objects)
|
{
|
var content = Get(_id);
|
try
|
{
|
return string.Format(content, _objects);
|
}
|
catch (Exception ex)
|
{
|
Debug.LogFormat("语言内容格式错误,id: {0}", _id);
|
return content;
|
}
|
}
|
|
// 基础泛型版本
|
public static string Get<T1>(string _id, T1 arg1)
|
{
|
var content = Get(_id);
|
try
|
{
|
// 使用泛型可以避免装箱,编译器会为值类型生成特化版本
|
return string.Format(content, arg1);
|
}
|
catch (Exception ex)
|
{
|
Debug.LogFormat("语言内容格式错误,id: {0}", _id);
|
return content;
|
}
|
}
|
|
public static string Get<T1, T2>(string _id, T1 arg1, T2 arg2)
|
{
|
var content = Get(_id);
|
try
|
{
|
return string.Format(content, arg1, arg2);
|
}
|
catch (Exception ex)
|
{
|
Debug.LogFormat("语言内容格式错误,id: {0}", _id);
|
return content;
|
}
|
}
|
|
// 继续扩展更多参数...
|
public static string Get<T1, T2, T3>(string _id, T1 arg1, T2 arg2, T3 arg3)
|
{
|
var content = Get(_id);
|
try
|
{
|
return string.Format(content, arg1, arg2, arg3);
|
}
|
catch (Exception ex)
|
{
|
Debug.LogFormat("语言内容格式错误,id: {0}", _id);
|
return content;
|
}
|
}
|
|
public static string Get<T1, T2, T3, T4>(string _id, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
|
{
|
var content = Get(_id);
|
try
|
{
|
return string.Format(content, arg1, arg2, arg3, arg4);
|
}
|
catch (Exception ex)
|
{
|
Debug.LogFormat("语言内容格式错误,id: {0}", _id);
|
return content;
|
}
|
}
|
|
public static string Get<T1, T2, T3, T4, T5>(string _id, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
|
{
|
var content = Get(_id);
|
try
|
{
|
return string.Format(content, arg1, arg2, arg3, arg4, arg5);
|
}
|
catch (Exception ex)
|
{
|
Debug.LogFormat("语言内容格式错误,id: {0}", _id);
|
return content;
|
}
|
}
|
|
|
|
public static string GetFromLocal(int _id)
|
{
|
var languageInfo = PriorLanguageConfig.Get(_id);
|
if (languageInfo == null)
|
{
|
Debug.LogFormat("缺少语言表配置,id: {0}", _id);
|
return string.Empty;
|
}
|
|
if (string.IsNullOrEmpty(languageInfo.Content))
|
{
|
Debug.LogFormat("语言内容为空,id: {0}", _id);
|
}
|
|
return languageInfo.Content;
|
}
|
|
public static string GetFromLocal(int _id, params object[] _objects)
|
{
|
var content = GetFromLocal(_id);
|
try
|
{
|
return string.Format(content, _objects);
|
}
|
catch (Exception ex)
|
{
|
Debug.LogFormat("语言内容格式错误,id: {0}", _id);
|
return content;
|
}
|
}
|
|
|
}
|