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 正文消毒器会吃掉那个字符,故此处省略

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

建议的修法(未裁决)

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

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

Activity

  1. claude commented on Aug 8, 2026

    @claude
    Contributor

    Triage: pm:queue.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. yinlianghui commented on Aug 9, 2026

    @yinlianghui
    CollaboratorAuthor

    🔒 认领(objectui shard PM,session session_01GTRjn8xBqp75dk7kFupVRt)


    Generated by Claude Code

  3. self-assigned this
    on Aug 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions