using System; using System.Collections.Generic; using UnityEngine; namespace NBC { public class LanguageManager { private string _currentCustomLanguageName = string.Empty; private SystemLanguage _currentLanguage; private Dictionary _lanModuleDic = new Dictionary(); /// /// 变化通知事件 /// 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; } } }