99 lines
3.3 KiB
C#
99 lines
3.3 KiB
C#
|
|
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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|