【Unreal Engine】ローカライズ入門:同じメニューを日本語と英語で表示する

作成: 2026-07-20最終更新: 2026-09-07

UE5のLocalization Dashboardで、開始ボタンを日本語と英語へ切り替えます。TextとString、翻訳の収集・入力・Compile、言語設定の保存を順に確認。フォントとパッケージ設定も整え、配布するゲームでの答え合わせまで進めます。

「ゲームをはじめる」を「Start Game」に変えたい。ボタンが1つなら書き換えれば済みますが、会話やアイテム説明まで増えると、言語ごとに画面を作り直すのは大変です。

UE5では、同じTextに言語ごとの訳を用意し、選んだ言語で表示 できます。その準備をする道具がLocalization Dashboardです。文字を集める作業はUEに任せ、訳文は別の一覧で入力します。

同じタイトル画面の文字を日本語から英語へ切り替えるイメージ

この記事でわかること

  • 翻訳する表示文字をText型で用意する
  • 日本語の原文を収集し、英訳をゲームが読める形にする
  • 選択欄で言語を切り替え、次の起動にも設定を残す
  • 文字化けや翻訳漏れを、パッケージ版まで確かめる

題材は、開始ボタンと言語選択がある小さなメニューです。BlueprintとUMGの基本操作を使います。ローカライズ は、言語や地域に合わせてゲームの表示などを整えること。今回は、その入口として日本語と英語のテキストを扱います。

Sponsored

TextとString:訳を持たせる文字を分ける

Blueprintで文字を扱うときは、TextとStringの使い分けが大切です。

今回の使い道
Text(C++ではFText)「ゲームをはじめる」のように、言語に合わせて変える表示
String(C++ではFString)言語コードのen・jaなど、処理に渡す文字

Textには、どの原文に対する訳なのかを結び付ける情報 を持たせられます。UMGのText Blockへ原文を入力し、そのTextを翻訳対象として収集するのが、今回の作り方です。

翻訳可能なTextには原文と訳を結び付けられる。実行時に作ったStringにはその対応がない

Textにしただけで英訳が生まれるわけではありません。後で原文を収集し、「ゲームをはじめる」に「Start Game」という訳を入力します。Textにも翻訳しない設定があるため、Text型で持つことと、訳が用意されていることは別 です。

一方、実行時にStringで「所持金:」と数値をつなぎ、最後にTextへ変換しても、翻訳との対応は自動では作られません。数値を含む文は、後半のFormat Textで組み立てます。プレイヤー名など、翻訳せずそのまま見せたい文字にはStringからの変換を使えます。

準備:翻訳するメニューを作る

Third PersonのBlueprintプロジェクトを使います。コンテンツブラウザのContent直下に UI フォルダを作り、その中へ「User Interface → Widget Blueprint」で WBP_LanguageMenu を作ります。親はUser Widgetです。

DesignerでCanvas Panelをルートに置き、その子にVertical Boxを置きます。Vertical BoxのCanvasスロットは中央アンカー、Alignment=(0.5, 0.5)、Position=(0, 0)、Size=(480, 260)を目安にします。

Vertical Boxの中へ、上から次の3つを並べます。各スロットのPaddingを8程度にすると、文字の間に余白ができます。

部品名前設定
Text BlockText_MenuTitleTextに「メニュー」、Font Size=32
Button、その子にText BlockButton_Start、Text_StartTextに「ゲームをはじめる」、Font Size=28
Combo Box (String)Combo_LanguageIs Variableを有効。Default Optionsに「日本語」と「English」。Font Size=24
タイトル・開始ボタン・言語選択を縦に並べたWidgetの構成

Text BlockのText欄へ直接入力し、Textの詳細を開ける場合は「Localizable」を有効にします。今回はText Bindingを作りません。Combo_LanguageのSelected Optionは空欄にし、後で現在の言語から設定します。

言語選択だけがStringなのは、「日本語」「English」を、どの言語でもこのまま表示する ためです。英語表示の画面でも、自分の読める言語名から戻せます。開始ボタンの文字は翻訳しますが、この2項目は翻訳しません。

WidgetのClass DefaultsでIs Focusableを有効にします。これは、後で入力の受け取り先としてこのWidgetを指定するための設定です。コンパイル・保存したら、現在のレベルも L_LanguageTest という名前で保存します。Level Blueprintに次を作ります。

  1. Event BeginPlayからCreate Widget(Class=WBP_LanguageMenu)へつなぐ。Owning PlayerにはGet Player Controller(Player Index=0)を渡す。
  2. Create WidgetのReturn ValueをAdd to ViewportのTargetへ渡し、白い線もつなぐ。
  3. 続けてSet Input Mode UI Onlyを呼ぶ。Player Controllerは同じGet Player Controller、In Widget to FocusはCreate WidgetのReturn Value。
  4. 同じPlayer ControllerをTargetに、Set Show Mouse Cursorをtrueにする。
