92 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |