Repository navigation
feat(console): second-pass i18n for Audit Log, Flow Runs, Agent Connect and share links - #13503
Conversation
Audit Log, Flow Runs, the Integrations page's agent card, the share-link dialog and the shared-record landing, translated in all ten packs. Claude-Session: https://claude.ai/code/session_018yk9f7S7q4BrEeWZGRcTKF Co-authored-by: Claude <noreply@anthropic.com>
…ct and share links Part of objectui#13460. System -> Audit Log, Developer -> Flow Runs, the "Connect an AI agent" card, ShareDialog and the /s/:token share landing now read console.system.auditLog.*, console.developer.flowRuns.*, console.developer.agentConnect.*, shareDialog.* and sharedRecord.* with en inline defaults. Error states are kept as codes and worded at render. The dev-only PerformanceDashboard moves to apps/console/src/dev/ and the components package's debug/ folder moves to dev/; exports are unchanged. Clause-②: no Metadata-protocol: none Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018yk9f7S7q4BrEeWZGRcTKF
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
席位核对 — ACCEPT · PR #13503 @
|
Part of objectstack-ai/objectstack#25916
Clause-②: no
Metadata-protocol: none
Claim: comment 6393192822 (Seat: domain:ui#4).
What changed
Second pass of objectstack-ai/objectstack#25916, following the conventions of #13489:
useObjectTranslation()witht(key, { defaultValue })where the inline default is theenvalue byte for byte, andwithSlotsfor a sentence with an inline element. No new lint gate.AuditLogPage.tsx) readsconsole.system.auditLog.*: the header, the presets row (a refused preset's reason is now a code, worded at render), the filters, the empty and error states, the table heads, the pagination and the detail drawer.formatDateis untouched (plugin-list, plugin-map, plugin-timeline: the record preview overlay is a raw Object.entries dump in four views while five views render RecordDetailPanel — plus four byte-identical helpers to collapse #13458 is waiting on a ruling).FlowRunsPage.tsx) readsconsole.developer.flowRuns.*. "Click Run Flow" and "the Test Run panel" name those controls by their translated labels, and "Paused at screen" puts the node name in a slot.AgentConnectSection.tsx) readsconsole.developer.agentConnect.*. The disabled notice and the steps keep their inline code inside one translated sentence. Copy, Done and Download reuse existing keys.packages/components) readsshareDialog.*. The expiry and audience choices are literalt()calls built per render, so the dead-key and call-site gates read them. A failure keeps the server's message, or names the step that failed in the viewer's language./s/:token(SharedRecordPage.tsx) readssharedRecord.*. Failures are kept as codes and worded at render.dev/.apps/console/src/components/PerformanceDashboard.tsx(no importers) moved toapps/console/src/dev/.packages/components/src/debug/moved topackages/components/src/dev/. The package index re-exports./dev, so its exports are unchanged.Tests
apps/console/src/pages/consolePagesLocale-secondPass-13460.test.tsxrenders the four console surfaces under zh through a realI18nProvider, reads its expectations from the pack, and checks that no{{slot}}or slot mark leaks. Each surface also has a provider-less English control.packages/components/src/__tests__/share-dialog-locale-13460.test.tsxcovers the ShareDialog chrome under zh, therecordLabelhole, and an English control.AgentConnectSection.keyNameConfirm-13383.test.tsxqueries the new echoed keys.displayLocale-9909.test.tsxandariaLabelLiteralCensus-12145.test.tsfollow thedebug/todev/move.Verification
vitest run packages/i18n/: 87 files, 1353 tests passed, 13 skipped.turbo run type-checkfor console, components and i18n: 38 of 38 tasks passed.check-i18n-call-site-keys,check-i18n-en-drift,check-i18n-designer-table-parity: pass.check-i18n-dead-keyslists none of the new keys.check-changeset-presence,check-changeset-no-major,check-changeset-claims,check-pending-changeset-literals,check:new-line-citations: pass.Acceptance notes: what is left for objectstack-ai/objectstack#25916
These are not in this PR:
*-preview.tsxdev entries (not moved), and the copy insideapps/console/src/dev/*The brand lines "Powered by ObjectStack" and "Read-only · Shared via ObjectStack" on the share landing are left literal on purpose.
metadata-admin/datasource/**(#13353) and the threeformatDatehelpers (#13458) are excluded as the claim asks.Deviation: commit 58af2ad ends with a harness-supplied
Co-Authored-Bytrailer that names the model, not the model-free pair from AGENTS.md. History is not rewritten, because force-push is forbidden here. Please drop that line from the squash message when landing.🤖 Generated with Claude Code
https://claude.ai/code/session_018yk9f7S7q4BrEeWZGRcTKF