Unity開発

【Unity】Localizationの使い方完全ガイド|多言語(日本語)対応・言語切り替え・翻訳データ管理・TextMeshPro対応まで解説

使用環境

・Unity Editor:2021.3.18f1

この記事で学べること

  • UnityのLocalization Packageを使った多言語対応の基本
  • 言語ごとにテキストを管理する方法(翻訳データの作成)
  • スクリプトで動的に言語を切り替える方法
  • TextMeshProやUIテキストを多言語対応する方法
  • よくあるエラーと解決策

本項目を行う前にFont Asset Creatorで各言語のフォントを作成しましょう!

Localization Packageとは?

ピッグダディ

今日は「UnityのLocalization(多言語対応)」について学んでいこう。
日本語・英語・中国語など、言語ごとにUIを切り替えられるようにする仕組みだよ。

ピッグボーイ

あ、それやりたかったです!でも言語を切り替える方法とか、
テキストをどう管理するのかが分からなくて、手が止まってました。

ピッグガール

私はTextMeshProを使ってるんですけど、
言語を変えても文字が切り替わらなくて困りました。
フォントの設定も必要なんですよね?

ピッグダディ

そうそう、そこがポイントだね。
この記事では、Localization Packageの使い方から翻訳データの作成、スクリプトでの言語切り替え、TextMeshProとの連携、さらにエラーの対策までしっかり解説していくよ。

UnityのLocalization Packageの使い方

Localization Packageのインストールと対応言語の登録

Unityの公式パッケージ「Localization」を使うと、簡単に多言語対応が可能。

➡ 公式パッケージなので安心して使える
➡ 言語データを一元管理できるので、拡張性が高い

インストール手順

  1. [Window] → [Package Manager] を開く
  2. 「Packages」を「Unity Registry」に変更して「Localization」を検索してインストール
  3. [Edit] → [Project Settings] → [Localization] を開き、「Create」
  4. 「Locale Generatoor」に対応する言語を追加(例:Japanese、English)
  5. 特に理由がなければ、「Assets」フォルダ内に「Localization」フォルダを作成して保存
Unity Localization Packageの設定の画像

Localization Tablesの作成

翻訳データを1つのファイルで管理できるので、管理が楽になる。

作成手順

  1. [Window] → [Asset Management] → [Localization Tables] を開く
  2. 「New Table Collection」を選択
  3. Type:「String Table Collection」、Name:「GameText」と入力し、「Create」を選択
  4. 「Add New Entry」を選択
  5. キーと各言語の内容を書く
Unity Localization Tablesの設定の画像

CSVのインポート、エクスポート

Localization TableはCSVとしてエクスポートして、翻訳した後にインポートをするとデータが読み込まれる便利な機能です。

Unity Localization CSVのインポート、エクスポートの画像

UIテキストを多言語化(TextMeshPro対応)

※ Canvas、TextMeshproについてはこちらを参考にしてください。

Localized Stringの適用

・この設定だけで、自動的に言語ごとに適したテキストが表示される!

  1. HierarchyでTextMeshProを選択
  2. Inspectorで「Add Component」→ Localize String Eventを追加
  3. 「String Reference」にGameText(作成した翻訳データ)を設定
  4. 「Table Entry」で対応するキーを選択(例:menu_start)
Unity Localization Stringの設定の画像

スクリプトで動的に言語切り替え

スクリプトから言語を動的に変更する場合は、LocalizationSettingsを使用。

➡ languageIndexを変更するだけで、簡単に言語を切り替え可能!
➡ ボタンや設定メニューに組み込めば、プレイヤーが言語を選択できる!

using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;

public class LanguageManager : MonoBehaviour
{
    public void ChangeLanguage(int languageIndex)
    {
        // 指定されたインデックスの言語に変更
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[languageIndex];
        // デバッグログで変更を確認(Unity コンソールに出力)
        Debug.Log("言語を変更: " + LocalizationSettings.SelectedLocale.LocaleName);
    }
}

多言語対応(日本語対応)を保存する設定

言語設定を保存(PlayerPrefsを使用)

ゲームの言語設定を保存し、次回起動時に反映させる。

ゲームを再起動しても、前回選択した言語が保持される!

using UnityEngine;
using UnityEngine.Localization.Settings;

public class LanguageSaver : MonoBehaviour
{
    // 言語の保存キー(PlayerPrefs に保存する際のキー名)
    private const string LanguageKey = "SelectedLanguage";

    /// <summary>
    /// ゲーム起動時に保存された言語を適用する
    /// </summary>
    void Start()
    {
        // PlayerPrefs から保存された言語インデックスを取得(デフォルトは 0)
        int savedLanguage = PlayerPrefs.GetInt(LanguageKey, 0);

        // 保存された言語を適用
        ChangeLanguage(savedLanguage);
    }

    /// <summary>
    /// 言語を変更し、PlayerPrefs に保存する
    /// </summary>
    /// <param name="languageIndex">選択する言語のインデックス</param>
    public void ChangeLanguage(int languageIndex)
    {
        // 選択されたインデックスの言語に変更
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[languageIndex];

        // PlayerPrefs に言語インデックスを保存
        PlayerPrefs.SetInt(LanguageKey, languageIndex);
        PlayerPrefs.Save(); // 即時保存
    }
}

よくあるエラーと解決策

言語を変更してもUIに反映されない

・ LocalizationSettings.SelectedLocaleを正しく設定しているか確認
・ 変更後にRefreshStringTable()を実行する

LocalizationSettings.StringDatabase.RefreshStringTable("GameText");

翻訳データが読み込まれない

・ 翻訳データ(String Table)に該当するキーがあるか確認
・ String Tableに追加後、RefreshStringTable()を実行

TextMeshProのテキストが言語変更後に更新されない

・ LocalizedStringEventを使用しているか確認
・ スクリプトでRefreshStringTable()を手動で呼び出す

まとめ

・ Localization Packageを使えば、簡単に多言語対応が可能
・ String Tableを使って翻訳データを一元管理できる
・ TextMeshProのLocalizedStringEventを使えば、UIテキストを自動的に翻訳
・ スクリプトでLocalizationSettings.SelectedLocaleを変更すれば、言語を切り替え可能
・ PlayerPrefsを使えば、選択した言語を保存して次回起動時に適用可能