Skip to content

component.zod.ts 的 I18nLabelSchema 键声明为纯字符串,但 3 个平台页在 31 处授权内联多语言 map #5728

Description

@os-zhuang

实施 #5611(RecordDetailsProps.sections 改对象形式)时,按"规则消费半径"清扫 component.zod.ts 的真实授权方发现的范围外问题 —— 与 #5611/#5176 同一族(声明与授权不一致,靠 props 无解析闸门苟活),但不是同一个键,故另开。未在 #5611 的 PR 中修复。

实测

packages/spec/src/ui/i18n.zod.ts:80I18nLabelSchema 定义为纯字符串,且文档注释明确排除内联 i18n 对象:

export const I18nLabelSchema = lazySchema(() => z.string().describe('Display label (plain string; i18n keys are auto-generated by the framework)'));

"Developers only need to provide the default-language string; translations are managed through translation files, not inline i18n objects."

component.zod.ts 用它声明的键,被平台页大量授权为内联多语言 map:

  • RecordRelatedListProps.title(component.zod.ts:189)→ I18nLabelSchema.optional()
  • PageTabsProps.items[].label(component.zod.ts:118)→ I18nLabelSchema(必填)
  • PageAccordionProps 同形(component.zod.ts:297)

真实授权(共 31 处,分布在 3 个已发布平台页):

// packages/platform-objects/src/pages/sys-organization.page.ts:55
label: { en: 'Members', 'zh-CN': '成员', 'ja-JP': 'メンバー', 'es-ES': 'Miembros' },
// packages/platform-objects/src/pages/sys-position.page.ts:66
title: { en: 'Holders', 'zh-CN': '任职人员', 'ja-JP': '在任者', 'es-ES': 'Titulares' },
文件 内联 map 授权处数
sys-user.page.ts 19
sys-organization.page.ts 6
sys-position.page.ts 6

这一形状是被兑现的,不是死代码。 objectui 的 record-details.tsx:194pickLocalized(rawTitleSrc, language) 真的解析它;仓内 packages/cli/src/utils/i18n-extract.ts:398-401 也明确知道并处理这一形状(注释:"a localized-map label ({ en, 'zh-CN' }) is already multilingual")。所以这与 #4667 退休的 book 内联 translations 不同 —— 那个没有任何 resolver 读取,这个有。

为什么现在值得处理

需要裁定的方向

不自行猜测,列出选项:

倾向 A,但需先测 tab label / related-list title 在 bundle 侧有无 resolver(#5377 提示 view 的 tabs[].label 正是"无 translation key 也无 resolver"),若无则 A 会造成翻译能力倒退。这超出 #5611 的范围与我的判断范围,故不动、只记录。

关系

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions