Skip to content

Commit 7cc16f3

Browse files
committed
Add localization and make default language to English
1 parent 8db0f72 commit 7cc16f3

14 files changed

+721
-158
lines changed

Editor/AssmblyInfo.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
using UnityEditor.Localization.Editor;
2+
3+
[assembly: Localization]

Editor/AssmblyInfo.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/AutoSpringBoneSetup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Linq;
44
using UnityEditor;
55
using UnityEngine;
6+
using UnityEditor.Localization.Editor;
67

78
namespace Unity.Animations.SpringBones
89
{

Editor/GUI/Windows/LoadSpringBoneSetupWindow.cs

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,46 @@
11
using System.Linq;
22
using UnityEditor;
33
using UnityEngine;
4+
using UnityEditor.Localization.Editor;
45

56
namespace Unity.Animations.SpringBones
67
{
78
public class LoadSpringBoneSetupWindow : EditorWindow
89
{
10+
private static class Styles
11+
{
12+
public static readonly string editorWindowTitle = Localization.Tr("Load spring bone setup");
13+
public static readonly string stopPlayModeMessage = Localization.Tr("Do not setup in Play Mode");
14+
public static readonly string selectObjectRootsMessage = Localization.Tr("Select parent object of the spring bone");
15+
public static readonly string resultFormat = Localization.Tr("Set up complete:{0}\nNumber of bones: {1} Number of colliders: {2}");
16+
public static readonly string csvFile = Localization.Tr("CSV File");
17+
public static readonly string textFile = Localization.Tr("Text File");
18+
public static readonly string loadSpringBoneSetup = Localization.Tr("Load spring bone setup");
19+
public static readonly string errorFormat = Localization.Tr(
20+
"SpringBone setup failed.\n"
21+
+ "Souce data may contain errors,\n"
22+
+ "or the data don't match the character.\n"
23+
+ "Please refer console logs for further info.\n"
24+
+ "\n"
25+
+ "Character: {0}\n"
26+
+ "\n"
27+
+ "Path: {1}");
28+
29+
public static readonly string springBoneSetup = Localization.Tr("SpringBone Setup");
30+
public static readonly string springBoneSetupFailedFormat = Localization.Tr("SpringBone Setup failed:{0}\nPath:{1}");
31+
public static readonly string labelSpringBoneRoot = Localization.Tr("SpringBone Root");
32+
33+
public static readonly GUIContent labelLoadingConfig = new GUIContent(Localization.Tr("Loading Configuration"));
34+
public static readonly GUIContent labelSpringBone = new GUIContent(Localization.Tr("SpringBone"));
35+
public static readonly GUIContent labelCollider = new GUIContent(Localization.Tr("Collider"));
36+
37+
public static readonly GUIContent labelSelectFromRoot = new GUIContent(Localization.Tr("Get root from selection"));
38+
public static readonly GUIContent labelSetupLoadCSV = new GUIContent(Localization.Tr("Set up from CSV file"));
39+
}
40+
941
public static void ShowWindow()
1042
{
11-
var editorWindow = GetWindow<LoadSpringBoneSetupWindow>(
12-
"スプリングボーンセットアップを読み込む");
43+
var editorWindow = GetWindow<LoadSpringBoneSetupWindow>(Styles.editorWindowTitle);
1344
if (editorWindow != null)
1445
{
1546
editorWindow.SelectObjectsFromSelection();
@@ -35,8 +66,6 @@ ref int yPos
3566

3667
// private
3768

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

77-
GUI.Label(uiRect, "読み込み設定", SpringBoneGUIStyles.HeaderLabelStyle);
106+
GUI.Label(uiRect, Styles.labelLoadingConfig, SpringBoneGUIStyles.HeaderLabelStyle);
78107
uiRect.y += uiRect.height;
79-
importSettings.ImportSpringBones = GUI.Toggle(uiRect, importSettings.ImportSpringBones, "スプリングボーン", SpringBoneGUIStyles.ToggleStyle);
108+
importSettings.ImportSpringBones = GUI.Toggle(uiRect, importSettings.ImportSpringBones, Styles.labelSpringBone, SpringBoneGUIStyles.ToggleStyle);
80109
uiRect.y += uiRect.height;
81-
importSettings.ImportCollision = GUI.Toggle(uiRect, importSettings.ImportCollision, "コライダー", SpringBoneGUIStyles.ToggleStyle);
110+
importSettings.ImportCollision = GUI.Toggle(uiRect, importSettings.ImportCollision, Styles.labelCollider, SpringBoneGUIStyles.ToggleStyle);
82111
uiRect.y += uiRect.height;
83112
}
84113

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

91120
var uiWidth = (int)position.width - UISpacing * 2;
92121
var yPos = UISpacing;
93-
springBoneRoot = DoObjectPicker("スプリングボーンのルート", springBoneRoot, uiWidth, UIRowHeight, ref yPos);
122+
springBoneRoot = DoObjectPicker(Styles.labelSpringBoneRoot, springBoneRoot, uiWidth, UIRowHeight, ref yPos);
94123
var buttonRect = new Rect(UISpacing, yPos, uiWidth, ButtonHeight);
95-
if (GUI.Button(buttonRect, "選択からルートを取得", SpringBoneGUIStyles.ButtonStyle))
124+
if (GUI.Button(buttonRect, Styles.labelSelectFromRoot, SpringBoneGUIStyles.ButtonStyle))
96125
{
97126
SelectObjectsFromSelection();
98127
}
@@ -104,7 +133,7 @@ private void OnGUI()
104133
string errorMessage;
105134
if (IsOkayToSetup(out errorMessage))
106135
{
107-
if (GUI.Button(buttonRect, "CSVを読み込んでセットアップ", SpringBoneGUIStyles.ButtonStyle))
136+
if (GUI.Button(buttonRect, Styles.labelSetupLoadCSV, SpringBoneGUIStyles.ButtonStyle))
108137
{
109138
BrowseAndLoadSpringSetup();
110139
}
@@ -122,13 +151,13 @@ private bool IsOkayToSetup(out string errorMessage)
122151
errorMessage = "";
123152
if (EditorApplication.isPlaying)
124153
{
125-
errorMessage = StopPlayModeMessage;
154+
errorMessage = Styles.stopPlayModeMessage;
126155
return false;
127156
}
128157

129158
if (springBoneRoot == null)
130159
{
131-
errorMessage = SelectObjectRootsMessage;
160+
errorMessage = Styles.selectObjectRootsMessage;
132161
return false;
133162
}
134163
return true;
@@ -169,11 +198,10 @@ public void Perform()
169198
setup.Build();
170199
AssetDatabase.Refresh();
171200

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

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

185213
private void BrowseAndLoadSpringSetup()
186214
{
187-
string checkErrorMessage;
188-
if (!IsOkayToSetup(out checkErrorMessage))
215+
if (!IsOkayToSetup(out var checkErrorMessage))
189216
{
190217
Debug.LogError(checkErrorMessage);
191218
return;
192219
}
193220

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

201228
var sourceText = FileUtil.ReadAllText(path);
@@ -216,16 +243,10 @@ private void BrowseAndLoadSpringSetup()
216243
}
217244
else
218245
{
219-
const string ErrorFormat =
220-
"スプリングボーンセットアップが失敗しました。\n"
221-
+ "元データにエラーがあるか、もしくは\n"
222-
+ "キャラクターにデータが一致しません。\n"
223-
+ "詳しくはConsoleのログをご覧下さい。\n\n"
224-
+ "キャラクター: {0}\n\n"
225-
+ "パス: {1}";
226-
var resultErrorMessage = string.Format(ErrorFormat, springBoneRoot.name, path);
227-
EditorUtility.DisplayDialog("スプリングボーンセットアップ", resultErrorMessage, "OK");
228-
Debug.LogError("スプリングボーンセットアップ失敗: " + springBoneRoot.name + "\n" + path);
246+
var resultErrorMessage = string.Format(Styles.errorFormat, springBoneRoot.name, path);
247+
EditorUtility.DisplayDialog(Styles.springBoneSetup, resultErrorMessage, "OK");
248+
Debug.LogFormat(LogType.Error, LogOption.None, springBoneRoot,
249+
Styles.springBoneSetupFailedFormat, springBoneRoot.name, path);
229250
}
230251
Close();
231252
}

Editor/GUI/Windows/MirrorSpringBoneWindow.cs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,31 @@
33
using UnityEditor;
44
using UnityEngine;
55
using Unity.Animations.SpringBones.GameObjectExtensions;
6+
using UnityEditor.Localization.Editor;
67

78
namespace Unity.Animations.SpringBones
89
{
910
public class MirrorSpringBoneWindow : EditorWindow
1011
{
12+
private static class Styles
13+
{
14+
public static readonly string editorWindowTitle = Localization.Tr("SpringBone Mirror");
15+
16+
public static readonly GUIContent labelDoMirror = new GUIContent(Localization.Tr("Do Mirror"));
17+
public static readonly GUIContent labelGetFromSelection = new GUIContent(Localization.Tr("Get from selection"));
18+
19+
public static readonly GUIContent labelSelectAllCopyDst = new GUIContent(Localization.Tr("Select all copy destination"));
20+
public static readonly GUIContent labelSelectAllCopySrc = new GUIContent(Localization.Tr("Select all copy source"));
21+
public static readonly GUIContent labelSelectAll = new GUIContent(Localization.Tr("Select All"));
22+
public static readonly GUIContent labelConfigXbZero = new GUIContent(Localization.Tr("Set bone where X > 0"));
23+
public static readonly GUIContent labelConfigXlZero = new GUIContent(Localization.Tr("Set bone where X < 0"));
24+
public static readonly GUIContent labelSrc = new GUIContent(Localization.Tr("Source"));
25+
public static readonly GUIContent labelDst = new GUIContent(Localization.Tr("→ Destination"));
26+
}
27+
1128
public static void ShowWindow()
1229
{
13-
var window = GetWindow<MirrorSpringBoneWindow>("SpringBoneミラー");
30+
var window = GetWindow<MirrorSpringBoneWindow>(Styles.editorWindowTitle);
1431
window.Show();
1532
window.OnShow();
1633
}
@@ -57,7 +74,7 @@ private void OnGUI()
5774
uiRect = ShowUtilityButtons(uiRect);
5875
uiRect = ShowBoneList(uiRect);
5976

60-
if (GUI.Button(uiRect, "ミラーを行う", SpringBoneGUIStyles.ButtonStyle))
77+
if (GUI.Button(uiRect, Styles.labelDoMirror, SpringBoneGUIStyles.ButtonStyle))
6178
{
6279
PerformMirror();
6380
}
@@ -66,41 +83,41 @@ private void OnGUI()
6683
private Rect ShowUtilityButtons(Rect uiRect)
6784
{
6885
var buttonOffset = uiRect.height + Spacing;
69-
if (GUI.Button(uiRect, "選択から取得", SpringBoneGUIStyles.ButtonStyle))
86+
if (GUI.Button(uiRect, Styles.labelGetFromSelection, SpringBoneGUIStyles.ButtonStyle))
7087
{
7188
AcquireBonesFromSelection();
7289
}
7390
uiRect.y += buttonOffset;
7491

7592
var halfRectWidth = 0.5f * (uiRect.width - Spacing);
7693
var halfButtonRect = new Rect(uiRect.x, uiRect.y, halfRectWidth, uiRect.height);
77-
if (GUI.Button(halfButtonRect, "X < 0のボーンを元に設定", SpringBoneGUIStyles.ButtonStyle))
94+
if (GUI.Button(halfButtonRect, Styles.labelConfigXlZero, SpringBoneGUIStyles.ButtonStyle))
7895
{
7996
AcquireSourceBonesOnSideOfAxis(true);
8097
}
8198
halfButtonRect.x += halfRectWidth + Spacing;
82-
if (GUI.Button(halfButtonRect, "X > 0のボーンを元に設定", SpringBoneGUIStyles.ButtonStyle))
99+
if (GUI.Button(halfButtonRect, Styles.labelConfigXbZero, SpringBoneGUIStyles.ButtonStyle))
83100
{
84101
AcquireSourceBonesOnSideOfAxis(false);
85102
}
86103
uiRect.y += buttonOffset;
87104

88105
halfButtonRect.x = uiRect.x;
89106
halfButtonRect.y = uiRect.y;
90-
if (GUI.Button(halfButtonRect, "コピー元を全選択", SpringBoneGUIStyles.ButtonStyle))
107+
if (GUI.Button(halfButtonRect, Styles.labelSelectAllCopySrc, SpringBoneGUIStyles.ButtonStyle))
91108
{
92109
var sourceBones = boneEntries.Select(entry => entry.sourceBone).Where(bone => bone != null);
93110
if (sourceBones.Any()) { Selection.objects = sourceBones.Select(bone => bone.gameObject).ToArray(); }
94111
}
95112
halfButtonRect.x += halfRectWidth + Spacing;
96-
if (GUI.Button(halfButtonRect, "コピー先を全選択", SpringBoneGUIStyles.ButtonStyle))
113+
if (GUI.Button(halfButtonRect, Styles.labelSelectAllCopyDst, SpringBoneGUIStyles.ButtonStyle))
97114
{
98115
var targetBones = boneEntries.Select(entry => entry.targetBone).Where(bone => bone != null);
99116
if (targetBones.Any()) { Selection.objects = targetBones.Select(bone => bone.gameObject).ToArray(); }
100117
}
101118
uiRect.y += buttonOffset;
102119

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

119136
var headerRowRect = new Rect(uiRect.x, uiRect.y, uiRect.width * 0.5f, uiRect.height);
120-
GUI.Label(headerRowRect, "元", SpringBoneGUIStyles.LabelStyle);
137+
GUI.Label(headerRowRect, Styles.labelSrc, SpringBoneGUIStyles.LabelStyle);
121138
headerRowRect.x += headerRowRect.width;
122-
GUI.Label(headerRowRect, "→ 先", SpringBoneGUIStyles.LabelStyle);
139+
GUI.Label(headerRowRect, Styles.labelDst, SpringBoneGUIStyles.LabelStyle);
123140
uiRect.y += uiRect.height;
124141

125142
const float ScrollbarWidth = 20f;

0 commit comments

Comments
 (0)