中EN
概念页

本地化

Localization

更新于 2026-10-13 约 6 分钟UE5本地化国际化FTextICULocalization Dashboard

UE 的本地化以 FText 类型为中心,国际化(数字、日期、复数规则、文化回退)依赖 ICU 库。可本地化的文本由命名空间、键、源字符串三部分标识;本地化管线按目标 (Localization Target) 依次收集 (Gather) 到 manifest、翻译进各文化的 archive(通常经 PO 文件导出导入)、编译成运行时加载的 .locres。Localization Dashboard 是管理这条管线的推荐工具。

本地化与国际化

本地化与国际化(L10N 与 I18N)常被统称为「本地化」。UE 的本地化系统以 text 类型(FText)为中心,国际化支持使用 ICU (International Components for Unicode) 库。两者是分开的,但没有相应的国际化支持,就无法在运行时做本地化。ICU 负责获取平台当前文化、文化的优先级回退、按文化格式化数字(含百分比、货币)和日期时间(含时区),以及格式化文本时的复数规则。(Localization Overview for Unreal Engine)

文化名由连字符分隔的三部分组成(IETF 语言标签),例如 "zh"。查找本地化数据时从最具体到最不具体依次处理;为了覆盖面最广,应使用最不具体但有效的文化代码,再用文化重映射把多个地区映射过去(官方的例子是把拉美西语国家映射到 "es-419")。(Localization Overview for Unreal Engine)

文本字面量

可本地化文本由三部分组成:命名空间 (Namespace) 和 键 (Key) 构成其身份,源字符串 (Source String) 是翻译依据,并用来检测翻译是否过期。C++ 中用 NSLOCTEXT(指定命名空间、键、源字符串)或 LOCTEXT(命名空间由 LOCTEXT_NAMESPACE 定义)。编辑器中的文本属性会自动生成键,也可以手动指定。(Text Localization in Unreal Engine)FText 与 FString/FName 的区别见 容器与字符串。

文本历史 (Text History) 支持按文化正确地重建文本,是实时切换文化和创建文化无关源的关键。格式化有 FText::Format、FText::FormatOrdered(按序号)、FText::FormatNamed(按名称);内置的参数修饰符支持复数、性别和韩文后置词。复数形式按 CLDR 规则支持 zero/one/two/few/many/other,分基数("There are 4 cats")和序数("1st/2nd"),写法如 "{NumCats} {NumCats}|plural(one=cat,other=cats)",反引号用来转义花括号和竖线。(Text Localization in Unreal Engine)

本地化目标与管线

本地化目标的性质:从指定的一组来源收集文本,存入 manifest 文件,在各文化的 archive 文件中翻译,再编译成各文化的本地化资源文件。项目可以只用一个目标,也可以拆成多个(例如基础游戏一个、各资料片各一个);编辑器有自己独立的目标,这样编辑器的本地化数据不会随游戏发布。(Localization Overview for Unreal Engine)

文件内容(官方)
{Target}.manifest自定义 JSON,保存从代码和资产中收集到的全部文本
{Culture}/{Target}.archive自定义 JSON,保存该文化的翻译
{Culture}/{Target}.po导出给翻译用的 PO 文件,翻译后再导入 archive
{Culture}/{Target}.locres编译后的运行时资源

官方推荐的工作流是编辑导出的 PO 文件再导入。(Localization Overview for Unreal Engine)

下图是 Dashboard 中的四步循环:

flowchart LR
  A["源码 LOCTEXT / 资产文本属性"] -->|Gather| B[manifest]
  B --> C["各文化 archive"]
  C -->|Export| D["PO 文件 交给译者"]
  D -->|Import| C
  C -->|Compile| E["locres 运行时加载"]

这个循环可以随新翻译到来或新文本加入而反复执行。

Localization Dashboard 与翻译编辑器

