Localization Checker 快速入门

本页目录
  1. 要求
  2. 流程
  3. 先在 Demo 上试一遍
  4. 1. 打开 Demo
  5. 2. 打开窗口
  6. 3. 加上翻译表
  7. 4. 选要查什么,然后扫描
  8. 5. 看总览
  9. 6. 在场景里找到问题
  10. 7. 把结果交给别人
  11. 8. 进 Play 巡检 Demo
  12. 用在自己的工程上
  13. 告诉插件文字在哪
  14. 变量样本
  15. 怎么读“源 → 译”
  16. Play 里的巡检
  17. 设置
  18. 巡检栏
  19. 看巡检的页
  20. 以巡检为准
  21. 在 Device Simulator 里查手机
  22. 没成功时看这里
  23. 支持

Localization Checker 帮助你在发布前检查翻译造成的界面问题,包括文字超出边界、文字重叠、字体缺字、占位符或富文本标签损坏,以及未接入本地化的文字。你可以在编辑模式中选择语言和分辨率进行扫描,也可以进入 Play 模式,检查游戏实际显示的界面。

本指南先用约十五分钟带你完成 Demo 检查,再介绍如何接入自己的工程和使用 Play 巡检。每项检查的判定规则见 Manual-Checks.zh-Hans.md;对工程状态的影响、使用前提和已知限制见 Manual-Safety.zh-Hans.md。

要求

  • Unity 2022.3 LTS 及以上版本(含 Unity 6),或团结引擎 2022.3。
  • 支持 TextMeshPro 和旧版 UI Text。使用 TextMeshPro 时,先通过 Window > TextMeshPro > Import TMP Essential Resources 导入必备资源。
  • UI Toolkit(UIDocument)的文字检查需要 Unity 6。
  • 可选:Unity Localization 1.5.2 及以上、2.0 以下,或 I2 Localization。插件可自动识别这些系统;CSV、Excel、JSON、XLIFF、PO 翻译文件无需安装它们也能使用。

插件只在编辑器中运行,不加入游戏构建。编辑模式扫描主要在隐藏预览场景的副本上测量,不保存源场景、Prefab 或资产。选中结果时的 Scene 临时预览会短暂替换原物体上的文字;Play 巡检则通过游戏的本地化系统切换语言。三者的影响不同,详见手册(下)。

流程

编辑模式:扫描
  ① 添加翻译来源;Unity Localization 和 I2 可自动识别
  ② 选择要检查的语言和源语言
  ③ 选择场景、物体、Prefab 或 Prefab 文件夹
  ④ ▶ 扫描
  │   在副本上应用各语言译文,按各分辨率排版和测量
  ├─ 总览:点击语言 × 检查的计数,查看对应问题
  └─ 问题清单:选中一行
       ├─ 在 Scene 中定位,或打开并排预览
       ├─ 导出 HTML / CSV,交给翻译或界面负责人
       └─ 修改后重新扫描,比较新出现和不再报告的问题

Play 模式:巡检(可选)
  ⑤ 在游戏中打开一页,回到插件窗口点击“检查本页所有语言(F8)”
       → 通过游戏切换语言,检查显示内容并截图
       → 若游戏提供伪语言,最后检查文字拼接和未本地化内容
  └─ 退出 Play 后查看结果;满足匹配条件的扫描问题标为“以巡检为准”

先在 Demo 上试一遍

1. 打开 Demo

打开 Assets/Fastzhuzhu/LocalizationChecker/Demo/Scenes/MainMenu.unity,再将 QuestPanel.unity、Settings.unity 和 Inventory.unity 拖入 Hierarchy,保持四个场景同时加载。MainMenu 和 QuestPanel 使用 TextMeshPro,Settings 使用旧版 UI Text,Inventory 使用 UI Toolkit(仅 Unity 6 支持检查)。

Demo 的文本组件中填写的是 menu.start 这类 key,译文保存在 Demo/Data/DemoStrings.csv,共 16 种语言。源语言为英文。德语(de)和日语(ja)中包含特意设置的问题,供你熟悉各类结果。

2. 打开窗口

选择 Window > ★ Localization Checker > Open Localization Checker。

品牌栏:logo · Localization Checker · 版本号 · 作者署名
工具栏:▶ 扫描 · 需要你做的事(如有)· ⚙ 设置 · 界面语言 · ⋮ 菜单
页签:  总览 · 问题清单 · 代码和数据
总览:  扫描设置清单和检查结果
底部:  摘要和提示

首次打开时界面为英文,点击工具栏的语言按钮可切换为中文。总览 顶部的 扫描之前 清单依次列出 翻译来源、要查的语言、源语言、范围、扫描 和 巡检(可选)。蓝色行表示下一步需要操作的位置。其他选项位于 ⚙ 设置 抽屉中的 绑定、测量、忽略清单 和 巡检 分组。

3. 加上翻译表

展开 翻译来源。在 工程里找到 N 个像翻译表的文件(还没加进来) 下,双击 DemoStrings.csv,或选中文件后点击 添加选中的。插件会根据表头将 key 设为 key 列,并识别 16 个语言列。然后启用 文本框里写的是这张表的 key。

文件下方应显示 读到 40 个 key · en, zh-Hans, …。如果显示 读不了,请按后面的原因处理。添加自己的翻译表时,若建议列表中没有该文件,可点击 添加文件,再点击 选择…。

4. 选要查什么,然后扫描

  • 要查的语言:勾选 de 和 ja。点击 用建议的 会勾选全部 15 种目标语言,扫描耗时也会增加。
  • 源语言:选择 en。
  • 范围:选择 打开的场景。
  • 分辨率:在 扫描 行保留 1920x1080。以后可通过 添加预设… 加入手机、Steam Deck 等尺寸。

点击 ▶ 扫描,进度条会显示当前步骤。点击取消后,扫描会在当前步骤结束时停止;如果缺少必要设置,插件会展开需要补齐的清单行,不会开始扫描。

5. 看总览

底部摘要按 严重、警告、提示 统计问题。这些等级表示处理优先级,需要结合详情和实际界面确认影响。

总览矩阵每行对应一种语言,每列对应一类检查:爆框、缺字、占位符、标签、漏翻译。格子的颜色取该组结果中的最高严重程度;短横表示未检查,悬停可查看原因。点击数字即可打开对应问题。

Demo 中可以看到以下示例:

  • de:退出按钮的“Spiel beenden”超出边界;副标题被省略号截断;quest.greeting 中的 {playerName} 被改名;quest.reward 的颜色标签未闭合;settings.reset 出现乱码 zurücksetzen。
  • ja:Lato 字体不含日文字形,日文结果中会出现缺字;settings.fullscreen 仍是 TODO。
  • (不分语言):“BETA”和版本号属于硬编码文字。

矩阵下方还有 Canvas 或 Prefab 的问题热点、各字体的 语言覆盖,以及 扫描的缺字(按字体)。点击 复制为 Font Asset Creator 字符串,可将缺失字符粘贴到 TextMeshPro 的 Font Asset Creator。

6. 在场景里找到问题

打开 问题清单,选中 de 下 MainMenu/QuitButton/Label 的 文字撑爆:

  • Unity 会选中对应物体,Scene 视图临时显示德语并标出边界。选择其他行或离开插件窗口后,原文恢复。
  • 详情 末尾会列出插件在副本上尝试过的调整。例如,若显示 修复建议:字号降到 27 也放不下;允许换行放不下,可考虑缩短译文或加宽按钮。
  • 点击 并排预览,可查看这张 Canvas 的 en、de、ja 版本;当前文字用红框标出。
  • 热力图 在 Scene 视图中标出符合条件的问题物体,不绘制仅供参考的问题。Hierarchy 中的彩色方块可用于快速定位。

修改一处后再次点击 ▶ 扫描。和上一次扫描比 会统计 新出现 和 不再报 的问题;不再报告也可能是被忽略或本次未测量,需要核对原因。

7. 把结果交给别人

在“列出 N 行”右侧打开 导出 菜单:

  • 导出 HTML…:生成可离线打开的单个文件,支持筛选和搜索,适合发送给其他人。报告中的 在 Unity 里选中 会复制一条定位标记;保持插件窗口打开并切回 Unity,即可定位物体。
  • 导出 CSV…:将当前清单中的问题导出为 UTF-8 CSV。先点击总览中的某个计数,即可仅导出该组结果,例如德语的爆框问题。

并排预览窗口中的 导出图… 可保存 PNG。请将报告和图片保存在 Assets、Packages 及包目录之外,避免 Unity 将其作为工程资产导入。

8. 进 Play 巡检 Demo

  1. 在 巡检(可选) 行点击 用建议的,将 Demo 的 DemoLocalization 声明为语言切换器。如果工程中的 Unity Localization 已包含所选语言,清单可能不会建议 Demo 切换器;此时在 ⚙ 设置 › 巡检 中,将 脚本 设为 Demo/Scripts/DemoLocalization.cs,切换语言的方法 设为 SetLanguage,读当前语言的方法 设为 GetLanguage。
  2. 在 ⚙ 设置 › 巡检 › 伪语言 中填写 qps-ploc,保留默认括号 [ 和 ]。Demo 会将每条英文替换为带重音的字母并加上括号,例如 [Šţáŕţ]。
  3. 将 Game 视图设为 1920x1080,把插件窗口放在 Game 视图旁边,避免放在同一组页签中。
  4. 进入 Play 模式,停留在主菜单。在插件窗口点击 检查本页所有语言(F8)。巡检会依次切换到 de、ja 和伪语言,检查每种语言并截图,最后恢复原语言。
  5. 在 Game 视图中依次打开 Start、Inventory、Settings 等界面。每打开一页,先点击插件窗口使其获得焦点,再按 F8;也可以直接点击 检查本页所有语言(F8)。检查期间保持当前页面不变。
  6. 在 总览 中查看各页的语言结果和 打开截图。伪语言 行在 漏翻译 列列出拼接或未本地化文字:任务页 Accept 上方将“Accept”和“Daily Quest”拼接,德语显示为语序不自然的“Annehmen Tägliche Quest?”,报为 拼接的文字;“BETA”、版本号和语言下拉框中的代码报为 运行时写死的文字。Unity 6 中还包括物品栏重量和构建号。
  7. 退出 Play。已完成的页面结果继续保留;若检查尚未完成,当前页会被丢弃,之前完成的页不受影响。启用域重载(Unity 默认)时,进入 Play 会清除扫描结果,退出后窗口会自动重新扫描。满足匹配条件的扫描结果会显示 以巡检为准,例如退出按钮的德语爆框。

用在自己的工程上

告诉插件文字在哪

工程使用的来源设置方法
Unity Localization自动识别 LocalizeStringEvent 和 GameObjectLocalizer 的 key;测量时也应用 GameObjectLocalizer 的逐语言字体和数值设置。
I2 Localization自动识别 Localize 组件绑定的 term。
CSV、Excel、JSON、XLIFF 或 PO在 翻译文件(CSV、Excel、JSON、XLIFF、PO) 中添加文件。若文本组件填写的是 key,启用 文本框里写的是这张表的 key。
工程自有本地化组件在 ⚙ 设置 › 绑定 › 声明的 key 字段 中选择脚本及保存 key 的字符串字段。
需要手动关联的文字选中一条问题,点击 指定 key…。

将 源语言 设为最初编写内容的语言,供译文对照使用。如果文本组件中填写的是正文而非 key,插件也会用源语言内容查找对应条目。

变量样本

{playerName} 等占位符在运行时才会被实际值替换,实际值可能明显更长。在 测量 分组的 变量样本 中,填写游戏可能使用的最长值,例如 {playerName} = Commander Aurelia Vanthorne。爆框检查会使用替换后的文字,适合检查按钮、名牌等固定尺寸区域。

结果详情中的 按变量样本测 表示使用了样本;含没换成样本的占位符,按原样测 表示部分占位符缺少样本。

怎么读“源 → 译”

占位符或标签问题会在 详情 中显示源文片段、箭头和译文片段;短横表示该侧没有对应内容。

  • {playerName} → {spielerName}:译文修改了占位符名称。
  • </color> → <color=#FFD54F>:译文的颜色标签没有正确闭合。

如果详情包含 驱动它的组件被脚本引用,说明运行时代码可能改变显示内容,建议再对该页面进行 Play 巡检。

Play 里的巡检

巡检通过游戏的本地化系统切换语言,检查游戏实际排版后的文字是否超出边界或相互重叠,并检查 TextMeshPro 使用的字形和字体。它能够覆盖编辑模式扫描无法看到的运行时文字和动态界面;插件不会直接将译文写入游戏的文本组件。

在插件窗口点击“检查本页所有语言(F8)”
  ↓ 尚未启动巡检时,先启动巡检
对每种所选语言:
  调用游戏的本地化系统切换语言
  ↓ 等待设定帧数(默认 120);Unity Localization 还会等待字符串加载
  检查当前显示的文字,并截取 Game 视图
  ↓ 若游戏提供伪语言,最后检查括号标记
