NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/Localization/StringManager.cs

287 lines
7.7 KiB
C#
Raw Normal View History

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;
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;
2023-10-19 15:00:19 +08:00
public static LanguageType CurLanguage = LanguageType.Default;
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;
}
}
2023-10-19 15:00:19 +08:00
public enum LanguageType
{
Default,
CN,
TW,
EN,
}
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))
{
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 = "";
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;
}
}
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);
if (param == null || !MixKeyDic.ContainsKey(param))
2024-04-23 16:10:10 +08:00
{
DebugUtil.LogError($"MixKey配置有误StringConfigKey: {data.Key}");
return content;
}
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);
if (param == null || !MixKeyDic.ContainsKey(param))
2024-04-23 16:10:10 +08:00
{
DebugUtil.LogError($"MixKey配置有误StringConfigKey: {data.Key}");
return content;
}
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);
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;
}
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
}
}
2023-10-19 15:00:19 +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;
}
#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
}