Files
Fishing2/Assets/Scripts/NBC/Language/Runtime/LanguageManager.cs

101 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
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 AutoUseLanguage()
{
SystemLanguage language = Application.systemLanguage;
if (PlayerPrefs.HasKey(LanguageConst.LanguageSaveKey))
{
var value = PlayerPrefs.GetInt(LanguageConst.LanguageSaveKey, -1);
if (value >= 0)
{
language = (SystemLanguage)value;
}
}
var list = LanguageConst.languageMap.Values.ToList();
var findLan = list.FindIndex(t => t.Language == language);
if (findLan < 0)
{
language = SystemLanguage.English;
}
UseLanguage(language);
}
public void UseLanguage(SystemLanguage language)
{
_currentLanguage = language;
if (LanguageConst.languageMap.TryGetValue(language, out var info))
{
_currentCustomLanguageName = info.Code;
}
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;
}
}
}