Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

finding(studio): 属性面板的 metadata-form 本地化终态应直接消费平台本地化的 form/bundle,删掉 objectui 侧对照表(#7254 的 A→C 路线) #7369

Closed as not planned

Description

@hotlong

观察(来自 objectui#7254 的 dev 报告,PM 定级为 finding)

objectui#7254 / PR #7366 把 Studio 属性面板(仪表盘 inspector)的中文覆盖落在了 views/metadata-admin/i18n.ts 的 engine.* 专用字典(新增 metadata-form-i18n.ts 喂给 spec 自己的 resolveMetadataFormLabels),而不是 @object-ui/i18n 十语言包——理由:同一面板其它字符串已在 engine.*;@object-ui/i18n 强制十包对齐会为八种无拉动的语言发明技术表单文案。PM 裁:现状接受(A),终态是 C。

终态 C(本卡记录,暂不排期)

这些字符串本质上是 spec 的(metadata form 标签)。框架已经在 /meta/types 条目的嵌套 form 上用同一个 resolveMetadataFormLabels 做服务端本地化,objectstack 也已发布 dashboard 的 zh/ja/es bundle。终态是 objectui 的 inspector 直接消费线上的本地化 form(或 objectstack 发布的 metadataForms bundle),删掉 objectui 侧的对照表——#7366 落地的形状(同一 resolver、同一键约定)让这一步只是一个调用点换数据源。

未做的原因(前提,待验)

  • 服务端本地化的 form 今天没有线程到 inspector;
  • cloud 租户环境里能否拿到该 bundle 未在真实 rig 上验证。

Re-check:grep -rn "resolveMetadataFormLabels" packages/app-shell/src/views/metadata-admin/;grep -rn "metadataForms" /Users/zhuangjianguo/Documents/GitHub/objectstack/packages/platform-objects/src | head。

关联:objectstack#14586("Tailwind units" 帮助文案)、objectstack#14587(zh-CN metadata-forms 陈旧)。

Activity

  1. added
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Sep 5, 2026
  2. os-zhuang commented on Sep 5, 2026

    @os-zhuang
    Contributor

    分诊 — domain:ui / priority:p3 / pm:on-hold / finding / i18n

    锚定 (anchoring):调用点在 packages/app-shell/src/views/metadata-admin/ ⇒ domain:ui。

    在 origin/main a472b07 上复核 —— #7254 / PR #7366 的落地形状属实

    packages/app-shell/src/views/metadata-admin/metadata-form-i18n.ts:59    import { resolveMetadataFormLabels } from '@objectstack/spec/system';
    packages/app-shell/src/views/metadata-admin/metadata-form-i18n.ts:129   return resolveMetadataFormLabels(form, type, METADATA_FORM_BUNDLE, { locale: target });
    

    ⭐ 这一行是本卡最重要的复核结果:A 的落地形状确实把 C 变成了"换数据源"而不是"重写"。:129 已经在调 spec 自己的 resolveMetadataFormLabels,只是第三个实参喂的是 objectui 本地的 METADATA_FORM_BUNDLE。C 要做的就是把那个实参换成线上/平台发布的 bundle —— 卡片说"这一步只是一个调用点换数据源",这句在代码上成立,不是乐观估计。

    为什么是 pm:on-hold

    卡片自己写了"暂不排期",并列了两个未验证的前提:

    1. 服务端本地化的 form 今天没有线程到 inspector;
    2. cloud 租户环境里能否拿到该 bundle,未在真实 rig 上验证。

    第 2 条是硬前提:如果租户环境拿不到 bundle,C 会把今天可用的中文覆盖换成空白。⛔ 在真实 rig 上验证之前不能进队列。

    Restart-when(可执行探针;⛔ 判据是拿得到 bundle,不是"上游发布了"):

    # 在能连到目标环境的 rig 上跑;退出 0 即前提满足
    node -e "
      const r = await fetch(process.env.OS_BASE + '/api/v1/meta/types?locale=zh-CN', { headers: { authorization: 'Bearer ' + process.env.OS_TOKEN } }).then(r=>r.json());
      const withForm = (r.items ?? r ?? []).filter(t => t.form);
      console.log('types carrying a localized form:', withForm.length);
      process.exit(withForm.length > 0 ? 0 : 1);
    "

    定级理由

    priority:p3:

    ⚠️ 卡片的 Re-check 第二条对代理不可用

    grep -rn "metadataForms" /Users/zhuangjianguo/Documents/GitHub/objectstack/packages/platform-objects/src | head
    

    这是某台机器上的绝对路径,代理席位和 CI 都跑不了。⛔ 接手者不要照抄。等价的可移植写法(假设 objectstack 已作为兄弟仓 checkout):

    git grep -n "metadataForms" -- 'packages/platform-objects/src/**'   # 在 objectstack 仓内跑

    第一条(grep -rn "resolveMetadataFormLabels" packages/app-shell/src/views/metadata-admin/)是可移植的,本席跑了,见上。

    定型:架构重构,⛔ 但删掉本地对照表这一步要当心

    换数据源本身是 tidy。但删掉 objectui 侧的对照表是不可逆的一步:一旦删了,任何 bundle 获取失败都会退化成"没有本地化"。⛔ 建议接手者把"换源"与"删表"分成两步、两个 PR,中间留一个回落期 —— 这与 #7254 当初选 A 的理由(不为八种无拉动的语言发明技术表单文案)是同一种谨慎。

    ⛔ 给执行席的边界

    1. 先验两个前提(尤其第 2 条,在真实 rig 上),⛔ 不验就动手等于赌。
    2. 换源与删表分两步。
    3. 关联的两张上游卡(objectstack#14586 "Tailwind units" 帮助文案、objectstack#14587 zh-CN metadata-forms 陈旧)说明平台侧的 bundle 本身也有质量问题 —— ⚠️ 换源之前先确认那两张卡的状态,否则可能把一份准确的本地表换成一份陈旧的上游 bundle。

    ⛔ 分诊席不认领、不派单、不写码。


    Generated by Claude Code

  3. objectstack-fleet commented on Sep 27, 2026

    @objectstack-fleet
    Contributor

    Closed not_planned: an end-state architecture record with no defect today, whose probe needs a tenant rig no seat has

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) · session_01W89enF2dYV7K4N2Fbfj33f · 2026-09-27T16:19Z. ⛔ Not a claim.

    Provenance: who — the maintainer; verbatim — 「同意」, answering the triage seat's on-hold cleanup plan (which named this card and this disposition); where — the maintainer's chat with the triage session session_01W89enF2dYV7K4N2Fbfj33f, 2026-09-27.

    Reopen is free when the probe in this card exits 0 on a real tenant (a localized form is served by /api/v1/meta/types), or when the duplicated string table is measured to drift into a wrong label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seati18npriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions