文档

全球化检查

检查所有变更中是否存在缺失或错误的翻译,以及新代码中是否包含仅适配单一语言或文化的文本和格式;配置完成后,还会检查其他语言页面是否出现显示异常。

“全球化Quality Control 中的检查功能可确保国际化项目具备全球适配能力。该功能会在任务 QA 和拉取请求阶段运行,仅扫描变更涉及的内容:

  1. 目录。变更新增或修改的字符串,涵盖所有语言版本。
  2. 代码。变更新增的代码行,这类代码在文本和格式上仅适配单一语言或文化场景。
  3. 页面。当项目定义了应用启动方式时,其页面会采用伪翻译。

一旦合并了 pull request,向导便会默认开启此项检查功能。相关设置位于Quality Control → 全球化;工作台的设置会显示该功能是否处于开启状态。

默认阻断规则

如果变更导致字符串缺失或损坏,或者新增的代码将用户可读文本直接嵌入代码、或将多个片段拼接成句子,该变更就会被退回要求修复。其余问题仅会作为发现项记录,除非您主动设置为阻断规则,否则不会阻碍流程。格式、排序和布局类发现项会持续记录,直到项目在其代码中确认相关问题已解决。

在“Quality Control → 全球化:目录代码、导致变更被退回的代码原因,以及导致变更被退回要求修复的页面问题。检查源代码和渲染页面即可关闭代码和页面检查步骤。

目录代码

代码含义默认阻断规则
missing该字符串没有对应译文是
invalid_syntax译文无法解析,例如 ICU 语法错误,或者出现模型错位:句子被截断、标点残留、引号未闭合或单词重复是
placeholder_mismatch占位符或受保护的术语与原文不一致,例如产品名称被重复书写是
plural_categories缺少该语言所需的复数形式是
stale字符串翻译完成后原文发生了变更否
obsolete原文已不存在该字符串,或其所在的页面已被删除否

当配置文件启用相关规则时,词汇表、长度及禁用词规则会返回对应的编码。

翻译功能会删除各语言中的废弃字符串,也会删除源文本已不存在的页面的译文。它仅会删除 Coroid 翻译的文件,绝不会删除仅存在单一语言版本的页面。

代码代码

代码发现内容默认阻断规则
hardcoded_text本应存入目录却写入代码的用户可读文本:JSX 和模板文本、可见属性如placeholder、title、alt和aria-label,提示框和警告信息是
concatenated_text由多个片段拼接而成的句子:译文与文本或数值通过+、模板字面量或相邻元素拼接而成是
locale_number未按读者所在地区格式化数字,例如toFixed出现在 UI 代码中,或toLocaleString()未指定地区设置否
locale_date日期或时间未按读者所在地区格式化,或使用固定模式如MM/dd/yyyy否
hardcoded_currency金额旁边标注的货币符号或代码否
ordinal_sort按字符编码排序或比较的文本,或localeCompare未指定地区设置否
case_mappingtoUpperCase()或toLowerCase()用于无地区设置的文本否
physical_direction在包含从右到左语言的项目中,CSS 和工具类中的左右方向设置否
postal_code_format使用单一国家模式的邮政编码否
phone_number_format验证为北美格式的电话号码否
latin_only_input仅限英文字母的名称、城市、街道或地址否
joined_list用逗号或“和”连接的列表式文本否
calendar_names写在代码中的星期或月份名称,或固定的每周第一天设置否
paper_size打印或 PDF 设置中固定的信纸尺寸、A4等规格否
fixed_unit显示在数值旁边的单位,如英里、磅或华氏度否
locale_parsing用户输入的数字通过parseFloat或Number否
ime_composition文本输入框中处理回车键时,未检测中文、日文或韩文单词是否仍在输入中否

面向各市场的设计会显示针对每项问题的修复方案。

检查项的读取内容

