Skip to content

[i18n] ObjectView 的 getFormTitle() 自拼英文 Create/Edit/View ${label},喂给 Drawer/Dialog 标题与 popover 浮层 —— #3426/#3459 的同族漏网 #3462

Description

@yinlianghui

发现于 #3459 的实现过程(PR 待开),不在该 issue 的围栏内,单独立单。

缺陷

packages/plugin-view/src/ObjectView.tsxgetFormTitle()(main@a32c4374c 之前约 847 行)在 TypeScript 里拼英文:

const getFormTitle = (): string => {
  if (schema.form?.title) return schema.form.title;
  const objectLabel = (objectSchema?.label as string) || schema.objectName;
  switch (formMode) {
    case 'create': return `Create ${objectLabel}`;
    case 'edit': return `Edit ${objectLabel}`;
    case 'view': return `View ${objectLabel}`;
    default: return objectLabel;
  }
};

三个消费点,全是可见标题:

位置 组件
renderDrawerForm() DrawerTitle
renderModalForm() DialogTitle
formLayout === 'popover' 分支 NavigationOverlaytitle prop

第三个正是 #3426 描述的那类:宿主传了 title,NavigationOverlayresolvedTitle = title || t('detail.recordDetail') 默认值永不生效。

#3459 只修了同文件里 mode: 'split' 那一处 ${objectLabel} Detail,围栏没含 getFormTitle —— 它是另一组字符串(动词 + 标签),不是同一个 key 家族。

可达性:已核验,不是死默认

用与 #3457/#3459 相同的标准跑了真实交互(渲染块 → 点行 → 读标题),在 zh 会话下通过,即缺陷成立:

// I18nProvider defaultLanguage: 'zh';getObjectSchema 返回 label: '联系人'
// schema: { type: 'object-view', objectName: 'contacts', navigation: { mode: 'drawer' } }
const cell = await screen.findByText('Alice');
fireEvent.click(cell);
await waitFor(() => expect(screen.getByText('View 联系人')).toBeInTheDocument());
// → 通过:zh 会话里抽屉标题是 "View 联系人",英文动词直接挂在本地化标签前面

门槛比 split 那处还低:navigation.mode: 'drawer''modal' 都到得了,而 ObjectViewSchema.layout 的默认值本身就是 'drawer',deriveRecordSurface 也常返回 'drawer' —— 即 navigation 完全不写也可能进这条路。navigationobject-view 的注册 inputs 里是声明过的可编写键。

app-shell 的 ObjectView 包装器钉了 layout: 'page' 并给 onNavigate,那条路被宿主覆盖 —— 是一个消费者的覆盖,不是分支死掉。

修法(建议,未实现)

沿 #3426/#3459 的形状:三个动词分支走 key + {{label}} 插值,让各语言包自己决定语序(de 的复合词、ja/zh 的助词位置都与英文不同)。需要判定的是复用现有 key 还是新增:

英文输出可否逐字节不变取决于选定的 key 拼写,派发时应作为裁定点写清。

相关

未打 finding 标签:这是用户今天就能看到的具体缺陷(zh/ja/de 会话的抽屉/弹窗标题),留给 PM 定级。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions