Repository navigation
fix(app-showcase): translate the zh-CN first screens the bundle left in English - #25535
Merged
objectstack-fleet[bot] merged 3 commits intoOct 23, 2026
Merged
Conversation
…in English A zh-CN session saw a translated sidebar above English page headings, an English Delivery Operations KPI row, English project status / health / label options next to Chinese task statuses, untranslated Expense Report, Business Unit and Cascading Select lists, the Contacts description, and English task actions and toasts (Mark Done, Log Time, Archive, Reassign…, Open Docs, "Task marked done."). Adds the zh-CN keys for those surfaces, reusing the words the bundle already gives the same ideas (sidebar labels, task status options, 工时, 重新分配), and ratchets the showcase row of the i18n coverage baseline down to the measured count, 414 -> 320. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy
The coverage ratchet measures the showcase with one count, so a first-screen key could be traded for an obscure one unseen. The sweep names the landing pages, the Delivery Operations dashboard, the object lists the sidebar opens and the task's actions, derives every string each declares from the composed stack, and requires a real zh-CN value for it. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy
Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy
This was referenced Oct 23, 2026
Contributor
Author
席位核对 · ACCEPT · 2026-10-23T20:52Z
Generated by Claude Code |
objectstack-fleet
Bot
deleted the
claude/issue-25505-showcase-zh-cn-keys
branch
October 23, 2026 21:15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Sales · project thread
Fixes #25505
Clause-②: no
Metadata-protocol: none
What changed
In a zh-CN session the showcase's sidebar was translated, but the screens it opens were mostly English. This PR adds the zh-CN keys for those first screens to
examples/app-showcase/src/system/translations/index.ts, and moves the showcase row ofscripts/i18n-coverage-baseline.jsondown to the measured count, 414 → 320.pages.NAME.label, pluspages.showcase_my_work.subtitledashboards.showcase_ops_dashboard.*objects.showcase_expense_report,objects.showcase_business_unit,objects.showcase_cascadestageoptionsobjects.showcase_contactobjects.showcase_projectobjects.showcase_task._actions.*The wording reuses the words the bundle already has for the same ideas. Each page heading and the dashboard label use its sidebar entry's word (能力地图, 我的工作, 审批, 任务看板, 进行中的项目, 交付运营). Project
plannedis 计划中, as in the existingproject_status_flowmessage. Awaiting Review is 待评审, matching the task's 评审中 option. Total Budget is 总预算, as in the command center'scc_k6. 工时 and 重新分配 come from the recalc actions and the reassign flow. 合计 is the invoice'stotal.Quick View and New Task are not on the card. They sit in the same task row and toolbar as the actions the card lists, so leaving them out would have left English next to Chinese in the same menu. The Contacts
stageoptions are on the same Contacts list the card names.Landing: this is the file surface the claim names. Measured with
os lint examples/app-showcase/objectstack.config.ts --json, all 94 keys that disappear are on the surfaces listed above, and no new key shows up. The non-i18n issue count is unchanged (79 before and after). Sevenfield-no-consumerssuggestions only change from "inert" to "carrier-only", because the bundle now names those fields.No contract gap. The card guessed that page
titleand actionsuccessMessagemight have no key. Both do have keys.TranslationBundledeclaressuccessMessage(packages/spec/src/system/translation.zod.ts), andtranslatePagereadspages.NAME.title/subtitle(packages/spec/src/system/i18n-resolver.ts). The page heading the card saw is each page'slabel, and the My Work header'stitleresolves through the label key because it equals the label (resolvePageHeaderTitle).packages/specis not touched.Tests
The showcase already has a coverage-pin pattern:
test/seed.test.ts's section sweep (#8231), which requires a non-empty, non-ASCII zh-CN value for every named section. I extended that pattern withshowcase zh-CN first screens are translated (#25505). It names the five objects, five pages, the ops dashboard and the task's actions. From the composed stack it derives every label, plural, description, field label, option, widget title, action label andsuccessMessagethat each one declares, and it fails on any of them that is missing or echoed in ASCII. There is also one vacuity guard per surface. The baseline is a single count, so it cannot see a first-screen key traded for an obscure one, and this pin can.b2411c001d, tree only, and the blob matched the base. The sweep then went red: 12 failed / 1 passed (every surface red, guard green). Restored withgit checkout HEAD -- PATH, the blob matched HEAD again:cb0f979923.4ddea0ee7d, after mergingorigin/main:pnpm --filter @objectstack/example-showcase typecheckexit 0 (the tsc program includestest/seed.test.ts).pnpm --filter @objectstack/example-showcase test: Test Files 38 passed (38), Tests 474 passed (474).pnpm check:i18n-coverageat4ddea0ee7d:check-i18n-coverage: OK (14 config(s), 527 baselined untranslated string(s), none new).The baseline was written by the script's own--update, and only the showcase row moved.Gates
node scripts/pm/dispatch-gates.mjs --commandsat4ddea0ee7dderives 54 commands. I ran all 54 locally, and all 54 exit 0.pnpm check:dual-build-cjs-loadsfirst exited 3 with PREREQUISITE NOT MET: seven unrelated packages had nodist/in this worktree. After building them it exited 0. Reconciliation with--ran:54 derived famil(ies) accounted for — 54 run, 0 NOT-MEASURED (a DERIVED zero — all 54 recorded an exit code and none of them is 3). The families CI runs are read from this PR's check-runs.Changeset
None, and the PR carries
skip-changeset.@objectstack/example-showcaseisprivate: trueand publishes nothing.scripts/i18n-coverage-baseline.jsonis repo-root tooling. This matches the precedent of the last showcase fix, #25525.Acceptance notes
bulkActions(label, confirmText and params, 17 keys); the expense / invoice line objects; the Field Zoo, semantic-zoo, inquiry, private-note, announcement and external-datasource objects; the other two dashboards' widgets; the datasets; and the remaining page labels.task_statusfilter options (待办池 / 待处理 / 审核中, from earlier work) differ from the task's own options (待规划 / 待办 / 评审中). This PR does not change them, because the card does not name them.🤖 Generated with Claude Code
https://claude.ai/code/session_016g7nYP9wdNx1GDa5XDr7Uy