公式マニュアルにスタートガイドがあるのでTextureとStringについてのローカライズを試す。
Quick Start Guide | Localization | 1.0.0-pre.9
- 検証環境
- Quick Start
- 0. Install
- 1. Create the Localization Settings
- 2. Create Locales
- 3. Choose a default Locale
- 4. Texture Localization: Create an Asset Table Collection
- 5. Texture Localization: Use the localized Asset
- 7. String Localization: Create a String Table Collection
- 8. String Localization: Use String Table Entries
- 補足
- 参考リンク
検証環境
- Unity 2019.4.25f1
- Addressables 1.18.11
- Localization 1.0.0-pre.9
Quick Start
0. Install
“Add package from git URL” を選択して、com.unity.localization
を入力してパッケージをインストールする。
1. Create the Localization Settings
Project Settings > Localization から "Create" をクリックし、Localization Settings.asset
を保存する。
2. Create Locales
"Locale Generator" をクリックすると、Locale Generator ウィンドウが表示される。
使用するロケールを選択して "Generate Locales" をクリックする。
ロケール毎に asset ファイルが生成される。
3. Choose a default Locale
ロケール判定が上手くできなかった場合に使われるデフォルトのロケールを選択する。
Locale Selector | Localization | 1.0.0-pre.9
4. Texture Localization: Create an Asset Table Collection
Window > Asset Management > Localization Tables でウィンドウを開く。
New Table Collection タブで、"Asset Table Collection" を選択して名前をつけて "Create" をクリックする。
<name> Shared Data.asset
と<name>.asset
と、ロケール毎にassetファイルが生成される。
Edit Table Collection タブで、"Add New Entry" をクリックしてキーとロケール毎のテクスチャを設定する。
5. Texture Localization: Use the localized Asset
Scene に追加した Raw Image のコンポーネントを右リクックして、"Localize" をクリックする。
Update Asset に Raw Image が設定された状態の Localize Texture Event
コンポーネントが追加される。
ローカライズに使用するキーを選択する。
テーブルの情報が読み込まれる。
Scene を実行しロケールを選択するとテクスチャが切り替わる。
Game ビューにプルダウンが表示されていない場合は、 Preferences > Localization > Locale Game View Menu。
7. String Localization: Create a String Table Collection
New Table Collection タブで、"String Table Collection" を選択して名前をつけて "Create" をクリックする。
Texture 同様に、<name> Shared Data.asset
と<name>.asset
と、ロケール毎にassetファイルが生成される。
Edit Table Collection タブで、"Add New Entry" をクリックしてキーとロケール毎の文字列を設定する。
Smart Strings という機能で文字列のフォーマットを使う場合は、"Smart" にチェックを付ける。
8. String Localization: Use String Table Entries
Scene に追加した Text のコンポーネントを右クリックして、"Localize" をクリックする。
Update String に Text が設定された状態の Localize String Event
コンポーネントが追加される。
ローカライズに使用するキーを選択する。
テーブルの情報が読み込まれる。
次のコンポーネントを作成して GameObject に追加し、Format Arguments のサイズを1にしてドラッグ&ドロップする。
public class Apples : MonoBehaviour { public int appleCount = 1; //もしくはプロパティ //public int appleCount { get; set; } = 1; }
Scene を実行しロケールを選択する文字列が切り替わる。
補足
Scripting
Scripting | Localization | 1.0.0-pre.9
独自のコンポーネントでローカライズの文字列を扱う場合は、LocalizedString
を持たせて Inspector で設定することで使用することもできる。
public class LocalizedStringWithEvents : MonoBehaviour { public LocalizedString myString; void OnEnable() { myString.StringChanged += UpdateString; } void UpdateString(string s) { // ローカライズ文字列で更新する処理 } ....
Format Arguments を使う場合。
myString.Arguments = new[] { apples };
myString.StringChanged += UpdateString;
マニュアルには、Locale を選択するドロップダウンのサンプルも記載がある。
public class LocaleDropdown : MonoBehaviour { Dropdown dropdown; IEnumerator Start() { dropdown = GetComponent<Dropdown>(); yield return LocalizationSettings.InitializationOperation; var options = new List<Dropdown.OptionData>(); int selected = 0; for (var i = 0; i < LocalizationSettings.AvailableLocales.Locales.Count; i++) { var locale = LocalizationSettings.AvailableLocales.Locales[i]; if (LocalizationSettings.SelectedLocale == locale) selected = i; options.Add(new Dropdown.OptionData(locale.name)); } dropdown.options = options; dropdown.value = selected; dropdown.onValueChanged.AddListener(LocaleSelected); } private void LocaleSelected(int index) { LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index]; } }
Smart String
Format Argumentsの指定
Localize String Event
を使う場合は、Format Argumentsにコンポーネントを選択する必要があるので、メンバ変数名かプロパティ名を使ってTableに定義する。
I have {appleCount:plural:an apple| {} apples}
public class Apples : MonoBehaviour { public int appleCount = 1; //もしくはプロパティ //public int appleCount { get; set; } = 1; }
1つのFormat Argumentsで複数のメンバ変数を参照することもできる。
I have {appleCount:plural:an apple| {} apples}. I have {bananaCount:plural:a banana| {} bananas}}.
Format Arguments が複数になる場合は、indexを指定する。
I have {appleCount:plural:an apple| {} apples}. I have {1:{penCount}:plural:a pen| {} pens}.
Formatters
plural
は複数形の書式。
シンタックスは次の通り。
{ Number : plural(lang) : singular | plural | more... }
Global Valiables
Global Variables | Localization | 1.0.0-pre.9
Assets > Create > Localization > Global Valiables Group からグループを作成する。
変数を追加する。
Localization Settings を開いて、String Database の Smart Fromat の Sources に Global Valiables Source を追加する。
作成したグループを設定する。
これで以下の書式で利用できるようになる。
私のフロートの値は {global.my-float} {global.my-string} グローバル変数を使用する方法。
スクリプトからグローバル変数を直接書き換える場合は以下のようにする。
Asset 自体の内容も変更されているので注意。
var source = LocalizationSettings.StringDatabase.SmartFormatter.GetSourceExtension<GlobalVariablesSource>(); var param = source["global"]["my-string"] as StringGlobalVariable; param.Value = "hogehoge";
Addressablesに関するあれこれ
- RemoteLoad にした場合、アプリ起動中にAssetを解放できないので再起動がほぼ必須
Unity - Localization の Addressables の挙動 - yotiky Tech Blog
Unity - Addressables (LocalLoad) で CRC チェックと Bundle Naming Mode の設定 - yotiky Tech Blog
[Unity] 多言語化対応パッケージ Localization のエラーを解決するために行ったこと - JoyPlotドキュメント
Addressables Integration | Localization | 1.0.0-pre.9
Bug - Localization and addressables compatibility is nightmare - Unity Forum