Localizationパッケージを使って多言語対応をしよう!

海外展開を考えた時、英語や日本語の切り替え機能が必要になります。ここではUnityの公式パッケージであるLocalizationパッケージを使ってみたいと思います。

目次

Localizationパッケージでできること

正式導入されたLocalizationパッケージは、多言語切り替えを簡単にするだけでなく、テキストをあとから修正する場合にもプログラムを介さずに変更できるすぐれものです。

王道の多言語切替ッ!

まっさきに上げるものとしてやはり多言語切り替えができるということ!ゲームの設定画面などで、言語切替ができる機能はよく見かけると思います。あの機能を1から作るとなるとなかなか大変。

下図では「言語を設定してください」の日本語を、プルダウンで切り替えるだけで英語版の「Select your Language.」に切り替わります。

プログラム側でLocalizationパッケージを使っていれば、現在使用中の言語切替をしただけでさっと切り替えを行う実装も簡単に実現出来ます!

  • 多言語切り替え
  • 対応箇所の即時反映

ゲームによっては文字の定義場所として利用

専門用語なんかが多く存在するゲームの場合は、Localizationのテーブルに登録する文字を辞書代わりに使うことも可能です。ゲーム開発終盤で、ソースコードを変更せずに文字を置き換えることが可能だったりします。

Localizationパッケージの使い方

では早速使って見ましょう。今回の目標は文字の取り出しと、言語切替時に即反応するものを準備したいと思います。

Localizationパッケージのインポート

まずはパッケージをインポートします。この記事は2025年8月ごろの情報のため、バージョン更新によって多少変更がある場合があります。あらかじめご了承ください!

  • パッケージマネージャーを開く
    • Window>Package Manager
  • Localizationパッケージを見つけてインストール
    • 左側のタブニューからUnity Registoryを選択
    • 一覧からLocalizationを探し、選択
    • Installボタンを押してインポート
スライム

記事作成時点では1.5.7のバージョンでした。ミドルバージョンあたり(5のところ)が違うと、ちょっと違う部分が出てくるかも・・・

Locale(言語)の追加

やはりLocalizationというだけあって、最初にやるのはやはり言語の設定。今回は日本語と英語の切り替えを行いたいのでその2つを追加したいと思います。

  • Localizationフォルダを作成
    • Assets直下にLocalizationフォルダを作成
    • このあといくつかアセットが作成されるので、それをまとめる用。以降Localizationフォルダと呼びます
  • Localization Tablesを開く
    • Window>Asset Management>Localization Tables
  • Localization Settingsアセットを作成
    • 真ん中のCreateボタンを押してアセットを作成
    • 保存先はLocalizationフォルダを指定してください
  • Localeの追加
    • 左上のNew Table Collectionボタンを選択
    • 以下の設定でLocale Generator
      • Type:String Table Collection
      • Name:New Table
  • 言語の追加
    • 今回はEnglishとJapaneseを追加
    • 両方を選択出来たらAdd Localesボタンを押す
    • フォルダの選択はLocalizationフォルダを選択
  • テーブルデータの作成
    • 下図のようになっていることを確認
    • Nameには好きな文字列を追加してください(できるだけわかりやすく)
    • Createボタンを押してLocalizationフォルダを選択
  • 下図のような画面になれば成功!

サンプル用のテキストを追加する

今回はテスト的なものを追加しますが、対応した箇所に好きな文字を入力してください

  • 文字の追加
    • New Entryボタンを押す
      • Key:sample.key
      • English:Sample!!
      • Japanese:サンプル!!

Locale Selectorsによるデフォルトの言語を確認

このあと動かすと、日本語が設定されていると思います。英語がデフォルトっぽい設定が入っていますが、日本の方でUnityを動かしている人は、だいたい日本語になると思います。それは以下の設定が影響しているためです。

  • Project Settingsを開く
    • Edit>Project Settings
  • Localizationメニューを開く
    • 左側のタブ:Localization
  • Locale Selectors
    • 下図のような構成
    • System Locale Selectorがあることを確認

こちらのSystem Locale Selectorが優先して日本語が選択されるようになっています。

