com.alicizax.unity.framework/Runtime/Localization/Service/LocalizationService.cs
陈思海 6397cc03b2 框架大更新
1.进步优化UI系统 加载问题 性能问题 Canvas重绘问题 边界处理问题
2.优化对象池和游戏对象池的性能 游戏对象池根据窗口 策略定期清理
3.优化整个AppService 和ServiceWorld结构 固定三大类 具体参考代码
2026-03-31 17:25:20 +08:00

820 lines
36 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading;
using AlicizaX;
using Cysharp.Threading.Tasks;
namespace AlicizaX.Localization.Runtime
{
/// <summary>
/// 本地化管理器。
/// </summary>
[UnityEngine.Scripting.Preserve]
internal sealed partial class LocalizationService : ServiceBase, ILocalizationService
{
private readonly Dictionary<string, string> Dic = new();
private readonly List<GameLocaizationTable> _trackedTables = new();
private readonly Dictionary<GameLocaizationTable, List<string>> _trackedTableKeys = new();
private string _language;
public string Language
{
get => _language;
}
public void ChangedLanguage(string language)
{
SwitchLanguageAsync(language).Forget();
}
public UniTask SwitchLanguageAsync(string language, CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();
if (string.IsNullOrEmpty(language) || _language == language)
{
return UniTask.CompletedTask;
}
_language = language;
RebuildTrackedTables();
LocalizationComponent.SaveLanguagePreference(language);
LocalizationChangeEvent.Publisher(_language);
return UniTask.CompletedTask;
}
public void Initialize(string language)
{
_language = language;
LocalizationComponent.SaveLanguagePreference(language);
Log.Info($"Initializing LocalizationModule :{language}");
}
public bool TryGetRawString(string key, out string value)
{
return Dic.TryGetValue(key, out value);
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <param name="key">字典主键。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString(string key)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
return value;
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <param name="key">字典主键。</param>
/// <param name="args">参数列表.</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString(string key, params object[] args)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
return Utility.Text.Format(value, args);
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T">字典参数的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg">字典参数。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T>(string key, T arg)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3}", key, value, arg, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2>(string key, T1 arg1, T2 arg2)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4}", key, value, arg1, arg2, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3>(string key, T1 arg1, T2 arg2, T3 arg3)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5}", key, value, arg1, arg2, arg3, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6}", key, value, arg1, arg2, arg3, arg4, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7}", key, value, arg1, arg2, arg3, arg4, arg5, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <typeparam name="T10">字典参数 10 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <param name="arg10">字典参数 10。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <typeparam name="T10">字典参数 10 的类型。</typeparam>
/// <typeparam name="T11">字典参数 11 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <param name="arg10">字典参数 10。</param>
/// <param name="arg11">字典参数 11。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <typeparam name="T10">字典参数 10 的类型。</typeparam>
/// <typeparam name="T11">字典参数 11 的类型。</typeparam>
/// <typeparam name="T12">字典参数 12 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <param name="arg10">字典参数 10。</param>
/// <param name="arg11">字典参数 11。</param>
/// <param name="arg12">字典参数 12。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <typeparam name="T10">字典参数 10 的类型。</typeparam>
/// <typeparam name="T11">字典参数 11 的类型。</typeparam>
/// <typeparam name="T12">字典参数 12 的类型。</typeparam>
/// <typeparam name="T13">字典参数 13 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <param name="arg10">字典参数 10。</param>
/// <param name="arg11">字典参数 11。</param>
/// <param name="arg12">字典参数 12。</param>
/// <param name="arg13">字典参数 13。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13);
}
catch (Exception exception)
{
return Utility.Text.Format("<Error>{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15}", key, value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <typeparam name="T10">字典参数 10 的类型。</typeparam>
/// <typeparam name="T11">字典参数 11 的类型。</typeparam>
/// <typeparam name="T12">字典参数 12 的类型。</typeparam>
/// <typeparam name="T13">字典参数 13 的类型。</typeparam>
/// <typeparam name="T14">字典参数 14 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <param name="arg10">字典参数 10。</param>
/// <param name="arg11">字典参数 11。</param>
/// <param name="arg12">字典参数 12。</param>
/// <param name="arg13">字典参数 13。</param>
/// <param name="arg14">字典参数 14。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
}
catch (Exception exception)
{
var args = Utility.Text.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}", arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
return Utility.Text.Format("<Error>{0},{1},{2},{3}", key, value, args, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <typeparam name="T10">字典参数 10 的类型。</typeparam>
/// <typeparam name="T11">字典参数 11 的类型。</typeparam>
/// <typeparam name="T12">字典参数 12 的类型。</typeparam>
/// <typeparam name="T13">字典参数 13 的类型。</typeparam>
/// <typeparam name="T14">字典参数 14 的类型。</typeparam>
/// <typeparam name="T15">字典参数 15 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <param name="arg10">字典参数 10。</param>
/// <param name="arg11">字典参数 11。</param>
/// <param name="arg12">字典参数 12。</param>
/// <param name="arg13">字典参数 13。</param>
/// <param name="arg14">字典参数 14。</param>
/// <param name="arg15">字典参数 15。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
}
catch (Exception exception)
{
var args = Utility.Text.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14}", arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
return Utility.Text.Format("<Error>{0},{1},{2},{3}", key, value, args, exception);
}
}
/// <summary>
/// 根据字典主键获取字典内容字符串。
/// </summary>
/// <typeparam name="T1">字典参数 1 的类型。</typeparam>
/// <typeparam name="T2">字典参数 2 的类型。</typeparam>
/// <typeparam name="T3">字典参数 3 的类型。</typeparam>
/// <typeparam name="T4">字典参数 4 的类型。</typeparam>
/// <typeparam name="T5">字典参数 5 的类型。</typeparam>
/// <typeparam name="T6">字典参数 6 的类型。</typeparam>
/// <typeparam name="T7">字典参数 7 的类型。</typeparam>
/// <typeparam name="T8">字典参数 8 的类型。</typeparam>
/// <typeparam name="T9">字典参数 9 的类型。</typeparam>
/// <typeparam name="T10">字典参数 10 的类型。</typeparam>
/// <typeparam name="T11">字典参数 11 的类型。</typeparam>
/// <typeparam name="T12">字典参数 12 的类型。</typeparam>
/// <typeparam name="T13">字典参数 13 的类型。</typeparam>
/// <typeparam name="T14">字典参数 14 的类型。</typeparam>
/// <typeparam name="T15">字典参数 15 的类型。</typeparam>
/// <typeparam name="T16">字典参数 16 的类型。</typeparam>
/// <param name="key">字典主键。</param>
/// <param name="arg1">字典参数 1。</param>
/// <param name="arg2">字典参数 2。</param>
/// <param name="arg3">字典参数 3。</param>
/// <param name="arg4">字典参数 4。</param>
/// <param name="arg5">字典参数 5。</param>
/// <param name="arg6">字典参数 6。</param>
/// <param name="arg7">字典参数 7。</param>
/// <param name="arg8">字典参数 8。</param>
/// <param name="arg9">字典参数 9。</param>
/// <param name="arg10">字典参数 10。</param>
/// <param name="arg11">字典参数 11。</param>
/// <param name="arg12">字典参数 12。</param>
/// <param name="arg13">字典参数 13。</param>
/// <param name="arg14">字典参数 14。</param>
/// <param name="arg15">字典参数 15。</param>
/// <param name="arg16">字典参数 16。</param>
/// <returns>要获取的字典内容字符串。</returns>
public string GetString<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(string key, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14,
T15 arg15, T16 arg16)
{
if (!Dic.TryGetValue(key, out string value))
{
return Utility.Text.Format("<NoKey>{0}", key);
}
try
{
return Utility.Text.Format(value, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16);
}
catch (Exception exception)
{
var args = Utility.Text.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15}", arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16);
return Utility.Text.Format("<Error>{0},{1},{2},{3}", key, value, args, exception);
}
}
public string GetRawString(string key)
{
return TryGetRawString(key, out string value) ? value : null;
}
public void IncreAddLocalizationConfig(GameLocaizationTable table)
{
TrackTable(table);
ReapplyTrackedTable(table);
}
public void CoverAddLocalizationConfig(GameLocaizationTable table)
{
Dic.Clear();
_trackedTables.Clear();
_trackedTableKeys.Clear();
TrackTable(table);
ReapplyTrackedTable(table);
}
public void ReloadLocalizationConfig(GameLocaizationTable table)
{
TrackTable(table);
ReapplyTrackedTable(table);
}
protected override void OnInitialize() { }
protected override void OnDestroyService()
{
Dic.Clear();
_trackedTables.Clear();
_trackedTableKeys.Clear();
}
private void TrackTable(GameLocaizationTable table)
{
if (table == null)
{
return;
}
if (!_trackedTables.Contains(table))
{
_trackedTables.Add(table);
}
}
private void RebuildTrackedTables()
{
Dic.Clear();
_trackedTableKeys.Clear();
for (int i = 0; i < _trackedTables.Count; i++)
{
ReapplyTrackedTable(_trackedTables[i]);
}
}
private void ReapplyTrackedTable(GameLocaizationTable table)
{
if (table == null)
{
return;
}
RemoveTrackedTableEntries(table);
LocalizationLanguage localizationLanguage = table.GetLanguage(_language);
if (localizationLanguage == null)
{
Log.Warning($"Can not Find {_language} Strins ");
_trackedTableKeys[table] = new List<string>(0);
return;
}
Dic.EnsureCapacity(Dic.Count + localizationLanguage.Strings.Count);
List<string> keys = new(localizationLanguage.Strings.Count);
foreach (var item in localizationLanguage.Strings)
{
Dic[item.Key] = item.Value;
keys.Add(item.Key);
}
_trackedTableKeys[table] = keys;
}
private void RemoveTrackedTableEntries(GameLocaizationTable table)
{
if (!_trackedTableKeys.TryGetValue(table, out List<string> keys))
{
return;
}
for (int i = 0; i < keys.Count; i++)
{
Dic.Remove(keys[i]);
}
}
}
}