文字列テーブル は、ローカライズしたテキストをひとつ (または複数) の決まった場所にまとめます。次に他のアセットまたはコードから文字列テーブル内のエントリを参照し、ローカライズしたテキストを簡単に再利用できるようにします。
文字列テーブルを作成する
文字列テーブルは C++ で定義し、CSV ファイルで読み込むか、アセットとして作成します。
C++ で文字列テーブルを作成する
LOCTABLE ファミリーのマクロを使用すると、 C++ で文字列テーブルを作成できます。
マクロ | 説明 |
---|---|
LOCTABLE_NEW |
空の文字列テーブルのインスタンスを作成します。 |
LOCTABLE_FROMFILE_X |
文字列テーブルのインスタンスを作成し、指定された CSV ファイルに格納します。 _ENGINE バリアントを使用した場合、ファイルは Engine のコンテンツ ディレクトリを基準とし、_GAME バリアントを使用した場合、ファイルはプロジェクト コンテンツ ディレクトリを基準とします。 |
LOCTABLE_SETSTRING |
文字列テーブルにエントリを設定します。 |
LOCTABLE_SETMETA |
文字列テーブル内のエントリにオプションのメタデータを設定します。 |
例:
// C++ のみを使用して文字列テーブルを作成し、設定します
LOCTABLE_NEW("CodeStringTable","CodeStringTable");
LOCTABLE_SETSTRING("CodeStringTable","HelloWorld","Hello World!");
LOCTABLE_SETMETA("CodeStringTable","HelloWorld","Comment","This is a comment about hello world");
LOCTABLE_SETSTRING("CodeStringTable","GoodbyeWorld","Goodbye World!");
LOCTABLE_SETMETA("CodeStringTable","GoodbyeWorld","Comment","This is a comment about goodbye world");
CSV を使って文字列テーブルを作成する
CSV で定義された文字列テーブルは、LOCTABLE_FROMFILE_X マクロを使用してロードしたり、文字列テーブル アセットにインポート / エクスポートすることもできます。
例:
// CSV から文字列テーブルを作成し、設定します
LOCTABLE_FROMFILE_GAME("CSVStringTable","CSVStringTable","StringTableCSV/TestStrings.csv");
文字列テーブルに使用される CSV 形式には、「Key」と「SourceString」という必須の列があり、余分な列はすべて、文字列テーブル エントリのメタデータとして解析されます。
Key,SourceString,Comment
"HelloWorld","Hello World!","This is a comment about hello world"
"GoodbyeWorld","Goodbye World!","This is a comment about goodbye world"
CSV ファイルの引用符は、C スタイルのエスケープ (\") ではなく、二重引用符 (「」) を使用してエスケープされますが、文字列内の他の制御文字 (タブと改行を含む) は、C スタイルのエスケープを使用してエスケープする必要があります。
LOCTABLE_FROMFILE_X マクロを使用してロードされた CSV 文字列テーブルは、変更が監視されているので、ディスク上で変更されると (これは、Editor ビルド専用です) 自動的に再インポートされます。
CSV 文字列テーブルは自動的にステージングされません。 CSV 文字列テーブルを決まった場所のフォルダに配置してから、それらをプロジェクトの [Packaging] 設定の [Additional Non-Asset Directories to Package] に追加することをお勧めします。
文字列テーブル アセットを作成する
文字列テーブル アセットは、コンテンツ ブラウザ ([Add]>[Miscellaneous]>[String Table]) を使用して作成し、文字列テーブル エディタで管理できます。 現在、文字列テーブル エディタではメタデータを編集できませんが、CSV ファイルからインポートされたメタデータは保持されます。

文字列テーブル アセットはバイナリであるため、マージの競合が発生した場合に解決できません。 C++ や CSV よりも文字列テーブルのアセットを細分化して保存し、競合ドメインを最小限に抑えることを推奨しています。
文字列テーブルを参照する
文字列テーブルは、C++、INI ファイル、またはアセット内で参照することができます。
C++ で文字列テーブルを参照する
C++ では、LOCTABLE
マクロまたは static FText::FromStringTable
関数を使用して文字列テーブルを参照できます。 基本となるロジックは同じですが、マクロは入力しやすく、リテラル値のみを処理し、関数はリテラル引数と変数引数の両方を処理します。
INI ファイルで文字列テーブルを参照する
LOCTABLE
マクロ構文を使用して、INI ファイルの文字列テーブルを参照できます。
文字列テーブル アセットを参照する
文字列テーブルは、FText
プロパティを使用して参照できます。
ローカライズされたテキストをインラインで定義する代わりに、テキスト プロパティの横にある白い矢印をクリックして、そのプロパティ インスタンスを文字列テーブル エントリにリンクします。
文字列テーブルをリダイレクトする
可能な限り、文字列テーブルの名前変更や移動は避けてください。 ただし、文字列テーブルの名前を変更したり移動したりする必要がある場合は、テーブル全体をリダイレクトしたり、個々のキーをリダイレクトする方法があります。 これは、INI ファイルで行うか、文字列テーブル アセットをリダイレクトすることで実行できます。
INI ファイル内の文字列テーブルをリダイレクトする
INI ファイルを使用して、文字列テーブルをリダイレクトすることができます。 次の例では、文字列テーブル全体を別の文字列テーブルにリダイレクトします。
[Core.StringTable]
+StringTableRedirects=(OldStringTable="Foo",NewStringTable="Bar")
ある文字列テーブルのエントリを別の文字列テーブルのエントリにリダイレクトしたい場合は、次の例を使用してください。
[Core.StringTable]
+StringTableRedirects=(StringTable="Foo",OldKey="Bar",NewKey="Baz")
文字列テーブル アセットをリダイレクトする
文字列テーブルアセットを移動または名前変更すると、アセット リダイレクタが残ります。 これは、他のアセット リダイレクタと同様に処理され、実行されます。