AppUITextAutoLanguageEditor.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using AppUI.Localization;
  2. using UnityEditor;
  3. using UnityEngine;
  4. namespace AppUI.Editor
  5. {
  6. [CustomEditor(typeof(AppUITextAutoLanguage))]
  7. public class AppUITextAutoLanguageEditor : UnityEditor.Editor
  8. {
  9. SerializedProperty _textKey;
  10. SerializedProperty _fallbackText;
  11. SerializedProperty _layoutRebuildObject;
  12. SerializedProperty _languageFontSizes;
  13. void OnEnable()
  14. {
  15. _textKey = serializedObject.FindProperty("textKey");
  16. _fallbackText = serializedObject.FindProperty("fallbackText");
  17. _layoutRebuildObject = serializedObject.FindProperty("layoutRebuildObject");
  18. _languageFontSizes = serializedObject.FindProperty("languageFontSizes");
  19. }
  20. public override void OnInspectorGUI()
  21. {
  22. serializedObject.Update();
  23. EditorGUILayout.LabelField("AppUI 多语言文本", EditorStyles.boldLabel);
  24. DrawPreviewLanguageHelpBox();
  25. var changed = false;
  26. EditorGUI.BeginChangeCheck();
  27. EditorGUILayout.PropertyField(_textKey, new GUIContent("Text Key"));
  28. EditorGUILayout.PropertyField(_fallbackText, new GUIContent("Fallback 文案"));
  29. EditorGUILayout.PropertyField(_layoutRebuildObject);
  30. EditorGUILayout.PropertyField(_languageFontSizes, true);
  31. if (EditorGUI.EndChangeCheck())
  32. changed = true;
  33. if (changed)
  34. {
  35. serializedObject.ApplyModifiedProperties();
  36. RefreshPreview();
  37. }
  38. if (GUILayout.Button("刷新多语言预览"))
  39. {
  40. serializedObject.ApplyModifiedProperties();
  41. RefreshPreview();
  42. }
  43. serializedObject.ApplyModifiedProperties();
  44. }
  45. static void DrawPreviewLanguageHelpBox()
  46. {
  47. AppUILocalization.Reload();
  48. var language = AppUILocalization.GetLanguage();
  49. string languageName = language switch
  50. {
  51. LanguageEnum.English => "English (en.json)",
  52. LanguageEnum.Japan => "日本語 (Japan.json)",
  53. _ => "中文 (cn.json)",
  54. };
  55. EditorGUILayout.HelpBox(
  56. $"当前 Editor 预览语言:{languageName}\n" +
  57. "与 PlayerPrefs「Language」一致;运行时在设置页切换语言后,Editor 预览也会跟随。",
  58. MessageType.Info);
  59. }
  60. void RefreshPreview()
  61. {
  62. AppUILocalization.Reload();
  63. foreach (var t in targets)
  64. {
  65. if (t is not AppUITextAutoLanguage component)
  66. continue;
  67. Undo.RecordObject(component, "Refresh AppUI Text Localization");
  68. component.RefreshLocalizedPreview();
  69. EditorUtility.SetDirty(component);
  70. }
  71. }
  72. }
  73. }