代码解析步骤会解析JavaScript和TypeScript,包括JSX,同时也会读取Vue、Svelte、Astro、HTML、ERB及Handlebars模板,以及纯文本形式的CSS。只有当上下文匹配时才会应用对应规则:比如邮政编码模式仅在邮政编码字段附近才会被识别,而拼接列表也仅在有相关阅读场景时才会被检测。

  • 按定义进行翻译。项目内的翻译调用和组件中的文本(t()、formatMessage、<Trans>、<FormattedMessage>、 $t())以及配置文件中列出的函数。
  • 永不出现该文本。受保护的术语,以及配置文件允许的词。
  • 特意省略的内容。包含“注释”的行,以及其后的行。请说明原因:i18n-ignore注释,以及其后的行。请说明原因:// i18n-ignore: product name。

可选的world部分配置如下:.coroid/i18n.json其余设置如下:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
字段含义
exclude规则忽略的文件通配符
translate框架自带的翻译函数之外的其他翻译函数
allow除受保护术语外永不翻译的词
formatter、currencies由向导的Culture步骤设置;详见Culture
render如何为伪本地化页面启动应用;详见伪本地化

发现结果及修复方案

每条发现结果都会存储在检查项运行记录中,并列在任务的发现结果栏内。已发现的问题:可按目录、键和语言归类目录类发现结果,按文件、行和文本内容归类代码类发现结果,按页面、元素和文本归类页面类发现结果。若同一任务的最新检查不再显示某条发现结果,则该发现结果即被修复。

翻译结账页面文案任务
已发现相关问题
  • 打开ui · checkout.total · fr: missing全球化 · 未翻译
  • 正在修复src/pricing.tsx:7 · “简洁的定价方案”全球化 · 写入代码的文本
  • 打开/{locale}/ · p#promo · “所有订单均享免费配送” · runtime_text (de-DE, ar-SA)全球化 · 未来自目录的文本
  • 正在修复ui · cart.items · ja: placeholder_mismatch全球化 · 占位符与源文本不符
  • 已修复ui · cart.count · ar: plural_categories全球化 · 该语区缺少复数形式

全球化检查的质量发现:目录字符串、代码变更及伪本地化页面,每个问题对应一个代码。仅为示意数据。

在拉取请求中,代码类发现结果也会以注释形式显示在变更行上:若阻碍任务推进则标记为失败,仅作提示则标记为警告。

当检查项阻塞任务时,开发者智能体会获取每条阻塞性发现结果,例如src/pricing.tsx:7 hardcoded_text: “Simple pricing”,并给出修复方法。它会通过针对该任务的翻译会话来修复翻译内容,绝不会手动编辑其他语言的目录。它会将文本移入源目录,把拼接的句子重写为带占位符的单条消息,并在移交任务前对自身变更应用代码规则。

来自各处的贡献

无论由谁编写,所有变更都需遵循同一标准,此检查即为此而设:

  • Coroid的智能体在处理国际化项目时,每项任务都会明确说明:源目录与翻译函数、每句对应一条消息、项目的格式化工具、从右向左书写语言的逻辑布局,以及Culture提供的市场规范。
  • 来自人员及其他工具的拉取请求均会通过Coroid Check接受检查,得到相同的发现结果与注释。一旦在代码库中安装了Coroid GitHub App,且项目策略在拉取请求阶段生效,它便会在每个pull request上运行。
  • 未通过检查即合并的变更会在合并后被察觉。 翻译在Coroid之外合并的字符串该检查会读取在pull request上执行的校验结果。对于pull request中缺失或过期的字符串,它会提交翻译任务。若该校验阻塞了代码相关发现结果,它还会提交名为 的任务。 对已合并的代码进行国际化处理在pull request中列出相关位置以供查阅。每次合并最多只会生成每种类型的任务各一个。

现有代码绝不会被阻塞:全球就绪性它会将其列出,并创建你可随时启动的修复任务。

自行运行

该引擎即为命令行工具coroid-i18n,其版本已在你的配置文件中锁定:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

source无需读取目录即可分析代码,因此即便尚未设置目录也能正常工作。若无--changed或--diff,它会扫描整个代码库。发现问题时,两条命令均会返回退出码1;可添加--format json以获取机器可读的报告。