feat(i18n): make action resultDialog copy translatable (schema slot + resolver + platform bundles)#3347
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📓 Docs Drift CheckThis PR changes 3 package(s): 110 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
… resolver + platform bundles)
The one-shot secret-reveal dialogs (create-user temporary password, 2FA
backup codes, OAuth client secrets) always rendered hardcoded English:
the translation protocol had no slot for Action.resultDialog, so neither
the bundles nor any resolver could localize the dialog's title,
description, acknowledge button, or field labels.
- spec: add ActionResultDialogTranslationSchema and hang it off object
`_actions`, `globalActions`, and the object-first `_actions` node.
`fields` is keyed by the LITERAL result-field path ("user.email") —
keys may contain dots, resolvers index the record directly. New
resolveActionResultDialog overlay resolver, wired into translateAction.
- cli: `os i18n extract` emits resultDialog.title/description/acknowledge
and resultDialog.fields.<path> entries (dotted paths stay one segment).
- platform-objects: fill the en / zh-CN / ja-JP / es-ES bundles for all
six shipped resultDialogs (sys_user create_user + set_user_password,
sys_two_factor enable + regenerate backup codes, sys_oauth_application
register + rotate secret).
Client-side rendering lands in objectui (@object-ui/i18n
actionResultDialog + result-dialog handlers). Verified end-to-end against
a live showcase instance: the create-user and set-password dialogs render
fully localized in zh-CN.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… reference doc - The dots-preserved assertion in i18n-extract.test.ts embedded two raw NUL bytes (0x00) as join separators, tripping the raw-NUL-byte guard -- use the unicode escape sequence instead (byte-identical at runtime). - Regenerate content/docs/references/system/translation.mdx for the new resultDialog translation node (gen:schema + gen:docs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…I surface snapshot Additive only (4 new exports, 0 breaking) -- the resultDialog translation schema/type and its slots on the action translation nodes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
akarma-synetal
pushed a commit
to akarma-synetal/framework
that referenced
this pull request
Jul 20, 2026
…d + Console) Continues the v16 page from the latest front/back-end code. Since the rc.0 cut, 9 backend changesets landed and the objectui pin advanced 94d4876 -> af1b0db (objectui objectstack-ai#2706-objectstack-ai#2736). Sourced from each repo's own changesets. - Retitles the now-stale 'pending the next console pin' subsection: those 4 frontend items (objectui#2701/objectstack-ai#2706/objectstack-ai#2707/objectstack-ai#2708) are now bundled as the pin advanced; points to the new running section. - Adds a 'Landed since 16.0.0-rc.0' section: - Breaking/behavior: aiStudio/aiSeat alias removal (objectstack-ai#3308); date-arithmetic now a build-time error (objectstack-ai#3306); checkboxes per-option visibleWhen + string option matching (objectstack-ai#3350). - New backend: formula null-guard/floor/ceil (objectstack-ai#3306); engine-owned managedBy bucket (ADR-0103 addendum, objectstack-ai#3343); approvals viewer gating (objectstack-ai#3344) + decision attachments (objectstack-ai#3332); discovery transactionalBatch bit (objectstack-ai#3298); action resultDialog i18n (objectstack-ai#3347); collab-notification/storage localization + wired notifications REST routes (objectstack-ai#3354). - Console (now bundled): option-widget visibleWhen parity, approvals-inbox server-viewer gating + composer retirement, related-list pagination, inline-analytics renderer retirement, authenticated api-fetch threading, result-dialog i18n, engine-owned bucket UI, write-failure surfacing. - Adds aiStudio/aiSeat and date-arithmetic to the upgrade checklist; updates the Console-section intro for the advanced pin. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AHVoqyH9VAjmbyMN1Ri2jf
This was referenced Jul 20, 2026
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.
Problem
The post-success
resultDialog(create-user temporary password, 2FA backup codes, OAuth client secrets) always rendered hardcoded English — even on fully-translated locales. Root cause: the translation protocol had no slot forAction.resultDialog, so neither the bundles nor any resolver could localize the dialog's title, description, acknowledge button, or field labels.Changes
_actions.<action>(object + object-first node) andglobalActions.<action>gain an optionalresultDialogtranslation node (ActionResultDialogTranslationSchema):title,description,acknowledge, andfieldskeyed by the literal result-field path (e.g."user.email"— keys may contain dots; resolvers index the record directly, never split on.). NewresolveActionResultDialogoverlay resolver, wired intotranslateAction. json-schema manifest regenerated.os i18n extractemits the newresultDialog.title/description/acknowledgeandresultDialog.fields.<path>entries (dotted paths stay one segment), so coverage/skeleton generation see them.sys_user.create_user,sys_user.set_user_password,sys_two_factor.enable_two_factor,sys_two_factor.regenerate_backup_codes,sys_oauth_application.create_oauth_application,sys_oauth_application.rotate_client_secret.Purely additive — untranslated locales keep falling back to the metadata literals. Client-side rendering lands in objectstack-ai/objectui (
actionResultDialogresolver + result-dialog handlers).Testing
pnpm build(71 tasks) green🤖 Generated with Claude Code