本地化

自动关联目录:本地化

1. 定位

本地化在 UE 里是"用对类型 + 管好字形"两件事:类型用错,后期改不动;字形没管好,中文项目会卡。

一句话定位:UI 上所有显示给玩家的文本必须是 FText——这不是风格建议,是能不能本地化的分界线。

2. 三种字符串(再强调一次)

类型用途能否本地化
FText显示给玩家的文本能
FString拼接、编辑、IO不能
FName标识与 Key不能

详见 容器字符串与内存。

常见错误:用 FString 显示文本——后期要做多语言时全部要改。

3. 写法

FText T = NSLOCTEXT("MyNamespace", "HealthKey", "Health");
FText T2 = FText::Format(NSLOCTEXT("NS", "Hp", "HP: {0}"), FText::AsNumber(Health));
宏说明
NSLOCTEXT(Namespace, Key, Source)带命名空间
LOCTEXT(Key, Source)使用默认命名空间
FText::Format带参数的格式化(参数也要是 FText)

4. 字形缓存(中文项目的实际成本)

中文字形数量远多于拉丁字母,因此:

问题说明
字形缓存默认不够导致运行时动态生成字形 → 卡顿
包体字形集要打包
首次显示新字时卡顿需要预加载常用字

中文项目必须预先配置常用字符集,避免运行时动态生成字形造成的卡顿。这是中文项目特有的、且很容易被忽略的一项成本。

5. 本地化流程

步骤说明
收集引擎的本地化收集工具扫描 FText
翻译导出/导入
文化变体按语言切换资源
预览编辑器内切换预览文化
打包只包含需要的文化

6. 代价与权衡

设计收益代价什么时候不该用
全用 FText可本地化写法略繁琐从不做——这是必须的
预先配置字形集避免运行时卡顿包体增大中文项目必做
运行时动态生成字形包体小卡顿中文项目不该
打包全部文化切换方便包体大按需包含
硬编码字符串快无法本地化除调试外都不该

7. 踩坑与排查

坑现象怎么验证
用 FString 显示文本无法翻译全局搜索
中文字形没预配置首次显示卡检查字形集配置
硬编码字符串漏翻译用本地化收集工具检查
FText::Format 参数用 FString不翻译参数也用 FText
打包了全部文化包体大按需包含
数字/日期格式各文化不同用引擎的格式化

8. 排查顺序

1. 显示文本是否是 FText?
2. 中文是否卡顿?→ 字形集预配置
3. 有没有漏翻译?→ 本地化收集工具
4. 包体?→ 按需包含文化

参考