Widgetを生成し、Return Valueを表示先へ渡す接続

表示のあと、入力の向き先も切り替えます。

表示の続きから、UIへの入力とマウスカーソルを設定する接続

図のAは、前の図から続く白い線の目印です。ノードとして作る必要はありません。Get Player Controllerを複数置く場合も、Player Index=0で同じプレイヤーを指定します。

これでメニューをクリックできます。開始ボタンからゲームを始める処理は、この実践には追加しません。画面の出し方を詳しく確認したい場合は、UMGの記事も参照してください。

Dashboard:集めて、訳して、使える形にする

「Tools → Localization Dashboard」を開きます。翻訳は次の3段階で用意します。

Gatherで原文を集め、Translateで訳を入力し、Compileでゲーム用データに変換する
操作何をするか
Gather:収集指定したアセットから、翻訳する原文を集める
Translate:翻訳原文に対応する訳文を入力する
Compile:変換入力した訳を、ゲームが読み込む.locresファイルにする

1. Gameターゲットと言語を設定する

左側のGameターゲットを選びます。ない場合はGame Targetを追加し、名前を Game にします。ターゲット は、まとめて収集・翻訳する文章のグループです。今回は、この1つへメニューの文章を集めます。

項目今回の設定
Loading PolicyGame
CulturesJapanese(ja)とEnglish(en)を追加
Native CultureJapanese(ja)を選ぶ

Culture(カルチャー) は、言語や地域を表す設定です。今回はjaが日本語、enが英語。Native Cultureは「原文を書く言語」なので、日本語で作ったこのメニューではjaにします。Loading PolicyのGameは、ゲーム実行時にこの翻訳を読み込む指定です。

2. 収集する場所を決める

