Skip to content

i18n(fr): add French translations (178/178 strings)#496

Merged
ascorbic merged 2 commits intoemdash-cms:mainfrom
UpperM:i18n/fr
Apr 12, 2026
Merged

i18n(fr): add French translations (178/178 strings)#496
ascorbic merged 2 commits intoemdash-cms:mainfrom
UpperM:i18n/fr

Conversation

@UpperM
Copy link
Copy Markdown
Contributor

@UpperM UpperM commented Apr 12, 2026

What does this PR do?

Adds complete French (fr) locale for the EmDash admin UI.

Type of change

  • Bug fix
  • Feature (requires maintainer-approved Discussion)
  • Refactor (no behavior change)
  • Translation
  • Documentation
  • Performance improvement
  • Tests
  • Chore (dependencies, CI, tooling)

Checklist

AI-generated code disclosure

  • This PR includes AI-generated code

AI tools were used to draft the initial translations. Every string was then reviewed by a fluent French speaker through:

  1. A linguistic review (register, tone, naturalness, French typography, anglicisms)
  2. A technical term review (over-translation, CMS terminology conventions)

All translations were verified in the running admin UI.

Translation details

Coverage: 178/178 strings (100%)

Technical terms kept in English

Several English technical terms were intentionally kept untranslated. This reflects how the francophone dev/CMS community actually uses these terms in practice:

Term kept in English Why not translated
Token (not "jeton") Standard in the FR dev community. Stripe FR, GitHub FR, Vercel FR, Cloudflare FR all use "token".
Scopes (not "portées") In the OAuth/API context, "scopes" is universally used as-is. Google OAuth FR, GitHub FR, Auth0 FR all keep "scopes".
Dashboard (not "tableau de bord") Modern CMS/SaaS tools (Ghost, Strapi, Directus, Payload) use "Dashboard" in FR.
Plugins (not "extensions") Code/UI consistency -- the codebase uses plugins everywhere.
Tags (not "étiquettes") Shorter, universally understood in modern CMS tools.
Embeds (not "integrations") "Integrations" in French means third-party connectors, not inline content blocks. Avoids confusion.
Slug, SEO, Widget, ID, ULID Standard technical terms with no established French equivalent.

Passkey was translated to "clé d'accès", aligning with Apple FR, Google FR, and Microsoft FR official terminology.

These choices are opinionated. If native French speakers feel differently about any of these, feedback is very welcome.

Notable translation choices

English French Rationale
Magic link Lien de connexion "Lien magique" would sound odd in French
Media Library Médiathèque Standard French term, used by WordPress FR
Self-Signup Domains Domaines d'inscription autorisés Functional translation rather than literal
Heading descriptions Titre principal / Titre secondaire / Petit titre Hierarchical naming, more natural than size-based (grand/moyen/petit)
Dismiss (token banner) Fermer "Ignorer" has a negative connotation in French
(default) (par défaut) "Défaut" alone means "flaw" in French

Open questions for native speakers

Some translations could go either way. Feedback welcome:

"Heading" descriptions (Titre principal / secondaire / Petit titre)

The current translation uses a hierarchical approach:

  • Heading 1 → "Titre principal" (main heading)
  • Heading 2 → "Titre secondaire" (secondary heading)
  • Heading 3 → "Petit titre" (small heading)

"Petit titre" feels a bit off for H3. Alternatives considered:

  • "Sous-titre" (but could be confused with subtitles/captions)
  • "Intertitre" (editorial term, accurate but niche)
  • Keep "Heading 1/2/3" untranslated like other technical terms?

"Full-text search" → "Recherche dans le contenu"

Translated as "Permettre la recherche dans le contenu de cette collection". I'm not fully convinced by this phrasing, would appreciate another perspective.

Screenshots / test output

pnpm run locale:extract output:

Catalog statistics for packages/admin/src/locales/{locale}/messages:
+--------------+-------------+---------+
| Language     | Total count | Missing |
+--------------+-------------+---------+
| en (source)  |     178     |    -    |
| de           |     178     |   138   |
| fr           |     178     |    0    |
+--------------+-------------+---------+

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 12, 2026

⚠️ No Changeset found

Latest commit: dbd0229

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@UpperM UpperM marked this pull request as ready for review April 12, 2026 18:58
@github-actions
Copy link
Copy Markdown
Contributor

Scope check

This PR changes 760 lines across 3 files. Large PRs are harder to review and more likely to be closed without review.

If this scope is intentional, no action needed. A maintainer will review it. If not, please consider splitting this into smaller PRs.

See CONTRIBUTING.md for contribution guidelines.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Apr 12, 2026

Open in StackBlitz

@emdash-cms/admin

npm i https://pkg.pr.new/@emdash-cms/admin@496

@emdash-cms/auth

npm i https://pkg.pr.new/@emdash-cms/auth@496

@emdash-cms/blocks

npm i https://pkg.pr.new/@emdash-cms/blocks@496

@emdash-cms/cloudflare

npm i https://pkg.pr.new/@emdash-cms/cloudflare@496

emdash

npm i https://pkg.pr.new/emdash@496

create-emdash

npm i https://pkg.pr.new/create-emdash@496

@emdash-cms/gutenberg-to-portable-text

npm i https://pkg.pr.new/@emdash-cms/gutenberg-to-portable-text@496

@emdash-cms/x402

npm i https://pkg.pr.new/@emdash-cms/x402@496

@emdash-cms/plugin-ai-moderation

npm i https://pkg.pr.new/@emdash-cms/plugin-ai-moderation@496

@emdash-cms/plugin-atproto

npm i https://pkg.pr.new/@emdash-cms/plugin-atproto@496

@emdash-cms/plugin-audit-log

npm i https://pkg.pr.new/@emdash-cms/plugin-audit-log@496

@emdash-cms/plugin-color

npm i https://pkg.pr.new/@emdash-cms/plugin-color@496

@emdash-cms/plugin-embeds

npm i https://pkg.pr.new/@emdash-cms/plugin-embeds@496

@emdash-cms/plugin-forms

npm i https://pkg.pr.new/@emdash-cms/plugin-forms@496

@emdash-cms/plugin-webhook-notifier

npm i https://pkg.pr.new/@emdash-cms/plugin-webhook-notifier@496

commit: dbd0229

Replace literal "recherche plein texte" calque with natural French phrasing.
@ascorbic ascorbic merged commit 8bdcf1d into emdash-cms:main Apr 12, 2026
25 of 27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants