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