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

165 lines
4.1 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using Framework;
using System;
using System.Collections.Generic;
using cfg;
using cfg.StringCfg;
using UnityEngine;
public class StringManager
{
private static StringManager m_instance;
2023-10-19 15:00:19 +08:00
public static LanguageType CurLanguage = LanguageType.Default;
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.LogError("{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;
}
}
return value;
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
public static void ChangeLanguage(LanguageType language)
{
CurLanguage = language;
}
2023-10-24 14:47:25 +08:00
public static string GetStoryTalkText(string key)
{
return key;
}
2023-08-22 19:08:45 +08:00
}