using AibisDream.Utility; 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(ConstRef.ActorNameTable); 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; } }