92 lines
2.4 KiB
C#
92 lines
2.4 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 AutoUseLanguage()
|
|
{
|
|
SystemLanguage language = Application.systemLanguage;
|
|
if (PlayerPrefs.HasKey(LanguageConst.LanguageSaveKey))
|
|
{
|
|
var value = PlayerPrefs.GetInt(LanguageConst.LanguageSaveKey, -1);
|
|
if (value >= 0)
|
|
{
|
|
language = (SystemLanguage)value;
|
|
}
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
} |