常见问题

Localization Checker 是 Unity 编辑器里的本地化检查插件。这里回答常见问题:支持的 Unity 和团结引擎版本、扫描和 Play 巡检查什么、会不会改动你的工程、购买与退款。详细操作请参阅文档;需要进一步帮助,请查看支持页。

安装与兼容

支持哪些 Unity 版本?

支持 Unity 2022.3 LTS 及以上版本(包括 Unity 6),以及团结引擎 2022.3。已测试的版本包括 Unity 2022.3 LTS、Unity 6(6000.3–6000.6)和团结引擎 2022.3(团结 1.5、1.10),搭配 TextMeshPro 3.0、3.2 和 UGUI 1.0、2.x。

能在团结引擎中使用吗?

可以,支持团结引擎 2022.3。UI Toolkit 文字检查仅支持 Unity 6,因此在团结引擎和 Unity 2022.3 中不可用。团结引擎的高级文本处理(Advance Text Processing)使用源字体文件进行文字整形;插件的字符检查则逐个查询字符。

可以检查哪些 UI 文字?

支持 Canvas 内的 TextMeshPro 和旧版 UI Text;在 Unity 6 中,还支持 UIDocument 中的 UI Toolkit 文字。Canvas 外的 3D TextMeshPro 不做布局和重叠检查,Canvas 外的 UI 文字不参与扫描。打开场景中已经存在的文字值会参与扫描,但扫描不会执行游戏运行时的文字赋值或界面创建逻辑。运行时生成或更新的内容,请在 Play 模式中用巡检逐页检查。

必须安装 Unity Localization 或 I2 Localization 吗?

不必。安装后,插件会自动读取它们,无须额外设置。支持 Unity Localization 1.5.2 及以上、2.0 以下,以及 I2 Localization 2.8.9 及以上(已测试 2.8.22)。Unity Localization 2.0 会列在来源中,但不会读取。无论是否安装这两个包,都可以使用自己的 CSV、TSV、Excel、JSON、XLIFF 和 PO 翻译表。

为什么没有显示菜单?

插件依赖 Unity UI(uGUI)包。未安装时,插件可以编译,但没有受支持的文字可供检查,也不会显示菜单。安装后,从 Window > ★ Localization Checker 打开插件。

为什么跳过了含有 TextMeshPro 文字的 Canvas?

请通过 Window > TextMeshPro > Import TMP Essential Resources 导入 TMP 必备资源。缺少这些资源时,相关 Canvas 会被跳过,结果中会注明原因。

插件会进入构建,或修改我的工程吗?

插件只在编辑器中运行,不进入玩家构建,也没有 Resources 文件夹。扫描在隐藏的预览场景中测量 UI 副本,不修改原始场景、Prefab 或资产,不将它们标记为已修改,也不保存它们。设置保存在 ProjectSettings/LocalizationChecker.json,插件不会在 Assets 下创建内容。

Play 模式巡检会切换游戏语言,并在结束后还原。巡检会改动哪些状态、如何还原,详见手册(下)。

支持哪些渲染管线?

检查本身不渲染 UI。并排预览使用预览相机渲染 UI 副本,已在内置渲染管线和 URP 中测试。

为什么没有扫描到

UI 在运行时生成,或文字由脚本赋值,怎么办?

场景扫描读取编辑器中当前已加载的物体,Prefab 扫描读取已保存的资产。测量副本上的项目脚本会被移除,因此副本不会执行游戏中的界面创建、异步加载或文字赋值逻辑。已存在于打开场景中的文字值会参与扫描;游戏进入 Play 后才创建或更新的内容,请用巡检检查。

请改用巡检:进入 Play 模式,打开要检查的界面,再将插件页签切到前台,并点击插件窗口,让它获得焦点。按 F8 或点击巡检栏中的按钮,插件就会通过你的本地化系统逐一切换语言,读取引擎实际排版的结果。

为什么扫描结果没有反映我的修改?

打开的场景和选中的物体范围读取场景当前已加载的状态,包括未保存的修改,但场景必须至少保存过一次。Prefab 范围读取已保存的资产,因此应先保存 Prefab 模式中的修改。修改界面后需要重新扫描;如果改动的是设置,扫描一行会显示结果过期:设置改过。

为什么没有报告 Canvas 外的文字?

Canvas 外的 UI 文字不参与扫描。Canvas 外的 3D TextMeshPro 不做布局和重叠检查。

为什么隐藏的页签被报告为重叠?

测量隐藏对象时,扫描会同时显示其所在 Canvas 中的所有隐藏对象。因此,游戏中不会同时出现的页签,在扫描时可能发生重叠。请用巡检检查游戏实际显示的面板;忽略规则不适用于界面重叠或文字溢出问题。

文字已经本地化,为什么仍被报告为硬编码?

常见原因有三种:

如果文本框的内容看起来像某张表的 key,扫描会提供打开并重新扫描操作,同时启用该设置并开始新扫描。

“扫描中止:”是什么意思?

消息后会显示原因。处理后重新扫描即可。无法读取的表会在来源中单独列出原因,不写入日志。取消扫描会在当前步骤结束后停止,不生成结果。

如何阅读结果

严重、警告、提示分别是什么意思?

这些等级表示处理优先级。严重表示应优先检查,可能直接影响文字显示或本地化完整性;警告表示存在潜在问题,包括与设备有关的风险;提示提供人工检查线索。各等级都需要结合详情和实际界面确认后,再决定如何修改。

什么是“仅供参考”的行?

这些行提供检查背景,包括未绑定的文字、可能由脚本赋值的文字、由 fallback 字体提供的字符、未测量的输入框标签、源语言已有且译文未加重的问题,以及已被巡检结果取代的扫描问题。

原因会写在详情中。这些行不计入总览数量和摘要中的三档严重程度统计。启用隐藏仅供参考的后,它们也会从结果清单和导出中移除。

“可信度”一列是什么意思?

什么是 Key 绑定可信度?

它表示插件有多大把握判断某个文字对象使用了哪个 key。

源语言也溢出,为什么不计入问题数量?

如果源语言本来就有这个问题,而译文没有使它加重,该项仅供参考。请先修复源语言的布局。

为什么正确的译文也会被报告?

结尾标点、空白、成对符号和数字检查报告的是差异。差异可能符合目标语言的习惯,例如西班牙语中将 ! 改为 .,也可能是有意调整,例如单位换算。请将这些结果作为人工检查的提示。

和源文相同也可能报告人名、OK 和同一种语言的地区变体。确认没有问题后,可以添加忽略规则。手册(下)列出了已知的误报情况。

翻译来源与 CSV 格式

支持读取哪些文件格式?

支持 CSV 和 TSV(UTF-8 编码,包含表头、一列 key 和每种语言各一列)、Excel 工作簿(.xlsx、.xlsm,每个工作表作为一张翻译表)、JSON(每种语言一个文件、按 key 分组或按语言分组,嵌套名称用点连接)、i18next JSON、XLIFF 1.2 和 2.0,以及 gettext PO(每种语言一个文件)。Unity Localization 的 String Table Collection 和 I2 的语言源可直接读取。

Excel 检查使用单元格存储的值和公式缓存结果,不应用 Excel 的数字或日期显示格式,因此读取到的值可能与 Excel 中显示的文字不同。

为什么从 Excel 保存的 CSV 会显示乱码?

CSV 和 TSV 必须使用 UTF-8 编码,不支持 GBK 等其他代码页。请在 Excel 中选择CSV UTF-8保存。

插件也会检测译文中的乱码迹象,包括 UTF-8 被误读为 Windows-1252、Latin-1、GBK、Windows-1250、Windows-1251、Shift-JIS 或 CP949 的情况。

如何将列映射到语言?

插件会根据表头填入初始映射:第一列作为 key 列,en、English、Deutsch、日本語 等语言名称或代码映射到对应的语言代码。其余列请通过**改对照…**手动映射;ID 和 No 不会被识别为语言。

源语言按代码匹配。例如,zh-CN 和 zh-Hans 在这里会被视为两种不同的语言。

为什么整个文件都没有被读取?

语法错误、重复 key 或缺少已映射的表头,都会导致整个文件无法读取。来源会显示原因和行号;工作簿显示工作表中的行号。旧版 .xls 和带密码的工作簿不受支持,请另存为不带密码的 .xlsx。

为什么 Google Sheets 导出后多了引号,或丢失了换行?

TSV 中包围单元格的引号会被当作普通文字。Google Sheets 导出 TSV 时,还会把单元格内的换行替换为空格。请下载 CSV,以保留带引号的单元格内容和换行。

如何处理 PO 的复数形式?

