From 489c4655993fca8458caccf5ea031ab381411b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Eveillard?= <32536347+benoiteveillard@users.noreply.github.com> Date: Mon, 22 Dec 2025 09:46:28 +0100 Subject: [PATCH] i18n: add French (fr) locale --- packages/shared/src/i18n/index.ts | 2 ++ packages/shared/src/i18n/languages.ts | 1 + packages/shared/src/i18n/locales/fr.json | 45 ++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 packages/shared/src/i18n/locales/fr.json diff --git a/packages/shared/src/i18n/index.ts b/packages/shared/src/i18n/index.ts index 63d057c..18eaaeb 100644 --- a/packages/shared/src/i18n/index.ts +++ b/packages/shared/src/i18n/index.ts @@ -2,6 +2,7 @@ import type {Language} from './languages.js'; // Static imports for all translation files import enTranslations from './locales/en.json' with {type: 'json'}; import nlTranslations from './locales/nl.json' with {type: 'json'}; +import frTranslations from './locales/fr.json' with {type: 'json'}; export { SUPPORTED_LANGUAGES, @@ -29,6 +30,7 @@ export interface Translations { const translationsMap: Record = { en: enTranslations, nl: nlTranslations, + fr: frTranslations, }; // In-memory cache for loaded translations diff --git a/packages/shared/src/i18n/languages.ts b/packages/shared/src/i18n/languages.ts index 2a8d73f..8e2b9ce 100644 --- a/packages/shared/src/i18n/languages.ts +++ b/packages/shared/src/i18n/languages.ts @@ -8,6 +8,7 @@ export interface Language { export const SUPPORTED_LANGUAGES: Language[] = [ {code: 'en', name: 'English', nativeName: 'English', flag: '🇺🇸'}, {code: 'nl', name: 'Dutch', nativeName: 'Nederlands', flag: '🇳🇱'}, + {code: 'fr', name: 'French', nativeName: 'Français', flag: '🇫🇷'}, ]; export const DEFAULT_LANGUAGE = 'en'; diff --git a/packages/shared/src/i18n/locales/fr.json b/packages/shared/src/i18n/locales/fr.json new file mode 100644 index 0000000..cd4ea5e --- /dev/null +++ b/packages/shared/src/i18n/locales/fr.json @@ -0,0 +1,45 @@ +{ + "pages": { + "unsubscribe": { + "title": "Se désabonner", + "description": "Nous sommes désolés de vous voir partir. Êtes-vous sûr de vouloir désabonner {email} de la réception des e-mails ?", + "button": "Se désabonner", + "buttonLoading": "Désabonnement en cours...", + "managePreferences": "Gérer les préférences", + "successTitle": "Vous êtes désabonné", + "successDescription": "{email} a été désabonné. Vous ne recevrez plus nos e-mails.", + "changedMind": "Vous avez changé d’avis ?", + "subscribeAgain": "Se réabonner" + }, + "subscribe": { + "title": "S’abonner aux mises à jour", + "description": "Souhaitez-vous abonner {email} pour recevoir des e-mails ?", + "button": "S’abonner", + "buttonLoading": "Abonnement en cours...", + "successTitle": "Vous êtes abonné !", + "successDescription": "{email} est maintenant abonné pour recevoir nos e-mails." + }, + "manage": { + "title": "Gérer les préférences", + "description": "Gérez les préférences e-mail pour {email}", + "subscriptionLabel": "Abonnement e-mail", + "subscribedStatus": "Vous êtes actuellement abonné", + "unsubscribedStatus": "Vous êtes actuellement désabonné", + "subscribedSuccess": "Abonné avec succès !", + "unsubscribedSuccess": "Désabonné avec succès !", + "unsubscribeCompletely": "Se désabonner complètement", + "subscribeToEmails": "S’abonner aux e-mails", + "disclaimer": "Cette page vous permet de gérer vos préférences e-mail. Votre statut d’abonnement est mis à jour en temps réel." + }, + "common": { + "loading": "Chargement...", + "error": "Erreur" + } + }, + "email": { + "footer": { + "unsubscribeText": "Vous recevez cet e-mail parce que vous avez accepté de recevoir des e-mails de la part de {projectName}. Si vous ne souhaitez plus recevoir d’e-mails de ce type, veuillez", + "updatePreferences": "mettre à jour vos préférences" + } + } +}