diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json
index 25052a144..68ff9ca5d 100644
--- a/public/locales/en-US/translations.json
+++ b/public/locales/en-US/translations.json
@@ -455,6 +455,7 @@
"peer_crawled_context": "For more context, see https://xrpl.org/peer-crawler.html",
"xchainbridge": "XChainBridge",
"language_en-US": "English",
+ "language_fr-FR": "French",
"language_ja-JP": "Japanese",
"language_ko-KR": "Korean",
"language_es-ES": "Spanish",
@@ -485,4 +486,4 @@
"namespace": "Namespace",
"api_version": "API Version",
"triggered_on": "Triggered On"
-}
+}
\ No newline at end of file
diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json
new file mode 100644
index 000000000..400a9bd7c
--- /dev/null
+++ b/public/locales/fr-FR/translations.json
@@ -0,0 +1,488 @@
+{
+ "action": "action",
+ "assets": "Actifs",
+ "assets.nft_tab_title": "Jetons non fongibles",
+ "assets.issued_tab_title": "Tokens émis",
+ "assets.no_issued_message": "Aucun token trouvé",
+ "assets.no_nfts_message": "Aucun NFT trouvé.",
+ "network": "Réseau",
+ "network_name": "Réseau inconnu",
+ "network_name_testnet": "Testnet",
+ "network_name_mainnet": "Mainnet",
+ "network_name_devnet": "Devnet",
+ "network_name_amm": "AMM-Devnet",
+ "network_name_hooks_testnet": "Hooks-Testnet",
+ "network_name_custom": "Personnalisé",
+ "app.meta.description": "Explorateur XRPL",
+ "app.meta.author": "Ripple",
+ "explorer": "Explorateur",
+ "xrpl_org": "XRPL.org",
+ "github": "GitHub",
+ "header.search.placeholder": "Rechercher par adresse, registre ou transaction",
+ "xrp": "XRP",
+ "xrpl_explorer": "Explorateur XRPL",
+ "ledgers": "Registres",
+ "ledger": "Registre",
+ "taxon": "Taxon",
+ "token_id": "Token ID",
+ "token_transactions": "Transactions du token",
+ "transactions": "Transactions",
+ "transaction_short": "TX",
+ "nodes": "Noeuds",
+ "validator": "Validateur",
+ "validators": "Validateurs",
+ "upgrade_status": "Statut des versions",
+ "version": "v{{number}}",
+ "component_error": "Une erreur s'est produite!",
+ "1H": "1H",
+ "24H": "24H",
+ "30D": "30J",
+ "total_transactions": "# de Txns",
+ "total_fees": "Frais Totaux",
+ "async_component_timedout": "Le chargement du composant a pris plus de temps que prévu",
+ "async_component_failed": "Impossible de charger le composant",
+ "account_not_found": "Compte non trouvé",
+ "account_empty_title": "Aucun id de compte n'a été fourni",
+ "account_empty_hint": "Saisissez un id de compte dans le champs de recherche",
+ "check_account_id": "Vérifiez votre ID de compte",
+ "accounts.xrp_balance": "Solde XRP",
+ "accounts.other_balances": "Autres soldes",
+ "accounts.other_balances_short": "Soldes",
+ "amount": "Montant",
+ "currency_code": "Code FX",
+ "currency_balance": "Solde <0>{{currency}}0>",
+ "load_more_action": "Charger plus...",
+ "account_transactions": "Transactions",
+ "transaction_type": "Type de transaction",
+ "transaction_action_CANCEL": "Annulé",
+ "transaction_action_CREATE": "Créé",
+ "transaction_action_FINISH": "Confirmé",
+ "transaction_action_MODIFY": "Modifié",
+ "transaction_action_SEND": "Transféré",
+ "transaction_category_ACCOUNT": "Compte",
+ "transaction_category_DEX": "Dex (AMM, Offres, Trust Sets, Tokens)",
+ "transaction_category_NFT": "NFT",
+ "transaction_category_PAYMENT": "Paiement",
+ "transaction_category_PSUEDO": "Pseudo-Tx",
+ "transaction_category_UNKNOWN": "Inconnue",
+ "transaction_legend_toggle_hide": "Masquer la légende",
+ "transaction_legend_toggle_show": "Afficher la légende",
+ "transactions.date_header": "Date/heure (UTC)",
+ "no_transactions_message": "Aucune transaction trouvée",
+ "retry_action": "Réessayer...",
+ "uh_oh": "Oups!",
+ "not_found_default_title": "Page non trouvée",
+ "not_found_check_url": "Veuillez vérifier l'URL",
+ "not_found": "Non trouvé",
+ "buy": "Acheter",
+ "sell": "Vendre",
+ "price": "Prix",
+ "ledger_index": "Index du ledger",
+ "to": "à",
+ "from": "de",
+ "send": "Envoyer",
+ "delivered": "Livré",
+ "cancel_offer": "Annuler l'offre",
+ "convert_maximum": "Convertir le Max",
+ "convert_to": "Convertir en",
+ "using_at_most": "Utiliser au maximum",
+ "partial_payment_allowed": "paiement partiel autorisé",
+ "set_limit": "Limite de confiance",
+ "escrow": "séquestre",
+ "cancel_escrow": "annuler le séquestre",
+ "finish_escrow": "terminez le séquestre",
+ "escrow_amount": "montant du séquestre",
+ "escrow_destination": "destination du séquestre",
+ "escrow_transaction": "transaction de séquestre",
+ "escrow_condition_short": "condition de séquestre",
+ "escrow_fulfillment": "exécution du séquestre",
+ "condition": "état",
+ "fulfillment": "execution",
+ "cancel_after": "annuler ensuite",
+ "finish_after": "finir ensuite",
+ "settle_delay": "Délai de règlement",
+ "channel_id": "Identifiant du canal",
+ "seconds": "secondes",
+ "seconds_short": "sec.",
+ "regular_key": "clé",
+ "unset_regular_key": "clé non définie",
+ "unset_signer_list": "liste de signataires non définie",
+ "set_flag": "définir un tag",
+ "clear_flag": "supprimer le tag",
+ "email_hash": "hash du mail",
+ "message_key": "clé du message",
+ "out_of": "de",
+ "weight": "poids",
+ "the_account": "Le compte",
+ "create_payment_channel": "créera un canal de paiement à",
+ "destination_tag": "tag de destination",
+ "source_tag": "tag de la source",
+ "channel_settle_delay": "Le canal a un délai de confirmation de",
+ "the_channel_id_is": "L'ID de la chaîne est",
+ "the_channel_amount_is": "Le montant du canal est",
+ "update_payment_channel": "Le canal de paiement sera mis à jour",
+ "the_channel_balance_is": "Le solde du canal récupéré est de",
+ "amm_delete_description": "Tentative de suppression de l'AMM pour er .",
+ "amm_delete_description_caveat": "Si il y a plus de 512 trustlines, seules 512 trustlines seront supprimées.",
+ "payment_channel_closed_description": "Le canal de paiement sera fermé, tout solde restant sera retourné au compte source",
+ "set_signer_list_description": "Fixe le quorum minimum de signataires à {{quorum}} avec la liste suivante de signataires",
+ "unset_signer_list_description": "Tous les signataires du compte ont été supprimés",
+ "transaction_initiated_by": "La transaction a été initiée par",
+ "increase_channel_amount_by": "Le montant du canal sera augmenté de",
+ "channel_amount_increase": "augmenter le montant du canal",
+ "channel_amount": "montant du canal",
+ "total_claimed": "total réclamé",
+ "amount_claimed": "montant réclamé",
+ "close_request": "demande de fermeture de canal",
+ "renew_channel": "renouveler le canal",
+ "payment_channel_closed": "Le canal de paiement est fermé",
+ "paychannel_node_line1": "Il <1><0>{{action}}0>1> un nœud PayChannel de <3><0>{{account}}0>3> à <5><0>{{counterAccount}}0>5>",
+ "paychannel_amount_changed": "Montant modifié de <1><0>{{difference}}0><1><0>{{currency}}0>1>1> de <3><0>{{previous}}0><1><0>{{currency}}0>1>3> à <5><0>{{final}}0><1><0>{{currency}}0>1>5>",
+ "paychannel_balance_changed": "Le solde a changé de <1><0>{{différence}}0><1><0>{{devise}}0>1>1> de <3><0>{{précédent}}0><1><0>{{devise}}0>1>3> à <5><0>{{final}}0><1><0>{{devise}}0>1>5>",
+ "setfee_fees_description": "Les futures transactions nécessiteront des frais minimum de .",
+ "setfee_reserves_description": "Les comptes doivent désormais détenir une base de et un supplément de pour chaque objet supplémentaire dont le compte est propriétaire.",
+ "setfee_docs_description": "Voir la documentation : <0>Frais0>",
+ "setfee_base_fee": "Frais de base",
+ "setfee_reserve": "Réserve",
+ "setfee_reserve_increment": "Incrément de réserve",
+ "formatted_date": "Date/Heure ({{timeZone}})",
+ "transaction_type_name_AMMCreate": "AMM créé",
+ "transaction_type_name_AMMDelete": "AMM supprimé",
+ "transaction_type_name_AMMDeposit": "Dépôt sur un AMM",
+ "transaction_type_name_AMMWithdraw": "Retrait depuis un AMM",
+ "transaction_type_name_AMMVote": "Vote AMM",
+ "transaction_type_name_AMMBid": "Offre AMM créée",
+ "transaction_type_name_AccountSet": "Compte défini",
+ "transaction_type_name_CheckCancel": "Chèque annulé",
+ "transaction_type_name_CheckCash": "Chèque remis",
+ "transaction_type_name_CheckCreate": "Chèque créé",
+ "transaction_type_name_DepositPreauth": "Dépôt préautorisé",
+ "transaction_type_name_Error_Cases": "Cas d'erreur",
+ "transaction_type_name_EscrowCancel": "séquestre annulé",
+ "transaction_type_name_EscrowCreate": "séquestre créé",
+ "transaction_type_name_EscrowFinish": "Séquestre finalisé",
+ "transaction_type_name_Invoke": "Invocation",
+ "transaction_type_name_NFTokenAcceptOffer": "Offre NFT acceptée",
+ "transaction_type_name_NFTokenBurn": "NFT détruit",
+ "transaction_type_name_NFTokenCancelOffer": "Offre NFT annulée",
+ "transaction_type_name_NFTokenCreateOffer": "Offre NFT créée",
+ "transaction_type_name_NFTokenMint": "NFT forgé",
+ "transaction_type_name_OfferCancel": "Offre annulée",
+ "transaction_type_name_OfferCreate": "Offre créée",
+ "transaction_type_name_Payment": "Paiement effectué",
+ "transaction_type_name_PaymentChannelClaim": "Canal de paiement réclamé",
+ "transaction_type_name_PaymentChannelCreate": "Canal de paiement créé",
+ "transaction_type_name_PaymentChannelFund": "Canal provisionné",
+ "transaction_type_name_SetRegularKey": "Clé régulière définie",
+ "transaction_type_name_SignerListSet": "Liste de signataires établie",
+ "transaction_type_name_TicketCreate": "Ticket créé",
+ "transaction_type_name_TrustSet": "Ligne de confiance créée",
+ "transaction_type_name_SetHook": "Crochet enregistré",
+ "transaction_type_name_XChainAccountCreateCommit": "Compte XChain créé",
+ "transaction_type_name_XChainAddAccountCreateAttestation": "Attestation de compte xChain créée",
+ "transaction_type_name_XChainAddClaimAttestation": "Attestation de Réclamation XChain créée",
+ "transaction_type_name_XChainClaim": "Réclamation XChain effectuée",
+ "transaction_type_name_XChainCommit": "Enregistrement XChain créé",
+ "transaction_type_name_XChainCreateBridge": "Pont XChain créé",
+ "transaction_type_name_XChainCreateClaimID": "ID de réclamation XChain créé",
+ "transaction_type_name_XChainModifyBridge": "Pont XChain modifié",
+ "transaction_type_name_EnableAmendment": "Amendement activé",
+ "transaction_type_name_SetFee": "Frais définis",
+ "transaction_type_name_UNLModify": "UNL modifié",
+ "transaction_type_name_AccountDelete": "Compte supprimé",
+ "generic_error": "Une erreur s'est produite",
+ "not_your_fault": "Ce n'est probablement pas de votre faute",
+ "come_back_later": "L'action sera bientôt disponible",
+ "invalid_ledger_id": "L'identifiant du registre est invalide",
+ "invalid_transaction_hash": "Le hash de la transaction est invalide",
+ "ledger_not_found": "Registre introuvable",
+ "check_ledger_id": "Veuillez vérifier votre id de registre",
+ "server_ledgers_hint": "Ce nœud ({{connection.server.publicKey, truncate(length: 10)}}) ne contient que les registres {{connection.ledger.validated}}.",
+ "use_search": "Merci d'utiliser notre outil de recherche",
+ "ledger_has_no_trans": "Ce registre n'a aucune transaction.",
+ "less_than": "Moins de",
+ "transaction_not_found": "Transaction non trouvée.",
+ "transaction_empty_title": "Aucun hash de transaction fourni",
+ "transaction_empty_hint": "Entrez un hash de transaction dans la zone de recherche",
+ "validator_not_found": "Validateur non trouvé",
+ "check_transaction_hash": "Veuillez vérifier le hash de la transaction",
+ "check_validator_key": "Veuillez vérifier la clé du validateur",
+ "transaction": "Transaction",
+ "success": "Succès",
+ "fail": "Échec",
+ "simple": "Simple",
+ "detailed": "Détailé",
+ "details": "Détails",
+ "history": "Histoire",
+ "raw": "Brut",
+ "simple_not_supported": "Vue 'simple' non encore supportée pour",
+ "try_detailed_raw": "Essayez la \"Vue détaillée\" ou la \"Vue brute\"",
+ "account": "Compte",
+ "transaction_cost": "Coût de transaction",
+ "transaction_cost_short": "Coût de Tx.",
+ "sequence_number": "Numéro de séquence",
+ "sequence_number_short": "Séquence #",
+ "serial": "Numéro de série",
+ "n_a": "ND",
+ "memos": "Mémos",
+ "flags": "Etiquettes",
+ "status": "Statut",
+ "successful_transaction": "Cette transaction est confirmée",
+ "fail_transaction": "Cette transaction a échoué avec un code de statut de <0>{{code}}0>",
+ "transaction_validated": " et inscrite dans le registre ",
+ "on": " en date du ",
+ "description": "Description",
+ "signers": "Signataires",
+ "decoded_hex": "hexadécimal décodé",
+ "transaction_consumed_fee": "L'envoi de cette transaction a consommé ",
+ "meta": "Métadonnées",
+ "number_of_affected_node": "La transaction a affecté {{count}} nœuds dans le registre.",
+ "nodes_type": "{{action}} nodes",
+ "node_meta_type": "It {{action}} a node with type",
+ "transaction_balance_line_one": "It <1><0>{{action}}0>1> a <3><0>{{currency}}0>3> RippleState node between <5><0>{{account}}0>5> and <7><0>{{counterAccount}}0>7>",
+ "transaction_balance_line_two": "Solde modifié de <1><0>{{change}}0>1>: de <3><0>{{previousBalance}}0>3> à <5><0>{{finalBalance}}0>5>",
+ "transaction_owned_directory": "It {{action}} a DirectoryNode node owned by",
+ "transaction_unowned_directory": "It {{action}} a DirectoryNode node",
+ "owned_account_root": "It {{action}} the AccountRoot node of",
+ "unowned_account_root": "It {{action}} the AccountRoot node",
+ "account_balance_increased": "Solde augmenté de <1><0>{{difference}}0><1><0>{{currency}}0>1>1>: de <3><0>{{previous}}0><1><0>{{currency}}0>1>3> à <5><0>{{final}}0><1><0>{{currency}}0>1>5>",
+ "account_balance_decreased": "Solde diminué de <1><0>{{différence}}0><1><0>{{devise}}0>1>1>: de <3><0>{{précédent}}0><1><0>{{devise}}0>1>3> à <5><0>{{final}}0><1><0>{{devise}}0>1>5>",
+ "decreased_from_to": "diminué de <1><0>{{change}}0>1>: de <3><0>{{previous}}0>3> à <5><0>{{final}}0>5>",
+ "offer_node_meta": "It <1><0>{{action}}0>1> a <3><0>{{pair}}0>3> offer node owned by <5><0>{{account}}0>5> with sequence # <7><0>{{sequence}}0>7>",
+ "offer_replaces": "Cette offre remplace l'offre existante #",
+ "offer_partially_filled": "L'offre a été partiellement remplie.",
+ "offer_filled": "L'offre a été comblée.",
+ "offer_cancelled": "L'offre a été annulée.",
+ "offer_replaced": "Cette offre a été remplacée par la nouvelle offre #",
+ "offer_lack_of_funds": "L'offre a été partiellement remplie, puis annulée en raison d'un manque de fonds.",
+ "transaction_sequence": "Le numéro de séquence de la transaction est le",
+ "trust_set_description": "Établit que le montant maximum que <7><0>{{account}}0>7> est prêt à détenir en provenance de <5><0>{{issuer}}0>5> est de <1><0>{{amount}}0>1><3><0>{{currency}}0>3>.",
+ "payment_desc_line_1": "Le paiement est de à .",
+ "the_source_tag_is": "L'étiquette source est",
+ "the_destination_tag_is": "L'étiquette de destination est",
+ "payment_desc_line_4": "Il a été instruit de livrer",
+ "payment_desc_line_5": "en dépensant jusqu'à",
+ "payment_desc_line_6": "La quantité réelle livrée était de",
+ "offer_cancel_description": "La transaction annulera l'offre existante du compte #",
+ "offer_create_desc_line_1": "Le compte <1><0>{{account}}0>1> offre de payer <3><0>{{takerGets}}0><1><0>{{currency}}0>1>3> pour recevoir <5><0>{{takerPays}}0><1><0>{{currency}}0>1>5>",
+ "offer_create_desc_line_2": "Le taux de change pour cette offre est de ",
+ "offer_create_desc_line_3": "La transaction annulera également l'offre existante du compte #",
+ "offer_will_expire_desc": "L'offre expire le {{date}} sauf annulation ou consommation préalable.",
+ "offer_did_expire_desc": "L'offre expire le <1><0>{{date}}0>1> sauf annulation ou consommation préalable.",
+ "escrow_is_from": "Le séquestre est de <1><0>{{account}}0>1> à <3><0>{{destination}}0>3>",
+ "escrow_is_created_by": "Le séquestre a été créé par <1><0>{{account}}0>1> et les fonds seront retournés au même compte.",
+ "escrowed_amount": "Mis en séquestre",
+ "escrow_condition": "Le séquestre a une condition de réalisation",
+ "describe_cancel_after": "Peur être annulé après",
+ "describe_finish_after": "Peut être terminé après",
+ "escrow_completion_desc": "La finalisation a été déclenchée par",
+ "escrow_completion_desc_2": "Le montant en séquestre de <1><0>{{amount}}0>1> a été remis à <3><0>{{destination}}0>3>",
+ "escrow_finish_fullfillment_desc": "La condition de séquestre est remplie par",
+ "escrow_cancellation_desc": "L'annulation a été déclenchée par",
+ "escrow_cancellation_desc_2": "Le montant placé en séquestre de <1><0>{{amount}}0>1> a été restitué à <3><0>{{owner}}0>3>",
+ "escrow_after_transaction_cost": "frais après transaction",
+ "escrow_created_by_desc": "Le séquestre a été créé par <1><0>{{account}}0>1> avec la transaction <3><0>{{transaction}}0>3>",
+ "set_regular_key_description": "Définit la clé régulière du compte en tant que",
+ "unset_regular_key_description": "Supprime la clé régulière du compte.",
+ "set_flag_description": "Définit l'étiquette du compte",
+ "clear_flag_description": "Efface l'étiquette du compte",
+ "set_domain_description": "Définit le domaine du compte en tant que",
+ "set_email_description": "Définit le hash de l'email du compte.",
+ "set_message_key_description": "Définit la clé du message du compte en tant que",
+ "set_nftoken_minter_description": "Définit <0>{{account}}0> comme le forgeur autorisé pour ce compte.",
+ "deposit_auth": "Autorise <1><0>{{account}}0>1> à envoyer des paiements vers ce compte.",
+ "deposit_unauth": "Supprime l'autorisation pour <1><0>{{account}}0>1> d'envoyer des paiements à ce compte.",
+ "invalid_xrpl_address": "Adresse XRPL invalide",
+ "loading": "Chargement en cours",
+ "get_ledger_failed": "Impossible de charger le registre",
+ "get_transaction_failed": "Impossible de charger la transaction",
+ "get_validator_failed": "Impossible de charger le validateur.",
+ "get_account_state_failed": "Impossible de charger l'état du compte",
+ "get_account_transactions_failed": "Impossible de charger les transactions du compte",
+ "get_account_transactions_try": "Essayer de charger plus de transactions",
+ "resolve_paystring_failed": "Impossible d'utiliser la PayString",
+ "paystring_address_invalid": "(Non conforme)",
+ "paystring_address": "Adresse",
+ "paystring_empty_title": "Aucun PayString n'a été fourni.",
+ "paystring_empty_hint": "Entrez un PayString dans la barre de recherche",
+ "paystring_environment": "Environnement",
+ "paystring_explainer_blurb": "PayString est l'identifiant universel pour les paiements. Il utilise une norme simple et ouverte pour aider les utilisateurs à envoyer et recevoir facilement de l'argent - sur n'importe quel réseau de paiement - en utilisant un seul identifiant.",
+ "paystring_network": "Réseau",
+ "paystring_tag": "Étiquette",
+ "pubkey": "clé publique",
+ "node_pubkey": "clé publique de nœud",
+ "ip": "adresse IP",
+ "state": "état",
+ "rippled_version": "version",
+ "last_ledger": "dernier registre",
+ "uptime": "disponibilité",
+ "peers": "pairs",
+ "in_out": "(entrée:sortie)",
+ "ledger_history": "historique",
+ "quorum": "quorum",
+ "load": "charger",
+ "latency": "latence",
+ "domain": "domaine",
+ "unl": "unl",
+ "fee": "frais",
+ "ledger_interval": "registre toutes les",
+ "load_fee": "frais d'initialisation",
+ "txn_sec": "txn/sec.",
+ "txn_ledger": "moy. txn/compte",
+ "avg_fee": "Frais moyen",
+ "txn_count": "Transactions",
+ "nUnlCol": "nUNL",
+ "nUnl": "VALIDATEURS SUR nUNL",
+ "fees": "frais",
+ "total": "total",
+ "missing": "manquant",
+ "authorize": "autoriser",
+ "unauthorize": "non autorisé",
+ "missed_validations": "{{count}} validations manquées",
+ "incomplete": "incomplet",
+ "required": "requis",
+ "source": "source",
+ "destination": "destination",
+ "claimed": "revendiqué",
+ "remaining": "reste",
+ "inbound_total": "total entrant",
+ "outbound_total": "total sortant",
+ "payment_channels": "canaux de paiement",
+ "available_in": "disponible dans",
+ "channels": "canaux",
+ "account_info": "informations du compte",
+ "reserve": "réserve",
+ "current_sequence": "séquence actuelle",
+ "escrows": "séquestres",
+ "nodes_found": "nœuds trouvés",
+ "unmapped": "non répertoriés",
+ "validators_found": "validateurs trouvés",
+ "pause": "mettre en pause",
+ "resume": "reprendre",
+ "flag_ledger": "Marquer le ledger",
+ "ticket": "Ticket",
+ "ticket_sequence": "Séquence de tickets",
+ "ticket_count": "Nombre de tickets",
+ "ticket_used": "Un ticket a été utilisé pour cette transaction.",
+ "token": "Jeton",
+ "tokens": "Jetons",
+ "total_issuers": "Émetteurs totaux",
+ "total_tokens": "Total des jetons",
+ "top_trading_pairs": "Principales paires",
+ "issuer_address": "Adresse de l'émetteur",
+ "obligations": "Obligations",
+ "settings": "Paramètres",
+ "rank": "Rang",
+ "market_cap": "Capitalisation",
+ "volume_24h": "Volume (24H)",
+ "no_tokens_message": "Aucun jeton trouvé.",
+ "no_pairs_message": "Aucune paire trouvée",
+ "high": "Élevé",
+ "low": "Bas",
+ "rank_message": "Les jetons sont classés par nombre de lignes de confiance.",
+ "obligations_message": "Les obligations sont les montants totaux de chaque jeton émis aux adresses.",
+ "issuer": "Émetteur",
+ "pair": "Paire",
+ "offer_range": "Plage d'offre",
+ "custom_network": "Réseau personnalisé",
+ "custom_network_input_help": "Entrez l'URL personnalisée du réseau pour accéder aux données du réseau.",
+ "custom_network_input": "Tapez l'URL du réseau personnalisé",
+ "custom_networks": "Réseaux personnalisés",
+ "no_network_selected": "Aucun réseau personnalisé sélectionné",
+ "locking_chain_door": "Point d'accès à la chaîne séquestre",
+ "locking_chain_issue": "Problème sur la chaine séquestre",
+ "issuing_chain_door": "Point d'accès à la chaîne d'origine",
+ "issuing_chain_issue": "Chaîne d'émission",
+ "signature_reward": "Frais de signature",
+ "min_account_create_amount": "Montant minimum pour la création de compte",
+ "other_chain_source": "Autre source de chaîne.",
+ "xchain_claim_id": "XChain Claim ID: Identifiant de réclamation XChain",
+ "check_nft_id": "Veuillez vérifier votre identifiant NFT.",
+ "get_nft_state_failed": "Impossible de charger le NFT.",
+ "minted": "Forgé",
+ "taxon_id": "Identifiant de taxon",
+ "transfer_fee": "Frais de transfert",
+ "burnable": "Destructible",
+ "only_xrp": "Uniquement XRP",
+ "transferable": "Transférable",
+ "buy_offers": "Offres d'achat",
+ "sell_offers": "Offres de vente",
+ "offer_index": "ID de l'offre",
+ "no_sell_offers": "Aucune offre de vente",
+ "no_buy_offers": "Aucune offre d'achat",
+ "validator_history.chain": "Chaîne",
+ "validator_history.date": "Date",
+ "validator_history.missed": "Manqué",
+ "validator_history.score": "Score",
+ "seller": "Vendeur",
+ "buyer": "Acheteur",
+ "offerer": "Offrant",
+ "token_taxon": "Taxon du jeton",
+ "uri": "URI",
+ "owner": "Propriétaire",
+ "other_chain_destination": "Autre destination de chaîne",
+ "%_of_total_nodes_validators": "% des nœuds et des validateurs",
+ "version_display": "Version: {{version}}",
+ "validators_count": "nb de Validateurs: {{vals_count}}",
+ "nodes_count": "nb de Nœuds: {{nodes_count}}",
+ "current_stable_version": "Version Stable Actuelle",
+ "stable_version": "{{stableVersion}}",
+ "nftoken_minter": "Créateur du NFT",
+ "is_burned": "Détruit",
+ "fee_rate": "Frais",
+ "last_affecting_transaction": "Dernière transaction affectée",
+ "Version": "Version",
+ "increased_by": "augmenté de",
+ "lp_token_balance": "Solde du jeton LP",
+ "token_balance": "Solde du jeton",
+ "trading_fee": "Commission",
+ "tvl": "TVL",
+ "account_address": "Adresse du compte",
+ "asset1": "Actif 1",
+ "asset2": "Actif 2",
+ "asset1out": "Actif 1 Sortant",
+ "asset2out": "Actif 2 Sortant",
+ "asset1in": "Actif 1 Entrant",
+ "asset2in": "Actif 2 Entrant",
+ "effective_price": "Prix effectif",
+ "amm_account_id": "Identifiant du compte AMM",
+ "lp_tokens": "Jetons LP",
+ "min_slot_price": "Prix minimum de l'emplacement",
+ "max_slot_price": "Prix maximum de l'emplacement",
+ "auth_accounts": "Comptes autorisés",
+ "network_cannot_be_crawled": "Ce réseau ne peut pas être exploré.",
+ "check_crawl_existed": "Veuillez contacter l'opérateur pour vous assurer qu'il dispose d'un accès /crawl accessible ou d'un ensemble vl.",
+ "peer_crawled_context": "Pour plus de contexte, voir https://xrpl.org/peer-crawler.html",
+ "xchainbridge": "Pont XChain",
+ "language_en-US": "Anglais",
+ "language_ja-JP": "Japonais",
+ "language_fr-FR": "Français",
+ "xchain_account_claim_count": "Nombre de réclamations de compte XChain",
+ "xchain_account_create_count": "Nombre de compte XChain créés",
+ "min_signer_quorum": "Poids minimum <0>{{quorum}}0> requis.",
+ "holder": "Titulaire",
+ "action_from": "<0><0>{{action}}0>0> <1><0>{{amount}}0>1> de <3><0>{{destination}}0>3>",
+ "claws_back": "Recouvrement",
+ "claws_back_from": "Recouvrement de ",
+ "instruct_to_claw": "Le montant maximum récupérable est de .",
+ "hook": "Hook",
+ "hooks": "Hooks",
+ "hook_emitted": "Cette transaction a été émise par un hook.",
+ "emit_details": "Détails de l'émission",
+ "hook_parameters": "Paramètres du hook",
+ "hook_executions": "Exécutions de crochet",
+ "emit_generation": "Nombre <0>{{emit}}0> dans la ligne des transactions générées.",
+ "emit_hook_hash": "Émis par le crochet <0>{{hash}}0>",
+ "emit_parent": "Émis par un crochet déclenché par <0>{{hash}}0>",
+ "emit_callback": "Le rappel d'émission est <0>{{callback}}<0>",
+ "hook_exec_hash": "Le hook <0>{{hash}}0> a été déclenché",
+ "hook_exec_account": "Sur le compte <0>{{account}}0>",
+ "hook_exec_return": "Le code retourné est <0>{{code}}0> avec la valeur \"<1>{{string}}1>\".",
+ "hook_exec_emit_count": "<0>{{count}}0> transactions émises",
+ "language_ko-KR": "Koréen",
+ "hash": "Hash",
+ "grant": "Allocation",
+ "namespace": "Espace de noms",
+ "api_version": "Version API",
+ "triggered_on": "Déclenché Par"
+}
diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json
index 42e24b8c1..fe57930a5 100644
--- a/public/locales/ja-JP/translations.json
+++ b/public/locales/ja-JP/translations.json
@@ -455,6 +455,7 @@
"peer_crawled_context": null,
"xchainbridge": null,
"language_en-US": null,
+ "language_fr-FR": null,
"language_ja-JP": null,
"language_ko-KR": null,
"language_es-ES": null,
diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json
index 9904a2013..e842084df 100644
--- a/public/locales/ko-KR/translations.json
+++ b/public/locales/ko-KR/translations.json
@@ -453,6 +453,7 @@
"peer_crawled_context": "더 자세한 정보는 https://xrpl.org/peer-crawler.html 를 참조하세요",
"xchainbridge": "XChain 브리지",
"language_en-US": "영어",
+ "language_fr-FR": "프랑스말",
"language_ja-JP": "일본어",
"language_ko-KR": "한국어",
"language_es-ES": "null",
@@ -483,4 +484,4 @@
"namespace": "Namespace",
"api_version": "API 버전",
"triggered_on": "Triggered On"
-}
+}
\ No newline at end of file
diff --git a/src/i18n/baseConfig.ts b/src/i18n/baseConfig.ts
index 19dedc752..88290b4db 100644
--- a/src/i18n/baseConfig.ts
+++ b/src/i18n/baseConfig.ts
@@ -1,6 +1,6 @@
import { InitOptions } from 'i18next'
-export const supportedLanguages = ['en-US', 'ja-JP', 'ko-KR', 'es-ES']
+export const supportedLanguages = ['en-US', 'ja-JP', 'ko-KR', 'es-ES', 'fr-FR']
export const options: InitOptions = {
returnNull: false,