SPB Git

Repository Public

i18n.ts 312.6 KB 1,767 lines typescript

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
Files main
Menu

Theme