2023-08-22 19:08:45 +08:00
|
|
|
|
using Framework;
|
|
|
|
|
|
using System;
|
2023-11-08 15:50:08 +08:00
|
|
|
|
using System.Collections;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using cfg;
|
|
|
|
|
|
using cfg.StringCfg;
|
2024-06-21 14:52:24 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
using PhxhSDK;
|
|
|
|
|
|
using SimpleJSON;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
public class StringManager
|
|
|
|
|
|
{
|
|
|
|
|
|
private static StringManager m_instance;
|
2024-09-03 11:59:54 +08:00
|
|
|
|
//public static LanguageType CurLanguage = LanguageType.Default;
|
2024-06-21 14:52:24 +08:00
|
|
|
|
public static Dictionary<string, string> MixKeyDic;
|
|
|
|
|
|
public static string MixKeyConfigPath = "Assets/Config/MixKey/MixKeyConfig.json";
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
|
|
|
|
|
public static StringManager Instance
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_instance == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_instance = new StringManager();
|
|
|
|
|
|
}
|
|
|
|
|
|
return m_instance;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-03 11:59:54 +08:00
|
|
|
|
//public enum LanguageType
|
|
|
|
|
|
//{
|
|
|
|
|
|
// Default,
|
|
|
|
|
|
// CN,
|
|
|
|
|
|
// TW,
|
|
|
|
|
|
// EN,
|
|
|
|
|
|
//}
|
2024-07-10 16:34:43 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
private DataString GetStringConfigByKey(string key)
|
|
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
var dataString = TableManager.Instance.Tables.StringConfig?.GetOrDefault(key);
|
|
|
|
|
|
if (dataString == null || string.IsNullOrEmpty(dataString.Value))
|
|
|
|
|
|
{
|
2023-12-21 14:19:44 +08:00
|
|
|
|
DebugUtil.LogWarning("{0}.GetStringConfigByKey: key = {1} is not exist, check table please!!",GetType(), key);
|
2023-10-19 15:00:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
return dataString;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private string GetStringConfigValue(DataString data)
|
|
|
|
|
|
{
|
|
|
|
|
|
string value = "";
|
2024-09-03 11:59:54 +08:00
|
|
|
|
switch (LanguageManager.CurLanguage)
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
2024-09-03 11:59:54 +08:00
|
|
|
|
case (LanguageManager.LanguageType.Default):
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
value = data.Value;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
2024-09-03 11:59:54 +08:00
|
|
|
|
case (LanguageManager.LanguageType.CN):
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
value = data.Value;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
2024-09-03 11:59:54 +08:00
|
|
|
|
case (LanguageManager.LanguageType.TW):
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
2024-09-03 11:59:54 +08:00
|
|
|
|
case (LanguageManager.LanguageType.EN):
|
2023-10-19 15:00:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
value = data.ValueEn;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"==== 文本翻译的语言不存在相应的枚举值!请检查语言设置!!! ====");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-23 16:10:10 +08:00
|
|
|
|
value = _GetParamsReplacedStr(data, value);
|
|
|
|
|
|
|
2023-10-19 15:00:19 +08:00
|
|
|
|
return value;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-23 16:10:10 +08:00
|
|
|
|
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);
|
2024-06-21 14:52:24 +08:00
|
|
|
|
if (param == null || !MixKeyDic.ContainsKey(param))
|
2024-04-23 16:10:10 +08:00
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}");
|
|
|
|
|
|
return content;
|
|
|
|
|
|
}
|
2024-06-21 14:52:24 +08:00
|
|
|
|
var val = MixKeyDic[param];
|
2024-04-23 16:10:10 +08:00
|
|
|
|
retStr = retStr.Replace("[p0]", val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (content.Contains("[p1]"))
|
|
|
|
|
|
{
|
|
|
|
|
|
var param = _GetParam(data, 1);
|
2024-06-21 14:52:24 +08:00
|
|
|
|
if (param == null || !MixKeyDic.ContainsKey(param))
|
2024-04-23 16:10:10 +08:00
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}");
|
|
|
|
|
|
return content;
|
|
|
|
|
|
}
|
2024-06-21 14:52:24 +08:00
|
|
|
|
var val = MixKeyDic[param];
|
2024-04-23 16:10:10 +08:00
|
|
|
|
retStr = retStr.Replace("[p1]", val);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (content.Contains("[p2]"))
|
|
|
|
|
|
{
|
|
|
|
|
|
var param = _GetParam(data, 2);
|
2024-07-08 19:50:20 +08:00
|
|
|
|
if (param == null || !MixKeyDic.ContainsKey(param))
|
2024-04-23 16:10:10 +08:00
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}");
|
|
|
|
|
|
return content;
|
|
|
|
|
|
}
|
2024-07-08 19:50:20 +08:00
|
|
|
|
var val = MixKeyDic[param];
|
2024-04-23 16:10:10 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
public string GetTextByKey(string key)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataString DataString = GetStringConfigByKey(key);
|
|
|
|
|
|
if (DataString != null)
|
|
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
return GetStringConfigValue(DataString);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
return key;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string GetTextByKeyAndParams<T>(string key, T param)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataString DataString = GetStringConfigByKey(key);
|
|
|
|
|
|
string str = key;
|
|
|
|
|
|
if (DataString != null)
|
|
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
str = GetStringConfigValue(DataString);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
str = string.Format(str, param);
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
return str;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string GetTextByKeyAndParams<T0, T1>(string key, T0 param0, T1 param1)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataString DataString = GetStringConfigByKey(key);
|
|
|
|
|
|
string str = key;
|
|
|
|
|
|
if (DataString != null)
|
|
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
str = GetStringConfigValue(DataString);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
str = string.Format(str, param0, param1);
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
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)
|
|
|
|
|
|
{
|
2023-10-19 15:00:19 +08:00
|
|
|
|
str = GetStringConfigValue(DataString);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
str = string.Format(str, param0, param1, param2);
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
|
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 "";
|
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
|
|
2024-04-15 17:59:58 +08:00
|
|
|
|
/// <summary>
|
2024-04-15 19:34:15 +08:00
|
|
|
|
/// 获取本地化文本,根据本地化key和参数列表
|
2024-04-15 17:59:58 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
|
/// <param name="param"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public string GetLocalizeTextByKeyAndList(string key, params string[] param)
|
2023-11-08 15:50:08 +08:00
|
|
|
|
{
|
2024-04-15 17:59:58 +08:00
|
|
|
|
if (param == null)
|
2023-11-08 15:50:08 +08:00
|
|
|
|
return GetTextByKey(key);
|
2024-04-15 17:59:58 +08:00
|
|
|
|
|
|
|
|
|
|
switch (param.Length)
|
2023-11-08 15:50:08 +08:00
|
|
|
|
{
|
2024-04-15 17:59:58 +08:00
|
|
|
|
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;
|
2023-11-08 15:50:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-03 11:59:54 +08:00
|
|
|
|
//public static void ChangeLanguage(LanguageType language)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// CurLanguage = language;
|
|
|
|
|
|
//}
|
2023-10-24 14:47:25 +08:00
|
|
|
|
|
|
|
|
|
|
public static string GetStoryTalkText(string key)
|
|
|
|
|
|
{
|
|
|
|
|
|
return key;
|
|
|
|
|
|
}
|
2024-06-21 14:52:24 +08:00
|
|
|
|
|
|
|
|
|
|
#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
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|