Specific Locale SelectorにEnglishが入っている場合、こちらをSystem Locale Selectorより上に設定することでデフォルトの設定が英語に設定されます。

ログにテキストを表示してみる!ソースコード編

ここまでで設定したテキストを実際に表示してみましょう。

  • 下記スクリプトを作成してください
    • スクリプト名:LocalizationTest
using UnityEngine;
using UnityEngine.Localization;

public class LocalizationTest : MonoBehaviour
{
    void Start()
    {
        LocalizedString testString = new LocalizedString
        {
            TableReference = "localization_table",
            TableEntryReference = "sample.key"
        };
        Debug.Log(testString.GetLocalizedString());
    }
}
  • シーン内のゲームオブジェクトに作成したスクリプトをアタッチ
  • ゲームを動かしてログが表示されるか確認
フェアリー

Localizationのテーブルに登録した文字が表示されたら成功!

チャレンジ!
Locale Selectorsを調整して、英語版の「Sample!!」を表示させてみましょう!

ログにテキストを表示してみる!インスペクター編

LocalizationStringはインスペクターで設定することも可能です。アセットバンドルなんかでの更新する場合は、こっちのほうが便利な場面が多いかも。

  • スクリプトを以下のように変更
using UnityEngine;
using UnityEngine.Localization;

public class LocalizationTest : MonoBehaviour
{
    public LocalizedString localizedString;
    void Start()
    {
        Debug.Log(localizedString.GetLocalizedString());
    }
}
  • インスペクターで設定を行う
    • Noneをせんたくして追加したsample.keyを選択する
  • 動かしてみて同様にログが出ることを確認

応用編!自動でテキストを変更してみよう!

ランタイム中に言語設定を切り替えて、自動でテキストが選択先の言語の文字に入れ替わる機能を作ってみましょう。今回はインスペクターで文字を指定するパターンでやってみますね。

スクリプト

今回はTextMeshProUGUIを自動で切り替える処理を作ってみます。今回は次のような機能を実装しています。

  • インスペクターでセット
    • 使用したいテキストのLocalization設定
    • 更新したいTextMeshProUGUI
  • 対象の文字が変更されたらUpdateTextメソッドが呼ばれる
    • 呼ばれた場合、引数に変更後の文字列が渡される
  • 言語切替機能
    • 1キーと2キーで言語切替
    • 1キー:使用可能な言語の先頭のインデックス(0番目)を設定する
      • Project Settings>Localization>Available Localesで整列している順番
    • 2キー:使用可能言語の中に「ja」のコードが指定された言語がある場合に採用される
      • ない場合は警告がログに表示されます
using UnityEngine;
using UnityEngine.Localization;
using TMPro;
using UnityEngine.Localization.Settings;

public class LocalizationTest : MonoBehaviour
{
    public LocalizedString localizedString;
    public TextMeshProUGUI textMeshPro;

    void OnEnable()
    {
        localizedString.StringChanged += UpdateText;
        UpdateText(localizedString.GetLocalizedString());
    }

    void OnDisable()
    {
        localizedString.StringChanged -= UpdateText;
    }

    void UpdateText(string newText)
    {
        textMeshPro.text = newText;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[0];
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            var locale = LocalizationSettings.AvailableLocales.Locales.Find(l => l.Identifier.Code == "ja");
            if (locale != null)
            {
                LocalizationSettings.SelectedLocale = locale;
            }
            else
            {
                Debug.LogWarning("Japanese locale not found.");
            }
        }
    }
}

動かしてみる!

スクリプトの準備が出来たら動作確認をしてみましょう。

  • 空のGameObjectにコンポーネントをアタッチ(同じスクリプトの場合そのまま)
    • LocalizedString:sample.keyなど英語、日本語が設定してあればなんでもOK
    • TestMeshPro:UIのTextMeshProUGUIをセットする
  • ゲームを動かして確認
    • 起動直後にデフォルトの言語になることを確認(したの動画では英語)
    • 2キーを押して日本語になることを確認
    • 1キーを押して英語になることを確認
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次