Unityでゲームを作るとき、Localization(多言語対応)が必要になることがあります。
- 日本語・英語・中国語など、異なる言語でゲームを提供したい
- 言語ごとにUIテキストを変更したい
- スクリプトで動的に言語を切り替えたい
Unityには「Localization Package」という公式の多言語対応システムがあり、これを使えば翻訳データを一元管理し、スクリプトから簡単に言語を切り替えることができます。
この記事では、UnityのLocalization(多言語対応)の基本から、スクリプトでの切り替え、動的な言語変更、よくあるエラーの解決策 まで詳しく解説します!
この記事で学べること
- UnityのLocalization Packageを使った多言語対応の基本
- 言語ごとにテキストを管理する方法(翻訳データの作成)
- スクリプトで動的に言語を切り替える方法
- TextMeshProやUIテキストを多言語対応する方法
- よくあるエラーと解決策
※ 本項目を行う前にFont Asset Creatorで各言語のフォントを作成しましょう!
それでは、本題に入っていきましょう。
UnityのLocalization Packageの使い方
Localization Packageのインストールと対応言語の登録
Unityの公式パッケージ「Localization」を使うと、簡単に多言語対応が可能。
➡ 公式パッケージなので安心して使える
➡ 言語データを一元管理できるので、拡張性が高い
インストール手順
- [Window] → [Package Manager] を開く
- 「Packages」を「Unity Registry」に変更して「Localization」を検索してインストール
- [Edit] → [Project Settings] → [Localization] を開き、「Create」
- 「Locale Generatoor」に対応する言語を追加(例:Japanese、English)
- 特に理由がなければ、「Assets」フォルダ内に「Localization」フォルダを作成して保存

Localization Tablesの作成
・ 翻訳データを1つのファイルで管理できるので、管理が楽になる。
作成手順
- [Window] → [Asset Management] → [Localization Tables] を開く
- 「New Table Collection」を選択
- Type:「String Table Collection」、Name:「GameText」と入力し、「Create」を選択
- 「Add New Entry」を選択
- キーと各言語の内容を書く

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

UIテキストを多言語化(TextMeshPro対応)
※ Canvas、TextMeshproについてはこちらを参考にしてください。
Localized Stringの適用
・この設定だけで、自動的に言語ごとに適したテキストが表示される!
- HierarchyでTextMeshProを選択
- Inspectorで「Add Component」→ Localize String Eventを追加
- 「String Reference」にGameText(作成した翻訳データ)を設定
- 「Table Entry」で対応するキーを選択(例:menu_start)

スクリプトで動的に言語切り替え
スクリプトから言語を動的に変更する場合は、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を使えば、選択した言語を保存して次回起動時に適用可能