Gather Textの設定で「Gather from Packages」を有効にします。ここでいうPackagesは、Widgetなどのアセットファイルです。配布用のexeを探す設定ではありません。

  • Include Path Wildcardsへ Content/UI/* を追加する。
  • File ExtensionsにWidgetの .uasset が対象として含まれることを確認する。既定の .umap も残して構いません。
  • Exclude Path Wildcardsで、Content/UIが除外されていないことを確認する。
GameターゲットでContent/UIのWidgetを収集し、jaを原文、enを翻訳先にする

Content/UI/* は、プロジェクトのContent/UI以下を探す指定です。末尾の * は、その場所にあるファイル名などをまとめて対象にする印です。Widgetを別のフォルダへ置いた場合は、そちらも含めます。会話のData Tableなどへ広げるときも、原文を置いた場所を追加します。

3. 2つの原文を集め、英訳を入力する

WidgetとレベルをSave Allしてから「Gather Text」を実行し、処理が成功したことを確認します。Englishの行の鉛筆アイコンなど、「Edit Translations」を開きます。

翻訳エディタのUntranslatedなどの一覧で原文を探し、次の訳を入力して保存します。

日本語の原文Englishの訳
メニューMenu
ゲームをはじめるStart Game

ここで、この2文が一覧にあることを確かめてください。 見つからなければ翻訳の前に、Widgetの保存先・収集範囲・TextのLocalizableを見直します。単語数の合計はプロジェクトによって変わるので、件数より実際の原文で確認します。

Dashboardへ戻り「Compile Text」を実行します。ここまで済むと、ゲームが使う英訳が用意できました。新しい文章を足したら保存→Gather→訳の入力→Compileを繰り返します。訳だけを直した場合も、保存後のCompileが必要です。

Sponsored

実践:選んだ言語へ切り替える

Englishを選ぶと、同じメニューの「ゲームをはじめる」が「Start Game」へ変わります。別の英語用Widgetを作る必要はありません。

日本語とEnglishの選択で、同じメニューのタイトルと開始ボタンが切り替わる

言語を変えるノード

使うのは Set Current Culture です。CultureへStringの en または ja を渡します。言語に加えて数値や日付の表し方も変えるノードですが、このメニューでは日本語と英語の切り替えに使います。

Save to Configをtrueにすると、選択をユーザー設定へ保存できます。ゲームの起動時に読み戻せるため、今回は言語専用のSave Gameを作りません。

Return ValueのBooleanは、設定できたかを表します。trueでも、未入力の英訳が作られるわけではありません。 画面に訳が出るかは別に確かめます。

選択イベントをつなぐ

WBP_LanguageMenuにBooleanの bSyncingSelection を作り、初期値をfalseにします。これは後で選択欄を自動で合わせる間、変更イベントから言語の切り替えへ進ませないための印です。

DesignerでCombo_Languageを選び、DetailsのEventsからOn Selection Changedを追加します。白い出力をBranchへ、ConditionをbSyncingSelectionへつなぎます。Trueは何もせず終了。FalseからSwitch on Stringへ進めます。

SwitchのSelectionへ、イベントのSelected Itemを渡します。Switchを選んだDetailsのPin Namesへ「日本語」「English」を追加し、その名前の白い出力を用意します。Defaultは未接続で構いません。

同期中でなければ、Selected ItemをSwitch on Stringで判定する

日本語の出力からSet Current Culture(Culture=ja)、Englishから別のSet Current Culture(Culture=en)へつなぎます。どちらもSave to Config=trueです。入力欄に二重引用符は付けず、jaやenだけを入れます。

それぞれの白い出力からBranchへ進み、ConditionにそのノードのReturn Valueを渡します。Trueは終了。FalseではPrint Stringで「言語設定を確認してください」と表示します。失敗時に選択欄を元へ戻す処理は、次の同期関数を使います。

選んだ言語コードをSet Current Cultureへ渡し、失敗したら表示と選択欄を戻す

再起動後も、選択欄を現在の言語に合わせる

英語の設定が保存されているのに、選択欄だけ「日本語」では戸惑います。メニューを開いたときは、現在の言語を読んで選択欄を合わせる ようにします。

WBP_LanguageMenuに関数 SyncLanguageSelection を作ります。入力・出力なし、Pureは無効です。

  1. 入口からSet bSyncingSelection=trueへつなぐ。
  2. Get Current LanguageのString出力をStarts WithのSource Stringへ渡す。In Prefixはenにする。
  3. そのBooleanをSelect StringのPick Aへ渡す。A=English、B=日本語とする。
  4. 白い線をSet Selected Option(Target=Combo_Language)へ進め、OptionへSelect Stringの出力を渡す。
  5. 最後にSet bSyncingSelection=falseへつなぐ。
現在の言語から選択欄を合わせる間だけ、変更イベントを止める

Get Current Language・Starts With・Select Stringは値を返すノードで、白い線はつなぎません。Starts Withは「先頭がその文字か」を調べます。en-USなどの地域付き英語もEnglishへ合わせ、それ以外は今回の原文言語である日本語へ合わせます。この対応は、jaとenだけを用意した実践用です。

WidgetのEvent ConstructからSyncLanguageSelection(Target=Self)を呼びます。Selfは、この処理を書いているWidget自身です。先ほどのSet Current Cultureが失敗した枝でも、Print Stringの後にこの関数を呼びます。

Set Selected Optionによって選択変更イベントが起きても、同期中は最初のBranchで止まります。選択欄を表示に合わせる処理で、保存済みの言語を上書きしない ための仕組みです。

フォントと文字の収まりを確かめる

「Start Game」は読めるのに、日本語が になることがあります。これは訳文の有無とは別の問題で、使用しているフォントに必要な グリフ(文字の字形) がない場合に起きます。

UEには、文字に応じて別のフォントを使う仕組みもあります。Robotoという名前だけで必ず日本語が出ないと決めず、実際に使うFontとその代替設定を確認します。配布するUIでは、日本語を含むFontを明示しておくと確認しやすくなります。

訳文があっても字形がなければ四角になる。日本語を描けるフォントで表示する

日本語の字形を含み、ゲームで使用できるTTFまたはOTFフォントを用意します。コンテンツブラウザへインポートし、Font FaceとFontを作る確認では作成を選びます。

Font Faceは字形データ、FontはUIに指定するためのアセット です。Text_MenuTitleとText_Startの「Appearance → Font」で作成したFontを選び、Regularなど使用する書体も指定します。Combo_LanguageのFontにも同じものを設定し、「日本語」の項目を読めるようにします。Font Faceしか作っていない場合は、「User Interface → Font」を作り、そのDefault Font FamilyへFont Faceを割り当てます。

英語がボタンからはみ出す場合は、文字を小さくする前に幅やPaddingを見直します。説明文なら、幅を決めたうえでAuto Wrap Textを使うと折り返せます。「英語は必ず長い」と決めず、両言語の実際の文で、欠けや改行を確認 します。

Sponsored

確認:Standaloneからパッケージ版へ

全アセットをコンパイル・保存し、DashboardのCompile Textも済ませます。Playメニューで Standalone Game を選び、別ウィンドウでメニューを開きます。

エディタ内のPIEには翻訳プレビューがあり、実行時の言語設定と完全には同じではありません。今回の切り替えと保存の確認にはStandaloneを使い、最後に配布用のパッケージでも試します。

操作期待する結果
日本語を選ぶメニュー/ゲームをはじめる
Englishを選ぶMenu/Start Game
日本語へ戻す元の日本語が読める。四角や文字欠けがない
Englishを選び、終了して再起動英語で開き、選択欄もEnglish

エディタのPreview Game Languageや起動引数で言語を指定していると、再起動時の結果へ影響します。保存の確認では、テスト用の言語固定を外して起動 してください。

配布物に、翻訳と対応言語のデータを含める

「Project Settings → Packaging」で、次を確認します。検索欄を使うか、詳細項目を展開すると見つけやすくなります。

項目今回の設定・役割
Localizations to Packagejaとen。収録する翻訳を選ぶ
Internationalization SupportEFIGSCJK。日本語と英語を含む、言語処理用のデータを入れる
Build ConfigurationDevelopment。確認用のビルド

翻訳の文章と、言語を扱うためのデータは別 なので、両方を含めます。L_LanguageTestをGame Default Mapに設定し、必要ならパッケージ対象のマップ一覧にも追加します。

翻訳データと言語対応データをパッケージへ含め、exeで日英表示を確かめる

パッケージングの記事に沿ってWindows向けにビルドし、できたexeを起動します。先ほどの4項目をもう一度確かめてください。翻訳を修正した後は、Compile Textを済ませてからパッケージも作り直します。

起動する言語だけを指定したい場合は、exeのショートカットのリンク先で、引用符で囲まれたexeのパスの後ろに半角スペースと -culture=en を付けます。日本語なら -culture=ja です。これは起動時の表示を調べるための指定で、保存確認のときは外します。

変わらない場所を順に調べる

症状確認するところ
原文が翻訳一覧にないSave All、Content/UIの収集指定、除外、Localizable
一部だけ日本語その原文の英訳、変更後のCompile、Stringから作っていないか
全体が日本語のまま選択イベント、Cultureのen、Loading Policy=Game、Compile
Set Current Cultureがfalseコードの誤字、パッケージのInternationalization Support
日本語が四角Text BlockとCombo BoxのFont、必要な字形、パッケージへの収録
再起動すると元へ戻るSave to Config、起動時の言語固定、別の初期化処理による上書き
exeだけ翻訳が出ないLocalizations to Package、翻訳のCompile、再パッケージ

おまけ:数値を混ぜた文も翻訳する

「所持金:100」のような表示では、文と数値を Format Text で組み合わせます。{Gold} のような印を、値を入れる場所として残す方法です。この印をプレースホルダーと呼びます。

原文のFormat英訳のFormat
所持金:{Gold}Gold: {Gold}
同じGoldの値100を、原文と英訳それぞれの文へ埋め込む

WBP_LanguageMenuのVertical BoxへText Blockを足して Text_Gold と名付け、Is Variableを有効にします。先ほどの日本語を描けるFontも指定し、収まらなければVertical Boxの高さを広げます。ConstructでSyncLanguageSelectionを呼んだ後、SetText(Target=Text_Gold)へつなぎます。In TextにはFormat Textの出力を渡します。

Format欄へ 所持金:{Gold} と直接入力するとGoldピンが現れます。Make Literal IntのValueを100にし、その出力をGoldへ渡します。保存→Gatherでこの原文を集め、英訳 Gold: {Gold} を入力し、Compileします。{Gold} は訳さず、同じ名前を残してください。

Standaloneで切り替えると、所持金:100とGold: 100を確認できます。Format Textの結果はTextのままSetTextへ渡し、途中でStringに変換しません。数値がゲーム中に増えたときは、新しい値でFormat Textを作り直してSetTextします。

この形なら、訳文の中で数値の置き場所が変わっても対応できます。複数形などの言語別ルールもUEで扱えますが、まずはこの1文を切り替え、文章と値を分ける感覚をつかむと進めやすくなります。

翻訳を人へ渡す場合は、DashboardからPOファイルを書き出せます。POは原文と訳文をやり取りする形式 です。訳が戻ったら取り込み、内容を確認してCompileします。原文を後から直した場合も、訳が古い内容のままになっていないか確認してください。

メニューで一周できたら、会話文やアイテム説明へ対象を広げられます。「表示する文章を用意する」「訳を持たせる」「ゲームで確かめる」という手順は同じです。

まとめ

  • 訳を持たせる文字はText型、内部で使う文字はStringと分ける
  • Dashboardは「集める → 訳す → 使える形にする」の3工程
  • 選んだ言語は保存して、次の起動でも合わせる
  • 文字化けと収まりは、パッケージ版まで確かめる

書くときの問いかけは、「この文字は画面に出るか」 です。出るならTextにしておきます。

数値を混ぜた文の扱いは本記事のおまけに、設定を残す仕組みは 設定メニュー にあります。

参考:Localization ToolsText LocalizationCultureとプレビューフォントの作成

Unreal Engine このセクションのノート98