killapp/Assets/Scripts/Managers/LanguageManager.cs
“虞渠成” be9d69f6eb feat: 添加国家选择组件与设备统计上报功能
1. 新增国家选择UI组件与相关配置文件
2. 新增多语言国家列表支持与获取接口
3. 新增设备统计数据上报定时任务
4. 修复固件版本号计算的索引错误
5. 添加新的多语言提示文案
2026-07-10 16:11:09 +08:00

111 lines
3.4 KiB
C#

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<Language> languageList;
public List<Country> countryList;
[System.Serializable]
public enum LanguageType
{
Chinese,
English
}
void Awake()
{
Instance = this;
SetLanguageBySystem();
}
public LanguageType languageType = LanguageType.English;
/// <summary>
/// 根据系统语言自动设置 App 语言
/// 只有简体中文和繁体中文显示中文,其他全部显示英文
/// </summary>
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;
}
}
/// <summary>
/// 手动设置语言
/// </summary>
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<TextAsset>("language", "language.json");
languageList = JsonConvert.DeserializeObject<List<Language>>(textAsset.text);
TextAsset countryAsset = await LoadRes.Instance.LoadAssetAsync<TextAsset>("language", "country.json");
countryList = JsonConvert.DeserializeObject<List<Country>>(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);
}
}
}