Skip to content

Commit

Permalink
Add localization and make default language to English
Browse files Browse the repository at this point in the history
  • Loading branch information
hiroki-o committed Jul 16, 2020
1 parent 8db0f72 commit 7cc16f3
Show file tree
Hide file tree
Showing 14 changed files with 721 additions and 158 deletions.
3 changes: 3 additions & 0 deletions Editor/AssmblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using UnityEditor.Localization.Editor;

[assembly: Localization]
11 changes: 11 additions & 0 deletions Editor/AssmblyInfo.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Editor/AutoSpringBoneSetup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEditor.Localization.Editor;

namespace Unity.Animations.SpringBones
{
Expand Down
77 changes: 49 additions & 28 deletions Editor/GUI/Windows/LoadSpringBoneSetupWindow.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,46 @@
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEditor.Localization.Editor;

namespace Unity.Animations.SpringBones
{
public class LoadSpringBoneSetupWindow : EditorWindow
{
private static class Styles
{
public static readonly string editorWindowTitle = Localization.Tr("Load spring bone setup");
public static readonly string stopPlayModeMessage = Localization.Tr("Do not setup in Play Mode");
public static readonly string selectObjectRootsMessage = Localization.Tr("Select parent object of the spring bone");
public static readonly string resultFormat = Localization.Tr("Set up complete:{0}\nNumber of bones: {1} Number of colliders: {2}");
public static readonly string csvFile = Localization.Tr("CSV File");
public static readonly string textFile = Localization.Tr("Text File");
public static readonly string loadSpringBoneSetup = Localization.Tr("Load spring bone setup");
public static readonly string errorFormat = Localization.Tr(
"SpringBone setup failed.\n"
+ "Souce data may contain errors,\n"
+ "or the data don't match the character.\n"
+ "Please refer console logs for further info.\n"
+ "\n"
+ "Character: {0}\n"
+ "\n"
+ "Path: {1}");

public static readonly string springBoneSetup = Localization.Tr("SpringBone Setup");
public static readonly string springBoneSetupFailedFormat = Localization.Tr("SpringBone Setup failed:{0}\nPath:{1}");
public static readonly string labelSpringBoneRoot = Localization.Tr("SpringBone Root");

public static readonly GUIContent labelLoadingConfig = new GUIContent(Localization.Tr("Loading Configuration"));
public static readonly GUIContent labelSpringBone = new GUIContent(Localization.Tr("SpringBone"));
public static readonly GUIContent labelCollider = new GUIContent(Localization.Tr("Collider"));

public static readonly GUIContent labelSelectFromRoot = new GUIContent(Localization.Tr("Get root from selection"));
public static readonly GUIContent labelSetupLoadCSV = new GUIContent(Localization.Tr("Set up from CSV file"));
}

public static void ShowWindow()
{
var editorWindow = GetWindow<LoadSpringBoneSetupWindow>(
"スプリングボーンセットアップを読み込む");
var editorWindow = GetWindow<LoadSpringBoneSetupWindow>(Styles.editorWindowTitle);
if (editorWindow != null)
{
editorWindow.SelectObjectsFromSelection();
Expand All @@ -35,8 +66,6 @@ public static void ShowWindow()

// private

private const string StopPlayModeMessage = "再生モードでセットアップしないでください。";
private const string SelectObjectRootsMessage = "スプリングボーンの親オブジェクトを指定してください。";
private const int UIRowHeight = 24;
private const int UISpacing = 8;
private const int LabelWidth = 200;
Expand Down Expand Up @@ -74,11 +103,11 @@ private void ShowImportSettingsUI(ref Rect uiRect)
importSettings = new DynamicsSetup.ImportSettings();
}

GUI.Label(uiRect, "読み込み設定", SpringBoneGUIStyles.HeaderLabelStyle);
GUI.Label(uiRect, Styles.labelLoadingConfig, SpringBoneGUIStyles.HeaderLabelStyle);
uiRect.y += uiRect.height;
importSettings.ImportSpringBones = GUI.Toggle(uiRect, importSettings.ImportSpringBones, "スプリングボーン", SpringBoneGUIStyles.ToggleStyle);
importSettings.ImportSpringBones = GUI.Toggle(uiRect, importSettings.ImportSpringBones, Styles.labelSpringBone, SpringBoneGUIStyles.ToggleStyle);
uiRect.y += uiRect.height;
importSettings.ImportCollision = GUI.Toggle(uiRect, importSettings.ImportCollision, "コライダー", SpringBoneGUIStyles.ToggleStyle);
importSettings.ImportCollision = GUI.Toggle(uiRect, importSettings.ImportCollision, Styles.labelCollider, SpringBoneGUIStyles.ToggleStyle);
uiRect.y += uiRect.height;
}

Expand All @@ -90,9 +119,9 @@ private void OnGUI()

var uiWidth = (int)position.width - UISpacing * 2;
var yPos = UISpacing;
springBoneRoot = DoObjectPicker("スプリングボーンのルート", springBoneRoot, uiWidth, UIRowHeight, ref yPos);
springBoneRoot = DoObjectPicker(Styles.labelSpringBoneRoot, springBoneRoot, uiWidth, UIRowHeight, ref yPos);
var buttonRect = new Rect(UISpacing, yPos, uiWidth, ButtonHeight);
if (GUI.Button(buttonRect, "選択からルートを取得", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(buttonRect, Styles.labelSelectFromRoot, SpringBoneGUIStyles.ButtonStyle))
{
SelectObjectsFromSelection();
}
Expand All @@ -104,7 +133,7 @@ private void OnGUI()
string errorMessage;
if (IsOkayToSetup(out errorMessage))
{
if (GUI.Button(buttonRect, "CSVを読み込んでセットアップ", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(buttonRect, Styles.labelSetupLoadCSV, SpringBoneGUIStyles.ButtonStyle))
{
BrowseAndLoadSpringSetup();
}
Expand All @@ -122,13 +151,13 @@ private bool IsOkayToSetup(out string errorMessage)
errorMessage = "";
if (EditorApplication.isPlaying)
{
errorMessage = StopPlayModeMessage;
errorMessage = Styles.stopPlayModeMessage;
return false;
}

if (springBoneRoot == null)
{
errorMessage = SelectObjectRootsMessage;
errorMessage = Styles.selectObjectRootsMessage;
return false;
}
return true;
Expand Down Expand Up @@ -169,11 +198,10 @@ public void Perform()
setup.Build();
AssetDatabase.Refresh();

const string ResultFormat = "セットアップ完了: {0}\nボーン数: {1} コライダー数: {2}";
var boneCount = springBoneRoot.GetComponentsInChildren<SpringBone>(true).Length;
var colliderCount = SpringColliderSetup.GetColliderTypes()
.Sum(type => springBoneRoot.GetComponentsInChildren(type, true).Length);
var resultMessage = string.Format(ResultFormat, path, boneCount, colliderCount);
var resultMessage = string.Format(Styles.resultFormat, path, boneCount, colliderCount);
Debug.Log(resultMessage);
}

Expand All @@ -184,18 +212,17 @@ public void Perform()

private void BrowseAndLoadSpringSetup()
{
string checkErrorMessage;
if (!IsOkayToSetup(out checkErrorMessage))
if (!IsOkayToSetup(out var checkErrorMessage))
{
Debug.LogError(checkErrorMessage);
return;
}

// var initialPath = "";
var initialDirectory = ""; // System.IO.Path.GetDirectoryName(initialPath);
var fileFilters = new string[] { "CSVファイル", "csv", "テキストファイル", "txt" };
var fileFilters = new string[] { Styles.csvFile, "csv", Styles.textFile, "txt" };
var path = EditorUtility.OpenFilePanelWithFilters(
"スプリングボーンセットアップを読み込む", initialDirectory, fileFilters);
Styles.loadSpringBoneSetup, initialDirectory, fileFilters);
if (path.Length == 0) { return; }

var sourceText = FileUtil.ReadAllText(path);
Expand All @@ -216,16 +243,10 @@ private void BrowseAndLoadSpringSetup()
}
else
{
const string ErrorFormat =
"スプリングボーンセットアップが失敗しました。\n"
+ "元データにエラーがあるか、もしくは\n"
+ "キャラクターにデータが一致しません。\n"
+ "詳しくはConsoleのログをご覧下さい。\n\n"
+ "キャラクター: {0}\n\n"
+ "パス: {1}";
var resultErrorMessage = string.Format(ErrorFormat, springBoneRoot.name, path);
EditorUtility.DisplayDialog("スプリングボーンセットアップ", resultErrorMessage, "OK");
Debug.LogError("スプリングボーンセットアップ失敗: " + springBoneRoot.name + "\n" + path);
var resultErrorMessage = string.Format(Styles.errorFormat, springBoneRoot.name, path);
EditorUtility.DisplayDialog(Styles.springBoneSetup, resultErrorMessage, "OK");
Debug.LogFormat(LogType.Error, LogOption.None, springBoneRoot,
Styles.springBoneSetupFailedFormat, springBoneRoot.name, path);
}
Close();
}
Expand Down
37 changes: 27 additions & 10 deletions Editor/GUI/Windows/MirrorSpringBoneWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,31 @@
using UnityEditor;
using UnityEngine;
using Unity.Animations.SpringBones.GameObjectExtensions;
using UnityEditor.Localization.Editor;

namespace Unity.Animations.SpringBones
{
public class MirrorSpringBoneWindow : EditorWindow
{
private static class Styles
{
public static readonly string editorWindowTitle = Localization.Tr("SpringBone Mirror");

public static readonly GUIContent labelDoMirror = new GUIContent(Localization.Tr("Do Mirror"));
public static readonly GUIContent labelGetFromSelection = new GUIContent(Localization.Tr("Get from selection"));

public static readonly GUIContent labelSelectAllCopyDst = new GUIContent(Localization.Tr("Select all copy destination"));
public static readonly GUIContent labelSelectAllCopySrc = new GUIContent(Localization.Tr("Select all copy source"));
public static readonly GUIContent labelSelectAll = new GUIContent(Localization.Tr("Select All"));
public static readonly GUIContent labelConfigXbZero = new GUIContent(Localization.Tr("Set bone where X > 0"));
public static readonly GUIContent labelConfigXlZero = new GUIContent(Localization.Tr("Set bone where X < 0"));
public static readonly GUIContent labelSrc = new GUIContent(Localization.Tr("Source"));
public static readonly GUIContent labelDst = new GUIContent(Localization.Tr("→ Destination"));
}

public static void ShowWindow()
{
var window = GetWindow<MirrorSpringBoneWindow>("SpringBoneミラー");
var window = GetWindow<MirrorSpringBoneWindow>(Styles.editorWindowTitle);
window.Show();
window.OnShow();
}
Expand Down Expand Up @@ -57,7 +74,7 @@ private void OnGUI()
uiRect = ShowUtilityButtons(uiRect);
uiRect = ShowBoneList(uiRect);

if (GUI.Button(uiRect, "ミラーを行う", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(uiRect, Styles.labelDoMirror, SpringBoneGUIStyles.ButtonStyle))
{
PerformMirror();
}
Expand All @@ -66,41 +83,41 @@ private void OnGUI()
private Rect ShowUtilityButtons(Rect uiRect)
{
var buttonOffset = uiRect.height + Spacing;
if (GUI.Button(uiRect, "選択から取得", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(uiRect, Styles.labelGetFromSelection, SpringBoneGUIStyles.ButtonStyle))
{
AcquireBonesFromSelection();
}
uiRect.y += buttonOffset;

var halfRectWidth = 0.5f * (uiRect.width - Spacing);
var halfButtonRect = new Rect(uiRect.x, uiRect.y, halfRectWidth, uiRect.height);
if (GUI.Button(halfButtonRect, "X < 0のボーンを元に設定", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(halfButtonRect, Styles.labelConfigXlZero, SpringBoneGUIStyles.ButtonStyle))
{
AcquireSourceBonesOnSideOfAxis(true);
}
halfButtonRect.x += halfRectWidth + Spacing;
if (GUI.Button(halfButtonRect, "X > 0のボーンを元に設定", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(halfButtonRect, Styles.labelConfigXbZero, SpringBoneGUIStyles.ButtonStyle))
{
AcquireSourceBonesOnSideOfAxis(false);
}
uiRect.y += buttonOffset;

halfButtonRect.x = uiRect.x;
halfButtonRect.y = uiRect.y;
if (GUI.Button(halfButtonRect, "コピー元を全選択", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(halfButtonRect, Styles.labelSelectAllCopySrc, SpringBoneGUIStyles.ButtonStyle))
{
var sourceBones = boneEntries.Select(entry => entry.sourceBone).Where(bone => bone != null);
if (sourceBones.Any()) { Selection.objects = sourceBones.Select(bone => bone.gameObject).ToArray(); }
}
halfButtonRect.x += halfRectWidth + Spacing;
if (GUI.Button(halfButtonRect, "コピー先を全選択", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(halfButtonRect, Styles.labelSelectAllCopyDst, SpringBoneGUIStyles.ButtonStyle))
{
var targetBones = boneEntries.Select(entry => entry.targetBone).Where(bone => bone != null);
if (targetBones.Any()) { Selection.objects = targetBones.Select(bone => bone.gameObject).ToArray(); }
}
uiRect.y += buttonOffset;

if (GUI.Button(uiRect, "全選択", SpringBoneGUIStyles.ButtonStyle))
if (GUI.Button(uiRect, Styles.labelSelectAll, SpringBoneGUIStyles.ButtonStyle))
{
var bonesToSelect = new List<SpringBone>();
bonesToSelect.AddRange(boneEntries.Select(entry => entry.sourceBone).Where(bone => bone != null));
Expand All @@ -117,9 +134,9 @@ private Rect ShowBoneList(Rect uiRect)
var listBoxBottom = position.height - (Spacing * 2f + RowHeight);

var headerRowRect = new Rect(uiRect.x, uiRect.y, uiRect.width * 0.5f, uiRect.height);
GUI.Label(headerRowRect, "", SpringBoneGUIStyles.LabelStyle);
GUI.Label(headerRowRect, Styles.labelSrc, SpringBoneGUIStyles.LabelStyle);
headerRowRect.x += headerRowRect.width;
GUI.Label(headerRowRect, "→ 先", SpringBoneGUIStyles.LabelStyle);
GUI.Label(headerRowRect, Styles.labelDst, SpringBoneGUIStyles.LabelStyle);
uiRect.y += uiRect.height;

const float ScrollbarWidth = 20f;
Expand Down

0 comments on commit 7cc16f3

Please sign in to comment.