Skip to content

metadata-admin 的 record:details.sections 块设计器没有 name 输入位 —— Studio 搭出来的 section 结构上无法翻译,且必然挂着上游 translation-section-name-missing #3819

Description

@yinlianghui

发现于 #3807 的实施过程(围栏外,本 PR 未夹带)。未认领,交 PM triage。

机制

packages/app-shell/src/views/metadata-admin/previews/block-config.ts:310-321,record:detailssections 数组条目只给了三个 itemFields:

itemFields: [
  { name: 'label',   label: 'Label',   kind: 'text' },
  { name: 'columns', label: 'Columns', kind: 'number', placeholder: '2' },
  { name: 'fields',  label: 'Fields',  kind: 'field-list', objectFrom: 'page' },
],

缺的是 name。而 pin 版 @objectstack/spec@17.0.0-rc.5RecordDetailsProps.sections[].name 的 describe 明确它是 i18n 锚点:Stable section identifier for i18n lookup (snake_case) — resolves objects.{object}._sections.{name}.label; a nameless section renders its authored label in every locale。渲染器实读也确实如此(packages/plugin-detail/src/renderers/record-details.tsx):

const translatedTitle = s.name && objectName
  ? sectionLabel(objectName, s.name, rawTitle ?? s.name)
  : rawTitle;

sectionLabel 的键约定在 packages/i18n/src/useObjectLabel.ts:419({ns}.objects.{objectName}._sections.{sectionName}.label)。s.name 缺失时直接退回 authored label —— 于是在设计器里搭出来的每个 section,在所有 locale 下都显示同一串作者当时敲进去的文字,而且在 UI 里没有任何位置能补上锚点

上游 spec 那段注释还写着:packages/linttranslation-section-name-missing 规则存在的目的就是提醒作者补 name。合起来就是:设计器产出的页面必然挂着一条作者在设计器里修不掉的诊断。

建议

itemFieldsname(kind: 'text'),并顺带决定两件小事:

  • 是否做 snake_case 校验 / 从 label 自动派生一次(派生要避免把已翻译的 label 变成锚点);
  • 已存在的、只有 label 的 section 打开设计器时 name 留空还是回填。

同一设计面 #3807 已把发布给作者的 sections 说明改成对象形并写清 name 的语义,所以"作者知道要写 name、但设计器没有格子"这个落差从本单开始是可见的。

参考位置

关联:#3807#3134(表单布局设计器的 i18n,邻域但另一个设计面)、objectstack#5611

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions