Repository Public
1import { createContext, useContext } from 'react';2export type Locale = 'fr' | 'en';3const D = {4 // nav5 home: ['Accueil', 'Home'], receive: ['Recevoir', 'Receive'], send: ['Envoyer', 'Send'], activity: ['Activité', 'Activity'],6 security: ['Sécurité', 'Security'], settings: ['Réglages', 'Settings'],7 // gate8 tagline: ['Portefeuille privé multi-chaînes', 'Private multi-chain wallet'],9 unlock: ['Déverrouiller avec la clé d’accès', 'Unlock with passkey'],10 unlockHint: ['Face ID, Touch ID ou clé de sécurité. Aucun mot de passe.', 'Face ID, Touch ID or security key. No password.'],11 setupTitle: ['Configuration initiale', 'First-time setup'],12 setupBody: ['Cette étape n’est possible qu’une seule fois. Elle lie votre clé d’accès au signataire : elle seule pourra ouvrir le portefeuille et approuver un transfert.',13 'This step is possible only once. It binds your passkey to the signer: only it can open the wallet and approve a transfer.'],14 setupToken: ['Jeton de configuration', 'Setup token'], createPasskey: ['Créer ma clé d’accès', 'Create my passkey'],15 noWebauthn: ['Ce navigateur ne prend pas en charge les clés d’accès.', 'This browser does not support passkeys.'],16 privateAccess: ['Accès privé — propriétaire uniquement', 'Private access — owner only'],17 // home18 totalEstimate: ['Valeur totale estimée', 'Estimated total value'], estimate: ['estimation', 'estimate'],19 assets: ['Actifs', 'Assets'], showZero: ['Afficher les soldes nuls', 'Show zero balances'], hideZero: ['Masquer les soldes nuls', 'Hide zero balances'],20 pending: ['Transferts en cours', 'Transfers in progress'], networks: ['Réseaux', 'Networks'], operational: ['opérationnel', 'operational'],21 degraded: ['dégradé', 'degraded'], block: ['bloc', 'block'], unavailable: ['indisponible', 'unavailable'], on: ['sur', 'on'],22 haltedBanner: ['Arrêt d’urgence actif : aucune signature possible. La consultation reste disponible.', 'Emergency halt active: signing is disabled. Balances remain visible.'],23 hide: ['Masquer les soldes', 'Hide balances'], show: ['Afficher les soldes', 'Show balances'], noPrices: ['Prix désactivés', 'Prices disabled'],24 emptyWallet: ['Portefeuille vide. Utilisez « Recevoir » pour obtenir votre adresse de dépôt.', 'Empty wallet. Use “Receive” to get your deposit address.'],25 // receive26 receiveTitle: ['Recevoir', 'Receive'], network: ['Réseau', 'Network'], asset: ['Actif', 'Asset'], yourAddress: ['Votre adresse', 'Your address'],27 copy: ['Copier', 'Copy'], copied: ['Copié', 'Copied'],28 onlySend: ['Envoyez uniquement {assets} sur le réseau {network}. Un dépôt sur un autre réseau ou d’un autre jeton peut être perdu définitivement.',29 'Only send {assets} on the {network} network. Deposits on another network or of another token may be lost permanently.'],30 evmSame: ['Cette adresse est la même sur tous vos réseaux compatibles Ethereum (Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, HyperEVM), mais les fonds ne passent pas d’un réseau à l’autre : vérifiez le réseau choisi par l’expéditeur.',31 'This address is the same on all your Ethereum-compatible networks (Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, HyperEVM), but funds do not move between networks: check the network the sender uses.'],32 depositShown: ['Un dépôt apparaît ici une fois confirmé sur la chaîne ({n} confirmations pour la finalité).', 'A deposit shows here once confirmed on-chain ({n} confirmations for finality).'],33 gasNote: ['Pour envoyer des USDC plus tard, il faut aussi un peu de {sym} sur ce réseau pour payer les frais.', 'To send USDC later you also need a little {sym} on this network to pay fees.'],34 addressFromSigner: ['Adresse dérivée par le signataire', 'Address derived by the signer'], explorer: ['Explorateur', 'Explorer'],35 // send36 sendTitle: ['Envoyer', 'Send'], destination: ['Adresse de destination', 'Destination address'], amount: ['Montant', 'Amount'], max: ['Max', 'Max'],37 note: ['Note (privée, facultative)', 'Note (private, optional)'], available: ['Disponible', 'Available'], review: ['Vérifier', 'Review'],38 reviewTitle: ['Vérification', 'Review'], youSend: ['Vous envoyez', 'You send'], to: ['À', 'To'], from: ['De', 'From'], fee: ['Frais réseau estimés', 'Estimated network fee'],39 feeMax: ['Plafond de frais approuvé', 'Approved fee ceiling'], baseUnits: ['unités de base', 'base units'],40 simulated: ['Simulation réussie sur le réseau', 'Simulation succeeded on the network'],41 w_new_destination: ['Nouvelle destination : vous n’avez jamais envoyé à cette adresse. Vérifiez chaque caractère.', 'New destination: you have never sent to this address. Check every character.'],42 w_address_poisoning_suspected: ['ATTENTION : cette adresse ressemble à une adresse connue (mêmes début et fin) mais est différente. Possible empoisonnement d’adresse.',43 'WARNING: this address looks like a known one (same start and end) but differs. Possible address poisoning.'],44 w_contract_destination: ['La destination est un contrat, pas un portefeuille simple.', 'The destination is a contract, not a plain wallet.'],45 w_creates_token_account: ['Le destinataire n’a pas encore de compte USDC : sa création coûte environ 0,00204 SOL en plus.', 'The recipient has no USDC account yet: creating it costs about 0.00204 SOL extra.'],46 w_creates_account: ['Le compte du destinataire n’existe pas encore : ce transfert le crée (au moins 1 XLM, dont 1 XLM reste immobilisé chez lui).', 'The recipient account does not exist yet: this transfer creates it (at least 1 XLM, of which 1 XLM stays locked on their side).'],47 w_memo_numeric_id: ['Le mémo ne contient que des chiffres : il est envoyé comme identifiant numérique (MEMO_ID), le format attendu par les plateformes d’échange.', 'The memo is digits only: it is sent as a numeric id (MEMO_ID), the format exchanges expect.'],48 w_network_congested: ['Réseau très chargé : les frais sont plafonnés, le transfert peut expirer sans être inclus (aucun fonds ne bouge dans ce cas).', 'The network is congested: the fee is capped, so the transfer may expire without being included (no funds move in that case).'],49 w_activates_account: ['Cette adresse n’a jamais été utilisée sur ce réseau : son activation est facturée à l’expéditeur (environ 1,1 TRX sur TRON), en plus du montant.', 'This address has never been used on this network: activating it is charged to the sender (about 1.1 TRX on TRON), on top of the amount.'],50 w_near_creates_account: ['Ce compte NEAR n’existe pas encore : ce transfert le crée, ce qui ajoute environ 0,007 NEAR de frais à la charge de l’expéditeur.', 'This NEAR account does not exist yet: this transfer creates it, which adds about 0.007 NEAR of fees paid by the sender.'],51 w_deploys_wallet: ['Premier envoi depuis ce portefeuille TON : ce transfert déploie aussi le contrat du portefeuille (frais un peu plus élevés, non simulable à l’avance).', 'First transfer from this TON wallet: it also deploys the wallet contract (slightly higher fee, cannot be simulated beforehand).'],52 w_destination_not_initialized: ['Aucun contrat n’est déployé à cette adresse TON (portefeuille neuf ou adresse erronée) : les fonds y seront crédités sans retour possible. Vérifiez l’adresse.', 'No contract is deployed at this TON address (a new wallet, or a wrong address): the funds will be credited there and cannot bounce back. Check the address.'],53 iChecked: ['J’ai vérifié l’adresse, le réseau et le montant.', 'I have checked the address, network and amount.'],54 irreversible: ['Un transfert sur chaîne est irréversible.', 'An on-chain transfer is irreversible.'],55 approve: ['Approuver avec la clé d’accès', 'Approve with passkey'], cancel: ['Annuler', 'Cancel'], back: ['Retour', 'Back'],56 approving: ['En attente de la clé d’accès…', 'Waiting for passkey…'], preparing: ['Préparation et simulation…', 'Preparing and simulating…'],57 boundNote: ['Votre clé d’accès signe l’empreinte exacte de ce transfert. Tout changement d’adresse, de montant, de réseau ou de frais l’invalide.',58 'Your passkey signs the exact fingerprint of this transfer. Any change of address, amount, network or fee invalidates it.'],59 fingerprint: ['Empreinte', 'Fingerprint'], expiresIn: ['Expire dans', 'Expires in'], newTransfer: ['Nouveau transfert', 'New transfer'],60 tracking: ['Suivi du transfert', 'Transfer tracking'], addressBook: ['Carnet d’adresses', 'Address book'], saveAddress: ['Enregistrer cette adresse', 'Save this address'],61 label: ['Libellé', 'Label'], save: ['Enregistrer', 'Save'], paste: ['Coller', 'Paste'], noGas: ['Solde nul', 'Zero balance'],62 // states63 s_draft: ['Brouillon', 'Draft'], s_pending_approval: ['En attente d’approbation', 'Awaiting approval'], s_approved: ['Approuvé', 'Approved'],64 s_signed: ['Signé', 'Signed'], s_broadcast: ['Diffusé', 'Broadcast'], s_confirming: ['Confirmation en cours', 'Confirming'], s_finalized: ['Finalisé', 'Finalized'],65 s_failed: ['Échoué', 'Failed'], s_rejected: ['Rejeté', 'Rejected'], s_expired: ['Expiré', 'Expired'], s_replaced: ['Remplacé', 'Replaced'], s_reorged: ['Réorganisé', 'Reorged'],66 broadcastNote: ['Diffusé ne veut pas dire réussi : attendez « Finalisé ».', 'Broadcast does not mean success: wait for “Finalized”.'],67 confirmations: ['confirmations', 'confirmations'],68 // activity69 all: ['Tout', 'All'], sent: ['Envoyés', 'Sent'], received: ['Reçus', 'Received'], noActivity: ['Aucune activité pour l’instant.', 'No activity yet.'],70 viewExplorer: ['Voir dans l’explorateur', 'View in explorer'], txid: ['Identifiant de transaction', 'Transaction id'], status: ['État', 'Status'],71 time: ['Date (locale)', 'Time (local)'], error: ['Erreur', 'Error'], allNetworks: ['Tous les réseaux', 'All networks'],72 // security73 signer: ['Signataire isolé', 'Isolated signer'], reachable: ['joignable', 'reachable'], unreachable: ['injoignable', 'unreachable'], keyId: ['Identifiant de clé', 'Key id'],74 signingOn: ['Signature active', 'Signing enabled'], signingOff: ['Signature arrêtée', 'Signing halted'],75 halt: ['Arrêt d’urgence', 'Emergency halt'], haltConfirm: ['Bloque toute signature immédiatement. La réactivation exige la commande « unhalt » sur la machine du signataire. Tapez STOP pour confirmer.',76 'Blocks all signing immediately. Re-enabling requires the “unhalt” command on the signer machine. Type STOP to confirm.'],77 limits: ['Limites du signataire', 'Signer limits'], perTx: ['Par transfert', 'Per transfer'], perDay: ['Par jour (UTC)', 'Per day (UTC)'], usedToday: ['Utilisé aujourd’hui', 'Used today'],78 limitsNote: ['Les limites sont appliquées par le signataire lui-même et ne se modifient que sur sa machine (policy.json).', 'Limits are enforced by the signer itself and can only be changed on its machine (policy.json).'],79 devices: ['Clés d’accès autorisées', 'Authorized passkeys'], addDevice: ['Ajouter une clé d’accès de secours', 'Add a backup passkey'],80 addDeviceNote: ['Deux étapes : créer la nouvelle clé, puis l’autoriser avec une clé existante.', 'Two steps: create the new passkey, then authorize it with an existing one.'],81 synced: ['synchronisée', 'synced'], deviceBound: ['liée à l’appareil', 'device-bound'], lastUsed: ['dernière utilisation', 'last used'], never: ['jamais', 'never'],82 sessions: ['Sessions actives', 'Active sessions'], revokeAll: ['Fermer toutes les sessions', 'Sign out everywhere'],83 audit: ['Journal d’audit', 'Audit log'], auditIntact: ['Chaîne d’empreintes intacte', 'Hash chain intact'], auditBroken: ['CHAÎNE ROMPUE à l’entrée', 'CHAIN BROKEN at entry'],84 recovery: ['Phrase de récupération', 'Recovery phrase'],85 recoveryBody: ['La phrase de 24 mots n’est jamais affichée ici. Pour la noter sur papier, exécutez vous-même, dans un terminal privé sur la machine du signataire : ',86 'The 24-word phrase is never shown here. To write it on paper, run it yourself in a private terminal on the signer machine: '],87 recoveryWarn: ['Tant qu’elle n’est pas notée hors ligne, une panne du disque du signataire = perte définitive des fonds.', 'Until it is written down offline, a signer disk failure = permanent loss of funds.'],88 entries: ['entrées', 'entries'], signerJournal: ['Journal du signataire', 'Signer journal'],89 // settings90 language: ['Langue', 'Language'], currency: ['Devise d’affichage', 'Display currency'], theme: ['Thème', 'Theme'], dark: ['Sombre', 'Dark'], light: ['Clair', 'Light'],91 prices: ['Prix de marché (CoinGecko)', 'Market prices (CoinGecko)'], pricesNote: ['Seuls les symboles des actifs sont envoyés ; jamais vos adresses ni vos soldes.', 'Only asset symbols are sent; never your addresses or balances.'],92 exportCsv: ['Exporter l’activité (CSV)', 'Export activity (CSV)'], logout: ['Verrouiller', 'Lock'], rpcStatus: ['État des sources RPC', 'RPC source status'],93 version: ['Version', 'Version'], identityOk: ['identité de chaîne vérifiée', 'chain identity verified'], identityKo: ['identité non vérifiée', 'identity not verified'],94 retry: ['Réessayer', 'Retry'], loading: ['Chargement…', 'Loading…'], offline: ['Hors ligne ou serveur injoignable', 'Offline or server unreachable'],95 e_bad_address: ['Adresse invalide pour ce réseau.', 'Invalid address for this network.'],96 e_bad_amount: ['Montant invalide.', 'Invalid amount.'],97 e_insufficient_funds: ['Solde insuffisant.', 'Insufficient balance.'],98 e_insufficient_gas: ['Pas assez de jeton natif sur ce réseau pour payer les frais.', 'Not enough native token on this network to pay the fee.'],99 e_policy: ['Refusé par les limites du signataire.', 'Refused by the signer limits.'],100 e_signer_policy: ['Refusé par les limites du signataire.', 'Refused by the signer limits.'],101 e_rpc_degraded: ['Source de données réseau indisponible : transfert refusé par prudence.', 'Network data source unavailable: transfer refused as a precaution.'],102 e_rpc_disagreement: ['Les sources de données réseau ne concordent pas : transfert refusé par prudence.', 'Network data sources disagree: transfer refused as a precaution.'],103 e_signer_unreachable: ['Signataire injoignable : rien n’a été signé.', 'Signer unreachable: nothing was signed.'],104 e_expired: ['Fenêtre d’approbation expirée. Recommencez.', 'Approval window expired. Start again.'],105 e_halted: ['Arrêt d’urgence actif.', 'Emergency halt is active.'],106 e_pending_tx: ['Une transaction précédente est encore en attente sur ce réseau.', 'A previous transaction is still pending on this network.'],107 e_simulation_failed: ['La simulation a échoué : transfert refusé.', 'Simulation failed: transfer refused.'],108 e_signer_bad_approval: ['Approbation refusée par le signataire.', 'Approval refused by the signer.'],109 e_contract_destination: ['Destination non prise en charge (contrat).', 'Unsupported destination (contract).'],110 e_bad_destination: ['Destination non prise en charge.', 'Unsupported destination.'],111 e_below_rent: ['Montant trop faible pour créer le compte destinataire.', 'Amount too small to create the recipient account.'],112 e_rate_limited: ['Trop de requêtes. Patientez un instant.', 'Too many requests. Wait a moment.'],113 e_offline: ['Hors ligne ou serveur injoignable.', 'Offline or server unreachable.'],114 e_login_failed: ['Clé d’accès non reconnue.', 'Passkey not recognized.'],115 e_signer_forbidden: ['Jeton de configuration invalide.', 'Invalid setup token.'],116 checking: ['Vérification des réseaux…', 'Checking networks…'],117 netsUp: ['{up}/{n} réseaux opérationnels', '{up}/{n} networks operational'],118 sendPaused: ['consultation seule pour l’instant', 'read-only for now'],119 partialNote: ['Une source de données ne répond pas. Les soldes restent visibles ; les envois sur ce réseau reprennent dès son retour.', 'One data source is not answering. Balances stay visible; sends on this network resume when it is back.'],120 more: ['Plus', 'More'], securityLink: ['Sécurité, limites et clés d’accès', 'Security, limits and passkeys'], seeAudit: ['Afficher le journal', 'Show log'], hideAudit: ['Masquer le journal', 'Hide log'],121 remaining: ['restant aujourd’hui', 'left today'], perTxShort: ['max. par transfert', 'max per transfer'],122 price: ['Prix', 'Price'], range: ['Période', 'Range'], r_1: ['sur 24 h', 'past 24 h'], r_7: ['sur 7 jours', 'past 7 days'], r_30: ['sur 30 jours', 'past 30 days'], r_365: ['sur 1 an', 'past year'],123 yourBalance: ['Votre solde', 'Your balance'], otherNetworks: ['{sym} sur vos autres réseaux', '{sym} on your other networks'], marketData: ['Marché', 'Market'],124 change24h: ['Variation 24 h', '24 h change'], change7d: ['Variation 7 j', '7 d change'], marketCap: ['Capitalisation', 'Market cap'], volume24h: ['Volume 24 h', '24 h volume'],125 range24h: ['Bas – haut 24 h', '24 h low – high'], rank: ['Rang', 'Rank'], marketSource: ['Données de marché : CoinGecko, en USD. Indicatif.', 'Market data: CoinGecko, in USD. Indicative.'],126 assetDetails: ['Détails', 'Details'], decimals: ['Décimales', 'Decimals'], contract: ['Contrat du jeton', 'Token contract'], nativeCoin: ['Monnaie native du réseau', 'Native coin of the network'],127 verifiedToken: ['Adresse épinglée dans le portefeuille et revérifiée sur la chaîne (symbole et décimales) à chaque démarrage.', 'Address pinned in the wallet and re-verified on-chain (symbol and decimals) at every start.'],128 allAssets: ['Tous les actifs', 'All assets'], yourAssets: ['Vos actifs', 'Your assets'], search: ['Rechercher un actif ou un réseau', 'Search an asset or network'], today: ['aujourd’hui', 'today'],129 noMatch: ['Aucun actif ne correspond.', 'No matching asset.'], popular: ['Populaires', 'Popular'], tokensCount: ['{n} actifs pris en charge', '{n} supported assets'],130 showAll: ['Tout afficher', 'Show all'], showLess: ['Réduire', 'Show less'],131 memoText: ['Mémo (si le destinataire l’exige)', 'Memo (if the recipient requires one)'], memoTag: ['Étiquette de destination (si le destinataire l’exige)', 'Destination tag (if the recipient requires one)'],132 memoWarn: ['Les plateformes d’échange exigent souvent un mémo ou une étiquette : sans lui, le dépôt peut être perdu.', 'Exchanges often require a memo or tag: without it the deposit can be lost.'],133 memo: ['Mémo / étiquette', 'Memo / tag'],134 activationNote: ['Sur {network}, un compte doit détenir au moins {amount} {sym} pour exister : le premier dépôt doit dépasser ce montant, qui reste ensuite immobilisé.', 'On {network}, an account must hold at least {amount} {sym} to exist: the first deposit must exceed it, and that amount then stays locked.'],135 e_bad_memo: ['Mémo ou étiquette invalide.', 'Invalid memo or tag.'], e_unsupported_network: ['Réseau pas encore activé sur le signataire.', 'Network not yet enabled on the signer.'], e_unsupported_asset: ['Actif non pris en charge.', 'Unsupported asset.'],136 swap: ['Échanger', 'Swap'], swYouPay: ['Vous payez', 'You pay'], swYouReceive: ['Vous recevez (estimation)', 'You receive (estimate)'], swChoose: ['Choisir un actif', 'Choose an asset'], swFlip: ['Inverser', 'Flip'],137 swMin: ['min. garanti', 'min. guaranteed'], swNet: ['net', 'net'], swSlippage: ['Tolérance de glissement', 'Slippage tolerance'], swMode: ['Critère', 'Optimise for'],138 sw_best_price: ['Meilleur prix', 'Best price'], sw_fastest: ['Plus rapide', 'Fastest'], sw_balanced: ['Équilibré', 'Balanced'],139 swQuoteOnly: ['Comparaison de routes uniquement : l’exécution des échanges n’est pas activée. Les montants sont des devis en direct des fournisseurs, pas des engagements.', 'Route comparison only: swap execution is not enabled. Amounts are live provider quotes, not commitments.'],140 swNoProviders: ['Aucun fournisseur de liquidité n’est encore branché.', 'No liquidity provider is connected yet.'], swSearching: ['Recherche des meilleures routes…', 'Searching for the best routes…'],141 swError: ['La recherche de routes a échoué. Réessayez.', 'Route search failed. Try again.'],142 swNoRoute: ['Aucun fournisseur connecté ne couvre cette paire.', 'No connected provider covers this pair.'], swNoLiquidity: ['Des fournisseurs couvrent cette paire, mais aucun ne propose de route exécutable pour ce montant en ce moment.', 'Providers cover this pair, but none offers an executable route for this amount right now.'],143 swFees: ['Frais', 'Fees'], swImpact: ['Impact', 'Impact'], swSteps: ['Étapes', 'Steps'], swRisk: ['Risques', 'Risks'], swIncluded: ['déjà déduit', 'already deducted'], swUnknownTime: ['durée inconnue', 'time unknown'],144 swRisk_low: ['Risque faible', 'Low risk'], swRisk_medium: ['Risque moyen', 'Medium risk'], swRisk_high: ['Risque élevé', 'High risk'],145 swKind_swap: ['Échange', 'Swap'], swKind_bridge: ['Pont', 'Bridge'], swKind_native_swap: ['Échange natif', 'Native swap'], swKind_wrap: ['Emballage', 'Wrap'], swKind_unwrap: ['Déballage', 'Unwrap'],146 swFee_network: ['Frais de réseau', 'Network fee'], swFee_protocol: ['Frais de protocole', 'Protocol fee'], swFee_provider: ['Frais du fournisseur', 'Provider fee'], swFee_bridge: ['Frais de pont', 'Bridge fee'], swFee_affiliate: ['Frais d’affiliation', 'Affiliate fee'],147 swFlag_inconsistent_amounts: ['Montants incohérents', 'Inconsistent amounts'], swFlag_not_executable: ['Devis seulement', 'Quote only'], swFlag_opaque_transaction: ['Transaction que le signataire ne peut pas reconstruire lui-même', 'Transaction the signer cannot rebuild by itself'],148 swFlag_high_price_impact: ['Fort impact sur le prix', 'High price impact'], swFlag_price_impact: ['Impact sur le prix', 'Price impact'], swFlag_cross_chain: ['Passage entre deux réseaux', 'Crosses two networks'],149 swFlag_no_refund_path: ['Pas de remboursement en cas d’échec', 'No refund if it fails'], swFlag_refund_unknown: ['Remboursement non documenté', 'Refund behaviour unknown'], swFlag_multi_step: ['Plusieurs transactions successives', 'Several successive transactions'],150 swFlag_no_time_estimate: ['Durée non fournie', 'No time estimate'], swFlag_fee_unpriced: ['Un frais n’a pas pu être valorisé', 'A fee could not be valued'], swFlag_better_than_market: ['Devis meilleur que le marché : suspect', 'Quote better than the market: suspicious'],151 swFlag_far_below_market: ['Très en dessous du marché', 'Far below market'], swFlag_below_market: ['En dessous du marché', 'Below market'], swFlag_no_market_reference: ['Pas de prix de référence', 'No market reference'], swFlag_outlier_vs_peers: ['Très au-dessus des autres fournisseurs : suspect', 'Far above other providers: suspicious'],152 swExec_verified: ['Le signataire pourrait reconstruire et vérifier cette transaction lui-même.', 'The signer could rebuild and verify this transaction by itself.'],153 swExec_opaque: ['Transaction construite par le fournisseur : le signataire ne pourrait la vérifier que partiellement.', 'Transaction built by the provider: the signer could only verify it partially.'],154 swExec_quote_only: ['Devis de comparaison : non exécutable par le portefeuille.', 'Comparison quote: not executable by the wallet.'],155 swIntro: ['Devis en direct de plusieurs fournisseurs. Exécution disponible : échanges au sein d’un réseau EVM (KyberSwap), sur Solana (Jupiter), USDC entre réseaux (Circle CCTP) et BTC ou LTC natifs vers ou depuis Ethereum (THORChain). Les autres routes sont affichées pour comparaison.', 'Live quotes from several providers. Execution is available for swaps within an EVM network (KyberSwap), on Solana (Jupiter), USDC across networks (Circle CCTP) and native BTC or LTC to or from Ethereum (THORChain). Other routes are shown for comparison.'],156 swExecute: ['Échanger via {via}', 'Swap via {via}'], swExecNotBest: ['La route exécutable n’est pas la mieux classée : comparez avant de confirmer.', 'The executable route is not the top-ranked one: compare before confirming.'],157 swExecWhere: ['Cette route est affichée pour comparaison : son exécution n’est pas encore disponible dans le portefeuille.', 'This route is shown for comparison: executing it is not available in the wallet yet.'],158 swReview: ['Vérifier l’échange', 'Review the swap'], swTracking: ['Suivi de l’échange', 'Swap tracking'], swMinGuaranteed: ['Minimum garanti', 'Guaranteed minimum'], swExpected: ['attendu', 'expected'], swReceived: ['Reçu', 'Received'],159 swGuarantee: ['Le signataire a décodé la transaction : elle ne peut que livrer au moins ce minimum à votre propre adresse, ou échouer entièrement.', 'The signer decoded the transaction: it can only deliver at least this minimum to your own address, or fail entirely.'],160 swNeedsApproval: ['Deux transactions seront signées : une autorisation limitée au montant exact de {sym}, puis l’échange. L’échange est simulé à nouveau juste avant son envoi.', 'Two transactions will be signed: an allowance limited to the exact {sym} amount, then the swap. The swap is simulated again right before it is sent.'],161 swApproval: ['Autorisation du jeton', 'Token allowance'], swAppr_pending: ['à envoyer', 'to be sent'], swAppr_sent: ['envoyée, en attente', 'sent, waiting'], swAppr_confirmed: ['confirmée', 'confirmed'], swClose: ['Fermer', 'Close'],162 w_swap_needs_approval: ['Une autorisation du montant exact précède l’échange.', 'An exact-amount allowance precedes the swap.'],163 e_swap_not_enabled: ['L’exécution n’est pas activée pour cette route.', 'Execution is not enabled for this route.'], e_no_route: ['Aucune route pour cette paire et ce montant en ce moment.', 'No route for this pair and amount right now.'],164 e_provider_unavailable: ['Le fournisseur ne répond pas : rien n’a été signé.', 'The provider did not answer: nothing was signed.'], e_provider_bad_answer: ['Réponse inattendue du fournisseur : échange refusé.', 'Unexpected provider answer: swap refused.'],165 e_router_changed: ['Le contrat d’échange n’est plus celui qui a été vérifié : échange refusé.', 'The swap contract is no longer the reviewed one: swap refused.'], e_account_has_code: ['Cette adresse porte du code : échange refusé.', 'This address carries code: swap refused.'],166 e_same_asset: ['Choisissez deux actifs différents.', 'Choose two different assets.'],167 swExecuteDisabled: ['Exécution non activée', 'Execution not enabled'], swTook: ['{n} fournisseurs interrogés en {ms} ms', '{n} providers queried in {ms} ms'], swFirst: ['premier devis en {ms} ms', 'first quote in {ms} ms'], swSkipped: ['non configuré', 'not configured'],168 agents: ['Agents', 'Agents'], agNew: ['Nouvel agent', 'New agent'], agCreate: ['Créer l’agent', 'Create the agent'], agNone: ['Aucun agent pour l’instant.', 'No agent yet.'],169 agIntro: ['Un agent négocie avec un portefeuille séparé du vôtre. En mode réel, il agit sans votre approbation à chaque ordre, mais uniquement dans les limites d’un mandat que le signataire applique lui-même et que vous pouvez révoquer à tout moment.',170 'An agent trades with a wallet separate from yours. In live mode it acts without your approval on each order, but only within a mandate that the signer enforces by itself and that you can revoke at any time.'],171 agName: ['Nom', 'Name'], agMission: ['Mission (facultatif)', 'Mission (optional)'], agUniverse: ['Actifs autorisés (contre {cash})', 'Allowed assets (against {cash})'],172 agUniverseNote: ['Tout actif du registre vérifié du portefeuille coté en USD sur au moins deux bourses, sur ce réseau. De 1 à {max} actifs ; {live} au plus en réel (le mandat couvre 12 actifs, trésorerie comprise).', 'Any asset of the wallet’s verified registry quoted in USD on at least two exchanges, on this network. 1 to {max} assets; {live} at most when live (a mandate covers 12 assets, cash included).'],173 // V5: agents on any network, any registry asset174 agNetwork: ['Réseau', 'Network'], agNetworkNote: ['Un agent vit sur un seul réseau : son portefeuille, ses actifs et son mandat y sont attachés.', 'An agent lives on one network: its wallet, its assets and its mandate are tied to it.'],175 agNetOff: ['pas encore d’actif de trésorerie vérifié', 'no verified cash asset yet'],176 agCash: ['Trésorerie', 'Cash leg'],177 agFeeWarn: ['Sur Ethereum, chaque ordre coûte des dollars en frais de réseau{cost}. Un agent aux petits ordres y sera mangé par les frais : préférez Base, Arbitrum ou Optimism, ou des ordres de plusieurs centaines de dollars.',178 'On Ethereum every order costs dollars in network fees{cost}. An agent with small orders will be eaten by fees: prefer Base, Arbitrum or Optimism, or orders of several hundred dollars.'],179 agFeeCost: [' (environ {usd} $ US par ordre en ce moment)', ' (about {usd} USD per order right now)'],180 agFeeShare: ['Frais de réseau estimés : {usd} $ US par ordre, soit {pct} % de votre ordre maximal.', 'Estimated network fee: {usd} USD per order, {pct} % of your largest order.'],181 agGasReserve: ['Réserve de frais exigée pour passer en réel : {amount} {sym} dans le portefeuille de l’agent (calculée sur les prix du gaz récents).', 'Fee reserve required to go live: {amount} {sym} in the agent’s wallet (computed from recent gas prices).'],182 agPaperOnly: ['simulation seulement', 'paper only'],183 agPaperOnlyNote: ['{assets} : le signataire ne peut pas en vérifier le prix (il exige Coinbase et Kraken ensemble). L’agent pourra tourner en simulation, pas en réel.', '{assets}: the signer cannot check its price (it requires Coinbase and Kraken together). The agent can run on paper, not live.'],184 agNoData: ['historique en cours de collecte', 'history being collected'],185 agRepr: ['Détenu sous la forme', 'Held as'], agReprNative: ['jeton natif du réseau', 'native coin of the network'], agReprToken: ['jeton d’origine', 'original token'],186 agIssuer: ['Émetteur : {issuer}', 'Issuer: {issuer}'],187 agIssuerNote: ['Un actif enveloppé ou adossé ({assets}) dépend de son émetteur et peut décrocher de ce qu’il représente. Le signataire compare chaque ordre au prix de l’actif SOUS-JACENT sur les bourses : en cas de décrochage, il refuse les ordres (achat comme vente) plutôt que de brader — il faudra alors retirer l’actif vers votre portefeuille.',188 'A wrapped or pegged asset ({assets}) depends on its issuer and can lose its peg. The signer checks every order against the exchange price of the UNDERLYING asset: after a depeg it refuses orders (buying and selling alike) rather than sell at a discount — you would then withdraw the asset to your wallet.'],189 agTooMany: ['{max} actifs au plus.', '{max} assets at most.'],190 agGeneric: ['tout univers', 'any universe'], agGenericNote: ['s’adapte aux actifs de l’agent ({n})', 'adapts to the agent’s assets ({n})'],191 agGasRole: ['frais de réseau', 'network fees'], agHeldAs: ['sous forme de {asset}', 'held as {asset}'],192 agMandateNet: ['Réseau', 'Network'], agMandateGas: ['Réserve de frais', 'Fee reserve'],193 e_universe_size: ['Cette stratégie ne convient pas à ce nombre d’actifs.', 'This strategy does not fit this number of assets.'],194 e_universe_mismatch: ['Cette stratégie est écrite pour d’autres actifs.', 'This strategy is written for other assets.'],195 e_no_signer_price: ['Passage en réel impossible : le signataire ne peut pas vérifier le prix d’un actif.', 'Cannot go live: the signer cannot check the price of an asset.'],196 e_too_many_assets: ['Passage en réel impossible : un mandat couvre 12 actifs au plus, trésorerie comprise.', 'Cannot go live: a mandate covers at most 12 assets, cash included.'],197 e_no_gas_estimate: ['Réserve de frais impossible à calculer pour l’instant.', 'The fee reserve cannot be computed right now.'],198 agCapital: ['Capital alloué', 'Allocated capital'], agInterval: ['Fréquence', 'Frequency'], agMaxExposure: ['Exposition max.', 'Max exposure'], agMaxLoss: ['Perte max.', 'Max loss'], agMaxOrder: ['Par ordre', 'Per order'], agMaxDaily: ['Par jour', 'Per day'],199 agLossNote: ['La perte maximale est surveillée par le moteur et peut être dépassée lors d’un saut de prix ou d’une panne. La seule limite dure est le capital que vous placez dans le portefeuille de l’agent.',200 'The maximum loss is monitored by the engine and can be overshot by a price gap or an outage. The only hard limit is the capital you place in the agent’s wallet.'],201 ag_CREATED: ['Créé', 'Created'], ag_RESEARCHING: ['Recherche', 'Researching'], ag_RESEARCH: ['Recherche', 'Research'], ag_BACKTESTING: ['Backtest', 'Backtesting'], ag_PAPER_TRADING: ['Simulation', 'Paper trading'], ag_AWAITING_APPROVAL: ['À approuver', 'Awaiting approval'],202 ag_LIVE: ['Réel', 'Live'], ag_PAUSED: ['En pause', 'Paused'], ag_STOPPED: ['Arrêté', 'Stopped'], ag_FAILED: ['En échec', 'Failed'],203 agVault: ['Portefeuille de l’agent', 'Agent wallet'], agAllocated: ['Capital prévu :', 'Planned capital:'], agVaultAddr: ['Adresse du portefeuille de l’agent ({network})', 'Agent wallet address ({network})'], agFund: ['Alimenter', 'Fund'],204 agFundNote: ['Envoyez des {cash} et du {native} pour les frais sur {network} à cette adresse depuis l’écran Envoyer. Une réserve de {native} reste toujours hors de portée de la stratégie ; elle est exigée pour passer en réel. L’agent ne peut jamais toucher votre portefeuille principal.', 'Send {cash} and some {native} (fees) on {network} to this address from the Send screen. A reserve of {native} always stays out of the strategy’s reach; it is required to go live. The agent can never touch your main wallet.'],205 agElsewhere: ['Cette adresse détient aussi des fonds sur d’autres réseaux que {network}. L’agent ne peut pas les utiliser ; vous pouvez les ramener dans votre portefeuille principal.', 'This address also holds funds on other networks than {network}. The agent cannot use them; you can bring them back to your main wallet.'],206 agElsewhereGas: ['il faut un peu de {gas} à cette adresse sur ce réseau pour payer les frais du retrait', 'a little {gas} is needed at this address on this network to pay the withdrawal fee'],207 agWithdraw: ['Retirer', 'Withdraw'], agWithdrawn: ['Retrait envoyé vers votre portefeuille :', 'Withdrawal sent to your wallet:'], agEquity: ['Valeur du portefeuille', 'Portfolio value'],208 agStrategy: ['Stratégies', 'Strategies'], agNoStrategy: ['Aucune version de stratégie enregistrée. La recherche en proposera ici, avec leur backtest.', 'No strategy version registered. Research will propose them here, with their backtest.'],209 agV_draft: ['brouillon', 'draft'], agV_backtested: ['testée', 'backtested'], agV_approved: ['approuvée', 'approved'], agV_rejected: ['rejetée', 'rejected'], agV_retired: ['retirée', 'retired'], agV_live: ['en service', 'live'],210 agRet: ['Rendement', 'Return'], agDD: ['Perte max.', 'Max drawdown'], agVs: ['achat-conservation', 'buy and hold'], agTest: ['hors échantillon', 'out of sample'], agBench: ['référence', 'benchmark'],211 agReportNote: ['Période hors échantillon, après frais de {fee} pb et glissement de {slip} pb. {trials} variantes testées ; Sharpe corrigé des tests multiples : {dsr}. Un backtest ne prouve pas qu’une stratégie sera rentable.',212 'Out-of-sample period, after {fee} bps fees and {slip} bps slippage. {trials} variants tested; Sharpe deflated for multiple testing: {dsr}. A backtest does not prove a strategy will be profitable.'],213 agLibrary: ['Bibliothèque du laboratoire', 'Laboratory library'], agLibTest: ['Tester', 'Backtest'], agV_backtesting: ['test en cours', 'backtesting'], agBacktesting: ['Backtest en cours sur l’historique réel…', 'Backtest running on real history…'],214 agLibNone: ['Aucune stratégie de la bibliothèque ne convient à ces actifs ({assets}) et à cet intervalle ({interval}).', 'No library strategy fits these assets ({assets}) and this interval ({interval}).'],215 agNoReport: ['Pas de rapport de backtest : cette version ne peut pas être approuvée.', 'No backtest report: this version cannot be approved.'], agApproveVersion: ['Approuver cette version', 'Approve this version'],216 agControl: ['Pilotage', 'Control'], agStartPaper: ['Démarrer en simulation (aucun ordre réel)', 'Start paper trading (no real order)'], agPause: ['Mettre en pause', 'Pause'], agGoLive: ['Passer en réel : préparer le mandat', 'Go live: prepare the mandate'],217 agRevoke: ['Révoquer le mandat et arrêter', 'Revoke the mandate and stop'], agNeedsStrategy: ['Approuvez d’abord une version de stratégie accompagnée de son backtest.', 'First approve a strategy version that comes with its backtest.'],218 agMandateTitle: ['Mandat de trading', 'Trading mandate'],219 agMandateWarn: ['En approuvant, vous autorisez cet agent à échanger sans votre approbation à chaque ordre, dans ces limites, avec les fonds de son portefeuille uniquement. Vous pouvez perdre tout le capital qui s’y trouve.',220 'By approving, you allow this agent to trade without your approval on each order, within these limits, with the funds in its wallet only. You can lose all the capital held there.'],221 agPerOrder: ['par ordre', 'per order'], agPerDay: ['par jour', 'per day'], agOrdersDay: ['Ordres par jour', 'Orders per day'], agExpires: ['Expire le', 'Expires'], agStrategyHash: ['Empreinte du code de stratégie', 'Strategy code fingerprint'],222 agApproveMandate: ['Approuver le mandat avec la clé d’accès', 'Approve the mandate with passkey'], agMandateState: ['Mandat', 'Mandate'], agM_active: ['actif', 'active'], agM_revoked: ['révoqué', 'revoked'], agM_expired: ['expiré', 'expired'], agOrdersToday: ['ordres aujourd’hui', 'orders today'],223 agOrders: ['Ordres', 'Orders'], agNoOrders: ['Aucun ordre.', 'No order.'], agLive: ['réel', 'live'], agPaper: ['simulation', 'paper'],224 agO_filled: ['exécuté', 'filled'], agO_failed: ['échoué', 'failed'], agO_signed: ['signé', 'signed'], agO_sent: ['envoyé', 'sent'], agO_approving: ['autorisation', 'approving'], agO_skipped: ['ignoré', 'skipped'],225 agLog: ['Journal de l’agent', 'Agent log'], agNoLog: ['Rien pour l’instant.', 'Nothing yet.'],226 e_no_strategy: ['Approuvez d’abord une version de stratégie.', 'Approve a strategy version first.'], e_no_report: ['Cette version n’a pas de rapport de backtest.', 'This version has no backtest report.'], e_no_price: ['Prix de marché indisponible : impossible de dimensionner le mandat.', 'Market price unavailable: cannot size the mandate.'],227 e_signer_mandate: ['Refusé par le mandat.', 'Refused by the mandate.'], e_bad_state: ['Action impossible dans l’état actuel.', 'Not possible in the current state.'],228 // >>> perp agents (V6, simulation only) — ONE contiguous block, every key prefixed `pa`: keep additions inside it229 paSim: ['SIMULATION', 'SIMULATION'],230 paSimText: ['Cet agent négocie des contrats perpétuels sur un compte simulé : aucun ordre réel, aucun fonds réel, rien n’est signé.', 'This agent trades perpetual futures on a simulated account: no real order, no real funds, nothing is signed.'],231 paKindLabel: ['Type d’agent', 'Agent type'],232 paKindSpot: ['Au comptant', 'Spot'],233 paKindPerp: ['Perpétuels (simulation)', 'Perpetuals (simulation)'],234 paListTag: ['Simulation · perpétuels', 'Simulation · perpetuals'],235 paInstruments: ['Instruments (jusqu’à {max})', 'Instruments (up to {max})'],236 paSearch: ['Chercher un instrument (BTC, ETH, SOL…)', 'Search an instrument (BTC, ETH, SOL…)'],237 paChosen: ['Choisis :', 'Chosen:'],238 paInstrumentsNote: ['Contrats perpétuels de Hyperliquid, classés par volume. L’agent ne peut négocier que ceux choisis ici ; une stratégie de la bibliothèque doit porter exactement sur les mêmes instruments.', 'Hyperliquid perpetual contracts, sorted by volume. The agent can only trade those chosen here; a library strategy must be written for exactly the same instruments.'],239 paCapital: ['Capital simulé', 'Simulated capital'],240 paCapitalHint: ['Collatéral du compte de simulation créé pour l’agent (minimum {min} USDC). Aucun fonds réel n’est engagé.', 'Collateral of the paper account created for the agent (minimum {min} USDC). No real funds are involved.'],241 paIntervalHint: ['Une décision par barre clôturée.', 'One decision per closed bar.'],242 paLimits: ['Limites de risque', 'Risk limits'],243 paLimitsNote: ['Ces limites sont appliquées deux fois : par le moteur de l’agent, qui réduit ensemble toutes les positions visées (jamais à la hausse), et par le moteur de risque des dérivés, qui refuse tout ordre qui les dépasserait.', 'These limits are applied twice: by the agent’s engine, which scales all target positions down together (never up), and by the derivatives risk engine, which refuses any order that would exceed them.'],244 paMaxLev: ['Levier maximal', 'Max leverage'],245 paMaxLevHint: ['Exposition brute ÷ fonds propres. À ce levier : jusqu’à {usd} USD de positions. Le moteur garde 10 % de marge libre.', 'Gross exposure ÷ equity. At this leverage: up to {usd} USD of positions. The engine keeps 10 % of margin free.'],246 paMaxGross: ['Exposition brute max.', 'Max gross exposure'],247 paMaxGrossHint: ['Somme des positions longues et courtes, en multiple du capital : {usd} USD.', 'Sum of long and short positions, as a multiple of the capital: {usd} USD.'],248 paMaxPos: ['Position max. par instrument', 'Max position per instrument'],249 paMaxPosHint: ['En multiple du capital : {usd} USD par instrument.', 'As a multiple of the capital: {usd} USD per instrument.'],250 paSlip: ['Glissement toléré', 'Slippage bound'],251 paSlipHint: ['Un ordre au marché est exécuté immédiatement ou annulé, au pire à ce nombre de points de base du meilleur prix opposé.', 'A market order is immediate-or-cancel, at worst this many basis points beyond the best opposite price.'],252 paDailyLoss: ['Perte max. par jour', 'Max daily loss'],253 paDailyLossHint: ['{usd} USD sur une journée (UTC) : l’agent ferme tout, puis s’arrête.', '{usd} USD in one day (UTC): the agent closes everything, then stops.'],254 paTotalLoss: ['Perte max. totale', 'Max total loss'],255 paTotalLossHint: ['{usd} USD depuis la création : l’agent ferme tout, puis s’arrête.', '{usd} USD since creation: the agent closes everything, then stops.'],256 paLossNote: ['Avec un effet de levier, une position peut être liquidée avant qu’une limite de perte ne soit atteinte, et un saut de prix peut dépasser toute limite. La simulation liquide le compte entier au prix de référence ; la plateforme réelle procède autrement.', 'With leverage a position can be liquidated before a loss limit is reached, and a price gap can overshoot any limit. The simulation liquidates the whole account at the mark; the real venue proceeds differently.'],257 paCreate: ['Créer l’agent en simulation', 'Create the agent in simulation'],258 paPerps: ['contrats perpétuels', 'perpetual futures'],259 paFlattening: ['Limite de perte atteinte : fermeture de toutes les positions en cours.', 'Loss limit reached: closing every position.'],260 paFlag: ['Alerte de marge sur le compte :', 'Margin warning on the account:'],261 paHold: ['Dernier passage sans décision :', 'Last pass held:'],262 paAccount: ['Compte de simulation', 'Paper account'],263 paNoAccount: ['Compte de simulation introuvable.', 'Paper account not found.'],264 paAllocated: ['Capital simulé {capital} USDC', 'Simulated capital {capital} USDC'],265 paResult: ['Résultat', 'Result'],266 paCollateral: ['Collatéral', 'Collateral'],267 paMarginUsed: ['Marge utilisée', 'Margin used'],268 paFree: ['Marge libre', 'Free collateral'],269 paRealised: ['Résultat réalisé', 'Realised PnL'],270 paFees: ['Frais payés', 'Fees paid'],271 paFundingNet: ['Financement net', 'Net funding'],272 paLiquidations: ['Liquidations simulées', 'Simulated liquidations'],273 paLastBar: ['Dernière barre décidée', 'Last decided bar'],274 paPositions: ['Positions', 'Positions'],275 paNoPositions: ['Aucune position ouverte.', 'No open position.'],276 paSimplifications: ['Simplifications de la simulation : marge de maintien fixe de 2 %, marge croisée seulement, prix de liquidation estimé pour une seule position, exécution contre le carnet réel sans latence ni impact, financement au taux publié par la plateforme.', 'Simulation simplifications: flat 2 % maintenance margin, cross margin only, liquidation price estimated for a single position, fills against the real book with no latency or impact, funding at the venue’s published rate.'],277 paFlatten: ['Fermer toutes les positions (ordres de réduction seulement)', 'Close every position (reduce-only orders)'],278 paFlattened: ['{n} ordre(s) de fermeture envoyé(s) ; {left} position(s) restante(s).', '{n} closing order(s) sent; {left} position(s) left.'],279 paEquity: ['Fonds propres du compte', 'Account equity'],280 paPolicy: ['politique du compte :', 'account policy:'],281 paHalt: ['Disjoncteur du compte déclenché :', 'Account circuit breaker set:'],282 paNoStrategy: ['Aucune version de stratégie enregistrée. Choisissez-en une dans la bibliothèque : elle sera testée sur l’historique de la plateforme.', 'No strategy version registered. Pick one from the library: it will be backtested on the venue’s history.'],283 paVsPerp: ['perp. 1× :', 'perp 1×:'],284 paIntrabar: ['pire intra-barre', 'worst intrabar'],285 paCaveats: ['À lire avant d’approuver', 'Read before approving'],286 paCavHistory: ['Historique court : {days} jours ({bars} barres de {interval}). La plateforme ne conserve que ses 5 000 dernières chandelles ; le jeu de test en est une fraction.', 'Short history: {days} days ({bars} bars of {interval}). The venue keeps only its last 5,000 candles; the test split is a fraction of that.'],287 paCavEstimates: ['Ce sont des estimations : frais {fee} pb et glissement {slip} pb supposés, pénalité de liquidation {pen} pb supposée, financement évalué au prix du contrat (le prix oracle historique n’est pas publié), liquidation modélisée sur les extrêmes des chandelles.', 'These are estimates: assumed {fee} bps fee and {slip} bps slippage, assumed {pen} bps liquidation penalty, funding priced on the contract’s own price (historical oracle prices are not published), liquidation modelled on candle extremes.'],288 paCavLiq: ['Liquidations dans le backtest — apprentissage {train}, validation {val}, test {test}.', 'Liquidations in the backtest — train {train}, validation {val}, test {test}.'],289 paCavWiped: ['Le compte a été anéanti sur le jeu de test.', 'The account was wiped out on the test split.'],290 paCavDsr: ['Sharpe dégonflé {dsr} après {trials} essais : en dessous de 0,95, l’absence de talent n’est pas écartée.', 'Deflated Sharpe {dsr} after {trials} trials: below 0.95, “no skill” is not rejected.'],291 paCavChecks: ['Contrôles du rapport — anticipation : {look}, données : {data}, grand livre : {ledger}, alignement du financement : {fund}.', 'Report checks — look-ahead: {look}, data: {data}, ledger: {ledger}, funding alignment: {fund}.'],292 paCavNoSpot: ['Aucune chandelle au comptant fournie : la référence « acheter et conserver » est le prix du contrat lui-même.', 'No spot candles supplied: the buy-and-hold benchmark is the contract’s own price.'],293 paCavNever: ['Un rapport ne dit jamais qu’une stratégie est rentable : il mesure le passé, sur ces données, avec ces coûts.', 'A report never says a strategy is profitable: it measures the past, on these data, with these costs.'],294 paNotApprovable: ['Cette version ne peut pas être approuvée :', 'This version cannot be approved:'],295 paBacktesting: ['Téléchargement de l’historique de la plateforme, puis backtest en cours… (quelques minutes)', 'Downloading the venue’s history, then backtesting… (a few minutes)'],296 paLibrary: ['Bibliothèque de stratégies sur perpétuels', 'Perpetual strategies library'],297 paLibNone: ['Aucune stratégie de la bibliothèque ne porte exactement sur {assets} à {interval}.', 'No library strategy is written for exactly {assets} at {interval}.'],298 paBounds: ['levier ≤ {lev}, brut ≤ {gross}', 'leverage ≤ {lev}, gross ≤ {gross}'],299 paStart: ['Démarrer la simulation', 'Start the simulation'],300 paStop: ['Arrêter l’agent (les positions restent ouvertes)', 'Stop the agent (positions stay open)'],301 paGoLive: ['Passer en réel', 'Go live'],302 paUnavailable: ['Indisponible', 'Not available'],303 paGoLiveText: ['Le passage en réel d’un agent sur perpétuels exige un mandat de dérivés appliqué par le signataire isolé : instruments, levier, notionnel et limites de perte vérifiés par le signataire à chaque ordre, révocable à tout moment. Ce mandat n’est pas encore disponible. Tant qu’il n’existe pas, cet agent ne peut négocier qu’en simulation.', 'Taking a perp agent live requires a derivatives mandate enforced by the isolated signer: instruments, leverage, notional and loss limits checked by the signer on every order, revocable at any time. That mandate is not available yet. Until it exists, this agent can only trade in simulation.'],304 paActivity: ['Activité du compte', 'Account activity'],305 paOrders: ['Ordres', 'Orders'],306 paFills: ['Exécutions', 'Fills'],307 paFunding: ['Financement', 'Funding'],308 paEvents: ['Événements de risque', 'Risk events'],309 paNone: ['Rien pour l’instant.', 'Nothing yet.'],310 paSignals: ['Journal des signaux', 'Signal log'],311 paNoSignals: ['Aucune décision pour l’instant : une par barre clôturée.', 'No decision yet: one per closed bar.'],312 paSig_done: ['exécuté', 'executed'],313 paSig_hold: ['attente', 'hold'],314 paSig_decided: ['décidé', 'decided'],315 paWeights: ['poids :', 'weights:'],316 paTargets: ['cibles :', 'targets:'],317 paReduceOnly: ['réduction seule', 'reduce-only'],318 paLiqTitle: ['Estimation : marge croisée, approximation pour une seule position', 'Estimate: cross margin, single-position approximation'],319 paColInst: ['Instrument', 'Instrument'],320 paColSide: ['Sens', 'Side'],321 paColSize: ['Taille', 'Size'],322 paColEntry: ['Entrée', 'Entry'],323 paColMark: ['Référence', 'Mark'],324 paColLev: ['Levier', 'Leverage'],325 paColLiq: ['Liquidation (est.)', 'Liquidation (est.)'],326 paColPnl: ['Résultat latent', 'Unrealised PnL'],327 paColTime: ['Heure', 'Time'],328 paColAvg: ['Prix moyen', 'Avg price'],329 paColWorst: ['Pire prix accepté', 'Worst price'],330 paColStatus: ['État', 'Status'],331 paColPrice: ['Prix', 'Price'],332 paColFee: ['Frais', 'Fee'],333 paColClosed: ['Résultat réalisé', 'Closed PnL'],334 paColRate: ['Taux horaire', 'Hourly rate'],335 paColAmount: ['Montant', 'Amount'],336 paColKind: ['Type', 'Kind'],337 // <<< end of the `pa` block338 // >>> research jobs (V7) — ONE contiguous block, every key prefixed `rj`: keep additions inside it339 rjTitle: ['Recherche autonome', 'Autonomous research'],340 rjScreen: ['Recherche', 'Research'],341 rjNew: ['Nouvelle tâche', 'New job'],342 rjNewTitle: ['Nouvelle tâche de recherche', 'New research job'],343 rjJobs: ['Tâches', 'Jobs'],344 rjAll: ['Toutes les tâches de recherche', 'All research jobs'],345 rjNone: ['Aucune tâche de recherche pour l’instant.', 'No research job yet.'],346 rjIntro: ['Un agent de code IA développe une stratégie sur un nœud de recherche isolé : il lit des données de marché, écrit du code, le teste. Il ne peut ni signer, ni passer d’ordre, ni joindre ce portefeuille. Ce qu’il remet est réévalué ici, sur des données qu’il n’a jamais vues, puis attend votre approbation.',347 'An AI coding agent develops a strategy on an isolated research node: it reads market data, writes code, tests it. It cannot sign, place an order or reach this wallet. What it hands in is re-evaluated here, on data it never saw, then waits for your approval.'],348 rjPanelIntro: ['Décrivez la mission ; un agent de code IA la réalise dans un bac à sable, sans accès au portefeuille. Le serveur refait le backtest lui-même avant de vous proposer la version.',349 'Describe the mission; an AI coding agent carries it out in a sandbox, with no access to the wallet. The server re-runs the backtest itself before offering you the version.'],350 rjNoRunner: ['Aucun nœud de recherche n’est configuré sur ce serveur : les tâches restent en file d’attente.', 'No research node is configured on this server: jobs stay queued.'],351 rjRunnerSeen: ['Nœud de recherche vu le {when}', 'Research node last seen {when}'],352 rjRunnerNever: ['Nœud de recherche configuré, jamais vu', 'Research node configured, never seen'],353 rjOpenJobs: ['{n} tâche(s) en cours sur {max}', '{n} of {max} open job(s)'],354 rjMission: ['Mission', 'Mission'],355 rjMissionHint: ['En langage courant. C’est l’objectif donné à l’agent, pas une autorisation : il ne peut rien exécuter.', 'In plain language. It is the goal given to the agent, not an authorization: it cannot execute anything.'],356 rjMissionExample: ['Développe une stratégie statistique BTC/ETH, teste-la sur données historiques et prépare une simulation avec un capital virtuel de 1 000 USDC', 'Develop a statistical BTC/ETH strategy, test it on historical data and prepare a simulation with a virtual capital of 1,000 USDC'],357 rjForAgent: ['Pour cet agent : {assets} · {interval} · {kind}.', 'For this agent: {assets} · {interval} · {kind}.'],358 rjKind: ['Type', 'Kind'], rjKindSpot: ['Au comptant', 'Spot'], rjKindPerp: ['Contrats perpétuels (simulation)', 'Perpetual futures (simulation)'],359 rjInterval: ['Intervalle', 'Interval'],360 rjSymbols: ['Symboles', 'Symbols'], rjSymbolsHint: ['Séparés par des virgules ; il faut des données de marché pour chacun.', 'Comma-separated; market data must exist for each.'],361 rjCapital: ['Capital virtuel de la simulation', 'Virtual capital of the simulation'], rjCapitalHint: ['Sert seulement de point de départ aux backtests.', 'Only the starting cash of the backtests.'],362 rjBudgets: ['Budgets', 'Budgets'],363 rjBudgetTime: ['Durée', 'Wall time'], rjBudgetTrials: ['Essais', 'Trials'], rjTrialsUnit: ['essais', 'trials'], rjBudgetTokens: ['Jetons du modèle', 'Model tokens'], rjBudgetUsd: ['Dépense modèle', 'Model spend'],364 rjBudgetsNote: ['Imposés de l’extérieur par le nœud de recherche : au dépassement, la tâche est tuée et rien n’est remis. L’agent ne peut pas les modifier.', 'Enforced from outside by the research node: on overrun the job is killed and nothing is handed in. The agent cannot change them.'],365 rjFormNote: ['Pas d’accès au Web. L’agent ne reçoit que la partie « entraînement + validation » des données ; la période de test reste sur ce serveur.', 'No web access. The agent only receives the “train + validation” part of the data; the test period stays on this server.'],366 rjCreate: ['Lancer la recherche', 'Start research'],367 rjS_queued: ['en file', 'queued'], rjS_preparing: ['préparation', 'preparing'], rjS_running: ['en cours', 'running'], rjS_evaluating: ['évaluation serveur', 'server evaluation'],368 rjS_submitted: ['remise', 'submitted'], rjS_failed: ['échec', 'failed'], rjS_cancelled: ['annulée', 'cancelled'], rjS_over_budget: ['budget dépassé', 'over budget'],369 rjLog: ['Journal de la tâche', 'Job log'], rjLogEmpty: ['Rien pour l’instant.', 'Nothing yet.'],370 rjLibraryDraft: ['brouillon de bibliothèque', 'library draft'],371 rjHoldout: ['Données : {dev} barres remises à l’agent ; {test} barres gardées sur le serveur à partir du {from} (jamais envoyées au nœud de recherche).', 'Data: {dev} bars given to the agent; {test} bars kept on the server from {from} (never sent to the research node).'],372 rjSandboxOn: ['Agent « {agent} » exécuté dans le bac à sable du système (sandbox-exec) : pas de réseau hors de sa passerelle modèle, pas de fichiers hors de son dossier.', 'Agent “{agent}” ran inside the OS sandbox (sandbox-exec): no network beyond its model gateway, no file outside its directory.'],373 rjSandboxOff: ['Agent « {agent} » exécuté SANS bac à sable du système.', 'Agent “{agent}” ran WITHOUT the OS sandbox.'],374 rjSandboxOffNote: ['Ce nœud de recherche n’offre pas d’isolation par le système : seules les conventions (environnement minimal, dossier séparé) s’appliquaient.', 'This research node offers no OS isolation: only conventions (minimal environment, separate directory) applied.'],375 rjTampered: ['Le registre d’essais de l’agent a été réécrit pendant la tâche : toutes les lignes ont été comptées.', 'The agent’s trial ledger was rewritten during the job: every line was counted.'],376 rjCancel: ['Annuler la tâche', 'Cancel the job'], rjCancelling: ['Annulation demandée…', 'Cancel requested…'],377 rjClaimedTag: ['NON VÉRIFIÉ', 'UNVERIFIED'], rjClaimedTitle: ['Ce que l’agent affirme', 'What the agent claims'],378 rjClaimedNote: ['Texte et chiffres écrits par l’agent IA. Ce sont des déclarations : rien de ce qui suit n’a été mesuré par le serveur.', 'Text and numbers written by the AI agent. They are statements: nothing below was measured by the server.'],379 rjNotes: ['Notes de recherche de l’agent', 'The agent’s research notes'], rjCode: ['Code de la stratégie (strategy.py)', 'Strategy code (strategy.py)'],380 rjRefused: ['Remise refusée par le serveur :', 'Submission refused by the server:'],381 rjMeasuredTag: ['MESURÉ', 'MEASURED'], rjMeasuredTitle: ['Ce que le serveur a mesuré', 'What the server measured'],382 rjMeasuredNote: ['Backtest refait par ce serveur, hors réseau, sur ses propres données. Période de test du {from} au {to} ({bars} barres) : l’agent ne l’a jamais eue.', 'Backtest re-run by this server, offline, on its own data. Test period from {from} to {to} ({bars} bars): the agent never had it.'],383 rjTrials: ['Essais comptés', 'Trials counted'], rjTrialsSplit: ['{job} par la tâche + {server} par le serveur', '{job} by the job + {server} by the server'],384 rjDsr: ['Sharpe déflaté', 'Deflated Sharpe'], rjDsrLow: ['sous 0,95 : aucune habileté établie', 'below 0.95: no skill established'], rjDsrOk: ['≥ 0,95', '≥ 0.95'],385 rjSplits: ['Rendement par période — entraînement {train}, validation {val}, test {test}.', 'Return per split — train {train}, validation {val}, test {test}.'],386 rjCiZero: ['L’intervalle du Sharpe contient zéro : son signe n’est pas établi.', 'The Sharpe interval contains zero: its sign is not established.'],387 rjChecks: ['Contrôles', 'Checks'], rjServerSandbox: ['exécuté en bac à sable sur le serveur', 'run sandboxed on the server'], rjServerNoSandbox: ['exécuté sans bac à sable système sur le serveur', 'run without OS sandbox on the server'],388 rjCompareTitle: ['Déclaré par l’agent / reproduit par le serveur (mêmes données que l’agent)', 'Claimed by the agent / reproduced by the server (the agent’s own data)'],389 rjDiffers: ['Les chiffres déclarés par l’agent diffèrent de ceux du serveur. Seuls ceux du serveur comptent.', 'The numbers the agent claims differ from the server’s. Only the server’s count.'],390 rjAgrees: ['Les chiffres déclarés par l’agent sont ceux que le serveur reproduit.', 'The numbers the agent claims are the ones the server reproduces.'],391 rjColSplit: ['Période · mesure', 'Split · metric'], rjColAgent: ['Agent', 'Agent'], rjColServer: ['Serveur', 'Server'],392 rjSplit_train: ['Entraînement', 'Train'], rjSplit_validation: ['Validation', 'Validation'], rjSplit_inner_test: ['Test interne', 'Inner test'],393 rjTrialsClaim: ['Essais déclarés par l’agent : {claimed} ; comptés par le nœud de recherche : {counted}.', 'Trials claimed by the agent: {claimed}; counted by the research node: {counted}.'],394 rjApproveNote: ['Approuver épingle ce code (son empreinte) pour l’agent. Cela ne déplace aucun fonds : la simulation papier, puis un mandat approuvé par clé d’accès, restent des étapes distinctes.', 'Approving pins this code (its hash) for the agent. It moves no funds: paper trading, then a mandate approved with a passkey, remain separate steps.'],395 rjApprove: ['Approuver cette version', 'Approve this version'], rjApproved: ['Version approuvée.', 'Version approved.'],396 rjStartPaper: ['Démarrer la simulation papier', 'Start paper trading'], rjPaperOn: ['Simulation papier en cours.', 'Paper trading is running.'],397 rjOpenAgent: ['Ouvrir l’agent {name}', 'Open agent {name}'],398 rjAttachTitle: ['Attacher à un agent', 'Attach to an agent'], rjAttachTo: ['Attacher à {name}', 'Attach to {name}'], rjAttached: ['Attachée comme brouillon : approuvez-la sur la page de l’agent.', 'Attached as a draft: approve it on the agent’s page.'],399 rjAttachNone: ['Aucun agent ne négocie exactement {assets} à {interval}. Le rapport du serveur ne vaut que pour ces symboles.', 'No agent trades exactly {assets} at {interval}. The server report is only valid for these symbols.'],400 rjListMeasured: ['{trials} essais, Sharpe déflaté {dsr}', '{trials} trials, deflated Sharpe {dsr}'], rjListDiffers: ['chiffres de l’agent ≠ serveur', 'agent’s numbers ≠ server'],401 rjHowTitle: ['Ce qui est garanti, et par quoi', 'What is guaranteed, and by what'],402 rjHow1: ['L’agent tourne sur une autre machine, dans un bac à sable du système : il ne peut joindre ni le signataire, ni cette API, ni la base de données, ni lire d’autres fichiers.', 'The agent runs on another machine, inside an OS sandbox: it can reach neither the signer, nor this API, nor the database, nor read other files.'],403 rjHow2: ['Il n’a que les données d’entraînement et de validation. La période de test n’est jamais envoyée : il ne peut pas s’y ajuster.', 'It only has the train and validation data. The test period is never sent: it cannot tune on it.'],404 rjHow3: ['Chaque configuration essayée est comptée hors de sa portée ; le Sharpe déflaté du serveur tient compte de tous ces essais.', 'Every configuration it tries is counted out of its reach; the server’s deflated Sharpe ratio accounts for all of them.'],405 rjHow4: ['Le serveur recalcule l’empreinte du code, vérifie sa pureté avant de l’exécuter et refait le backtest lui-même. Les chiffres de l’agent ne sont jamais repris.', 'The server recomputes the code hash, checks its purity before running it and re-runs the backtest itself. The agent’s numbers are never reused.'],406 rjHow5: ['Un backtest ne dit pas qu’une stratégie est rentable. Rien n’est négocié sans votre approbation, puis une simulation papier, puis un mandat signé par clé d’accès.', 'A backtest does not say a strategy is profitable. Nothing trades without your approval, then paper trading, then a mandate signed with a passkey.'],407 e_too_many_jobs: ['Trop de tâches de recherche en cours.', 'Too many research jobs in progress.'], e_no_data: ['Pas de données de marché pour ces symboles.', 'No market data for these symbols.'],408 // <<< end of the `rj` block409 // futures terminal (V4, wave 2: market data + paper trading; no live trading)410 fxTradeArea: ['Type de marché', 'Market type'], fxSpot: ['Au comptant', 'Spot'], fxFutures: ['Contrats à terme', 'Futures'], fxTitle: ['Contrats à terme', 'Futures'],411 fxPaper: ['Simulation', 'Paper'], fxPaperTitle: ['Compte simulé : aucun ordre réel, aucun fonds réel', 'Simulated account: no real order, no real funds'],412 fxBanner: ['Données de marché en lecture seule et ordres simulés. Aucun ordre réel n’est envoyé à une plateforme : la négociation réelle n’est pas activée dans cette version.',413 'Read-only market data and simulated orders. No real order is sent to any venue: live trading is not enabled in this version.'],414 fxViews: ['Vues', 'Views'], fxViewTerminal: ['Terminal', 'Terminal'], fxViewCompare: ['Comparer', 'Compare'], fxViewAccounts: ['Comptes', 'Accounts'],415 fxApiDown: ['Le service des contrats à terme ne répond pas.', 'The futures service is not answering.'], fxMarketError: ['Ce marché ne peut pas être chargé pour l’instant.', 'This market cannot be loaded right now.'],416 fxUnknownMarket: ['Marché inconnu : {id}', 'Unknown market: {id}'], fxOpenDefault: ['Ouvrir {symbol}', 'Open {symbol}'], fxLoading: ['Chargement…', 'Loading…'], fxClose: ['Fermer', 'Close'],417 fxPanels: ['Panneaux du terminal', 'Terminal panels'], fxTabChart: ['Graphique', 'Chart'], fxTabBook: ['Carnet', 'Book'], fxTabLiquidity: ['Liquidité', 'Liquidity'], fxTabTrade: ['Ordre', 'Trade'], fxTabPositions: ['Positions', 'Positions'],418 // market header and picker419 fxPickMarket: ['Choisir un marché', 'Choose a market'], fxSearchMarket: ['Rechercher un marché', 'Search a market'], fxVenueFilter: ['Filtrer par plateforme', 'Filter by venue'], fxAll: ['Tous', 'All'], fxFavs: ['Favoris', 'Favourites'],420 fxFav: ['Ajouter {symbol} aux favoris', 'Add {symbol} to favourites'], fxUnfav: ['Retirer {symbol} des favoris', 'Remove {symbol} from favourites'], fxNoFavs: ['Aucun favori. Touchez l’étoile d’un marché pour l’ajouter.', 'No favourite yet. Tap a market’s star to add it.'],421 fxNoMarket: ['Aucun marché ne correspond.', 'No market matches.'], fxPerp: ['perpétuel', 'perp'], fxHaltedShort: ['suspendu', 'halted'],422 fxMarkPrice: ['Prix de référence', 'Mark price'], fxMarkLabel: ['prix de référence de la plateforme', 'venue mark price'], fxIndex: ['Indice', 'Index'], fxVolume24h: ['Volume 24 h', '24 h volume'], fxOpenInterest: ['Intérêt ouvert', 'Open interest'],423 fxFundingLabel: ['Financement', 'Funding'], fxFundingTitle: ['Taux ramené à l’heure ; la seconde ligne donne l’intervalle propre à la plateforme', 'Rate normalised per hour; the second line gives the venue’s own interval'],424 fxLongsPay: ['les longs paient', 'longs pay'], fxShortsPay: ['les shorts paient', 'shorts pay'], fxNobodyPays: ['nul', 'flat'],425 fxFundingContinuous: ['GMX : prélevé en continu, à la seconde ; taux affiché par heure', 'GMX: accrues continuously, per second; rate quoted per hour'],426 fxFundingEvery: ['intervalle de la plateforme : {interval}', 'venue interval: {interval}'], fxFundingNext: ['prochain dans {time}', 'next in {time}'],427 fxLiveData: ['En direct', 'Live'], fxConnecting: ['Connexion…', 'Connecting…'], fxReconnecting: ['Reconnexion', 'Reconnecting'], fxStale: ['Données périmées', 'Stale data'], fxAgo: ['il y a {age}', '{age} ago'],428 fxStaleBanner: ['Le flux de marché est interrompu : ce qui est affiché date d’il y a {age} et n’est plus à jour. Les ordres simulés sont refusés tant que les données sont périmées.',429 'The market stream is interrupted: what is shown is {age} old and no longer current. Simulated orders are refused while the data is stale.'],430 // chart431 fxChart: ['Graphique en chandeliers', 'Candlestick chart'], fxChartAria: ['{n} chandeliers de {interval}, du {from} au {to} ; dernière clôture {close}', '{n} candles of {interval}, from {from} to {to}; last close {close}'],432 fxChartError: ['Chandeliers indisponibles', 'Candles unavailable'], fxInterval: ['Intervalle des chandeliers', 'Candle interval'],433 fxInt_1m: ['1 minute', '1 minute'], fxInt_5m: ['5 minutes', '5 minutes'], fxInt_15m: ['15 minutes', '15 minutes'], fxInt_1h: ['1 heure', '1 hour'], fxInt_4h: ['4 heures', '4 hours'], fxInt_1d: ['1 jour', '1 day'],434 fxO: ['O', 'O'], fxH: ['H', 'H'], fxL: ['B', 'L'], fxC: ['C', 'C'], fxVol: ['Vol.', 'Vol'],435 fxMaA: ['Moyenne mobile 20 périodes', '20-period moving average'], fxMaB: ['Moyenne mobile 50 périodes', '50-period moving average'], fxMaShortA: ['MM20', 'MA20'], fxMaShortB: ['MM50', 'MA50'],436 fxZoomIn: ['Agrandir les chandeliers', 'Zoom in'], fxZoomOut: ['Réduire les chandeliers', 'Zoom out'],437 // book, trades, GMX438 fxBook: ['Carnet d’ordres', 'Order book'], fxTrades: ['Transactions récentes', 'Recent trades'], fxGrouping: ['Regroupement', 'Grouping'], fxBookAge: ['carnet de {time}', 'book of {time}'],439 fxPrice: ['Prix', 'Price'], fxSize: ['Taille', 'Size'], fxCumul: ['Cumul', 'Total'], fxAsks: ['Ventes', 'Asks'], fxBids: ['Achats', 'Bids'], fxSpread: ['Écart', 'Spread'], fxBps: ['pb', 'bps'], fxPerDay: ['/ j', '/ d'],440 fxTime: ['Heure', 'Time'], fxNoTrades: ['Aucune transaction récente.', 'No recent trade.'],441 fxGmxNoBook: ['GMX n’a pas de carnet d’ordres : une position s’ouvre contre une réserve de liquidité, au prix de l’oracle, corrigé d’un impact sur le prix. L’ordre est exécuté plus tard par un « keeper ».',442 'GMX has no order book: a position opens against a liquidity pool, at the oracle price, adjusted by a price impact. The order is executed later by a keeper.'],443 fxGmxNoLiquidity: ['Données de liquidité indisponibles.', 'Liquidity data unavailable.'], fxGmxLiquidity: ['Liquidité de la réserve', 'Pool liquidity'], fxGmxAvailable: ['Liquidité disponible', 'Available liquidity'],444 fxGmxCapacity: ['Capacité d’ouverture', 'Opening capacity'], fxGmxOracle: ['Oracle (min – max)', 'Oracle (min – max)'], fxGmxRates: ['Financement et emprunt', 'Funding and borrowing'], fxGmxBorrow: ['Emprunt', 'Borrowing'], fxGmxNet: ['Taux net', 'Net rate'],445 fxGmxRateSign: ['Signe de la plateforme : positif = ce côté reçoit, négatif = ce côté paie. L’emprunt n’est payé que par le côté le plus engagé.', 'Venue sign: positive = the side receives, negative = the side pays. Borrowing is paid only by the larger side.'],446 fxGmxImpact: ['Frais et impact sur le prix', 'Fees and price impact'], fxGmxPositionFee: ['Frais de position (équilibre amélioré / non)', 'Position fee (balance improved / not)'], fxGmxImpactCap: ['Plafond de l’impact (positif / négatif)', 'Impact cap (positive / negative)'],447 fxGmxImpactNote: ['Le coût d’une taille ne se lit pas dans un carnet : il dépend de l’état de la réserve au moment de l’exécution. Tout montant calculé d’avance est une estimation.', 'The cost of a size is not read from a book: it depends on the pool state at execution. Any amount computed in advance is an estimate.'],448 // order panel449 fxOrder: ['Ordre simulé', 'Simulated order'], fxAccount: ['Compte', 'Account'], fxFreeCollateral: ['Garantie disponible', 'Free collateral'], fxEquity: ['Valeur du compte', 'Equity'], fxMarginUsed: ['Marge utilisée', 'Margin used'], fxWithdrawable: ['Retirable', 'Withdrawable'],450 fxDirection: ['Sens', 'Direction'], fxLong: ['Long', 'Long'], fxShort: ['Short', 'Short'], fxSide_long: ['Long', 'Long'], fxSide_short: ['Short', 'Short'], fxSide_buy: ['Achat', 'Buy'], fxSide_sell: ['Vente', 'Sell'], fxSideCol: ['Côté', 'Side'],451 fxOrderType: ['Type d’ordre', 'Order type'], fxKind_market: ['Au marché', 'Market'], fxKind_limit: ['À cours limité', 'Limit'], fxKind_stop: ['Stop (au marché)', 'Stop (market)'], fxKind_tp: ['Prise de profit (au marché)', 'Take-profit (market)'],452 fxKindShort_market: ['Marché', 'Market'], fxKindShort_limit: ['Limite', 'Limit'], fxKindShort_stop: ['Stop', 'Stop'], fxKindShort_tp: ['Profit', 'TP'],453 fxLimitPrice: ['Prix limite', 'Limit price'], fxTriggerPrice: ['Prix de déclenchement', 'Trigger price'], fxWorstPrice: ['Pire prix accepté', 'Worst accepted price'],454 fxStopHint: ['L’ordre part au marché quand le prix de référence atteint ce niveau.', 'The order goes to market when the mark price reaches this level.'], fxTpHint: ['L’ordre part au marché quand le prix de référence atteint ce niveau.', 'The order goes to market when the mark price reaches this level.'],455 fxSizeUnit: ['Unité de la taille', 'Size unit'], fxSizeHint: ['Arrondie vers le bas au lot de {lot} {base}.', 'Rounded down to the lot of {lot} {base}.'],456 fxLeverage: ['Levier', 'Leverage'], fxLeverageBounds: ['Plafonné par vos limites de risque ({policy}×) et par la plateforme ({venue}×).', 'Capped by your risk limits ({policy}×) and by the venue ({venue}×).'],457 fxReduceOnly: ['Réduction seulement', 'Reduce-only'], fxReduceOnlyHint: ['Ne peut que réduire une position existante.', 'Can only reduce an existing position.'],458 fxPostOnly: ['Passif seulement', 'Post-only'], fxPostOnlyHint: ['Refusé s’il s’exécuterait immédiatement.', 'Rejected if it would execute immediately.'],459 fxAttached: ['Sorties attachées (facultatif)', 'Attached exits (optional)'], fxStopLoss: ['Stop de protection', 'Stop-loss'], fxTakeProfit: ['Prise de profit', 'Take-profit'],460 fxAttachedHint: ['Placées comme deux ordres « réduction seulement » distincts, juste après l’exécution de l’entrée. Ce ne sont pas des ordres liés : annuler l’un n’annule pas l’autre.',461 'Placed as two separate reduce-only orders right after the entry fills. They are not linked: cancelling one does not cancel the other.'],462 fxAttachedFailed: ['L’entrée est exécutée, mais l’ordre « {name} » n’a pas pu être placé : {why}', 'The entry is filled, but the “{name}” order could not be placed: {why}'],463 fxSlippageNote: ['Ordre au marché protégé : il ne s’exécute pas au-delà de {pct} % du prix de référence (ou du prix de déclenchement).', 'Protected market order: it does not execute beyond {pct}% of the mark price (or of the trigger price).'],464 fxPreview: ['Aperçu avant envoi', 'Preview'], fxPreviewError: ['Aperçu indisponible.', 'Preview unavailable.'], fxNotional: ['Valeur notionnelle', 'Notional'], fxInitialMargin: ['Marge initiale', 'Initial margin'], fxFee: ['Frais', 'Fee'],465 fxAvgPrice: ['Prix moyen attendu', 'Expected average price'], fxSlippage: ['Glissement (milieu du carnet)', 'Slippage (book mid)'], fxLiqPrice: ['Prix de liquidation', 'Liquidation price'], fxLiqShort: ['Liquidation', 'Liq.'], fxFreeAfter: ['Garantie disponible après', 'Free collateral after'],466 fxEstimateNote: ['Montants estimés sur le carnet du moment ; le prix de liquidation est une estimation simplifiée, pas celui de la plateforme.', 'Amounts estimated on the current book; the liquidation price is a simplified estimate, not the venue’s own.'],467 fxRefused: ['Ordre refusé par le moteur de risque.', 'Order refused by the risk engine.'], fxReview: ['vérifier l’ordre {base}', 'review the {base} order'],468 fxPaperOnly: ['Simulation uniquement : rien n’est envoyé à la plateforme.', 'Paper only: nothing is sent to the venue.'],469 fxConfirmTitle: ['Confirmer l’ordre simulé', 'Confirm the simulated order'], fxConfirm: ['Placer l’ordre simulé', 'Place the simulated order'],470 fxConfirmNote: ['Cet ordre est exécuté par le moteur de simulation contre le carnet réel du moment. Aucun fonds n’est engagé et rien n’est signé.', 'This order is filled by the paper engine against the real book of the moment. No funds are committed and nothing is signed.'],471 fxPlaced_filled: ['Ordre simulé exécuté : {size} {base} à {price}.', 'Simulated order filled: {size} {base} at {price}.'], fxPlaced_partially_filled: ['Ordre simulé exécuté en partie : {size} {base} à {price}.', 'Simulated order partially filled: {size} {base} at {price}.'],472 fxPlaced_open: ['Ordre simulé placé dans le carnet : il attend son prix.', 'Simulated order resting in the book: waiting for its price.'], fxPlaced_pending: ['Ordre simulé en attente de son prix de déclenchement.', 'Simulated order waiting for its trigger price.'],473 fxPlaced_triggered: ['Ordre simulé déclenché.', 'Simulated order triggered.'], fxPlaced_cancelled: ['Ordre simulé annulé : rien n’a pu être exécuté dans la limite de prix.', 'Simulated order cancelled: nothing could be filled within the price bound.'],474 fxPlaced_rejected: ['Ordre simulé rejeté par le moteur de simulation.', 'Simulated order rejected by the paper engine.'],475 fxNoAccount: ['Aucun compte de simulation sur {venue}. Créez-en un pour essayer des ordres sans engager de fonds.', 'No paper account on {venue}. Create one to try orders without committing funds.'], fxCreateAccount: ['Créer un compte de simulation', 'Create a paper account'],476 fxNoPaper_dydx: ['dYdX est affiché pour ses données de marché seulement. Ses conditions d’utilisation excluent le Canada et son indexeur bloque la lecture des comptes depuis ce réseau : aucun compte, pas même simulé, n’est proposé ici.',477 'dYdX is shown for its market data only. Its terms of use exclude Canada and its indexer blocks account reads from this network: no account, not even a simulated one, is offered here.'],478 fxNoPaper_gmx: ['GMX est en lecture seule dans cette version : sans carnet d’ordres, le moteur de simulation n’a rien contre quoi exécuter un ordre.', 'GMX is read-only in this version: with no order book, the paper engine has nothing to fill an order against.'],479 fxNoPaper_other: ['{venue} est en lecture seule dans cette version.', '{venue} is read-only in this version.'], fxServerSays: ['Message du serveur :', 'Server message:'],480 fxHalted: ['Négociation suspendue sur ce compte :', 'Trading halted on this account:'], fxInstHalted: ['Ce marché est suspendu sur la plateforme.', 'This market is halted on the venue.'], fxInstReduceOnly: ['Ce marché n’accepte que les ordres qui réduisent une position.', 'This market only accepts orders that reduce a position.'],481 fxErrGeneric: ['L’opération a échoué.', 'The operation failed.'], fxErrInstrument: ['Paramètres du marché invalides.', 'Invalid market parameters.'], fxErrNoPrice: ['Pas de prix de référence pour l’instant.', 'No mark price yet.'],482 fxErrPrice: ['Prix limite invalide.', 'Invalid limit price.'], fxErrTrigger: ['Prix de déclenchement invalide.', 'Invalid trigger price.'], fxErrSize: ['Taille invalide.', 'Invalid size.'], fxErrSizeSmall: ['Taille inférieure à un lot.', 'Size below one lot.'],483 fxErrSl: ['Stop de protection invalide.', 'Invalid stop-loss.'], fxErrTp: ['Prise de profit invalide.', 'Invalid take-profit.'],484 fxErrSlLong: ['Pour un long, le stop de protection doit être sous le prix de référence.', 'For a long, the stop-loss must be below the mark price.'], fxErrSlShort: ['Pour un short, le stop de protection doit être au-dessus du prix de référence.', 'For a short, the stop-loss must be above the mark price.'],485 fxErrTpLong: ['Pour un long, la prise de profit doit être au-dessus du prix de référence.', 'For a long, the take-profit must be above the mark price.'], fxErrTpShort: ['Pour un short, la prise de profit doit être sous le prix de référence.', 'For a short, the take-profit must be below the mark price.'],486 // blotter487 fxBlotter: ['Activité du compte simulé', 'Paper account activity'], fxBlotterNoAccount: ['Aucun compte de simulation sur cette plateforme.', 'No paper account on this venue.'],488 fxPositions: ['Positions', 'Positions'], fxOpenOrders: ['Ordres ouverts', 'Open orders'], fxOrderHistory: ['Historique', 'Order history'], fxFills: ['Exécutions', 'Fills'], fxFunding: ['Financement', 'Funding'], fxPnl: ['Résultat', 'PnL'], fxRiskEvents: ['Risque', 'Risk events'],489 fxMarket: ['Marché', 'Market'], fxOpenMarket: ['Ouvrir le marché {symbol}', 'Open the {symbol} market'], fxEntry: ['Entrée', 'Entry'], fxMark: ['Référence', 'Mark'], fxMargin: ['Marge', 'Margin'],490 fxUnrealized: ['Résultat latent', 'Unrealized PnL'], fxRealized: ['Résultat réalisé', 'Realized PnL'], fxRealizedOpen: ['Réalisé (positions ouvertes)', 'Realized (open positions)'], fxFundingPaid: ['Financement', 'Funding'],491 fxClosePos: ['Fermer', 'Close'], fxCloseAria: ['Fermer une partie de la position {symbol}', 'Close part of the {symbol} position'], fxCloseFrac: ['Fermer {pct} % de la position {symbol}', 'Close {pct}% of the {symbol} position'],492 fxFilled: ['Exécuté', 'Filled'], fxAtMarket: ['au marché', 'market'], fxStatus: ['État', 'Status'], fxReason: ['Motif', 'Reason'], fxCancelOrder: ['Annuler', 'Cancel'], fxCancelAria: ['Annuler l’ordre sur {symbol}', 'Cancel the order on {symbol}'],493 fxType_limit: ['Limite', 'Limit'], fxType_market: ['Marché', 'Market'], fxType_stop_market: ['Stop au marché', 'Stop market'], fxType_stop_limit: ['Stop à cours limité', 'Stop limit'], fxType_take_profit_market: ['Prise de profit au marché', 'Take-profit market'], fxType_take_profit_limit: ['Prise de profit à cours limité', 'Take-profit limit'],494 fxSt_pending: ['en attente', 'pending'], fxSt_open: ['ouvert', 'open'], fxSt_filled: ['exécuté', 'filled'], fxSt_partially_filled: ['exécuté en partie', 'partially filled'], fxSt_cancelled: ['annulé', 'cancelled'], fxSt_rejected: ['rejeté', 'rejected'], fxSt_triggered: ['déclenché', 'triggered'],495 fxLiquidation: ['liquidation simulée', 'simulated liquidation'], fxClosedPnl: ['Résultat réalisé', 'Closed PnL'], fxAmount: ['Montant', 'Amount'], fxRate: ['Taux', 'Rate'], fxEvent: ['Événement', 'Event'], fxDetail: ['Détail', 'Detail'],496 fxEv_liquidation: ['Liquidation simulée', 'Simulated liquidation'], fxEv_margin_warning: ['Alerte de marge', 'Margin warning'], fxEv_loss_limit: ['Limite de perte atteinte', 'Loss limit reached'], fxEv_order_refused: ['Ordre refusé', 'Order refused'],497 fxNoPositions: ['Aucune position.', 'No position.'], fxNoOpenOrders: ['Aucun ordre ouvert.', 'No open order.'], fxNoHistory: ['Aucun ordre pour l’instant.', 'No order yet.'], fxNoFills: ['Aucune exécution.', 'No fill.'],498 fxNoFunding: ['Aucun financement versé ou reçu.', 'No funding paid or received.'], fxNoRiskEvents: ['Aucun événement de risque.', 'No risk event.'], fxNoEquity: ['Pas encore assez de points pour tracer la courbe.', 'Not enough points yet to draw the curve.'],499 fxSinceStart: ['Depuis le début de la courbe', 'Since the start of the curve'], fxPnlNote: ['Valeur du compte simulé relevée par le serveur. Les résultats d’une simulation ne garantissent rien en conditions réelles : files d’attente, liquidations et frais y diffèrent.',500 'Paper account equity as sampled by the server. Paper results guarantee nothing in real conditions: queues, liquidations and fees differ there.'],501 // accounts502 fxVenues: ['Plateformes', 'Venues'], fxVenue: ['Plateforme', 'Venue'], fxVenue_ok: ['opérationnelle', 'ok'], fxVenue_degraded: ['dégradée', 'degraded'], fxVenue_down: ['hors service', 'down'], fxLastOk: ['dernière réponse il y a {age}', 'last answer {age} ago'],503 fxDataOnly: ['données de marché seulement', 'market data only'], fxReadOnly: ['lecture seule', 'read-only'], fxNotAvailable: ['non offert', 'not offered'],504 fxVenueWhat_hyperliquid: ['Données de marché, lecture de compte et comptes de simulation. Carnet d’ordres central ; garantie et règlement en USDC.', 'Market data, account reading and paper accounts. Central order book; USDC collateral and settlement.'],505 fxVenueWhat_gmx: ['Données de marché et lecture de compte (Arbitrum). Pas de carnet d’ordres : pas de compte de simulation dans cette version.', 'Market data and account reading (Arbitrum). No order book: no paper account in this version.'],506 fxVenueWhat_dydx: ['Données de marché seulement. Les conditions d’utilisation de dYdX excluent le Canada et son indexeur bloque la lecture des comptes : aucun compte ici, même simulé.',507 'Market data only. The dYdX terms of use exclude Canada and its indexer blocks account reads: no account here, not even a simulated one.'],508 fxPaperAccounts: ['Comptes de simulation', 'Paper accounts'], fxNewAccount: ['Nouveau compte', 'New account'],509 fxPaperIntro: ['Un compte de simulation part d’une garantie fictive et exécute ses ordres contre le carnet réel de la plateforme. Il obéit aux mêmes limites de risque qu’un compte réel.',510 'A paper account starts from fictitious collateral and fills its orders against the venue’s real book. It obeys the same risk limits as a real account.'],511 fxVenueHint: ['Seules les plateformes qui acceptent la simulation sont proposées.', 'Only venues that accept paper trading are offered.'], fxLabel: ['Nom du compte', 'Account name'], fxDefaultLabel: ['Simulation {venue}', '{venue} paper'],512 fxStartCollateral: ['Garantie de départ', 'Starting collateral'], fxStartCollateralHint: ['Montant fictif. Une remise à zéro y revient.', 'Fictitious amount. A reset returns to it.'],513 fxLimits: ['Limites de risque', 'Risk limits'], fxLimitsIntro: ['Le moteur de risque vérifie chaque ordre contre ces limites avant toute exécution et nomme la première règle qui s’y oppose. Un ordre qui réduit une position reste toujours possible.',514 'The risk engine checks every order against these limits before any execution and names the first rule that says no. An order that reduces a position always remains possible.'],515 fxLimMore: ['Afficher les limites avancées', 'Show advanced limits'], fxLimLess: ['Masquer les limites avancées', 'Hide advanced limits'],516 fxLim_maxLeverage: ['Levier maximal du compte', 'Maximum account leverage'], fxLimHint_maxLeverage: ['Exposition totale divisée par la valeur du compte, après l’ordre.', 'Total exposure divided by equity, after the order.'],517 fxLim_maxOrderNotional: ['Valeur maximale par ordre', 'Maximum notional per order'], fxLimHint_maxOrderNotional: ['Un ordre plus gros est refusé.', 'A larger order is refused.'],518 fxLim_maxPositionNotional: ['Position maximale par marché', 'Maximum position per market'], fxLimHint_maxPositionNotional: ['Valeur de la position qui résulterait de l’ordre.', 'Value of the position that would result from the order.'],519 fxLim_maxGrossExposure: ['Exposition brute maximale', 'Maximum gross exposure'], fxLimHint_maxGrossExposure: ['Somme de toutes les positions, longues et courtes.', 'Sum of all positions, long and short.'],520 fxLim_maxDailyLoss: ['Perte maximale par jour', 'Maximum daily loss'], fxLimHint_maxDailyLoss: ['Une fois atteinte, seuls les ordres de réduction passent.', 'Once reached, only reducing orders pass.'],521 fxLim_maxTotalLoss: ['Perte maximale totale', 'Maximum total loss'], fxLimHint_maxTotalLoss: ['Une fois atteinte, le compte est suspendu.', 'Once reached, the account is halted.'],522 fxLim_minFreeCollateral: ['Garantie disponible minimale', 'Minimum free collateral'], fxLimHint_minFreeCollateral: ['À conserver après la marge initiale de l’ordre.', 'To keep after the order’s initial margin.'],523 fxLim_minLiquidationDistanceBps: ['Distance minimale à la liquidation', 'Minimum liquidation distance'], fxLimHint_minLiquidationDistanceBps: ['En points de base du prix de référence : 500 pb = 5 %.', 'In basis points of the mark price: 500 bps = 5%.'],524 fxLim_maxDeviationBps: ['Écart maximal prix / référence', 'Maximum price / mark deviation'], fxLimHint_maxDeviationBps: ['Un prix limite plus éloigné du prix de référence est refusé.', 'A limit price further from the mark is refused.'],525 fxLim_maxMarkIndexBps: ['Écart maximal référence / indice', 'Maximum mark / index divergence'], fxLimHint_maxMarkIndexBps: ['Au-delà, le marché est jugé anormal et l’ordre est refusé.', 'Beyond it, the market is deemed abnormal and the order is refused.'],526 fxLim_maxDataAgeMs: ['Âge maximal des données', 'Maximum data age'], fxLimHint_maxDataAgeMs: ['En millisecondes. Des données plus vieilles bloquent tout ordre.', 'In milliseconds. Older data blocks every order.'],527 fxLim_maxOrdersPerMinute: ['Ordres par minute', 'Orders per minute'], fxLimHint_maxOrdersPerMinute: ['Frein contre un emballement.', 'A brake against a runaway loop.'],528 fxLim_maxOrdersPerDay: ['Ordres par jour', 'Orders per day'], fxLimHint_maxOrdersPerDay: ['Plafond quotidien du nombre d’ordres.', 'Daily cap on the number of orders.'],529 fxCreatePaper: ['Créer le compte de simulation', 'Create the paper account'], fxNoAccounts: ['Aucun compte pour l’instant.', 'No account yet.'], fxSelected: ['utilisé dans le terminal', 'used in the terminal'], fxOrdersSmall: ['ordres', 'orders'],530 fxUse: ['Utiliser ce compte', 'Use this account'], fxEditLimits: ['Modifier les limites', 'Edit limits'], fxEditLimitsTitle: ['Limites de risque — {label}', 'Risk limits — {label}'], fxSaveLimits: ['Enregistrer les limites', 'Save limits'],531 fxReset: ['Remettre à zéro', 'Reset'], fxResetTitle: ['Remettre « {label} » à zéro ?', 'Reset “{label}”?'], fxResetBody: ['Les positions, les ordres et l’historique de ce compte simulé seront effacés et la garantie de départ rétablie. C’est irréversible.',532 'The positions, orders and history of this paper account will be erased and the starting collateral restored. This cannot be undone.'], fxResetConfirm: ['Remettre le compte à zéro', 'Reset the account'],533 fxLiftHalt: ['Lever la suspension', 'Lift the halt'],534 fxWatch: ['Observer une adresse', 'Watch an address'], fxWatchIntro: ['Lecture seule de n’importe quelle adresse publique sur une plateforme : état du compte, positions, ordres ouverts. Utile pour regarder son propre compte avant qu’une clé de négociation existe. Rien n’est signé.',535 'Read-only view of any public address on a venue: account state, positions, open orders. Useful to look at your own account before any trading key exists. Nothing is signed.'],536 fxAddress: ['Adresse du compte', 'Account address'], fxWatchGo: ['Observer', 'Watch'], fxSourceVenue: ['valeurs lues sur la plateforme', 'values read from the venue'],537 fxLive: ['Négociation réelle', 'Live trading'], fxLiveOff: ['désactivée', 'off'],538 fxLiveBody: ['Aucun ordre réel ne peut partir de cette application aujourd’hui : la fonction n’existe pas encore côté serveur, et aucun bouton ne fait semblant. Pour l’activer un jour, sur une plateforme à la fois, il faudra :',539 'No real order can leave this application today: the feature does not exist yet on the server side, and no button pretends otherwise. To enable it one day, one venue at a time, it will take:'],540 fxLiveReq1: ['une clé de négociation dédiée, dérivée par le signataire isolé, qui peut placer et annuler des ordres mais ne peut rien retirer ;', 'a dedicated trading key, derived by the isolated signer, that can place and cancel orders but cannot withdraw anything;'],541 fxLiveReq2: ['votre autorisation de cette clé, une fois, avec votre clé d’accès — et sa révocation possible à tout moment ;', 'your authorisation of that key, once, with your passkey — revocable at any time;'],542 fxLiveReq3: ['des limites appliquées par le signataire lui-même, pas seulement par cette interface ;', 'limits enforced by the signer itself, not only by this interface;'],543 fxLiveReq4: ['la clé principale du portefeuille ne négocie jamais sur une plateforme.', 'the main wallet key never trades on a venue.'],544 fxLiveNote: ['dYdX restera exclu tant que ses conditions d’utilisation excluent le Canada.', 'dYdX will stay excluded as long as its terms of use exclude Canada.'],545 // compare546 fxCompareTitle: ['Contrats perpétuels {base} par plateforme', '{base} perpetuals by venue'], fxBaseAsset: ['Actif', 'Asset'], fxInstrument: ['Instrument', 'Instrument'],547 fxNotInterchangeable: ['Ces contrats ne sont pas interchangeables.', 'These contracts are not interchangeable.'],548 fxNotInterchangeableBody: ['Chaque plateforme a sa garantie, son prix de référence, son financement et ses règles de liquidation. Ce tableau juxtapose des chiffres ; il ne désigne pas de « meilleur » contrat.',549 'Each venue has its own collateral, reference price, funding and liquidation rules. This table sets figures side by side; it does not name a “best” contract.'],550 fxFundingPerHour: ['Financement / h', 'Funding / h'], fxContinuousShort: ['en continu', 'continuous'], fxEveryShort: ['intervalle : {interval}', 'interval: {interval}'],551 fxSpreadBps: ['Écart (pb)', 'Spread (bps)'], fxDepth1pct: ['Profondeur ± 1 %', 'Depth ± 1%'], fxNoBookShort: ['pas de carnet', 'no book'], fxTakerFeeBps: ['Frais preneur (pb)', 'Taker fee (bps)'], fxMaxLeverage: ['Levier max.', 'Max leverage'],552 fxCollateral: ['Garantie', 'Collateral'], fxSettlement: ['Règlement', 'Settlement'], fxNotes: ['Notes', 'Notes'],553 fxCompareEmpty: ['Aucune plateforme ne cote {base}.', 'No venue lists {base}.'], fxCompareNote: ['Relevé du moment ; le financement est ramené à l’heure et positif quand les longs paient. Les textes « Règlement » et « Notes » viennent du serveur, en anglais.',554 'Snapshot of the moment; funding is normalised per hour and positive when longs pay. The “Settlement” and “Notes” texts come from the server.'],555 fxDiffTitle: ['Ce qui diffère d’un contrat à l’autre', 'What differs from one contract to another'],556 fxDiffField_collateral: ['Garantie', 'Collateral'], fxDiffField_settlement: ['Règlement', 'Settlement'], fxDiffField_funding: ['Financement', 'Funding'], fxDiffField_leverage: ['Levier maximal', 'Maximum leverage'], fxDiffField_fee: ['Frais', 'Fees'], fxDiffField_price: ['Prix servant à la marge et à la liquidation', 'Price used for margin and liquidation'],557 fxDiff_hyperliquid_collateral: ['USDC ; marge croisée (par défaut) ou isolée, par actif.', 'USDC; cross (default) or isolated margin, per asset.'],558 fxDiff_hyperliquid_settlement: ['Linéaire, réglé en USDC ; l’oracle est libellé en USDT, sans conversion : le contrat est exposé à l’écart USDT/USD.', 'Linear, settled in USDC; the oracle is USDT-denominated, with no conversion: the contract is exposed to USDT/USD.'],559 fxDiff_hyperliquid_funding: ['Toutes les heures, de pair à pair ; taux sur 8 h versé par huitièmes ; plafond de 0,5 % par heure.', 'Every hour, peer to peer; an 8 h rate paid in eighths; capped at 0.5% per hour.'],560 fxDiff_hyperliquid_leverage: ['BTC 40×, ETH 25×, moins au-delà de certaines tailles ; le levier est un réglage explicite par actif.', 'BTC 40×, ETH 25×, less above certain sizes; leverage is an explicit per-asset setting.'],561 fxDiff_hyperliquid_fee: ['Preneur 0,045 %, teneur 0,015 % au palier de base ; pas de gaz pour les ordres.', 'Taker 0.045%, maker 0.015% at the base tier; no gas for orders.'],562 fxDiff_hyperliquid_price: ['Prix de référence : médiane de l’oracle lissé, du carnet de la plateforme et de contrats perpétuels d’autres bourses.', 'Mark price: median of the smoothed oracle, the venue’s own book and perpetuals of other exchanges.'],563 fxDiff_gmx_collateral: ['Le jeton long ou court de la réserve (par exemple WBTC ou USDC) ; marge isolée par position seulement.', 'The pool’s long or short token (for example WBTC or USDC); isolated margin per position only.'],564 fxDiff_gmx_settlement: ['Résultat calculé en USD et payé dans le jeton du côté de la position ; exécution en deux temps par un « keeper », à un prix d’oracle ultérieur.', 'PnL computed in USD and paid in the token of the position’s side; two-step execution by a keeper, at a later oracle price.'],565 fxDiff_gmx_funding: ['En continu, à la seconde, selon le déséquilibre entre longs et shorts ; s’y ajoutent des frais d’emprunt payés par le côté le plus engagé.', 'Continuous, per second, driven by the long/short imbalance; plus a borrowing fee paid by the larger side.'],566 fxDiff_gmx_leverage: ['Borne contractuelle élevée (jusqu’à 200×), plus basse en pratique et décroissante avec l’intérêt ouvert ; fixée position par position.', 'High contract bound (up to 200×), lower in practice and falling with open interest; set position by position.'],567 fxDiff_gmx_fee: ['Frais de position de 0,04 % ou 0,06 % selon l’effet sur l’équilibre, plus impact sur le prix, frais d’exécution en ETH et gaz Arbitrum.', 'Position fee of 0.04% or 0.06% depending on the effect on the balance, plus price impact, an execution fee in ETH and Arbitrum gas.'],568 fxDiff_gmx_price: ['Prix d’oracle signé, minimum et maximum : un long ouvre au maximum et ferme au minimum. Pas de carnet d’ordres.', 'Signed oracle price, minimum and maximum: a long opens at the maximum and closes at the minimum. No order book.'],569 fxDiff_dydx_collateral: ['USDC (USDC de Noble, par IBC) ; marge croisée dans un sous-compte.', 'USDC (Noble USDC, over IBC); cross margin inside a subaccount.'],570 fxDiff_dydx_settlement: ['Linéaire, résultat et financement en USDC sur la chaîne dYdX.', 'Linear, PnL and funding in USDC on dYdX Chain.'],571 fxDiff_dydx_funding: ['Toutes les heures, de pair à pair, d’après la prime mesurée chaque minute.', 'Every hour, peer to peer, from the premium sampled every minute.'],572 fxDiff_dydx_leverage: ['50× sur BTC et ETH ; pas de réglage de levier : il découle de la garantie du sous-compte.', '50× on BTC and ETH; no leverage setting: it results from the subaccount’s collateral.'],573 fxDiff_dydx_fee: ['Preneur 0,05 %, teneur 0,01 % au palier de base.', 'Taker 0.05%, maker 0.01% at the base tier.'],574 fxDiff_dydx_price: ['Prix d’oracle seulement, sans prix de référence distinct. Ici : données de marché seulement, les conditions de dYdX excluant le Canada.', 'Oracle price only, no separate mark price. Here: market data only, as the dYdX terms exclude Canada.'],575 fxNever1: ['Un long sur une plateforme et un short sur une autre ne s’annulent pas : les prix de référence diffèrent.', 'A long on one venue and a short on another do not cancel out: the reference prices differ.'],576 fxNever2: ['Un taux de financement ne se compare pas sans son unité, son signe et celui qui le paie.', 'A funding rate cannot be compared without its unit, its sign and who pays it.'],577 fxNever3: ['Une taille valide ici ne l’est pas forcément ailleurs : les lots diffèrent, et GMX se dimensionne en USD.', 'A size valid here is not necessarily valid elsewhere: lots differ, and GMX is sized in USD.'],578 fxNever4: ['Un prix de carnet ne se compare pas à un prix d’oracle : sur GMX, le coût dépend de l’état de la réserve.', 'A book price cannot be compared with an oracle price: on GMX, the cost depends on the pool state.'],579 fxDiffSource: ['Source : documentation et API publiques de chaque plateforme, relevées le 10 novembre 2026. Ces paramètres changent.', 'Source: each venue’s public documentation and API, read on 10 November 2026. These parameters change.'],580 fxContract: ['Le contrat {symbol} sur {venue}', 'The {symbol} contract on {venue}'], fxMarginModes: ['modes de marge', 'margin modes'], fxCross: ['croisée', 'cross'], fxIsolated: ['isolée', 'isolated'],581 fxTickLot: ['Échelon de prix · lot', 'Tick · lot'], fxMinOrder: ['Ordre minimal', 'Minimum order'], fxMarkMethod: ['Calcul du prix de référence', 'Mark price method'], fxVenueText: ['Textes fournis par le serveur d’après la documentation de la plateforme, en anglais.', 'Texts supplied by the server from the venue’s documentation.'],582 // router (simulation) — ONE contiguous block, every key prefixed `rx` (docs/v4/ROUTER.md): keep additions inside it583 rxTab: ['Routeur (simulation)', 'Router (simulation)'], rxTitle: ['Routeur (simulation)', 'Router (simulation)'],584 rxSimOnly: ['Simulation seulement.', 'Simulation only.'],585 rxSimOnlyBody: ['Pour un ordre donné, ce comparateur estime les conditions d’exécution sur chaque plateforme à partir de relevés publics. Rien n’est envoyé, aucune plateforme n’est choisie à votre place.',586 'For a given order, this view estimates the execution conditions on each venue from public snapshots. Nothing is sent, and no venue is chosen for you.'],587 rxAsset: ['Actif', 'Asset'], rxUnavailableShort: ['non disponible pour vous', 'not available to you'], rxUnit: ['Unité de la taille', 'Size unit'],588 rxSizeUsdHint: ['Valeur de l’ordre en USD ; chaque plateforme l’arrondit à son propre lot.', 'Order value in USD; each venue rounds it to its own lot.'],589 rxSizeBaseHint: ['Quantité de {base} ; GMX la convertit en USD au prix de l’oracle.', 'Quantity of {base}; GMX converts it to USD at the oracle price.'],590 rxLevHint: ['Marge initiale = valeur ÷ levier. Entier sur Hyperliquid.', 'Initial margin = value ÷ leverage. An integer on Hyperliquid.'],591 rxHorizon: ['Durée de détention prévue', 'Expected holding period'],592 rxHorizonHint: ['Sert au financement et à l’emprunt, calculés au taux du moment. Ces taux changent : ce n’est pas une prévision.', 'Used for funding and borrowing, computed at the current rate. These rates change: this is not a forecast.'],593 rxH_1: ['1 h', '1 h'], rxH_8: ['8 h', '8 h'], rxH_24: ['24 h', '24 h'], rxH_168: ['7 jours', '7 days'], rxH_720: ['30 jours', '30 days'],594 rxAccount: ['Compte pour la vue risque', 'Account for the risk view'], rxAccountNone: ['Aucun (estimation seule)', 'None (estimate only)'],595 rxAccountHint: ['Facultatif : ce que les limites de ce compte diraient de l’ordre. Rien n’est placé.', 'Optional: what this account’s limits would say about the order. Nothing is placed.'],596 rxErrSize: ['Taille invalide.', 'Invalid size.'], rxErrLev: ['Levier invalide.', 'Invalid leverage.'], rxErrPrice: ['Prix limite invalide.', 'Invalid limit price.'],597 rxRun: ['Estimer sur chaque plateforme', 'Estimate on every venue'], rxRefresh: ['Actualiser l’estimation', 'Refresh the estimate'],598 rxEmpty: ['Décrivez l’ordre, puis lancez l’estimation.', 'Describe the order, then run the estimate.'],599 rxStale: ['Le formulaire a changé : ces résultats sont ceux de l’ordre précédent.', 'The form has changed: these results are for the previous order.'], rxAsOf: ['relevé il y a {age}', 'snapshot {age} ago'],600 rxRankingTitle: ['Classement par coût estimé', 'Ranking by estimated cost'],601 rxLeast: ['Le moins coûteux d’après ces estimations :', 'Lowest cost according to these estimates:'],602 rxLeastTied: ['À égalité avec {n} autre(s).', 'Tied with {n} other(s).'],603 rxLeastNear: ['L’écart avec {n} autre(s) est dans la marge d’incertitude : l’ordre entre eux n’est pas établi.', 'The gap to {n} other(s) is within the uncertainty: their order is not established.'],604 rxNoEligible: ['Aucun instrument admissible pour cet ordre.', 'No eligible instrument for this order.'],605 rxNotBest: ['Un coût estimé plus bas ne désigne pas un contrat « à choisir ».', 'A lower estimated cost does not name a contract “to choose”.'],606 rxNotBestBody: ['Les contrats diffèrent (garantie, prix de liquidation, financement, mode d’exécution) et chaque chiffre est une estimation qui bouge avec le marché. Le classement est une information ; rien n’est sélectionné.',607 'The contracts differ (collateral, liquidation price, funding, execution model) and every figure is an estimate that moves with the market. The ranking is information; nothing is selected.'],608 rxOrderChanges: ['L’ordre du classement change si l’on ajoute une clôture immédiate (colonne « aller-retour ») : il ne porte que sur les coûts d’entrée et de portage.',609 'The order changes when an immediate close is added (“round trip” column): the ranking covers entry and carry costs only.'],610 rxUnknownCosts: ['Coûts inconnus, non comptés dans les totaux : {list}. Ces totaux sont des minimums.', 'Unknown costs, not counted in the totals: {list}. Those totals are lower bounds.'],611 rxRestrictedNote: ['{venues} : affiché pour information, jamais classé.', '{venues}: shown for information, never ranked.'],612 rxRank: ['Rang', 'Rank'], rxAllIn: ['Coût tout compris', 'All-in cost'], rxAllInBps: ['En points de base', 'In basis points'], rxUncertainty: ['Incertitude', 'Uncertainty'],613 rxTie: ['Écart', 'Gap'], rxTieExact: ['égalité ({n})', 'tie ({n})'], rxTieNear: ['quasi-égalité ({n})', 'near tie ({n})'], rxTieNone: ['hors incertitude', 'beyond uncertainty'],614 rxRoundTrip: ['Aller-retour immédiat', 'Immediate round trip'], rxRoundTripRank: ['serait au rang {n}', 'would rank {n}'],615 rxExecutable: ['Exécutable ici', 'Executable here'], rxExecPaper: ['en simulation', 'in simulation'], rxExecNo: ['non', 'no'],616 rxRankingNote: ['Coût tout compris = coûts d’entrée + portage sur la durée choisie, au taux du moment ; en USD et en {bps} de la valeur de l’ordre. « Quasi-égalité » : l’écart est inférieur à la somme des deux incertitudes. La clôture n’est pas comprise.',617 'All-in cost = entry costs + carry over the chosen period at the current rate; in USD and in {bps} of the order’s value. “Near tie”: the gap is smaller than the sum of the two uncertainties. Closing is not included.'],618 rxDiffTitle: ['Différences entre ces contrats', 'Differences between these contracts'],619 rxDiffBody: ['{n} contrats différents sur {base} : {k} conditions diffèrent. Une position sur l’un ne se ferme pas, ne se compense pas et ne se garantit pas sur un autre.',620 '{n} different contracts on {base}: {k} terms differ. A position on one cannot be closed, netted or margined on another.'],621 rxDiffEmpty: ['Rien à comparer.', 'Nothing to compare.'], rxEngineNotes: ['Messages du moteur ({n}, en anglais)', 'Engine messages ({n})'], rxTerm: ['Condition', 'Term'],622 rxTerm_structure: ['Structure du marché', 'Market structure'], rxTerm_execution: ['Exécution', 'Execution'], rxTerm_collateral: ['Garantie', 'Collateral'], rxTerm_settlement: ['Règlement', 'Settlement'],623 rxTerm_quote: ['Cotation', 'Quote'], rxTerm_markPrice: ['Prix de référence (marge, liquidation)', 'Reference price (margin, liquidation)'], rxTerm_fundingInterval: ['Intervalle de financement', 'Funding interval'],624 rxTerm_fundingRule: ['Règle de financement', 'Funding rule'], rxTerm_otherCarry: ['Autre coût de portage', 'Other carrying cost'], rxTerm_maxLeverage: ['Levier maximal', 'Maximum leverage'], rxTerm_marginModes: ['Modes de marge', 'Margin modes'],625 rxTerm_tick: ['Pas de prix', 'Tick'], rxTerm_lot: ['Lot', 'Lot'], rxTerm_sizeUnit: ['Unité de la taille', 'Size unit'], rxTerm_minOrder: ['Ordre minimal', 'Minimum order'], rxTerm_maintenance: ['Marge de maintien', 'Maintenance margin'],626 rxTerm_liquidation: ['Liquidation', 'Liquidation'], rxTerm_fees: ['Frais', 'Fees'],627 rxStRestricted: ['Non disponible pour vous', 'Not available to you'], rxStNotEligible: ['Non admissible', 'Not eligible'], rxStPaper: ['Admissible — exécutable en simulation', 'Eligible — executable in simulation'],628 rxStSetup: ['Admissible en simulation — étapes manquantes', 'Eligible in simulation — steps missing'],629 rxKind_blocker: ['Refus', 'Refused'], rxKind_setup: ['À faire avant', 'Needed first'], rxKind_note: ['À savoir', 'Note'],630 rxRestrictedTitle: ['{venue} n’est pas disponible pour vous.', '{venue} is not available to you.'],631 rxRestrictedBody: ['Ses conditions d’utilisation excluent le Canada. Ses chiffres publics sont montrés pour information ; la plateforme n’est jamais classée ni proposée.',632 'Its terms of use exclude Canada. Its public figures are shown for information; the venue is never ranked or offered.'],633 rxReason_venue_restricted: ['Plateforme exclue pour le propriétaire (conditions d’utilisation).', 'Venue excluded for the owner (terms of use).'],634 rxReason_instrument_halted: ['Instrument suspendu sur la plateforme.', 'Instrument halted on the venue.'], rxReason_instrument_reduce_only: ['L’instrument n’accepte que les ordres qui réduisent une position.', 'The instrument only accepts orders that reduce a position.'],635 rxReason_stale_data: ['Données trop anciennes : aucune estimation n’est faite sur un relevé périmé.', 'Data too old: no estimate is made on a stale snapshot.'],636 rxReason_no_depth_data: ['Pas de relevé du carnet ou de la liquidité.', 'No book or liquidity snapshot.'], rxReason_data_unavailable: ['Le carnet ou la liquidité n’a pas pu être lu.', 'The book or the liquidity could not be read.'],637 rxReason_leverage_above_venue_max: ['Levier supérieur au maximum de la plateforme pour cet instrument.', 'Leverage above the venue’s maximum for this instrument.'],638 rxReason_leverage_not_integer: ['Sur cette plateforme, le levier est un entier d’au moins 1.', 'On this venue, leverage is an integer of at least 1.'],639 rxReason_wallet_cannot_trade_here: ['Ce portefeuille ne fait que lire cette plateforme : aucun ordre ne peut y être envoyé aujourd’hui.', 'This wallet only reads this venue: no order can be sent there today.'],640 rxReason_paper_only: ['Négociable ici en simulation ; le réel existe sur cette plateforme et reste désactivé tant que vous ne l’autorisez pas.', 'Tradable here in simulation; live trading exists on this venue and stays off until you authorize it.'],641 rxReason_live_available: ['Un compte réel autorisé existe sur cette plateforme.', 'An authorized live account exists on this venue.'],642 rxReason_empty_book: ['Un côté du carnet est vide.', 'One side of the book is empty.'], rxReason_size_rounds_to_zero: ['Taille inférieure à un lot sur cette plateforme.', 'Size below one lot on this venue.'],643 rxReason_below_min_size: ['Taille inférieure au minimum de la plateforme.', 'Size below the venue’s minimum.'], rxReason_below_min_notional: ['Valeur inférieure au minimum de la plateforme.', 'Value below the venue’s minimum.'],644 rxReason_price_not_on_tick: ['Le prix limite n’est pas sur le pas de prix de la plateforme.', 'The limit price is not on the venue’s tick.'],645 rxReason_book_snapshot_ends: ['Le relevé du carnet s’arrête avant la taille demandée : le reste n’est pas chiffré, et rien n’est extrapolé.', 'The book snapshot ends before the requested size: the rest is not priced, and nothing is extrapolated.'],646 rxReason_limit_rests: ['Une partie de l’ordre à cours limité resterait dans le carnet : un ordre en attente peut ne jamais s’exécuter.', 'Part of the limit order would rest on the book: a resting order may never fill.'],647 rxReason_bad_oracle: ['La fourchette de prix de l’oracle est inutilisable.', 'The oracle price range is not usable.'],648 rxReason_above_capacity: ['Taille supérieure à la capacité encore ouverte de ce côté du marché.', 'Size above the capacity still open on this side of the market.'],649 rxReason_above_open_interest_cap: ['L’intérêt ouvert dépasserait le plafond du marché.', 'Open interest would pass the market’s cap.'],650 rxReason_gmx_interface_leverage: ['La borne de levier est celle des contrats ; l’interface de la plateforme en permet moins (non vérifié).', 'The leverage bound is the contracts’; the venue’s own interface allows less (not verified).'],651 rxReason_position_unknown: ['Ordre de réduction : le routeur ne connaît pas la position à réduire.', 'Reduce-only: the router does not know the position being reduced.'],652 rxReason_limit_waits_for_oracle: ['Sur GMX, un ordre à cours limité attend que le prix de l’oracle atteigne le seuil.', 'On GMX, a limit order waits until the oracle price reaches the trigger.'],653 rxReason_two_step_execution: ['Exécution en deux temps : le prix sera celui de l’oracle au moment où un exécutant traite la demande, pas celui du relevé.', 'Two-step execution: the price will be the oracle’s when a keeper handles the request, not the snapshot’s.'],654 rxReason_insufficient_collateral_there: ['La garantie libre du compte ne couvre pas la marge initiale et les frais.', 'The account’s free collateral does not cover the initial margin and the fee.'],655 rxReason_no_collateral_account: ['Aucun compte avec garantie n’est connu sur cette plateforme : il faudrait d’abord l’alimenter.', 'No account with collateral is known on this venue: it would have to be funded first.'],656 rxFillTitle: ['Exécution simulée', 'Simulated execution'], rxRoundUsd: ['GMX reçoit une taille en USD ; la quantité résulte du prix d’exécution.', 'GMX takes a size in USD; the quantity results from the execution price.'],657 rxRoundLot: ['Arrondie vers le bas au lot de la plateforme.', 'Rounded down to the venue’s lot.'],658 rxRefBook: ['Milieu du carnet', 'Book mid'], rxRefOracle: ['Milieu de l’oracle', 'Oracle mid'], rxAvgPrice: ['Prix moyen', 'Average price'], rxWorstPrice: ['Pire prix atteint', 'Worst price reached'],659 rxSlippage: ['Glissement contre le milieu', 'Slippage against the mid'], rxLevels: ['Niveaux consommés · part du relevé', 'Levels consumed · share of the snapshot'],660 rxBookEnds: ['Le relevé du carnet s’arrête.', 'The book snapshot ends.'],661 rxBookEndsBody: ['{left} {base} ne sont pas chiffrés : la plateforme a peut-être plus de profondeur, mais elle n’est pas dans le relevé et n’est pas extrapolée.', '{left} {base} are not priced: the venue may hold more depth, but it is not in the snapshot and is not extrapolated.'],662 rxResting: ['{size} {base} resteraient dans le carnet au prix limite — ce n’est pas une exécution. Leur coût suppose qu’ils s’exécutent plus tard, au prix limite, aux frais de teneur.',663 '{size} {base} would rest on the book at the limit price — not a fill. Their cost assumes they fill later, at the limit price, at the maker fee.'],664 rxOracleRange: ['Fourchette de l’oracle', 'Oracle range'], rxImpact: ['Impact de prix (formule)', 'Price impact (formula)'], rxCapped: ['plafonné', 'capped'], rxImpactCaps: ['Plafonds de l’impact', 'Impact caps'],665 rxImbalance: ['Déséquilibre longs / shorts', 'Long / short imbalance'], rxCapacityUsed: ['Part de la capacité restante', 'Share of the remaining capacity'],666 rxGmxImpactNote: ['Pas de carnet : exécution au prix de l’oracle. L’impact est inscrit à l’ouverture et réglé à la clôture, compensé avec l’impact de la clôture.', 'No order book: execution at the oracle price. The impact is recorded at the open and settled at the close, netted with the impact of the close.'],667 rxVirtual_none: ['Ce marché n’a pas d’inventaire virtuel.', 'This market has no virtual inventory.'], rxVirtual_known: ['Inventaire virtuel de l’indice pris en compte.', 'The index’s virtual inventory was applied.'],668 rxVirtual_unknown: ['Inventaire virtuel non lu : un impact négatif peut être pire que ce chiffre, jusqu’au plafond.', 'Virtual inventory not read: a negative impact can be worse than this figure, up to the cap.'],669 rxCostsTitle: ['Coûts, poste par poste', 'Costs, item by item'], rxUnknown: ['inconnu', 'unknown'], rxBasis: ['Calcul :', 'Basis:'],670 rxCost_spread_slippage: ['Écart et glissement', 'Spread and slippage'], rxCost_trading_fee: ['Frais de négociation', 'Trading fee'], rxCost_price_impact: ['Impact de prix', 'Price impact'],671 rxCost_execution_fee: ['Frais d’exécution (exécutant, en ETH)', 'Execution fee (keeper, in ETH)'], rxCost_network_gas: ['Frais de réseau (Arbitrum)', 'Network gas (Arbitrum)'], rxCost_funding: ['Financement sur la durée', 'Funding over the period'],672 rxCost_borrow: ['Emprunt sur la durée', 'Borrowing over the period'], rxCost_collateral_transfer: ['Acheminement de la garantie', 'Getting collateral there'],673 rxTiming_at_fill: ['à l’exécution', 'at execution'], rxTiming_over_horizon: ['pendant la détention — le taux change', 'while held — the rate changes'], rxTiming_at_close: ['réglé à la clôture', 'settled at the close'], rxTiming_before_trading: ['avant de négocier', 'before trading'],674 rxAllInOver: ['Tout compris sur {h}', 'All-in over {h}'], rxComplete: ['tous les postes sont chiffrés', 'every item is priced'], rxIncomplete: ['hors postes inconnus : {list}', 'excluding unknown items: {list}'], rxPartial: ['partiel : le relevé du carnet s’arrête', 'partial: the book snapshot ends'],675 rxExit: ['Pour information : clôturer tout de suite, sur le même relevé, ajouterait {exit} — aller-retour {trip} ({bps}). À la vraie clôture, carnet, oracle et taux auront changé.',676 'For information: closing right away, on the same snapshot, would add {exit} — round trip {trip} ({bps}). At the real close the book, the oracle and the rates will have changed.'],677 rxMarginTitle: ['Marge et liquidation', 'Margin and liquidation'], rxInitialMargin: ['Marge initiale à {lev}×', 'Initial margin at {lev}×'], rxMaintenance: ['Marge de maintien', 'Maintenance margin'],678 rxLiq: ['Prix de liquidation · distance', 'Liquidation price · distance'], rxMethod: ['Règle et méthode', 'Rule and method'],679 rxRiskTitle: ['Vue risque', 'Risk view'], rxVenueLimits: ['Limites de la plateforme', 'Venue limits'], rxAccepted: ['accepté', 'accepted'], rxRefused: ['refusé', 'refused'], rxNotAsked: ['non demandé', 'not asked'],680 rxNoAccountAsked: ['Aucun compte sélectionné sur cette plateforme : vos limites de risque n’ont pas été interrogées.', 'No account selected on this venue: your risk limits were not asked.'],681 rxTermsTitle: ['Conditions du contrat', 'Contract terms'],682 rxOpenPaper: ['Ouvrir sur Hyperliquid en simulation', 'Open on Hyperliquid in simulation'],683 rxOpenPaperHint: ['Ouvre le panneau d’ordre du compte de simulation, pré-rempli. Rien n’est placé tant que vous ne confirmez pas, et rien n’est réel.', 'Opens the paper account’s order panel, pre-filled. Nothing is placed until you confirm, and nothing is real.'],684 rxOpenPaperOff: ['Indisponible : cet ordre n’est pas admissible sur Hyperliquid.', 'Unavailable: this order is not eligible on Hyperliquid.'],685 rxSrc_venue: ['plateforme', 'venue'], rxSrc_constant: ['constante', 'constant'], rxSrc_estimate: ['estimation', 'estimate'], rxSrc_paper: ['simulation', 'paper'],686 rxSrcTitle_venue: ['Lu sur la plateforme dans le relevé', 'Read from the venue in the snapshot'], rxSrcTitle_constant: ['Fait documenté par la plateforme, épinglé avec sa date', 'A fact documented by the venue, pinned with its date'],687 rxSrcTitle_estimate: ['Calculé par le portefeuille : une estimation', 'Computed by the wallet: an estimate'], rxSrcTitle_paper: ['Compte de simulation', 'Paper account'],688 // end of the `rx` block689 // controlled live trading on a venue account (V4, delivery 8) — ONE contiguous block, every key prefixed `fl`: keep additions inside it690 flToneSim: ['Simulation', 'Simulation'], flToneTestnet: ['Testnet — argent fictif', 'Testnet — play money'], flToneReal: ['Réel — argent réel', 'Real — real money'],691 flBandSim: ['Compte simulé : aucun ordre ne quitte cette application.', 'Simulated account: no order leaves this application.'],692 flBandTestnet: ['Réseau d’essai de Hyperliquid : vrais ordres sur le testnet, argent sans valeur.',693 'Hyperliquid test network: real orders on the testnet, money with no value.'],694 flBandReal: ['Réseau principal de Hyperliquid : chaque ordre approuvé engage de l’argent réel.',695 'Hyperliquid main network: every approved order commits real money.'],696 flBannerOff: ['Données de marché en lecture seule et ordres simulés. Aucun ordre réel ne part : la négociation réelle n’est activée sur aucun compte (vue « Comptes »).',697 'Read-only market data and simulated orders. No real order is sent: live trading is not enabled on any account (Accounts view).'],698 flBannerSimLive: ['Compte de simulation : rien n’est envoyé à une plateforme. Un compte de plateforme autorisé existe ; il ne sert que si vous le choisissez dans le panneau d’ordre.',699 'Paper account: nothing is sent to a venue. An authorised venue account exists; it is used only if you choose it in the order panel.'],700 flBannerTestnet: ['Compte TESTNET : les ordres partent vers le réseau d’essai de Hyperliquid, avec de l’argent fictif, chacun après votre clé d’accès. Le graphique et le carnet sont ceux du réseau principal.',701 'TESTNET account: orders go to Hyperliquid’s test network, with play money, each one after your passkey. The chart and the book are those of the main network.'],702 flBannerReal: ['Compte RÉEL : les ordres partent vers Hyperliquid avec de l’argent réel, chacun après votre clé d’accès.',703 'REAL account: orders go to Hyperliquid with real money, each one after your passkey.'],704 flSrcVenue: ['plateforme', 'venue'], flSrcLocal: ['portefeuille', 'wallet'], flSrcVenueTitle: ['Valeur lue sur la plateforme elle-même', 'Value read from the venue itself'],705 flSrcLocalTitle: ['État connu du portefeuille seulement : rien n’a été confirmé par la plateforme',706 'State known to the wallet only: nothing was confirmed by the venue'],707 flSrcEstimateTitle: ['Estimation calculée avant l’ordre, pas une valeur de la plateforme', 'Estimate computed before the order, not a venue value'], flYes: ['oui', 'yes'], flNo: ['non', 'no'],708 flVenueSays: ['La plateforme répond :', 'The venue answers:'], flSource: ['Source', 'Source'], flReadAt: ['lu sur la plateforme à {time}', 'read from the venue at {time}'],709 flUnreadable: ['Le compte n’a pas pu être lu sur la plateforme : son état est inconnu, pas vide.',710 'The account could not be read from the venue: its state is unknown, not empty.'],711 flConnStream: ['mis à jour en continu', 'updated continuously'], flConnPolling: ['relu toutes les 8 s', 're-read every 8 s'],712 flWorkerError: ['La dernière vérification auprès de la plateforme a échoué :', 'The last check with the venue failed:'], flLiveOn: ['autorisée', 'authorised'],713 flIntro: ['La négociation réelle existe pour les contrats perpétuels de Hyperliquid, en mode manuel : chaque ordre est approuvé avec votre clé d’accès. Elle reste désactivée tant que vous n’avez pas autorisé un compte. Elle repose sur :',714 'Live trading exists for Hyperliquid perpetuals, in manual mode: every order is approved with your passkey. It stays off until you authorise an account. It relies on:'],715 flReq2: ['votre autorisation de cette clé avec votre clé d’accès, puis votre clé d’accès pour chaque ordre — et une révocation possible à tout moment, sans clé d’accès ;',716 'your authorisation of that key with your passkey, then your passkey for every order — and revocation at any time, without a passkey;'],717 flMainnetSetting: ['Le réseau principal (argent réel) est désactivé sur le serveur. Seul le propriétaire peut l’activer, dans la configuration du serveur (SPW_DERIV_LIVE_MAINNET) : ce n’est pas un interrupteur de cette interface. Le testnet fonctionne.',718 'The main network (real money) is disabled on the server. Only the owner can enable it, in the server configuration (SPW_DERIV_LIVE_MAINNET): it is not a switch of this interface. The testnet works.'],719 flMainnetOffTitle: ['Réseau principal désactivé sur le serveur.', 'Main network disabled on the server.'],720 flMainnetOff: ['Rien ne peut être préparé, signé ni envoyé sur ce compte. Le réglage se change sur le serveur, par le propriétaire ; il n’y a pas d’interrupteur ici.',721 'Nothing can be prepared, signed or sent on this account. The setting is changed on the server, by the owner; there is no switch here.'],722 flMainnetBlocked: ['Bloqué : le serveur garde le réseau principal désactivé (réglage du serveur, pas de cette interface).',723 'Blocked: the server keeps the main network disabled (a server setting, not one of this interface).'],724 flCreateTestnetTitle: ['Compte Hyperliquid — testnet', 'Hyperliquid account — testnet'], flCreateMainnetTitle: ['Compte Hyperliquid — réseau principal', 'Hyperliquid account — main network'],725 flCreateTestnetBody: ['Le compte est l’adresse de votre portefeuille sur le réseau d’essai de Hyperliquid. Il est créé en lecture seule : rien ne peut être négocié avant votre autorisation.',726 'The account is your wallet’s address on Hyperliquid’s test network. It is created read-only: nothing can trade before your authorisation.'],727 flCreateMainnetBody: ['Le compte est l’adresse de votre portefeuille sur Hyperliquid. Argent réel. Il est créé en lecture seule.',728 'The account is your wallet’s address on Hyperliquid. Real money. It is created read-only.'],729 flCreateTestnet: ['Créer le compte testnet', 'Create the testnet account'], flCreateMainnet: ['Créer le compte réel', 'Create the real account'], flLabelTestnet: ['Hyperliquid testnet', 'Hyperliquid testnet'],730 flLabelMainnet: ['Hyperliquid réel', 'Hyperliquid real'], flModeReadOnly: ['lecture seule', 'read-only'], flModeLive: ['négociation manuelle autorisée', 'manual trading authorised'],731 flModeExpired: ['autorisation expirée', 'authorisation expired'], flAccountAddr: ['Compte sur la plateforme (adresse du portefeuille)', 'Venue account (the wallet’s address)'],732 flAccountAddrNote: ['La clé de cette adresse ne négocie jamais : pour la plateforme, elle ne signe que l’enregistrement de la clé de négociation et, à votre demande, un retrait vers cette même adresse.',733 'The key of this address never trades: for the venue it only signs the registration of the trading key and, at your request, a withdrawal to this same address.'],734 flTradingKey: ['Clé de négociation dédiée', 'Dedicated trading key'],735 flTradingKeyNote: ['Elle vit dans le signataire isolé. Elle peut placer des ordres, les annuler et régler le levier, dans les limites que vous approuvez. Elle ne peut ni retirer des fonds ni les transférer vers une autre adresse.',736 'It lives in the isolated signer. It can place orders, cancel them and set leverage, within the limits you approve. It cannot withdraw funds or transfer them to another address.'],737 flAuthActive: ['Autorisation en vigueur', 'Authorisation in force'], flAuthExpires: ['Expire le', 'Expires'], flRevokedAt: ['Autorisation révoquée le {date}.', 'Authorisation revoked on {date}.'],738 flAuthorize: ['Autoriser la négociation…', 'Authorise trading…'], flRevoke: ['Révoquer l’autorisation…', 'Revoke the authorisation…'],739 flMandateNote: ['Le mode par mandat (des agents qui négocient des dérivés sans votre clé d’accès à chaque ordre) n’existe pas.',740 'Mandate mode (agents trading derivatives without your passkey for each order) does not exist.'],741 flFundTitle: ['Alimenter le compte de la plateforme', 'Funding the venue account'],742 flFundMain1: ['La garantie est de l’USDC natif sur Arbitrum One, envoyé par l’adresse du compte elle-même au pont de Hyperliquid. Le dépôt est crédité au compte expéditeur, en général en moins d’une minute.',743 'Collateral is native USDC on Arbitrum One, sent by the account address itself to Hyperliquid’s bridge. The deposit is credited to the sending account, usually within a minute.'],744 flFundMain2: ['Minimum 5 USDC : la plateforme indique qu’un montant inférieur n’est pas crédité et est perdu. Tout autre jeton envoyé au pont doit être considéré comme perdu.',745 'Minimum 5 USDC: the venue states that a smaller amount is not credited and is lost. Any other token sent to the bridge must be assumed lost.'],746 flFundMain3: ['Avant tout envoi : relisez la page de dépôt de Hyperliquid, vérifiez-y l’adresse du pont, et commencez par le minimum.',747 'Before sending anything: read Hyperliquid’s deposit page again, check the bridge address there, and start with the minimum.'],748 flFundTest1: ['Sur le testnet, la garantie est de l’USDC fictif. Le robinet de Hyperliquid n’en donne qu’à une adresse qui a déjà déposé sur le réseau principal.',749 'On the testnet, collateral is mock USDC. Hyperliquid’s faucet only serves an address that has already deposited on the main network.'],750 flFundTest2: ['Autre voie : un compte testnet qui en possède déjà peut en envoyer à l’adresse de ce compte depuis l’interface testnet de Hyperliquid.',751 'Otherwise: a testnet account that already holds some can send it to this account’s address from Hyperliquid’s testnet interface.'],752 flWithdrawalsServer: ['Retraits, selon le serveur :', 'Withdrawals, according to the server:'], flAuthTitle: ['Autoriser la négociation — {network}', 'Authorise trading — {network}'],753 flAuthIntro: ['Ces limites sont enregistrées dans le signataire isolé, qui les applique lui-même à chaque ordre. Elles ne peuvent être élargies que par une nouvelle autorisation. Les valeurs proposées sont prudentes ; modifiez-les à votre mesure.',754 'These limits are stored in the isolated signer, which enforces them itself on every order. They can only be widened by a new authorisation. The suggested values are cautious; adjust them to your needs.'],755 flLimInstruments: ['Marchés autorisés', 'Allowed markets'],756 flLimHint_instruments: ['Seuls les marchés de la table d’actifs épinglée dans le signataire ({date}) peuvent être autorisés.',757 'Only the markets of the asset table pinned in the signer ({date}) can be allowed.'],758 flLim_maxLeverage: ['Levier maximal', 'Maximum leverage'],759 flLimHint_maxLeverage: ['Réglage de levier le plus élevé que le signataire acceptera de signer (entier, {max} au plus).',760 'Highest leverage setting the signer will sign (an integer, at most {max}).'],761 flLim_maxOrderNotional: ['Valeur maximale par ordre', 'Maximum notional per order'],762 flLimHint_maxOrderNotional: ['Taille × prix d’un ordre. Vérifiée par le signataire sur chaque ordre, y compris ceux qui réduisent une position.',763 'Size × price of one order. Checked by the signer on every order, reducing ones included.'],764 flLim_maxPositionNotional: ['Position maximale par marché', 'Maximum position per market'],765 flLimHint_maxPositionNotional: ['Valeur de la position après l’ordre. Au moins égale à la limite par ordre.',766 'Value of the position after the order. At least the per-order limit.'],767 flLim_maxGrossExposure: ['Exposition brute maximale', 'Maximum gross exposure'],768 flLimHint_maxGrossExposure: ['Somme des positions, tous marchés confondus. Au moins égale à la limite par position.',769 'Sum of the positions across markets. At least the per-position limit.'],770 flLim_maxOrdersPerDay: ['Ordres par jour', 'Orders per day'],771 flLimHint_maxOrdersPerDay: ['Ordres signés par jour (UTC), {max} au plus. Les annulations ne comptent pas.',772 'Orders signed per UTC day, at most {max}. Cancels are not counted.'],773 flLim_bandBps: ['Bande de prix', 'Price band'],774 flLimHint_bandBps: ['Écart maximal entre chaque prix d’un ordre et le prix que le signataire relève lui-même ({min} à {max} pb ; 100 pb = 1 %).',775 'Largest gap between every price of an order and the price the signer reads itself ({min} to {max} bps; 100 bps = 1%).'],776 flLim_days: ['Durée', 'Duration'],777 flLimHint_days: ['L’autorisation et la clé de négociation expirent ensuite d’elles-mêmes ({max} jours au plus).',778 'The authorisation and the trading key then expire by themselves (at most {max} days).'],779 flDaysUnit: ['jours', 'days'],780 flBandTestnetNote: ['Sur le testnet, le prix de référence s’écarte souvent de plus de 1 % des prix au comptant que relève le signataire : une bande étroite y refuserait tout. D’où 1 000 pb par défaut.',781 'On the testnet the mark often sits more than 1% away from the spot prices the signer reads: a narrow band would refuse everything there. Hence 1,000 bps by default.'],782 flPol_instruments: ['Choisissez au moins un marché.', 'Choose at least one market.'], flPol_tooManyInstruments: ['Au plus {maxInst} marchés.', 'At most {maxInst} markets.'],783 flPol_leverage: ['Le levier maximal est un entier de 1 à {maxLev}.', 'Maximum leverage is an integer from 1 to {maxLev}.'],784 flPol_leverageVenue: ['Le levier dépasse le maximum de la plateforme pour l’un des marchés choisis.',785 'The leverage exceeds the venue maximum of one of the chosen markets.'],786 flPol_order: ['La valeur maximale par ordre doit être un montant positif.', 'The maximum notional per order must be a positive amount.'],787 flPol_position: ['La position maximale doit être un montant positif.', 'The maximum position must be a positive amount.'],788 flPol_gross: ['L’exposition brute maximale doit être un montant positif.', 'The maximum gross exposure must be a positive amount.'],789 flPol_orderAbovePosition: ['La limite par ordre ne peut pas dépasser la limite par position.',790 'The per-order limit cannot exceed the per-position limit.'],791 flPol_positionAboveGross: ['La limite par position ne peut pas dépasser l’exposition brute.',792 'The per-position limit cannot exceed the gross exposure.'],793 flPol_ordersPerDay: ['Ordres par jour : un entier de 1 à {maxOrders}.', 'Orders per day: an integer from 1 to {maxOrders}.'],794 flPol_band: ['Bande de prix : un entier de {minBand} à {maxBand} pb.', 'Price band: an integer from {minBand} to {maxBand} bps.'],795 flPol_days: ['Durée : un nombre entier de jours, de 1 à {maxDays}.', 'Duration: a whole number of days, from 1 to {maxDays}.'], flAuthContinue: ['Continuer : relire avant d’approuver', 'Continue: read before approving'],796 flAckTitle: ['Les conditions de la plateforme et votre juridiction', 'The venue’s terms and your jurisdiction'], flAckCheck: ['J’ai lu et je comprends', 'I have read and I understand'],797 flAckSigned: ['Ce texte et son empreinte font partie de ce que votre clé d’accès signe ; votre confirmation est consignée au journal d’audit.',798 'This text and its fingerprint are part of what your passkey signs; your confirmation is recorded in the audit log.'],799 flAckNeeded: ['Cochez « J’ai lu et je comprends » pour pouvoir approuver.', 'Tick “I have read and I understand” to be able to approve.'], flSignedTitle: ['Ce qui est signé', 'What is signed'],800 flSignedMain: ['Pour cette autorisation, la clé principale du portefeuille signe un seul message : l’enregistrement de la clé de négociation ci-dessous.',801 'For this authorisation, the main wallet key signs a single message: the registration of the trading key below.'],802 flSignedPasskey: ['Votre clé d’accès signe l’empreinte de cette autorisation : le compte, la clé de négociation, les limites, l’expiration et l’empreinte du texte ci-dessus.',803 'Your passkey signs the fingerprint of this authorisation: the account, the trading key, the limits, the expiry and the fingerprint of the text above.'],804 flKeyTitle: ['La clé de négociation et son expiration', 'The trading key and its expiry'], flKeyExpiry: ['valable jusqu’au {date}', 'valid until {date}'], flCan: ['Elle peut', 'It can'],805 flCannot: ['Elle ne peut pas', 'It cannot'], flCan_place: ['placer des ordres', 'place orders'], flCan_cancel: ['annuler des ordres', 'cancel orders'], flCan_leverage: ['régler le levier', 'change leverage'],806 flCannot_withdraw: ['retirer des fonds', 'withdraw funds'], flCannot_transfer: ['transférer vers une autre adresse', 'transfer to another address'], flKeyNote: ['Précision du serveur :', 'Note from the server:'],807 flLimitsTitle: ['Les limites', 'The limits'],808 flLimitsWho: ['Le signataire applique lui-même les marchés, le levier, la valeur par ordre, le nombre d’ordres par jour, la bande de prix et l’expiration. Il ne voit pas les positions : les limites de position et d’exposition sont appliquées par le serveur, d’après l’état réel du compte.',809 'The signer itself enforces the markets, the leverage, the notional per order, the orders per day, the price band and the expiry. It cannot see positions: the position and exposure limits are enforced by the server, from the account’s real state.'],810 flIntegrity_ack: ['Le texte affiché ne correspond pas à l’empreinte que l’autorisation contient. Rien ne peut être approuvé : préparez à nouveau.',811 'The text displayed does not match the fingerprint inside the authorisation. Nothing can be approved: prepare again.'],812 flIntegrity_policy: ['Le serveur a préparé d’autres limites que celles demandées. Rien ne peut être approuvé : préparez à nouveau.',813 'The server prepared limits other than those requested. Nothing can be approved: prepare again.'],814 flIntegrity_account: ['L’autorisation préparée ne désigne pas ce compte ou cette clé de négociation. Rien ne peut être approuvé.',815 'The prepared authorisation does not name this account or this trading key. Nothing can be approved.'],816 flAuthApproveTestnet: ['Approuver avec la clé d’accès (testnet)', 'Approve with the passkey (testnet)'], flAuthApproveReal: ['Approuver avec la clé d’accès — ARGENT RÉEL', 'Approve with the passkey — REAL MONEY'],817 flBackToLimits: ['Revenir aux limites', 'Back to the limits'], flAuthPrepareAgain: ['Préparer une nouvelle autorisation', 'Prepare a new authorisation'],818 flVenueRefusedTitle: ['La plateforme a refusé d’enregistrer la clé de négociation.', 'The venue refused to register the trading key.'],819 flVenueRefused: ['L’autorisation a été révoquée sur le signataire : rien ne peut être négocié, et le compte reste en lecture seule.',820 'The authorisation was revoked on the signer: nothing can trade, and the account stays read-only.'],821 flUnfundedNote: ['La plateforme n’accepte aucune action d’un compte qui n’a jamais reçu de dépôt. Alimentez d’abord le compte (ci-dessous), puis préparez une nouvelle autorisation.',822 'The venue accepts no action from an account that never received a deposit. Fund the account first (below), then prepare a new authorisation.'],823 flRevokeTitle: ['Révoquer l’autorisation', 'Revoke the authorisation'],824 flRevokeBody: ['La révocation est immédiate et définitive pour cette autorisation, sans clé d’accès. Ensuite, le portefeuille ne peut plus rien signer pour ce compte — pas même une annulation. Les positions restent ouvertes sur la plateforme.',825 'Revocation is immediate and permanent for this authorisation, with no passkey. Afterwards the wallet can sign nothing for this account — not even a cancel. Positions stay open on the venue.'],826 flRevokeCancelFirst: ['Annuler d’abord les ordres en attente sur la plateforme', 'Cancel the orders resting on the venue first'], flRevokeOpenNow: ['Ordres en attente en ce moment : {n}', 'Orders resting right now: {n}'],827 flRevokeLeaves: ['{n} ordre(s) resteront sur la plateforme, et le portefeuille ne pourra plus les annuler.',828 '{n} order(s) will stay on the venue, and the wallet will no longer be able to cancel them.'],829 flRevokeConfirm: ['Révoquer maintenant', 'Revoke now'], flRevoked: ['Autorisation révoquée. Le compte est de nouveau en lecture seule.', 'Authorisation revoked. The account is read-only again.'],830 flRevokeWarnTitle: ['Des ordres restent sur la plateforme.', 'Orders remain on the venue.'],831 flRevokeWarn: ['Le portefeuille ne peut plus les annuler. Annulez-les dans l’interface de la plateforme, ou approuvez une nouvelle autorisation puis annulez-les.',832 'The wallet can no longer cancel them. Cancel them in the venue’s own interface, or approve a new authorisation and then cancel them.'],833 flRevokeAgent: ['La clé de négociation reste inscrite sur la plateforme jusqu’à son expiration, mais elle n’existe que dans le signataire, qui refuse désormais de s’en servir.',834 'The trading key stays registered at the venue until it expires, but it exists only in the signer, which now refuses to use it.'],835 flOrderTestnet: ['Ordre — testnet', 'Order — testnet'], flOrderReal: ['Ordre réel', 'Real order'],836 flReadOnlyNote: ['Ce compte est en lecture seule : aucun ordre ne peut partir. Autorisez-le dans la vue « Comptes », avec votre clé d’accès.',837 'This account is read-only: no order can be sent. Authorise it in the Accounts view, with your passkey.'],838 flRevokedNote: ['L’autorisation de ce compte a été révoquée : il est en lecture seule. Une nouvelle autorisation est nécessaire pour négocier.',839 'This account’s authorisation was revoked: it is read-only. A new authorisation is needed to trade.'],840 flGoAuthorize: ['Ouvrir la vue « Comptes »', 'Open the Accounts view'],841 flNotInAuthorization: ['{symbol} ne fait pas partie des marchés de l’autorisation en vigueur. L’ajouter demande une nouvelle autorisation (révoquer, puis autoriser).',842 '{symbol} is not among the markets of the authorisation in force. Adding it takes a new authorisation (revoke, then authorise).'],843 flNotPinned: ['{symbol} ne peut pas être négocié en réel : seuls les marchés de la table d’actifs épinglée dans le signataire le peuvent.',844 '{symbol} cannot be traded live: only the markets of the asset table pinned in the signer can.'],845 flTestnetPrices: ['Le graphique et le carnet affichés sont ceux du réseau principal. Le testnet a ses propres prix : saisissez vos prix d’après la référence du testnet.',846 'The chart and the book shown are those of the main network. The testnet has its own prices: enter your prices from the testnet mark.'],847 flTestnetMark: ['Référence du testnet : {price}', 'Testnet mark: {price}'], flSizeHint: ['Taille en {base}, arrondie vers le bas au lot de {lot} {base}.', 'Size in {base}, rounded down to the lot of {lot} {base}.'],848 flVenueLeverage: ['Levier réglé sur la plateforme', 'Leverage set on the venue'], flLevUnknown: ['lu avec l’aperçu de l’ordre', 'read with the order preview'], flLevChange: ['Modifier…', 'Change…'],849 flReduceOnlyHint: ['Ne peut que réduire la position. Demande aussi votre clé d’accès.', 'Can only reduce the position. Also needs your passkey.'],850 flMarketNote: ['Un ordre au marché part comme un ordre limite « immédiat ou annulé » à son pire prix accepté, à {pct} % du carnet : ce qui n’est pas exécuté dans cette limite est annulé.',851 'A market order is sent as an immediate-or-cancel limit order at its worst accepted price, {pct}% from the book: whatever is not filled within that bound is cancelled.'],852 flPreview: ['Aperçu, d’après l’état réel du compte', 'Preview, from the account’s real state'], flEstimate: ['Estimation', 'Estimate'], flFeeMax: ['Frais (majorant)', 'Fee (upper bound)'],853 flVenueMark: ['Prix de référence', 'Mark price'],854 flLiqNote: ['Le prix de liquidation n’est pas estimé avant l’ordre : la plateforme l’indique une fois la position ouverte. Les frais sont un majorant au taux preneur de base (0,045 %).',855 'The liquidation price is not estimated before the order: the venue reports it once the position exists. The fee is an upper bound at the base taker rate (0.045%).'],856 flNotionalSigner: ['Le signataire plafonne chaque ordre, même ceux qui réduisent une position : fractionnez l’ordre.',857 'The signer caps every order, reducing ones included: split the order.'],858 flFootTestnet: ['Testnet : argent fictif. Chaque ordre demande votre clé d’accès.', 'Testnet: play money. Every order needs your passkey.'],859 flFootReal: ['ARGENT RÉEL. Chaque ordre demande votre clé d’accès.', 'REAL MONEY. Every order needs your passkey.'], flApproveTitle: ['Vérifier et approuver l’ordre', 'Review and approve the order'],860 flCloseTitle: ['Fermer la position', 'Close the position'],861 flProposing: ['Préparation de l’ordre : vérification du risque sur l’état réel du compte…',862 'Preparing the order: risk check against the account’s real state…'],863 flSignedExactly: ['Ce que votre clé d’accès signe, exactement', 'What your passkey signs, exactly'], flCInstrument: ['Marché', 'Market'], flCSide: ['Sens', 'Side'], flCBuy: ['Achat', 'Buy'], flCSell: ['Vente', 'Sell'],864 flCType: ['Type envoyé à la plateforme', 'Type sent to the venue'], flCMarketNote: ['ordre au marché = limite « immédiat ou annulé » au pire prix', 'market order = immediate-or-cancel limit at the worst price'],865 flCSize: ['Taille', 'Size'], flCPrice: ['Prix limite', 'Limit price'], flCWorstPrice: ['Pire prix accepté', 'Worst accepted price'], flCTrigger: ['Prix de déclenchement', 'Trigger price'], flCNone: ['aucun', 'none'],866 flCReduceOnly: ['Réduction seulement', 'Reduce-only'], flCTif: ['Durée de validité', 'Time in force'], flCNetwork: ['Réseau', 'Network'], flCClientId: ['Identifiant d’ordre', 'Client order id'],867 flCNonce: ['Numéro unique (nonce)', 'Nonce'], flTif_gtc: ['jusqu’à annulation (GTC)', 'good till cancelled (GTC)'], flTif_ioc: ['immédiat ou annulé (IOC)', 'immediate or cancel (IOC)'],868 flTif_alo: ['sans exécution immédiate (ALO)', 'post only (ALO)'],869 flCloseBound: ['Ordre de fermeture au marché, borné à {pct} % du carnet ({bps} pb) : ce qui ne s’exécute pas dans cette limite est annulé.',870 'Market close order, bounded at {pct}% from the book ({bps} bps): whatever does not fill within it is cancelled.'],871 flExpiresIn: ['Approbation possible encore {time}', 'Approval possible for {time}'], flApproveTestnet: ['Approuver avec la clé d’accès (testnet)', 'Approve with the passkey (testnet)'],872 flApproveReal: ['Approuver avec la clé d’accès — ARGENT RÉEL', 'Approve with the passkey — REAL MONEY'], flPasskeyWaiting: ['Confirmez avec votre clé d’accès…', 'Confirm with your passkey…'],873 flSending: ['Signature et envoi à la plateforme…', 'Signing and sending to the venue…'],874 flVoidNote: ['Cette proposition n’est plus valable ; rien n’a été envoyé à la plateforme.',875 'This proposal is no longer valid; nothing was sent to the venue.'],876 flPrepareAgain: ['Préparer à nouveau', 'Prepare again'], flResendApproval: ['Renvoyer l’approbation (l’ordre ne part qu’une fois)', 'Send the approval again (the order is sent only once)'],877 flCancelWithdraws: ['Annuler retire la proposition : rien n’est signé.', 'Cancelling withdraws the proposal: nothing is signed.'],878 flUnknownNote: ['Ne renvoyez pas cet ordre : la plateforme est interrogée avec son identifiant, et l’état se mettra à jour ici (ouvert, exécuté, ou jamais placé).',879 'Do not send this order again: the venue is being asked by its id, and the state will update here (open, filled, or never placed).'],880 flUnknownShort: ['En cours de vérification auprès de la plateforme — ne pas renvoyer.', 'Being checked on the venue — do not resend.'], flWhatWasSigned: ['Ce qui a été signé', 'What was signed'],881 flSt_proposed: ['proposé', 'proposed'], flSt_risk_checked: ['à approuver', 'awaiting approval'], flSt_authorized: ['approuvé', 'approved'], flSt_signed: ['signé', 'signed'], flSt_submitted: ['envoyé', 'sent'],882 flSt_unknown: ['en cours de vérification', 'being checked'], flSt_open: ['ouvert', 'open'], flSt_partially_filled: ['exécuté en partie', 'partially filled'], flSt_filled: ['exécuté', 'filled'],883 flSt_cancelled: ['annulé', 'cancelled'], flSt_rejected: ['refusé', 'rejected'], flOut_proposed: ['Ordre proposé, pas encore approuvé.', 'Order proposed, not approved yet.'],884 flOut_risk_checked: ['Ordre préparé : il attend votre clé d’accès.', 'Order prepared: it awaits your passkey.'], flOut_authorized: ['Ordre approuvé ; signature en cours.', 'Order approved; being signed.'],885 flOut_signed: ['Ordre signé ; envoi en cours. En cours de vérification auprès de la plateforme — ne pas renvoyer.',886 'Order signed; being sent. Being checked on the venue — do not resend.'],887 flOut_submitted: ['Ordre envoyé ; la plateforme n’a pas encore confirmé son état. En cours de vérification auprès de la plateforme — ne pas renvoyer.',888 'Order sent; the venue has not confirmed its state yet. Being checked on the venue — do not resend.'],889 flOut_unknown: ['La plateforme n’a pas donné de réponse exploitable : l’ordre existe peut-être, peut-être pas. En cours de vérification auprès de la plateforme — ne pas renvoyer.',890 'The venue gave no usable answer: the order may or may not exist. Being checked on the venue — do not resend.'],891 flOut_open: ['Ordre ouvert sur la plateforme : il attend son prix dans le carnet.',892 'Order open on the venue: resting in the book, waiting for its price.'],893 flOut_partially_filled: ['Exécuté en partie : {filled} sur {size} {base} à {price} ; le reste est encore dans le carnet.',894 'Partially filled: {filled} of {size} {base} at {price}; the rest is still in the book.'],895 flOut_partially_filled_final: ['Exécuté en partie : {filled} sur {size} {base} à {price} ; le reste a été annulé.',896 'Partially filled: {filled} of {size} {base} at {price}; the rest was cancelled.'],897 flOut_filled: ['Ordre exécuté : {filled} {base} à {price}.', 'Order filled: {filled} {base} at {price}.'], flOut_cancelled: ['Ordre annulé : rien n’a été exécuté.', 'Order cancelled: nothing was filled.'],898 flOut_rejected: ['Ordre refusé : rien n’a été exécuté.', 'Order rejected: nothing was filled.'], flLevTitle: ['Levier — {symbol}', 'Leverage — {symbol}'],899 flLevIntro: ['Le levier est un réglage de la plateforme, marché par marché. Le changer est une action signée par la clé de négociation, que vous approuvez avec votre clé d’accès.',900 'Leverage is a venue setting, market by market. Changing it is an action signed by the trading key, which you approve with your passkey.'],901 flLevNew: ['Nouveau levier', 'New leverage'], flLevBounds: ['Maximum autorisé : {max}×.', 'Authorised maximum: {max}×.'], flLevCurrent: ['Réglage actuel : {lev}× ({mode}).', 'Current setting: {lev}× ({mode}).'],902 flLevMode: ['Mode de marge', 'Margin mode'], flLevCross: ['Marge croisée', 'Cross margin'], flLevIsolated: ['Marge isolée', 'Isolated margin'], flLevNow: ['Réglage actuel', 'Current setting'],903 flLevPrepare: ['Préparer le changement', 'Prepare the change'], flLev_confirmed: ['Levier réglé à {lev}× : confirmé par la plateforme.', 'Leverage set to {lev}×: confirmed by the venue.'],904 flLev_rejected: ['La plateforme a refusé le changement de levier. Le réglage n’a pas changé.',905 'The venue refused the leverage change. The setting did not change.'],906 flLev_unknown: ['La plateforme n’a pas confirmé le changement. Réglage lu en ce moment : {lev}×. Vérifiez-le avant de négocier.',907 'The venue did not confirm the change. Setting read right now: {lev}×. Check it before trading.'],908 flControls: ['Arrêt d’urgence', 'Kill switch'], flHalt: ['Suspendre les nouveaux ordres', 'Stop new orders'], flResume: ['Reprendre la négociation', 'Resume trading'],909 flHaltNote: ['Les nouveaux ordres sont suspendus. Les ordres en attente sont toujours sur la plateforme et les positions toujours ouvertes : les annuler et les fermer sont des actions distinctes.',910 'New orders are stopped. Resting orders are still on the venue and positions are still open: cancelling and closing are separate actions.'],911 flHaltTitle: ['Négociation suspendue sur ce compte.', 'Trading halted on this account.'],912 flHaltBody: ['Les nouveaux ordres sont refusés. Les ordres qui réduisent une position passent encore, et annuler reste possible.',913 'New orders are refused. Orders that reduce a position still pass, and cancelling remains possible.'],914 flCancelAll: ['Annuler tous les ordres en attente…', 'Cancel all resting orders…'], flCancelAllTitle: ['Annuler tous les ordres en attente', 'Cancel all resting orders'],915 flCancelAllBody: ['Tous les ordres en attente sur ce compte de la plateforme seront annulés — y compris ceux que ce portefeuille n’a pas placés. Aucune position n’est fermée. Aucune clé d’accès n’est demandée.',916 'Every order resting on this venue account will be cancelled — including those this wallet did not place. No position is closed. No passkey is asked.'],917 flCancelAllConfirm: ['Annuler tous les ordres', 'Cancel all orders'],918 flCancelAllDone: ['Annulations demandées : {requested} ; acceptées : {accepted} ; ordres encore en attente sur la plateforme : {remaining}.',919 'Cancels requested: {requested}; accepted: {accepted}; orders still resting on the venue: {remaining}.'],920 flControlsHint: ['Trois actions distinctes : suspendre les nouveaux ordres, annuler les ordres en attente, fermer une position (onglet « Positions », avec votre clé d’accès).',921 'Three separate actions: stop new orders, cancel resting orders, close a position (Positions tab, with your passkey).'],922 flDivTitle: ['L’état de la plateforme et les registres du portefeuille ne concordent pas.', 'The venue’s state and the wallet’s records differ.'],923 flDivBody: ['Un ordre ou une position que ce portefeuille n’a pas créé se trouve sur le compte (activité depuis une autre interface, liquidation…). Par prudence, les nouveaux ordres sont suspendus ; réduire une position reste possible.',924 'An order or a position this wallet did not create is on the account (activity from another interface, a liquidation…). To be safe, new orders are stopped; reducing a position remains possible.'],925 flDivReconcileHint: ['« Revérifier » relit la plateforme tout de suite : un ordre étranger disparu lève l’arrêt. « Accepter l’état de la plateforme » prend ses positions actuelles comme nouvelle référence.',926 '“Check again” re-reads the venue now: a foreign order that is gone lifts the stop. “Accept the venue’s state” takes its present positions as the new reference.'],927 flReconcile: ['Revérifier maintenant', 'Check again now'], flRebase: ['Accepter l’état de la plateforme…', 'Accept the venue’s state…'],928 flDivStill: ['Vérification faite : l’écart est toujours là.', 'Checked: the difference is still there.'],929 flDivCleared: ['Vérification faite : la plateforme et les registres concordent de nouveau.', 'Checked: the venue and the records agree again.'], flRebaseTitle: ['Accepter l’état de la plateforme', 'Accept the venue’s state'],930 flRebaseBody: ['Vous confirmez que les positions actuellement sur la plateforme sont bien les vôtres et qu’elles servent désormais de référence. À ne faire que si vous savez d’où vient l’écart. Cela ne ferme rien et n’annule rien.',931 'You confirm that the positions now on the venue are yours and become the reference from now on. Do this only if you know where the difference comes from. It closes nothing and cancels nothing.'],932 flRebaseConfirm: ['Oui, prendre l’état de la plateforme comme référence', 'Yes, take the venue’s state as the reference'], flClosePos: ['Fermer (clé d’accès)', 'Close (passkey)'], flLiqVenue: ['Liquidation', 'Liq.'],933 flOriginClose: ['fermeture', 'close'], flForeign: ['non placé par ce portefeuille', 'not placed by this wallet'],934 flForeignHint: ['Ordre venu d’une autre interface : « Annuler tous les ordres » l’annule aussi.',935 'An order from another interface: “Cancel all orders” cancels it too.'],936 flInFlight: ['{n} ordre(s) en cours de vérification auprès de la plateforme — ne pas renvoyer. Leur état se mettra à jour ici.',937 '{n} order(s) being checked on the venue — do not resend. Their state will update here.'],938 flCancelRefused: ['La plateforme a refusé l’annulation', 'The venue refused the cancel'],939 flCancelUnknown: ['La plateforme n’a pas confirmé l’annulation : l’ordre est peut-être encore en attente',940 'The venue did not confirm the cancel: the order may still be resting'],941 flPnlNote: ['Valeurs lues sur la plateforme ; la courbe a un point par minute depuis l’autorisation.',942 'Values read from the venue; the curve has one point per minute since the authorisation.'],943 flEv_order_refused: ['Ordre refusé', 'Order refused'], flEv_order_unknown: ['Ordre à l’issue inconnue', 'Order with unknown outcome'], flEv_halt: ['Négociation suspendue', 'Trading halted'],944 flEv_resume: ['Négociation reprise', 'Trading resumed'], flEv_divergence: ['Écart avec la plateforme', 'Difference with the venue'], flEv_divergence_rebased: ['État de la plateforme accepté', 'Venue state accepted'],945 flEv_divergence_cleared: ['Écart résorbé', 'Difference cleared'],946 flE_passkey_cancelled: ['La demande de clé d’accès a été annulée ou a expiré. Rien n’a été signé ni envoyé.',947 'The passkey prompt was cancelled or timed out. Nothing was signed or sent.'],948 flE_passkey_failed: ['La clé d’accès n’a pas pu répondre. Rien n’a été signé ni envoyé.',949 'The passkey could not answer. Nothing was signed or sent.'],950 flE_canonical_mismatch: ['Le serveur a renvoyé un ordre différent de celui demandé. Par prudence, rien ne peut être approuvé : la proposition est retirée.',951 'The server returned an order different from the one requested. To be safe, nothing can be approved: the proposal is withdrawn.'],952 flE_proposal_expired: ['La proposition a expiré avant l’approbation (90 secondes). Rien n’a été signé. Préparez l’ordre à nouveau : il sera revérifié aux prix du moment.',953 'The proposal expired before approval (90 seconds). Nothing was signed. Prepare the order again: it will be checked again at current prices.'],954 flE_halted: ['La négociation est suspendue sur ce compte : les nouveaux ordres sont refusés. Seuls les ordres qui réduisent une position passent. Levez l’arrêt, ou réglez l’écart avec la plateforme, pour reprendre.',955 'Trading is halted on this account: new orders are refused. Only orders that reduce a position pass. Lift the halt, or settle the difference with the venue, to resume.'],956 flE_halted_423: ['La négociation a été suspendue entre la préparation et l’approbation : rien n’a été signé. Levez l’arrêt, puis préparez à nouveau.',957 'Trading was halted between preparation and approval: nothing was signed. Lift the halt, then prepare again.'],958 flE_mainnet_disabled: ['Le réseau principal est désactivé sur le serveur : rien n’a été préparé, signé ni envoyé. Seul le propriétaire peut l’activer, dans la configuration du serveur.',959 'The main network is disabled on the server: nothing was prepared, signed or sent. Only the owner can enable it, in the server configuration.'],960 flE_mode_read_only: ['Ce compte est en lecture seule : la négociation n’y a pas été autorisée, ou l’autorisation a été révoquée. Autorisez-le dans la vue « Comptes ».',961 'This account is read-only: trading was never authorised on it, or the authorisation was revoked. Authorise it in the Accounts view.'],962 flE_authorization_expired: ['L’autorisation de ce compte a expiré. Approuvez-en une nouvelle dans la vue « Comptes » pour négocier.',963 'This account’s authorisation has expired. Approve a new one in the Accounts view to trade.'],964 flE_venue_rejected: ['La plateforme, ou ses règles d’ordre, a refusé cette demande. Rien n’a été exécuté.',965 'The venue, or its order rules, refused this request. Nothing was executed.'],966 flE_no_position: ['La plateforme n’indique aucune position ouverte sur ce marché : il n’y a rien à fermer.',967 'The venue reports no open position on this market: there is nothing to close.'],968 flE_below_min_size: ['Cette fraction de la position fait moins d’un lot. Fermez une part plus grande.',969 'That fraction of the position is less than one lot. Close a larger part.'],970 flE_instrument_not_allowed: ['Ce marché ne fait pas partie de l’autorisation en vigueur. L’ajouter demande une nouvelle autorisation.',971 'This market is not part of the authorisation in force. Adding it takes a new authorisation.'],972 flE_leverage_exceeded: ['Ce levier dépasse le maximum autorisé. Choisissez un levier plus bas, ou approuvez une nouvelle autorisation.',973 'This leverage is above the authorised maximum. Choose a lower one, or approve a new authorisation.'],974 flE_bad_state: ['Cette action n’est pas possible dans l’état actuel (autorisation déjà active, ou ordre en cours de signature). Rechargez l’état, puis réessayez.',975 'This action is not possible in the present state (an authorisation is already active, or the order is being signed). Reload the state, then try again.'],976 flE_wrong_key: ['Ce compte appartient à une autre clé du signataire que celle en service. Rien n’a été fait ; vérifiez le signataire.',977 'This account belongs to a signer key other than the one in service. Nothing was done; check the signer.'],978 flE_bad_request: ['La demande a été refusée par le serveur parce qu’elle est mal formée. Corrigez les champs et réessayez.',979 'The server refused the request as malformed. Correct the fields and try again.'],980 flE_idempotency: ['L’identifiant de la demande a été refusé. Préparez l’ordre à nouveau.',981 'The request identifier was refused. Prepare the order again.'],982 flE_bad_policy: ['Ces limites ne sont pas acceptées : elles sortent des bornes, ou dépassent ce que l’autorisation permet. Corrigez-les.',983 'These limits are not accepted: they are out of bounds, or exceed what the authorisation allows. Correct them.'],984 flE_unknown_account: ['Ce compte n’existe plus sur le serveur. Rechargez la page.', 'This account no longer exists on the server. Reload the page.'],985 flE_unknown_order: ['Le serveur ne connaît pas cet ordre. Rechargez l’état du compte.',986 'The server does not know this order. Reload the account state.'],987 flE_unknown_action: ['Le serveur ne connaît pas ce changement de levier. Préparez-le à nouveau.',988 'The server does not know this leverage change. Prepare it again.'],989 flE_unknown_instrument: ['Ce marché n’existe pas sur le réseau de ce compte.', 'This market does not exist on this account’s network.'],990 flE_unknown_venue: ['La négociation réelle n’existe que sur Hyperliquid.', 'Live trading exists on Hyperliquid only.'],991 flE_too_many_streams: ['Trop de flux de compte ouverts en même temps : le compte est relu périodiquement à la place. Fermez les autres onglets.',992 'Too many account streams open at once: the account is re-read periodically instead. Close the other tabs.'],993 flE_asset_table_mismatch: ['La table d’actifs de la plateforme ne correspond plus à celle épinglée dans le signataire : toute négociation est refusée, rien n’a été signé. La table doit être revue et le serveur redéployé.',994 'The venue’s asset table no longer matches the one pinned in the signer: all trading is refused, nothing was signed. The table must be reviewed and the server redeployed.'],995 flE_venue_unavailable: ['La plateforme ne répond pas : rien n’a été envoyé. Réessayez dans un instant.',996 'The venue is not answering: nothing was sent. Try again in a moment.'],997 flE_venue_rate_limited: ['La plateforme limite le débit des requêtes : rien n’a été envoyé. Attendez une minute, puis réessayez.',998 'The venue is rate-limiting requests: nothing was sent. Wait a minute, then try again.'],999 flE_signer_unreachable: ['Le signataire est injoignable : rien n’a été signé ni envoyé. Vérifiez le signataire, puis préparez à nouveau.',1000 'The signer is unreachable: nothing was signed or sent. Check the signer, then prepare again.'],1001 flE_signer_price: ['Le signataire a refusé : un prix de l’ordre sort de la bande de prix autour de son propre relevé. Rien n’a été signé. Rapprochez le prix du marché, ou approuvez une autorisation à bande plus large.',1002 'The signer refused: a price of the order is outside the price band around its own reading. Nothing was signed. Bring the price closer to the market, or approve an authorisation with a wider band.'],1003 flE_signer_no_price: ['Le signataire n’a pas pu relever lui-même le prix de cet actif (ses deux sources doivent répondre et concorder) : sans prix, il ne signe pas. Réessayez dans un instant.',1004 'The signer could not read the price of this asset itself (its two sources must answer and agree): without a price it does not sign. Try again in a moment.'],1005 flE_signer_bad_approval: ['Le signataire n’a pas accepté l’approbation par clé d’accès. Rien n’a été signé. Préparez à nouveau et approuvez avec la clé d’accès du propriétaire.',1006 'The signer did not accept the passkey approval. Nothing was signed. Prepare again and approve with the owner’s passkey.'],1007 flE_signer_unknown_credential: ['Cette clé d’accès n’est pas inscrite auprès du signataire. Rien n’a été signé. Utilisez la clé d’accès du propriétaire.',1008 'This passkey is not enrolled with the signer. Nothing was signed. Use the owner’s passkey.'],1009 flE_signer_policy: ['Le signataire a refusé : l’ordre dépasse une limite de l’autorisation (marché, valeur par ordre, ordres par jour ou levier). Rien n’a été signé.',1010 'The signer refused: the order exceeds a limit of the authorisation (market, notional per order, orders per day or leverage). Nothing was signed.'],1011 flE_signer_mismatch: ['Le signataire a constaté que ce qui lui était demandé de signer ne correspond pas à l’ordre approuvé. Rien n’a été signé. Préparez à nouveau ; si cela se répète, n’insistez pas et vérifiez le serveur.',1012 'The signer found that what it was asked to sign does not match the approved order. Nothing was signed. Prepare again; if it happens again, stop and check the server.'],1013 flE_signer_expired: ['L’autorisation ou la fenêtre d’approbation a expiré côté signataire. Rien n’a été signé. Préparez à nouveau.',1014 'The authorisation or the approval window expired on the signer. Nothing was signed. Prepare again.'],1015 flE_signer_revoked: ['L’autorisation a été révoquée sur le signataire : il ne signe plus rien pour ce compte. Approuvez une nouvelle autorisation.',1016 'The authorisation was revoked on the signer: it signs nothing for this account any more. Approve a new authorisation.'],1017 flE_signer_stale_nonce: ['Le numéro unique de l’ordre est trop ancien pour le signataire. Rien n’a été signé. Préparez à nouveau.',1018 'The order’s nonce is too old for the signer. Nothing was signed. Prepare again.'],1019 flE_signer_replay: ['Le signataire a déjà vu cet ordre ou ce numéro unique et refuse de le signer deux fois. Rien de nouveau n’a été envoyé. Préparez un nouvel ordre.',1020 'The signer has already seen this order or this nonce and refuses to sign it twice. Nothing new was sent. Prepare a new order.'],1021 flE_signer_acknowledgement: ['Le signataire n’a pas reconnu le texte de juridiction que l’autorisation contient. Rien n’a été autorisé. Préparez à nouveau.',1022 'The signer did not recognise the jurisdiction text inside the authorisation. Nothing was authorised. Prepare again.'],1023 flE_signer_unsupported: ['Le signataire refuse de signer ce type d’action : il ne signe que des ordres, des annulations et des changements de levier.',1024 'The signer refuses to sign this kind of action: it signs only orders, cancels and leverage changes.'],1025 flE_signer_wrong_key: ['Le signataire en service n’est pas celui auquel ce compte appartient. Rien n’a été signé.',1026 'The signer in service is not the one this account belongs to. Nothing was signed.'],1027 flE_signer_wrong_agent: ['La clé de négociation nommée n’est pas celle du signataire. Rien n’a été signé.',1028 'The trading key named is not the signer’s own. Nothing was signed.'],1029 flE_signer_conflict: ['Le signataire a déjà une autorisation qui entre en conflit avec celle-ci. Révoquez l’ancienne, puis préparez à nouveau.',1030 'The signer already holds an authorisation that conflicts with this one. Revoke the old one, then prepare again.'],1031 flE_signer_halted: ['L’arrêt d’urgence du signataire est actif : il ne signe rien, sauf des annulations. Levez-le (vue « Sécurité ») pour reprendre.',1032 'The signer’s emergency halt is active: it signs nothing except cancels. Lift it (Security view) to resume.'],1033 flE_signer_other: ['Le signataire a refusé. Rien n’a été signé ni envoyé.', 'The signer refused. Nothing was signed or sent.'],1034 flE_offline: ['Hors ligne, ou serveur injoignable : la réponse n’est pas arrivée. Vérifiez la connexion, puis réessayez.',1035 'Offline, or server unreachable: no answer arrived. Check the connection, then try again.'],1036 flE_stale_data: ['Les données de marché sont trop anciennes pour vérifier l’ordre. Rien n’a été préparé ; réessayez dans un instant.',1037 'Market data is too old to check the order. Nothing was prepared; try again in a moment.'],1038 flE_no_liquidity: ['Le carnet n’a aucun niveau de ce côté : un ordre au marché ne peut pas être borné. Utilisez un ordre limite.',1039 'The book has no level on that side: a market order cannot be bounded. Use a limit order.'],1040 flE_csrf: ['La requête a été refusée par la protection du serveur. Rechargez la page.',1041 'The request was refused by the server’s protection. Reload the page.'],1042 flE_unauthenticated: ['La session a expiré. Déverrouillez le portefeuille, puis recommencez.',1043 'The session has expired. Unlock the wallet, then start again.'],1044 flE_other: ['Le serveur a refusé cette demande.', 'The server refused this request.'],1045 // end of the `fl` block1046 // collateral of a venue account: deposit / withdraw (v6) — ONE contiguous block, every key prefixed `hlc`: keep additions inside it1047 hlcTitle: ['Garantie : déposer et retirer', 'Collateral: deposit and withdraw'], hlcAtVenue: ['Sur la plateforme :', 'At the venue:'], hlcDeposit: ['Déposer', 'Deposit'], hlcWithdraw: ['Retirer', 'Withdraw'],1048 hlcUnavailable: ['Les dépôts et retraits ne peuvent pas être préparés pour l’instant : l’état n’a pas pu être lu.', 'Deposits and withdrawals cannot be prepared right now: the status could not be read.'],1049 hlcFundBuilt: ['« Déposer » et « Retirer » se font ci-dessous, depuis ce portefeuille, avec votre clé d’accès à chaque opération. L’application refuse un dépôt sous le minimum et ne retire que vers votre propre adresse.',1050 '“Deposit” and “Withdraw” are done below, from this wallet, with your passkey for every operation. The app refuses a deposit below the minimum and only withdraws to your own address.'],1051 hlcPanelNote: ['Dépôt : USDC natif sur {network}, minimum {min} USDC, crédité au compte en moins d’une minute en général. Retrait : frais de la plateforme {fee} USDC, environ 4 minutes, uniquement vers l’adresse de ce portefeuille. Déposez avant d’autoriser la négociation : la plateforme refuse toute action d’un compte qui n’a jamais déposé.',1052 'Deposit: native USDC on {network}, minimum {min} USDC, usually credited to the account within a minute. Withdrawal: venue fee {fee} USDC, about 4 minutes, only to this wallet’s address. Deposit before authorising trading: the venue refuses any action from an account that never deposited.'],1053 hlcUnifiedNote: ['Ce compte utilise un mode de marge de la plateforme où la garantie se lit dans le solde au comptant :', 'This account uses a venue margin mode in which collateral is read from the spot balance:'],1054 hlcBridgeLink: ['Amener de l’USDC de {from} vers {to} ({amount} USDC disponibles)', 'Bring USDC from {from} to {to} ({amount} USDC available)'],1055 hlcWhy_no_route: ['Pas de dépôt sur le testnet depuis ce portefeuille : la garantie y est de l’USDC fictif, donné par le robinet de Hyperliquid.', 'No deposit on testnet from this wallet: collateral there is mock USDC, given by Hyperliquid’s faucet.'],1056 hlcWhy_mainnet_disabled: ['Le réseau principal est fermé par le réglage du serveur : aucun dépôt ni retrait d’argent réel.', 'The main network is closed by the server setting: no deposit or withdrawal of real money.'],1057 hlcWhy_halted: ['L’arrêt d’urgence du signataire est actif : rien n’est signé.', 'The signer’s emergency halt is active: nothing is signed.'],1058 hlcWhy_usdc_elsewhere: ['Ce portefeuille n’a pas {min} USDC sur {network}, mais il en détient sur un autre réseau. Rien n’est transféré automatiquement : amenez-le d’abord sur {network} avec le transfert inter-réseaux, puis revenez déposer.',1059 'This wallet does not hold {min} USDC on {network}, but it holds some on another network. Nothing is moved automatically: bring it to {network} first with the cross-network transfer, then come back to deposit.'],1060 hlcWhy_no_usdc: ['Ce portefeuille n’a pas {min} USDC sur {network} : il faut d’abord en recevoir sur ce réseau.', 'This wallet does not hold {min} USDC on {network}: receive some on that network first.'],1061 hlcWhy_no_gas: ['Il n’y a pas d’ETH sur {network} pour payer les frais de réseau du dépôt.', 'There is no ETH on {network} to pay the network fee of the deposit.'],1062 hlcWhy_limit_reached: ['La limite d’envoi d’USDC du signataire (par transfert ou par jour) ne laisse pas la place d’un dépôt de {min} USDC aujourd’hui.', 'The signer’s USDC sending limit (per transfer or per day) leaves no room for a {min} USDC deposit today.'],1063 hlcWhy_wallet_unreadable: ['Le solde du portefeuille sur le réseau de dépôt n’a pas pu être lu : aucun dépôt n’est préparé à l’aveugle.', 'The wallet balance on the deposit network could not be read: no deposit is prepared blind.'],1064 hlcWhy_venue_unreadable: ['Le compte n’a pas pu être lu sur la plateforme : aucun retrait n’est préparé à l’aveugle.', 'The account could not be read at the venue: no withdrawal is prepared blind.'],1065 hlcDepositTitle: ['Déposer sur Hyperliquid — {network}', 'Deposit to Hyperliquid — {network}'], hlcWithdrawTitle: ['Retirer de Hyperliquid — {network}', 'Withdraw from Hyperliquid — {network}'], hlcAmount: ['Montant', 'Amount'],1066 hlcDepositHint: ['Entre {min} et {max} USDC aujourd’hui. La plateforme ne crédite rien sous {venueMin} USDC.', 'Between {min} and {max} USDC today. The venue credits nothing below {venueMin} USDC.'],1067 hlcWithdrawHint: ['Plus de {fee} USDC : la plateforme garde {fee} USDC de frais sur chaque retrait.', 'More than {fee} USDC: the venue keeps a {fee} USDC fee on every withdrawal.'],1068 hlcWalletHas: ['USDC du portefeuille sur {network}', 'Wallet USDC on {network}'], hlcWalletGas: ['Pour les frais de réseau', 'For network fees'], hlcLimitTx: ['Limite par transfert', 'Limit per transfer'], hlcLimitDay: ['Limite par jour', 'Limit per day'],1069 hlcLimitSpent: ['{spent} déjà envoyés aujourd’hui', '{spent} already sent today'],1070 hlcMinTitle: ['Minimum {min} USDC.', 'Minimum {min} USDC.'],1071 hlcMinBody: ['Hyperliquid ne crédite pas un dépôt inférieur à {venueMin} USDC : l’argent serait perdu pour toujours. L’application et le signataire refusent donc tout dépôt sous {min} USDC.',1072 'Hyperliquid does not credit a deposit below {venueMin} USDC: the money would be lost forever. The app and the signer therefore refuse any deposit below {min} USDC.'],1073 hlcReview: ['Vérifier', 'Review'], hlcPreparing: ['Vérification du contrat du pont sur deux sources, et que la plateforme crédite bien les dépôts en ce moment…', 'Checking the bridge contract on two sources, and that the venue is crediting deposits right now…'],1074 hlcRoute: ['Trajet', 'Route'], hlcRouteValue: ['USDC natif sur {network} → pont de Hyperliquid → votre compte', 'Native USDC on {network} → Hyperliquid bridge → your account'],1075 hlcRouteBack: ['Votre compte → validateurs de Hyperliquid → ce portefeuille sur {network}', 'Your account → Hyperliquid validators → this wallet on {network}'],1076 hlcTime: ['Délai attendu', 'Expected time'], hlcTimeDeposit: ['moins de {seconds} après la confirmation sur le réseau', 'under {seconds} after the network confirms'], hlcTimeWithdraw: ['environ {seconds}', 'about {seconds}'],1077 hlcMinimum: ['Minimum', 'Minimum'], hlcMinimumVenue: ['plateforme : {venueMin} USDC', 'venue: {venueMin} USDC'], hlcFeeNetwork: ['Frais de réseau ({network})', 'Network fee ({network})'], hlcFeeVenue: ['Frais de la plateforme', 'Venue fee'], hlcFeeCharged: ['prélevés', 'charged'],1078 hlcBalBefore: ['Solde sur la plateforme, avant', 'Venue balance, before'], hlcBalAfter: ['Solde sur la plateforme, après', 'Venue balance, after'], hlcBalNotYet: ['pas encore — en attente', 'not yet — waiting'], hlcBalUnread: ['non lu', 'not read'],1079 hlcCreditsSender: ['La plateforme crédite l’adresse qui envoie. C’est l’adresse de ce portefeuille, qui est aussi votre compte sur la plateforme :', 'The venue credits the sending address. That is this wallet’s address, which is also your account at the venue:'],1080 hlcBridgePinned: ['Destination : le contrat du pont de Hyperliquid, épinglé dans le signataire (qui refuse toute autre adresse) et dont le code vient d’être vérifié sur deux sources :', 'Destination: Hyperliquid’s bridge contract, pinned in the signer (which refuses any other address), its code just checked on two sources:'],1081 hlcLostBelow: ['Sous {venueMin} USDC, un dépôt n’est pas crédité et est perdu. Ce montant est au-dessus du minimum de {min} USDC appliqué ici.', 'Below {venueMin} USDC a deposit is not credited and is lost. This amount is above the {min} USDC minimum enforced here.'],1082 hlcNotBefore: ['Après l’envoi, l’écran affichera « en attente du crédit par la plateforme » jusqu’à ce que la plateforme elle-même montre le crédit. Rien n’est annoncé avant.', 'After sending, the screen will show “waiting for the venue to credit” until the venue itself shows the credit. Nothing is announced before that.'],1083 hlcLiveness: ['Vérifié à l’instant : la plateforme crédite bien les dépôts récents faits par ce pont.', 'Checked just now: the venue is crediting recent deposits made through this bridge.'],1084 hlcDepositApprove: ['Déposer {amount} USDC avec la clé d’accès', 'Deposit {amount} USDC with the passkey'], hlcWithdrawApprove: ['Retirer {amount} USDC avec la clé d’accès', 'Withdraw {amount} USDC with the passkey'],1085 hlcExpired: ['Délai d’approbation écoulé : revenez en arrière et vérifiez de nouveau.', 'Approval window over: go back and review again.'], hlcBack: ['Retour — rien n’a été signé', 'Back — nothing was signed'],1086 hlcCloseSafe: ['Vous pouvez fermer : le suivi continue sur le serveur et reste visible dans la carte du compte.', 'You can close this: tracking continues on the server and stays visible in the account card.'],1087 hlcVenueAvailable: ['Retirable sur la plateforme', 'Withdrawable at the venue'], hlcReceiveExpected: ['Vous recevrez', 'You will receive'], hlcReceived: ['Reçu sur le portefeuille', 'Received on the wallet'],1088 hlcOwnOnly: ['Destination : l’adresse de ce portefeuille, et aucune autre. Le signataire refuse de signer un retrait vers une autre adresse ; de là, vous déplacez les fonds comme d’habitude.', 'Destination: this wallet’s address, and no other. The signer refuses to sign a withdrawal to any other address; from there you move the funds as usual.'],1089 hlcSignedMain: ['Ce que signe la clé du portefeuille, dans le signataire, après votre clé d’accès :', 'What the wallet key signs, inside the signer, after your passkey:'],1090 hlcNotBeforeArrival: ['Le retrait est annoncé « arrivé » seulement quand ce portefeuille voit l’USDC sur {network}. Accepté par la plateforme ne veut pas dire arrivé.', 'The withdrawal is reported “arrived” only when this wallet sees the USDC on {network}. Accepted by the venue does not mean arrived.'],1091 hlcUntracked: ['Sur le testnet, le paiement se fait sur {network}, un réseau que ce portefeuille ne suit pas : le suivi s’arrête quand la plateforme inscrit le retrait.', 'On testnet the payout is made on {network}, a network this wallet does not follow: tracking stops when the venue records the withdrawal.'],1092 hlcVenueAt: ['Inscrit par la plateforme', 'Recorded by the venue'], hlcSeeTx: ['Voir la transaction sur {network}', 'See the transaction on {network}'], hlcOpSource: ['État lu sur la plateforme et sur le réseau par le serveur', 'State read from the venue and the network by the server'], hlcSteps: ['Étapes', 'Steps'],1093 hlcStepSigned: ['Signé', 'Signed'], hlcStepOnChain: ['Confirmé sur le réseau', 'Confirmed on the network'], hlcStepAwaitCredit: ['Crédit par la plateforme', 'Credit by the venue'], hlcStepCredited: ['Crédité', 'Credited'],1094 hlcStepVenue: ['Accepté par la plateforme', 'Accepted by the venue'], hlcStepPayout: ['Paiement par les validateurs', 'Payout by validators'], hlcStepArrived: ['Arrivé', 'Arrived'],1095 hlcState_done: ['terminé', 'done'], hlcState_stopped: ['arrêté', 'stopped'], hlcState_late: ['en retard', 'late'], hlcState_progress: ['en cours', 'in progress'],1096 hlcOp_dep_pending_approval: ['En attente de votre clé d’accès. Rien n’a été signé.', 'Waiting for your passkey. Nothing was signed.'],1097 hlcOp_dep_signed: ['Signé ; envoi de la transaction sur le réseau.', 'Signed; sending the transaction to the network.'],1098 hlcOp_dep_sent: ['Transaction envoyée sur {network}, en attente de confirmation. La plateforme n’a encore rien crédité.', 'Transaction sent on {network}, waiting for confirmation. The venue has credited nothing yet.'],1099 hlcOp_dep_awaiting_credit: ['Confirmé sur le réseau — en attente du crédit par la plateforme (en général moins de {seconds}). Le dépôt n’est pas encore sur votre compte.', 'Confirmed on the network — waiting for the venue to credit (usually under {seconds}). The deposit is not on your account yet.'],1100 hlcOp_dep_credited: ['Crédité : la plateforme a inscrit ce dépôt sur votre compte.', 'Credited: the venue recorded this deposit on your account.'],1101 hlcOp_dep_failed: ['Le dépôt n’a pas eu lieu. Rien n’a atteint la plateforme.', 'The deposit did not happen. Nothing reached the venue.'],1102 hlcOp_dep_overdue: ['Confirmé sur le réseau, mais la plateforme n’a toujours pas inscrit le crédit. Le dépôt n’est PAS annoncé comme arrivé ; la vérification continue.', 'Confirmed on the network, but the venue still has not recorded the credit. The deposit is NOT reported as arrived; checking continues.'],1103 hlcOp_expired: ['Délai d’approbation écoulé avant la signature. Rien n’a été signé.', 'The approval window ended before signing. Nothing was signed.'], hlcOp_cancelled: ['Annulé avant la signature. Rien n’a été signé.', 'Cancelled before signing. Nothing was signed.'],1104 hlcOp_other: ['État inconnu de cette application : il n’est pas tenu pour une réussite.', 'A state this app does not know: it is not taken as a success.'],1105 hlcOp_wd_pending_approval: ['En attente de votre clé d’accès. Rien n’a été signé.', 'Waiting for your passkey. Nothing was signed.'],1106 hlcOp_wd_signed: ['Signé ; envoi de la demande à la plateforme.', 'Signed; sending the request to the venue.'],1107 hlcOp_wd_submitted: ['Accepté par la plateforme. Ses validateurs paient sur {network} en {seconds} environ ; l’USDC n’est pas encore arrivé sur ce portefeuille.', 'Accepted by the venue. Its validators pay out on {network} in about {seconds}; the USDC has not arrived on this wallet yet.'],1108 hlcOp_wd_unknown: ['La plateforme n’a pas donné de réponse lisible : on ne sait pas encore si le retrait est parti. Rien n’est supposé ; le registre de la plateforme et le portefeuille trancheront.', 'The venue gave no readable answer: it is not known yet whether the withdrawal went through. Nothing is assumed; the venue’s ledger and the wallet will decide.'],1109 hlcOp_wd_completed: ['Arrivé : ce portefeuille a reçu l’USDC du pont.', 'Arrived: this wallet received the USDC from the bridge.'],1110 hlcOp_wd_completed_untracked: ['Inscrit par la plateforme. L’arrivée sur le réseau de test n’est pas suivie par ce portefeuille.', 'Recorded by the venue. Arrival on the test network is not followed by this wallet.'],1111 hlcOp_wd_rejected: ['La plateforme a refusé ce retrait. Rien n’a quitté votre compte.', 'The venue refused this withdrawal. Nothing left your account.'],1112 hlcOp_wd_failed: ['Le retrait n’a pas été signé. Rien n’a été envoyé à la plateforme.', 'The withdrawal was not signed. Nothing was sent to the venue.'],1113 hlcOp_wd_overdue: ['Accepté par la plateforme, mais l’USDC n’est toujours pas visible sur ce portefeuille. Le retrait n’est PAS annoncé comme arrivé ; la vérification continue.', 'Accepted by the venue, but the USDC is still not visible on this wallet. The withdrawal is NOT reported as arrived; checking continues.'],1114 hlcCheckTitle: ['Toujours rien après {age}. À vérifier, dans l’ordre :', 'Still nothing after {age}. Check, in order:'],1115 hlcCheck_tx_success: ['Ouvrez la transaction (lien ci-dessous) : elle doit être marquée réussie.', 'Open the transaction (link below): it must be marked successful.'],1116 hlcCheck_tx_to_bridge: ['Dans cette transaction, le transfert d’USDC doit aller de votre adresse au pont 0x2Df1c51E09aECF9cacB7bc98cB1742757f163dF7.', 'In that transaction, the USDC transfer must go from your address to the bridge 0x2Df1c51E09aECF9cacB7bc98cB1742757f163dF7.'],1117 hlcCheck_amount_min: ['Le montant doit être d’au moins 5 USDC (l’application refuse moins de 6).', 'The amount must be at least 5 USDC (the app refuses less than 6).'],1118 hlcCheck_venue_ledger: ['Sur app.hyperliquid.xyz, connecté avec cette adresse : Portfolio → Deposits and Withdrawals. Si l’opération y figure, le suivi ici se mettra à jour.', 'On app.hyperliquid.xyz, connected with this address: Portfolio → Deposits and Withdrawals. If the operation is listed there, tracking here will catch up.'],1119 hlcCheck_venue_status: ['Consultez les annonces de Hyperliquid (statut, pause du pont). Si rien n’explique le retard, écrivez à leur support avec l’identifiant de la transaction.', 'Look at Hyperliquid’s announcements (status, bridge pause). If nothing explains the delay, write to their support with the transaction id.'],1120 hlcCheck_bridge_paused: ['Si le pont est verrouillé par ses validateurs, les paiements sont suspendus jusqu’à son déverrouillage : les fonds restent dus.', 'If the bridge is locked by its validators, payouts are suspended until it is unlocked: the funds remain owed.'],1121 hlcCheck_wallet_scan: ['Regardez le solde d’USDC du portefeuille sur Arbitrum One : s’il a augmenté du montant attendu, le retrait est arrivé et le suivi se mettra à jour.', 'Look at the wallet’s USDC balance on Arbitrum One: if it rose by the expected amount, the withdrawal arrived and tracking will catch up.'],1122 hlcErrAmount: ['Montant invalide : un nombre d’USDC avec au plus 6 décimales.', 'Invalid amount: a number of USDC with at most 6 decimals.'],1123 hlcErrBelowMin: ['Refusé : sous {min} USDC. La plateforme ne crédite rien sous {venueMin} USDC et l’argent serait perdu.', 'Refused: below {min} USDC. The venue credits nothing below {venueMin} USDC and the money would be lost.'],1124 hlcErrAboveBalance: ['Le portefeuille n’a que {have} USDC sur {network}.', 'The wallet only holds {have} USDC on {network}.'],1125 hlcErrAboveLimit: ['Au-dessus de la limite par transfert du signataire ({limit} USDC).', 'Above the signer’s per-transfer limit ({limit} USDC).'],1126 hlcErrAboveDay: ['Au-dessus de ce que la limite quotidienne du signataire laisse aujourd’hui.', 'Above what the signer’s daily limit leaves today.'],1127 hlcErrBelowFee: ['Le montant doit dépasser les frais de {fee} USDC : sinon rien n’arriverait.', 'The amount must exceed the {fee} USDC fee: otherwise nothing would arrive.'],1128 hlcErrAboveVenue: ['La plateforme indique {have} USDC retirables sur ce compte.', 'The venue reports {have} USDC withdrawable on this account.'],1129 hlcIntegrity_amount: ['Le montant préparé par le serveur n’est pas celui saisi. La clé d’accès n’est pas demandée.', 'The amount prepared by the server is not the one typed. The passkey is not requested.'],1130 hlcIntegrity_bridge: ['La destination préparée par le serveur n’est pas le pont affiché. La clé d’accès n’est pas demandée.', 'The destination prepared by the server is not the bridge shown. The passkey is not requested.'],1131 hlcIntegrity_account: ['L’adresse d’envoi n’est pas celle de votre compte sur la plateforme : le dépôt serait crédité ailleurs. La clé d’accès n’est pas demandée.', 'The sending address is not your venue account: the deposit would be credited elsewhere. The passkey is not requested.'],1132 hlcIntegrity_asset: ['Le jeton préparé n’est pas l’USDC natif du réseau de dépôt. La clé d’accès n’est pas demandée.', 'The prepared token is not native USDC on the deposit network. The passkey is not requested.'],1133 hlcIntegrity_minimum: ['Le minimum inscrit dans la demande n’est pas celui affiché. La clé d’accès n’est pas demandée.', 'The minimum written in the request is not the one shown. The passkey is not requested.'],1134 hlcIntegrity_destination: ['La destination du retrait n’est pas l’adresse de ce portefeuille. La clé d’accès n’est pas demandée.', 'The withdrawal destination is not this wallet’s address. The passkey is not requested.'],1135 hlcIntegrity_fee: ['Les frais ou le montant à recevoir ne correspondent pas à ce qui est affiché. La clé d’accès n’est pas demandée.', 'The fee or the amount to receive does not match what is shown. The passkey is not requested.'],1136 hlcIntegrity_network: ['Le réseau de la demande n’est pas celui de ce compte. La clé d’accès n’est pas demandée.', 'The network of the request is not this account’s. The passkey is not requested.'],1137 hlcE_below_minimum: ['Refusé : sous le minimum. Un tel dépôt ne serait pas crédité et serait perdu.', 'Refused: below the minimum. Such a deposit would not be credited and would be lost.'],1138 hlcE_no_route: ['Aucun trajet de dépôt n’existe pour ce réseau dans ce portefeuille.', 'No deposit route exists for this network in this wallet.'],1139 hlcE_mainnet_disabled: ['Le réseau principal est fermé par le réglage du serveur. Rien n’a été préparé, signé ni envoyé.', 'The main network is closed by the server setting. Nothing was prepared, signed or sent.'],1140 hlcE_contract_changed: ['Le contrat du pont n’est plus celui qui a été vérifié. Les dépôts sont refusés jusqu’à une nouvelle vérification.', 'The bridge contract is no longer the one that was reviewed. Deposits are refused until it is reviewed again.'],1141 hlcE_bridge_paused: ['Le pont est verrouillé par ses validateurs : les retraits y sont bloqués, donc rien n’est déposé.', 'The bridge is locked by its validators: withdrawals are blocked there, so nothing is deposited.'],1142 hlcE_route_not_proven: ['Impossible de constater à l’instant que la plateforme crédite les dépôts faits par ce pont. Par prudence, rien n’a été préparé. Réessayez plus tard.', 'It could not be established just now that the venue credits deposits made through this bridge. To be safe, nothing was prepared. Try again later.'],1143 hlcE_insufficient_usdc: ['Pas assez d’USDC sur le réseau de dépôt.', 'Not enough USDC on the deposit network.'],1144 hlcE_policy: ['Refusé par les limites du signataire.', 'Refused by the signer’s limits.'],1145 hlcE_deposit_in_progress: ['Un dépôt est déjà en route : attendez son crédit avant d’en envoyer un autre.', 'A deposit is already on its way: wait for its credit before sending another.'],1146 hlcE_pending_tx: ['Une transaction précédente sur ce réseau n’est pas encore confirmée.', 'A previous transaction on this network is not confirmed yet.'],1147 hlcE_below_fee: ['Le montant doit dépasser les frais de retrait de la plateforme.', 'The amount must exceed the venue’s withdrawal fee.'],1148 hlcE_insufficient_collateral: ['La plateforme n’a pas ce montant retirable sur ce compte.', 'The venue does not have that amount withdrawable on this account.'],1149 hlcE_withdrawal_in_progress: ['Un retrait est déjà en cours : attendez son arrivée.', 'A withdrawal is already in progress: wait for it to arrive.'],1150 hlcE_expired: ['Délai d’approbation écoulé. Rien n’a été signé ; recommencez.', 'Approval window over. Nothing was signed; start again.'],1151 hlcE_wrong_account: ['Le compte de la plateforme n’est pas l’adresse de ce portefeuille. Rien n’a été préparé.', 'The venue account is not this wallet’s address. Nothing was prepared.'],1152 hlcE_account_has_code: ['L’adresse du portefeuille porte du code (délégation) : les transferts sont refusés.', 'The wallet address carries code (delegation): transfers are refused.'],1153 hlcE_signer_venue_deposit: ['Le signataire a refusé ce dépôt : il ne correspond pas à sa table épinglée (pont, jeton, réseau ou minimum). Rien n’a été signé.', 'The signer refused this deposit: it does not match its pinned table (bridge, token, network or minimum). Nothing was signed.'],1154 hlcE_signer_wrong_destination: ['Le signataire a refusé : un retrait ne peut aller qu’à l’adresse de ce portefeuille. Rien n’a été signé.', 'The signer refused: a withdrawal can only go to this wallet’s address. Nothing was signed.'],1155 hlcE_signer_bad_approval: ['Le signataire n’a pas accepté l’approbation par clé d’accès. Rien n’a été signé.', 'The signer did not accept the passkey approval. Nothing was signed.'],1156 hlcE_insufficient_gas: ['Pas assez d’ETH sur le réseau de dépôt pour payer les frais de réseau.', 'Not enough ETH on the deposit network to pay the network fee.'],1157 hlcE_insufficient_funds: ['Solde insuffisant sur le réseau de dépôt.', 'Insufficient balance on the deposit network.'],1158 // end of the `hlc` block1159 // risk engine verdicts, one sentence per code1160 rk_unknown: ['Le moteur de risque a refusé cet ordre.', 'The risk engine refused this order.'],1161 rk_bad_policy: ['Les limites de risque de ce compte sont invalides : corrigez-les avant de négocier.', 'This account’s risk limits are invalid: fix them before trading.'],1162 rk_bad_order: ['L’ordre est mal formé (taille, prix ou type).', 'The order is malformed (size, price or type).'],1163 rk_bad_input: ['Le moteur de risque n’a pas pu évaluer la situation du compte : par prudence, l’ordre est refusé.', 'The risk engine could not evaluate the account’s situation: to be safe, the order is refused.'],1164 rk_mode_read_only: ['Ce compte est en lecture seule : aucun ordre ne peut partir.', 'This account is read-only: no order may be sent.'],1165 rk_halted: ['La négociation est suspendue sur ce compte. Seuls les ordres qui réduisent une position passent.', 'Trading is halted on this account. Only orders that reduce a position pass.'],1166 rk_instrument_mismatch: ['L’ordre ne correspond pas au marché affiché.', 'The order does not match the market on screen.'],1167 rk_instrument_not_allowed: ['Ce marché ne fait pas partie des marchés autorisés pour ce compte.', 'This market is not among the markets allowed for this account.'],1168 rk_instrument_halted: ['Ce marché est suspendu sur la plateforme.', 'This market is halted on the venue.'],1169 rk_instrument_reduce_only: ['Ce marché n’accepte que les ordres qui réduisent une position.', 'This market only accepts orders that reduce a position.'],1170 rk_data_mismatch: ['Les données de marché reçues ne sont pas celles de ce marché.', 'The market data received is not for this market.'],1171 rk_stale_ticker: ['Le prix de référence est trop ancien : pas d’ordre sur des données périmées.', 'The mark price is too old: no order on stale data.'],1172 rk_stale_book: ['Le carnet d’ordres est trop ancien : pas d’ordre sur des données périmées.', 'The order book is too old: no order on stale data.'],1173 rk_price_required: ['Un prix est requis : prix limite, ou pire prix accepté pour un ordre au marché.', 'A price is required: limit price, or worst accepted price for a market order.'],1174 rk_trigger_required: ['Ce type d’ordre exige un prix de déclenchement.', 'This order type needs a trigger price.'],1175 rk_bad_mark: ['Le prix de référence ou l’indice de la plateforme est invalide.', 'The venue’s mark or index price is invalid.'],1176 rk_price_deviation: ['Le prix de l’ordre est trop éloigné du prix de référence.', 'The order price is too far from the mark price.'],1177 rk_mark_index_divergence: ['Le prix de référence s’écarte trop de l’indice : le marché est jugé anormal.', 'The mark price diverges too much from the index: the market is deemed abnormal.'],1178 rk_price_not_on_tick: ['Le prix n’est pas un multiple de l’échelon de prix du marché.', 'The price is not a multiple of the market’s tick.'],1179 rk_size_not_on_lot: ['La taille n’est pas un multiple du lot du marché.', 'The size is not a multiple of the market’s lot.'],1180 rk_below_min_size: ['La taille est inférieure au minimum du marché.', 'The size is below the market’s minimum.'],1181 rk_below_min_notional: ['La valeur de l’ordre est inférieure au minimum du marché.', 'The order’s value is below the market’s minimum.'],1182 rk_reduce_only_would_increase: ['Un ordre « réduction seulement » ne peut ni ouvrir ni augmenter une position.', 'A reduce-only order can neither open nor increase a position.'],1183 rk_reduce_only_would_flip: ['Cet ordre « réduction seulement » dépasse la position : il la retournerait.', 'This reduce-only order is larger than the position: it would flip it.'],1184 rk_leverage_exceeded: ['Avec cet ordre, le levier du compte dépasserait votre limite.', 'With this order, the account’s leverage would exceed your limit.'],1185 rk_order_notional_exceeded: ['La valeur de cet ordre dépasse votre limite par ordre.', 'This order’s value exceeds your per-order limit.'],1186 rk_gross_exposure_exceeded: ['Avec cet ordre, l’exposition totale du compte dépasserait votre limite.', 'With this order, the account’s total exposure would exceed your limit.'],1187 rk_position_notional_exceeded: ['La position qui en résulterait dépasse votre limite par marché.', 'The resulting position exceeds your per-market limit.'],1188 rk_insufficient_collateral: ['Garantie insuffisante : après la marge initiale, il ne resterait pas le minimum exigé.', 'Insufficient collateral: after the initial margin, the required minimum would not remain.'],1189 rk_liquidation_too_close: ['Le prix de liquidation estimé serait trop proche du prix de référence.', 'The estimated liquidation price would be too close to the mark price.'],1190 rk_daily_loss_exceeded: ['La limite de perte quotidienne est atteinte : seuls les ordres de réduction passent.', 'The daily loss limit is reached: only reducing orders pass.'],1191 rk_total_loss_exceeded: ['La limite de perte totale est atteinte : seuls les ordres de réduction passent.', 'The total loss limit is reached: only reducing orders pass.'],1192 rk_order_rate_minute: ['Trop d’ordres dans la dernière minute.', 'Too many orders in the last minute.'],1193 rk_order_rate_day: ['Le nombre d’ordres permis aujourd’hui est atteint.', 'Today’s allowed number of orders is reached.'],1194 rk_duplicate_client_id: ['Cet ordre a déjà été envoyé (identifiant en double).', 'This order was already sent (duplicate identifier).'],1195 e_venue_restricted: ['Cette plateforme n’est pas accessible pour les comptes.', 'This venue is not available for accounts.'], e_venue_not_available: ['La simulation n’est pas offerte sur cette plateforme.', 'Paper trading is not offered on this venue.'],1196 e_unknown_instrument: ['Marché inconnu.', 'Unknown market.'], e_no_position: ['Aucune position sur ce marché.', 'No position on this market.'],1197 // reconciled with the backend (docs/v4/API-WAVE2-NOTES.md)1198 fxAllowed: ['Marchés autorisés', 'Allowed markets'], fxAllowedAdd: ['Ajouter un marché…', 'Add a market…'], fxAllowedRemove: ['Retirer {symbol} des marchés autorisés', 'Remove {symbol} from the allowed markets'],1199 fxAllowedHint: ['Un ordre sur un marché absent de cette liste est refusé.', 'An order on a market missing from this list is refused.'], fxAllowedNone: ['Au moins un marché est requis.', 'At least one market is required.'],1200 fxAllowedNow: ['Marchés autorisés : {list}.', 'Allowed markets: {list}.'],1201 fxNotAllowed: ['{symbol} ne fait pas partie des marchés autorisés de ce compte : tout ordre y serait refusé.', '{symbol} is not among this account’s allowed markets: any order on it would be refused.'],1202 fxAllow: ['Autoriser {symbol} sur ce compte simulé', 'Allow {symbol} on this paper account'],1203 fxCollateralRange: ['Entre 10 et 1 000 000 000 USDC.', 'Between 10 and 1,000,000,000 USDC.'], fxLimitsDefault: ['Revenir aux limites proposées', 'Back to the proposed limits'],1204 fxPaperSimpl: ['Simplifications de la simulation : marge de maintien fixe de {mm}, marge croisée seulement, frais preneur de {taker}, prix de liquidation estimé position par position.',1205 'Paper simplifications: flat maintenance margin of {mm}, cross margin only, taker fee of {taker}, liquidation price estimated position by position.'],1206 fxWouldReject: ['Le moteur de simulation rejetterait cet ordre tel quel.', 'The paper engine would reject this order as it stands.'], fxMethod: ['Méthode du serveur (en anglais) :', 'Server method:'],1207 fxVenueErrors: ['Lecture impossible pour l’instant : {venues}. Les autres plateformes restent affichées.', 'Cannot be read right now: {venues}. The other venues are still shown.'],1208 fxTotRealized: ['Réalisé depuis l’ouverture', 'Realized since opening'], fxTotFees: ['Frais payés', 'Fees paid'], fxTotFunding: ['Financement net', 'Net funding'], fxTotLiquidations: ['Liquidations simulées', 'Simulated liquidations'],1209 fxNotesCount: ['{n} notes du serveur', '{n} server notes'],1210 fxEv_funding_skipped: ['Financement non appliqué', 'Funding not applied'], fxEv_reset: ['Remise à zéro', 'Reset'],1211 e_paper_unsupported: ['Pas de compte de simulation sur cette plateforme : elle n’a pas de carnet d’ordres.', 'No paper account on this venue: it has no order book.'], e_too_many_accounts: ['Nombre maximal de comptes de simulation atteint.', 'Maximum number of paper accounts reached.'],1212 e_unknown_account: ['Compte inconnu.', 'Unknown account.'], e_unknown_order: ['Ordre inconnu.', 'Unknown order.'], e_unknown_venue: ['Plateforme inconnue.', 'Unknown venue.'], e_bad_instrument: ['Marché invalide.', 'Invalid market.'],1213 e_bad_account: ['Adresse de compte invalide.', 'Invalid account address.'], e_bad_policy: ['Limites de risque invalides.', 'Invalid risk limits.'], e_idempotency: ['Requête invalide (clé d’idempotence).', 'Invalid request (idempotency key).'],1214 e_live_not_available: ['La négociation réelle n’existe pas dans cette version.', 'Live trading does not exist in this version.'], e_venue_no_account: ['Cette plateforme ne permet pas la lecture de compte.', 'This venue does not allow account reading.'],1215 e_venue_rejected: ['La plateforme a refusé la requête.', 'The venue refused the request.'], e_venue_unavailable: ['La plateforme ne répond pas.', 'The venue is not answering.'], e_venue_rate_limited: ['La plateforme limite les requêtes : réessayez dans un instant.', 'The venue is rate limiting: try again in a moment.'],1216 e_stale_data: ['Données de marché trop anciennes : rien n’a été fait.', 'Market data too old: nothing was done.'], e_no_liquidity: ['Pas assez de liquidité dans le carnet.', 'Not enough liquidity in the book.'], e_too_many_streams: ['Trop de flux ouverts : fermez un onglet.', 'Too many streams open: close a tab.'],1217 mainnet: ['Réseaux principaux — fonds réels', 'Mainnet — real funds'],1218 // cross-chain USDC (Circle CCTP)1219 brTitle: ['Transfert d’USDC entre réseaux (Circle CCTP)', 'USDC transfer between networks (Circle CCTP)'],1220 brIntro: ['Vos USDC sont détruits sur {from} puis émis à l’identique sur {to}, à votre propre adresse. Deux transactions : la seconde se paie en {gas} sur {to}.', 'Your USDC is burned on {from} and minted one for one on {to}, to your own address. Two transactions: the second is paid in {gas} on {to}.'],1221 brSpeed: ['Vitesse', 'Speed'], brSpeed_standard: ['Standard', 'Standard'], brSpeed_fast: ['Rapide', 'Fast'],1222 brOptStandard: ['Standard · sans frais Circle', 'Standard · no Circle fee'], brOptFast: ['Rapide · frais Circle {fee} USDC', 'Fast · Circle fee {fee} USDC'], brOptTime: ['attestation en ≈ {time}', 'attestation in ≈ {time}'],1223 brFastUnavailable: ['indisponible pour l’instant', 'unavailable right now'],1224 brFeeMax: ['Frais Circle (maximum)', 'Circle fee (maximum)'], brFeeTaken: ['Frais Circle prélevés', 'Circle fee taken'],1225 brDestGas: ['Frais de réception (estimation)', 'Receiving fee (estimate)'],1226 brDestGasLine: ['Réception sur {net} : ≈ {need} {sym} nécessaires, vous avez {have} {sym}.', 'Receiving on {net}: ≈ {need} {sym} needed, you hold {have} {sym}.'],1227 brDestGasMissing: ['Vous n’avez pas assez de {sym} sur {net} pour recevoir les USDC. Rien ne sera détruit tant que ce n’est pas réglé : ajoutez d’abord du {sym} sur {net}.', 'You do not hold enough {sym} on {net} to receive the USDC. Nothing will be burned until this is solved: add {sym} on {net} first.'],1228 brExecute: ['Transférer vers {net}', 'Transfer to {net}'],1229 brReview: ['Vérifier le transfert', 'Review the transfer'], brTracking: ['Suivi du transfert', 'Transfer tracking'],1230 brGuarantee: ['Le signataire construit lui-même les deux transactions : la destruction sur {from}, puis l’émission sur {to}, uniquement vers votre propre adresse. Cette approbation couvre les deux.', 'The signer builds both transactions itself: the burn on {from}, then the mint on {to}, only ever to your own address. This approval covers both.'],1231 brIrreversible: ['Une fois détruits, les USDC ne reviennent pas sur {from} : ils ne peuvent qu’être émis sur {to}, à votre adresse, sans date limite.', 'Once burned, the USDC does not come back to {from}: it can only be minted on {to}, to your address, with no deadline.'],1232 brProgress: ['Progression', 'Progress'],1233 brStep_burning: ['Destruction envoyée', 'Burn sent'], brStep_attesting: ['Attestation de Circle', 'Circle attestation'], brStep_minting: ['Émission envoyée sur {net}', 'Mint sent on {net}'], brStep_done: ['Reçu sur {net}', 'Received on {net}'],1234 brStage_review: ['À approuver', 'To approve'], brStage_burning: ['Destruction en cours', 'Burning'], brStage_attesting: ['Attente de l’attestation', 'Waiting for attestation'], brStage_ready: ['Prêt à finaliser', 'Ready to finish'],1235 brStage_minting: ['Émission en cours', 'Minting'], brStage_mint_failed: ['Émission à refaire', 'Mint to redo'], brStage_done: ['Terminé', 'Done'], brStage_failed: ['Échoué', 'Failed'],1236 brWaitAttest: ['Circle atteste la destruction en ≈ {time} en temps normal. Vous pouvez fermer : la suite se fait seule.', 'Circle usually attests the burn in ≈ {time}. You can close this: the rest happens on its own.'],1237 brSafe: ['Rien n’est perdu si vous fermez l’application : le transfert reprend tout seul, ou depuis Activité avec « Terminer ».', 'Nothing is lost if you close the app: the transfer resumes on its own, or from Activity with “Finish”.'],1238 brFinish: ['Terminer le transfert', 'Finish the transfer'], brFinishPasskey: ['Approuver une nouvelle émission', 'Approve a new mint'],1239 brViewMint: ['Voir l’émission sur {net}', 'View the mint on {net}'], brMintedByOther: ['L’émission a été soumise par un tiers (elle est ouverte à tous) : les USDC sont bien arrivés à votre adresse.', 'The mint was submitted by a third party (anyone may do it): the USDC did arrive at your address.'],1240 brHold_destination_gas: ['Pas assez de jeton natif sur le réseau de destination pour recevoir.', 'Not enough native coin on the destination network to receive.'],1241 brHold_destination_busy: ['Une autre transaction est en cours sur le réseau de destination.', 'Another transaction is in flight on the destination network.'],1242 brHold_attestation_late: ['L’attestation de Circle tarde.', 'Circle’s attestation is late.'], brHold_attestation_service: ['Le service d’attestation de Circle ne répond pas.', 'Circle’s attestation service is not answering.'],1243 brHold_provider_unavailable: ['Le service d’attestation de Circle ne répond pas.', 'Circle’s attestation service is not answering.'],1244 brHold_attestation_expired: ['Attestation expirée : une nouvelle a été demandée.', 'Attestation expired: a new one was requested.'],1245 brHold_message_mismatch: ['La réponse de Circle ne correspond pas au transfert approuvé ; elle n’a pas été utilisée.', 'Circle’s answer does not match the approved transfer; it was not used.'],1246 brHold_contract_changed: ['Un contrat de Circle a changé depuis sa revue : l’émission attend une nouvelle revue.', 'A Circle contract changed since its review: the mint waits for a new review.'],1247 brHold_mint_would_fail: ['L’émission échouerait maintenant ; elle n’a pas été envoyée.', 'The mint would fail right now; it was not sent.'],1248 brHold_fee_above_policy: ['Les frais du réseau de destination dépassent le plafond du signataire.', 'The destination network fee is above the signer’s ceiling.'],1249 brHold_mint_reverted: ['La transaction d’émission a échoué.', 'The mint transaction failed.'], brHold_mint_replaced: ['La transaction d’émission a été remplacée.', 'The mint transaction was replaced.'],1250 brHold_signer_unreachable: ['Le signataire est injoignable.', 'The signer is unreachable.'], brHold_rpc_degraded: ['Le réseau de destination ne répond pas correctement.', 'The destination network is not answering properly.'],1251 brHold_rpc_disagreement: ['Les sources du réseau de destination ne concordent pas.', 'The destination network sources disagree.'],1252 brHold_signer_replay: ['Le signataire a déjà signé une émission pour ce transfert.', 'The signer already signed a mint for this transfer.'], brHold_signer_unsupported: ['Le signataire a refusé l’émission.', 'The signer refused the mint.'],1253 brHold_signer_policy: ['Le signataire a refusé l’émission (politique).', 'The signer refused the mint (policy).'], brHold_account_has_code: ['Cette adresse porte du code (délégation) : émission refusée.', 'This address carries code (delegation): mint refused.'],1254 brActivity: ['Transfert entre réseaux', 'Cross-chain transfer'],1255 e_destination_gas: ['Pas assez de jeton natif sur le réseau de destination. Rien n’a été détruit.', 'Not enough native coin on the destination network. Nothing was burned.'],1256 e_bridge_not_enabled: ['Le transfert CCTP n’est pas activé entre ces réseaux.', 'CCTP transfer is not enabled between these networks.'],1257 e_fast_unavailable: ['Le transfert rapide n’est pas disponible.', 'Fast transfer is not available.'], e_contract_changed: ['Un contrat de Circle a changé depuis sa revue : transferts refusés.', 'A Circle contract changed since its review: transfers refused.'],1258 e_same_network: ['Choisissez deux réseaux différents.', 'Choose two different networks.'],1259 // Solana swaps through Jupiter. The licence requires the "Metis" label wherever the API is used.1260 swSolIntro: ['Sur Solana, les échanges entre SOL et les jetons du registre sont exécutés par Jupiter (Metis) ; le signataire décode lui-même la transaction.', 'On Solana, swaps between SOL and the registry tokens are executed through Jupiter (Metis); the signer decodes the transaction itself.'],1261 swSolGuarantee: ['Le signataire a décodé la transaction Solana : seul signataire et payeur = votre portefeuille, montant exact prélevé sur votre propre compte, minimum livré sur votre propre compte, aucun frais de plateforme, aucune autre instruction. Elle livre au moins ce minimum ou échoue entièrement.', 'The signer decoded the Solana transaction: your wallet is the only signer and payer, the exact amount leaves your own account, the minimum arrives in your own account, no platform fee, no other instruction. It delivers at least this minimum or fails entirely.'],1262 swSolRoute: ['Route', 'Route'], swSolNetworkFee: ['Frais de réseau', 'Network fee'], swSolPriority: ['dont priorité', 'of which priority'],1263 swSolRent: ['Dépôt du nouveau compte de jeton', 'Deposit for the new token account'],1264 swSolRentNote: ['Ce dépôt reste dans votre propre compte de jeton {sym} ; il n’est pas versé à un tiers.', 'This deposit stays in your own {sym} token account; it is not paid to a third party.'],1265 swSolSimulated: ['Simulé à l’instant', 'Simulated just now'], swSolExpiry: ['Si elle n’est pas incluse à temps, la transaction expire sans rien déplacer.', 'If it is not included in time, the transaction expires and nothing moves.'],1266 swSolRewritten: ['forme à comptes partagés', 'shared-accounts form'],1267 e_route_not_verifiable: ['Jupiter (Metis) ne propose en ce moment aucune route que le signataire peut vérifier pour cette paire. Rien n’a été signé ; réessayez dans un instant.', 'Jupiter (Metis) offers no route right now that the signer can verify for this pair. Nothing was signed; try again in a moment.'],1268 e_provider_busy: ['Le fournisseur limite le débit des requêtes ; réessayez dans quelques secondes.', 'The provider is rate-limiting requests; try again in a few seconds.'],1269 e_token_has_fee: ['Ce jeton prélève actuellement des frais de transfert : échange refusé.', 'This token currently charges a transfer fee: swap refused.'],1270 e_token_has_hook: ['Ce jeton exécute un programme à chaque transfert : échange refusé.', 'This token runs a program on every transfer: swap refused.'],1271 e_fee_ceiling: ['Le coût dépasse le plafond de frais du portefeuille.', 'The cost exceeds the wallet’s fee ceiling.'],1272 e_account_not_plain: ['Cette adresse n’est pas un compte ordinaire : échange refusé.', 'This address is not a plain account: swap refused.'],1273 // ── qa* : QA/polish pass of 2026-11-11 (one contiguous block; funding an agent, withdrawing, checklist, Send notice) ──1274 qaClose: ['Fermer', 'Close'], qaLoading: ['Lecture des soldes…', 'Reading balances…'],1275 qaFundOpen: ['Financer l’agent', 'Fund the agent'], qaFundResume: ['Reprendre le financement', 'Resume funding'], qaFundTitle: ['Financer l’agent « {name} »', 'Fund the agent “{name}”'],1276 qaFundOnly: ['Sur {net} uniquement', 'On {net} only'],1277 qaFundTo: ['Destinataire : le portefeuille de l’agent sur {net} (non modifiable)', 'Recipient: the agent’s wallet on {net} (not editable)'],1278 qaFundToNote: ['Adresse dérivée par le signataire. L’agent ne peut utiliser que les fonds reçus sur ce réseau.', 'Address derived by the signer. The agent can only use funds received on this network.'],1279 qaFundCashRole: ['capital de l’agent', 'the agent’s capital'], qaFundGasRole: ['frais de réseau de l’agent', 'the agent’s network fees'],1280 qaFundMainHas: ['Votre portefeuille principal détient {amount} {sym} sur {net}.', 'Your main wallet holds {amount} {sym} on {net}.'],1281 qaFundLimit: ['Limite du signataire : {per} {sym} par transfert, {day} par jour (reste {left} aujourd’hui).', 'Signer limit: {per} {sym} per transfer, {day} per day ({left} left today).'],1282 qaFundNoCash: ['Pas assez de {sym} sur {net} dans votre portefeuille principal.', 'Not enough {sym} on {net} in your main wallet.'],1283 qaFundCashElsewhere: ['Vous détenez des USDC sur d’autres réseaux ; ils doivent d’abord être amenés sur le réseau de l’agent :', 'You hold USDC on other networks; it must first be brought to the agent’s network:'],1284 qaFundBridge: ['Transférer des USDC de {from} vers {to} (Circle CCTP)', 'Transfer USDC from {from} to {to} (Circle CCTP)'],1285 qaFundNoBridge: ['Aucun transfert entre réseaux n’est offert vers {net} pour {sym} : recevez-en directement sur {net}.', 'No cross-network transfer is offered to {net} for {sym}: receive some directly on {net}.'],1286 qaFundGasSuggest: ['Réserve : {amount}', 'Reserve: {amount}'],1287 qaFundGasUnknown: ['La réserve de frais de ce réseau n’est pas connue pour l’instant.', 'The fee reserve of this network is not known right now.'],1288 qaFundGasMissing: ['Réserve exigée pour passer en réel : {reserve} {sym}. L’agent en détient {held} ; il en manque {missing}.', 'Reserve required to go live: {reserve} {sym}. The agent holds {held}; {missing} is missing.'],1289 qaFundGasOk: ['La réserve de frais ({reserve} {sym}) est déjà là.', 'The fee reserve ({reserve} {sym}) is already there.'],1290 qaFundNoNative: ['Il vous faut du {native} sur {net} dans votre portefeuille principal (pour la réserve de l’agent et pour payer vos propres frais d’envoi). Il n’existe pas de pont pour les frais : envoyez-en ou recevez-en sur {net} à votre adresse :', 'You need {native} on {net} in your main wallet (for the agent’s reserve and to pay your own sending fees). There is no bridge for fees: send or receive some on {net} at your address:'],1291 qaFundVaultNow: ['L’agent détient', 'The agent holds'], qaFundVaultAfter: ['Après le financement', 'After funding'], qaFundPlanned: ['Capital prévu', 'Planned capital'],1292 qaFundTwoSteps: ['Deux transferts, l’un après l’autre, chacun approuvé avec votre clé d’accès : un seul transfert peut être en cours à la fois sur {net}.', 'Two transfers, one after the other, each approved with your passkey: only one transfer can be in flight at a time on {net}.'],1293 qaFundOneStep: ['Un transfert, approuvé avec votre clé d’accès.', 'One transfer, approved with your passkey.'],1294 qaFundEnter: ['Indiquez un montant', 'Enter an amount'], qaFundGo: ['Envoyer {what} à l’agent', 'Send {what} to the agent'],1295 qaFundTestBanner: ['Ce serveur est en mode test (diffusion désactivée) : les transferts sont signés mais ne sont pas envoyés au réseau.', 'This server is in test mode (broadcast disabled): transfers are signed but not sent to the network.'],1296 qaFundProgress: ['Étapes du financement', 'Funding steps'],1297 qaFundStep: ['Étape {k}/{n} : envoyer {amount} {sym}', 'Step {k}/{n}: send {amount} {sym}'], qaFundRetry: ['Réessayer l’étape {k}/{n} : {amount} {sym}', 'Retry step {k}/{n}: {amount} {sym}'],1298 qaFundLegTodo: ['à faire', 'to do'], qaFundLegPasskey: ['préparation, puis votre clé d’accès…', 'preparing, then your passkey…'], qaFundLegSigning: ['signature en cours…', 'signing…'],1299 qaFundLegSent: ['envoyé — en attente de confirmation', 'sent — waiting for confirmation'], qaFundLegConfirming: ['envoyé et inclus dans un bloc', 'sent and included in a block'], qaFundLegFinal: ['envoyé et finalisé', 'sent and finalized'],1300 qaFundLegFailed: ['échec : rien n’a été envoyé pour cette étape', 'failed: nothing was sent for this step'], qaFundLegTest: ['signé, mais non envoyé (serveur de test)', 'signed, but not sent (test server)'],1301 qaFundWait: ['Attente de la confirmation sur {net} avant l’étape suivante. Vous pouvez fermer : rien ne sera perdu.', 'Waiting for the confirmation on {net} before the next step. You can close this: nothing will be lost.'],1302 qaFundTestMode: ['Mode test : la diffusion est désactivée sur ce serveur. Le transfert a été signé mais rien n’a été envoyé au réseau ; les soldes ne changeront pas et l’étape suivante ne peut pas partir.', 'Test mode: broadcasting is disabled on this server. The transfer was signed but nothing was sent to the network; balances will not change and the next step cannot start.'],1303 qaFundAllDone: ['Financement envoyé sur {net}. Le solde de l’agent se met à jour dès la confirmation.', 'Funding sent on {net}. The agent’s balance updates once confirmed.'],1304 qaFundFinish: ['Terminer', 'Done'], qaFundLater: ['Fermer et reprendre plus tard', 'Close and resume later'], qaFundAbandon: ['Abandonner ce financement', 'Abandon this funding'],1305 qaFundResumeNote: ['Si vous fermez, « Reprendre le financement » sur la page de l’agent vous ramène ici.', 'If you close, “Resume funding” on the agent page brings you back here.'],1306 qaFundPasskeyCancelled: ['Approbation annulée : rien n’a été signé.', 'Approval cancelled: nothing was signed.'],1307 qaFundErrPerTx: ['Montant au-dessus de la limite du signataire : {max} {sym} au plus par transfert. Réduisez le montant, ou envoyez en plusieurs fois.', 'Amount above the signer’s limit: {max} {sym} at most per transfer. Lower the amount, or send in several transfers.'],1308 qaFundErrDaily: ['Limite quotidienne du signataire atteinte : il reste {left} {sym} aujourd’hui. Réduisez le montant ou réessayez demain.', 'The signer’s daily limit is reached: {left} {sym} left today. Lower the amount or try again tomorrow.'],1309 qaFundErrFee: ['Les frais de réseau sur {net} dépassent en ce moment le plafond du signataire. Réessayez plus tard.', 'Network fees on {net} are above the signer’s ceiling right now. Try again later.'],1310 qaFundErrBalance: ['Solde de {sym} insuffisant sur {net} dans votre portefeuille principal.', 'Not enough {sym} on {net} in your main wallet.'],1311 qaFundErrGas: ['Pas assez de {native} sur {net} pour payer les frais de ce transfert.', 'Not enough {native} on {net} to pay the fee of this transfer.'],1312 qaFundErrPending: ['Un autre transfert est encore en attente de confirmation sur {net}. Attendez sa confirmation, puis réessayez.', 'Another transfer is still waiting for confirmation on {net}. Wait for it, then try again.'],1313 qaFundErrExpired: ['Le délai d’approbation est dépassé. Réessayez.', 'The approval window expired. Try again.'],1314 qaWdOpen: ['Retirer vers mon portefeuille', 'Withdraw to my wallet'], qaWdTitle: ['Retirer vers mon portefeuille', 'Withdraw to my wallet'],1315 qaWdFrom: ['De « {name} » sur {net} vers votre portefeuille principal', 'From “{name}” on {net} to your main wallet'],1316 qaWdIntro: ['Chaque retrait envoie tout le solde d’un actif à votre propre adresse sur ce réseau (le portefeuille d’un agent ne peut payer personne d’autre). Les frais sont payés en {native} par le portefeuille de l’agent : retirez le {native} en dernier.', 'Each withdrawal sends the whole balance of one asset to your own address on this network (an agent’s wallet can pay nobody else). The fee is paid in {native} by the agent’s wallet: withdraw {native} last.'],1317 qaWdLive: ['L’agent est en réel : un retrait est refusé tant que le mandat est actif. Révoquez d’abord le mandat (« Arrêter et révoquer »), puis retirez.', 'The agent is live: a withdrawal is refused while the mandate is active. Revoke the mandate first (“Stop and revoke”), then withdraw.'],1318 qaWdEmpty: ['Le portefeuille de l’agent est vide sur ce réseau.', 'The agent’s wallet is empty on this network.'], qaWdNativeLast: ['paie les frais des autres retraits : à retirer en dernier', 'pays the fee of the other withdrawals: withdraw it last'],1319 qaWdSent: ['Retrait de {amount} {sym} envoyé vers votre portefeuille principal.', 'Withdrawal of {amount} {sym} sent to your main wallet.'],1320 qaWdTest: ['Retrait de {amount} {sym} signé, mais non envoyé : ce serveur est en mode test (diffusion désactivée).', 'Withdrawal of {amount} {sym} signed, but not sent: this server is in test mode (broadcast disabled).'],1321 qaElseTitle: ['Fonds sur d’autres réseaux', 'Funds on other networks'],1322 qaElseIntro: ['L’adresse de cet agent détient des fonds sur un autre réseau que {network} (la même adresse existe sur tous les réseaux compatibles Ethereum). L’agent ne peut pas les utiliser. Ramenez-les dans votre portefeuille principal, puis financez l’agent sur {network}.', 'This agent’s address holds funds on another network than {network} (the same address exists on every Ethereum-compatible network). The agent cannot use them. Bring them back to your main wallet, then fund the agent on {network}.'],1323 qaElseNeedGas: ['Le retrait coûte des frais en {native} sur {net}, payés par cette adresse : il faut environ {need} {native} par jeton, elle en détient {held}.', 'The withdrawal costs a fee in {native} on {net}, paid by this address: about {need} {native} per token is needed, it holds {held}.'],1324 qaElseSendGas: ['Envoyer {amount} {native} pour les frais sur {net}', 'Send {amount} {native} for the fees on {net}'],1325 qaElseGasSent: ['{native} envoyé pour les frais — en attente de confirmation ; le retrait sera possible ensuite.', '{native} sent for the fees — waiting for confirmation; the withdrawal will then be possible.'],1326 qaElseNoMainGas: ['Votre portefeuille principal n’a pas assez de {native} sur {net} pour avancer ces frais : recevez-en d’abord sur {net}.', 'Your main wallet does not hold enough {native} on {net} to advance this fee: receive some on {net} first.'],1327 qaChkTitle: ['Mise en route', 'Getting started'], qaChkYes: ['fait', 'done'], qaChkNo: ['à faire', 'to do'], qaChkUnknown: ['Solde illisible pour l’instant.', 'Balance unreadable right now.'],1328 qaChkFunds: ['Capital dans le portefeuille de l’agent', 'Capital in the agent’s wallet'], qaChkFundsDetail: ['{have} $ US sur {planned} prévus, en {cash} sur {net}', '{have} USD of {planned} planned, in {cash} on {net}'],1329 qaChkGas: ['Réserve de frais en {native}', 'Fee reserve in {native}'], qaChkGasDetail: ['{have} sur {need} {native} (exigée pour passer en réel)', '{have} of {need} {native} (required to go live)'],1330 qaChkStrategy: ['Stratégie approuvée', 'Strategy approved'], qaChkStrategyOk: ['Une version testée est approuvée.', 'A backtested version is approved.'],1331 qaChkMode: ['Agent en marche', 'Agent running'], qaChkModeLive: ['En réel, sous mandat.', 'Live, under a mandate.'], qaChkModePaper: ['En simulation : aucun ordre réel.', 'Paper trading: no real order.'], qaChkModeOff: ['À l’arrêt.', 'Not running.'],1332 qaChkAddGas: ['Ajouter la réserve de {native}', 'Add the {native} reserve'], qaChkPickStrategy: ['Choisir et tester une stratégie', 'Choose and backtest a strategy'],1333 qaSendAgent: ['Cette adresse est le portefeuille de votre agent « {name} », qui vit sur {net}. Pour le financer, la page de l’agent propose « Financer l’agent » (réseau et adresse fixés).', 'This address is the wallet of your agent “{name}”, which lives on {net}. To fund it, the agent page offers “Fund the agent” (network and address fixed).'],1334 qaSendAgentWrongNet: ['Attention : cette adresse est le portefeuille de votre agent « {name} », qui vit sur {agentNet} — pas sur {net}.', 'Careful: this address is the wallet of your agent “{name}”, which lives on {agentNet} — not on {net}.'],1335 qaSendAgentWrongNetHow: ['Des fonds envoyés ici arriveront à la même adresse mais sur un réseau que l’agent ne peut pas utiliser ; il faudra les retirer depuis la page de l’agent. Choisissez le réseau {agentNet}, ou utilisez « Financer l’agent ».', 'Funds sent here will reach the same address but on a network the agent cannot use; they will have to be withdrawn from the agent page. Choose the {agentNet} network, or use “Fund the agent”.'],1336 qaFundNote: ['L’agent ne peut utiliser que des {cash} et du {native} reçus sur {network}. Une réserve de {native} reste toujours hors de portée de la stratégie ; elle est exigée pour passer en réel. L’agent ne peut jamais toucher votre portefeuille principal.', 'The agent can only use {cash} and {native} received on {network}. A reserve of {native} always stays out of the strategy’s reach; it is required to go live. The agent can never touch your main wallet.'],1337 qaIss_WETH: ['le contrat de dépôt WETH du réseau (aucun dépositaire ; pont canonique sur une couche 2)', 'the WETH deposit contract of the network (no custodian; canonical bridge on a layer 2)'],1338 qaIss_WBTC: ['BitGo / BiT Global (dépositaires des bitcoins)', 'BitGo / BiT Global (custodians of the bitcoin)'], qaIss_cbBTC: ['Coinbase (dépositaire des bitcoins)', 'Coinbase (custodian of the bitcoin)'],1339 qaIss_tBTC: ['Threshold Network (groupe de signataires qui détient les bitcoins)', 'Threshold Network (signer set holding the bitcoin)'], qaIss_BTCB: ['Binance (dépositaire des bitcoins)', 'Binance (custodian of the bitcoin)'],1340 qaIss_cb: ['Coinbase (dépositaire des {under})', 'Coinbase (custodian of the {under})'], qaIss_wnative: ['le contrat de dépôt {sym} (aucun dépositaire)', 'the {sym} deposit contract (no custodian)'], qaIss_EURC: ['Circle (réserves en euros)', 'Circle (euro reserves)'],1341 qaIssBinancePeg: ['Binance (jeton « Binance-Peg » : Binance détient le sous-jacent et émet ce jeton)', 'Binance (“Binance-Peg” token: Binance holds the underlying and issues this token)'],1342 qaIssBridged: ['pont {bridge} (jeton ponté, pas l’émission d’origine)', '{bridge} (bridged token, not the original issue)'], qaIssBridgedGeneric: ['pont entre réseaux (jeton ponté, pas l’émission d’origine)', 'cross-network bridge (bridged token, not the original issue)'],1343 qaIssVia: ['arrivé sur ce réseau par le pont {bridge}', 'brought to this network by the {bridge}'],1344 qaTag_pegged: ['adossé', 'pegged'], qaTag_bridged: ['ponté', 'bridged'], qaTag_wrapped: ['enveloppé', 'wrapped'],1345 qaCashNote: ['Sur {net}, {sym} est « {name} ». Émetteur : {issuer}.', 'On {net}, {sym} is “{name}”. Issuer: {issuer}.'], qaCashDecimals: ['Ce jeton a {dec} décimales (et non 6).', 'This token has {dec} decimals (not 6).'],1346 qaReprDefault: ['choix par défaut', 'default choice'], qaReprLiquid: ['le plus liquide sur {net}', 'the most liquid on {net}'],1347 qaReprHint: ['Sur {net}, {liquid} est la forme la plus liquide de {sym} ; la règle par défaut retient {def}. Le choix vous appartient : il est enregistré avec l’agent.', 'On {net}, {liquid} is the most liquid form of {sym}; the default rule picks {def}. The choice is yours: it is recorded with the agent.'],1348 qaReprChoose: ['Choisissez la forme de {sym} à détenir.', 'Choose which form of {sym} to hold.'],1349 qaNoDataLegend: ['point orange : historique de prix en cours de collecte, le backtest ne sera possible qu’ensuite', 'orange dot: price history still being collected, a backtest is only possible afterwards'],1350 qaIv_1h: ['Chaque heure', 'Hourly'], qaIv_1d: ['Chaque jour', 'Daily'],1351 qaWarnFees: ['Sur {net}, un ordre coûte environ {usd} $ US de frais de réseau, soit {pct} % du plus gros ordre de cet agent ({max} $ US). De petits ordres sont mangés par les frais.', 'On {net} one order costs about {usd} USD in network fees: {pct} % of this agent’s largest order ({max} USD). Small orders are eaten by fees.'],1352 qaWarnTooMany: ['Un mandat couvre au plus 12 actifs (la trésorerie et 11 symboles) : avec {n} symboles, cet agent peut tourner en simulation mais pas passer en réel.', 'A mandate covers at most 12 assets (the cash leg and 11 symbols): with {n} symbols this agent can be paper traded but not go live.'],1353 qaStop_owner: ['Arrêté par vous.', 'Stopped by you.'], qaStop_revoked: ['Mandat révoqué par vous.', 'Mandate revoked by you.'], qaStop_expired: ['Le mandat a expiré ; approuvez-en un nouveau pour continuer.', 'The mandate expired; approve a new one to continue.'],1354 qaStop_mismatch: ['La stratégie approuvée ne correspond plus au mandat.', 'The approved strategy no longer matches the mandate.'],1355 qaStop_loss: ['Limite de perte atteinte : valeur de {eq} $ US pour {cap} $ US alloués (limite {lim} %) ; les positions ont été vendues en {cash}.', 'Loss limit reached: equity {eq} USD against {cap} USD allocated (limit {lim} %); positions were sold to {cash}.'],1356 qaLog_hold: ['Pas de signal valide : position conservée', 'No valid signal: holding'], qaLog_noquote: ['Pas de devis exécutable : ordre ignoré', 'No executable quote: order skipped'], qaLog_stopped: ['Agent arrêté', 'Agent stopped'],1357 e_internal: ['Erreur interne du serveur. Réessayez dans un instant.', 'Internal server error. Try again in a moment.'],1358 e_bad_request: ['Requête invalide.', 'Invalid request.'],1359 qaTestNotSent: ['Mode test : la diffusion est désactivée sur ce serveur. La transaction a été signée mais rien n’a été envoyé au réseau ; elle ne sera jamais confirmée et les soldes ne changeront pas.', 'Test mode: broadcasting is disabled on this server. The transaction was signed but nothing was sent to the network; it will never confirm and balances will not change.'],1360 qaSignedNotSent: ['Signé, non envoyé (test)', 'Signed, not sent (test)'],1361 qaSwExecHere: ['exécutable ici', 'executable here'], qaSwCompareOnly: ['comparaison seulement', 'comparison only'],1362 qaSwOtherRoutes: ['Routes d’autres fournisseurs — comparaison seulement, non exécutables ici', 'Routes of other providers — comparison only, not executable here'],1363 qaSwMoreRoutes: ['Voir les {n} autres routes', 'Show the {n} other routes'], qaSwLessRoutes: ['Réduire la liste', 'Collapse the list'],1364 qaSwProviders1: ['1 fournisseur interrogé en {ms} ms', '1 provider queried in {ms} ms'],1365 qaSwSt_unavailable: ['ne répond pas', 'not answering'], qaSwSt_timeout: ['délai dépassé', 'timed out'], qaSwSt_error: ['erreur', 'error'], qaSwSt_unsupported: ['paire non prise en charge', 'pair not supported'],1366 qaBalUnknown: ['solde indisponible', 'balance unavailable'],1367 qaPegNote: ['« {name} » n’est pas l’émission d’origine de {sym}. Il dépend de son émetteur — {issuer} — et peut décrocher de l’actif qu’il représente.', '“{name}” is not the original issue of {sym}. It depends on its issuer — {issuer} — and can lose its peg to the asset it represents.'],1368 qaIssuerShort: ['émetteur : {issuer}', 'issuer: {issuer}'],1369 qaEntries1: ['entrée', 'entry'], qaDepositShown1: ['Un dépôt apparaît ici une fois confirmé sur la chaîne (1 confirmation pour la finalité).', 'A deposit shows here once confirmed on-chain (1 confirmation for finality).'],1370 qaLimitsSearch: ['Filtrer les limites (actif ou réseau)', 'Filter the limits (asset or network)'], qaLimitsNone: ['Aucune limite ne correspond.', 'No matching limit.'], qaLimitsShown: ['{n} sur {total}', '{n} of {total}'],1371 qaErrNotActivated: ['Ce compte n’est pas encore activé sur ce réseau : il doit d’abord recevoir le dépôt minimal (voir l’écran Recevoir).', 'This account is not activated on this network yet: it must first receive the minimum deposit (see the Receive screen).'],1372 qaBrNeedsApproval: ['Deux transactions seront signées sur le réseau de départ : une autorisation limitée au montant exact de {sym}, puis la destruction. Elle est simulée à nouveau juste avant son envoi.', 'Two transactions will be signed on the source network: an approval limited to the exact amount of {sym}, then the burn. It is simulated again just before it is sent.'],1373 qaSolNotFunded: ['Votre adresse Solana n’a encore jamais reçu de SOL : le compte n’existe pas sur le réseau, aucun échange n’est possible. Recevez d’abord du SOL (écran Recevoir).', 'Your Solana address has never received SOL: the account does not exist on the network yet, no swap is possible. Receive some SOL first (Receive screen).'],1374 qaAgNoGas: ['Passage en réel refusé : le portefeuille de l’agent détient {held} {sym} et la réserve de frais exigée sur {net} est de {need} {sym}. Ajoutez la réserve avec « Financer l’agent », puis recommencez.', 'Going live is refused: the agent’s wallet holds {held} {sym} and the fee reserve required on {net} is {need} {sym}. Add the reserve with “Fund the agent”, then try again.'],1375 qaOrderTarget: ['cible {pct} %', 'target {pct} %'],1376 qaPaperVaultNote: ['Simulation en cours : les soldes ci-dessous sont les fonds RÉELS du portefeuille de l’agent sur le réseau. Les ordres simulés n’y touchent pas et ne créent aucun solde : ils figurent dans « Ordres » (marqués « simulation ») et dans la courbe de valeur.', 'Paper trading: the balances below are the REAL funds of the agent’s wallet on the network. Simulated orders do not touch them and create no balance: they are listed under “Orders” (marked “paper”) and in the value curve.'],1377 // ── end of qa* ──1378 // --- native cross-chain swaps through THORChain (v6) ---1379 xsReview: ['Vérifier l’échange inter-chaînes', 'Review the cross-chain swap'], xsTracking: ['Échange inter-chaînes', 'Cross-chain swap'], xsProgress: ['Progression de l’échange', 'Swap progress'],1380 xsRoute: ['Trajet', 'Route'], xsOutboundFee: ['Frais de sortie THORChain', 'THORChain outbound fee'], xsTime: ['Durée estimée', 'Estimated time'], xsRefunded: ['Remboursé', 'Refunded'],1381 xsVault: ['Adresse du coffre THORChain qui reçoit vos fonds', 'THORChain vault address that receives your funds'], xsMemo: ['Mémo (instruction lue par THORChain)', 'Memo (the instruction THORChain reads)'],1382 xsVaultBy: ['Confirmée comme coffre actif par {n} opérateurs indépendants ({ops}) ; clé partagée entre {members} nœuds. Le signataire refait cette vérification lui-même avant de signer.', 'Confirmed as an active vault by {n} independent operators ({ops}); key shared between {members} nodes. The signer repeats this check itself before signing.'],1383 xsGuarantee: ['Le signataire construit lui-même la transaction et le mémo : la sortie ne peut aller qu’à votre propre adresse sur {to}, pour au moins le minimum affiché, sinon THORChain rembourse à votre adresse d’origine. Aucun affilié, aucun échange fractionné.', 'The signer builds the transaction and the memo itself: the output can only go to your own address on {to}, for at least the minimum shown, otherwise THORChain refunds your source address. No affiliate, no streaming swap.'],1384 xsTrust: ['Ce qui reste à croire : l’adresse du coffre ne peut pas être prouvée hors ligne. Elle est confirmée par {n} opérateurs THORNode indépendants, interrogés aussi directement par le signataire. Si tous étaient compromis en même temps, ou si THORChain lui-même faillissait, ce montant pourrait être perdu. Le risque est borné par vos plafonds par transfert et par jour.', 'What remains trusted: the vault address cannot be proven offline. It is confirmed by {n} independent THORNode operators, also asked directly by the signer. If all of them were compromised at once, or if THORChain itself failed, this amount could be lost. The risk is bounded by your per-transfer and daily limits.'],1385 xsRefundRule: ['Si l’échange échoue, THORChain renvoie vos fonds sur {from}, moins ses frais de sortie. Un remboursement est affiché comme tel, jamais comme une réussite.', 'If the swap fails, THORChain returns your funds on {from}, less its outbound fee. A refund is shown as such, never as a success.'],1386 xsIrreversible: ['Une fois envoyée, la transaction ne peut être ni annulée ni remplacée.', 'Once sent, the transaction can be neither cancelled nor replaced.'],1387 xsStage_review: ['À vérifier', 'To review'], xsStage_sending: ['Envoi', 'Sending'], xsStage_sent: ['Envoyé', 'Sent'], xsStage_observed: ['Échange en cours', 'Swapping'], xsStage_outbound: ['Sortie envoyée', 'Outbound sent'],1388 xsStage_received: ['Reçu', 'Received'], xsStage_refunded: ['Remboursé', 'Refunded'], xsStage_failed: ['Échec', 'Failed'],1389 xsStep_sent: ['Fonds envoyés au coffre', 'Funds sent to the vault'], xsStep_observed: ['Dépôt observé par THORChain', 'Deposit observed by THORChain'], xsStep_outbound: ['Transaction de sortie signée par THORChain', 'Outbound transaction signed by THORChain'],1390 xsStep_received: ['Reçu sur {net}, vu par le portefeuille', 'Received on {net}, seen by the wallet'], xsStep_refunded: ['Remboursement reçu, vu par le portefeuille', 'Refund received, seen by the wallet'],1391 xsWait: ['Durée habituelle : environ {time}. Vous pouvez fermer cette fenêtre : le suivi continue.', 'Usual duration: about {time}. You can close this window: tracking continues.'],1392 xsRefresh: ['Vérifier maintenant', 'Check now'], xsViewOut: ['Voir la transaction reçue sur {net}', 'View the transaction received on {net}'], xsViewRefund: ['Voir le remboursement', 'View the refund'],1393 xsRefundedNote: ['L’échange n’a pas eu lieu. THORChain a remboursé {amount} {sym} à votre adresse d’origine (moins ses frais).', 'The swap did not happen. THORChain refunded {amount} {sym} to your source address (less its fees).'],1394 xsRefundPlanned: ['THORChain annonce un remboursement plutôt qu’un échange.', 'THORChain announces a refund instead of a swap.'],1395 xsHold_vault_churned: ['Le coffre n’est plus confirmé comme actif alors que la transaction n’est pas encore confirmée.', 'The vault is no longer confirmed as active while the transaction is not confirmed yet.'],1396 xsHold_not_observed: ['THORChain n’a pas encore signalé ce dépôt.', 'THORChain has not reported this deposit yet.'], xsHold_outbound_late: ['La transaction de sortie tarde.', 'The outbound transaction is late.'],1397 xsHold_outbound_not_seen: ['Le portefeuille ne voit pas encore la transaction de sortie annoncée.', 'The wallet does not see the announced outbound transaction yet.'],1398 xsHold_outbound_mismatch: ['La transaction annoncée ne paie pas ce portefeuille comme prévu : elle n’est pas comptée comme reçue.', 'The announced transaction does not pay this wallet as expected: it is not counted as received.'],1399 xsHold_below_minimum: ['Le montant reçu est inférieur au minimum approuvé.', 'The amount received is below the approved minimum.'],1400 e_vault_unconfirmed: ['Le coffre THORChain n’a pas été confirmé par assez d’opérateurs indépendants. Rien n’a été signé ; réessayez dans un instant.', 'The THORChain vault was not confirmed by enough independent operators. Nothing was signed; try again in a moment.'],1401 e_signer_vault_unconfirmed: ['Le signataire n’a pas pu confirmer lui-même le coffre THORChain. Rien n’a été signé.', 'The signer could not confirm the THORChain vault itself. Nothing was signed.'],1402 e_vault_evidence: ['L’adresse annoncée comme coffre ne ressemble pas à un coffre THORChain sur la chaîne. Échange refusé.', 'The address announced as vault does not look like a THORChain vault on-chain. Swap refused.'],1403 e_quotes_disagree: ['Les opérateurs THORNode ne s’accordent pas sur le prix. Réessayez dans un instant.', 'THORNode operators disagree on the price. Try again in a moment.'],1404 e_below_minimum: ['Montant inférieur au minimum de THORChain pour cet échange.', 'Amount below THORChain’s minimum for this swap.'],1405 e_amount_would_stream: ['THORChain fractionnerait ce montant ; ce portefeuille ne le fait pas.', 'THORChain would split this amount; this wallet does not do that.'],1406 e_xswap_not_enabled: ['Cette paire ne peut pas être échangée par THORChain dans ce portefeuille.', 'This pair cannot be swapped through THORChain in this wallet.'],1407 e_chain_halted: ['THORChain signale cette chaîne à l’arrêt ou en pause.', 'THORChain reports this chain halted or paused.'],1408 e_pool_unavailable: ['Le bassin THORChain de cet actif n’est pas disponible.', 'The THORChain pool of this asset is not available.'], e_pool_ambiguous: ['Le mémo pourrait désigner un autre bassin : échange refusé.', 'The memo could designate another pool: swap refused.'],1409 // ---- v6-alerts: alerts (al*) and system status (mo*) — one contiguous block; the wording of each alert kind lives in packages/core/src/alert-catalog.ts1410 alTitle: ['Alertes', 'Alerts'], alBell: ['Alertes', 'Alerts'], alTabList: ['Alertes', 'Alerts'], alTabSettings: ['Réglages', 'Settings'],1411 alSevCritical: ['Critique', 'Critical'], alSevWarning: ['Attention', 'Warning'], alSevInfo: ['Info', 'Info'],1412 alGroup_transfers: ['Transferts', 'Transfers'], alGroup_agents: ['Agents', 'Agents'], alGroup_derivatives: ['Dérivés', 'Derivatives'], alGroup_security: ['Sécurité', 'Security'], alGroup_system: ['Système', 'System'],1413 alFilterSeverity: ['Filtrer par gravité', 'Filter by severity'], alFilterKind: ['Filtrer par domaine', 'Filter by area'], alAll: ['Toutes', 'All'], alAllKinds: ['Tous les domaines', 'All areas'],1414 alUnreadCount: ['{n} non lue(s)', '{n} unread'], alUnread: ['non lue', 'unread'], alMarkAll: ['Tout marquer comme lu', 'Mark all as read'], alEmpty: ['Aucune alerte.', 'No alerts.'], alMore: ['Afficher plus', 'Show more'],1415 alDeliveryQuiet: ['non notifiée (heures calmes)', 'not notified (quiet hours)'], alDeliveryCapped: ['non notifiée (plafond horaire)', 'not notified (hourly cap)'],1416 alPrivacy: ['Confidentialité', 'Privacy'], alShowDetails: ['Afficher les détails dans les notifications', 'Show details in notifications'],1417 alShowDetailsHint: ['Désactivé : aucun montant, prix, adresse ni motif sur l’écran verrouillé. Les détails restent visibles ici, dans l’application.', 'Off: no amount, price, address or reason on the lock screen. Details remain visible here, in the app.'],1418 alPreview: ['Aperçu d’une notification', 'Notification preview'],1419 alQuiet: ['Heures calmes et plafond', 'Quiet hours and cap'], alQuietOn: ['Heures calmes', 'Quiet hours'],1420 alQuietHint: ['Pendant cette plage, seules les alertes critiques sont envoyées ; les autres restent dans l’application.', 'During this window only critical alerts are sent; the others stay in the app.'],1421 alQuietFrom: ['De', 'From'], alQuietTo: ['À', 'To'], alTimezone: ['Fuseau horaire (ex. America/Toronto)', 'Time zone (e.g. America/Toronto)'],1422 alCap: ['Notifications par heure, au plus', 'Notifications per hour, at most'], alCapHint: ['Au-delà, un seul résumé « N autres alertes ». Les critiques passent toujours.', 'Beyond it, one “N more alerts” summary. Criticals always pass.'],1423 alRules: ['Règles d’alerte', 'Alert rules'], alRulesHint: ['Chaque règle peut être coupée. Une règle coupée ne produit plus rien, ni ici ni sur le téléphone.', 'Each rule can be switched off. A rule that is off produces nothing, neither here nor on the phone.'],1424 alThresholds: ['Seuils', 'Thresholds'],1425 alTh_stuckMinutes: ['Transfert ou échange en attente (min)', 'Transfer or swap pending (min)'], alTh_bridgeStuckMinutes: ['Transfert inter-réseaux en attente (min)', 'Bridge transfer pending (min)'],1426 alTh_agentDigestMinutes: ['Ordres d’agent : une notification par agent toutes les (min, 0 = chaque ordre)', 'Agent orders: one notification per agent every (min, 0 = each order)'],1427 alTh_staleBars: ['Agent sans décision depuis (barres)', 'Agent without a decision for (bars)'], alTh_signalFailures: ['Signaux invalides de suite', 'Invalid signals in a row'],1428 alTh_fundingUsd: ['Paiement de financement à partir de (USD)', 'Funding payment from (USD)'], alTh_feedDebounceSec: ['Source indisponible depuis (s)', 'Source unavailable for (s)'],1429 alTh_diskFreePct: ['Espace disque libre sous (%)', 'Free disk space below (%)'], alTh_backupHours: ['Sauvegarde absente depuis (h)', 'Backup missing for (h)'],1430 alPush: ['Notifications sur cet appareil', 'Notifications on this device'], alPushEnable: ['Activer les notifications', 'Turn on notifications'], alPushOn: ['Notifications activées sur cet appareil', 'Notifications are on for this device'],1431 alPushEnabled: ['Notifications activées. Envoyez une notification de test pour vérifier.', 'Notifications are on. Send a test notification to check.'],1432 alPushOffHint: ['Recevez les alertes sur cet appareil sans ouvrir l’application.', 'Receive alerts on this device without opening the app.'],1433 alPushUnsupported: ['Ce navigateur ne prend pas en charge les notifications push.', 'This browser does not support push notifications.'],1434 alPushDenied: ['Les notifications sont bloquées pour ce site. Autorisez-les dans les réglages du navigateur (sur iPhone : Réglages → Notifications → SP Wallet), puis revenez ici.', 'Notifications are blocked for this site. Allow them in the browser settings (on iPhone: Settings → Notifications → SP Wallet), then come back here.'],1435 alPushFailed: ['L’activation a échoué.', 'Could not turn notifications on.'],1436 alIosTitle: ['Sur iPhone, les notifications exigent l’application installée sur l’écran d’accueil.', 'On iPhone, notifications require the app installed on the Home Screen.'],1437 alIos1: ['Ouvrez wallet.spboucher.ai dans Safari.', 'Open wallet.spboucher.ai in Safari.'], alIos2: ['Touchez Partager, puis « Sur l’écran d’accueil ».', 'Tap Share, then “Add to Home Screen”.'],1438 alIos3: ['Ouvrez SP Wallet depuis sa nouvelle icône et déverrouillez.', 'Open SP Wallet from its new icon and unlock.'], alIos4: ['Revenez à Alertes → Réglages et touchez « Activer les notifications ».', 'Come back to Alerts → Settings and tap “Turn on notifications”.'],1439 alIosNote: ['iOS 16.4 ou plus récent. Dans un onglet Safari ordinaire, iOS ne permet pas les notifications.', 'iOS 16.4 or later. In an ordinary Safari tab, iOS does not allow notifications.'],1440 alDeviceLabel: ['Nom de cet appareil', 'Name of this device'], alThisDevice: ['cet appareil', 'this device'], alLastOk: ['dernier envoi', 'last sent'], alNeverSent: ['aucun envoi', 'nothing sent yet'], alFailures: ['{n} échec(s)', '{n} failure(s)'],1441 alTest: ['Tester', 'Send a test'], alRemove: ['Retirer', 'Remove'], alTestSent: ['Notification de test envoyée ({n}).', 'Test notification sent ({n}).'],1442 alTestExpired: ['L’abonnement de cet appareil avait expiré : il a été retiré. Réactivez les notifications sur l’appareil.', 'This device’s subscription had expired: it was removed. Turn notifications on again on the device.'], alTestFailed: ['L’envoi a échoué :', 'Sending failed:'],1443 alPushNote: ['Le contenu est chiffré pour cet appareil : le service de notifications (Apple, Google, Mozilla) ne peut pas le lire. Il voit qu’une notification est envoyée, et quand.', 'The content is encrypted for this device: the notification service (Apple, Google, Mozilla) cannot read it. It sees that a notification is sent, and when.'],1444 alWebhook: ['Webhook sortant (facultatif)', 'Outgoing webhook (optional)'],1445 alWebhookHint: ['Désactivé par défaut. Envoie chaque alerte à une adresse HTTPS de votre choix (ntfy, Slack, votre grappe), signée par un secret partagé. Le destinataire est un tiers : il reçoit exactement ce qui est montré ci-dessous.', 'Off by default. Sends every alert to an HTTPS address you choose (ntfy, Slack, your own cluster), signed with a shared secret. The receiver is a third party: it gets exactly what is shown below.'],1446 alWebhookUrl: ['Adresse (https://…)', 'URL (https://…)'], alWebhookSecret: ['Secret partagé', 'Shared secret'], alWebhookSecretSet: ['Défini (jamais réaffiché)', 'Set (never shown again)'], alWebhookSecretNone: ['Non défini', 'Not set'],1447 alWebhookGenerate: ['Générer', 'Generate'], alWebhookRotate: ['Remplacer', 'Replace'], alWebhookSecretOnce: ['Copiez ce secret maintenant : il ne sera plus affiché.', 'Copy this secret now: it will not be shown again.'],1448 alWebhookDetails: ['Inclure les détails', 'Include details'], alWebhookDetailsHint: ['Activé : montants, symboles et motifs sont envoyés au destinataire. Désactivé : seulement le type d’alerte, le réseau, les noms et les compteurs.', 'On: amounts, symbols and reasons are sent to the receiver. Off: only the alert kind, the network, names and counters.'],1449 alWebhookSample: ['Ce qui est envoyé (exemple, avec le réglage actuel)', 'What is sent (example, with the present setting)'], alWebhookOn: ['Activer le webhook', 'Turn the webhook on'], alWebhookOnHint: ['Exige une adresse https et un secret.', 'Requires an https URL and a secret.'],1450 alWebhookTest: ['Envoyer un appel de test', 'Send a test call'], alWebhookTestOk: ['Le destinataire a répondu.', 'The receiver answered.'], alWebhookTestKo: ['Échec :', 'Failed:'],1451 moTitle: ['État du système', 'System status'], moReal: ['réel', 'real'], moSimulated: ['simulé', 'simulated'], moUnknown: ['non mesuré', 'not measured'], moOk: ['OK', 'OK'], moDown: ['en panne', 'down'],1452 moAllOk: ['Tout ce qui est mesuré répond ({n} sources).', 'Everything measured is answering ({n} sources).'], moSomeDown: ['Sources en panne :', 'Sources down:'], moAuditBroken: ['Journal d’audit altéré.', 'Audit chain broken.'],1453 moCapital: ['Capital', 'Capital'], moCapitalNote: ['Trois choses différentes, jamais additionnées : le portefeuille (sur les chaînes), les coffres d’agents et les comptes de dérivés. Le simulé n’est pas de l’argent.', 'Three different things, never added together: the wallet (on chain), agent vaults and derivatives accounts. Simulated figures are not money.'],1454 moWallet: ['Portefeuille', 'Wallet'], moWalletSub: ['{n} actif(s) détenus', '{n} asset(s) held'], moUnpriced: ['{n} sans prix', '{n} without a price'], moUnavailable: ['{n} solde(s) illisible(s)', '{n} balance(s) unreadable'],1455 moAgentVaults: ['Coffres d’agents', 'Agent vaults'], moAgentVaultsSub: ['Agents en mode réel, dernier relevé', 'Agents trading live, last snapshot'],1456 moDerivVenue: ['Comptes de dérivés', 'Derivatives accounts'], moDerivVenueSub: ['Sur plateforme (mainnet), fonds propres', 'On a venue (mainnet), equity'],1457 moAgentsPaper: ['Agents en simulation', 'Paper agents'], moDerivPaper: ['Comptes papier de dérivés', 'Derivatives paper accounts'], moDerivTestnet: ['Comptes testnet (fonds de test)', 'Testnet accounts (test funds)'],1458 moOpenPositions: ['positions ouvertes', 'open positions'], moOpenOrders: ['ordres ouverts', 'open orders'], moAgentsActive: ['agents actifs', 'active agents'], moAgentsStopped: ['agents arrêtés', 'stopped agents'],1459 moAccounts: ['Agents et comptes', 'Agents and accounts'], moAgent: ['Agent', 'Agent'], moDerivAccount: ['Dérivés', 'Derivatives'], moLastBar: ['dernière barre', 'last bar'], moAllocated: ['alloué', 'allocated'],1460 moPositionsShort: ['pos.', 'pos.'], moOrdersShort: ['ordres', 'orders'], moHalted: ['à l’arrêt', 'halted'], moDivergence: ['écart avec la plateforme', 'diverges from the venue'],1461 moPnl: ['Résultat (PnL)', 'PnL'], moAccount: ['Compte', 'Account'], moToday: ['Auj.', 'Today'], mo7d: ['7 j', '7 d'], mo30d: ['30 j', '30 d'], moNoSeries: ['Aucun relevé de fonds propres pour l’instant.', 'No equity snapshot yet.'],1462 moPnlNote: ['Différence entre relevés de fonds propres enregistrés, en USD. Un dépôt ou un retrait dans la période est compté comme un résultat.', 'Difference between stored equity snapshots, in USD. A deposit or a withdrawal inside the period counts as PnL.'],1463 moPartial: ['Période incomplète', 'Incomplete period'], moPartialNote: ['* la série commence dans la période : le chiffre couvre moins que la période.', '* the series starts inside the period: the figure covers less than the period.'],1464 moExposure: ['Expositions par actif', 'Exposure per asset'], moAsset: ['Actif', 'Asset'], moSpot: ['Comptant', 'Spot'], moPerp: ['Perp. net', 'Perp net'], moNet: ['Net', 'Net'], moGross: ['Brut', 'Gross'],1465 moNoExposure: ['Aucune exposition.', 'No exposure.'], moUnpricedRow: ['Prix manquant pour une partie', 'Price missing for a part'],1466 moExposureNote: ['Le comptant (agents) et les contrats perpétuels ne sont pas le même instrument : un perpétuel a une marge, un financement et un prix de liquidation. Le net indique une direction, pas une couverture. Les positions des comptes sur plateforme sont déduites des exécutions enregistrées.', 'Spot (agents) and perpetual contracts are not the same instrument: a perpetual has margin, funding and a liquidation price. Net shows a direction, not a hedge. Positions of venue accounts are derived from the recorded fills.'],1467 moConnectors: ['Connecteurs', 'Connectors'], moLastSuccess: ['dernier succès il y a', 'last success'], moNDown: ['{n} en panne', '{n} down'],1468 moGroup_signer: ['Signataire', 'Signer'], moGroup_database: ['Base de données', 'Database'], moGroup_rpc: ['Réseaux (RPC)', 'Networks (RPC)'], moGroup_market: ['Données de marché', 'Market data'],1469 moGroup_venue: ['Plateformes de dérivés', 'Derivatives venues'], moGroup_swap: ['Fournisseurs d’échange', 'Swap providers'], moGroup_bridge: ['Attestation Circle', 'Circle attestation'],1470 moSystem: ['Tâches de fond et système', 'Background tasks and system'], moNoLoops: ['Aucune tâche de fond dans ce processus.', 'No background task in this process.'], moEvery: ['toutes les', 'every'],1471 moNFailures: ['{n} échec(s) de suite', '{n} failure(s) in a row'], moLate: ['en retard', 'late'], moLoopsNote: ['Le moteur des agents tourne sur sa propre minuterie : voir la dernière barre de chaque agent ci-dessus.', 'The agent engine runs on its own timer: see each agent’s last bar above.'],1472 moBackup: ['Dernière sauvegarde', 'Last backup'], moBackupInvisible: ['dossier non visible par l’API', 'directory not visible to the API'], moBackupNone: ['aucune', 'none'], moDisk: ['Disque libre', 'Free disk'],1473 moAudit: ['Journal d’audit', 'Audit chain'], moAuditOk: ['intact ({n} événements)', 'intact ({n} events)'], moSigner: ['Signataire', 'Signer'], moApiVersion: ['Version de l’API', 'API version'], moStarted: ['Démarrée le', 'Started'], moSignerKey: ['Clé du signataire', 'Signer key'],1474 // ---- end v6-alerts1475 // >>> v7 perp live — ONE contiguous block, every key prefixed `pl`: the real mode of a perp agent (go-live checklist, mandate review, LIVE page, refusals). Keep additions inside it.1476 plTitle: ['Mode réel', 'Real mode'], plIntro: ['Hors simulation, la stratégie approuvée place ses ordres sur un compte Hyperliquid (testnet : argent fictif ; réseau principal : argent réel), sans votre clé d’accès à chaque ordre, à l’intérieur de limites que le signataire isolé applique lui-même. Quatre conditions, dans l’ordre.',1477 'Out of simulation, the approved strategy places its orders on a Hyperliquid account (testnet: play money; mainnet: real money), without your passkey for each order, inside limits the isolated signer enforces by itself. Four conditions, in order.'],1478 plUnavailable: ['La négociation hors simulation n’est pas offerte par ce serveur.', 'Trading out of simulation is not offered by this server.'],1479 plStepStrategy: ['Stratégie approuvée', 'Strategy approved'], plStepAccount: ['Compte de la plateforme autorisé', 'Venue account authorised'], plStepFunded: ['Compte alimenté', 'Account funded'], plStepMandate: ['Mandat approuvé', 'Mandate approved'],1480 plStepDone: ['Fait', 'Done'], plStepNext: ['Prochaine étape', 'Next step'], plStepLater: ['Ensuite', 'Later'], plStepLocked: ['Verrouillé', 'Locked'],1481 plStrategyOk: ['{name} v{version} — son empreinte sera inscrite dans le mandat : sha256 {sha}', '{name} v{version} — its hash will be written into the mandate: sha256 {sha}'],1482 plStrategyNo: ['Aucune version de stratégie n’est approuvée. Testez-en une puis approuvez-la, plus bas sur cette page.', 'No strategy version is approved. Backtest one, then approve it, further down this page.'],1483 plGoStrategy: ['Choisir et approuver une stratégie', 'Choose and approve a strategy'],1484 plAccountPick: ['Compte de la plateforme', 'Venue account'],1485 plAccountOk: ['{label} — autorisation manuelle en vigueur jusqu’au {date}.', '{label} — manual authorisation in force until {date}.'],1486 plAcc_no_account: ['Aucun compte de la plateforme n’existe encore. Créez le compte testnet puis autorisez-le avec votre clé d’accès dans Futures → Comptes.', 'No venue account exists yet. Create the testnet account, then authorise it with your passkey in Futures → Accounts.'],1487 plAcc_read_only: ['Ce compte est en lecture seule. Autorisez la négociation avec votre clé d’accès dans Futures → Comptes : le mandat de l’agent s’appuie sur cette autorisation.', 'This account is read-only. Authorise trading with your passkey in Futures → Accounts: the agent’s mandate rests on that authorisation.'],1488 plAcc_authorization_expired: ['L’autorisation de ce compte a expiré. Approuvez-en une nouvelle dans Futures → Comptes.', 'The authorisation of this account has expired. Approve a new one in Futures → Accounts.'],1489 plAcc_authorization_too_short: ['L’autorisation expire dans moins de 48 heures. Un mandat doit finir au moins 24 heures avant elle, pour que les positions puissent être fermées pendant la période de liquidation. Révoquez-la et approuvez-en une plus longue dans Futures → Comptes.',1490 'The authorisation expires in less than 48 hours. A mandate must end at least 24 hours before it, so that positions can be closed during the wind-down. Revoke it and approve a longer one in Futures → Accounts.'],1491 plAcc_instruments_not_allowed: ['L’autorisation de ce compte ne permet pas {list}. Révoquez-la et approuvez-en une qui inclut les marchés de l’agent, dans Futures → Comptes.', 'The authorisation of this account does not allow {list}. Revoke it and approve one that includes the agent’s markets, in Futures → Accounts.'],1492 plAcc_instruments_not_pinned: ['{list} : hors de la table d’actifs épinglée dans le portefeuille et le signataire. Un agent hors simulation ne peut négocier que les marchés épinglés.', '{list}: outside the asset table pinned in the wallet and the signer. A live agent can only trade pinned markets.'],1493 plAcc_used_by_other_agent: ['Un autre agent négocie déjà ce compte. Un seul agent par compte de la plateforme.', 'Another agent already trades this account. One agent per venue account.'],1494 plAcc_mainnet_disabled: ['Le réseau principal est fermé sur ce serveur (réglage du serveur).', 'Mainnet is closed on this server (server setting).'],1495 plAcc_account_not_flat: ['Ce compte porte déjà des positions ou des ordres en attente. Un agent démarre sur un compte à plat : fermez les positions et annulez les ordres dans le terminal Futures, avec votre clé d’accès.', 'This account already holds positions or resting orders. An agent starts on a flat account: close the positions and cancel the orders in the Futures terminal, with your passkey.'],1496 plAcc_mandate_exists: ['Un mandat est déjà en vigueur sur ce compte. Révoquez-le dans Futures → Comptes (ou arrêtez l’agent qui l’utilise) avant d’en préparer un autre.', 'A mandate is already in force on this account. Revoke it in Futures → Accounts (or stop the agent using it) before preparing another.'],1497 plFund_no_account: ['Aucun compte de la plateforme : rien à alimenter pour l’instant.', 'No venue account: nothing to fund yet.'],1498 plAcc_venue_unreadable: ['Le compte n’a pas pu être lu sur la plateforme : son état est inconnu. Réessayez dans un instant.', 'The account could not be read on the venue: its state is unknown. Try again in a moment.'],1499 plGoAccounts: ['Ouvrir Futures → Comptes', 'Open Futures → Accounts'],1500 plFundedOk: ['Valeur du compte : {equity} USDC (minimum pour cet agent : {min} USDC).', 'Account value: {equity} USDC (minimum for this agent: {min} USDC).'],1501 plFund_unfunded: ['Ce compte n’a jamais reçu de dépôt. La plateforme refuse toute action d’un tel compte (« Must deposit before performing actions ») : l’autorisation elle-même échoue. Alimentez-le d’abord.',1502 'This account never received a deposit. The venue refuses every action of such an account (“Must deposit before performing actions”): the authorisation itself fails. Fund it first.'],1503 plFund_below_minimum: ['Valeur du compte : {equity} USDC. Il en faut au moins {min} pour cet agent.', 'Account value: {equity} USDC. This agent needs at least {min}.'],1504 plFund_venue_unreadable: ['La valeur du compte n’a pas pu être lue sur la plateforme.', 'The account value could not be read on the venue.'],1505 plFundWhy: ['Pourquoi {min} USDC : l’ordre minimal de la plateforme est de 10 USD (10,50 avec la marge de l’agent) ; pour pouvoir ajuster une position en {n} ordres sur chacun des marchés ({markets}) avec une exposition brute de {gross} × le capital, il faut {min} USDC — et jamais moins de 50.',1506 'Why {min} USDC: the venue’s minimum order is 10 USD (10.50 with the agent’s margin); to adjust a position in {n} orders on each market ({markets}) with a gross exposure of {gross} × the capital, {min} USDC are needed — and never less than 50.'],1507 plGoFund: ['Voir comment alimenter le compte', 'See how to fund the account'],1508 plFundTestnetNote: ['Sur le testnet, l’argent est fictif : il vient du robinet de Hyperliquid, pas de votre portefeuille.', 'On the testnet the money is play money: it comes from Hyperliquid’s faucet, not from your wallet.'],1509 plMandateTodo: ['Le mandat fixe ce que l’agent peut faire sans votre clé d’accès. Ses limites sont calculées à partir des limites de l’agent ; vous les relisez, puis une seule demande de clé d’accès.',1510 'The mandate sets what the agent may do without your passkey. Its limits are computed from the agent’s limits; you review them, then one passkey prompt.'],1511 plMandateActive: ['Mandat en vigueur jusqu’au {date}.', 'Mandate in force until {date}.'],1512 plGoMandate: ['Préparer le mandat…', 'Prepare the mandate…'],1513 plLockTitle: ['Négociation autonome sur le réseau principal : fermée par un réglage du serveur', 'Autonomous trading on mainnet: closed by a server setting'],1514 plLockBody: ['Ce n’est pas un interrupteur de cette application. Seul l’administrateur du serveur peut l’ouvrir, en changeant sa configuration ; rien ici ne le fait. Le compte testnet fonctionne.',1515 'This is not a switch of this application. Only the server’s administrator can open it, by changing its configuration; nothing here does. The testnet account works.'],1516 plLockSays: ['Le serveur dit :', 'The server says:'],1517 plNetTestnet: ['testnet — argent fictif', 'testnet — play money'], plNetMainnet: ['réseau principal — ARGENT RÉEL', 'mainnet — REAL MONEY'],1518 plBandLive: ['Agent en marche sur ce compte : ses ordres partent sans votre clé d’accès, dans les limites du mandat.', 'Agent live on this account: its orders leave without your passkey, within the mandate’s limits.'],1519 plBandEnded: ['Cet agent a négocié ce compte ; il n’y place plus d’ordre.', 'This agent traded this account; it no longer places orders on it.'],1520 // the mandate sheet1521 plShTitle: ['Mandat de l’agent', 'Agent mandate'], plShCapital: ['Capital de référence', 'Reference capital'],1522 plShCapitalIs: ['{capital} USDC — la valeur du compte de la plateforme au moment de la préparation. Les limites du mandat et le plancher de valeur en découlent ; ce montant ne se choisit pas ici.', '{capital} USDC — the venue account’s value when the mandate is prepared. The mandate’s limits and the value floor follow from it; this amount is not chosen here.'],1523 plShCapitalHint: ['Au plus la valeur du compte ({equity} USDC). Les limites du mandat et le plancher de valeur en découlent.', 'At most the account value ({equity} USDC). The mandate’s limits and the value floor follow from it.'],1524 plShDays: ['Durée du mandat', 'Mandate duration'], plShDaysHint: ['1 à {max} jours : 30 au plus, et il doit finir au moins 24 h avant l’autorisation du compte.', '1 to {max} days: 30 at most, and it must end at least 24 h before the account’s authorisation.'],1525 plShDaysUnit: ['jours', 'days'], plShContinue: ['Voir le mandat', 'Review the mandate'], plShPreparing: ['Préparation du mandat…', 'Preparing the mandate…'],1526 plShBadCapital: ['Le capital doit être un montant entre {min} et {equity} USDC.', 'The capital must be an amount between {min} and {equity} USDC.'], plShBadDays: ['La durée doit être de 1 à {max} jours.', 'The duration must be 1 to {max} days.'],1527 plShWarning: ['À lire avant d’approuver', 'Read before approving'],1528 plShLimits: ['Ce que le mandat permet', 'What the mandate allows'], plShAccount: ['Compte', 'Account'], plShNetwork: ['Réseau', 'Network'], plShAgent: ['Agent', 'Agent'], plShStrategy: ['Stratégie (empreinte inscrite)', 'Strategy (pinned hash)'],1529 plShInstrument: ['{symbol} : levier max. / position max.', '{symbol}: max leverage / max position'], plShOrder: ['Valeur max. par ordre', 'Max value per order'], plShGross: ['Exposition brute max.', 'Max gross exposure'],1530 plShPerDay: ['Ordres par jour (qui ajoutent de l’exposition)', 'Orders per day (that add exposure)'], plShPerHour: ['Ordres par heure', 'Orders per hour'], plShTurnover: ['Volume quotidien max.', 'Max daily turnover'],1531 plShFloor: ['Plancher de valeur du compte', 'Account value floor'], plShFloorNote: ['Sous ce plancher, le signataire ne signe plus que des annulations et des ordres en réduction seule.', 'Below this floor the signer only signs cancels and reduce-only orders.'],1532 plShBand: ['Bande de prix', 'Price band'], plShExpires: ['Expire le', 'Expires'], plShAuthExpires: ['Autorisation du compte : expire le', 'Account authorisation: expires'],1533 plShDerived: ['D’où viennent ces limites', 'Where these limits come from'],1534 plD_instruments: ['les marchés de l’agent', 'the agent’s markets'], plD_maxLeverage: ['le levier maximal de l’agent, jamais au-dessus de celui de l’autorisation', 'the agent’s maximum leverage, never above the authorisation’s'],1535 plD_maxPositionNotional: ['position maximale de l’agent × le capital confié', 'the agent’s maximum position × the entrusted capital'], plD_maxOrderNotional: ['la limite de position : un seul ordre peut fermer toute une position', 'the position limit: one order can close a whole position'],1536 plD_maxGrossExposure: ['exposition brute maximale de l’agent × le capital confié', 'the agent’s maximum gross exposure × the entrusted capital'], plD_maxDailyTurnover: ['un multiple de l’exposition brute, par jour UTC', 'a multiple of the gross exposure, per UTC day'],1537 plD_floorEquity: ['le capital confié moins la limite de perte totale de l’agent', 'the entrusted capital less the agent’s total-loss limit'], plD_maxOrdersPerDay: ['le nombre de barres par jour et de marchés', 'the number of bars per day and of markets'],1538 plD_maxOrdersPerHour: ['le nombre de marchés et de barres par heure', 'the number of markets and of bars per hour'], plD_maxPriceDeviationBps: ['la bande de prix de l’autorisation du compte', 'the price band of the account’s authorisation'],1539 plD_days: ['30 jours au plus, fin au moins 24 h avant l’autorisation', '30 days at most, ending at least 24 h before the authorisation'],1540 plShTighter: ['Certaines limites sont plus basses que celles de l’agent : l’autorisation du compte est plus stricte, et un mandat ne peut jamais la dépasser.', 'Some limits are lower than the agent’s own: the account’s authorisation is tighter, and a mandate can never exceed it.'],1541 plShEnforced: ['Ce que le signataire applique lui-même, à chaque ordre', 'What the signer enforces by itself, on every order'], plShTrusted: ['Ce à quoi le signataire se fie', 'What the signer trusts'], plShNotEnforced: ['Ce qui n’est PAS garanti', 'What is NOT guaranteed'],1542 plShWindDown: ['Arrêt et période de liquidation', 'Stopping and the wind-down'], plShSigned: ['Ce que signe votre clé d’accès', 'What your passkey signs'],1543 plShAckSigned: ['L’empreinte de ce texte fait partie du mandat que signe votre clé d’accès.', 'The hash of this text is part of the mandate your passkey signs.'],1544 plShApproveTestnet: ['Approuver le mandat avec la clé d’accès (testnet)', 'Approve the mandate with the passkey (testnet)'], plShApproveReal: ['Approuver le mandat avec la clé d’accès — ARGENT RÉEL', 'Approve the mandate with the passkey — REAL MONEY'],1545 plShOne: ['Une seule demande de clé d’accès. Ensuite, les ordres de l’agent partent sans elle, dans ces limites.', 'One passkey prompt. After it, the agent’s orders leave without it, inside these limits.'],1546 plShBack: ['Modifier le capital ou la durée', 'Change the capital or the duration'], plShSending: ['Le signataire vérifie votre approbation…', 'The signer is checking your approval…'],1547 plShDone: ['Mandat approuvé. L’agent négocie maintenant ce compte.', 'Mandate approved. The agent is live on this account.'],1548 plShInt_agent: ['Le mandat préparé ne nomme pas cet agent. Rien ne peut être approuvé.', 'The prepared mandate does not name this agent. Nothing can be approved.'],1549 plShInt_strategy: ['Le mandat préparé ne porte pas l’empreinte de la stratégie approuvée. Rien ne peut être approuvé.', 'The prepared mandate does not carry the approved strategy’s hash. Nothing can be approved.'],1550 plShInt_network: ['Le mandat préparé vise un autre réseau que le compte choisi. Rien ne peut être approuvé.', 'The prepared mandate targets another network than the chosen account. Nothing can be approved.'],1551 plShInt_ack: ['Le texte affiché ne correspond pas à l’empreinte inscrite dans le mandat. Rien ne peut être approuvé.', 'The displayed text does not match the hash written in the mandate. Nothing can be approved.'],1552 plShConsumed: ['Cette préparation est terminée : préparez le mandat de nouveau.', 'This preparation is over: prepare the mandate again.'], plShAgain: ['Préparer de nouveau', 'Prepare again'],1553 // the LIVE page1554 plVenueAccount: ['Compte de la plateforme', 'Venue account'], plValue: ['Valeur du compte', 'Account value'], plCapitalRef: ['Capital de référence : {capital} USDC', 'Reference capital: {capital} USDC'], plSince: ['En marche depuis le {date}', 'Live since {date}'],1555 plResult: ['Résultat depuis le départ :', 'Result since the start:'], plEquity: ['Valeur du compte (lue sur la plateforme)', 'Account value (read on the venue)'],1556 plNoAccount: ['Le compte de la plateforme de cet agent est introuvable.', 'This agent’s venue account cannot be found.'], plOpenTerminal: ['Ouvrir ce compte dans le terminal Futures', 'Open this account in the Futures terminal'],1557 plMandate: ['Mandat', 'Mandate'], plPhase_active: ['En vigueur', 'In force'], plPhase_wind_down: ['Liquidation en cours', 'Winding down'], plPhase_ended: ['Terminé', 'Ended'],1558 plWindDownLeft: ['Fermetures encore possibles pendant {time}', 'Closing still possible for {time}'], plWindDownText: ['Le mandat ne permet plus aucune nouvelle exposition. Jusqu’à la fin de la période de liquidation, le signataire signe encore les annulations et les ordres en réduction seule.',1559 'The mandate allows no new exposure any more. Until the wind-down ends the signer still signs cancels and reduce-only orders.'],1560 plUsage: ['Utilisation aujourd’hui (compteurs du signataire)', 'Usage today (the signer’s counters)'], plUsageOrders: ['Ordres ajoutant de l’exposition', 'Orders adding exposure'], plUsageHour: ['Dans la dernière heure', 'In the last hour'],1561 plUsageTurnover: ['Volume', 'Turnover'], plUsageReduce: ['Ordres en réduction seule (non plafonnés)', 'Reduce-only orders (not capped)'], plUsageLeverage: ['Changements de levier', 'Leverage changes'], plUsageNone: ['Les compteurs du signataire n’ont pas pu être lus.', 'The signer’s counters could not be read.'],1562 plFloorNow: ['Plancher {floor} USDC — valeur actuelle {equity} USDC', 'Floor {floor} USDC — current value {equity} USDC'],1563 plHolds: ['Ordres retenus ou refusés', 'Orders held or refused'], plHoldsNone: ['Aucun ordre retenu ni refusé récemment.', 'No order held or refused recently.'], plHoldBar: ['barre du {bar}', 'bar of {bar}'], plServerDetail: ['Détail du serveur (anglais) :', 'Server detail:'],1564 plControl: ['Conduite de l’agent', 'Running the agent'],1565 plPause: ['Pause', 'Pause'], plPauseNote: ['Pause : plus aucune nouvelle exposition. Les positions ouvertes sont CONSERVÉES et les limites de perte restent surveillées. Le mandat reste en vigueur.', 'Pause: no new exposure. Open positions are KEPT and the loss limits are still watched. The mandate stays in force.'],1566 plPaused: ['En pause : l’agent n’ajoute aucune exposition. Ses positions restent ouvertes et les limites de perte restent surveillées.', 'Paused: the agent adds no exposure. Its positions stay open and the loss limits are still watched.'],1567 plResume: ['Reprendre', 'Resume'], plStop: ['Arrêter', 'Stop'],1568 plStopNote: ['Arrêter : sans clé d’accès. Le mandat est révoqué tout de suite (plus aucune nouvelle exposition, définitivement), puis le moteur ferme les positions avec des ordres en réduction seule pendant la période de liquidation de 24 h, et l’agent passe à « Arrêté ».',1569 'Stop: no passkey. The mandate is revoked at once (no new exposure, for good), then the engine closes the positions with reduce-only orders during the 24 h wind-down, and the agent becomes “Stopped”.'],1570 plStopConfirm: ['Arrêter l’agent et révoquer le mandat', 'Stop the agent and revoke the mandate'], plStopTitle: ['Arrêter l’agent', 'Stop the agent'],1571 plStopBody: ['Le mandat sera révoqué maintenant : il ne pourra pas être réactivé (il en faudra un nouveau, avec votre clé d’accès). Les positions ne sont pas fermées par la révocation : le moteur les ferme ensuite avec des ordres en réduction seule.',1572 'The mandate will be revoked now: it cannot be re-activated (a new one, with your passkey, will be needed). The revocation does not close positions: the engine then closes them with reduce-only orders.'],1573 plStopOpen: ['Positions ouvertes sur le compte : {n}.', 'Open positions on the account: {n}.'],1574 plStopping: ['Arrêt en cours : le mandat est révoqué, le moteur ferme les positions avec des ordres en réduction seule.', 'Stopping: the mandate is revoked, the engine is closing the positions with reduce-only orders.'],1575 plStoppingLeft: ['Positions encore ouvertes : {n}.', 'Positions still open: {n}.'],1576 plManual: ['Fermer vous-même reste toujours possible : dans le terminal Futures, sur ce compte, avec votre clé d’accès.', 'Closing by yourself is always possible: in the Futures terminal, on this account, with your passkey.'],1577 plManualWarn: ['Attention : un ordre manuel sur ce compte pendant que l’agent négocie ce compte crée une divergence entre la plateforme et ce que l’agent a décidé. L’agent la respecte : il cesse de négocier le compte, ferme les positions du compte avec des ordres en réduction seule, puis s’arrête.',1578 'Careful: a manual order on this account while the agent is live creates a divergence between the venue and what the agent decided. The agent respects it: it stops trading the account, closes the account’s positions with reduce-only orders, then stops.'],1579 plBackPaper: ['Revenir en simulation', 'Return to simulation'], plExitTitle: ['Pourquoi l’agent a cessé de négocier ce compte', 'Why the agent stopped trading this account'],1580 plActivity: ['Activité sur la plateforme', 'Activity on the venue'], plOriginAgent: ['agent', 'agent'], plOriginOwner: ['manuel', 'manual'], plNotFromAgent: ['Ordre manuel (pas de l’agent)', 'Manual order (not the agent’s)'],1581 plUsedBy: ['Compte piloté par l’agent « {name} »', 'Account driven by the agent “{name}”'], plUsedByOpen: ['Voir l’agent', 'Open the agent'],1582 plMandateOn: ['Mandat d’agent en vigueur sur ce compte', 'Agent mandate in force on this account'], plMandateWinding: ['Mandat d’agent révoqué ou expiré : liquidation en cours', 'Agent mandate revoked or expired: winding down'],1583 plMandateModeNote: ['Le mode par mandat permet à un agent approuvé de négocier ce compte sans votre clé d’accès à chaque ordre, dans des limites appliquées par le signataire. Il s’active depuis la page d’un agent sur perpétuels, pas ici.',1584 'Mandate mode lets an approved agent trade this account without your passkey for each order, inside limits enforced by the signer. It is turned on from a perp agent’s page, not here.'],1585 plOpenLeftTitle: ['ATTENTION — {n} position(s) RESTENT OUVERTES sur le compte de la plateforme', 'WARNING — {n} position(s) REMAIN OPEN on the venue account'],1586 plOpenLeft: ['L’agent est arrêté et ne les fermera pas. Elles restent exposées au marché tant que vous ne les fermez pas : ouvrez le terminal Futures sur ce compte et fermez-les avec votre clé d’accès (ou sur la plateforme elle-même si l’autorisation du compte n’existe plus).',1587 'The agent is stopped and will not close them. They stay exposed to the market until you close them: open the Futures terminal on this account and close them with your passkey (or on the venue itself if the account’s authorisation is gone).'],1588 plStopResult: ['Réponse du moteur :', 'Engine answer:'],1589 plSignalNote: ['Sur le testnet : signaux calculés sur les barres du marché réel ; ordres exécutés sur le carnet du testnet, argent fictif.', 'On the testnet: signals computed on the real market’s bars; orders executed on the testnet book, play money.'],1590 plSignalNoteReal: ['Signaux calculés sur les barres publiques de la plateforme ; ordres exécutés sur le carnet du réseau principal, argent réel.', 'Signals computed on the venue’s public bars; orders executed on the mainnet book, real money.'],1591 plSig_deferred: ['en attente', 'waiting'], plSig_decided: ['En cours', 'In progress'],1592 // every refusal / hold code: what happened, and what to do. `plR_signer_<code>` = the signer's own refusals (docs/v6/DERIVATIVE-MANDATE.md §2)1593 plR_signer_not_found: ['Le signataire ne connaît pas ce mandat. Rien n’a été signé. Arrêtez l’agent, puis approuvez un nouveau mandat.', 'The signer does not know this mandate. Nothing was signed. Stop the agent, then approve a new mandate.'],1594 plR_signer_no_authorization: ['Le signataire n’a plus l’autorisation du compte (révoquée ou absente). Rien n’a été signé et plus rien ne peut l’être : fermez les positions sur la plateforme elle-même, ou autorisez de nouveau le compte.', 'The signer no longer holds the account’s authorisation (revoked or missing). Nothing was signed and nothing can be any more: close the positions on the venue itself, or authorise the account again.'],1595 plR_signer_revoked: ['Le mandat est révoqué : le signataire ne signe plus d’ordre qui ajoute de l’exposition. Les fermetures restent possibles pendant la période de liquidation. Pour reprendre, approuvez un nouveau mandat.', 'The mandate is revoked: the signer no longer signs an order that adds exposure. Closing stays possible during the wind-down. To resume, approve a new mandate.'],1596 plR_signer_expired: ['Le mandat a expiré : plus d’ordre qui ajoute de l’exposition. Les fermetures restent possibles pendant la période de liquidation. Pour reprendre, approuvez un nouveau mandat.', 'The mandate has expired: no more order that adds exposure. Closing stays possible during the wind-down. To resume, approve a new mandate.'],1597 plR_signer_wind_down: ['Le mandat est en période de liquidation : seuls les annulations et les ordres en réduction seule sont signés. Rien à faire si vous vouliez arrêter ; sinon, approuvez un nouveau mandat.', 'The mandate is winding down: only cancels and reduce-only orders are signed. Nothing to do if you meant to stop; otherwise approve a new mandate.'],1598 plR_signer_halted: ['L’arrêt d’urgence du signataire est actif : aucune nouvelle exposition n’est signée (les fermetures le sont encore). Levez l’arrêt d’urgence sur le signataire si vous l’avez voulu, puis approuvez un nouveau mandat.', 'The signer’s emergency halt is on: no new exposure is signed (closing still is). Lift the emergency halt on the signer if you meant to, then approve a new mandate.'],1599 plR_signer_bad_request: ['Le signataire n’a pas compris la demande. Rien n’a été signé. C’est un défaut du logiciel : notez l’heure et consultez le journal.', 'The signer did not understand the request. Nothing was signed. This is a software fault: note the time and check the log.'],1600 plR_signer_wrong_venue: ['L’ordre visait une autre plateforme ou un autre réseau que le mandat. Rien n’a été signé. Défaut du logiciel : consultez le journal.', 'The order targeted another venue or network than the mandate. Nothing was signed. Software fault: check the log.'],1601 plR_signer_rejected: ['Le signataire a lu dans l’ordre autre chose que ce que la plateforme accepte. Rien n’a été signé. Défaut du logiciel : consultez le journal.', 'The signer read in the order something the venue does not accept. Nothing was signed. Software fault: check the log.'],1602 plR_signer_unsupported: ['Ce type d’action n’est pas permis sous un mandat (seulement des ordres, des annulations et des changements de levier). Rien n’a été signé.', 'This kind of action is not allowed under a mandate (orders, cancels and leverage changes only). Nothing was signed.'],1603 plR_signer_policy: ['L’ordre dépasse une limite de l’autorisation du compte (ou son nombre d’ordres par jour, partagé avec vos ordres manuels). Rien n’a été signé ; l’agent réessaie à la prochaine barre.', 'The order exceeds a limit of the account’s authorisation (or its orders per day, shared with your manual orders). Nothing was signed; the agent tries again at the next bar.'],1604 plR_signer_expired_action: ['L’ordre est arrivé au signataire après son échéance (30 s). Rien n’a été signé ; l’agent réessaie à la prochaine barre. Si cela se répète, vérifiez l’horloge du serveur et la liaison avec le signataire.', 'The order reached the signer after its expiry (30 s). Nothing was signed; the agent tries again at the next bar. If it repeats, check the server clock and the link to the signer.'],1605 plR_signer_stale_nonce: ['Le numéro d’ordre de l’action était plus ancien que le dernier signé. Rien n’a été signé ; l’agent réessaie à la prochaine barre.', 'The action’s sequence number was older than the last one signed. Nothing was signed; the agent tries again at the next bar.'],1606 plR_signer_replay: ['Cet identifiant d’ordre a déjà été signé une fois : le signataire ne le signe jamais deux fois. Aucun doublon n’a été envoyé.', 'This order id was already signed once: the signer never signs it twice. No duplicate was sent.'],1607 plR_signer_mismatch: ['La description de l’ordre ne concordait pas avec ce que le signataire a lu lui-même. Rien n’a été signé. Défaut du logiciel : consultez le journal.', 'The description of the order did not agree with what the signer read itself. Nothing was signed. Software fault: check the log.'],1608 plR_signer_instrument: ['Ce marché n’est pas dans le mandat. Rien n’a été signé. Pour le négocier, arrêtez l’agent et approuvez un mandat qui l’inclut.', 'This market is not in the mandate. Nothing was signed. To trade it, stop the agent and approve a mandate that includes it.'],1609 plR_signer_order_notional: ['L’ordre dépassait la valeur maximale par ordre du mandat. Rien n’a été signé ; une fermeture se fait alors en plusieurs ordres plus petits.', 'The order exceeded the mandate’s maximum value per order. Nothing was signed; a close is then done in several smaller orders.'],1610 plR_signer_price: ['Le prix de l’ordre s’écartait trop du prix que le signataire relève lui-même. Rien n’a été signé ; l’agent réessaie à la prochaine barre. Sur le testnet, où les prix s’écartent du marché réel, c’est fréquent.', 'The order’s price was too far from the price the signer reads itself. Nothing was signed; the agent tries again at the next bar. On the testnet, where prices drift from the real market, this is common.'],1611 plR_signer_no_price: ['Le signataire n’a pas obtenu de prix fiable de ses deux bourses. Rien n’a été signé ; l’agent réessaie à la prochaine barre.', 'The signer got no reliable price from its two exchanges. Nothing was signed; the agent tries again at the next bar.'],1612 plR_signer_orders_day: ['Le nombre d’ordres par jour du mandat est atteint. Plus de nouvelle exposition jusqu’à minuit UTC ; les fermetures restent possibles.', 'The mandate’s orders per day are used up. No new exposure until midnight UTC; closing stays possible.'],1613 plR_signer_orders_hour: ['Le nombre d’ordres par heure du mandat est atteint. L’agent attend la prochaine barre ; les fermetures restent possibles.', 'The mandate’s orders per hour are used up. The agent waits for the next bar; closing stays possible.'],1614 plR_signer_turnover: ['Le volume quotidien du mandat est atteint. Plus de nouvelle exposition jusqu’à minuit UTC ; les fermetures restent possibles.', 'The mandate’s daily turnover is used up. No new exposure until midnight UTC; closing stays possible.'],1615 plR_signer_venue_unreachable: ['Le signataire n’a pas pu lire le compte sur la plateforme : il ne signe alors rien qui ajoute de l’exposition. L’agent réessaie à la prochaine barre ; les fermetures restent possibles.', 'The signer could not read the account on the venue: it then signs nothing that adds exposure. The agent tries again at the next bar; closing stays possible.'],1616 plR_signer_venue_stale: ['La lecture du compte par le signataire datait de plus de 30 s. Rien n’a été signé ; l’agent réessaie à la prochaine barre. Si cela se répète, vérifiez l’horloge du signataire.', 'The signer’s read of the account was more than 30 s old. Nothing was signed; the agent tries again at the next bar. If it repeats, check the signer’s clock.'],1617 plR_signer_venue_inconsistent: ['Ce que la plateforme rapporte du compte était incohérent pour le signataire. Rien n’a été signé ; l’agent réessaie à la prochaine barre. Si cela dure, regardez le compte sur la plateforme elle-même.', 'What the venue reports about the account was inconsistent for the signer. Nothing was signed; the agent tries again at the next bar. If it lasts, look at the account on the venue itself.'],1618 plR_signer_unpriced_position: ['Le compte porte une position sur un marché que le signataire ne sait pas évaluer : il ne signe plus de nouvelle exposition. Fermez cette position (terminal Futures ou plateforme).', 'The account holds a position on a market the signer cannot price: it signs no new exposure. Close that position (Futures terminal or the venue).'],1619 plR_signer_floor_equity: ['La valeur du compte est sous le plancher du mandat : le signataire ne signe plus que des fermetures. L’agent ferme ses positions et s’arrête.', 'The account value is below the mandate’s floor: the signer only signs closes. The agent closes its positions and stops.'],1620 plR_signer_leverage_setting: ['Le réglage de levier du marché sur la plateforme dépasse celui du mandat. Rien n’a été signé ; l’agent abaisse le levier puis réessaie à la prochaine barre.', 'The market’s leverage setting on the venue is above the mandate’s. Nothing was signed; the agent lowers the leverage, then tries again at the next bar.'],1621 plR_signer_position_exceeded: ['Avec cet ordre, la position sur ce marché aurait pu dépasser la limite du mandat (le signataire compte le pire cas, et compte deux fois un ordre récent pendant 40 s). Rien n’a été signé ; l’agent attend la prochaine barre.', 'With this order the position on this market could have exceeded the mandate’s limit (the signer counts the worst case, and counts a recent order twice for 40 s). Nothing was signed; the agent waits for the next bar.'],1622 plR_signer_gross_exceeded: ['Avec cet ordre, l’exposition brute du compte aurait pu dépasser la limite du mandat (pire cas, vu par le signataire). Rien n’a été signé ; l’agent attend la prochaine barre.', 'With this order the account’s gross exposure could have exceeded the mandate’s limit (worst case, as the signer sees it). Nothing was signed; the agent waits for the next bar.'],1623 plR_signer_leverage_exceeded: ['Le levier demandé dépasse celui du mandat pour ce marché. Rien n’a été signé.', 'The requested leverage is above the mandate’s for this market. Nothing was signed.'],1624 plR_signer_leverage_rate: ['Vingt changements de levier ont déjà été signés aujourd’hui. Plus de changement jusqu’à minuit UTC.', 'Twenty leverage changes were already signed today. No more change until midnight UTC.'],1625 plR_signer_margin_mode: ['Le mode de marge ne peut pas changer tant qu’une position est ouverte sur ce marché. Rien n’a été signé ; fermez la position ou laissez le mode tel quel.', 'The margin mode cannot change while a position is open on this market. Nothing was signed; close the position or leave the mode as it is.'],1626 plR_signer_other: ['Le signataire a refusé. Rien n’a été signé ni envoyé.', 'The signer refused. Nothing was signed or sent.'],1627 plR_signer_unreachable: ['Le signataire n’a pas répondu : rien n’a été signé, donc rien n’a été envoyé. L’agent réessaie à la prochaine barre.', 'The signer did not answer: nothing was signed, so nothing was sent. The agent tries again at the next bar.'],1628 plR_live_cooldown: ['Un ordre vient d’atteindre le signataire : pendant environ 40 s il le compte deux fois. L’agent attend sa prochaine passe (une minute) avant d’ajouter de l’exposition. Rien à faire.', 'An order just reached the signer: for about 40 s it counts it twice. The agent waits for its next pass (one minute) before adding exposure. Nothing to do.'],1629 plR_live_unknown_pending: ['Un ordre précédent sur ce marché est encore en vérification sur la plateforme (résultat inconnu). Aucun autre ordre n’est envoyé sur ce marché tant qu’il n’est pas élucidé. Rien à faire.', 'An earlier order on this market is still being checked on the venue (outcome unknown). No other order is sent on this market until it is resolved. Nothing to do.'],1630 plR_floor_guard: ['La valeur du compte approche du plancher du mandat : l’agent n’ajoute plus d’exposition, bien avant que le signataire ne refuse. Les réductions continuent.', 'The account value is close to the mandate’s floor: the agent adds no more exposure, well before the signer would refuse. Reductions go on.'],1631 plR_leverage_not_set: ['Le levier du marché n’a pas pu être réglé sur la plateforme au niveau de l’agent : aucun ordre n’est envoyé sur ce marché. L’agent réessaie à la prochaine barre.', 'The market’s leverage could not be set on the venue to the agent’s level: no order is sent on this market. The agent tries again at the next bar.'],1632 plR_venue_rejected: ['La plateforme a refusé l’ordre (ses propres mots sont ci-dessous). Rien n’a été exécuté ; l’agent replanifie à la prochaine barre.', 'The venue refused the order (its own words are below). Nothing was executed; the agent plans again at the next bar.'],1633 plR_never_placed: ['L’ordre n’est jamais arrivé sur la plateforme (vérifié auprès d’elle après l’échéance de la signature). Rien n’a été exécuté ; l’agent replanifie à la prochaine barre.', 'The order never reached the venue (checked with it after the signature expired). Nothing was executed; the agent plans again at the next bar.'],1634 plR_withdrawn: ['L’ordre a été retiré avant d’atteindre le signataire (suspension ou révocation entre-temps). Rien n’a été signé ni envoyé.', 'The order was withdrawn before it reached the signer (a halt or a revocation meanwhile). Nothing was signed or sent.'],1635 plR_not_signed: ['Le signataire n’a pas signé cet ordre (son motif est ci-dessous). Rien n’a été envoyé ; l’agent replanifie à la prochaine barre.', 'The signer did not sign this order (its reason is below). Nothing was sent; the agent plans again at the next bar.'],1636 plR_rejected: ['L’ordre a été refusé avant l’envoi (le motif est ci-dessous). Rien n’a été exécuté ; l’agent replanifie à la prochaine barre.', 'The order was refused before it was sent (the reason is below). Nothing was executed; the agent plans again at the next bar.'],1637 plR_rejected_earlier: ['Cet ordre avait déjà été refusé pour cette barre : il n’est pas renvoyé. L’agent replanifie à la prochaine barre.', 'This order had already been refused for this bar: it is not sent again. The agent plans again at the next bar.'],1638 plR_mandate_floor_equity: ['La valeur du compte est sous le plancher du mandat : seules les fermetures sont possibles.', 'The account value is below the mandate’s floor: only closing is possible.'],1639 plR_mandate_wind_down: ['Le mandat est en période de liquidation : seules les fermetures sont possibles.', 'The mandate is winding down: only closing is possible.'],1640 plR_mandate_none: ['Aucun mandat n’est en vigueur sur ce compte. Approuvez-en un pour reprendre.', 'No mandate is in force on this account. Approve one to go live again.'],1641 plR_halted: ['La négociation est suspendue sur ce compte (arrêt demandé, ou divergence avec la plateforme). Seules les fermetures passent.', 'Trading is halted on this account (a halt was asked, or a divergence with the venue). Only closing passes.'],1642 plR_other: ['Ordre non envoyé. Le code et le détail du serveur sont ci-dessous.', 'Order not sent. The server’s code and detail are below.'],1643 // why the agent stopped trading this account (`live.exit.code`)1644 plX_owner_stop: ['Vous avez arrêté l’agent. Le mandat est révoqué ; le moteur ferme les positions avec des ordres en réduction seule. Pour reprendre, approuvez un nouveau mandat.', 'You stopped the agent. The mandate is revoked; the engine closes the positions with reduce-only orders. To go live again, approve a new mandate.'],1645 plX_mandate_revoked: ['Le mandat a été révoqué. L’agent a cessé de négocier ce compte et ferme ses positions pendant la période de liquidation. Pour reprendre, approuvez un nouveau mandat.', 'The mandate was revoked. The agent stopped trading this account and closes its positions during the wind-down. To resume, approve a new mandate.'],1646 plX_mandate_expired: ['Le mandat a expiré. L’agent a cessé de négocier ce compte et ferme ses positions pendant la période de liquidation. Pour reprendre, approuvez un nouveau mandat.', 'The mandate has expired. The agent stopped trading this account and closes its positions during the wind-down. To resume, approve a new mandate.'],1647 plX_mandate_ended: ['Le mandat est terminé (période de liquidation écoulée) : le signataire ne signe plus rien pour lui. Si des positions restent ouvertes, fermez-les dans le terminal Futures avec votre clé d’accès.', 'The mandate has ended (the wind-down is over): the signer signs nothing for it any more. If positions remain open, close them in the Futures terminal with your passkey.'],1648 plX_authorization_ended: ['L’autorisation du compte a été révoquée ou a expiré : plus rien ne peut être signé, pas même une fermeture. Fermez les positions sur la plateforme elle-même, ou autorisez de nouveau le compte puis fermez dans le terminal Futures.', 'The account’s authorisation was revoked or has expired: nothing can be signed any more, not even a close. Close the positions on the venue itself, or authorise the account again and close in the Futures terminal.'],1649 plX_mainnet_disabled: ['Le réseau principal a été fermé sur le serveur (réglage du serveur) : l’agent ne peut plus rien y envoyer. Les positions restent ouvertes : fermez-les sur la plateforme elle-même.', 'Mainnet was closed on the server (server setting): the agent can send nothing to it any more. Positions stay open: close them on the venue itself.'],1650 plX_mandate_mainnet_disabled: ['La négociation autonome sur le réseau principal a été fermée sur le serveur (réglage du serveur). L’agent s’est arrêté sans pouvoir fermer : fermez les positions dans le terminal Futures avec votre clé d’accès.', 'Autonomous trading on mainnet was closed on the server (server setting). The agent stopped without being able to close: close the positions in the Futures terminal with your passkey.'],1651 plX_halted: ['La négociation a été suspendue sur ce compte. L’agent a cessé de négocier ce compte, ferme ses positions avec des ordres en réduction seule et s’arrête. Levez la suspension dans Futures → Comptes avant un nouveau mandat.', 'Trading was halted on this account. The agent stopped trading this account, closes its positions with reduce-only orders and stops. Lift the halt in Futures → Accounts before a new mandate.'],1652 plX_divergence: ['L’état du compte sur la plateforme ne correspond plus à ce que le portefeuille a enregistré (un ordre ou une position venus d’ailleurs). L’agent a cessé de négocier ce compte, ferme les positions avec des ordres en réduction seule et s’arrête. Réglez la divergence dans le terminal Futures avant un nouveau mandat.',1653 'The account’s state on the venue no longer matches what the wallet recorded (an order or a position from elsewhere). The agent stopped trading this account, closes the positions with reduce-only orders and stops. Settle the divergence in the Futures terminal before a new mandate.'],1654 plX_manual_order: ['Un ordre manuel a été passé sur ce compte pendant que l’agent négociait ce compte. L’agent ne sait plus quelles positions sont les siennes : il a cessé de négocier ce compte, ferme les positions avec des ordres en réduction seule et s’arrête.', 'A manual order was placed on this account while the agent was live. The agent no longer knows which positions are its own: it stopped trading this account, closes the positions with reduce-only orders and stops.'],1655 plX_liquidation: ['La plateforme a liquidé une position du compte. L’agent a cessé de négocier ce compte et s’arrête. Vérifiez le compte sur la plateforme avant toute reprise.', 'The venue liquidated a position of the account. The agent stopped trading this account and stops. Check the account on the venue before resuming.'],1656 plX_strategy_changed: ['La version de stratégie approuvée n’est plus celle inscrite dans le mandat. L’agent a cessé de négocier ce compte et ferme ses positions. Approuvez un nouveau mandat pour la nouvelle version.', 'The approved strategy version is no longer the one written in the mandate. The agent stopped trading this account and closes its positions. Approve a new mandate for the new version.'],1657 plX_loss_limit: ['Une limite de perte de l’agent est atteinte. L’agent a cessé de négocier ce compte, ferme ses positions avec des ordres en réduction seule et s’arrête. Le mandat est révoqué.', 'One of the agent’s loss limits was reached. The agent stopped trading this account, closes its positions with reduce-only orders and stops. The mandate is revoked.'],1658 plX_signer_revoked: ['Le signataire dit que le mandat est révoqué. L’agent a cessé de négocier ce compte et ferme ses positions pendant la période de liquidation.', 'The signer says the mandate is revoked. The agent stopped trading this account and closes its positions during the wind-down.'],1659 plX_signer_expired: ['Le signataire dit que le mandat a expiré. L’agent a cessé de négocier ce compte et ferme ses positions pendant la période de liquidation.', 'The signer says the mandate has expired. The agent stopped trading this account and closes its positions during the wind-down.'],1660 plX_signer_wind_down: ['Le signataire dit que le mandat est en période de liquidation. L’agent a cessé de négocier ce compte et ferme ses positions.', 'The signer says the mandate is winding down. The agent stopped trading this account and closes its positions.'],1661 plX_signer_no_authorization: ['Le signataire n’a plus l’autorisation du compte : plus rien ne peut être signé. L’agent s’est arrêté ; fermez les positions sur la plateforme elle-même ou autorisez de nouveau le compte.', 'The signer no longer holds the account’s authorisation: nothing can be signed any more. The agent stopped; close the positions on the venue itself or authorise the account again.'],1662 plX_signer_halted: ['L’arrêt d’urgence du signataire est actif. L’agent a cessé de négocier ce compte et ferme ses positions avec des ordres en réduction seule (encore signés).', 'The signer’s emergency halt is on. The agent stopped trading this account and closes its positions with reduce-only orders (still signed).'],1663 plX_engine_stop: ['Le moteur a arrêté l’agent (le motif est ci-dessous). Le mandat est révoqué ; vérifiez qu’aucune position ne reste ouverte sur le compte.', 'The engine stopped the agent (the reason is below). The mandate is revoked; check that no position remains open on the account.'],1664 plX_signer_not_found: ['Le signataire ne connaît pas ce mandat : plus rien ne peut être signé pour lui. L’agent s’est arrêté ; si des positions restent ouvertes, fermez-les dans le terminal Futures avec votre clé d’accès.', 'The signer does not know this mandate: nothing can be signed for it any more. The agent stopped; if positions remain open, close them in the Futures terminal with your passkey.'],1665 plX_other: ['L’agent a cessé de négocier ce compte. Le code et le détail du serveur sont ci-dessous.', 'The agent stopped trading this account. The server’s code and detail are below.'],1666 plSt_LIVE: ['En marche', 'Running'], plSt_PAUSED: ['En pause', 'Paused'], plSt_STOPPING: ['Arrêt en cours', 'Stopping'], plSt_STOPPED: ['Arrêté', 'Stopped'],1667 // <<< v7 perp live — end of the `pl` block1668 // >>> v7 any-to-any plans — ONE contiguous block, every key prefixed `pn` (plus three `e_` error codes of the plan routes): keep additions inside it1669 pnTitle: ['Plans exécutables', 'Executable plans'],1670 pnIntro: ['Un plan enchaîne des opérations que le portefeuille sait déjà exécuter et vérifier. Chaque étape est approuvée séparément avec votre clé d’accès, au moment où elle devient possible.', 'A plan chains operations the wallet already executes and verifies. Each step is approved separately with your passkey, when it becomes possible.'],1671 pnSearching: ['Recherche de plans avec des devis réels pour chaque étape…', 'Looking for plans with real quotes for every step…'],1672 pnSimple: ['Transférer puis échanger', 'Bridge then swap'],1673 pnApprovals: ['{n} approbations', '{n} approvals'],1674 pnExpected: ['attendu', 'expected'], pnExpectedShort: ['Attendu', 'Expected'],1675 pnWorst: ['garanti au pire, si chaque étape s’exécute à son minimum', 'guaranteed at worst, if every step executes at its minimum'], pnWorstShort: ['au pire', 'at worst'],1676 pnBest: ['Meilleur garanti', 'Best guaranteed'], pnBlocked: ['À préparer', 'Not ready'],1677 pnSteps: ['Étapes du plan', 'Plan steps'],1678 pnKindSwap: ['Échange', 'Swap'], pnKindBridge: ['Transfert entre réseaux', 'Cross-network transfer'], pnKindXswap: ['Échange natif', 'Native swap'],1679 pnFast: ['rapide', 'fast'], pnStandard: ['standard', 'standard'],1680 pnNoFee: ['sans frais annoncés', 'no fee quoted'], pnInOutput: ['(déjà déduits)', '(already deducted)'],1681 pnFee_network: ['frais de réseau ≈', 'network fee ≈'], pnFee_protocol: ['frais du protocole', 'protocol fee'], pnFee_provider: ['frais du fournisseur', 'provider fee'], pnFee_bridge: ['frais de transfert', 'bridge fee'], pnFee_affiliate: ['frais d’affiliation', 'affiliate fee'],1682 pnTotalTime: ['Durée estimée :', 'Estimated time:'], pnTotalFees: ['Frais de réseau en plus :', 'Network fees on top:'],1683 pnRequired: ['Requis avant de commencer', 'Required before starting'],1684 pnGasLine: ['{sym} sur {net} pour les frais : environ {need} requis, {have} disponibles.', '{sym} on {net} for fees: about {need} needed, {have} available.'],1685 pnGasHelp: ['Le portefeuille ne peut pas s’envoyer lui-même du {sym} d’un autre réseau : il faut en recevoir sur {net}.', 'The wallet cannot send itself {sym} from another network: some must be received on {net}.'],1686 pnGasReceive: ['Recevoir du {sym} sur {net}', 'Receive {sym} on {net}'],1687 pnLimitLine: ['Étape {step} : {need} {sym} sur {net} — limite {per} par transfert, {left} restants aujourd’hui.', 'Step {step}: {need} {sym} on {net} — limit {per} per transfer, {left} left today.'],1688 pnIssue_insufficient_balance: ['Solde insuffisant : {have} {sym} disponibles sur {net}.', 'Insufficient balance: {have} {sym} available on {net}.'],1689 pnIssue_limit_missing: ['Étape {step} : {sym} sur {net} n’a pas de limite de transfert dans la politique du signataire ; il ne peut pas être déplacé.', 'Step {step}: {sym} on {net} has no transfer limit in the signer policy; it cannot be moved.'],1690 pnIssue_limit_per_transfer: ['Étape {step} : {need} {sym} sur {net} dépassent la limite de {have} {sym} par transfert. Réduisez le montant.', 'Step {step}: {need} {sym} on {net} is above the limit of {have} {sym} per transfer. Reduce the amount.'],1691 pnIssue_limit_daily: ['Étape {step} : {need} {sym} sur {net} dépassent ce qui reste de la limite du jour ({have} {sym}).', 'Step {step}: {need} {sym} on {net} is above what is left of today’s limit ({have} {sym}).'],1692 pnIssue_limit_margin: ['Étape {step} : le montant attendu est proche de la limite de {have} {sym} ; si le montant réel la dépasse, l’étape sera refusée et le plan mis en pause.', 'Step {step}: the expected amount is close to the limit of {have} {sym}; if the real amount exceeds it, the step will be refused and the plan paused.'],1693 pnIssue_below_minimum: ['Étape {step} : le minimum pour cette étape est de {need} {sym}.', 'Step {step}: the minimum for this step is {need} {sym}.'],1694 pnIssue_gas_missing: ['Il manque du {sym} sur {net} pour les frais de réseau : environ {need} requis, {have} disponibles.', '{sym} is missing on {net} for network fees: about {need} needed, {have} available.'],1695 pnIssue_gas_unknown: ['Le solde en {sym} sur {net} n’a pas pu être lu.', 'The {sym} balance on {net} could not be read.'],1696 pnStart: ['Démarrer ce plan ({n} approbations)', 'Start this plan ({n} approvals)'],1697 pnOneAtATime: ['Un plan est déjà en cours : terminez-le ou arrêtez-le avant d’en démarrer un autre.', 'A plan is already in progress: finish or stop it before starting another.'],1698 pnComparison: ['Comparaison seulement : {via} annonce au moins {min} {sym}, davantage que le meilleur plan, mais le portefeuille ne peut pas exécuter cette route (il ne peut pas en vérifier la transaction).', 'Comparison only: {via} quotes at least {min} {sym}, more than the best plan, but the wallet cannot execute that route (it cannot verify its transaction).'],1699 pnCompareOnly: ['Comparaison seulement', 'Comparison only'],1700 pnNotExecTitle: ['Pas encore exécutable.', 'Not executable yet.'],1701 pnNo_solana_evm_bridge: ['Aucune étape exécutable ne relie Solana aux réseaux EVM : Circle CCTP prend en charge Solana, mais le signataire du portefeuille ne construit et ne vérifie aujourd’hui que le brûlage et l’émission côté EVM. Les devis ci-dessous sont affichés pour comparaison.', 'No executable step links Solana and EVM networks: Circle CCTP supports Solana, but the wallet’s signer only builds and verifies the EVM burn and mint today. The quotes below are shown for comparison.'],1702 pnNo_network_without_execution: ['Le portefeuille n’exécute encore aucun échange ni transfert entre réseaux pour cet actif sur {net}.', 'The wallet does not execute any swap or cross-network transfer for this asset on {net} yet.'],1703 pnNo_no_executable_path: ['Aucune suite d’au plus trois étapes exécutables ne relie ces deux actifs (pas de transfert USDC par CCTP sur l’un des réseaux).', 'No sequence of at most three executable steps links these two assets (no CCTP USDC transfer on one of the networks).'],1704 pnNo_same_asset: ['Choisissez deux actifs différents.', 'Choose two different assets.'],1705 pnNoQuote: ['Aucun plan n’a de devis pour le moment :', 'No plan has a quote right now:'],1706 pnStartTitle: ['Démarrer le plan', 'Start the plan'],1707 pnGuarantee: ['Chaque étape est garantie au moment où vous l’approuvez : son minimum est fixé et vérifié par le signataire. Le minimum de bout en bout n’est PAS garanti à l’avance : les prix peuvent bouger entre deux étapes. Vous approuverez {n} fois, une fois par étape.', 'Each step is guaranteed when you approve it: its minimum is fixed and verified by the signer. The end-to-end minimum is NOT guaranteed in advance: prices can move between two steps. You will approve {n} times, once per step.'],1708 pnBetween: ['Entre deux étapes, les fonds restent à votre propre adresse, en solde ordinaire (USDC sur le réseau intermédiaire). Si vous abandonnez, rien n’est bloqué.', 'Between two steps the funds stay at your own address, as an ordinary balance (USDC on the intermediate network). If you walk away, nothing is stuck.'],1709 pnFloorLabel: ['Arrêter le plan si le résultat final estimé passe sous ({sym}) — facultatif', 'Stop the plan if the estimated final result falls below ({sym}) — optional'],1710 pnFloorNone: ['Aucun plancher', 'No floor'],1711 pnFloorHint: ['Vérifié avant chaque étape suivante, avec des devis frais. Pire cas calculé maintenant : {worst} {sym}.', 'Checked before each next step, with fresh quotes. Worst case computed now: {worst} {sym}.'],1712 pnFloorUseWorst: ['Utiliser ce pire cas', 'Use this worst case'],1713 pnStartConfirm: ['Démarrer — rien n’est signé maintenant', 'Start — nothing is signed now'],1714 pnProgress: ['Suivi du plan', 'Plan progress'], pnLoading: ['Chargement du plan…', 'Loading the plan…'],1715 pnState_active: ['En cours', 'In progress'], pnState_paused: ['En pause', 'Paused'], pnState_done: ['Terminé', 'Done'], pnState_stopped: ['Arrêté', 'Stopped'],1716 pnReceived: ['Reçu', 'Received'], pnHolding: ['Les fonds du plan sont ici, à votre adresse', 'The plan’s funds are here, at your address'],1717 pnEstimateNow: ['Résultat final estimé maintenant : {exp} {sym} attendu, {worst} au pire', 'Final result estimated now: {exp} {sym} expected, {worst} at worst'],1718 pnPlannedLine: ['Prévu au départ : {exp} {sym} attendu, {worst} au pire', 'Planned at the start: {exp} {sym} expected, {worst} at worst'],1719 pnFloorIs: ['plancher {floor} {sym}', 'floor {floor} {sym}'],1720 pnLeg_pending: ['à venir', 'to come'], pnLeg_ready: ['à approuver', 'to approve'], pnLeg_proposed: ['à approuver', 'to approve'], pnLeg_in_flight: ['en cours', 'in progress'], pnLeg_settled: ['terminée', 'done'],1721 pnPlanned: ['prévu', 'planned'], pnLastAttempt: ['Dernière tentative :', 'Last attempt:'],1722 pnReadyNote: ['L’étape {k} sur {n} est prête. Elle sera préparée sur ce que le plan détient réellement ({amt} {sym}), avec un devis frais et son propre minimum.', 'Step {k} of {n} is ready. It will be prepared on what the plan really holds ({amt} {sym}), with a fresh quote and its own minimum.'],1723 pnPrepare: ['Préparer l’étape {k} sur {n}', 'Prepare step {k} of {n}'],1724 pnReview: ['Étape {k} sur {n} à approuver', 'Step {k} of {n} to approve'],1725 pnYouGive: ['Vous donnez', 'You give'], pnMinGuaranteed: ['Minimum garanti pour cette étape', 'Guaranteed minimum for this step'],1726 pnStepGuarantee: ['Le signataire vérifie lui-même le destinataire (votre adresse), les montants et le minimum de cette étape avant de signer.', 'The signer itself verifies the recipient (your address), the amounts and the minimum of this step before signing.'],1727 pnReprepare: ['La demande d’approbation de cette étape a été ouverte ailleurs ou plus tôt. Préparez-la de nouveau pour l’approuver ici (l’ancienne est retirée).', 'The approval request of this step was opened elsewhere or earlier. Prepare it again to approve it here (the old one is withdrawn).'],1728 pnWaiting: ['Étape {k} sur {n} en cours', 'Step {k} of {n} in progress'],1729 pnWaitingNote: ['Vous pouvez fermer cet écran : le plan continue de suivre l’étape et vous préviendra quand la suivante sera prête', 'You can close this screen: the plan keeps following the step and will alert you when the next one is ready'],1730 pnPause_floor: ['Plancher atteint avant l’étape {k}.', 'Floor reached before step {k}.'], pnPause_refused: ['Étape {k} refusée.', 'Step {k} refused.'], pnPause_refunded: ['Étape {k} remboursée.', 'Step {k} refunded.'],1731 pnPause_no_funds: ['Fonds absents pour l’étape {k}.', 'Funds missing for step {k}.'], pnPause_other: ['L’étape {k} n’a pas pu se faire.', 'Step {k} could not go through.'],1732 pnPausedFunds: ['Les fonds sont à votre adresse : {amt} {sym} sur {net}.', 'The funds are at your address: {amt} {sym} on {net}.'],1733 pnFloorChange: ['Nouveau plancher ({sym}) — laissez vide pour le conserver, 0 pour le retirer', 'New floor ({sym}) — leave empty to keep it, 0 to remove it'],1734 pnRetry: ['Réessayer cette étape', 'Retry this step'],1735 pnReplan: ['Re-planifier depuis {sym} ({net})', 'Re-plan from {sym} ({net})'],1736 pnStop: ['Arrêter ici — les fonds restent où ils sont', 'Stop here — the funds stay where they are'], pnStopHere: ['Arrêter le plan ici', 'Stop the plan here'],1737 pnDone: ['Plan terminé en {n} étapes approuvées une à une.', 'Plan completed in {n} steps, each approved on its own.'],1738 pnStopped: ['Plan arrêté. {amt} {sym} restent sur {net}, à votre adresse, comme un solde ordinaire.', 'Plan stopped. {amt} {sym} stay on {net}, at your address, as an ordinary balance.'],1739 pnResumable: ['Ce plan peut être repris plus tard, depuis l’Activité, même après plusieurs jours.', 'This plan can be resumed later, from Activity, even days from now.'],1740 pnOpenBanner: ['Plan en cours : {from} → {to}, étape {k} sur {n}.', 'Plan in progress: {from} → {to}, step {k} of {n}.'], pnResume: ['Reprendre', 'Resume'],1741 pnListTitle: ['Plans d’échange entre réseaux', 'Cross-network swap plans'], pnStepOf: ['Étape {k} sur {n}', 'Step {k} of {n}'], pnNeedsYou: ['attend votre approbation', 'waits for your approval'],1742 e_plan_open: ['Un autre plan est encore ouvert', 'Another plan is still open'], e_plan_not_startable: ['Ce plan ne peut pas démarrer', 'This plan cannot start'], e_floor_above_estimate: ['Le plancher est au-dessus du résultat attendu', 'The floor is above the expected result'],1743 // <<< end of the `pl` block1744} as const;1745export type Key = keyof typeof D;1746export const I18n = createContext<{ locale: Locale; setLocale: (l: Locale) => void }>({ locale: 'fr', setLocale: () => {} });1747export function useT() {1748 const { locale } = useContext(I18n);1749 return (k: Key, vars?: Record<string, string | number>) => {1750 const row = (D as Record<string, readonly [string, string]>)[k];1751 let s: string = row ? row[locale === 'fr' ? 0 : 1] : String(k).replace(/^[a-z]_/, '').replace(/_/g, ' '); // unknown key: readable fallback, never a crash1752 if (vars) for (const [a, b] of Object.entries(vars)) s = s.split(`{${a}}`).join(String(b)); // every occurrence, not only the first1753 return s;1754 };1755}1756/** Localized message for an API error code, followed by the server detail. */1757export function errText(t: (k: Key) => string, e: unknown): string {1758 const x = e as { code?: string; message?: string; name?: string };1759 if (x?.name === 'NotAllowedError') return '';1760 const k = `e_${x?.code}`;1761 const detail = x?.message && x.message !== 'error' && x.message !== x.code ? x.message : '';1762 // a translated code speaks for itself; the server's English sentence is appended only when it carries a figure (an amount, a limit)1763 if (/account is not activated yet/.test(detail)) return t('qaErrNotActivated');1764 return k in D ? (detail && /\d/.test(detail) && x?.code !== 'bad_address' ? `${t(k as Key)} (${detail})` : t(k as Key)) : detail || String(x?.code ?? 'error');1765}1766export const stateKey = (s: string) => (`s_${s}` in D ? (`s_${s}` as Key) : 's_draft');1767