概要
テキストデータを扱う場合、ローカライズなども考慮する必要があります。
DataTableで作成することも考えましたが、ローカライズを想定したStringTableというものがあるのでそちらを試してみたいと思います。
合わせてLocalizationDashboardも試してみたいと思います。
動作環境
UnrealEngine 5.4.4
実装
データの作成
コンテンツドロワーの "+追加" から "その他" → "ストリングテーブル" を選択し、新規に作成します。
下部のキー、ソースストリングに入力してデータを追加します。
追加した後でキーの変更はできないようです。
ソースストリングの変更は可能です。
CSVへエクスポート
csvにエクスポートしてみます。
Key,SourceString EnemyName001,BUSHWACKER EnemyName000,ROUGE
CSVからのインポート
csvからインポートしてみます。
試しに以下の様に1行追加してみます。
Key,SourceString EnemyName001,BUSHWACKER EnemyName000,ROUGE EnemyName002,HIGHWAYMAN
CSVからインポートを選択します。
先ほどエクスポートしたファイルを選択してインポートします。
追加された行がインポートされていることが確認できます。
C++で参照する方法
この段階で文字列の取得を試してみます。
void Hoge() { FText LocalizedText; // StringTable名とキーを指定してテキストを取得. LocalizedText = LOCTABLE("/Game/Game/StringTable/ST_Enemy.ST_Enemy", "EnemyName000"); // 取得したテキストをログに表示. UE_LOG(LogTemp, Log, TEXT("Localized Text: %s"), *LocalizedText.ToString()); }
とりあえず文字列が取得できて、ログに出力されていることが確認できます。
ただ、指定したテーブルを読み込んではいないので、どこかで読み込まれていると思われます。
マクロの実装を確認したところ、引数でEStringTableLoadingPolicy::FindOrLoadが指定されているので、他で読み込まれていない場合は参照した段階でテーブルの読み込みが行われていると思われます。
別途、テーブルの読み込みについては確認が必要になりそうです。
LocalizationDashboard
ローカライゼーションダッシュボードはカルチャーを追加することで、そのカルチャー毎の翻訳データを作成、管理するための機能です。
"ツール" → "ローカライゼーションダッシュボード" から開くことができます。
"パッケージから収集" にチェックを入れ、Include Path Wildcards で参照するStringTableのパスを指定します。
新規カルチャーの追加を行います。
参考資料によると使用しない言語をデフォルトにしておいた方が無難とのことなので、とりあえず英語(アイルランド)を選択してみます。
ついでに日本語も追加しておきます。
この段階でテキストの収集を実行します。
これでデフォルト言語のワード数が更新されます。
追加、更新があった場合はこの操作でデフォルト言語の更新を行う必要があるようです。
個別の言語を編集する場合はそれぞれの言語の編集を押します。
試しに日本語の翻訳を編集してみます。
未翻訳のタブで編集したい項目のTranslation側をクリックします。
翻訳(日本語)を入力します。
再度、テキストを収集を実行することで翻訳データが反映されます。
エディタ上で確認する場合はエディタの環境設定の一般の地域&言語のゲームのプレビュー言語を日本語にすることで日本語を確認することができます。
同じキーで参照して日本語訳が適用されていることが確認できました。
要検討
ゲーム側からはテーブルや言語に関係なく、Keyで文字列が取得できれば良いはずだが、テーブルとKeyを対で指定する必要があるがどのように実装するのが良さそうか?
LocalizationDashboardはテクスチャやサウンドなどのアセットも切り替えることができるとのこと。
ゲームによってはテキストとボイスそれぞれで言語切り替えが行えるタイトルなどもあるが、その場合はどのように対応すれば良いかなどまだ調査/検証が必要そうではある。