diff --git a/Editor/PhraseEditor.cs b/Editor/PhraseEditor.cs
index b34f015..6087a1f 100644
--- a/Editor/PhraseEditor.cs
+++ b/Editor/PhraseEditor.cs
@@ -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);
@@ -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)
{
@@ -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;
+ ///
+ /// Hold the game object together with its LocalizedString and PhraseMetadata
+ ///
+ 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()
{
@@ -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--;
}
}
@@ -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())
- ?.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();