🌐

【Unity6】Localization で多言語に対応する方法

に公開

Unity公式から配布されている Localizationパッケージ を使用した多言語化対応について解説します!流れとしては

  • Localizationパッケージのインストール
  • Localization Settingsの作成
  • 対応言語の設定
  • 言語テーブルの作成
  • 言語テーブルから文字列を取得してログに表示してみる

です!

Localizationパッケージのインストール

  1. Unity Editor上で Window > Package Management > Package Manager を選択してPackage Managerを開く
  2. 左リストのUnity Registryから検索ボックスにLocalizationを入力。表示されたLocalizationを選択し、Installからインストールする

Localization Settingsの作成

  1. Unity Editor上で Edit > Project Settings... からProject Settingsを開く

  2. 左リストからLocalizationを選択し、Createをクリック

  3. Localization Settingsファイルを任意の場所に保存

対応言語の設定

  1. Add Localeをクリック

  2. 対応したい言語にチェックを入れ、Add Localesをクリック

  1. 任意の場所にロケールファイルを保存
  1. Project Locale Identifier でデフォルト言語を任意の言語に切り替え

言語テーブルの作成

ここまでで多言語化の準備が整ったので実際に対応言語ごとの文字列を用意していきます。

  1. Unity Editor上で Window > Asset Management > Localization Tables をクリック

  2. New Table Collection をクリック

  3. Name を任意の名称に変更し、Createをクリック

  4. 任意の場所にテーブルファイルを保存

  1. New Entryをクリックし、Keyに任意の文字列、それぞれの言語カラムに対応する文字列を入力

言語テーブルから文字列を取得してログに表示してみる

言語テーブルが作成できたのでスクリプト上で取得し、ログに表示させてみます。

  1. 任意の場所にTest.csファイルを作成し、下記をコピー
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;

public class Test : MonoBehaviour
{
    [SerializeField] private LocalizedString test;

    async void Start()
    {
        // 初期化
        await LocalizationSettings.InitializationOperation.Task;

        // 日本語を表示
        if (!TrySwitchSelectedLocale("ja"))
        {
            return;
        }
        var localizedName = await LogLocalizedTestAsync();
        Debug.Log(localizedName);

        // 英語を表示
        if (!TrySwitchSelectedLocale("en"))
        {
            return;
        }
        localizedName = await LogLocalizedTestAsync();
        Debug.Log(localizedName);
    }

    private bool TrySwitchSelectedLocale(string localeCode)
    {
        var locale = LocalizationSettings.AvailableLocales.GetLocale(localeCode);
        if (locale == null)
        {
            Debug.LogWarning($"{localeCode} locale not found in AvailableLocales.", this);
            return false;
        }

        LocalizationSettings.SelectedLocale = locale;
        return true;
    }

    private async Task<string> LogLocalizedTestAsync()
    {
        var handle = test.GetLocalizedStringAsync();
        var localizedName = await handle.Task;
        handle.Release();
        return localizedName;
    }
}
  1. UnityEditor上のHierarchyにTestという名称で空のGameObjectを作成

  2. 先程のTest.csをアタッチし、先程作成した言語テーブルのkeyを選択

  3. Playをクリックし、プロジェクトを起動

正しく設定できていれば下記のログが表示されます!ここまでで多言語対応完了です!お疲れ様でした!

おわりに

普段ゲーム開発周りの情報を発信しているのでよければフォローお願いします!

https://x.com/indgame0728/status/1950803286715470160

Discussion