每种复数形式分别生成一个 key,例如 item[0]、item[1]。各语言的形式数量取自其文件的 Plural-Forms 表头;没有该表头时按两种处理。空的 msgstr[n] 表示该形式缺少翻译;空的 msgstr 或 fuzzy 条目也视为未翻译。详见手册(上)。

网站与插件

这个网站提供哪些内容?

网站提供插件文档(英文和简体中文)、常见问题、支持信息和隐私说明。用于检查翻译表和字体文件的浏览器工具正在开发中。它是独立产品;插件负责检查 Unity 中的实际 UI。

购买与退款

在哪里购买?

即将上架 Unity Asset Store(国际)、团结商店(中国)和 itch.io,商店链接暂未开放。没有试用版或免费版。

Unity Asset Store 如何退款?

退款按 Asset Store EULA 第 2.8 节办理。购买后 14 天内且未下载,并不单独构成自动退款条件;还需满足许可类型、付款方式和升级路径等要求。请通过订单历史记录申请退款,由 Unity 审核和处理。

如果插件在支持的编辑器中无法实现商店页面宣传的功能,请将发票号发送至 support@localizationchecker.com。若我们无法修复该缺陷,会支持你的退款申请。对于已下载的购买,我们仅在上述情况下同意退款;申请仍由 Unity 按其规则及适用权利处理。

团结商店如何退款?

团结商店的购买按该商店的退款规则办理。请向同一个支持邮箱发送订单信息。

itch.io 如何退款?

itch.io 的购买按 itch.io 的退款政策办理。请向同一个支持邮箱发送订单信息。

一次购买包含几个许可席位?

以商店的最终用户许可为准。在 Unity Asset Store,编辑器扩展按许可席位授权。在 itch.io,以商品页写明的许可为准。

常见报错与消息

“扫描中止:”……

窗口消息后会显示原因。处理后重新扫描即可。无法读取的表会单独列在来源中。

为什么来源中列出了一张表及错误原因?

这表示该表未被读取。可能的原因包括语法错误、重复 key、缺少已映射的表头、旧版 .xls 格式、密码保护、非 UTF-8 编码、XLIFF 包含内联码或拆分片段,或 Unity Localization 不在 1.5.2 及以上、2.0 以下的支持范围。请处理报告中的原因,再重新扫描。

为什么 TextMeshPro 输出“Units Per EM”?

这条消息无害。TextMeshPro 首次读取由旧版 TextCore 保存的字体资产时会输出它。

提示无法读取设置文件,怎么办?

插件会记录一次警告,然后使用默认设置。请修复或删除 ProjectSettings/LocalizationChecker.json。

“上一次巡检因出错结束:”……

巡检栏会显示原因。常见情况包括语言没有保持在巡检切换后的状态、检查期间游戏切换了界面,或关闭 domain reload 后再次进入 Play 模式时 Unity Localization 尚未完成初始化。

报告当前语言的方法必须返回切换时使用的同一代码。遇到初始化问题,请退出并重新进入 Play 模式。

为什么按 F8 没有反应?

请进入并保持 Play 模式运行,将插件页签切到前台,点击插件窗口使其获得焦点,再按 F8。它是窗口内快捷键,在 Game 视图中按 F8 不会启动巡检。如果 F8 被其他快捷键占用,请点击巡检栏中的按钮。

Play 模式暂停时,检查无法继续。Unity 6 中,如果编辑器位于后台且关闭了 Run In Background,检查也会停住。

为什么没有保存截图?

请将插件窗口与 Game 视图放在不同的停靠组,否则 Game 视图不会渲染。World Space Canvas 如果既没有自己的相机,也没有主相机,就无法绘制标注框。如果游戏在捕获的同一帧也向 Unity 请求截图,两个文件中只会写入一个。

为什么截图仍然显示上一种语言?

请在巡检设置中增加每次切换语言后的等待帧数。巡检按帧等待,不按秒等待;超过等待时间才更新的文字,可能仍按上一种语言读取。

为什么 Unity 6.3 显示“Packages with Errors”对话框?

这是 Unity 自身的对话框。Unity 6.3 图形界面编辑器打开包含 registry 包(例如 Unity Localization)的工程时可能显示它。关闭对话框即可继续。

联系方式

请发送邮件至 support@localizationchecker.com,支持英文和中文。支持页说明了需要提供的信息。插件的 Window > ★ Localization Checker > About 中也有相同的联系方式。