任意のタイミングでローカライズしたテキストやアセットを取得する

ページ更新日 :
ページ作成日 :

検証環境

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 にローカライズイベントを設定しているわけではないので実行したタイミングではテキストは変わりません。

ボタンをクリックすると日本語のテキストに切り替わります。これは現在日本語のロケールが選択されているためです。

試しに画面右上のロケールを変更してからボタンをクリックしてみてください。対象ロケールのテキストに変更されるはずです。