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

189 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Framework;
using System;
using System.Collections;
using System.Collections.Generic;
using cfg;
using cfg.StringCfg;
using UnityEngine;
public class StringManager
{
private static StringManager m_instance;
public static LanguageType CurLanguage = LanguageType.Default;
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.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;
}
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 "";
}
public string GetLocalizeTextByKeyAndList(string key, IList param)
{
if (param.Count <= 0)
{
return GetTextByKey(key);
}
else if (param.Count == 1)
{
return GetTextByKeyAndParams(key, param[0]);
}
else if (param.Count == 2)
{
return GetTextByKeyAndParams(key, param[0], param[1]);
}
else if (param.Count == 3)
{
return GetTextByKeyAndParams(key, param[0], param[1], param[2]);
}
DebugUtil.LogError(string.Format("==== 请检查文本内容参数个数!!! 文本Key为 {0} ====", key));
return "";
}
public static void ChangeLanguage(LanguageType language)
{
CurLanguage = language;
}
public static string GetStoryTalkText(string key)
{
return key;
}
}