本地化
自动关联目录:本地化
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. 包体?→ 按需包含文化参考
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/d8a26422.html
更新于:2026年10月10日