using System.Collections; using System.Collections.Generic; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Newtonsoft.Json; using UnityEngine; namespace Kill.Managers { public class LanguageManager : MonoBehaviour { public static LanguageManager Instance; [System.Serializable] public struct Language { public string key; public string zh; public string en; } [System.Serializable] public struct Country { public string code; public string name_zh; public string name_en; } List languageList; public List countryList; [System.Serializable] public enum LanguageType { Chinese, English } void Awake() { Instance = this; SetLanguageBySystem(); } public LanguageType languageType = LanguageType.English; /// /// 根据系统语言自动设置 App 语言 /// 只有简体中文和繁体中文显示中文,其他全部显示英文 /// public void SetLanguageBySystem() { int type = PlayerPrefs.GetInt("LanguageType"); if (type==0) { SystemLanguage systemLanguage = Application.systemLanguage; Debug.Log($"系统语言: {systemLanguage}"); if (systemLanguage == SystemLanguage.Chinese || systemLanguage == SystemLanguage.ChineseSimplified || systemLanguage == SystemLanguage.ChineseTraditional) { languageType = LanguageType.Chinese; Debug.Log("设置语言为: 中文"); } else { languageType = LanguageType.English; Debug.Log("设置语言为: 英文"); } } else { languageType = (LanguageType)type-1; } } /// /// 手动设置语言 /// public void SetLanguage(LanguageType type) { languageType = type; Debug.Log($"手动设置语言为: {type}"); PlayerPrefs.SetInt("LanguageType",(int)type+1); } public async Task Init() { TextAsset textAsset = await LoadRes.Instance.LoadAssetAsync("language", "language.json"); languageList = JsonConvert.DeserializeObject>(textAsset.text); TextAsset countryAsset = await LoadRes.Instance.LoadAssetAsync("language", "country.json"); countryList = JsonConvert.DeserializeObject>(countryAsset.text); Debug.Log(countryList[0].name_zh); } public string GetLanguage(string key) { int index = languageList.FindIndex(x => x.key == key); if(index<0||index>=languageList.Count) index=0; if (languageType == LanguageType.Chinese) return languageList[index].zh; else return languageList[index].en; } public Country GetCountry(string code) { return countryList.Find((x)=>x.code==code); } public string GetCountryStr(string code) { Country c = countryList.Find((x) => x.code == code); if (languageType == LanguageType.Chinese) return c.name_zh; else return c.name_en; } } }