using System.Collections.Generic; using System.IO; using System.Linq; using AlicizaX.Localization.Runtime; using AlicizaX.Runtime; using Newtonsoft.Json; using UnityEditor; using UnityEngine; namespace AlicizaX.UI.Extension.Editor { internal class LocalizeItem { public string key; public string ChineseSimplified; public string English; public string Japanese; } internal static class LocalizeStaticKey { static readonly string LocalizeStaticConfigPath = "Assets/AssetArt/Configs/json/tables_tblocalization.json"; private static bool IsLoaded = false; private static List LocalizeItems; private static Dictionary> LocalizeDic; /// /// 获取所有静态Keys /// /// public static string[] GetAllStaticKeys() { LoadStaticKey(); List keys = LocalizeItems.Select(v => v.key).ToList(); keys.Insert(0, "None"); return keys.ToArray(); } public static string GetText(string key) { LoadStaticKey(); Language languageType = (Language)EditorPrefs.GetInt(LocalizationComponent.PrefsKey); string value = key; if (LocalizeDic.TryGetValue(key, out Dictionary dic)) { dic.TryGetValue(languageType, out value); } return value; } [MenuItem("开发工具/Force Reload多语言静态Key")] public static void ForceReload() { IsLoaded = false; LoadStaticKey(); } static void LoadStaticKey() { if (IsLoaded) return; if (!File.Exists(LocalizeStaticConfigPath)) { Debug.LogError("静态多语言文本文件不存在!"); return; } TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath(LocalizeStaticConfigPath); LocalizeItems = JsonConvert.DeserializeObject>(textAsset.text); LocalizeDic = new Dictionary>(); foreach (var v in LocalizeItems) { Dictionary valueDic = new Dictionary(); valueDic.Add(Language.ChineseSimplified, v.ChineseSimplified); valueDic.Add(Language.English, v.English); valueDic.Add(Language.Japanese, v.Japanese); LocalizeDic.Add(v.key, valueDic); } IsLoaded = true; } } }