Skip to content

Add French (fr) locale with polite vous form#61

Merged
AdaInTheLab merged 1 commit into
mainfrom
feature/i18n-french
May 9, 2026
Merged

Add French (fr) locale with polite vous form#61
AdaInTheLab merged 1 commit into
mainfrom
feature/i18n-french

Conversation

@AdaInTheLab
Copy link
Copy Markdown
Collaborator

Summary

Second of three planned language additions (German shipped in #59, Spanish queued next). French, polite vous form throughout.

What's in the locale

  • Full mirror of `en.ts` (~250 keys across 30 namespaces) translated to French
  • Polite form (`vous`) — appropriate register for an admin tool
  • Technical proper nouns kept in English: Steam, EAC, telnet, Cloudflare, Discord, IANA, BBGGRR, etc.
  • Game-specific terms use the conventional 7D2D-FR renderings: « Lune de sang », « Z-Kills », etc.
  • Action buttons in standard French UI infinitive form (Enregistrer, Modifier, Supprimer, ...)
  • Browser auto-detect extended — visitors with `fr-*` locale (fr-FR, fr-CA, fr-BE, etc.) land on French automatically
  • broadcastsHint translated to French (the language-switcher tooltip flagging that in-game broadcasts don't auto-translate)

Quality note

This is a competent first pass, not a professional localization. Common UX surfaces should read naturally; the deeper config-editor field labels are direct translations and would benefit from a domain-fluent native-speaker polish. PRs welcome.

Files

File What
`frontend/src/i18n/locales/fr.ts` New
`frontend/src/i18n/index.ts` Register `fr`, add to `SUPPORTED_LOCALES`, extend browser-language detect

Test plan

  • Pull, build, deploy
  • Hard-refresh panel → language dropdown shows "Français" between "Deutsch" and "简体中文"
  • Switch to Français — sidebar nav, dashboard, settings, etc. render in French
  • Hover the language switcher → tooltip shows the broadcasts-not-translated note in French
  • Set browser language to `fr-FR`, clear localStorage, reload → defaults to Français
  • vue-tsc passes (structural typecheck across all 7 locales)

Next up

  • Spanish (es.ts) — separate PR, same pattern with polite `usted` form

🤖 Generated with Claude Code

Second of three planned language additions (de done in #59, es next).
Same shape as the German PR — full mirror of en.ts translated, polite
vous register, technical proper nouns kept in English, browser-language
detection extended for fr-* visitors.

Game-specific terms use conventional 7D2D-FR renderings (« Lune de
sang », etc.). Action buttons in standard French UI infinitive form
(Enregistrer, Modifier, Supprimer, ...).

Quality-wise this is a competent first pass — common UX surfaces should
read naturally; the deeper config-editor field labels are direct
translations and would benefit from a domain-fluent native-speaker
polish. PRs welcome.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@AdaInTheLab AdaInTheLab merged commit 5622b9b into main May 9, 2026
2 checks passed
@AdaInTheLab AdaInTheLab deleted the feature/i18n-french branch May 9, 2026 12:14
AdaInTheLab added a commit that referenced this pull request May 9, 2026
Third and final language addition in this round (German #59, French
#61 already shipped). Same shape: full mirror of en.ts, polite usted
register, technical proper nouns kept in English, browser-language
detection extended for es-* visitors (es-ES, es-MX, es-AR, etc.).

Game-specific terms use the conventional 7D2D-ES renderings («Luna
de sangre», etc.). Action buttons in standard Spanish UI infinitive
form (Guardar, Editar, Eliminar, ...).

Quality-wise this is a competent first pass — common UX surfaces
should read naturally; the deeper config-editor field labels are
direct translations and would benefit from a domain-fluent native-
speaker polish. PRs welcome.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AdaInTheLab added a commit that referenced this pull request May 13, 2026
Rolls up everything since v2.6.2 into a single release tag. v2.6.3
was bumped on main (#63) but never tagged or released — folding it
into v2.6.4 keeps the public release history clean.

Marquee additions since v2.6.2:

- Modpack (#64) — Bundle installed mods into a single zip players can
  download from the login page. No panel account required. Three-state
  workflow (draft → published → archived), top-right CTA on the login
  page, anonymous metadata + download endpoints. Atomic temp-file zip
  build so public downloaders can't grab a half-written archive.

- Graceful Restart (#57, #58) — Scheduled daily restarts with
  player-friendly in-game countdown warnings. Configurable warning
  ladder, IANA-timezone schedule (DST-aware), krestart console command,
  REST endpoints, panel Settings tab.

- Backups bug fix (#56) — BackupService had a redundant conn.Open()
  call that silently dropped writes due to a custom System.Data.SQLite
  quirk. Reads worked, so the bug went unnoticed until first hands-on
  test. Six call sites fixed, class doc comment added so future-me
  doesn't reintroduce it.

- German / French / Spanish locales (#59, #61, #62) — Full polite-form
  translations across ~250 keys / 30 namespaces. Browser auto-detect
  picks the right one for de-* / fr-* / es-* visitors. Tooltip on the
  language switcher noting that in-game broadcast messages don't
  auto-translate.

- Favicon (#60) — Regenerated all four favicon variants (svg / 16 /
  32 / ico) from kitsune-command-logo-transparent.png so the browser
  tab matches the panel's sidebar logo.

- README updates: features list now reflects all the above.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant