发现于 #3963 的实施过程(围栏外,PR 未夹带 —— #3963 的范围明确排除 block-config.ts)。未认领,交 PM triage。
机制
#3913(PR #3970)把 packages/app-shell/src/views/metadata-admin/previews/block-config.ts 里的 label / addLabel / option label 全部改成翻译键,渲染处过 t()。placeholder 不在那次范围里,至今仍是显示文本:PageBlockInspector.renderField 把 f.placeholder 原样交给字段组件(number / json / string-list / 默认 text 四个分支),所以键全对的表照样在中文面板里渲染出英文提示。
这与 #3963 是不同面:#3963 是 PageBlockInspector.tsx 自身 JSX 的 chrome 字面量(裸 Add、两个 aria-label、Invalid JSON、它自己两个 placeholder);本单是 block-config.ts 的表数据,和 #3913 同一条机制、同一个文件,只是漏了一列。
命中(行号以 origin/main @ 5bfaabde0 为准)
block-config.ts 共 18 个 placeholder:,其中 8 个有语言内容:
| 行 |
位置 |
值 |
| 144 |
object-metric.icon |
lucide icon name |
| 186 |
element:text.content |
Text… |
| 290 |
element:button.icon |
lucide icon name |
| 308 |
page:header.icon |
lucide icon name |
| 375 |
record:details.sections.name |
snake_case, e.g. contact_info |
| 396 |
record:alert.icon |
lucide icon name |
| 413 |
record:quick_actions.actionNames |
action name |
| 435 |
ai:input.agentName |
agent name |
另外 10 个没有语言内容,不该被当成漏译:纯数字 20/2/3/4/1/10/2/10(101/135/180/181/227/234/346/377 行)、https://…(201)、以及一个 JSON 样例 { "type": "url", "target": "/environments" }(300)。
影响
zh-CN 管理员今天就会看到,且恰好在 #3913 / #3963 刚修好的同一个面板里:打开 page:header,字段名「图标」是中文,它下面输入框的提示是 lucide icon name;打开 record:details 的分区编辑器,「名称(i18n 键)」下面是 snake_case, e.g. contact_info。不是 dormant —— 这 8 处分属 6 个常用块类型,选中即渲染。
边界与去重
实施时值得先想清的一点(记录现象,不代人决定)
label 那次能把类型改成必填、删掉裸英文兜底;placeholder 不能照抄这条:它本就是可选的,而且上表说明它是混合面 —— 8 个要翻译、10 个是数字/URL/JSON 样例。所以「placeholder 必须是键」不能一刀切,要么给非语言值一份显式的豁免台账(如 block-config-i18n.test.ts 里现成的 LOCALE_INVARIANT 那种写法),要么在 BlockPropField 上把「样例值」和「提示文案」分成两个字段。哪条更对属契约面小决定,留给实施者论证。
若走翻译键路线,键形状可沿 #3913 的位置推导惯例(engine.inspector.pageBlock.placeholder. 后接 blockType 与字段路径),这样能直接并入 previews/__tests__/block-config-i18n.test.ts 里那条「存的键等于位置推导出的键」的结构钉。
发现于 #3963 的实施过程(围栏外,PR 未夹带 —— #3963 的范围明确排除
block-config.ts)。未认领,交 PM triage。机制
#3913(PR #3970)把
packages/app-shell/src/views/metadata-admin/previews/block-config.ts里的label/addLabel/ option label 全部改成翻译键,渲染处过t()。placeholder不在那次范围里,至今仍是显示文本:PageBlockInspector.renderField把f.placeholder原样交给字段组件(number / json / string-list / 默认 text 四个分支),所以键全对的表照样在中文面板里渲染出英文提示。这与 #3963 是不同面:#3963 是
PageBlockInspector.tsx自身 JSX 的 chrome 字面量(裸Add、两个 aria-label、Invalid JSON、它自己两个 placeholder);本单是block-config.ts的表数据,和 #3913 同一条机制、同一个文件,只是漏了一列。命中(行号以
origin/main@5bfaabde0为准)block-config.ts共 18 个placeholder:,其中 8 个有语言内容:object-metric.iconlucide icon nameelement:text.contentText…element:button.iconlucide icon namepage:header.iconlucide icon namerecord:details.sections.namesnake_case, e.g. contact_inforecord:alert.iconlucide icon namerecord:quick_actions.actionNamesaction nameai:input.agentNameagent name另外 10 个没有语言内容,不该被当成漏译:纯数字
20/2/3/4/1/10/2/10(101/135/180/181/227/234/346/377 行)、https://…(201)、以及一个 JSON 样例{ "type": "url", "target": "/environments" }(300)。影响
zh-CN 管理员今天就会看到,且恰好在 #3913 / #3963 刚修好的同一个面板里:打开
page:header,字段名「图标」是中文,它下面输入框的提示是lucide icon name;打开record:details的分区编辑器,「名称(i18n 键)」下面是snake_case, e.g. contact_info。不是 dormant —— 这 8 处分属 6 个常用块类型,选中即渲染。边界与去重
t()#3913(label/addLabel/option label,已随 PR fix(metadata-admin): 页面块检查器 curated 属性 label 跟随会话语言 (#3913) #3970 落地)。本单是同文件的placeholder列。block-config)。BlockPropField没有格式/校验能力位 —— 所有标识符类字段(sectionname、tabkey、accordionvalue)只能靠 placeholder 陈述约定 #3912 的子单。页面块检查器的BlockPropField没有格式/校验能力位 —— 所有标识符类字段(sectionname、tabkey、accordionvalue)只能靠 placeholder 陈述约定 #3912 说的是BlockPropField缺格式/校验能力位,并把「record:details.sections.name只能靠 placeholder 陈述 snake_case 约定」作为论据 —— 它的完成面是加能力位,不含把这些提示文本翻译掉,两者可各自独立落地,故按标准开独立单。block-configplaceholder、inspector i18n placeholder、lucide icon name),无同题单。实施时值得先想清的一点(记录现象,不代人决定)
label那次能把类型改成必填、删掉裸英文兜底;placeholder不能照抄这条:它本就是可选的,而且上表说明它是混合面 —— 8 个要翻译、10 个是数字/URL/JSON 样例。所以「placeholder 必须是键」不能一刀切,要么给非语言值一份显式的豁免台账(如block-config-i18n.test.ts里现成的LOCALE_INVARIANT那种写法),要么在BlockPropField上把「样例值」和「提示文案」分成两个字段。哪条更对属契约面小决定,留给实施者论证。若走翻译键路线,键形状可沿 #3913 的位置推导惯例(
engine.inspector.pageBlock.placeholder.后接blockType与字段路径),这样能直接并入previews/__tests__/block-config-i18n.test.ts里那条「存的键等于位置推导出的键」的结构钉。