287 lines
7.7 KiB
C#
287 lines
7.7 KiB
C#
using Framework;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using cfg;
|
||
using cfg.StringCfg;
|
||
using Cysharp.Threading.Tasks;
|
||
using Newtonsoft.Json;
|
||
using PhxhSDK;
|
||
using SimpleJSON;
|
||
using UnityEngine;
|
||
|
||
public class StringManager
|
||
{
|
||
private static StringManager m_instance;
|
||
public static LanguageType CurLanguage = LanguageType.Default;
|
||
public static Dictionary<string, string> MixKeyDic;
|
||
public static string MixKeyConfigPath = "Assets/Config/MixKey/MixKeyConfig.json";
|
||
|
||
public static StringManager Instance
|
||
{
|
||
get
|
||
{
|
||
if (m_instance == null)
|
||
{
|
||
m_instance = new StringManager();
|
||
}
|
||
return m_instance;
|
||
}
|
||
}
|
||
|
||
public enum LanguageType
|
||
{
|
||
Default,
|
||
CN,
|
||
TW,
|
||
EN,
|
||
}
|
||
private DataString GetStringConfigByKey(string key)
|
||
{
|
||
var dataString = TableManager.Instance.Tables.StringConfig?.GetOrDefault(key);
|
||
if (dataString == null || string.IsNullOrEmpty(dataString.Value))
|
||
{
|
||
DebugUtil.LogWarning("{0}.GetStringConfigByKey: key = {1} is not exist, check table please!!",GetType(), key);
|
||
}
|
||
return dataString;
|
||
}
|
||
|
||
private string GetStringConfigValue(DataString data)
|
||
{
|
||
string value = "";
|
||
switch (CurLanguage)
|
||
{
|
||
case (LanguageType.Default):
|
||
{
|
||
value = data.Value;
|
||
break;
|
||
}
|
||
case (LanguageType.CN):
|
||
{
|
||
value = data.Value;
|
||
break;
|
||
}
|
||
case (LanguageType.TW):
|
||
{
|
||
break;
|
||
}
|
||
case (LanguageType.EN):
|
||
{
|
||
value = data.ValueEn;
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
DebugUtil.LogError($"==== 文本翻译的语言不存在相应的枚举值!请检查语言设置!!! ====");
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
value = _GetParamsReplacedStr(data, value);
|
||
|
||
return value;
|
||
}
|
||
|
||
private string _GetParamsReplacedStr(DataString data, string content)
|
||
{
|
||
if(!content.Contains("[p"))
|
||
{
|
||
return content;
|
||
}
|
||
|
||
string retStr = content;
|
||
if (content.Contains("[p0]"))
|
||
{
|
||
var param = _GetParam(data, 0);
|
||
if (param == null || !MixKeyDic.ContainsKey(param))
|
||
{
|
||
DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}");
|
||
return content;
|
||
}
|
||
var val = MixKeyDic[param];
|
||
retStr = retStr.Replace("[p0]", val);
|
||
}
|
||
|
||
if (content.Contains("[p1]"))
|
||
{
|
||
var param = _GetParam(data, 1);
|
||
if (param == null || !MixKeyDic.ContainsKey(param))
|
||
{
|
||
DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}");
|
||
return content;
|
||
}
|
||
var val = MixKeyDic[param];
|
||
retStr = retStr.Replace("[p1]", val);
|
||
}
|
||
|
||
if (content.Contains("[p2]"))
|
||
{
|
||
var param = _GetParam(data, 2);
|
||
if (param == null || !MixKeyConfig.MixKeyDic.ContainsKey(param))
|
||
{
|
||
DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}");
|
||
return content;
|
||
}
|
||
var val = MixKeyConfig.MixKeyDic[param];
|
||
retStr = retStr.Replace("[p2]", val);
|
||
}
|
||
|
||
return retStr;
|
||
}
|
||
|
||
private string _GetParam(DataString data, int idx)
|
||
{
|
||
if (idx == 0)
|
||
{
|
||
return data.Param0;
|
||
}
|
||
|
||
if (idx == 1)
|
||
{
|
||
return data.Param1;
|
||
}
|
||
|
||
if (idx == 2)
|
||
{
|
||
return data.Param2;
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
public string GetTextByKey(string key)
|
||
{
|
||
DataString DataString = GetStringConfigByKey(key);
|
||
if (DataString != null)
|
||
{
|
||
return GetStringConfigValue(DataString);
|
||
}
|
||
return key;
|
||
}
|
||
|
||
public string GetTextByKeyAndParams<T>(string key, T param)
|
||
{
|
||
DataString DataString = GetStringConfigByKey(key);
|
||
string str = key;
|
||
if (DataString != null)
|
||
{
|
||
str = GetStringConfigValue(DataString);
|
||
str = string.Format(str, param);
|
||
}
|
||
|
||
return str;
|
||
}
|
||
|
||
public string GetTextByKeyAndParams<T0, T1>(string key, T0 param0, T1 param1)
|
||
{
|
||
DataString DataString = GetStringConfigByKey(key);
|
||
string str = key;
|
||
if (DataString != null)
|
||
{
|
||
str = GetStringConfigValue(DataString);
|
||
str = string.Format(str, param0, param1);
|
||
}
|
||
|
||
return str;
|
||
}
|
||
|
||
public string GetTextByKeyAndParams<T0, T1, T2>(string key, T0 param0, T1 param1, T2 param2)
|
||
{
|
||
DataString DataString = GetStringConfigByKey(key);
|
||
string str = key;
|
||
if (DataString != null)
|
||
{
|
||
str = GetStringConfigValue(DataString);
|
||
str = string.Format(str, param0, param1, param2);
|
||
}
|
||
|
||
return str;
|
||
}
|
||
|
||
//本地化,后续扩展
|
||
public string GetLocalizeTextByKey(string key)
|
||
{
|
||
return GetTextByKey(key);
|
||
}
|
||
|
||
//可填入参数的文本,目前最多支持三个参数
|
||
public string GetLocalizeTextByKeyAndParams(string key, params object[] param)
|
||
{
|
||
if (param.Length <= 0)
|
||
{
|
||
return GetTextByKey(key);
|
||
}
|
||
else if (param.Length == 1)
|
||
{
|
||
return GetTextByKeyAndParams(key, param[0]);
|
||
}
|
||
else if (param.Length == 2)
|
||
{
|
||
return GetTextByKeyAndParams(key, param[0], param[1]);
|
||
}
|
||
else if (param.Length == 3)
|
||
{
|
||
return GetTextByKeyAndParams(key, param[0], param[1], param[2]);
|
||
}
|
||
|
||
DebugUtil.LogError(string.Format("==== 请检查文本内容参数个数!!! 文本Key为 {0} ! ====", key));
|
||
return "";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取本地化文本,根据本地化key和参数列表
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <param name="param"></param>
|
||
/// <returns></returns>
|
||
public string GetLocalizeTextByKeyAndList(string key, params string[] param)
|
||
{
|
||
if (param == null)
|
||
return GetTextByKey(key);
|
||
|
||
switch (param.Length)
|
||
{
|
||
case 0:
|
||
return GetTextByKey(key);
|
||
case 1:
|
||
return GetTextByKeyAndParams(key, param[0]);
|
||
case 2:
|
||
return GetTextByKeyAndParams(key, param[0], param[1]);
|
||
case 3:
|
||
return GetTextByKeyAndParams(key, param[0], param[1], param[2]);
|
||
default:
|
||
{
|
||
DebugUtil.LogError($"==== 请检查文本内容参数个数!!! 文本Key为 {key} ! ====");
|
||
}
|
||
return string.Empty;
|
||
}
|
||
}
|
||
|
||
public static void ChangeLanguage(LanguageType language)
|
||
{
|
||
CurLanguage = language;
|
||
}
|
||
|
||
public static string GetStoryTalkText(string key)
|
||
{
|
||
return key;
|
||
}
|
||
|
||
#region MixKey加载
|
||
|
||
public static async UniTask LoadMixKeyDic()
|
||
{
|
||
var txtAsset = await AssetManager.Instance.LoadAssetAsync<TextAsset>(MixKeyConfigPath);
|
||
if (txtAsset == null)
|
||
{
|
||
DebugUtil.LogError("MixKeyConfig 资源无法加载,请检查路径!");
|
||
return;
|
||
}
|
||
var jsonTxt = txtAsset.text;
|
||
var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonTxt);
|
||
MixKeyDic = dic;
|
||
}
|
||
|
||
#endregion
|
||
} |