Files
aibis-dream/Assets/Scripts/Framework/OtherKit/LocalizationKit.cs
T
2025-04-25 20:24:11 +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
{
private readonly string _tableName;
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;
}
}