Language.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Xml;
  6. using UnityEngine.UI;
  7. public class Language
  8. {
  9. public enum Enabled
  10. {
  11. English,
  12. ChineseSimplified,
  13. ChineseTraditional,
  14. }
  15. public enum LangType
  16. {
  17. Public
  18. }
  19. public static string[] availableArr = new string[]{Enabled.ChineseSimplified.ToString(), Enabled.English.ToString(), Enabled.ChineseTraditional.ToString() };
  20. private static SystemLanguage defaultLan = SystemLanguage.English;
  21. public static XmlDocument xml;
  22. public static string lan = SystemLanguage.English.ToString();
  23. public static string lanForUI = SystemLanguage.English.ToString();
  24. public static Dictionary<CurrentLanguage, TextAsset> LanguageDic
  25. {
  26. get
  27. {
  28. if (languageDic == null)
  29. {
  30. languageDic = new Dictionary<CurrentLanguage, TextAsset>();
  31. languageDic.Add(CurrentLanguage.English, ResourceManager.Load<TextAsset>("English", Folder.Config));
  32. languageDic.Add(CurrentLanguage.ChineseSimplified, ResourceManager.Load<TextAsset>("ChineseSimplified", Folder.Config));
  33. languageDic.Add(CurrentLanguage.ChineseTraditional, ResourceManager.Load<TextAsset>("ChineseTraditional", Folder.Config));
  34. }
  35. return languageDic;
  36. }
  37. }
  38. public static Dictionary<CurrentLanguage, TextAsset> languageDic;
  39. public static Dictionary<CurrentLanguage, XmlDocument> XmlDocumentDictionary
  40. {
  41. get
  42. {
  43. if (xmlDocumentDictionary == null)
  44. {
  45. xmlDocumentDictionary = new Dictionary<CurrentLanguage, XmlDocument>();
  46. XmlDocument xmlDocument = new XmlDocument();
  47. xmlDocument.LoadXml(LanguageDic[CurrentLanguage.English].text);
  48. xmlDocumentDictionary.Add(CurrentLanguage.English, xmlDocument);
  49. xmlDocument = new XmlDocument();
  50. xmlDocument.LoadXml(LanguageDic[CurrentLanguage.ChineseSimplified].text);
  51. xmlDocumentDictionary.Add(CurrentLanguage.ChineseSimplified, xmlDocument);
  52. xmlDocument = new XmlDocument();
  53. xmlDocument.LoadXml(LanguageDic[CurrentLanguage.ChineseTraditional].text);
  54. xmlDocumentDictionary.Add(CurrentLanguage.ChineseTraditional, xmlDocument);
  55. }
  56. return xmlDocumentDictionary;
  57. }
  58. }
  59. public static Dictionary<CurrentLanguage, XmlDocument> xmlDocumentDictionary;
  60. public static void Initialize()
  61. {
  62. LanguageManager.CurrentLanguage = ConfigManager.GetStringFormConfig("Language").ToEnum<CurrentLanguage>();
  63. if (Initializer.Instance.AuditEdition)
  64. {
  65. LanguageManager.CurrentLanguage = CurrentLanguage.ChineseSimplified;
  66. }
  67. if (LanguageManager.CurrentLanguage == CurrentLanguage.Default)
  68. {
  69. if (Application.systemLanguage == SystemLanguage.ChineseSimplified)
  70. {
  71. LanguageManager.CurrentLanguage = CurrentLanguage.ChineseSimplified;
  72. }
  73. else if (Application.systemLanguage == SystemLanguage.ChineseTraditional)
  74. {
  75. LanguageManager.CurrentLanguage = CurrentLanguage.ChineseTraditional;
  76. }
  77. else
  78. {
  79. LanguageManager.CurrentLanguage = CurrentLanguage.English;
  80. }
  81. }
  82. xml = XmlDocumentDictionary[LanguageManager.CurrentLanguage];
  83. if (LanguageManager.CurrentLanguage == CurrentLanguage.English)
  84. {
  85. ResourceManager.Get<Button>(CanvasLabel.L_TraChi).interactable = true;
  86. ResourceManager.Get<Button>(CanvasLabel.L_SimChi).interactable = true;
  87. ResourceManager.Get<Button>(CanvasLabel.L_English).interactable = false;
  88. ResourceManager.Get<Button>(CanvasLabel.L_TraChi).image.color = Lib.LightGray;
  89. ResourceManager.Get<Button>(CanvasLabel.L_SimChi).image.color = Lib.LightGray;
  90. ResourceManager.Get<Button>(CanvasLabel.L_English).image.color = Lib.Orange;
  91. }
  92. else if (LanguageManager.CurrentLanguage == CurrentLanguage.ChineseSimplified)
  93. {
  94. ResourceManager.Get<Button>(CanvasLabel.L_TraChi).interactable = true;
  95. ResourceManager.Get<Button>(CanvasLabel.L_SimChi).interactable = false;
  96. ResourceManager.Get<Button>(CanvasLabel.L_English).interactable = true;
  97. ResourceManager.Get<Button>(CanvasLabel.L_TraChi).image.color = Lib.LightGray;
  98. ResourceManager.Get<Button>(CanvasLabel.L_SimChi).image.color = Lib.Orange;
  99. ResourceManager.Get<Button>(CanvasLabel.L_English).image.color = Lib.LightGray;
  100. }
  101. else if (LanguageManager.CurrentLanguage == CurrentLanguage.ChineseTraditional)
  102. {
  103. ResourceManager.Get<Button>(CanvasLabel.L_TraChi).interactable = false;
  104. ResourceManager.Get<Button>(CanvasLabel.L_SimChi).interactable = true;
  105. ResourceManager.Get<Button>(CanvasLabel.L_English).interactable = true;
  106. ResourceManager.Get<Button>(CanvasLabel.L_TraChi).image.color = Lib.Orange;
  107. ResourceManager.Get<Button>(CanvasLabel.L_SimChi).image.color = Lib.LightGray;
  108. ResourceManager.Get<Button>(CanvasLabel.L_English).image.color = Lib.LightGray;
  109. }
  110. }
  111. public static void SwitchLanguage(CurrentLanguage currentLanguage)
  112. {
  113. LanguageManager.CurrentLanguage = currentLanguage;
  114. TextAsset textAsset = LanguageDic[currentLanguage];
  115. xml = new XmlDocument();
  116. xml.LoadXml(textAsset.text);
  117. }
  118. //public static void Init(string lan)
  119. //{
  120. // Debug.Log("Init Language " + lan);
  121. // Language.lan = lan;
  122. // string path = "XML/Language/";
  123. // TextAsset textAsset = ResourcesUtil.GetInstance().GetTextAsset("XML/Language/" + lan);
  124. // if (textAsset == null)
  125. // {
  126. // Debug.LogError("Can not find language use default " + defaultLan);
  127. // textAsset = ResourcesUtil.GetInstance().GetTextAsset("XML/Language/" + defaultLan.ToString());
  128. // Language.lan = defaultLan.ToString();
  129. // }
  130. // if (xml == null)
  131. // xml = new XmlDocument();
  132. // xml.LoadXml(text);
  133. //}
  134. public static bool initialized
  135. {
  136. get{
  137. return xml != null;
  138. }
  139. }
  140. public static void LoadFromResource()
  141. {
  142. //TextAsset textasset = ResourcesManager.Instance.LoadConfig("xml/lan", lan);
  143. xml = new XmlDocument ();
  144. //xml.LoadXml (textasset.text);
  145. }
  146. public static void Load(System.Action callBack)
  147. {
  148. //Language.lan = GetSpecifiedLang();
  149. // ResourcesManager.Instance.LoadAsset<TextAsset> ("xml/lan", lan, (objs) => {
  150. // if (objs != null && objs.Length > 0 && objs[0] != null) {
  151. // xml = new XmlDocument ();
  152. // xml.LoadXml ((objs[0] as TextAsset).text);
  153. //// Debug.LogError("bundleLoad-->"+(objs[0] as TextAsset).text);
  154. // } else {
  155. // TextAsset textasset = ResourcesManager.Instance.LoadConfig("xml/lan", lan);
  156. // xml = new XmlDocument ();
  157. // xml.LoadXml (textasset.text);
  158. //// Debug.LogError("resourceLoad-->"+(textasset.text));
  159. // }
  160. // callBack();
  161. // });
  162. // AssetBundleLoader.Load(path, lan.ToString(), typeof(TextAsset), (object asset)=>{
  163. // xml = new XmlDocument();
  164. // xml.LoadXml((asset as TextAsset).text);
  165. //// AssetBundleUtil.GetInstance().GetFont(AssetBundleUtil.Url.Font, lan.ToString(), (Font assetFont)=>{
  166. //// font = assetFont;
  167. //// });
  168. // font = ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, lan);
  169. //// font = ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, Enabled.Chinese.ToString());
  170. // callBack();
  171. // }, true);
  172. }
  173. /// <summary>
  174. /// 替换字符获取新的字符串
  175. /// </summary>
  176. /// <param name="old">需要替换的字符串</param>
  177. /// <param name="_replace">替换的数组</param>
  178. /// <returns></returns>
  179. public static string GetReplacedText(string old, params System.Object[] _replace)
  180. {
  181. if (old == "" || old == null) return "";
  182. string replaceStr = old;
  183. int length = _replace.Length;
  184. for (int i = 0; i < length; i++)
  185. {
  186. replaceStr = replaceStr.Replace("_$" + i + "_", _replace[i].ToString());
  187. }
  188. return replaceStr;
  189. }
  190. public static string GetStr(string id,LangType type = LangType.Public)
  191. {
  192. return GetStr (type.ToString(),id);
  193. }
  194. public static string GetStr(string pageAndID)
  195. {
  196. string[] strings = pageAndID.Split(new[] {"__"}, StringSplitOptions.None);
  197. return GetStr(strings[0], strings[1]);
  198. }
  199. public static string GetStr(string pageAndID, SystemLanguage language)
  200. {
  201. string[] strings = pageAndID.Split(new[] { "__" }, StringSplitOptions.None);
  202. CurrentLanguage currentLanguage;
  203. if (language == SystemLanguage.ChineseSimplified)
  204. {
  205. currentLanguage = CurrentLanguage.ChineseSimplified;
  206. }
  207. else if (language == SystemLanguage.ChineseTraditional)
  208. {
  209. currentLanguage = CurrentLanguage.ChineseTraditional;
  210. }
  211. else
  212. {
  213. currentLanguage = CurrentLanguage.English;
  214. }
  215. return GetStr(strings[0], strings[1], currentLanguage);
  216. }
  217. public static string GetStr(string page, string id)
  218. {
  219. if(xml == null)
  220. {
  221. Initialize();
  222. }
  223. try
  224. {
  225. XmlNode pageNode = xml.SelectSingleNode("lan/"+page);
  226. XmlNode node = pageNode.SelectSingleNode(id);
  227. if(node != null)
  228. return node.InnerText.Replace("\\n", "\n");
  229. }
  230. catch(Exception e)
  231. {
  232. Debug.LogException(e);
  233. }
  234. string error = "Topic missing page["+page+"] id["+id+"]";
  235. Debug.LogError(error);
  236. return error;
  237. }
  238. public static string GetStr(string page, string id, CurrentLanguage language)
  239. {
  240. XmlDocument xmlDocument = XmlDocumentDictionary[language];
  241. try
  242. {
  243. XmlNode pageNode = xmlDocument.SelectSingleNode("lan/" + page);
  244. XmlNode node = pageNode.SelectSingleNode(id);
  245. if (node != null)
  246. return node.InnerText.Replace("\\n", "\n");
  247. }
  248. catch (Exception e)
  249. {
  250. Debug.LogException(e);
  251. }
  252. string error = "Topic missing page[" + page + "] id[" + id + "]";
  253. Debug.LogError(error);
  254. return error;
  255. }
  256. public static string GetShareUrl()
  257. {
  258. XmlDocument tempXML = new XmlDocument();
  259. tempXML.LoadXml(LanguageDic[CurrentLanguage.ChineseSimplified].text);
  260. string page;
  261. if (Application.isEditor)
  262. {
  263. page = "Android";
  264. }
  265. else if (Application.platform == RuntimePlatform.IPhonePlayer)
  266. {
  267. page = "IOS";
  268. }
  269. else if (Application.isMobilePlatform)
  270. {
  271. page = "Android";
  272. }
  273. else
  274. {
  275. throw new Exception();
  276. }
  277. try
  278. {
  279. XmlNode pageNode = tempXML.SelectSingleNode("lan/" + page);
  280. XmlNode node = pageNode.SelectSingleNode("ShareUrl");
  281. if (node != null)
  282. return node.InnerText.Replace("\\n", "\n");
  283. }
  284. catch (Exception e)
  285. {
  286. Debug.LogException(e);
  287. }
  288. string error = "Topic missing page[" + page + "] id[" + "ShareUrl" + "]";
  289. Debug.LogError(error);
  290. return error;
  291. }
  292. private static Font defaultFont;
  293. public static Font font;
  294. public static Font GetFont()
  295. {
  296. if (xml == null || font == null)
  297. {
  298. if(defaultFont == null)
  299. {
  300. Debug.LogError("Language not init");
  301. defaultFont = Font.CreateDynamicFontFromOSFont("Arial", 20);
  302. }
  303. return defaultFont;
  304. }
  305. return font;
  306. //return "Fonts/" + SystemLanguage.ChineseTraditional.ToString();
  307. //return "Fonts/" + SystemLanguage.Chinese.ToString();
  308. }
  309. public static Font GetFont(Enabled font)
  310. {
  311. return null;
  312. //return ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, font.ToString());
  313. }
  314. public static Font GetSystemFont()
  315. {
  316. return Font.CreateDynamicFontFromOSFont("Arial", 20);
  317. }
  318. public static Font GetNumberFont()
  319. {
  320. return null;
  321. //return ResourcesUtil.GetInstance().GetFont(ResourcesUtil.Url.Font, "Number");
  322. }
  323. public static string GetSpecifiedLang1()
  324. {
  325. string language = "";
  326. if (Application.systemLanguage.ToString() == SystemLanguage.ChineseSimplified.ToString())
  327. language = SystemLanguage.Chinese.ToString();
  328. else
  329. language = Application.systemLanguage.ToString();
  330. if (!isInEnabled(language))
  331. language = defaultLan.ToString();
  332. #if UNITY_EDITOR || UNITY_STANDALONE
  333. language = SystemLanguage.English.ToString();
  334. #endif
  335. // language = SystemLanguage.Chinese.ToString();
  336. language = SystemLanguage.English.ToString();
  337. return language;
  338. }
  339. private static bool isInEnabled(string value)
  340. {
  341. bool isIn = false;
  342. foreach (string name in Enum.GetNames(typeof(Enabled)))
  343. {
  344. if (value == name)
  345. return true;
  346. }
  347. return isIn;
  348. }
  349. public static bool IsLanguageInit()
  350. {
  351. return (xml == null) ? false : true;
  352. }
  353. public static string GetLanguagePath()
  354. {
  355. return "XML/lan/" + lan;
  356. }
  357. }