Unity 框架

LanguageManager.cs 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.Collections;
  2. using UnityEngine;
  3. using System.Collections.Generic;
  4. using System.Reflection;
  5. using System;
  6. namespace TFramework
  7. {
  8. public class LanguageManager : BaseManager
  9. {
  10. public LanguageData m_languageData;
  11. public string m_initKind;
  12. private string _currentKind;
  13. public string CurrentKind => _currentKind;
  14. private string lastKind;
  15. private Dictionary<string, string> kindFieldDic = new Dictionary<string, string>();
  16. string[] kinds;
  17. private void Awake()
  18. {
  19. if(m_languageData!=null)
  20. {
  21. FieldInfo[] fieldInfos = GlobalTool.GetTypesInRunTimeAssemblies(type => type.FullName == m_languageData.m_languageType)[0].GetFields();
  22. kinds = new string[fieldInfos.Length];
  23. for (int i = 0; i < fieldInfos.Length; i++)
  24. {
  25. LanguageAttribute attribute = fieldInfos[i].GetCustomAttribute<LanguageAttribute>();
  26. kinds[i] = attribute != null ? attribute.LanguageType : fieldInfos[i].Name;
  27. if (!kindFieldDic.ContainsKey(kinds[i]))
  28. {
  29. kindFieldDic.Add(kinds[i], fieldInfos[i].Name);
  30. }
  31. }
  32. }
  33. _currentKind = m_initKind;
  34. lastKind = m_initKind;
  35. }
  36. /// <summary>
  37. /// 获取语言种类
  38. /// </summary>
  39. public string[] GetLanguageKindArray() => kinds;
  40. /// <summary>
  41. /// 切换语言
  42. /// </summary>
  43. /// <param name="kind">语种</param>
  44. public void ChangeLanguage(string kind)
  45. {
  46. lastKind = _currentKind;
  47. _currentKind = kind;
  48. Main.GetMagr<UIManager>().ChangedWord();
  49. }
  50. internal string GetLanguageText(string text)
  51. {
  52. string v = string.Empty;
  53. foreach (var item in m_languageData.m_languages)
  54. {
  55. if(item.GetType().GetField(kindFieldDic[lastKind]).GetValue(item).ToString()==text)
  56. {
  57. v = item.GetType().GetField(kindFieldDic[CurrentKind]).GetValue(item).ToString();
  58. break;
  59. }
  60. }
  61. return v;
  62. }
  63. }
  64. }