MultiLanguageConfigEditor.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using UnityEditor;
  6. using UnityEngine;
  7. public class MultilanguageEditorWindow : EditorWindow
  8. {
  9. private void OnGUI()
  10. {
  11. if (EditorLayout.MiniButtonLeft("刷新语言表"))
  12. {
  13. MultiLanguageConfigEditor.RefreshETLocalLangugale();
  14. }
  15. if (EditorLayout.MiniButtonLeft("绑定语言表"))
  16. {
  17. MultiLanguageConfigEditor.BindETLocalLangugale();
  18. }
  19. }
  20. }
  21. public static class MultiLanguageConfigEditor
  22. {
  23. public static string pathETConfig = "Assets/Resources/localLanguage.asset";
  24. private static MultiLanguageConfig ETLanguageConfig;
  25. public static string ETLocalLanguagePath
  26. {
  27. get
  28. {
  29. string result = Application.dataPath;
  30. return result + @"/Config/Lan/localLanguage.xlsx";
  31. }
  32. }
  33. [MenuItem("Tools/设置本地语言表")]
  34. static void OpenMultilanguageEditorWindow()
  35. {
  36. EditorLayout.GetWindow<MultilanguageEditorWindow>("本地语言表", new Vector2(300, 500));
  37. }
  38. public static void RefreshETLocalLangugale()
  39. {
  40. ETLanguageConfig = AssetDatabase.LoadAssetAtPath<MultiLanguageConfig>(pathETConfig);
  41. FreshLanguage();
  42. Debug.Log("刷新語言完成!");
  43. }
  44. public static void ClearChache()
  45. {
  46. PlayerPrefs.DeleteAll();
  47. }
  48. public static void BindETLocalLangugale()
  49. {
  50. ETLanguageConfig = AssetDatabase.LoadAssetAtPath<MultiLanguageConfig>(pathETConfig);
  51. //获取到 文件夹下 所有的预制体
  52. List<GameObject> listLanGo = GetFileAllPrefab("Bundles/UI");
  53. string matchRuleName = "lan_";
  54. for (int i = 0; i < listLanGo.Count; i++)
  55. {
  56. //便利 预制体 中所有 带 LocLan_ 的节点 。 locLan
  57. GameObject go = listLanGo[i];
  58. Transform[] arr = go.GetComponentsInChildren<Transform>();
  59. foreach (Transform item in arr)
  60. {
  61. if (item.name.Contains(matchRuleName))
  62. {
  63. //Debug.Log(go.name + " " + item.name);
  64. LanguageMatch lm = GetLanGoScr(item.gameObject);
  65. lm.configName = item.name.Replace(matchRuleName, "");
  66. }
  67. }
  68. PrefabUtility.SavePrefabAsset(go);
  69. //查看该节点下 是否有 languagmatch 组件。 无添加
  70. //修改 该节点组件的 字段值。
  71. }
  72. SetSave();
  73. Debug.Log("本地多语言 绑定完成!");
  74. }
  75. static LanguageMatch GetLanGoScr(GameObject go)
  76. {
  77. LanguageMatch lm = go.GetComponent<LanguageMatch>();
  78. if (lm == null)
  79. lm = go.AddComponent<LanguageMatch>();
  80. return lm;
  81. }
  82. static List<GameObject> GetFileAllPrefab(string assetPath)
  83. {
  84. List<GameObject> list = new List<GameObject>();
  85. string[] aa = Directory.GetFiles(Application.dataPath + "/" + assetPath, "*.prefab", SearchOption.AllDirectories);
  86. foreach (var item in aa)
  87. {
  88. string tt = item.Replace(Application.dataPath + "/", "");
  89. tt = tt.Replace(@"\", "/");
  90. tt = "Assets/" + tt;
  91. GameObject go = AssetDatabase.LoadAssetAtPath<GameObject>(tt);
  92. list.Add(go);
  93. }
  94. return list;
  95. }
  96. public static void FreshLanguage()
  97. {
  98. ReadExcelCoverData(ETLocalLanguagePath, "language");
  99. }
  100. private static void ReadExcelCoverData(string ExcelPath, string sheetName)
  101. {
  102. if (string.IsNullOrEmpty(ExcelPath))
  103. {
  104. return;
  105. }
  106. ETLanguageConfig.languageInfos = ExcelTool.ReadLanguageData(ExcelPath, sheetName);
  107. SetSave();
  108. }
  109. public static void SetSave()
  110. {
  111. EditorUtility.SetDirty(ETLanguageConfig);
  112. AssetDatabase.SaveAssets();
  113. AssetDatabase.Refresh();
  114. }
  115. }