using UnityEngine; using System; using System.Collections; using System.Collections.Generic; using System.Xml; public class Language { public enum Enabled:int { ChineseSimplified = 0, English = 1, ChineseTraditional = 2, } public enum LangType { Public } public static string[] availableArr = new string[]{Enabled.ChineseSimplified.ToString(), Enabled.English.ToString(), Enabled.ChineseTraditional.ToString() }; private static SystemLanguage defaultLan = SystemLanguage.English; public static XmlDocument xml; public static string lan = SystemLanguage.English.ToString(); public static string lanForUI = SystemLanguage.English.ToString(); public static void Initialize() { TextAsset textAsset = Bundle.Config.LoadAsset("ChineseSimplified"); xml = new XmlDocument(); xml.LoadXml(textAsset.text); } public static void SwitchLanguage(Lan lan) { TextAsset textAsset = Bundle.Config.LoadAsset(lan.ToString()); xml = new XmlDocument(); xml.LoadXml(textAsset.text); } //public static void Init(string lan) //{ // Debug.Log("Init Language " + lan); // Language.lan = lan; // string path = "XML/Language/"; // TextAsset textAsset = ResourcesUtil.GetInstance().GetTextAsset("XML/Language/" + lan); // if (textAsset == null) // { // Debug.LogError("Can not find language use default " + defaultLan); // textAsset = ResourcesUtil.GetInstance().GetTextAsset("XML/Language/" + defaultLan.ToString()); // Language.lan = defaultLan.ToString(); // } // if (xml == null) // xml = new XmlDocument(); // xml.LoadXml(text); //} public static bool initialized { get{ return xml != null; } } public static void LoadFromResource() { //TextAsset textasset = ResourcesManager.Instance.LoadConfig("xml/lan", lan); xml = new XmlDocument (); //xml.LoadXml (textasset.text); } public static void Load(System.Action callBack) { //Language.lan = GetSpecifiedLang(); // ResourcesManager.Instance.LoadAsset ("xml/lan", lan, (objs) => { // if (objs != null && objs.Length > 0 && objs[0] != null) { // xml = new XmlDocument (); // xml.LoadXml ((objs[0] as TextAsset).text); //// Debug.LogError("bundleLoad-->"+(objs[0] as TextAsset).text); // } else { // TextAsset textasset = ResourcesManager.Instance.LoadConfig("xml/lan", lan); // xml = new XmlDocument (); // xml.LoadXml (textasset.text); //// Debug.LogError("resourceLoad-->"+(textasset.text)); // } // callBack(); // }); // AssetBundleLoader.Load(path, lan.ToString(), typeof(TextAsset), (object asset)=>{ // xml = new XmlDocument(); // xml.LoadXml((asset as TextAsset).text); //// AssetBundleUtil.GetInstance().GetFont(AssetBundleUtil.Url.Font, lan.ToString(), (Font assetFont)=>{ //// font = assetFont; //// }); // font = ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, lan); //// font = ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, Enabled.Chinese.ToString()); // callBack(); // }, true); } /// /// 替换字符获取新的字符串 /// /// 需要替换的字符串 /// 替换的数组 /// public static string GetReplacedText(string old, params System.Object[] _replace) { if (old == "" || old == null) return ""; string replaceStr = old; int length = _replace.Length; for (int i = 0; i < length; i++) { replaceStr = replaceStr.Replace("_$" + i + "_", _replace[i].ToString()); } return replaceStr; } public static string GetStr(string id,LangType type = LangType.Public) { return GetStr (type.ToString(),id); } public static string GetStr(string page, string id) { if(xml == null) { Initialize(); } try { XmlNode pageNode = xml.SelectSingleNode("lan/"+page); XmlNode node = pageNode.SelectSingleNode(id); if(node != null) return node.InnerText.Replace("\\n", "\n"); } catch(Exception e) { Debug.LogException(e); } string error = "Topic missing page["+page+"] id["+id+"]"; Debug.LogError(error); return error; } private static Font defaultFont; public static Font font; //todo Public改为private public static Font GetFont() { if (xml == null || font == null) { if(defaultFont == null) { Debug.LogError("Language not init"); defaultFont = Font.CreateDynamicFontFromOSFont("Arial", 20); } return defaultFont; } return font; //return "Fonts/" + SystemLanguage.ChineseTraditional.ToString(); //return "Fonts/" + SystemLanguage.Chinese.ToString(); } public static Font GetFont(Enabled font) { return null; //return ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, font.ToString()); } public static Font GetSystemFont() { return Font.CreateDynamicFontFromOSFont("Arial", 20); } public static Font GetNumberFont() { return null; //return ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, "Number"); } public static string GetSpecifiedLang1() { string language = ""; if (Application.systemLanguage.ToString() == SystemLanguage.ChineseSimplified.ToString()) language = SystemLanguage.Chinese.ToString(); else language = Application.systemLanguage.ToString(); if (!isInEnabled(language)) language = defaultLan.ToString(); #if UNITY_EDITOR || UNITY_STANDALONE language = SystemLanguage.English.ToString(); #endif // language = SystemLanguage.Chinese.ToString(); language = SystemLanguage.English.ToString(); return language; } private static bool isInEnabled(string value) { bool isIn = false; foreach (string name in Enum.GetNames(typeof(Enabled))) { if (value == name) return true; } return isIn; } public static bool IsLanguageInit() { return (xml == null) ? false : true; } public static string GetLanguagePath() { return "XML/lan/" + lan; } }