Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 57 additions & 43 deletions Editor/PhraseEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ private PhraseMetadata PhraseMetadata(SharedTableData sharedTableData, string ke
return null;
}

private IEnumerator UploadScreenshots(Transform[] gameObjects)
private IEnumerator UploadScreenshots(TranslatableObject[] translatableObjects)
{
string screenshotPath = "Temp/phrase_screenshot.png";
System.IO.File.Delete(screenshotPath);
Expand All @@ -102,16 +102,8 @@ private IEnumerator UploadScreenshots(Transform[] gameObjects)

yield return new WaitForEndOfFrame();

var groupedObjectsByProvider = gameObjects.GroupBy(x => {
SharedTableData sharedTableData = SharedTableData(x);
PhraseProvider provider = Provider(sharedTableData);
return provider;
}).ToDictionary(g => g.Key, g => g.Select(x => {
var localizedString = LocalizedString(x);
var sharedTableData = SharedTableData(localizedString);
var keyName = KeyName(localizedString, sharedTableData);
return PhraseMetadata(sharedTableData, keyName);
}).ToList());
var groupedObjectsByProvider = translatableObjects.GroupBy(x => x.provider)
.ToDictionary(g => g.Key, g => g.Select(x => x.metadata).ToList());

foreach (var group in groupedObjectsByProvider)
{
Expand All @@ -120,12 +112,25 @@ private IEnumerator UploadScreenshots(Transform[] gameObjects)
}
System.IO.File.Delete(screenshotPath);

EditorUtility.DisplayDialog($"Upload Screenshot", $"Screenshot uploaded for {gameObjects.Length} key(s)", "OK");
EditorUtility.DisplayDialog($"Upload Screenshot", $"Screenshot uploaded for {translatableObjects.Length} key(s)", "OK");
}

private Vector2 scrollPosition;

private Transform[] translatableObjects;
/// <summary>
/// Hold the game object together with its LocalizedString and PhraseMetadata
/// </summary>
private struct TranslatableObject
{
public Transform gameObject;
public LocalizedString localizedString;
public SharedTableData sharedTableData;
public PhraseProvider provider;
public string keyName;
public PhraseMetadata metadata;
}

private TranslatableObject[] translatableObjects;

public void OnGUI()
{
Expand All @@ -137,54 +142,44 @@ public void OnGUI()
return;
}
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
foreach (var gameObject in translatableObjects)
foreach (var translatableObject in translatableObjects)
{
LocalizedString localizedString = LocalizedString(gameObject);
SharedTableData sharedTableData = SharedTableData(localizedString);
PhraseProvider provider = Provider(sharedTableData);
string keyName = KeyName(localizedString, sharedTableData);
PhraseMetadata metadata = PhraseMetadata(sharedTableData, keyName);
if (metadata == null)
{
metadata = new PhraseMetadata();
sharedTableData.GetEntry(keyName).Metadata.AddMetadata(metadata);
}
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(gameObject.name, EditorStyles.boldLabel);
if (metadata.KeyId != null)
EditorGUILayout.LabelField(translatableObject.gameObject.name, EditorStyles.boldLabel);
if (translatableObject.metadata.KeyId != null)
{
if (GUILayout.Button("Open in Phrase", GUILayout.Width(100)))
{
Application.OpenURL(provider.KeyUrl(metadata.KeyId));
Application.OpenURL(translatableObject.provider.KeyUrl(translatableObject.metadata.KeyId));
}
}
if (!string.IsNullOrEmpty(metadata.ScreenshotUrl))
if (!string.IsNullOrEmpty(translatableObject.metadata.ScreenshotUrl))
{
if (GUILayout.Button("Open Screenshot", GUILayout.Width(150)))
{
Application.OpenURL(metadata.ScreenshotUrl);
Application.OpenURL(translatableObject.metadata.ScreenshotUrl);
}
}
EditorGUILayout.EndHorizontal();
if (keyName != null)
if (translatableObject.keyName != null)
{
EditorGUI.indentLevel++;
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Phrase Key", keyName);
if (metadata.KeyId != null)
EditorGUILayout.LabelField("Phrase Key", translatableObject.keyName);
if (translatableObject.metadata.KeyId != null)
{
if (GUILayout.Button("Copy", GUILayout.Width(50)))
{
EditorGUIUtility.systemCopyBuffer = keyName;
EditorGUIUtility.systemCopyBuffer = translatableObject.keyName;
}
if (metadata.ScreenshotId != null)
if (translatableObject.metadata.ScreenshotId != null)
{
hasScreenshots = true;
}
}
EditorGUILayout.EndHorizontal();
metadata.Description = EditorGUILayout.TextField("Description", metadata.Description);
metadata.MaxLength = EditorGUILayout.IntField(new GUIContent("Max Length", "set 0 for no limit"), metadata.MaxLength);
translatableObject.metadata.Description = EditorGUILayout.TextField("Description", translatableObject.metadata.Description);
translatableObject.metadata.MaxLength = EditorGUILayout.IntField(new GUIContent("Max Length", "set 0 for no limit"), translatableObject.metadata.MaxLength);
EditorGUI.indentLevel--;
}
}
Expand All @@ -203,15 +198,34 @@ public void OnGUI()
public void OnSelectionChange()
{
// This finds all selected GameObjects and their children that have a LocalizedString component
// TODO: check how it behaves with lots of objects
translatableObjects = Selection.transforms
?.SelectMany(x => x.GetComponentsInChildren<Transform>())
?.Where(x => {
var localizedString = LocalizedString(x);
if (localizedString == null) return false;
var sharedTableData = SharedTableData(localizedString);
var provider = Provider(sharedTableData);
return provider != null;
?.Select(x => new TranslatableObject
{
gameObject = x,
localizedString = LocalizedString(x),
sharedTableData = SharedTableData(x)
})
?.Where(x => x.localizedString != null && x.sharedTableData != null)
?.Select(x => {
var provider = Provider(x.sharedTableData);
var keyName = KeyName(x.localizedString, x.sharedTableData);
var metadata = PhraseMetadata(x.sharedTableData, KeyName(x.localizedString, x.sharedTableData));
if (metadata == null)
{
metadata = new PhraseMetadata();
x.sharedTableData.GetEntry(keyName).Metadata.AddMetadata(metadata);
}

return new TranslatableObject
{
gameObject = x.gameObject,
localizedString = x.localizedString,
sharedTableData = x.sharedTableData,
provider = provider,
keyName = keyName,
metadata = metadata
};
})
?.ToArray();
Repaint();
Expand Down