Unreal Engineには結構昔から充実したローカライズ用の機能が用意されております。ゲームコンテンツ作成後でも後から翻訳を導入できるようになっており、とても便利ですがハマりポイントがいくつかあり、最近使ってみて色々ハマったのでまとめておきます。なお今回扱うのはテキストローカライズ機能のみで、アセットやボイスなどのローカライズ機能については扱いません。
ローカライズ機能そのものについては公式ドキュメントや有志のブログ記事などが既にありますので、そちらを参考にしてください。
公式ドキュメント
docs.unrealengine.com
導入記事
qiita.com
また今回解説する内容の一部は既に過去に開催された「UE4 Localization Deep Dive」でも詳しく解説されている部分もありますので、より詳しい情報が欲しい場合は以下のスライドなどを一読することを推奨します。
過去の事例ではほとんどがUE4のものとなっていますが、UE5になってもほとんど変わっておりませんので、そのまま使えると思います。なお今回の検証環境はUE5.2.1を利用しています。
ネイティブ言語の扱いに注意する
ローカライゼーション機能にはネイティブ言語というものが存在しており、この言語をベースにして他言語への翻訳を行うことが最低限のルールとなっています。デフォルトの状態ではネイティブ言語は"English(英語)"が設定されており、後から変更は可能ですが、ネイティブ言語を変更すると翻訳情報を全て失ってしまうので、注意が必要です。
以下はローカライゼーションダッシュボードのカルチャー設定の画面です。後から他言語を追加することも簡単に可能ですが、ネイティブ言語の変更は基本的に不可能なので注意してください。
注意が必要なのは、ゲーム中にUMGのTextウィジェットなどで使うテキストを必ずネイティブ言語にしておくことです。"English"をネイティブにしていた場合、下記のような日本語テキストを混ぜるのはNGです。
ネイティブ言語が英語の場合、上記は問題ですので下記が正解ですね。
もし日本語テキストで入力した場合にはネイティブ言語も"Japanese(日本語)"でローカライズ機能を使う必要があります。後から英語などの別言語に翻訳することになりますので、やりやすいと思うワークフローでネイティブ言語を設定してください。
PIE以外の環境で確認する
最もハマりやすいポイントのひとつです。PIE(Play in Editor)での環境はネイティブ言語での表示しか上手くできないようです。モード別にローカライズの翻訳変更が確認できるのは以下のようになっています。
"モバイルプレビュー"と"スタンドアローンゲーム"のみで可能です。クックを行い動作するクイック起動もありますが、こちらも動作しません。"モバイルプレビュー"は基本的に翻訳のために用意されたものではありませんが、スタンドアローンゲームと同様にプロセスがエディターとは別に起動するために動作するようです。なので、PIE(エディター上でのプレイ)以外の環境で翻訳したテキストは確認するようにしましょう。
もしPIEでの確認が必要な場合には、"エディタの環境設定"にある"ゲームのプレビュー言語"を確認したい言語に設定しておく必要があります。この言語を設定しておくことで、PIE中もその言語のローカライズを確認することが可能です。
エディター言語設定に注意する
Unreal Engineではゲームだけでなく、エディターやエンジンも同様のローカライズ機能を使っており、ゲーム側で言語設定を切り替えると、エディター側もその設定が適用されます。ゲーム側で言語設定を切り替える際には以下のノードが利用可能です。
- Set Current Language → テキストやアセット部分のみ切り替え
- Set Current Locale → 時刻や数値や日付のフォーマット部分のみ切り替え
- Set Current Language and Locale → 上記2つを同時に切り替え
- Set Current Culture → 上記全てを含み、アセットグループカルチャもクリア
引数Cultureには"en"や"ja"などの言語文字列を指定します。様々な種類がありますが、複雑な理由がない限りゲーム側で切り替えるのなら"Set Current Culture"ノードで十分なはずです。そしてこのノードを呼び出すとエディター側もその言語に切り替わってしまいます。
ここで注意が必要です。ローカライゼーションダッシュボード上でネイティブ言語以外の環境が設定されたエディターを使って翻訳の設定を行うと上手く翻訳されないことが発生したりします。下記は日本語エディター環境で"Fortnite"を"フォートナイト"に翻訳していますが、上手く反映されていません。
こういう時は焦らずにエディターを一度再起動しましょう。ネイティブ言語にエディターを切り替えた状態で再度翻訳作業をし直し、テキストのコンパイルなどを行います。この状態で再度確認します。
うまく翻訳されていればOKです。エディターの言語を変えて、コンパイルしても翻訳がなぜか上手くいかない際は、直接ウィジェット上のテキストを一度打ち直して、最初から翻訳をやり直すのが最も確実な方法です。
パッケージング時の設定に注意する
これも最後にハマりやすいポイントです。翻訳作業を完了し、スタンドアローンゲームでの確認を終えたので、あとはパッケージングして確認!というタイミングで発生します。何も考えずにパッケージングしてしまうとさっきまで動いていたはずのローカライズがなぜか動作しません。
ここで最後に確認が必要となるのが、パッケージング設定です。"Project Setting(プロジェクト設定)"から"Packaging(パッケージ化)"内の"Localizations to Package(パッケージ化するローカライゼーション)"を確認し、"Show Localized(ローカライズされた項目を表示)"を確認します。
ここで自分でローカライズした言語全てにチェックをつけておきます。ネイティブ言語にはチェックがついているはずなので、それ以外をチェックしましょう。この状態でパッケージングすれば、翻訳された言語に設定された際にうまく翻訳が表示されるはずです!
まとめ
Unreal Engineのローカライズ機能は非常に優秀なのですが、自分で触ってみた際に思っていた以上にトラブルになったポイントが多かったので今回とめておきました。おそらく同じような問題に出会う人は今後も発生するかと思いますので、もしお困りの場合は今回の情報を参考にしてローカライズを行ってみてください。
個人的にはゲームを遊んでもらいたいのであれば、日本国内以外で遊んでもらう可能性があるなら英語翻訳はデフォルトで用意しておいた方がよいと思います。