Add French (fr) interface language by Guiraud · Pull Request #4742 · dyad-sh/dyad · GitHub
Skip to content

Add French (fr) interface language - #4742

Open
Guiraud wants to merge 3 commits into
dyad-sh:mainfrom
Guiraud:feat/i18n-french
Open

Guiraud wants to merge 3 commits into
dyad-sh:mainfrom
Guiraud:feat/i18n-french

Conversation

@Guiraud

@Guiraud Guiraud commented Oct 4, 2026 •

Copy link
Copy Markdown

Focused follow-up to #4705, which was closed because it mixed in unrelated changes. This PR contains only the French translation: no renaming, no default-language change, no Ollama or packaging work.

Changes

  • src/i18n/locales/fr/*.json: French catalogs for common, settings, chat, home and errors, in sync with the current en keys on main.
  • src/i18n/index.ts: registers the fr resources.
  • src/components/LanguageSelector.tsx: lists "Français" (fr is already in LanguageSchema).
  • Tests:
    • src/i18n/fr_locale.test.ts: key and {{placeholder}} parity with en, one i18n.t lookup per namespace so a missing registration fails, and French plural forms.
    • test_gate_locales.test.ts and SubscriptionStatusBanner.test.tsx cover fr.
  • Docs: rules/i18n.md and PRODUCT.md list the current locales and the French non-breaking-space convention (  escape before :, ?, ! and inside « »).

The cubic review notes from #4705 that apply to these files are addressed: namespace registration coverage,   escapes and the stale locale count.

Testing

  • npx vitest run src/i18n src/components/SubscriptionStatusBanner.test.tsx: 41 passed
  • npm run ts, prettier --check and oxlint are clean.

🤖 Generated with Claude Code

Review in cubic

@Guiraud
Guiraud requested a review from a team October 4, 2026 21:10

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 12 files

Confidence score: 5/5

  • In src/i18n/locales/fr/home.json, buildMeA uses the informal “Crée-moi” while the other French strings use the formal register. Align it with the catalog’s formal tone.
Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="src/i18n/locales/fr/home.json">

<violation number="1" location="src/i18n/locales/fr/home.json:8">
P3: `buildMeA` uses the informal imperative "Crée-moi", while every other user-facing string in the French catalogs uses the formal register (settings: "Saisissez", "Choisissez", "Mettez à jour"; home.setup: "Cliquez"). Mixing tu/vous registers is jarring to French users. Use the formal form: `"Créez-moi un(e) {{label}}"`.</violation>
</file>

Reply to a comment to ask cubic a question or push back. It learns from your replies.

Re-trigger cubic

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: buildMeA uses the informal imperative "Crée-moi", while every other user-facing string in the French catalogs uses the formal register (settings: "Saisissez", "Choisissez", "Mettez à jour"; home.setup: "Cliquez"). Mixing tu/vous registers is jarring to French users. Use the formal form: "Créez-moi un(e) {{label}}".

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At src/i18n/locales/fr/home.json, line 8:

<comment>`buildMeA` uses the informal imperative "Crée-moi", while every other user-facing string in the French catalogs uses the formal register (settings: "Saisissez", "Choisissez", "Mettez à jour"; home.setup: "Cliquez"). Mixing tu/vous registers is jarring to French users. Use the formal form: `"Créez-moi un(e) {{label}}"`.</comment>

<file context>
@@ -0,0 +1,928 @@
+  "settingUp": "Nous configurons votre application grâce à la magie de l'IA.",
+  "mightTakeMoment": "Cela peut prendre un instant...",
+  "moreIdeas": "Plus d'idées",
+  "buildMeA": "Crée-moi un(e) {{label}}",
+  "failedCreateApp": "Échec de la création de l'application. {{error}}",
+  "failedCreateChat": "Échec de la création du chat. {{error}}",
</file context>
Suggested change

claude and others added 3 commits October 5, 2026 20:03
Register the fr catalogs (common, settings, chat, home, errors) with
i18next, list Français in the language selector, and cover it with a
key and placeholder parity test plus a localized billing banner case.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HfGXChcifsLyZoBLEctxXA
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
- Add the 15 English keys added on main since the French catalogs were
  written (safety review, queued test runs, dev server, preview auth).
- Write French non-breaking spaces as the   JSON escape, as
  rules/i18n.md requires.
- Assert one key per namespace through i18next so dropping fr from a
  namespace in src/i18n/index.ts fails the test.
- Drop the stale "other four locales" count in rules/i18n.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the needs-human:review-issue ai agent flagged an issue that requires human review label Oct 5, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-human:review-issue ai agent flagged an issue that requires human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants