using System.Collections.Generic; using System.IO; using System.Linq; using AlicizaX.Localization.Runtime; using AlicizaX.Runtime; using Sirenix.OdinInspector; using UnityEditor; using UnityEngine; namespace AlicizaX.Localization.Editor { [CreateAssetMenu(menuName = "AlicizaX/多语言编辑器配置")] public sealed class LocalizationMasterConfig : ScriptableObject { [FolderPath(AbsolutePath = false)] public string ExportFloder; [Button(ButtonSizes.Large)] private void Export() { Dictionary ChineseSimplified = new Dictionary(); Dictionary English = new Dictionary(); Dictionary Japanese = new Dictionary(); foreach (var item in Entries) { ChineseSimplified.Add(item.ID,item.ChineseSimplified); English.Add(item.ID,item.English); Japanese.Add(item.ID,item.Japanese); } var chineseObject= ScriptableObject.CreateInstance(); var englishObject= ScriptableObject.CreateInstance(); var japaneseObject= ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(chineseObject,Path.Combine(ExportFloder,$"ChineseSimplified.asset")); AssetDatabase.CreateAsset(englishObject,Path.Combine(ExportFloder,$"English.asset")); AssetDatabase.CreateAsset(japaneseObject,Path.Combine(ExportFloder,$"Japanese.asset")); chineseObject.TextMap = ChineseSimplified; englishObject.TextMap = English; japaneseObject.TextMap = Japanese; AssetDatabase.SaveAssetIfDirty(chineseObject); AssetDatabase.SaveAssetIfDirty(englishObject); AssetDatabase.SaveAssetIfDirty(japaneseObject); AssetDatabase.Refresh(); } [System.Serializable] public class LanguageEntry { public string ID; public string ChineseSimplified; public string English; public string Japanese; } [TableList(AlwaysExpanded = true)] public List Entries = new(); public static List GetAllEntries() { // 查找所有 LocalizationMasterConfig 实例 string[] guids = AssetDatabase.FindAssets("t:LocalizationMasterConfig"); var entriesDict = new Dictionary(); foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); LocalizationMasterConfig config = AssetDatabase.LoadAssetAtPath(path); if (config != null) { foreach (var entry in config.Entries) { // 如果 ID 已经存在,跳过重复项 if (!entriesDict.ContainsKey(entry.ID)) { entriesDict[entry.ID] = entry; } } } } // 将 Dictionary 转换为 List 并返回 return entriesDict.Values.ToList(); } } }