Files
aibis-dream/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs
T
2025-05-08 18:26:08 +08:00

60 lines
1.8 KiB
C#

using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using UnityEngine.Localization.Tables;
namespace AibisDream.Framework
{
public static class LocalizationKit
{
private static LocalizationTable _actorTableName;
public static LocalizationTable ActorTableName => _actorTableName ??= new LocalizationTable("ActorName");
public static void SwitchLanguage(string localeCode)
{
var selectedLocale =
LocalizationSettings.AvailableLocales.Locales.Find(locale => locale.Identifier.Code == localeCode);
if (selectedLocale)
{
LocalizationSettings.SelectedLocale = selectedLocale;
}
else
{
Debug.LogWarning($"Locale with code {localeCode} not found.");
}
}
}
public class LocalizationTable
{
public string TableName { get; }
private StringTable _stringTable;
public LocalizationTable(string tableName)
{
TableName = tableName;
_stringTable = LocalizationSettings.StringDatabase.GetTable(TableName);
LocalizationSettings.SelectedLocaleChanged += OnLocaleChanged;
Debug.Log($"表格{TableName}已加载");
}
public void Dispose()
{
LocalizationSettings.SelectedLocaleChanged -= OnLocaleChanged;
_stringTable = null;
}
private void OnLocaleChanged(Locale locale)
{
_stringTable = LocalizationSettings.StringDatabase.GetTable(TableName);
}
public StringTableEntry this[string key] => _stringTable[key];
public LocaleIdentifier LocaleIdentifier => _stringTable.LocaleIdentifier;
}
}