using AppUI.Localization; using UnityEditor; using UnityEngine; namespace AppUI.Editor { [CustomEditor(typeof(AppUITextAutoLanguage))] public class AppUITextAutoLanguageEditor : UnityEditor.Editor { SerializedProperty _textKey; SerializedProperty _fallbackText; SerializedProperty _layoutRebuildObject; SerializedProperty _languageFontSizes; void OnEnable() { _textKey = serializedObject.FindProperty("textKey"); _fallbackText = serializedObject.FindProperty("fallbackText"); _layoutRebuildObject = serializedObject.FindProperty("layoutRebuildObject"); _languageFontSizes = serializedObject.FindProperty("languageFontSizes"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.LabelField("AppUI 多语言文本", EditorStyles.boldLabel); DrawPreviewLanguageHelpBox(); var changed = false; EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(_textKey, new GUIContent("Text Key")); EditorGUILayout.PropertyField(_fallbackText, new GUIContent("Fallback 文案")); EditorGUILayout.PropertyField(_layoutRebuildObject); EditorGUILayout.PropertyField(_languageFontSizes, true); if (EditorGUI.EndChangeCheck()) changed = true; if (changed) { serializedObject.ApplyModifiedProperties(); RefreshPreview(); } if (GUILayout.Button("刷新多语言预览")) { serializedObject.ApplyModifiedProperties(); RefreshPreview(); } serializedObject.ApplyModifiedProperties(); } static void DrawPreviewLanguageHelpBox() { AppUILocalization.Reload(); var language = AppUILocalization.GetLanguage(); string languageName = language switch { LanguageEnum.English => "English (en.json)", LanguageEnum.Japan => "日本語 (Japan.json)", _ => "中文 (cn.json)", }; EditorGUILayout.HelpBox( $"当前 Editor 预览语言:{languageName}\n" + "与 PlayerPrefs「Language」一致;运行时在设置页切换语言后,Editor 预览也会跟随。", MessageType.Info); } void RefreshPreview() { AppUILocalization.Reload(); foreach (var t in targets) { if (t is not AppUITextAutoLanguage component) continue; Undo.RecordObject(component, "Refresh AppUI Text Localization"); component.RefreshLocalizedPreview(); EditorUtility.SetDirty(component); } } } }