任意のタイミングでローカライズしたテキストやアセットを取得する
現在表示しているページは選択中の表示言語には対応しておりません。
検証環境
- Windows
-
- Windows 11
- Unity エディター
-
- 2021.3.12f1
- Input System (Unity Technologies)
-
- 1.4.4
- Localization (Unity Technologies)
-
- 1.3.2
この Tips の前提設定
この Tips の説明の前提として以下の設定を事前に行っています。
当 Tips のゴール
ボタンをクリックしたタイミングでローカライズテーブルから対象のテキストを読み込み画面に表示させます。
前提知識と準備
この Tips は以下のテキストのローカライズを前提として説明しています。 ただし全ては実施しませんのでここでは1から手順は掲載しますが、重複する内容については簡略化して説明していきます。
Localization パッケージのインストール
ここはこれまでと手順は同じです。
Localization の作成
ここもこれまでと同じなので画像だけ載せておきます。
ここでは「Scenes」のフォルダの中に「Localization」のフォルダを作成してその中に作成しています。
ロケールの作成
ここもこれまでと同じなので細かい手順は割愛します。 追加するロケールは「Japanese (ja)」「English (en)」「Spanish (es)」です。
先ほどの「Localization」フォルダを指定しています。
デフォルトのロケールは「Japanese (ja)」にしておきます。
テキストの登録
テーブル名は TextTable
としておきます。
Localization
フォルダの中に TextTable
フォルダを作成してそこを指定します。
テキストを登録します。今回はプログラムで取得することを目的としているのでとりあえずひとつ登録すればOKです。
UI の配置
テキストとボタンを配置し、ボタンをクリックしたら現在のロケールのテキストを表示するという処理にしたいと思います。
スクリプトの作成とアタッチ
スクリプトを作成します。名前は ButtonEvent
としておきます。
using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UI;
public class ButtonEvent : MonoBehaviour
{
[SerializeField] private Text Text;
public void OnClick()
{
// Localization から指定したテーブル名とキーからエントリーを取得します
var entry = LocalizationSettings.StringDatabase.GetTableEntry("TextTable", "Hello").Entry;
Text.text = entry.Value;
}
}
ボタンがクリックされたときの処理を入力します。
ここでやってることは一つで LocalizationSettings.StringDatabase.GetTableEntry
メソッドに Localization で作成したテーブル名とキーを指定することによって対象レコードのエントリーを取得することができます。
今回テキストでやっていますがアセットも LocalizationSettings.AssetDatabase
を使用すれば取得可能です。
エントリーを取得したら後は持っている値を取得するだけです。中身は選択中のロケールのテキストになっています。 今回同期処理で取得していますが、非同期用のメソッドも使うことができます。
スクリプトを EventSystem にアタッチします。テキストもセットしておきます。
ボタンにクリック処理を割り当てます。
実行して確認
設定が終わったら実行してみてください。 UI にローカライズイベントを設定しているわけではないので実行したタイミングではテキストは変わりません。
ボタンをクリックすると日本語のテキストに切り替わります。これは現在日本語のロケールが選択されているためです。
試しに画面右上のロケールを変更してからボタンをクリックしてみてください。対象ロケールのテキストに変更されるはずです。