62 lines
1.8 KiB
C#
62 lines
1.8 KiB
C#
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;
|
|
}
|
|
} |