i18n: extend French translations beyond pilot scope #949
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#949
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
User story
As a French-speaking operator, I want the entire dashboard UI translated to French (not only login + onboarding + appearance/language settings), so that switching to
frdoesn't drop me back into English on every working surface.Context
PR/commit
45e37571 feat(i18n): add French (fr) pilot localeshipped Paraglide wired through/$locale/routes with 38 message keys. Coverage today (apps/web/messages/{en,fr}.json):login_*onboarding_*settings_appearance_*settings_language_*error_*Everything else is hardcoded English string literals. Visible regression: visiting
/app/fr/planner/boardrenders the board in English.Acceptance criteria
Routes — extract strings to messages, render via
m.*routes/$locale/index.tsx(landing)routes/$locale/planner.tsx+planner.index.tsx+planner.board.tsxroutes/$locale/agents.tsx+agents.index.tsx+agents.$type.index.tsx+agents.$type.$instance.tsx+agents.$type.setup.tsxroutes/$locale/flows.tsx+flows.index.tsx+flows.new.tsx+flows.$flowId.tsx+flows.$flowId.versions.tsx+flows.$flowId.v.$version.tsxroutes/$locale/specs.tsx+specs.index.tsx+specs.$specName.tsxroutes/$locale/workspace.tsx+workspace.index.tsxroutes/$locale/issue.$owner.$repo.$issueNumber.tsxroutes/$locale/settings.tsx+settings.index.tsxroutes/$locale/settings.repos.tsxroutes/$locale/settings.labels.tsxroutes/$locale/settings.secrets.tsxroutes/$locale/settings.voice-input.tsxroutes/$locale/settings.agents.tsx+settings.agents.admin.tsx+settings.agents.config-history.tsx+settings.agents.per-agent-secrets.tsxroutes/$locale/settings.agent-config.tsxroutes/$locale/settings.agent-types.tsxroutes/$locale/settings.service.tsx+ everysettings.service.*child (ai-providers, container, design, forge, watchdogs, index)Shared components — same treatment
components/app-shell.tsx(already partially usesm.*— finish)components/board/*(column headers, empty states, filters, side panel, agent tooltips)components/planner/*(composer, transcript, sessions-pane, markdown assistant)components/avatar-menu.tsxcomponents/multiselect-combobox.tsxcomponents/settings-side-nav.tsxcomponents/workspace-command-palette.tsxcomponents/markdown-assistant-drawer.tsxfeatures/agents/sections.tsxfeatures/flows/*(FlowAssistantPanel, InputRefPicker)features/service-config/design-section.tsxlib/format.ts(date/relative-time strings if any)Message file hygiene
planner_*,agents_*,flows_*,specs_*,workspace_*,issue_*,settings_<sub>_*,board_*,app_shell_*,command_palette_*.en.jsonandfr.jsonstay in 1:1 key parity (CI check is desirable — see follow-up)._one/_other) where counts appear (e.g. cards, agents, repos)."{count} cards selected").Tests
*.test.tsxcontinues to pass.frlocale and asserts a known French string renders.Out of scope
lib/api.tserror mappers — already covered byerror_*keys; only verify, do not re-translate.References
45e37571 feat(i18n): add French (fr) pilot localeapps/web/project.inlang/settings.json(languageTags: ["en", "fr"])/app/fr/planner/boardrendered in English (2026-05-08).