Repository navigation
i18n(platform-objects): ship the platform objects, Setup, Studio and Account in zh-Hant - #30951
Conversation
…Account in zh-Hant Adds the Traditional Chinese bundles for every sys_* object, the metadata configuration forms, the Setup / Studio / Account navigation, the System Overview dashboard and datasets, and the platform pages, registers them in the served bundles behind the source-hash fallback, and adds zh-Hant to the user and organization pages' inline copy. The extract config documents zh-Hant in --locales, so check:i18n gates the new bundles. Tests that list the shipped locales now include zh-Hant; the page parity shape test accepts a script subtag; the nav pins in plugin-approvals, plugin-security and service-settings hold zh-Hant to the same agreement. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cya5ej5GQV86RPbRPK
📓 Docs Drift CheckThis PR changes 1 package(s): 63 hand-written doc(s) name something this change touched — list omitted above 15 rows. Re-derive on the tree named below: ⛔ 19 release-owned page(s) also affected — read-only, see AGENTS.md Documentation Guardrails. What this run could not see
Coarse fallback — 2 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 207fb4b941de851f9d772488aacfb4b531f4b128 && git checkout 207fb4b941de851f9d772488aacfb4b531f4b128
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 1aeeafd9d371be1fd5afa637c4f0ae6b6f4c1404 d104e2b4247de8c39d84c79ab7bcccd7abd220a4 && git checkout -B drift-repro 1aeeafd9d371be1fd5afa637c4f0ae6b6f4c1404 && git merge --no-ff d104e2b4247de8c39d84c79ab7bcccd7abd220a4
node scripts/docs-audit/affected-docs.mjs --json 1aeeafd9d371be1fd5afa637c4f0ae6b6f4c1404
|
|
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW Contract reviewServed-tier: Diff read against merge base ① Derived judgmentsMust-fix: none. Should-fix: none that blocks. Two wording notes, both inherited from
Confirmed, by file. Generated bundles (the shape question):
Translation quality (about 30 leaves read by hand across
Non-bundle source edits, each only adds a
Deviations:
Cross-package pins, read in the merged
Precedent: the shape matches #30870 and #30931 (one changeset, hand bundle per locale, registration row, coverage test widened) and the earlier generated-bundle packages (generated bundle + provenance companion + docstring ② Semver level
③ Boundary flags
④ Design judgmentNo Implemented-by: VERDICT: PASS |
|
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW 维护者速读
席位核对 · ACCEPT · 2026-11-06T14:16Z · #30512 (platform-objects PR 1 of 7, zh-Hant)Head-sha: e8d9055
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 42234781774 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
…added Main's #30935 gave the Account app a `grp_account_ai_assistant` group, renamed the Connect page and both of its nav entries to "Connect an AI Assistant", and moved the Setup entry behind System Overview. The zh-Hant bundle was cut before it, so the app-nav parity test found the new group unlabelled in zh-Hant. zh-Hant now labels the group 「AI 助理」 (the wording plugin-security's zh-Hant bundle already uses for the MCP assistant), reads the page and both entries as 「連接 AI 助理」, and records the new source digests, so none of the four leaves falls back to English. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cya5ej5GQV86RPbRPK
|
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW Contract reviewServed-tier: This is a delta record over record 6686780589, which reviewed head ① Derived judgmentsMust-fix: none. The merge commit is clean. The fix commit is exactly the missing parity. Counted on the head: Wording: #30935 brought nothing else zh-Hant lacks. Between the merge base and ② Semver levelUnchanged from 6686780589: ③ Boundary flags
④ Design judgmentNo Implemented-by: VERDICT: PASS |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 42239113914 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Elon · project thread
domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK
Part of #30512 — package 11 of 11 (
@objectstack/platform-objects), first of its seven locales:zh-Hant. Per the seat's ruling B,ar,fr,pt-BR,ru,deandkofollow one PR each, and the last PR of the series makes the bundle check read the platform locale table.Clause-②: no
Metadata-protocol: none
维护者速读
sys_*)、Studio 里各元数据类型的配置表单、「设置」「Studio」「账户」三个应用的导航、系统概览仪表盘与数据集、平台页面标题,以及用户 / 组织记录页上的内联文案,补上繁体中文(zh-Hant)。zh-Hant这种书写体子标签(否则它一个内联文案都认不出)。回滚即撤 PR。src/apps/translations/setup.translation.ts与src/metadata-translations/index.ts(注册),scripts/i18n-extract.config.ts(--locales加 zh-Hant),然后抽看zh-Hant.ts(导航,约 140 条)和任一生成文件。node scripts/check-i18n-bundles.mjs --filter=platform-objects输出 in sync;pnpm --filter @objectstack/platform-objects test全绿。What changes
zh-Hant.objects.generated.ts(1,674 leaves) andzh-Hant.metadata-forms.generated.ts(1,263 leaves), written by the repo's ownos i18n extract --fill=default --source-hashesfrom the merge baseline, plus its provenance companionzh-Hant.source-hashes.generated.ts.zh-Hant.ts(138 leaves: the Setup, Studio and Account navigation, the System Overview dashboard, the datasets and the platform pages), withzh-Hant.source-hashes.tsrecording the digest of theensource each leaf was translated from: all 138, so the first source edit under any of them falls back instead of serving a superseded translation.SetupAppTranslationsandMetadataFormsTranslationsservezh-HantthroughwithSourceFallback, exactly as the existing three; theappsbarrel exportszhHant.--locales(whatcheck:i18nexecutes) and its merge baseline carryzh-Hant, so the gate covers the new bundles from this PR on. The rootpnpm i18n:extractscript still lists three locales; the final PR of the series moves both it andscripts/check-i18n-bundles.mjsto the platform locale table.zh-Hantentry.Tests
zh-Hant, no assertion changed: in this packageplugin.translations.test.ts,setup-nav-per-user-stores.test.ts,sys-user-details-tab.test.ts,system-overview-null-label.test.ts(these four pin the shipped set and go red without it), and the vocabulary, parity, tombstone, source-hash, BU-rename, metadata-forms, repeater, dashboard-header, confirm-question and identity copy tests (these iterate a fixed list, sozh-Hantis now held to the same bars).zh-Hant:plugin-security's People & Organization nav test (its control pins the Setup locale set and goes red without the new tag);service-settings'setup-nav-hub-parity.test.ts(each Setup sidebar entry reads as its hub card's title);plugin-approvals'approval-status-vocabulary.test.ts(themy_pendingview label equals the account nav'snav_account_approvals: 待我核准).packages/cli/test/platform-page-i18n-parity.test.ts: its inline-map shape test recognised a locale key asxxorxx-YYonly, so with azh-Hantkey present it recognised no map at all (expected 0 to be greater than or equal to 38). The pattern now also accepts a script subtag; the 42 maps are found again and every one is complete in all five shipped locales.Acceptance notes
zh-CNtext, converted with OpenCC's Traditional (Taiwan, phrases) table and then a house glossary of about 170 term rules that matches thezh-Hantbundles nine packages already ship (權限, 類型, 中繼資料, 工作階段, 權杖, 金鑰, 檢視, 欄 / 列 for column / row, 套件, 範本, 稽核, 共用, 指派, 核准, 電子郵件, 唯讀, 逾時, 背景工作, …). 446 leaves whose English andzh-CNpair already has azh-Hantrendering elsewhere in the repo reuse it verbatim. Every one of the 1,541 distinct short leaves was read, and the long help texts were reviewed by sample and by a targeted audit of each rule that rewrites words in context (row / column, 應用 / 應用程式, 按 / 依, 通過 / 透過).zh-CN: backtick spans,{{holes}},{holes}, angle tokens and snake_case identifiers byte-identical (three intended differences, all Chinese prose inside a hole default or a JSON example:default:'該成員',"已封存"); no Simplified-only character remains (the only s2t remarks are the Taiwan forms 台, 准, 群, 游, 里).nav_account_approvals= plugin-approvals'my_pending(待我核准);nav_assignment_rules= i18n(plugin-sharing): ship the assignment rule object in all eleven platform languages #30856's object name (指派規則); the queue, sharing, approval-delegation and HTTP-delivery entries read as their objects'zh-Hantlabels; eachnav_settings_*entry reads as its settings hub title from i18n(service-settings): ship the built-in settings pages in zh-Hant, ar, fr and pt-BR #30870 (so 郵件投遞 / 簡訊投遞 there, while the HTTP delivery log says 傳送).objectsleaveszh-CNalready decided as echoes (ID,JWKS,Client ID, the SSO placeholders, …), each recorded by the extractor inzh-Hant.source-hashes.generated.ts, and three hand leaves (Webhooks,Studio,AI).zh-CN'saction.fields.method.helpTextis the LatinGET / POST / PUT / DELETE, not the source; a converted copy made two locales agree on it andcheck:i18n-stale-fillreported it.zh-Hantnow translates it (HTTP 方法(GET、POST、PUT、DELETE)); the stale-fill check passes with the baseline untouched. Thezh-CNleaf itself is left as it is (existing fills are out of this card's scope).osfollowed by a lowercase word (check-cli-command-idspasses), and the whole "Lint · docs & code guards" lane was run locally before opening.Verification
Package suites, typecheck, build (verify lock)
i18n gates, the derived families and the docs & code guards lane
The branch is one commit on
main33043bd8(after #30931 landed); every number above was measured at that head. Main's commits since the earlier draft (#30846, #30919, #30929, #30931) touch no file this PR changes.Dogfood: not run — content-only package PR, no
!in the title and no(narrowing)arm.Generated by Claude Code