| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 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);
- }
- }
- }
- }
|