using System.Collections; using System.Collections.Generic; using System; using UnityEngine; using LitJson; public static class Language { static Dictionary languageShowDict = new Dictionary(); //设置中显示多语言版本选择 static Dictionary languageDict = new Dictionary(); //unity语言配置对应的约定字符 static string defaultLanguage = ""; public static int languageNumber { get; set; } public static event Action languageChangeEvent; public static void ChangeLanguage(int _number) { if (languageChangeEvent != null) { languageChangeEvent(); } } /// /// 根据系统语言自动设置默认语言 /// public static void InitDefaultLanguage() { if (languageShowDict.IsNullOrEmpty()) { var config = InitialFunctionConfig.Get("Language"); Debug.LogFormat("系统语言:{0} 配置: {1}", Application.systemLanguage, config.Numerical1); if (string.IsNullOrEmpty(config.Numerical1)) return; languageShowDict = JsonMapper.ToObject>(config.Numerical1); languageDict = JsonMapper.ToObject>(config.Numerical5); defaultLanguage = config.Numerical2; if (!languageShowDict.ContainsKey(defaultLanguage)) defaultLanguage = ""; } var id = LocalSave.GetString("LANGUAGE_ID1"); Debug.LogFormat("系统语言:{0} 当前语言: {1}", Application.systemLanguage, id); if (!string.IsNullOrEmpty(id)) return; string languageMark = ((int)Application.systemLanguage).ToString(); if (languageDict.ContainsKey(languageMark)) { id = languageDict[languageMark]; } Id = languageShowDict.ContainsKey(id) ? id : defaultLanguage; Debug.LogFormat("系统语言:{0} 设置为: {1}", Application.systemLanguage, Id); } /// /// 语言的ID,用于区分下载资源 /// /// public static string Id { get { if (languageShowDict.IsNullOrEmpty()) return ""; return LocalSave.GetString("LANGUAGE_ID1"); } set { LocalSave.SetString("LANGUAGE_ID1", value); } } //默认路径不附加地址,Id不为空时附加Id public static string fixPath { get { if (string.IsNullOrEmpty(Id)) return ""; return string.Format("/{0}", Id); } } public static string Get(string _id) { var languageInfo = LanguageConfig.Get(_id); if (languageInfo == null) { #if UNITY_EDITOR if (_id.StartsWith(NewBieGuideScriptableObject.GuidesPrefixNewBie) || _id.StartsWith(NewBieGuideScriptableObject.GuidesPrefixFun)) return string.Empty; DebugEx.LogFormat("缺少语言表配置,id: {0}", _id); #endif return string.Empty; } if (string.IsNullOrEmpty(languageInfo.content)) { DebugEx.LogFormat("语言内容为空,id: {0}", _id); } return languageInfo.content; } public static string Get(string _id, params object[] _objects) { var content = Get(_id); try { return string.Format(content, _objects); } catch (Exception ex) { DebugEx.LogFormat("语言内容格式错误,id: {0}", _id); return content; } } public static string GetFromLocal(int _id) { var languageInfo = PriorLanguageConfig.Get(_id); if (languageInfo == null) { DebugEx.LogFormat("缺少语言表配置,id: {0}", _id); return string.Empty; } if (string.IsNullOrEmpty(languageInfo.Content)) { DebugEx.LogFormat("语言内容为空,id: {0}", _id); } return languageInfo.Content; } public static string GetFromLocal(int _id, params object[] _objects) { var content = GetFromLocal(_id); try { return string.Format(content, _objects); } catch (Exception ex) { DebugEx.LogFormat("语言内容格式错误,id: {0}", _id); return content; } } }