Skip to content

AiChatPage 的 planBuildingLabel 按「对话语言」而非 UI 语言取值 —— 英文界面 + 中文会话时,方案卡上唯一一个中文标签,且 zh 包该 key 永远读不到 #3837

Description

@yinlianghui

#3546 切片四(回填 console 命名空间 41 个缺失 key)顺手量出,不在该 PR 范围内(组件改动,与本切片"只回填语言包"的围栏无关),单独立项。

现场

packages/app-shell/src/console/ai/AiChatPage.tsx:2195:

planBuildingLabel={
  convZh ? '正在搭建…' : t('console.ai.planBuilding', { defaultValue: 'Building…' })
}

convZh(同文件 1587 行)判定的是会话的语言(isConversationZh(messages)),不是 UI 语言。它上面 1580-1586 行的注释把规则写得很清楚,而且这条规则是对的:

#772 — the confirm-card SEND messages must match the CONVERSATION's language, not the console UI locale … button LABELS stay on the UI locale.

同一个 convZh 门控的另外三个值 —— planApproveMessage / planApproveDefaultsMessage / changesConfirmMessage —— 都是发给 agent 的消息,按会话语言取值,完全符合该规则(#772/#2884 就是为它们建立的)。

planBuildingLabel标签(名字里就写着 Label,渲染在方案卡上),却被同一个门控住了。这是那条注释自己排除掉的那一类。

两个后果

  1. 混合语言的卡片。 英文 UI + 中文会话时,方案卡上 planTitle(Proposed plan)、planApprove(Build it)、planBuilt(Built)、planDeferred(Not yet built)全是英文,中间夹一个"正在搭建…"。console-ai UX:三轮真实浏览器魔法流程测试的体验问题清单(登录无声失败/agent 蓝图感知/转介等待/i18n 混杂等) #2458 第 4 条记录的是反方向(中文界面里漏出英文),这是同一个病的另一侧。
  2. zh 包的这个 key 永远读不到。 中文会话恒走硬编码字面量,所以 console.ai.planBuilding 的 zh 值对真实中文用户无效 —— 翻译改它不产生任何效果。258 个 t() 调用点引用的 key 在任何语言包里都不存在(#3530 守卫首跑实测),其中 8 处直接把 raw key 渲染给用户 #3546 切片四刚把这个 key 补进十包(PR fix(i18n): 回填 console 命名空间 41 个缺失语言 key + console.ai.group. 前缀家族,十包补齐 (#3546 切片四) #3839),补进去的 zh 值只在"中文 UI + 英文会话"这种组合下才会被读到。

已做的防护(不是修复)

切片四把 zh 值写成与该字面量逐字节相同正在搭建…,并在 packages/i18n/src/__tests__/console-namespace-3546.test.tsx 里加了一条断言,读 AiChatPage.tsx 源码把两者钉在一起:

const literal = src.match(/convZh \? '([^']+)' : t\('console\.ai\.planBuilding'/);
expect(literal, 'the convZh planBuilding branch moved — recheck the finding').not.toBeNull();
expect(at(builtInLocales.zh, 'console.ai.planBuilding')).toBe(literal[1]);
// ↑ 实际代码在 literal 后带非空断言;GitHub 正文消毒器会吃掉那个字符,故此处省略

所以在本单修掉之前,两条路径至少不会说两种话;该断言在这个三元被删掉时会红,提示回来清理它。

建议的修法(未裁决)

planBuildingLabelconvZh 里摘出来,直接用 t('console.ai.planBuilding', …),与卡上其他标签一致 —— 一行删除。顺带值得核一遍 convZh 门控的其余三处是否确实都是"发送内容"(实测是),以及是否还有别的 *Label 被同类门控住。

关联:#772 / #2884(建立"消息随会话、标签随 UI"规则的两单)、#3546 / PR #3839(切片四补进这个 key 并加了字节钉子)、#2458 第 4 条(AI 面语言混杂,反方向)。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions