feat(i18n): extract sandbox + all remaining UI areas to the i18n dictionaries#4971
Merged
Conversation
rafavalls
force-pushed
the
viktormarinho/i18n-extract-sandbox
branch
from
July 22, 2026 13:21
f21eff1 to
0a84270
Compare
rafavalls
enabled auto-merge (squash)
July 22, 2026 13:47
…ionaries Completes the i18n extraction phase across the whole web UI: ~3,900 keys in 33 per-domain dictionary files (en + pt-BR), covering sandbox, chat, registry, orgs, sections-editor, monitoring, task-board, library, reports, virtual-mcp, home, admin, onboarding and misc components, layouts and routes. pt-BR completeness is enforced by satisfies checks, so bun run check proves translation coverage. Beyond the mechanical extraction: - APPROVAL_LEVEL_OPTIONS carries labelKey/shortKey translation keys; chat surfaces render them via t() - TFunction/TranslationKey exported from use-t.ts and threaded through helpers that receive t as a parameter - pt-first surfaces (commerce onboarding, reports, related banners) keep their original Portuguese copy as the en value — their audience and e2e contract are Portuguese by design - conditional useT() declarations hoisted to component tops (they crashed the tree with hook-order violations when branches flipped) - useLocalStorage tolerates missing localStorage; component tests wrap renders in QueryClientProvider where components now resolve copy via useT; the mobile tab-label unit test passes a real t built from the en dictionary History note: this squashes the branch (fleet extraction, repair passes and four main merges) into one commit on top of main; the tree is byte-identical to the CI-green merged state. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
viktormarinho
force-pushed
the
viktormarinho/i18n-extract-sandbox
branch
from
July 22, 2026 15:57
82af4a5 to
4c6b896
Compare
decocms Bot
pushed a commit
that referenced
this pull request
Jul 22, 2026
PR: #4971 feat(i18n): extract sandbox + all remaining UI areas to the i18n dictionaries Bump type: minor - decocms (apps/mesh/package.json): 4.96.0 -> 4.97.0 - @decocms/mesh-sdk (packages/mesh-sdk/package.json): 1.28.0 -> 1.29.0 - @deco/ui (packages/ui/package.json): 1.4.0 -> 1.5.0 Deploy-Scope: web
rafavalls
added a commit
that referenced
this pull request
Jul 22, 2026
Resolve conflicts between the top-bar redesign and main: - Tasks/Library/runtime-switcher toggles: keep the redesign that folds the agent-independent overlays into the main-panel tab bar; drop the now-orphaned library-toggle / tasks-toggle / runtime-switcher files. - Port main's features into the redesign: reports-only hides the Library overlay (#4711), task board graduated out of its org flag (#4883, dropped useTaskBoardEnabled), i18n strings (#4971), and the new Connect-to-Claude footer action (#2765). - sidebar footer: keep the redesign's unified account row (Settings tucked into a bottom-right icon) but restore the reports-only trimmed extra-actions variant. - preview: keep the redesign's header-portal structure over main's inline toolbar; main's a11y/focus/reload fixes auto-merged and are preserved. Verified: tsc --noEmit, oxlint (0 errors), knip (clean).
pedrofrxncx
added a commit
that referenced
this pull request
Jul 23, 2026
… dialog (#5099) The delete dialog in the sandbox file explorer (title, description, unsaved- changes warning, and buttons) was hardcoded in English, missed by the sandbox i18n sweep (#4971). pt-br users see raw English strings when deleting a file or folder. Wires it through useT() following the existing FileExplorerNameDialog / DeleteConnectionDialogs pattern (translated prefix + untranslated inline filename span).
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.
Summary
Final extraction PR of the i18n effort (mechanism: #4959, settings area: #4964). Covers everything that was left: sandbox, chat, registry, orgs (connections/members/monitoring), sections-editor, task-board, library, reports, virtual-mcp, home, admin, onboarding, and remaining components/layouts/routes.
3,941 keys now live in 32 per-domain dictionary files (en + pt-BR), each pt-BR file type-checked complete via
satisfies—bun run checkremains the translation-completeness proof. English UI copy is unchanged (values extracted verbatim).How it was produced
useT,labelKeyfields typed asstring, undefined-unsafe interpolation vars,label→labelKeycall sites).APPROVAL_LEVEL_OPTIONSnow carrieslabelKey/shortKeytranslation keys and chat surfaces render viat()— closes the known seam from feat(i18n): zero-dep i18n module with pt-BR support and language preference #4959.TranslationKeyre-exported fromuse-t.ts;TFunctionthreaded through helpers receivingt.Verification (deterministic, not vibes)
tsc --noEmit(apps/mesh): 0 errors — everyt()key literal-checked against the union.{var}sets for all keys (4 benign en-only{plural}vars where pt uses parenthetical forms).{count, plural, ...}forms replaced with plain{var}in 14 keys).Collateral hardening
useLocalStorageguards a missinglocalStorage(non-browser render contexts get defaults) — components that now resolve copy viauseTno longer explode in polluted test environments.QueryClientProvider; the pure-logic test for mobile tab labels passes a realtbuilt from the en dictionary (no mocks).Known deferrals (TODO(i18n), per AGENTS.md convention)
Module-scope Zod validation messages and JSX-interleaved rich-text sentences (~30 spots) are marked for a manual pass. Server-originated error messages and transactional emails remain deliberately out of scope.
Testing
bunx tsc --noEmit(apps/mesh) ✅ 0 errorsbun test apps/mesh/src/web✅ no regressions vs mainbun run lint✅ 0 errors ·bun run fmt✅ · knip clean🤖 Generated with Claude Code
Summary by cubic
Finished extracting sandbox and all remaining UI into i18n with full
pt-BRcoverage, locale‑aware time, and a one‑time auto‑switch heads‑up for Portuguese‑browser users; merged latestmain.~3,900 keys across 33 per‑domain dictionaries (
en,pt-BR), literal UTF‑8; type‑checked complete viabun run check.New Features
language-announcement-dialogwith auto‑switch for Portuguese browsers and quick revert; commerce‑onboarding language switcher is now a dropdown (EN,PT-BR).labelKey/shortKey; threadedtthrough helpers (model selectors, uploader, tools popover); relative time respects the selected locale.Bug Fixes
enwhere intended.useTout of conditional branches to fix hook‑order crashes; adjusted helpers that receivet.useTinQueryClientProvider(assistant, tier‑trigger, tiptap input, propose‑plan); fixeddate-fnspt-BRlocale imports and ensured dictionaries are literal UTF‑8.Written for commit 4c6b896. Summary will update on new commits.