Skip to content

docs(i18n): spell the lead convert verb 转化 on every Chinese page (#844) - #906

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-844-zhhant-convert-sweep
Aug 6, 2026
Merged

yinlianghui merged 1 commit into
mainfrom
claude/issue-844-zhhant-convert-sweep

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #844

基线 origin/main = 90686a4。语言包是契约:convert_lead.label = 「转化线索」、is_converted = 「已转化」(src/translations/zh-CN.ts),所以文档的 lead convert 动词面写「转化 / 轉化」(#801/#825/#829 已立三次)。

改动:18 个 zh 页共 33 处,逐处判义项;1 处 ROW_LABEL 钉子同批同步。 不动 en 页、src/**、content/docs/releases/;不新增守卫;未升级 @objectstack/*。

一、前提复核:issue 行号全部过期,全量重 grep 重定位

issue 正文的行号取自基线 a501812,其后 #894 / #892 / #879 等大量 merge 落地。按 grep -rn "转换\|轉換" content/docs/ 全量重扫(改前 44 行 / 81 处)逐处重定位,与 issue 的差异如实列在下面。

差异 1 — administration/automation 行号 73 → 57,且该行有两处而非一处

issue 只点名「线索转换流程」这一处。实测该行是流程表的同一行,标签与描述同为 lead-convert 动词面:

| **线索转换流程** | 屏幕 | 将合格潜在客户转换为客户 + 联系人(+ 可选商机),然后通知 |

只改标签会让同一行「线索转化流程 … 将合格潜在客户转换为客户」自相矛盾,正是 #801 批评的「半页对半页错」。两处一起改(zh-Hans / zh-Hant 各 2 处,合计 4 处)。描述格不在守卫的比对面内(守卫只比对第一格),所以这一半是纯文本修正。

差异 2 — administration/setup 行号 149 → 152

sandbox-and-releases:153、state-machines:49/112/122 行号未变。

差异 3 — 「20 余处」的实际构成

issue 标题说 zh-Hant 侧「20 余处」。实测繁体单侧残留为 17 处(与 issue 正文逐页列举的 5+4+2+1+2+1+1+1 完全吻合);另有简繁都没改的五页共 16 处。合计 33 处 —— 标题的「20 余」是把两组混计的概数,正文的分页清单准确。

差异 4 — state-machines 页多出 :3 一处

issue 的机制名排除清单列了 :8,17,42,94,97,104,115,119,121,133 十处,实测该页还有 frontmatter :3 的「有效的状态转换」,同为机制名,一并不动(该页机制名共 11 处)。

二、义项判别表(改动的 33 处)

组 A — 仅 zh-Hant 落后,简体同位行早已是「转化」(17 处 / 8 页)

页(.zh-Hant.mdx) 行 zh-Hans 同位(已「转化」) 判据
marketing/campaign-members 8 是否打开、点击、响应或转化 成员参与漏斗末端=lead convert
30 销售转化 Converted 成员状态的含义列
45 被转化为联系人 lead → contact
67 转化事件(线索 → 商机) lead convert 事件
98 没有它,转化就无法汇总 同段
marketing/campaigns 46 打开、点击、响应、转化 Engagement 汇总项
58 发送、响应、转化、ROI 同上
91 当销售代表转化一个…线索时 动词,主语是 rep
93 最接近转化的那个 归因触点
marketing/index 29 发送、响应、转化、ROI 同 campaigns:58
61 历史上以 3% 转化的营销活动 同上
analytics/cubes 108 转化数量(成员 → 商机) 度量名,动词面
analytics/dashboards 126 漏斗中尚未转化的线索 逐字等于语言包 open_leads.description
133 "未转化" 同一磁贴的周期声明
analytics/reports 59 打开 / 点击 / 响应 / 转化 同 campaigns:46
reference/glossary 38 注册 / 转化的成员 Campaign 词条
guides/files-and-comments 51 潜在客户一旦转化 lead convert

组 B — 简繁都没改(16 处 / 5 页 × 2 语)

页 行 原文 判据
sales/index 19 将其转换为客户 lead → account
administration/setup 152 创建潜在客户 → 转换 → 商机 上线冒烟清单的 Convert 步
administration/sandbox-and-releases 153 创建潜在客户 → 转换 → 商机 部署后冒烟清单,同上
administration/state-machines 49 转换向导(创建客户/联系人/商机) Convert 向导,非状态迁移
112 "转换这个潜在客户" Copilot 建议的 convert_lead 动作
122 测试向导流程(转换潜在客户、关闭商机) 同 :49 的向导
administration/automation 57 线索转换流程 / 将合格潜在客户转换为客户 flow lead_conversion 行,标签+描述

state-machines 逐句判:改 3 处,保留 11 处

该页 14 处「转换」里 11 处是状态机机制名(state transition),与 convert 动词面同形不同义,禁止整页替换:

:3 有效的状态转换(frontmatter) · :8 强制执行这些转换 · :17 它们的转换没那么严格 · :42 允许的转换: · :94 移除转换 · :97 在每次转换时 · :104 尝试不允许的转换 · :115 建议非法的转换 · :119 太多转换规则 · :121 状态机转换 · :133 由转换触发的工作流

⚠️ 其中 :17 落在 #896(待派)的「哪些对象用状态机」小节内,本 PR 零触碰该小节。

三、反向验证:方向先声明,再跑(两阶段实测)

预先声明的方向:test/automation-docs-coverage.test.ts 的 ledger↔页面连接是首格精确相等(unbold(cells[0]) === label,:390 / :434)。文档是被比对侧、ledger 是期望侧,所以从文档里移走旧拼法只会减少匹配 —— 预期是标准的 先红后绿,不是计数上移,也不是倒挂:两条规则 × 两个中文页 = 4 条失败。

阶段 1(只改文档,ledger 留旧)—— 实测 EXIT=1,4 failed | 16 passed:

FAIL  ... > automation.zh-Hant.mdx > every shipped flow has exactly one row
  lead_conversion: content/docs/administration/automation.zh-Hant.mdx (zh-Hant) has no "線索轉換流程" row

FAIL  ... > automation.zh-Hant.mdx > no row names a flow this app does not ship
  content/docs/administration/automation.zh-Hant.mdx (zh-Hant): row "線索轉化流程" names no flow this app ships

 Test Files  1 failed (1)
      Tests  4 failed | 16 passed (20)

(zh-Hans 两条对称失败,同因同形。)

阶段 2(同批同步 ROW_LABEL['lead_conversion'])—— 实测 EXIT=0:

 Test Files  1 passed (1)
      Tests  20 passed (20)

方向与声明一致。ledger 里同时留了注释,说明该行为何跟语言包而不是自行取词。

四、改后复扫:剩余 44 行 / 48 处,逐条给理由

grep -rn "转换\|轉換" content/docs/ 改后仍有命中,全部非 lead-convert 义项:

义项 处数 位置
状态转换(state transition,状态机机制名) 34 administration/state-machines 简繁各 11;administration/index:18 ×2;reference/glossary:168 ×2 行共 4 处;sales/opportunities:172 ×2;sales/pipeline-management:113 ×2
数据类型 / 值强制转换(导入映射) 10 guides/import-and-export:25 ×2 行共 4 处;guides/importing-your-data:35,36,61/62 共 6 处
合同激活这一状态跃迁 2 revenue/contracts:20 简繁
平台 datetime 筛选器转换 2 analytics/dashboards:96 简繁
「轉換率」指标名(仅 zh-Hant) 2 analytics/cubes.zh-Hant:124、analytics/reports.zh-Hant:32 —— 见下

最后一类是 issue「不属于本条的」清单点名排除的,本 PR 遵守该边界未动;但实测其排除理由(指标名)与基线不符:全仓 zh-Hans 没有任何一处「转换率」,同位简体写的就是「转化率」,且 grep -rn "转化率\|转换率" src/ 零命中(conversion rate 在本仓没有 label 面)。已单独立 #905 交 PM 复判,未在本 PR 改动。

五、验证输出(共享锁 flock /tmp/os-heavy-verify.lock + NODE_OPTIONS=--max-old-space-size=4096)

步骤 退出码 关键行
pnpm validate 0 ✓ Validation passed (1477ms) · 5 条 author-time 警告为基线既有(approval 空名单 ×4、crm_campaign_member field-group-shadowed,即 #715)
pnpm typecheck 0 tsc --noEmit 无输出
pnpm build 0 ✓ Build complete (1506ms) · Artifact: dist/objectstack.json (1921.4 KB) · Logic: 24 Flows
pnpm test --maxWorkers=2 0 Test Files 66 passed (66) / Tests 1587 passed | 1 skipped (1588)
pnpm lint 0 13 warning(s), 14 suggestion(s) —— 与基线同
pnpm hygiene 0 ✓ no raw control bytes in first-party files · ✓ source hygiene clean · 扫描面含 content、.changeset

test 输出里的 ✗ source hygiene failed: … 是 source-hygiene-scan-surface.test.ts 元测试自身的预期 stderr,不是失败。

控制字节自扫(超出 gate 的盲区,20 个改动文件):

grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f]' $(git diff --name-only HEAD~1)  →  零命中
file <每个改动文件>                                                       →  全部 UTF-8 text

六、changeset

.changeset/zhhant-convert-sweep.md('hotcrm': patch),站内路径反引号(#797)。


Generated by Claude Code

The locale pack is the contract — `convert_lead.label` is 转化线索 and
`is_converted` is 已转化 — so the docs say 转化 (#801/#825/#829). Two gaps
survived those passes:

- 17 places on eight zh-Hant pages still said 轉換 while the Simplified line
  beside them already said 转化 (marketing/campaign-members, campaigns, index;
  analytics/cubes, dashboards, reports; reference/glossary;
  guides/files-and-comments).
- Five pages no pass had reached, in both scripts: sales/index,
  administration/{setup, sandbox-and-releases, state-machines, automation}.

33 occurrences over 18 pages, judged one by one. 状态转换 (state transition) is
a different word that shares the old spelling, so the state-machines page kept
its ten mechanism sentences and changed only the three lead-convert ones; the
contract-activation, datetime-filter and type-coercion usages are untouched for
the same reason.

The automation page's flow row is pinned in ROW_LABEL, which flows need because
they carry no locale-pack entry — the ledger moves in this commit, not after it.
Verified in both directions: doc-only change first, guard red on both Chinese
pages (no "线索转换流程" row / row "线索转化流程" names no flow), then green with
the ledger synced.

Documentation only; nothing under src/ changed, and the English pages were
already right.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHrPAGEgFDoHjphqYG4BMa
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hotcrm Ignored Ignored Aug 6, 2026 5:46am

Request Review

@github-actions github-actions Bot added the ci/cd CI plumbing and the verification pipeline label Aug 6, 2026
@yinlianghui
yinlianghui marked this pull request as ready for review August 6, 2026 06:50
@yinlianghui
yinlianghui added this pull request to the merge queue Aug 6, 2026
Merged via the queue into main with commit 42eebab Aug 6, 2026
10 checks passed
This was referenced Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd CI plumbing and the verification pipeline

Projects

None yet

Development

Successfully merging this pull request may close these issues.

convert 动词面:zh-Hant 侧整体没跟上简体侧,marketing/analytics/guides 等 20 余处仍写「轉換」而包里是「转化」

2 participants