字符串表

Windows
MacOS
Linux

字符串表 提供了一种方法将已本地化的文本集中到一个(或多个)已知位置,然后稳健地从其他资源或代码引用字符串表中的条目,从而能够轻松地重复使用已本地化的文本。

创建字符串表

字符串表可以在C++中定义,可以使用CSV文件加载,也可以作为资源创建。

在C++中创建字符串表

可以使用宏的LOCTABLE族系在C++中创建字符串表。

说明

LOCTABLE_NEW

创建一个空白字符串表实例。

LOCTABLE_FROMFILE_X

创建一个字符串表实例,并从给定的CSV文件填充。当使用_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字符串表将被检测是否发生更改,如果在磁盘上发生了更改,将自动重新导入(仅用于编辑器编译)。

CSV字符串表不会自动暂存。建议您将CSV字符串表放置在一个已知文件夹中,然后将它们添加到项目的 打包(Packaging) 设置中的 Additional Non-Asset Directories to Package

创建字符串表资源

字符串表可以使用内容浏览器(添加(Add)> 杂项(Miscellaneous)> 字符串表(String Table) 创建,并可以通过字符串表编辑器进行管理。字符串表编辑器目前不能编辑元数据,但从CSV文件导入的所有元数据都将保存。

StringTables-01.png

字符串表资源是二进制的,因此如果发生合并冲突,将无法解析。我们建议比使用C++或CSV时更为精细地保留字符串表资源,以最小化冲突域。

引用字符串表

您可以在C++、INI文件或资源中引用字符串表。

在C++中引用字符串表

在C++中,可以使用"LOCTABLE"宏或静态"FText::FromStringTable" 函数引用字符串表。基础逻辑是相同的,虽然宏更容易输入,但只处理文字值,而函数可以同时处理文字参数和变量参数。

在INI文件中引用字符串表

在INI文件中,可以使用"LOCTABLE"宏语法引用字符串表。

引用字符串表资源

可以使用"FText"属性引用字符串表。
StringTables-02.png

单击文本属性旁边的白色箭头,将该属性实例链接到字符串表条目,而不是内联定义已本地化的文本。
StringTables-03.png

重定向字符串表

我们建议尽量避免重命名或移动字符串表。但是,如果需要重命名或移动字符串表,有一种方法可以重定向整个表和各个键。您可以在INI文件中实现这一点,也可以通过重定向字符串表资源来实现。

在INI文件中重定向字符串表

可以使用INI文件重定向字符串表。以下示例将重定向整个字符串表指向另一个字符串表:

[Core.StringTable]
+StringTableRedirects=(OldStringTable="Foo",NewStringTable="Bar")

如果想要将一个字符串表中的一个条目重定向到另一个字符串表中的一个条目,请使用以下示例:

[Core.StringTable]
+StringTableRedirects=(StringTable="Foo",OldKey="Bar",NewKey="Baz")

重定向字符串表资源

移动或重命名字符串表资源将留下一个资源重定向器。它与任何其他资源重定向器一样进行处理和跟进。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback