2025-05-01 01:48:08 -07:00

83 lines
3.3 KiB
C#

using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UIElements;
namespace UnityEditor.Localization.UI
{
class LocalizationSettingsProvider : AssetSettingsProvider
{
class Texts
{
public GUIContent noSettingsMsg = EditorGUIUtility.TrTextContent("You have no active Localization Settings. Would you like to create one?");
public GUIContent activeSettings = EditorGUIUtility.TrTextContent("Active Settings", "The Localization Settings that will be used by this project and included into any builds.");
}
static Texts s_Texts;
string m_SearchContext;
VisualElement m_Root;
VisualElement m_Editor;
public LocalizationSettingsProvider()
: base("Project/Localization", () => LocalizationEditorSettings.ActiveLocalizationSettings)
{
}
public override void OnActivate(string searchContext, VisualElement rootElement)
{
m_SearchContext = searchContext;
if (s_Texts == null)
s_Texts = new Texts();
m_Root = new ScrollView { style = { marginLeft = 9, marginTop = 1 }};
m_Root.Add(new Label("Localization") { style = { marginBottom = 12, fontSize = 19, unityFontStyleAndWeight = FontStyle.Bold } });
rootElement.Add(m_Root);
if (LocalizationEditorSettings.ActiveLocalizationSettings != null)
{
m_Root.Add(new InspectorElement(LocalizationEditorSettings.ActiveLocalizationSettings));
}
else
{
m_Root.Add(new IMGUIContainer(CreateSettingsGUI));
}
}
void CreateSettingsGUI()
{
if (LocalizationEditorSettings.ActiveLocalizationSettings == null)
{
if (Event.current.type != EventType.Layout && m_Editor != null)
{
m_Editor.RemoveFromHierarchy();
m_Editor = null;
}
EditorGUI.BeginChangeCheck();
var obj = EditorGUILayout.ObjectField(s_Texts.activeSettings, LocalizationEditorSettings.ActiveLocalizationSettings, typeof(LocalizationSettings), false) as LocalizationSettings;
if (EditorGUI.EndChangeCheck())
{
LocalizationEditorSettings.ActiveLocalizationSettings = obj;
}
EditorGUILayout.HelpBox(s_Texts.noSettingsMsg.text, MessageType.Info, true);
if (GUILayout.Button("Create", GUILayout.Width(100)))
{
var created = LocalizationSettingsMenuItems.CreateLocalizationAsset();
if (created != null)
{
LocalizationEditorSettings.ActiveLocalizationSettings = created;
}
}
}
else if (Event.current.type != EventType.Layout && m_Editor == null)
{
m_Editor = new InspectorElement(LocalizationEditorSettings.ActiveLocalizationSettings);
m_Root.Add(m_Editor);
}
}
[SettingsProvider]
static SettingsProvider CreateProjectSettingsProvider() => new LocalizationSettingsProvider();
}
}