恢复巡检前的语言
  ↓
保存已完成页,显示在总览和问题清单中

设置

  • 切换语言。 Unity Localization 和 I2 无需额外声明。自研系统在 ⚙ 设置 › 巡检 › 巡检时切换语言(自研的本地化系统) 中选择脚本,指定 static void Method(string code) 作为切换方法、static string Method() 作为读取当前语言的方法。方法通过名称调用,无需引用插件,仅在 Play 中执行。
  • 伪语言(可选)。 游戏需提供一种将每段本地化文字包在括号中的语言,供巡检识别拼接和未本地化文字。Unity Localization 使用工程中的 Pseudo-Locale;I2 或自研系统需在 ⚙ 设置 › 巡检 › 伪语言 中填写该语言代码和括号。请勿填写真实语言代码。它与扫描中由插件生成的伪本地化译文用途不同。
  • Game 视图。 选择扫描 分辨率 中的一种尺寸,例如 1920x1080;尺寸一致是将扫描爆框问题标为 以巡检为准 的条件之一。也可点击 添加 Game 视图现在的尺寸。保持 Game 视图可见;如果与插件窗口位于同一组页签,Game 视图可能不绘制,导致截图失败。

巡检栏

Play 模式下,工具栏下方显示巡检栏:

  • 检查本页所有语言(F8) 开始检查当前页;页名 用于命名结果,默认建议“场景: Canvas”,UI Toolkit 页面按文档命名;切换器 选择本地化系统;停止巡检 结束巡检。
  • 画框 标出问题文字,颜色含义见巡检栏图例。冻结游戏时间 临时将 Time.timeScale 设为 0。用变量样本 让游戏显示已配置的样本。
  • 展开 手动切换语言,可点击 上一种语言、下一种语言,或使用方向键。

F8 和方向键仅在插件窗口获得焦点时有效。从 Game 视图返回后,请先点击插件窗口。无法开始检查时,巡检栏会显示原因。

看巡检的页

总览 为每个已完成页显示一块结果,例如 巡检的页“Title: MainCanvas” · … 检查。每行对应一种语言,末尾可 打开截图。占位符 和 标签 始终为短横,因为巡检不分析翻译表;漏翻译 仅在 伪语言 行检查。

巡检问题也会出现在 问题清单 中,并带有页名。选中问题后,并排预览 可比较该页各语言截图。

已完成页可在停止巡检、退出 Play 和脚本域重载后继续查看,直到清空结果或关闭编辑器;它们不作为工程资产保存。中途停止只会丢弃尚未完成的当前页。⋮ 菜单中的 清空巡检结果 会清除已保存页及截图。

以巡检为准

巡检检查过同一物体、同一语言后,满足条件的扫描爆框或缺字结果会保留在清单中,但标为 以巡检为准,仅供参考,不再计入总览。

爆框匹配要求巡检尺寸与扫描分辨率相同,且游戏显示的字符串与扫描测量内容一致。缺字等结果还有字体和字符覆盖条件,完整规则见手册(上)。启用域重载时,退出 Play 后的自动扫描可让你查看这些匹配结果。

在 Device Simulator 里查手机

将 Game 视图切为 Simulator,选择机型,再进入 Play 检查当前页。结果中的尺寸和截图使用模拟屏幕像素。转屏后可在 页名 中注明方向,例如 Title (landscape),以不同名称保留两个结果。

没成功时看这里

现象检查与处理
没截到:多半是 Game 视图没画这一帧将插件窗口移到 Game 视图旁边,保持 Game 视图可见,再次检查。
没有扫描问题标为 以巡检为准检查是否有扫描结果、Game 视图尺寸是否在扫描分辨率中,以及游戏显示内容是否与扫描内容一致。
页结果仍是上一种语言文字更新晚于等待时间。增大 检查本页:每次切换后等待的帧数,例如设为 600,再次检查。
替换了同名的那一页。页名与已保存结果相同。如果需要保留两页,使用不同名称。
伪语言没查 或 设置里的伪语言 … 没查按提示核对配置。Unity Localization 的 Pseudo-Locale 最后一步必须为 Encapsulator;手动填写的代码必须能被当前切换器切换。

支持

以下联系方式也可在 Window > ★ Localization Checker > About 中查看。