Files
Fishing2/Assets/Scripts/NBC/Language/Runtime/LanguageManager.cs
2025-05-10 12:49:47 +08:00

92 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
namespace NBC
{
public class LanguageManager
{
private string _currentCustomLanguageName = string.Empty;
private SystemLanguage _currentLanguage;
private Dictionary<int, ILanguage> _lanModuleDic = new Dictionary<int, ILanguage>();
/// <summary>
/// 变化通知事件
/// </summary>
private Action _changeAction;
public void AddLanguageModule(int type, ILanguage languageModule)
{
_lanModuleDic.Add(type, languageModule);
}
public ILanguage GetLanguageModule(int type)
{
return _lanModuleDic.GetValueOrDefault(type);
}
public string GetCurrentCustomLanguageName()
{
return _currentCustomLanguageName;
}
public SystemLanguage GetCurrentLanguage()
{
return _currentLanguage;
}
public void UseLanguage(string name)
{
foreach (var key in LanguageConst.languageMap.Keys)
{
var value = LanguageConst.languageMap[key];
if (value != name) continue;
UseLanguage(key);
return;
}
Debug.LogError("语言包不存在或没有添加映射关系");
return;
}
public void UseLanguage(SystemLanguage language)
{
_currentLanguage = language;
if (LanguageConst.languageMap.TryGetValue(language, out var name))
{
_currentCustomLanguageName = name;
}
foreach (var value in _lanModuleDic.Values)
{
value.UseLanguage(language);
}
_changeAction?.Invoke();
}
public void AddLanguage(SystemLanguage language, bool isDefault = false)
{
foreach (var pair in _lanModuleDic)
{
pair.Value.AddLanguage(language);
}
if (isDefault)
{
UseLanguage(language);
}
}
public void OnChange(Action callback)
{
_changeAction += callback;
}
public void OffChange(Action callback)
{
_changeAction -= callback;
}
}
}