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 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 (LanguageManager.CurLanguage) { case (LanguageManager.LanguageType.Default): { value = data.Value; break; } case (LanguageManager.LanguageType.CN): { value = data.Value; break; } case (LanguageManager.LanguageType.TW): { break; } case (LanguageManager.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 || !MixKeyDic.ContainsKey(param)) { DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}"); return content; } var val = 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 GetTextFirstParamByKey(string key) { DataString DataString = GetStringConfigByKey(key); if (DataString != null) { return GetFirstParamValue(DataString); } return key; } /// /// 获取string中第一个param的值 /// private string GetFirstParamValue(DataString data) { string value = data.Value; if (!value.Contains("[p")) { return null; } if (value.Contains("[p0]")) { var param = _GetParam(data, 0); if (param == null || !MixKeyDic.ContainsKey(param)) { DebugUtil.LogError($"MixKey配置有误,StringConfigKey: {data.Key}"); return null; } return MixKeyDic[param]; } return null; } public string GetTextByKeyAndParams(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(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(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 ""; } /// /// 获取本地化文本,根据本地化key和参数列表 /// /// /// /// 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(MixKeyConfigPath); if (txtAsset == null) { DebugUtil.LogError("MixKeyConfig 资源无法加载,请检查路径!"); return; } var jsonTxt = txtAsset.text; var dic = JsonConvert.DeserializeObject>(jsonTxt); MixKeyDic = dic; } #endregion }