Localization Dashboard 管理本地化目标;虽然仍标为实验性,但官方说它很稳定,Epic 内部所有项目都在用。它默认创建一个 Game 目标,一般项目只需要这一个;在 Gather Text 设置中指定代码和资产的位置,在 Cultures 设置中指定要支持的语言和母语文化,然后用工具栏执行 Gather、Export、Import、Compile。这些操作每次都会生成 Config/Localization 下的 ini,除非要自动化管线,否则不必提交版本控制。Dashboard 与本地化 commandlet 的配置格式完全不同,由 Dashboard 生成 commandlet 版本。内置的翻译编辑器 (Translation Editor) 功能简单、更新不频繁(例如没有翻译记忆),官方建议只用来做零星修正。(Localization Tools in Unreal Engine)

取舍与常见坑

  • 玩家可见的文本一律用 FText;FString 和 FName 不会被收集(据官方「以 text 类型为中心」的设计归纳)。
  • 文化代码用最不具体的有效代码,再用重映射,比为每个地区单独翻译更省事。
  • 包里会记录可收集文本的位置(FPackageFileSummary 中的 GatherableTextData 字段,见 烘焙、打包与 Zen 加载器),这也是资产文本能被 Gather 到的基础(结构关系是归纳)。
  • 字体需要覆盖目标语言的字形,见 文本渲染(一般知识)。
  1. Localization Overview for Unreal Engine UE 5.8 文档
  2. Text Localization in Unreal Engine UE 5.8 文档
  3. Localization Tools in Unreal Engine UE 5.8 文档

相关页面

游戏开发 · UE5容器与字符串Containers & StringsUE 不用 STL,而用自带的值类型容器:TArray(连续数组)、TMap/TMultiMap(哈希映射)和 TSet(哈希集合),都假定元素可按字节直接搬移。字符串分三种:FName 存索引、比较便宜,FText 用于可本地化的界面文本,FString 可以修改但开销最大。选错类型的代价主要是性能和本地化。游戏开发 · UE5UMG、Slate 与 Common UIUMG, Slate & Common UISlate 是 UE 平台无关的 C++ 声明式 UI 框架(编辑器即用它构建),UMG 是在其之上的可视化控件蓝图层(UE 5.8 API:UWidget 是所有暴露给 UObject 的被包装 Slate 控件的基类),Common UI 插件再在 UMG 之上补充多层界面、输入路由、手柄导航、平台按键图标和样式资产。官方 UMG 最佳实践强调事件驱动更新而非绑定/Tick、固定分辨率与 DPI 制作、用 Scale Box 而非 Render Transform 做永久缩放。图形学文本渲染Text Rendering文本中一个像素的变化就可能把 "l" 变成 "1",因此字形渲染格外讲究。主要路线有:按字号预生成字形位图纹理(配合微调和子像素渲染)、有符号距离场纹理(可在三维表面任意缩放旋转)、以及在 GPU 上直接求值字形曲线。游戏开发 · UE5烘焙、打包与 Zen 加载器Cooking, Packaging & Zen Loader打包是一组构建操作:编译 (Build) → 烘焙 (Cook,把资产转成目标平台格式) → 暂存 (Stage) → 打包 (Package) → 可选的部署 (Deploy)。UE5 的运行时加载器 Zen Loader 会在暂存阶段离线算好包与对象的依赖图,并把数据装进 .utoc/.ucas 容器(IoStore),由 I/O 分发器以很低的 CPU 开销定位数据块;.pak 只用于不常访问的零散文件。游戏开发 · UE5配置文件系统Configuration FilesUE 的 .ini 配置按类别(Engine、Game、Input……)分层加载:从引擎 Base 文件到项目 Default 文件,再到平台文件和用户文件,后加载的同名键覆盖先加载的。数组可以用 +、-、! 等运算符跨层增删。UCLASS(config=X) 加上 UPROPERTY(Config) 可以让类的默认值从 ini 自动读取;命令行 -ini: 可以临时覆盖。游戏开发游戏本地化与 UnicodeGame Localization & Unicode本地化(国际化,I18N)是把软件改编为其他语言版本,最好从第一天起规划并贯穿每个开发步骤。GEA 介绍了 Unicode 与 UTF-32/UTF-8/UTF-16/UCS-2 编码、char 与 wchart、Windows 的字符串 API 约定、主机上的选择,字符串之外的本地化问题,以及核心基础设施——字符串数据库 + 按 ID 查找当前语言字符串的运行时函数,并以 Naughty Dog 的本地化工具为例。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原