HelloWorld 与 Unity 配合指南

把 HelloWorld 当作 Unity 的练手项目,最实际的做法是:先建立一个用 TextMeshPro 渲染的简单界面,把所有可见文本抽出到可管理的字符串表(JSON/CSV 或 Unity Localization 的 String Table),准备好字体集和伪本地化测试,然后把翻译交给先机器后人工的流程,接入 CI 做自动化提取与回归测试,最后在真机上验证排版、换行和 RTL 等细节。

HelloWorld 与 Unity 配合指南

先说为什么要这样做

很多人把 HelloWorld 当作写代码的第一步,结果把本地化当成最后才想起的事。问题一堆:字符串散落在代码里、占位符搞丢、字体不支持某些语言、测试不充分导致发版后一堆显示问题。把本地化从一开始就设计进项目,会省下无数返工的时间。

准备工作:你需要的东西

  • Unity 版本:建议使用 LTS 版本,本文以 Unity 2020.3+ 或 2021.3+ 为参考。
  • TextMeshPro:更好的文本渲染、富文本支持以及字形处理。
  • Unity Localization Package(可选):官方的本地化工具,支持 String Tables、Locales。
  • 翻译文件格式:JSON/CSV/XLIFF 等,方便与翻译流程对接。
  • 字体集合:目标语言所需的字体(最好采用分层回退策略)。
  • 版本控制与 CI:Git、自动化脚本用于抽取与回写语言包。

一步步把 HelloWorld 做成可本地化的样例

1. 建立项目与 UI

创建一个空的 Unity 项目,导入 TextMeshPro。做一个简单场景,画布里放一个文本控件和一个语言切换下拉菜单。把文本控件的内容不要直接写死,稍后我们会把它换成从字符串表读取。

2. 把字符串外置化

不要在代码里写 “Hello World”。有两种简单方法:

  • 使用 Unity Localization:创建一个 String Table,为每个语言创建条目并给出 Key(例如 greeting_hello)。
  • 自定义 JSON/CSV:建立一个 key-value 文件,按语言分文件(en.json、zh.json 等)。

Key 的命名建议带上下文,例如 greeting.main 或 ui.start_button_text,这样翻译人员不用猜上下文。

3. 在代码里按 Key 获取文本

写一个小模块负责加载当前语言的字符串表并提供接口,例如 GetText(string key, params object[] args)。在 UI 里只使用这个接口来设置文本。注意占位符和富文本要在设计时统一格式({0} 或 {username})。

4. 字体与排版准备

为每种语言准备至少一个主字体和一个回退字体。*中文、日文、韩文* 推荐使用支持 CJK 的字体集合;*阿拉伯语、希伯来语* 要处理 RTL(右向左)并使用合适的字形连写支持。TextMeshPro 支持自定义字体资产,可以把需要的字符集打包成字体资产。

5. 伪本地化先行

在翻译前做伪本地化(pseudolocalization),把文本扩展、替换字符来模拟长度增长和非拉丁字母。例如把 “Hello” 伪本地化成 “[¡¡Ĥéļļōöö¡¡]”,可以快速发现 UI 溢出、截断或占位符被破坏的问题。

6. 测试和真机验证

每次语言切换后,跑一遍常用场景,检查:

  • 换行与截断
  • 占位符是否被正确替换
  • 富文本标签是否破坏
  • RTL 方向是否正常

与翻译流程(AI + 人工)衔接的最佳实践

把工程交给翻译时,要尽量减少译者的猜测工作,这样翻译质量才高。

  • 导出格式:推荐同时提供 JSON/CSV 和一份带上下文的表格(截图 + 上下文说明)。
  • 占位符规范:在导出时把占位符标准化({0} / {name}),并在备注里说明替换规则。
  • 上下文与截图:常见短句需要上下文,比如 “Start” 可能是开始游戏也可能是开始下载,备注或截图能显著提升翻译准确度。
  • 机器翻译初稿 + 人工校对:先用神经 MT(如通用翻译引擎)生成草稿,再由专业译员按品牌语气修订,结合术语库保持一致性。
  • 术语表与风格指南:建立品牌术语表(Brand Glossary)和目标语言的风格指南,方便译员把握语调。

常见坑与对策

  • 字体缺字:发现方块或空白,说明字体缺少字符。对策:补充字体或拆分字体用 Addressables 按需加载。
  • 占位符被错误翻译:把占位符包上不可翻译标记或在导出时另列说明。
  • 文本过长破坏布局:设定最大字符长度或使用自适应布局;伪本地化用来模拟长度变化。
  • RTL 未生效:确认文本渲染支持 bidi(双向)和字形连写,必要时使用专门的 RTL 工具包。
  • 富文本标签被翻译或损坏:在翻译导出中把富文本标签作为不可翻译文本,或提供带标记的示例。

文件格式比较

格式 优点 缺点
CSV 简单,易于用表格编辑,方便非技术人员操作 对复杂嵌套或富文本支持弱,编码要注意 UTF-8
JSON 结构化,便于在代码中直接解析,支持嵌套上下文 不直观给非技术人员查看,需要工具支持
XLIFF 行业标准,支持上下文、注释、翻译记忆库集成 复杂度高,需要专门工具和流程

把本地化流程加入 CI/CD

把字符串抽取、伪本地化、自动化检测放进 CI 流水线可以大幅降低回归风险。一个推荐的工作流:

  • 每次提交时,自动抽取新增/修改的 strings 到一个临时文件。
  • 触发伪本地化测试,跑 UI 测试脚本(截图比对关键界面)。
  • 如果伪本地化通过,再推送给 MT 服务生成初稿并通知译员。
  • 译员完成校对后,自动把翻译合并回仓库并触发构建。

性能与包体积考量

多语言资源会增加包体积。几条可行策略:

  • 按地区分包:把语言包做成可下载的 DLC(Addressables / Asset Bundles),首次安装只含默认语言。
  • 按需加载字体:大型 CJK 字体可以分块或使用动态字体生成(注意版权)。
  • 压缩字符串表:把重复文本去重,使用索引表降低冗余。

测试清单(别忘了这些)

  • 伪本地化覆盖所有 UI 路径;
  • 设备与分辨率多轮测试;
  • 占位符、富文本、单词断行;
  • 输入法测试(如果有用户输入);
  • 术语一致性检查与品牌语气核对;
  • 自动化 UI 截图与人工抽检结合。

实务小贴士(写着写着想到的)

  • 最好一开始就定义 key 命名规则,后面扩展不会乱成一锅粥。
  • 给译员足够的上下文,少发“孤立短句”;截图真的很管用。
  • 把一些常见句型做成模板(例如“你有 {n} 条未读消息”),译员可以按模板翻译,结构一致性高。
  • 别把所有语言都放到首包里,亚洲语言和中东语言对字体、布局的要求差异很大,分发会更灵活。

大概就这些——好像还想说很多细节,像是怎么做翻译记忆库、怎样处理法律文本的本地化条款,或者如何用 Addressables 在运行时切换字体,但先把上述流程跑通,你的 HelloWorld 就能变得专业起来。以后再慢慢把这些补上,边做边改,才是真正实战的样子。