From 6ef9a51c3a57afd996b30df3c5a8a4b62b64475f Mon Sep 17 00:00:00 2001 From: Dhozii Date: Tue, 25 Aug 2026 17:35:53 +0100 Subject: [PATCH 1/3] fix: Add French locale and translation files (#67) --- src/i18n/locales/fr.ts | 105 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/i18n/locales/fr.ts diff --git a/src/i18n/locales/fr.ts b/src/i18n/locales/fr.ts new file mode 100644 index 0000000..e56f47f --- /dev/null +++ b/src/i18n/locales/fr.ts @@ -0,0 +1,105 @@ +const fr = { + common: { + app_name: "Vinculo", + app_tagline: "Votre argent, vos règles.", + retry: "Réessayer", + stellar_testnet: "Réseau de test Stellar", + view_on_network: "Voir sur le réseau", + }, + login: { + title: "Connexion", + accesly_cta: "Continuer avec e-mail", + accesly_creating: "Création de votre portefeuille...", + accesly_popup_hint: "Si la fenêtre ne s'ouvre pas, vérifiez les bloqueurs de pop-up.", + accesly_hint: "Accès securise via e-mail, Google ou Apple.", + or_divider: "ou", + wallet_picker_title: "Portefeuille Stellar", + wallet_picker_description: "Connectez votre portefeuille Stellar existant.", + connect_wallet: "Connecter le portefeuille", + errors: { + cancelled: "Connexion annulée.", + popup_blocked: "La fenêtre a éte bloquée. Autorisez les pop-ups et réessayez.", + wallet_locked: "Portefeuille verrouillé. Déverrouille-z' et réessayez.", + no_network: "Problème de connexion. Vérifiez votre léseau.", + generic: "Une ereur est survenue. Vous pries le réessayer.", + }, + }, + onboarding: { + cta_skip: "Passer", + cta_start: "Commencer", + cta_next: "Suivant", + steps: { + save: { + title: "Épargnez inteligemment", + description: "Déposez en quelques secondes et laissez votre argent travailler pour vous.", + }, + reputation: { + title: "Construisez votre réputation", + description: "Chaque bonne action renforce votre historique financier décentralisé.", + }, + credit: { + title: "Débloquez votre crédit", + description: "Obtenez un crédit transparent et décentralisé, sans intermediaires.", + }, + }, + }, + credit: { + syncing: "Synchronisation avec la blockchain...", + locked_title: "Credit loqué", + locked_description: "Atteinez le niveau {{tier}} pour débloquer votre crédit.", + title: "Credit {{tier}}", + badge_onchain: "En châine", + anomaly: "Anomalie défectée sur votre score. Vérifiez votre activité.", + withdraw: "Retirer", + repay: "Rembourser", + available: "Disponible", + total_to_pay: "Total à rembourser", + amount: "Montant", + interest: "Intérêts (5%)", + term: "Durée", + time_left: "Temps restant", + defaulted_title: "Prêt en souffrance", + defaulted_description: "Votre prêt est en souffrance. Remboursez des que possible.", + active_loan_title: "Prêt actif", + active_loan_description: "Vous avez un prêt actif. Remboursez-le pour en demander un nouveau.", + tiers: { + 0: "Bronze", + 1: "Argent", + 2: "Or", + 3: "Platine", + }, + errors: { + no_liquidity: "Pas assez de liquidites dans le pool de prêts pour le moment.", + active_loan: "Vous avez déà un prêt actif. Remboursez-le avant d'en demander un nouveau.", + tier_insufficient: "Votre niveau actuel ne permet pas cette opération.", + cancelled: "Transaction annulée.", + generic: "Erreur de l'opération. Veuillez réessayer.", + connect_wallet: "Connectez votre portefeuille pour continuer.", + wrong_account: "Utilisez le portefeuille vérifié ({{wallet}}).", + repay_generic: "Erreur dus remboursement. Veuillez réessayer.", + }, + }, + activity: { + header: "Activité récente", + tx_deposit: "Dépot", + tx_savings_withdraw: "Retrait d'épargne", + tx_loan: "Prêt", + tx_repay: "Remboursement", + tx_mint: "Niveau {{level}}", + empty_title_no_activity: "Aucune activité", + empty_description_no_activity: "Vos transactions aparatront ici.", + empty_title_no_wallet: "Portefeuille non connecté", + empty_description_no_wallet: "Connectez votre portefeuille pour voir votre activité.", + }, + walletSetup: { + title: "Configurer votre portefeuille", + description: "Créez ou importez un portefeuille Stellar pour continuer.", + create: "Céer un portefeuille", + import: "Importer un portefeuille", + backup: "Sauvegardez votre phrase secrète", + confirm: "Confirmer", + cancel: "Annuler", + complete: "Terminer", + error: "Une erreur est survenue", + }, +}; From 4d2e11864c37526f4e948a05822d2383f096abd8 Mon Sep 17 00:00:00 2001 From: Dhozii Date: Tue, 25 Aug 2026 17:35:55 +0100 Subject: [PATCH 2/3] fix: Add French locale and translation files (#67) --- src/i18n/config.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 67c80f0..869153c 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -1,10 +1,10 @@ /** * i18n configuration - * - * - Default language: Spanish (es) - * - Fallback language: Spanish (es) - * - Namespace: "translation" (single namespace, flat structure) - * - Missing key behavior: returns the key itself so nothing silently breaks + + - Default language: Spanish (es) + * Fallback language: Spanish (es) + * Namespace: "translation" (single namespace, flat structure) + * Missing key behavior: returns the key itself so nothing silently breaks * * To add a new locale: * 1. Create src/i18n/locales/.ts mirroring the es.ts shape @@ -16,9 +16,10 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import es from "./locales/es"; import en from "./locales/en"; +import fr from "./locales/fr"; export const DEFAULT_LANGUAGE = "es"; -export const SUPPORTED_LANGUAGES = ["es", "en"] as const; +export const SUPPORTED_LANGUAGES = ["es", "en", "fr"] as const; export type SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number]; // Persist the user's language choice across reloads (written by useLanguage). @@ -34,6 +35,7 @@ i18n.use(initReactI18next).init({ resources: { es: { translation: es }, en: { translation: en }, + fr: { translation: fr }, }, lng: initialLang, fallbackLng: DEFAULT_LANGUAGE, From e40e7657ce7c3f23dfe6ddbbce46ccc7d1c6cf4e Mon Sep 17 00:00:00 2001 From: Dhozii Date: Tue, 25 Aug 2026 17:35:57 +0100 Subject: [PATCH 3/3] fix: Add French locale and translation files (#67) --- src/components/LanguageToggle.tsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/LanguageToggle.tsx b/src/components/LanguageToggle.tsx index 57c8e26..1a2bf06 100644 --- a/src/components/LanguageToggle.tsx +++ b/src/components/LanguageToggle.tsx @@ -5,20 +5,19 @@ const LanguageToggle = () => { const { language, changeLanguage } = useLanguage(); return ( -
- {(["es", "en"] as const).map((lang) => ( +
+ {([z�'en", "en", "fr"] as const).map((lang) => ( - ))} + {lang� + ))
); };