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