Repository navigation
fix(console,i18n): a settings row's chips read in the session's language (objectui#12821) - #12878
Merged
objectstack-fleet[bot] merged 1 commit intoOct 17, 2026
Merged
Conversation
…age (objectui#12821) The env-lock chip "Locked by env", its fallback title, the Deprecated chip and the unsupported-specifier row were JSX literals. They now read console.settingsView.* keys present in all ten packs; English output is unchanged. An enumeration pin over apps/console/src/pages/settings/*.tsx holds the class: no JSX text, rendered child string, title or aria-label is a bare literal. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Contributor
✅ 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
|
objectstack-fleet
Bot
deleted the
claude/issue-12821-settings-chip-i18n
branch
October 17, 2026 11:32
This was referenced Oct 17, 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.
Fixes #12821
Clause-②: no
What changed
Every chip on a console settings row now reads in the session's language. Each one draws a
console.settingsView.*key that has a real translation in all tenpackages/i18npacks. English output is byte-for-byte unchanged (pinned).EnvLockBadge)Locked by envliteralenvLockBadgePinned by environment variable — cannot be edited from the UI.literalenvLockBadgeTitleDeprecatedchip (FieldHeader)DeprecatedliteraldeprecatedBadgeDeprecatedchip with a replacementDeprecated+ template→ replacedBydeprecatedBadgeReplacedBy(one sentence,{{replacedBy}})Unsupported specifier type:+ typeunsupportedSpecifierType({{type}})This follows PR #12819 (objectui#12694): same namespace, one sentence per variant with an interpolation hole rather than glued fragments, and an every-pack pin. No new namespace was added.
Out of scope, unchanged: a served
lockedReason(the server's "Set via env: NAME") is still the title as served. A test pins that.Pins
SettingsField.chipLocale-12821.test.tsxDeprecatedchip, with and without a replacement, reads zh.Locked by env, the old fallback title,Deprecated,Deprecated → country_code, andUnsupported specifier type: not_a_type.settingsPage.noBareLiterals-12821.test.ts(d) is the enumeration pin.*.tsxdirectly underapps/console/src/pages/settings/from disk and blanks comments withscripts/js-comment-mask.mjs.title/aria-labelvalue carries a letter (\p{L}).?:, either side of??/||, the right of&&, or a template's text.t()calls (includingdefaultValue),classNameand comments.mainit finds exactly four literals, and all four are fixed here: the twoEnvLockBadgeliterals,Deprecated, andUnsupported specifier type:. SettingsHub, SettingsView and WorkspaceTimezonePrompt were already clean.Ablation (one-time, run at
30d5e5268d)ablation-replace.mjs(objectstack). It put the literalLocked by envback in place of the chip'st()call: anchor x1 to x0, blobfd50404c4be7toa4a9f689a5eb.Tests 3 failed | 21 passed (24).EnvLockBadge.tsx.fd50404c4be7, andgit diff HEADis empty.Gates (all at HEAD
30d5e5268d)pnpm --filter @object-ui/i18n --filter @object-ui/console run type-checkexits 0.turbo run build --filter='@object-ui/console^...': 34/34 tasks.tsc --listFilesconfirms that both new test files andjs-comment-mask.mjsare in console's program.--maxWorkers=1):packages/i18n/: 83 files, 1325 passed, 13 skipped, exit 0.apps/console/: NOT MEASURED, because it timed out at 570s under the lock (exit 124).apps/console/src/pages/settings/passed (20 files, 173 tests). Every test outside that dir that namesEnvLockBadge,SettingsFieldorpages/settingsalso passed (4 files, 33 tests:select-placeholder-literal-11252,App.homePermissions-12700,AppContent.approvalRecordReads,AppContent.systemHubRoutes).eslint(inline config on, as each package'slintscript runs it) gives 0 errors and 2 warnings. Both warnings are pre-existingno-explicit-anylines inSettingsField.tsx.eslint.config.js:**/*.{ts,tsx}blocks.--format jsonoutput.parserOptions.project/projectService, so linting is not type-aware and this diff cannot move a verdict on an untouched file.check:phantom-deps,self-import,unreferenced-sources,doc-example-readers,handler-key-reads,side-effects-array,element-data-source-declaration,spec-symbols,action-forward-parity,designer-field-key-parity,icon-record-names,i18n-keys,i18n-drift,i18n-designer-parity,control-bytesi18n-dead-keys: none of the five new keys is a candidate.node scripts/check-hand-rolled-comment-mask.mjs,node scripts/check-changeset-fixed.mjs,check-changeset-presence,check:new-line-citationscheck:spec-floorsexits 1. This diff touches nopackage.json, so it is recorded, not fixed.Acceptance notes
A1 is confirmed: the
Deprecatedchip has zero producers.origin/maineda6f14b7b,git grep 'deprecated\s*:'over*manifest*.tshits only the spec declaration insettings-manifest.zod.ts.valueDomain\s*:hitscompany.manifest.tsandlocalization.manifest.ts.zh strings follow the pack's existing punctuation (ASCII colon and comma, as in
lockedByEnvandcryptoRefusal*).For
ar, the replacement arrow is←, so it points toward the replacement in RTL reading order. Every other pack keeps→.Adds no product-specific widget, dialog, hook or string (see AGENTS.md › Product-neutral renderer)
Generated by Claude Code