AlicizaX/Client/Packages/com.alicizax.unity.localization/Editor/LocalizationConfig.cs

99 lines
3.3 KiB
C#
Raw Normal View History

2025-03-04 18:40:14 +08:00
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<string, string> ChineseSimplified = new Dictionary<string, string>();
Dictionary<string, string> English = new Dictionary<string, string>();
Dictionary<string, string> Japanese = new Dictionary<string, string>();
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<LocalizationRuntimeConfig>();
var englishObject= ScriptableObject.CreateInstance<LocalizationRuntimeConfig>();
var japaneseObject= ScriptableObject.CreateInstance<LocalizationRuntimeConfig>();
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<LanguageEntry> Entries = new();
public static List<LanguageEntry> GetAllEntries()
{
// 查找所有 LocalizationMasterConfig 实例
string[] guids = AssetDatabase.FindAssets("t:LocalizationMasterConfig");
var entriesDict = new Dictionary<string, LanguageEntry>();
foreach (string guid in guids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
LocalizationMasterConfig config = AssetDatabase.LoadAssetAtPath<LocalizationMasterConfig>(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();
}
}
}