AGENTS.md@.agents/skills/write-translations/locales/fr · git:20260629.e4cf32e · 2026-06-29 · sha256 f5cb42018fd39e8b
AGENTS.md@.agents/skills/write-translations/locales/fr git:20260629.e4cf32eA
Immutable. This exact content is served forever at /api/v1/blob/f5cb42018fd39e8b.
# French (fr) — voice doctrine This file covers every value in `services/*/messages/fr.json` and every page under `docs/fr/`. The cross-locale contract is at [`../../SKILL.md`](../../SKILL.md); read that first. ## The voice in this language French Tale prose is calm, opinionated, and verb-first. The second-person `tu` is the only address. Imperatives carry walkthroughs (`Ouvre **Paramètres > Membres** et clique sur **Inviter un membre**.`). Sentences are short to medium; relative clauses (`qui`, `que`) carry detail rather than stacked nominal phrases (`de … de … de …`). The French narrator is the same narrator as the English one — peer-to-peer, why-before-what. > **Positive example.** Ouvre **Paramètres > Membres** et clique sur **Inviter un membre**. Le nouveau membre reçoit un lien par e-mail valide 24 heures et atterrit dans le rôle par défaut que tu choisis — change-le dans le formulaire avant d'envoyer s'il ne doit pas être Membre. Three sentences, `tu`/`-le`, no `vous`, no `Découvre`, no `N'hésite pas à`. NBSP before `:` and around guillemets. The 24-hour expiry is a consequence the reader needs and the prose lands it inline. ## The drift mode this language slips into French prose drifts into marketing softening. Three named patterns recur: 1. **Marketing-softener strikes** — `Découvre(z)`, `N'hésite(z) pas à`, `tout simplement`, `il te/vous suffit de`, `simplement`, `facilement`, `clé en main`, `Profite(z) de`, `Bénéficie(z) de`, `puissant(e)`, `en toute simplicité`. Each asserts a quality the page should demonstrate. 2. **Stacked nominal phrases (3+ `de` chains)** — _Une solution clé en main pour la gestion documentaire intégrée multilingue_. Native French uses a relative clause: _Une solution qui gère les documents dans plusieurs langues_. 3. **`vous`-slips** — formal `vous` / `votre` / `vos` in prose. Tale is `tu` uniformly. > **Drift → target.** _Découvrez notre nouvelle fonctionnalité de Knowledge Base puissante et clé en main._ > > _Ouvre la **Base de connaissances**. Elle indexe automatiquement les documents que tu charges et les rend disponibles aux agents en 30 secondes._ > > The drift uses three softeners (`Découvrez`, `puissante`, `clé en main`) and a half-translated compound (`Knowledge Base`). The target switches to the imperative, names the concrete behaviour (30-second indexing), uses the shipped UI label. Regex-checkable forms live in [`packages/ui/src/i18n/tests/locales/fr/voice.ts`](../../../../../packages/ui/src/i18n/tests/locales/fr/voice.ts) (caught by `voice-strikes`). Nominal-stacking is reviewer-caught. ## Conventions See [CONVENTIONS.md](../../CONVENTIONS.md) for the template; values below are FR's. | Surface | Rule | | ------------------------ | -------------------------------------- | | Pronoun (informal you) | `tu` — never `vous` | | Quotation marks (prose) | `« text »` with NBSP inside guillemets | | Quotation marks (JSON) | ASCII `"` | | Apostrophe (prose) | Typographic `’` — `l’équipe`, `c’est` | | Apostrophe (JSON & code) | ASCII `'` | | Dates (prose) | `19/04/2026` (DD/MM/YYYY) | | Dates (code / ISO) | `2026-04-19` | | Time (wall clock) | 24-hour: `09:00`, `22:30` | | Decimal separator | `,` | | Thousands separator | NNBSP (` `, U+202F): `1 000` | | Currency | `100 €` (suffix, NBSP) | | Percent | `5 %` (NBSP between number and `%`) | | Spelling | n/a | | NBSP before punctuation | yes, before `:;!?%»` and after `«` | | En-dash for ranges | yes: `2010–2020` | | Em-dash style | spaced `—` | ## Loanword stance French keeps bucket-1 and bucket-2 English; bucket-3 translates. Reminders: - **Stay English in FR prose:** `Workflow`, `Dashboard`, `Cloud`, `Webhook`, `Token`, `Server`, `Pipeline`, `Pull Request`, `Branch`, `Merge`, `Commit`, `Code Review`, `MCP`. - **Translate in FR prose:** `Header` → `En-tête`, `Request` → `Requête`, `Email` → `Courriel` (in formal prose) or `e-mail` (in conversational prose), `Help Center` → `Centre d'aide`, `Knowledge Base` → `Base de connaissances`, `Draft` → `Brouillon`, `Attachment` → `Pièce jointe`, `Self-hosted` → `auto-hébergé`, `Engineering` → `Ingénierie`. ## What ships untranslated | EN | FR | | --------- | ------------ | | Owner | Propriétaire | | Admin | Admin | | Developer | Développeur | | Editor | Éditeur | | Member | Membre | | Disabled | Désactivé | Plus every Bucket 1 brand, acronym, and code identifier. ## When the locale-specific test fires The FR checks live in [`packages/ui/src/i18n/tests/checks/`](../../../../../packages/ui/src/i18n/tests/checks/) and read [`packages/ui/src/i18n/tests/locales/fr/`](../../../../../packages/ui/src/i18n/tests/locales/fr/) data. The most common firings: - `pronouns-formal` — `vous` / `votre` / `vos` mid-sentence. Rewrite to `tu`. - `voice-strikes` — `Découvrez`, `N'hésite pas à`, `tout simplement`, `puissant`, `clé en main`. Demonstrate, don't assert. - `terminology-loanword` — translate-bucket noun left English. Use the locale form. - `terminology-half-compound` — `Pull Demande`, `Branch Branche`, `Knowledge Base` in FR prose. - `style-nbsp` — regular space before `:;!?%»`. Use NBSP (U+00A0). - `style-apostrophes` — ASCII `'` between letters in prose. Use typographic `’`. > **Sample failure.** `[style-nbsp] style-nbsp — 2 findings: services/web/messages/fr.json cta.title: [nbsp-missing] regular space before French punctuation — use NBSP ( ) before "; : ! ? %"` ## Worked examples See [examples.md](examples.md) for positive examples and drift→target pairs.