import antdFrFR from 'ant-design-vue/es/locale-provider/fr_FR'
import momentFR from 'moment/locale/fr'

const components = {
  antLocale: antdFrFR,
  momentName: 'fr',
  momentLocale: momentFR
}

const locale = {
  'submit': 'Soumettre',
  'save': 'enregistrer',
  'submit.ok': 'Soumission réussie',
  'save.ok': 'Enregistré avec succès',
  'menu.welcome': 'bienvenue',
  'menu.home': "Page d'accueil",
  'menu.dashboard': 'Tableau de bord',
  'menu.dashboard.indicator': 'Analyse des indicateurs',
  'menu.dashboard.community': 'communauté des indicateurs',
  'menu.dashboard.analysis': "Analyse de l'IA",
  'menu.dashboard.tradingAssistant': 'Assistante commerciale',
  'menu.dashboard.aiTradingAssistant': 'Assistant de trading IA',
  'menu.dashboard.signalRobot': 'Robot de signal',
  'menu.dashboard.monitor': 'Page de surveillance',
  'menu.dashboard.workplace': 'établi',
  'menu.form': 'page de formulaire',
  'menu.form.basic-form': 'forme de base',
  'menu.form.step-form': 'formulaire étape par étape',
  'menu.form.step-form.info': 'Formulaire étape par étape (remplir les informations de transfert)',
  'menu.form.step-form.confirm': 'Formulaire étape par étape (confirmer les informations de transfert)',
  'menu.form.step-form.result': 'Formulaire étape par étape (à compléter)',
  'menu.form.advanced-form': 'Formulaires avancés',
  'menu.list': 'Page de liste',
  'menu.list.table-list': 'Formulaire de demande',
  'menu.list.basic-list': 'Liste standard',
  'menu.list.card-list': 'liste de cartes',
  'menu.list.search-list': 'liste de recherche',
  'menu.list.search-list.articles': 'Liste de recherche (articles)',
  'menu.list.search-list.projects': 'Liste de recherche (projet)',
  'menu.list.search-list.applications': 'Liste de recherche (application)',
  'menu.profile': 'Page de détails',
  'menu.profile.basic': 'Page de détails de base',
  'menu.profile.advanced': 'Page de détails avancés',
  'menu.result': 'Page de résultats',
  'menu.result.success': 'page de réussite',
  'menu.result.fail': "page d'échec",
  'menu.exception': "Page d'exceptions",
  'menu.exception.not-permission': '403',
  'menu.exception.not-find': '404',
  'menu.exception.server-error': '500',
  'menu.exception.trigger': 'erreur de déclenchement',
  'menu.account': 'Page personnelle',
  'menu.account.center': 'Centre personnel',
  'menu.account.settings': 'paramètres personnels',
  'menu.account.trigger': 'Erreur de déclenchement',
  'menu.account.logout': 'Se déconnecter',
  'menu.wallet': 'mon portefeuille',
  'menu.docs': 'Centre de documentation',
  'menu.docs.detail': 'Détails du document',
  'menu.header.refreshPage': 'actualiser la page',
  'menu.invite.friends': 'Inviter des amis',
  'app.setting.pagestyle': 'paramètres de style généraux',
  'app.setting.pagestyle.light': 'Style de menu lumineux',
  'app.setting.pagestyle.dark': 'style de menu sombre',
  'app.setting.pagestyle.realdark': 'mode sombre',
  'app.setting.themecolor': 'couleur du thème',
  'app.setting.navigationmode': 'Mode navigation',
  'app.setting.sidemenu.nav': 'Navigation dans la barre latérale',
  'app.setting.topmenu.nav': 'Navigation dans la barre supérieure',
  'app.setting.content-width': 'largeur de la zone de contenu',
  'app.setting.content-width.tooltip': "Ce paramètre n'est efficace que lorsque [Navigation dans la barre supérieure]",
  'app.setting.content-width.fixed': 'Corrigé',
  'app.setting.content-width.fluid': 'diffusion en continu',
  'app.setting.fixedheader': 'En-tête fixe',
  'app.setting.fixedheader.tooltip': "Configurable lorsqu'il est fixe",
  'app.setting.autoHideHeader': "Masquer l'en-tête lors du défilement",
  'app.setting.fixedsidebar': 'Menu latéral fixe',
  'app.setting.sidemenu': 'Disposition du menu latéral',
  'app.setting.topmenu': 'Disposition du menu supérieur',
  'app.setting.othersettings': 'Autres paramètres',
  'app.setting.weakmode': 'Mode de faiblesse des couleurs',
  'app.setting.multitab': 'Mode multi-onglets',
  'app.setting.copy': 'Paramètres de copie',
  'app.setting.loading': 'Chargement du thème',
  'app.setting.copyinfo': 'Copiez les paramètres avec succès src/config/defaultSettings.js',
  'app.setting.copy.success': 'Copie terminée',
  'app.setting.copy.fail': 'Échec de la copie',
  'app.setting.theme.switching': 'Changer de thème !',
  'app.setting.production.hint': "La barre de configuration est uniquement utilisée pour l'aperçu dans l'environnement de développement et ne sera pas affichée dans l'environnement de production. Veuillez copier et modifier le fichier de configuration manuellement.",
  'app.setting.themecolor.daybreak': 'Bleu aube (par défaut)',
  'app.setting.themecolor.dust': 'crépuscule',
  'app.setting.themecolor.volcano': 'volcan',
  'app.setting.themecolor.sunset': 'coucher de soleil',
  'app.setting.themecolor.cyan': 'Mingqing',
  'app.setting.themecolor.green': 'aurore verte',
  'app.setting.themecolor.geekblue': 'bleu geek',
  'app.setting.themecolor.purple': 'Jiang Zi',
  'app.setting.tooltip': 'Paramètres des pages',
  'user.login.userName': "Nom d'utilisateur",
  'user.login.password': 'Mot de passe',
  'user.login.username.placeholder': 'Compte : administrateur',
  'user.login.password.placeholder': 'Mot de passe : admin ou ant.design',
  'user.login.message-invalid-credentials': 'La connexion a échoué, veuillez vérifier votre e-mail et votre code de vérification',
  'user.login.message-invalid-verification-code': 'Erreur de code de vérification',
  'user.login.tab-login-credentials': 'Connexion par mot de passe du compte',
  'user.login.tab-login-email': 'Connexion par e-mail',
  'user.login.tab-login-mobile': 'Connexion au numéro de téléphone portable',
  'user.login.captcha.placeholder': 'Veuillez saisir le code de vérification graphique',
  'user.login.mobile.placeholder': 'Numéro de téléphone portable',
  'user.login.mobile.verification-code.placeholder': 'Code de vérification',
  'user.login.email.placeholder': 'Veuillez entrer votre adresse e-mail',
  'user.login.email.verification-code.placeholder': 'Veuillez entrer le code de vérification',
  'user.login.email.sending': "Le code de vérification est en cours d'envoi...",
  'user.login.email.send-success-title': 'Conseils',
  'user.login.email.send-success': 'Code de vérification envoyé avec succès, veuillez vérifier votre email',
  'user.login.sms.send-success': 'Code de vérification envoyé avec succès, veuillez vérifier le message texte',
  'user.login.remember-me': 'Connexion automatique',
  'user.login.forgot-password': 'Mot de passe oublié',
  'user.login.sign-in-with': 'Autres méthodes de connexion',
  'user.login.signup': 'Créer un compte',
  'user.login.login': 'Connexion',
  'user.register.register': "S'inscrire",
  'user.register.email.placeholder': 'Courriel',
  'user.register.password.placeholder': 'Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.',
  'user.register.password.popover-message': 'Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.',
  'user.register.confirm-password.placeholder': 'Confirmer le mot de passe',
  'user.register.get-verification-code': 'Obtenir le code de vérification',
  'user.register.sign-in': 'Connectez-vous en utilisant un compte existant',
  'user.register-result.msg': 'Votre compte : {email} Inscription réussie',
  'user.register-result.activation-email': "L'e-mail d'activation a été envoyé dans votre boîte mail et est valable 24 heures. Veuillez vous connecter rapidement à votre messagerie et cliquer sur le lien contenu dans l'e-mail pour activer votre compte.",
  'user.register-result.back-home': "Retour à la page d'accueil",
  'user.register-result.view-mailbox': 'Vérifiez votre boîte aux lettres',
  'user.email.required': 'Veuillez entrer votre adresse e-mail !',
  'user.email.wrong-format': "Le format de l'adresse e-mail est incorrect !",
  'user.userName.required': 'Veuillez saisir votre nom de compte ou votre adresse e-mail',
  'user.password.required': 'Veuillez entrer votre mot de passe !',
  'user.password.twice.msg': 'Les mots de passe saisis deux fois ne correspondent pas !',
  'user.password.strength.msg': "Le mot de passe n'est pas assez fort",
  'user.password.strength.strong': 'Force : Forte',
  'user.password.strength.medium': 'Force : moyenne',
  'user.password.strength.low': 'Force : faible',
  'user.password.strength.short': 'Force : trop courte',
  'user.confirm-password.required': 'Veuillez confirmer votre mot de passe !',
  'user.phone-number.required': 'Veuillez saisir le bon numéro de téléphone portable',
  'user.phone-number.wrong-format': 'Le format du numéro de téléphone portable est erroné !',
  'user.verification-code.required': 'Veuillez entrer le code de vérification !',
  'user.captcha.required': 'Veuillez saisir le code de vérification graphique !',
  'user.login.infos': "QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, scores et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.",
  'user.login.tab-login-web3': 'Connexion Web3',
  'user.login.web3.tip': "Connexion par signature à l'aide du portefeuille",
  'user.login.web3.connect': 'Connectez le portefeuille et connectez-vous',
  'user.login.web3.no-wallet': 'Portefeuille non détecté',
  'user.login.web3.no-address': 'Adresse du portefeuille non obtenue',
  'user.login.web3.nonce-failed': "Impossible d'obtenir un nombre aléatoire",
  'user.login.web3.verify-failed': 'La vérification de la signature a échoué',
  'user.login.web3.success': 'Connexion réussie',
  'user.login.web3.failed': 'Échec de la connexion au portefeuille',
  'nav.no_wallet': 'Portefeuille non détecté',
  'nav.copy': 'Copier',
  'nav.copy_success': 'Copié avec succès',
  'user.login.oauth.google': 'Connectez-vous avec Google',
  'user.login.oauth.github': 'Connectez-vous avec GitHub',
  'user.login.oauth.loading': "Redirection vers la page d'autorisation...",
  'user.login.oauth.failed': 'Échec de la connexion OAuth',
  'user.login.oauth.get-url-failed': "Échec de l'obtention du lien d'autorisation",
  'user.login.subtitle': 'Informations quantitatives sur les marchés mondiaux',
  'user.login.legal.title': 'Mentions légales',
  'user.login.legal.view': 'Voir les mentions légales',
  'user.login.legal.collapse': 'Réduire les mentions légales',
  'user.login.legal.agree': "J'ai lu et j'accepte les mentions légales",
  'user.login.legal.required': "Veuillez d'abord lire et vérifier les mentions légales",
  'user.login.legal.content': "QuantDinger est un outil auxiliaire d'analyse boursière multi-agents d'IA et n'a pas de qualifications en conseil en investissement en valeurs mobilières. Tous les résultats d'analyse, notes et avis de référence de la plateforme sont automatiquement générés par l'IA sur la base de données historiques et sont utilisés uniquement à des fins d'apprentissage, de recherche et d'échange technique, et ne constituent aucun conseil d'investissement ou base de prise de décision. L'investissement en actions implique divers risques tels que le risque de marché, le risque de liquidité, le risque politique, etc., qui peuvent entraîner une perte du principal. Les utilisateurs doivent prendre des décisions indépendantes en fonction de leur propre tolérance au risque, et tout comportement d'investissement et conséquences découlant de l'utilisation de cet outil seront à la charge de l'utilisateur. Le marché est risqué et les investissements doivent être prudents.",
  'user.login.privacy.title': 'Politique de confidentialité des utilisateurs',
  'user.login.privacy.view': 'Afficher la politique de confidentialité des utilisateurs',
  'user.login.privacy.collapse': 'Fermer les conditions de confidentialité des utilisateurs',
  'user.login.privacy.content': "Nous accordons une grande importance à votre vie privée et à la protection de vos données. 1) Portée de la collecte : seules les informations nécessaires à la mise en œuvre de la fonction (telles que l'e-mail, le numéro de téléphone mobile, l'indicatif régional, l'adresse du portefeuille Web3) ainsi que les journaux et informations sur l'appareil nécessaires sont collectés. 2) Objectif d'utilisation : Pour la connexion au compte et la vérification de la sécurité, la fourniture de fonctions de service, le dépannage et les exigences de conformité. 3) Stockage et sécurité : les données sont cryptées et stockées, et les autorisations et mesures de contrôle d'accès nécessaires sont prises pour tenter d'empêcher tout accès non autorisé, toute divulgation ou toute perte. 4) Partage avec des tiers : sauf si les lois et réglementations l'exigent ou si cela est nécessaire à l'exécution des services, vos informations personnelles ne seront pas partagées avec des tiers ; si des services tiers (tels que des portefeuilles, des fournisseurs de services SMS) sont impliqués, ils ne seront traités que dans la mesure minimale nécessaire à la mise en œuvre de la fonction. 5) Cookies/stockage local : utilisés pour le statut de connexion et la maintenance de session nécessaire (tels que les jetons, PHPSESSID), vous pouvez les effacer ou les restreindre dans le navigateur. 6) Droits personnels : Vous pouvez exercer vos droits d'information, de rectification, de suppression, de retrait de consentement, etc. conformément aux lois et règlements. 7) Modifications et avis : lorsque ces conditions seront mises à jour, elles seront affichées bien en évidence sur la page. En continuant à utiliser ce service, vous êtes réputé avoir lu et accepté le contenu mis à jour. Si vous n'acceptez pas ces Conditions ou toute mise à jour de celles-ci, veuillez cesser d'utiliser le Service et nous contacter.",
  'account.basicInfo': 'Informations de base',
  'account.id': 'Identifiant utilisateur',
  'account.username': "Nom d'utilisateur",
  'account.nickname': 'Surnom',
  'account.email': 'Courriel',
  'account.mobile': 'Numéro de téléphone portable',
  'account.web3address': 'adresse du portefeuille',
  'account.pid': 'Identifiant du référent',
  'account.level': 'Niveau utilisateur',
  'account.money': 'équilibre',
  'account.qdtBalance': 'Solde QDT',
  'account.score': 'Points',
  'account.createtime': "Heure d'inscription",
  'account.inviteLink': "Lien d'invitation",
  'account.recharge': 'Recharger',
  'account.rechargeTip': 'Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.',
  'account.qrCodePlaceholder': 'Espace réservé au code QR (émulation)',
  'account.rechargeAmount': 'Montant de la recharge',
  'account.enterAmount': 'Veuillez saisir le montant de la recharge',
  'account.rechargeHint': 'Montant minimum du dépôt : 1 QDT',
  'account.confirmRecharge': 'Confirmer la recharge',
  'account.enterValidAmount': 'Veuillez saisir un montant de recharge valide',
  'account.rechargeSuccess': 'Recharge réussie ! Déposé {montant} QDT',
  'account.settings.menuMap.basic': 'Paramètres de base',
  'account.settings.menuMap.security': 'Paramètres de sécurité',
  'account.settings.menuMap.notification': 'Notification de nouveau message',
  'account.settings.menuMap.moneyLog': 'Détails du fonds',
  'account.moneyLog.empty': "Aucun détail sur le fonds pour l'instant",
  'account.moneyLog.total': '{total} enregistrements au total',
  'account.moneyLog.type.purchase': "indicateur d'achat",
  'account.moneyLog.type.recharge': 'Recharger',
  'account.moneyLog.type.refund': 'Remboursement',
  'account.moneyLog.type.reward': 'récompense',
  'account.moneyLog.type.income': "Revenu de l'indicateur",
  'account.moneyLog.type.commission': 'Frais de gestion de la plateforme',
  'wallet.balance': 'Solde QDT',
  'wallet.recharge': 'Recharger',
  'wallet.withdraw': "Retirer de l'argent",
  'wallet.filter': 'Filtrer',
  'wallet.reset': 'réinitialiser',
  'wallet.totalRecharge': 'Recharge accumulée',
  'wallet.totalWithdraw': 'Retraits cumulés',
  'wallet.totalIncome': 'Revenu cumulé',
  'wallet.records': 'Enregistrements de transactions et détails des fonds',
  'wallet.tradingRecords': 'historique des transactions',
  'wallet.moneyLog': 'Détails du fonds',
  'wallet.rechargeTip': 'Veuillez utiliser WeChat ou Alipay pour scanner le code QR ci-dessous pour recharger.',
  'wallet.qrCodePlaceholder': 'Espace réservé au code QR (émulation)',
  'wallet.rechargeAmount': 'Montant de la recharge',
  'wallet.enterAmount': 'Veuillez saisir le montant de la recharge',
  'wallet.rechargeHint': 'Montant minimum du dépôt : 1 QDT',
  'wallet.confirmRecharge': 'Confirmer la recharge',
  'wallet.enterValidAmount': 'Veuillez saisir un montant de recharge valide',
  'wallet.rechargeSuccess': 'Recharge réussie ! Déposé {montant} QDT',
  'wallet.rechargeFailed': 'La recharge a échoué',
  'wallet.withdrawTip': "Veuillez saisir le montant du retrait et l'adresse de retrait",
  'wallet.withdrawAmount': 'Montant du retrait',
  'wallet.enterWithdrawAmount': 'Veuillez saisir le montant du retrait',
  'wallet.withdrawHint': 'Montant minimum de retrait : 1 QDT',
  'wallet.withdrawAddress': 'Adresse de retrait (facultatif)',
  'wallet.enterWithdrawAddress': "Veuillez saisir l'adresse de retrait",
  'wallet.confirmWithdraw': 'Confirmer le retrait',
  'wallet.enterValidWithdrawAmount': 'Veuillez saisir un montant de retrait valide',
  'wallet.insufficientBalance': 'Solde insuffisant',
  'wallet.withdrawSuccess': 'Retrait réussi ! Retiré {montant} QDT',
  'wallet.withdrawFailed': 'Échec du retrait',
  'wallet.noTradingRecords': "Aucun enregistrement de transaction pour l'instant",
  'wallet.noMoneyLog': "Aucun détail sur le fonds pour l'instant",
  'wallet.loadTradingRecordsFailed': 'Échec du chargement des enregistrements de transaction',
  'wallet.loadMoneyLogFailed': 'Échec du chargement des détails du fonds',
  'wallet.moneyLogTotal': '{total} enregistrements au total',
  'wallet.moneyLogTypeTitle': 'Tapez',
  'wallet.moneyLogType.all': 'Tous types',
  'wallet.table.time': 'temps',
  'wallet.table.type': 'Tapez',
  'wallet.table.price': 'prix',
  'wallet.table.amount': 'Quantité',
  'wallet.table.money': 'Montant',
  'wallet.table.balance': 'équilibre',
  'wallet.table.memo': 'Remarques',
  'wallet.table.value': 'valeur',
  'wallet.table.profit': 'Profits et pertes',
  'wallet.table.commission': 'frais de traitement',
  'wallet.table.total': '{total} enregistrements au total',
  'wallet.tradeType.buy': 'acheter',
  'wallet.tradeType.sell': 'vendre',
  'wallet.tradeType.liquidation': 'liquidation forcée',
  'wallet.tradeType.openLong': 'Ouvert longtemps',
  'wallet.tradeType.addLong': 'Gadot',
  'wallet.tradeType.closeLong': 'Pinduo',
  'wallet.tradeType.closeLongStop': 'Stop loss et long',
  'wallet.tradeType.closeLongProfit': 'Prenez des bénéfices et gagnez plus de niveaux',
  'wallet.tradeType.openShort': 'Ouvert court',
  'wallet.tradeType.addShort': 'ajouter un court',
  'wallet.tradeType.closeShort': 'vide',
  'wallet.tradeType.closeShortStop': 'Arrêter la perte',
  'wallet.tradeType.closeShortProfit': 'Prenez des bénéfices et clôturez à découvert',
  'wallet.moneyLogType.purchase': "indicateur d'achat",
  'wallet.moneyLogType.recharge': 'Recharger',
  'wallet.moneyLogType.withdraw': "Retirer de l'argent",
  'wallet.moneyLogType.refund': 'Remboursement',
  'wallet.moneyLogType.reward': 'récompense',
  'wallet.moneyLogType.income': 'revenu',
  'wallet.moneyLogType.commission': 'frais de traitement',
  'wallet.web3Address.required': "Veuillez d'abord remplir l'adresse du portefeuille Web3",
  'wallet.web3Address.requiredDescription': "Avant de recharger, vous devez lier l'adresse de votre portefeuille Web3 pour recevoir la recharge.",
  'wallet.web3Address.placeholder': "Veuillez saisir l'adresse de votre portefeuille Web3 (en commençant par 0x)",
  'wallet.web3Address.save': "Enregistrer l'adresse du portefeuille",
  'wallet.web3Address.saveSuccess': 'Adresse du portefeuille enregistrée avec succès',
  'wallet.web3Address.saveFailed': "Échec de l'enregistrement de l'adresse du portefeuille",
  'wallet.web3Address.invalidFormat': 'Veuillez saisir une adresse de portefeuille Web3 valide (format Ethereum : 42 caractères commençant par 0x, ou format TRC20 : 34 caractères commençant par T)',
  'wallet.selectCoin': 'Sélectionnez la devise',
  'wallet.selectChain': 'chaîne de sélection',
  'wallet.chain.eth': 'ETH(ERC20)',
  'wallet.chain.trc20': 'TRC20',
  'wallet.chain.bsc': 'BSC',
  'wallet.targetQdtAmount': 'Le montant de QDT que vous souhaitez échanger (facultatif)',
  'wallet.targetQdtAmount.placeholder': 'Veuillez saisir la quantité de QDT que vous souhaitez utiliser, le prix actuel du QDT : {price} USDT',
  'wallet.targetQdtAmount.requiredUsdt': 'Besoin de recharge : {amount} USDT',
  'wallet.rechargeAddress': 'Adresse de recharge',
  'wallet.copyAddress': 'Copier',
  'wallet.copySuccess': 'Copiez avec succès !',
  'wallet.copyFailed': 'Échec de la copie, veuillez copier manuellement',
  'wallet.rechargeAddressHint': "Veuillez vous assurer d'utiliser {chain} pour déposer {coin} à cette adresse",
  'wallet.qdtPrice.loading': 'Chargement...',
  'wallet.rechargeTip.new': 'Veuillez sélectionner la devise et la chaîne, puis scannez le code QR ci-dessous pour recharger',
  'wallet.exchangeRate': '1 QDT ≈ {taux} USDT',
  'wallet.withdrawableAmount': 'Montant des liquidités disponibles',
  'wallet.totalBalance': 'solde total',
  'wallet.insufficientWithdrawable': 'Le montant en espèces pouvant être retiré est insuffisant. Le montant actuel qui peut être retiré est : {amount} QDT',
  'wallet.withdrawAddressRequired': "Veuillez saisir l'adresse de retrait",
  'wallet.withdrawAddressHint': "Veuillez vous assurer que l'adresse est correcte. Après le retrait, il ne peut être révoqué.",
  'wallet.withdrawSubmitSuccess': "Demande de retrait soumise avec succès, veuillez attendre l'examen",
  'menu.footer.contactUs': 'Contactez-nous',
  'menu.footer.getSupport': "Obtenir de l'aide",
  'menu.footer.socialAccounts': 'compte social',
  'menu.footer.userAgreement': "Contrat d'utilisation",
  'menu.footer.privacyPolicy': 'politique de confidentialité',
  'menu.footer.support': 'Assistance',
  'menu.footer.featureRequest': 'Demande de fonctionnalité',
  'menu.footer.email': 'Courriel',
  'menu.footer.liveChat': 'Chat en direct 24h/24 et 7j/7',
  'dashboard.analysis.title': 'Analyse multidimensionnelle',
  'dashboard.analysis.subtitle': "Plateforme d'analyse financière complète basée sur l'IA",
  'dashboard.analysis.selectSymbol': 'Sélectionnez ou saisissez le code sous-jacent',
  'dashboard.analysis.selectModel': 'Sélectionnez le modèle',
  'dashboard.analysis.startAnalysis': "Démarrer l'analyse",
  'dashboard.analysis.history': 'Histoire',
  'dashboard.analysis.tab.overview': 'analyse complète',
  'dashboard.analysis.tab.fundamental': 'Fondamentaux',
  'dashboard.analysis.tab.technical': 'technologie',
  'dashboard.analysis.tab.news': 'Actualités',
  'dashboard.analysis.tab.sentiment': 'émotions',
  'dashboard.analysis.tab.risk': 'risque',
  'dashboard.analysis.tab.debate': 'Le débat long-court',
  'dashboard.analysis.tab.decision': 'décision finale',
  'dashboard.analysis.empty.selectSymbol': "Sélectionnez une cible pour démarrer l'analyse",
  'dashboard.analysis.empty.selectSymbolDesc': "Sélectionnez dans la liste d'actions auto-sélectionnée ou entrez le code sous-jacent pour obtenir un rapport d'analyse IA multidimensionnel",
  'dashboard.analysis.empty.startAnalysis': "Cliquez sur le bouton \"Démarrer l'analyse\" pour effectuer une analyse multidimensionnelle",
  'dashboard.analysis.empty.startAnalysisDesc': "Nous vous fournirons une analyse complète portant sur plusieurs dimensions telles que les fondamentaux, la technologie, l'actualité, le sentiment et le risque.",
  'dashboard.analysis.empty.noData': "Il n'y a actuellement aucune donnée d'analyse {type}, veuillez d'abord effectuer une analyse complète",
  'dashboard.analysis.empty.noWatchlist': "Il n'y a actuellement aucun titre auto-sélectionné",
  'dashboard.analysis.empty.noHistory': "Pas encore d'historique",
  'dashboard.analysis.empty.watchlistHint': "Il n'y a actuellement aucun stock auto-sélectionné, veuillez d'abord",
  'dashboard.analysis.empty.noDebateData': "Aucune donnée de débat pour l'instant",
  'dashboard.analysis.empty.noDecisionData': "Aucune donnée de décision pour l'instant",
  'dashboard.analysis.empty.selectAgent': "Veuillez sélectionner un agent pour afficher les résultats de l'analyse",
  'dashboard.analysis.loading.analyzing': 'Analyse, veuillez patienter...',
  'dashboard.analysis.loading.fundamental': 'Analyser les données fondamentales...',
  'dashboard.analysis.loading.technical': 'Analyse des indicateurs techniques...',
  'dashboard.analysis.loading.news': "Analyser les données d'actualité...",
  'dashboard.analysis.loading.sentiment': 'Analyser le sentiment du marché...',
  'dashboard.analysis.loading.risk': 'Évaluer le risque...',
  'dashboard.analysis.loading.debate': 'Le débat long-court est en cours...',
  'dashboard.analysis.loading.decision': 'Générer la décision finale...',
  'dashboard.analysis.score.overall': 'Note globale',
  'dashboard.analysis.score.recommendation': 'conseil en investissement',
  'dashboard.analysis.score.confidence': 'Confiance',
  'dashboard.analysis.dimension.fundamental': 'Fondamentaux',
  'dashboard.analysis.dimension.technical': 'technologie',
  'dashboard.analysis.dimension.news': 'Actualités',
  'dashboard.analysis.dimension.sentiment': 'émotions',
  'dashboard.analysis.dimension.risk': 'risque',
  'dashboard.analysis.card.dimensionScores': 'Notes pour chaque dimension',
  'dashboard.analysis.card.overviewReport': "Rapport d'analyse complet",
  'dashboard.analysis.card.financialMetrics': 'indicateurs financiers',
  'dashboard.analysis.card.fundamentalReport': "Rapport d'analyse fondamentale",
  'dashboard.analysis.card.technicalIndicators': 'Indicateurs techniques',
  'dashboard.analysis.card.technicalReport': "rapport d'analyse technique",
  'dashboard.analysis.card.newsList': 'Actualités connexes',
  'dashboard.analysis.card.newsReport': "Rapport d'analyse de l'actualité",
  'dashboard.analysis.card.sentimentIndicators': 'indicateur de sentiment',
  'dashboard.analysis.card.sentimentReport': "Rapport d'analyse des sentiments",
  'dashboard.analysis.card.riskMetrics': 'indicateurs de risque',
  'dashboard.analysis.card.riskReport': "rapport d'évaluation des risques",
  'dashboard.analysis.card.bullView': 'Vue haussière (Taureau)',
  'dashboard.analysis.card.bearView': 'Vue baissière (ours)',
  'dashboard.analysis.card.researchConclusion': 'Conclusion du chercheur',
  'dashboard.analysis.card.traderPlan': 'plan de commerçant',
  'dashboard.analysis.card.riskDebate': 'Débat en commission des risques',
  'dashboard.analysis.card.finalDecision': 'Décision finale',
  'dashboard.analysis.card.tradePlanDetail': 'Détails du plan de trading',
  'dashboard.analysis.tradingPlan.entry_price': "Prix d'entrée",
  'dashboard.analysis.tradingPlan.position_size': 'Taille du poste',
  'dashboard.analysis.tradingPlan.stop_loss': 'arrêter les pertes',
  'dashboard.analysis.tradingPlan.take_profit': 'Profiter',
  'dashboard.analysis.label.confidence': 'Confiance',
  'dashboard.analysis.label.keyPoints': 'points essentiels',
  'dashboard.analysis.label.riskWarning': 'Avertissement de risque',
  'dashboard.analysis.risk.risky': 'Risqué',
  'dashboard.analysis.risk.neutral': 'Point de vue neutre (Neutre)',
  'dashboard.analysis.risk.safe': 'Vue conservatrice (sûr)',
  'dashboard.analysis.risk.conclusion': 'Conclusion',
  'dashboard.analysis.feature.fundamental': 'analyse fondamentale',
  'dashboard.analysis.feature.technical': 'analyse technique',
  'dashboard.analysis.feature.news': "analyse de l'actualité",
  'dashboard.analysis.feature.sentiment': 'analyse des sentiments',
  'dashboard.analysis.feature.risk': 'évaluation des risques',
  'dashboard.analysis.watchlist.title': 'Ma sélection de titres',
  'dashboard.analysis.watchlist.add': 'ajouter',
  'dashboard.analysis.watchlist.addStock': 'ajouter du stock',
  'dashboard.analysis.modal.addStock.title': 'Ajouter des actions facultatives',
  'dashboard.analysis.modal.addStock.confirm': "D'accord",
  'dashboard.analysis.modal.addStock.cancel': 'Annuler',
  'dashboard.analysis.modal.addStock.market': 'type de marché',
  'dashboard.analysis.modal.addStock.marketPlaceholder': 'Veuillez sélectionner un marché',
  'dashboard.analysis.modal.addStock.marketRequired': 'Veuillez sélectionner le type de marché',
  'dashboard.analysis.modal.addStock.symbol': 'Code de stock',
  'dashboard.analysis.modal.addStock.symbolPlaceholder': 'Par exemple : AAPL, TSLA, GOOGL, 000001, BTC',
  'dashboard.analysis.modal.addStock.symbolRequired': 'Veuillez entrer le code de stock',
  'dashboard.analysis.modal.addStock.searchPlaceholder': 'Rechercher le code ou le nom de la cible',
  'dashboard.analysis.modal.addStock.searchOrInputPlaceholder': 'Recherchez ou saisissez le code sous-jacent (par exemple : AAPL, BTC/USDT, EUR/USD)',
  'dashboard.analysis.modal.addStock.searchOrInputHint': "Prend en charge la recherche d'objets dans la base de données ou la saisie directe du code (le système obtiendra automatiquement le nom)",
  'dashboard.analysis.modal.addStock.search': 'Rechercher',
  'dashboard.analysis.modal.addStock.searchResults': 'Résultats de la recherche',
  'dashboard.analysis.modal.addStock.hotSymbols': 'Cibles populaires',
  'dashboard.analysis.modal.addStock.noHotSymbols': "Aucune cible populaire pour l'instant",
  'dashboard.analysis.modal.addStock.selectedSymbol': 'Sélectionné',
  'dashboard.analysis.modal.addStock.pleaseSelectSymbol': "Veuillez d'abord sélectionner une cible",
  'dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol': "Veuillez sélectionner une cible ou saisir d'abord le code cible",
  'dashboard.analysis.modal.addStock.pleaseEnterSymbol': 'Veuillez entrer le code cible',
  'dashboard.analysis.modal.addStock.pleaseSelectMarket': "Veuillez d'abord sélectionner le type de marché",
  'dashboard.analysis.modal.addStock.searchFailed': 'La recherche a échoué, veuillez réessayer plus tard',
  'dashboard.analysis.modal.addStock.noSearchResults': 'Aucune cible correspondante trouvée',
  'dashboard.analysis.modal.addStock.willAutoFetchName': 'Le système obtiendra automatiquement le nom',
  'dashboard.analysis.modal.addStock.addDirectly': 'Ajouter directement',
  'dashboard.analysis.modal.addStock.nameWillBeFetched': 'Le nom sera récupéré automatiquement une fois ajouté',
  'dashboard.analysis.market.AShare': 'Un partage',
  'dashboard.analysis.market.USStock': 'Actions américaines',
  'dashboard.analysis.market.HShare': 'Actions de Hong Kong',
  'dashboard.analysis.market.Crypto': 'crypto-monnaie',
  'dashboard.analysis.market.Forex': 'Forex',
  'dashboard.analysis.market.Futures': 'Contrats à terme',
  'dashboard.analysis.modal.history.title': "Enregistrements d'analyse historique",
  'dashboard.analysis.modal.history.viewResult': 'Afficher les résultats',
  'dashboard.analysis.modal.history.completeTime': "temps d'achèvement",
  'dashboard.analysis.modal.history.error': 'Erreur',
  'dashboard.analysis.status.pending': 'En attente',
  'dashboard.analysis.status.processing': 'Traitement',
  'dashboard.analysis.status.completed': 'Terminé',
  'dashboard.analysis.status.failed': 'échoué',
  'dashboard.analysis.message.selectSymbol': "Veuillez d'abord sélectionner la cible",
  'dashboard.analysis.message.taskCreated': "La tâche d'analyse a été créée et est exécutée en arrière-plan...",
  'dashboard.analysis.message.analysisComplete': 'Analyse terminée',
  'dashboard.analysis.message.analysisCompleteCache': "Analyse terminée (à l'aide des données mises en cache)",
  'dashboard.analysis.message.analysisFailed': "L'analyse a échoué, veuillez réessayer plus tard",
  'dashboard.analysis.message.addStockSuccess': 'Ajouté avec succès',
  'dashboard.analysis.message.addStockFailed': "L'ajout a échoué",
  'dashboard.analysis.message.removeStockSuccess': 'Supprimé avec succès',
  'dashboard.analysis.message.removeStockFailed': 'Échec de la suppression',
  'dashboard.analysis.message.resumingAnalysis': "Reprise de la tâche d'analyse...",
  'dashboard.analysis.message.deleteSuccess': 'Supprimé avec succès',
  'dashboard.analysis.message.deleteFailed': 'Échec de la suppression',
  'dashboard.analysis.modal.history.delete': 'Supprimer',
  'dashboard.analysis.modal.history.deleteConfirm': "Êtes-vous sûr de vouloir supprimer cet enregistrement d'analyse ?",
  'dashboard.analysis.test': 'Magasin n° {no}, route Gongzhuan',
  'dashboard.analysis.introduce': "Description de l'indicateur",
  'dashboard.analysis.total-sales': 'ventes totales',
  'dashboard.analysis.day-sales': 'Ventes quotidiennes moyennes￥',
  'dashboard.analysis.visits': 'Visites',
  'dashboard.analysis.visits-trend': 'Tendances du trafic',
  'dashboard.analysis.visits-ranking': 'Classement des visites en magasin',
  'dashboard.analysis.day-visits': 'Visites quotidiennes',
  'dashboard.analysis.week': 'Hebdomadaire, année sur année',
  'dashboard.analysis.day': 'Année après année',
  'dashboard.analysis.payments': 'Nombre de paiements',
  'dashboard.analysis.conversion-rate': 'taux de conversion',
  'dashboard.analysis.operational-effect': "Effets sur l'activité opérationnelle",
  'dashboard.analysis.sales-trend': 'tendances des ventes',
  'dashboard.analysis.sales-ranking': 'Classement des ventes en magasin',
  'dashboard.analysis.all-year': "Toute l'année",
  'dashboard.analysis.all-month': 'ce mois-ci',
  'dashboard.analysis.all-week': 'cette semaine',
  'dashboard.analysis.all-day': "aujourd'hui",
  'dashboard.analysis.search-users': "Nombre d'utilisateurs de recherche",
  'dashboard.analysis.per-capita-search': 'Recherches par habitant',
  'dashboard.analysis.online-top-search': 'Recherches populaires en ligne',
  'dashboard.analysis.the-proportion-of-sales': 'Proportion de la catégorie de ventes',
  'dashboard.analysis.dropdown-option-one': 'Première opération',
  'dashboard.analysis.dropdown-option-two': 'Opération 2',
  'dashboard.analysis.channel.all': 'Toutes les chaînes',
  'dashboard.analysis.channel.online': 'en ligne',
  'dashboard.analysis.channel.stores': 'magasin',
  'dashboard.analysis.sales': 'ventes',
  'dashboard.analysis.traffic': 'flux de passagers',
  'dashboard.analysis.table.rank': 'Classement',
  'dashboard.analysis.table.search-keyword': 'Rechercher des mots-clés',
  'dashboard.analysis.table.users': "Nombre d'utilisateurs",
  'dashboard.analysis.table.weekly-range': 'Augmentation hebdomadaire',
  'dashboard.indicator.selectSymbol': 'Sélectionnez ou saisissez le code sous-jacent',
  'dashboard.indicator.emptyWatchlistHint': "Il n'y a actuellement aucun titre auto-sélectionné, veuillez d'abord les ajouter",
  'dashboard.indicator.hint.selectSymbol': "Veuillez sélectionner une cible pour démarrer l'analyse",
  'dashboard.indicator.hint.selectSymbolDesc': 'Sélectionnez ou entrez un code boursier dans la zone de recherche ci-dessus pour afficher les graphiques K-line et les indicateurs techniques.',
  'dashboard.indicator.retry': 'Réessayez',
  'dashboard.indicator.panel.title': 'Indicateurs techniques',
  'dashboard.indicator.panel.realtimeOn': 'Désactivez les mises à jour en temps réel',
  'dashboard.indicator.panel.realtimeOff': 'Activer les mises à jour en temps réel',
  'dashboard.indicator.panel.themeLight': 'Passer au thème sombre',
  'dashboard.indicator.panel.themeDark': 'Passer au thème clair',
  'dashboard.indicator.section.enabled': 'Activé',
  'dashboard.indicator.section.added': "Indicateurs que j'ai ajoutés",
  'dashboard.indicator.section.custom': 'Indicateurs créés par vous-même',
  'dashboard.indicator.section.bought': "Indicateurs que j'ai achetés",
  'dashboard.indicator.section.myCreated': "Indicateurs que j'ai créés",
  'dashboard.indicator.empty': "Il n'y a pas encore d'indicateur, veuillez d'abord ajouter ou créer un indicateur",
  'dashboard.indicator.buy': "indicateur d'achat",
  'dashboard.indicator.action.start': 'commencer',
  'dashboard.indicator.action.stop': 'Fermer',
  'dashboard.indicator.action.edit': 'Modifier',
  'dashboard.indicator.action.delete': 'Supprimer',
  'dashboard.indicator.action.backtest': 'backtest',
  'dashboard.indicator.status.normal': 'normal',
  'dashboard.indicator.status.normalPermanent': 'Normal (valable en permanence)',
  'dashboard.indicator.status.expired': 'Expiré',
  'dashboard.indicator.expiry.permanent': 'Valable en permanence',
  'dashboard.indicator.expiry.noExpiry': "Pas de délai d'expiration",
  'dashboard.indicator.expiry.expired': 'Expiré : {date}',
  'dashboard.indicator.expiry.expiresOn': "Heure d'expiration : {date}",
  'dashboard.indicator.delete.confirmTitle': 'Confirmer la suppression',
  'dashboard.indicator.delete.confirmContent': "Êtes-vous sûr de vouloir supprimer l'indicateur \"{name}\" ? Cette opération est irréversible.",
  'dashboard.indicator.delete.confirmOk': 'Supprimer',
  'dashboard.indicator.delete.confirmCancel': 'Annuler',
  'dashboard.indicator.delete.success': 'Supprimer avec succès',
  'dashboard.indicator.delete.failed': 'Échec de la suppression',
  'dashboard.indicator.save.success': 'Enregistré avec succès',
  'dashboard.indicator.save.failed': "Échec de l'enregistrement",
  'dashboard.indicator.error.loadWatchlistFailed': 'Échec du chargement des stocks facultatifs',
  'dashboard.indicator.error.chartNotReady': "Le composant graphique n'est pas initialisé. Veuillez d'abord sélectionner la cible et attendre que le graphique se charge.",
  'dashboard.indicator.error.chartMethodNotReady': "La méthode du composant graphique n'est pas prête, veuillez réessayer plus tard",
  'dashboard.indicator.error.chartExecuteNotReady': "La méthode d'exécution du composant graphique n'est pas prête, veuillez réessayer plus tard",
  'dashboard.indicator.error.parseFailed': "Impossible d'analyser le code Python",
  'dashboard.indicator.error.parseFailedCheck': "Impossible d'analyser le code Python, veuillez vérifier le format du code",
  'dashboard.indicator.error.addIndicatorFailed': "Échec de l'ajout de l'indicateur",
  'dashboard.indicator.error.runIndicatorFailed': "L'indicateur de fonctionnement a échoué",
  'dashboard.indicator.error.pleaseLogin': "Veuillez d'abord vous connecter",
  'dashboard.indicator.error.loadDataFailed': 'Le chargement des données a échoué',
  'dashboard.indicator.error.loadDataFailedDesc': 'Veuillez vérifier la connexion réseau',
  'dashboard.indicator.error.pythonEngineFailed': "Le moteur Python n'a pas pu se charger et la fonction d'indicateur peut ne pas être disponible.",
  'dashboard.indicator.error.chartInitFailed': "L'initialisation du graphique a échoué",
  'dashboard.indicator.warning.enterCode': "Veuillez d'abord saisir le code de l'indicateur",
  'dashboard.indicator.warning.pyodideLoadFailed': "Le moteur Python n'a pas pu se charger",
  'dashboard.indicator.warning.pyodideLoadFailedDesc': "Cette fonctionnalité n'est pas disponible dans votre région ou environnement réseau actuel",
  'dashboard.indicator.warning.chartNotInitialized': "Le graphique n'est pas initialisé et l'outil de dessin au trait ne peut pas être utilisé.",
  'dashboard.indicator.success.runIndicator': "L'indicateur s'exécute avec succès",
  'dashboard.indicator.success.clearDrawings': 'Tous les dessins au trait effacés',
  'dashboard.indicator.sma': 'SMA (combinaison de moyenne mobile)',
  'dashboard.indicator.ema': 'EMA (combinaison de moyennes mobiles exponentielles)',
  'dashboard.indicator.rsi': 'RSI (force relative)',
  'dashboard.indicator.macd': 'MACD',
  'dashboard.indicator.bb': 'Bandes de Bollinger',
  'dashboard.indicator.atr': 'ATR (plage réelle moyenne)',
  'dashboard.indicator.cci': 'CCI (indice des canaux de matières premières)',
  'dashboard.indicator.williams': 'Williams %R (indicateur Williams)',
  'dashboard.indicator.mfi': 'IMF (indice de flux monétaire)',
  'dashboard.indicator.adx': 'ADX (indice de tendance moyen)',
  'dashboard.indicator.obv': "OBV (vague d'énergie)",
  'dashboard.indicator.adosc': "ADOSC (oscillateur d'accumulation/répartition)",
  'dashboard.indicator.ad': "AD (ligne d'accumulation/distribution)",
  'dashboard.indicator.kdj': 'KDJ (indicateur stochastique)',
  'dashboard.indicator.signal.buy': 'ACHETER',
  'dashboard.indicator.signal.sell': 'VENDRE',
  'dashboard.indicator.signal.supertrendBuy': 'Acheter SuperTrend',
  'dashboard.indicator.signal.supertrendSell': 'Vente SuperTrend',
  'dashboard.indicator.chart.kline': 'Ligne K',
  'dashboard.indicator.chart.volume': 'Volume',
  'dashboard.indicator.chart.uptrend': 'Tendance à la hausse',
  'dashboard.indicator.chart.downtrend': 'Tendance à la baisse',
  'dashboard.indicator.tooltip.time': 'temps',
  'dashboard.indicator.tooltip.open': 'ouvert',
  'dashboard.indicator.tooltip.close': 'recevoir',
  'dashboard.indicator.tooltip.high': 'haut',
  'dashboard.indicator.tooltip.low': 'faible',
  'dashboard.indicator.tooltip.volume': 'Volume',
  'dashboard.indicator.drawing.line': 'segment de ligne',
  'dashboard.indicator.drawing.horizontalLine': 'ligne horizontale',
  'dashboard.indicator.drawing.verticalLine': 'ligne verticale',
  'dashboard.indicator.drawing.ray': 'rayon',
  'dashboard.indicator.drawing.straightLine': 'ligne droite',
  'dashboard.indicator.drawing.parallelLine': 'lignes parallèles',
  'dashboard.indicator.drawing.priceLine': 'ligne de prix',
  'dashboard.indicator.drawing.priceChannel': 'canal de prix',
  'dashboard.indicator.drawing.fibonacciLine': 'Lignes de Fibonacci',
  'dashboard.indicator.drawing.clearAll': 'Effacer tous les dessins au trait',
  'dashboard.indicator.market.AShare': 'Un partage',
  'dashboard.indicator.market.USStock': 'Actions américaines',
  'dashboard.indicator.market.HShare': 'Actions de Hong Kong',
  'dashboard.indicator.market.Crypto': 'crypto-monnaie',
  'dashboard.indicator.market.Forex': 'Forex',
  'dashboard.indicator.market.Futures': 'Contrats à terme',
  'dashboard.indicator.create': 'Créer un indicateur',
  'dashboard.indicator.editor.title': 'Créer/modifier des indicateurs',
  'dashboard.indicator.editor.name': "Nom de l'indicateur",
  'dashboard.indicator.editor.nameRequired': "Veuillez saisir le nom de l'indicateur",
  'dashboard.indicator.editor.namePlaceholder': "Veuillez saisir le nom de l'indicateur",
  'dashboard.indicator.editor.description': "Description de l'indicateur",
  'dashboard.indicator.editor.descriptionPlaceholder': "Veuillez saisir une description de l'indicateur (facultatif)",
  'dashboard.indicator.editor.code': 'Code Python',
  'dashboard.indicator.editor.codeRequired': "Veuillez entrer le code de l'indicateur",
  'dashboard.indicator.editor.codePlaceholder': 'Veuillez saisir le code Python',
  'dashboard.indicator.editor.run': 'courir',
  'dashboard.indicator.editor.runHint': "Cliquez sur le bouton Exécuter pour prévisualiser l'effet de l'indicateur sur le graphique K-line",
  'dashboard.indicator.editor.guide': 'Guide de développement',
  'dashboard.indicator.editor.guideTitle': "Guide de développement d'indicateurs Python",
  'dashboard.indicator.editor.save': 'enregistrer',
  'dashboard.indicator.editor.cancel': 'Annuler',
  'dashboard.indicator.editor.unnamed': 'Indicateur sans nom',
  'dashboard.indicator.editor.publishToCommunity': 'Publier sur la communauté',
  'dashboard.indicator.editor.publishToCommunityHint': 'Une fois publié, les autres utilisateurs peuvent visualiser et utiliser votre indicateur dans la communauté',
  'dashboard.indicator.editor.indicatorType': "Type d'indicateur",
  'dashboard.indicator.editor.indicatorTypeRequired': "Veuillez sélectionner le type d'indicateur",
  'dashboard.indicator.editor.indicatorTypePlaceholder': "Veuillez sélectionner le type d'indicateur",
  'dashboard.indicator.editor.previewImage': 'Aperçu',
  'dashboard.indicator.editor.uploadImage': 'Télécharger des photos',
  'dashboard.indicator.editor.previewImageHint': 'Taille recommandée : 800 x 400, pas plus de 2 Mo',
  'dashboard.indicator.editor.pricing': 'Prix de vente (QDT)',
  'dashboard.indicator.editor.pricingType.free': 'gratuit',
  'dashboard.indicator.editor.pricingType.permanent': 'permanent',
  'dashboard.indicator.editor.pricingType.monthly': 'paiement mensuel',
  'dashboard.indicator.editor.price': 'prix',
  'dashboard.indicator.editor.priceRequired': 'Veuillez entrer le prix',
  'dashboard.indicator.editor.pricePlaceholder': 'Veuillez entrer le prix',
  'dashboard.indicator.editor.pricingHint': "Bien que le prix des indicateurs gratuits soit de 0, la plateforme vous récompensera (QDT) en fonction de votre utilisation de l'indicateur et de votre taux d'éloges.",
  'dashboard.indicator.editor.aiGenerate': 'Génération intelligente',
  'dashboard.indicator.editor.aiPromptPlaceholder': "Dites-moi vos idées et je générerai le code de l'indicateur Python pour vous",
  'dashboard.indicator.editor.aiGenerateBtn': "Code généré par l'IA",
  'dashboard.indicator.editor.aiPromptRequired': 'Veuillez entrer vos pensées',
  'dashboard.indicator.editor.aiGenerateSuccess': 'Génération de code réussie',
  'dashboard.indicator.editor.aiGenerateError': 'Échec de la génération du code, veuillez réessayer plus tard',
  'dashboard.indicator.backtest.title': 'Backtest des indicateurs',
  'dashboard.indicator.backtest.config': 'Paramètres de backtest',
  'dashboard.indicator.backtest.startDate': 'date de début',
  'dashboard.indicator.backtest.endDate': 'date de fin',
  'dashboard.indicator.backtest.selectStartDate': 'Sélectionnez la date de début',
  'dashboard.indicator.backtest.selectEndDate': 'Sélectionnez la date de fin',
  'dashboard.indicator.backtest.startDateRequired': 'Veuillez sélectionner une date de début',
  'dashboard.indicator.backtest.endDateRequired': 'Veuillez sélectionner une date de fin',
  'dashboard.indicator.backtest.initialCapital': 'Capital initial',
  'dashboard.indicator.backtest.initialCapitalRequired': 'Veuillez saisir les fonds initiaux',
  'dashboard.indicator.backtest.commission': 'Frais de traitement',
  'dashboard.indicator.backtest.leverage': 'Ratio de levier',
  'dashboard.indicator.backtest.tradeDirection': 'Orientation commerciale',
  'dashboard.indicator.backtest.longOnly': 'Allez-y longtemps',
  'dashboard.indicator.backtest.shortOnly': 'court',
  'dashboard.indicator.backtest.both': 'Bidirectionnel',
  'dashboard.indicator.backtest.run': 'Commencer le backtest',
  'dashboard.indicator.backtest.rerun': 'Backtester à nouveau',
  'dashboard.indicator.backtest.close': 'Fermer',
  'dashboard.indicator.backtest.running': 'Backtest des indicateurs en cours...',
  'dashboard.indicator.backtest.results': 'Résultats du backtest',
  'dashboard.indicator.backtest.totalReturn': 'rendement total',
  'dashboard.indicator.backtest.annualReturn': 'revenu annualisé',
  'dashboard.indicator.backtest.maxDrawdown': 'prélèvement maximum',
  'dashboard.indicator.backtest.sharpeRatio': 'Rapport de netteté',
  'dashboard.indicator.backtest.winRate': 'taux de réussite',
  'dashboard.indicator.backtest.profitFactor': 'ratio profits/pertes',
  'dashboard.indicator.backtest.totalTrades': 'Nombre de transactions',
  'dashboard.indicator.totalReturn': 'rendement total',
  'dashboard.indicator.annualReturn': 'taux de rendement annualisé',
  'dashboard.indicator.maxDrawdown': 'prélèvement maximum',
  'dashboard.indicator.sharpeRatio': 'Rapport de netteté',
  'dashboard.indicator.winRate': 'taux de réussite',
  'dashboard.indicator.profitFactor': 'ratio profits/pertes',
  'dashboard.indicator.totalTrades': 'nombre total de transactions',
  'dashboard.indicator.backtest.totalCommission': 'frais de traitement totaux',
  'dashboard.indicator.backtest.equityCurve': 'courbe des taux',
  'dashboard.indicator.backtest.strategy': "Revenu de l'indicateur",
  'dashboard.indicator.backtest.benchmark': 'Rendement de référence',
  'dashboard.indicator.backtest.tradeHistory': 'historique des transactions',
  'dashboard.indicator.backtest.tradeTime': 'temps',
  'dashboard.indicator.backtest.tradeType': 'Tapez',
  'dashboard.indicator.backtest.buy': 'acheter',
  'dashboard.indicator.backtest.sell': 'vendre',
  'dashboard.indicator.backtest.liquidation': 'Liquidation',
  'dashboard.indicator.backtest.openLong': 'Ouvert longtemps',
  'dashboard.indicator.backtest.closeLong': 'Pinduo',
  'dashboard.indicator.backtest.closeLongStop': 'Près du long (stop loss)',
  'dashboard.indicator.backtest.closeLongProfit': 'Fermez davantage (prenez des bénéfices)',
  'dashboard.indicator.backtest.addLong': 'Ajouter une position longue',
  'dashboard.indicator.backtest.openShort': 'Ouvert court',
  'dashboard.indicator.backtest.closeShort': 'vide',
  'dashboard.indicator.backtest.closeShortStop': 'Fermer (stopper la perte)',
  'dashboard.indicator.backtest.closeShortProfit': 'Fermer (prendre des bénéfices)',
  'dashboard.indicator.backtest.addShort': 'Ajouter une position courte',
  'dashboard.indicator.backtest.price': 'prix',
  'dashboard.indicator.backtest.amount': 'Quantité',
  'dashboard.indicator.backtest.balance': 'Solde du compte',
  'dashboard.indicator.backtest.profit': 'Profits et pertes',
  'dashboard.indicator.backtest.success': 'Backtest terminé',
  'dashboard.indicator.backtest.failed': 'Échec du backtest, veuillez réessayer plus tard',
  'dashboard.indicator.backtest.noIndicatorCode': "Il n'y a pas de code backtestable pour cet indicateur",
  'dashboard.indicator.backtest.noSymbol': "Veuillez d'abord sélectionner la cible de la transaction",
  'dashboard.indicator.backtest.dateRangeExceeded': 'La plage de temps du backtest dépasse la limite : {timeframe} la période peut être backtestée au maximum {maxRange}',
  'dashboard.indicator.backtest.dateRangeExceededDays': 'Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)',
  'dashboard.indicator.backtest.metaLine': 'Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}',
  'dashboard.indicator.backtest.savedRunId': 'Backtest saved. Run ID: {id}',
  'dashboard.indicator.backtest.prev': 'Previous',
  'dashboard.indicator.backtest.next': 'Next',
  'dashboard.indicator.backtest.steps.strategy.title': 'Strategy',
  'dashboard.indicator.backtest.steps.strategy.desc': 'Position sizing & risk controls',
  'dashboard.indicator.backtest.steps.trading.title': 'Trading settings',
  'dashboard.indicator.backtest.steps.trading.desc': 'Time range, capital, fees, leverage',
  'dashboard.indicator.backtest.steps.results.title': 'Results',
  'dashboard.indicator.backtest.steps.results.desc': 'Backtest output',
  'dashboard.indicator.backtest.panel.risk': 'Risk management (SL/TP/Trailing)',
  'dashboard.indicator.backtest.panel.scale': 'Scale in / DCA (trend & mean-reversion)',
  'dashboard.indicator.backtest.panel.reduce': 'Reduce position (trend & adverse)',
  'dashboard.indicator.backtest.panel.position': 'Position sizing',
  'dashboard.indicator.backtest.field.stopLossPct': 'Stop Loss (%)',
  'dashboard.indicator.backtest.field.takeProfitPct': 'Take Profit (%)',
  'dashboard.indicator.backtest.field.trailingEnabled': 'Trailing stop / take profit',
  'dashboard.indicator.backtest.field.trailingStopPct': 'Trailing drawdown (%)',
  'dashboard.indicator.backtest.field.trailingActivationPct': 'Trailing activation (%)',
  'dashboard.indicator.backtest.field.slippage': 'Slippage (%)',
  'dashboard.indicator.backtest.field.trendAddEnabled': 'Trend-following scale-in',
  'dashboard.indicator.backtest.field.dcaAddEnabled': 'Mean-reversion DCA',
  'dashboard.indicator.backtest.field.trendAddStepPct': 'Scale-in trigger (%)',
  'dashboard.indicator.backtest.field.dcaAddStepPct': 'DCA trigger (%)',
  'dashboard.indicator.backtest.field.trendAddSizePct': 'Scale-in size (% of capital)',
  'dashboard.indicator.backtest.field.dcaAddSizePct': 'DCA size (% of capital)',
  'dashboard.indicator.backtest.field.trendAddMaxTimes': 'Max scale-in times',
  'dashboard.indicator.backtest.field.dcaAddMaxTimes': 'Max DCA times',
  'dashboard.indicator.backtest.field.trendReduceEnabled': 'Trend reduce',
  'dashboard.indicator.backtest.field.adverseReduceEnabled': 'Adverse reduce',
  'dashboard.indicator.backtest.field.trendReduceStepPct': 'Trend trigger (%)',
  'dashboard.indicator.backtest.field.adverseReduceStepPct': 'Adverse trigger (%)',
  'dashboard.indicator.backtest.field.trendReduceSizePct': 'Reduce size (% of position)',
  'dashboard.indicator.backtest.field.adverseReduceSizePct': 'Adverse reduce size (% of position)',
  'dashboard.indicator.backtest.field.trendReduceMaxTimes': 'Max trend reduce times',
  'dashboard.indicator.backtest.field.adverseReduceMaxTimes': 'Max adverse reduce times',
  'dashboard.indicator.backtest.field.entryPct': 'Entry size (% of capital)',
  'dashboard.indicator.backtest.field.minOrderPct': 'Min order size (% of capital) (optional)',
  'dashboard.indicator.backtest.closeLongTrailing': 'Close Long (Trailing)',
  'dashboard.indicator.backtest.reduceLong': 'Reduce Long',
  'dashboard.indicator.backtest.closeShortTrailing': 'Close Short (Trailing)',
  'dashboard.indicator.backtest.reduceShort': 'Reduce Short',
  'dashboard.docs.title': 'Centre de documentation',
  'dashboard.docs.search.placeholder': 'Rechercher des documents...',
  'dashboard.docs.category.all': 'Tout',
  'dashboard.docs.category.guide': 'Guide de développement',
  'dashboard.docs.category.api': 'Documentation API',
  'dashboard.docs.category.tutorial': 'Tutoriel',
  'dashboard.docs.category.faq': 'FAQ',
  'dashboard.docs.featured.title': 'Documentation recommandée',
  'dashboard.docs.featured.tag': 'Recommandé',
  'dashboard.docs.list.views': 'Parcourir',
  'dashboard.docs.list.author': 'Auteur',
  'dashboard.docs.list.empty': "Aucun document pour l'instant",
  'dashboard.docs.list.backToAll': 'Retour à tous les documents',
  'dashboard.docs.list.total': '{count} documents au total',
  'dashboard.docs.detail.back': 'Retour à la liste des documents',
  'dashboard.docs.detail.updatedAt': 'mis à jour sur',
  'dashboard.docs.detail.related': 'Documents associés',
  'dashboard.docs.detail.notFound': "Le document n'existe pas",
  'dashboard.docs.detail.error': "Le document n'existe pas ou a été supprimé",
  'dashboard.docs.search.result': 'Résultats de la recherche',
  'dashboard.docs.search.keyword': 'mots-clés',
  'community.filter.indicatorType': "Type d'indicateur",
  'community.filter.all': 'Tout',
  'community.filter.other': 'Autres options',
  'community.filter.pricing': 'Type de prix',
  'community.filter.allPricing': 'Tous les tarifs',
  'community.filter.sortBy': 'Trier par',
  'community.filter.search': 'Rechercher',
  'community.filter.searchPlaceholder': 'Rechercher le nom de la métrique',
  'community.indicatorType.trend': 'Type de tendance',
  'community.indicatorType.momentum': "type d'élan",
  'community.indicatorType.volatility': 'Volatilité',
  'community.indicatorType.volume': 'Volume',
  'community.indicatorType.custom': 'Personnaliser',
  'community.pricing.free': 'gratuit',
  'community.pricing.paid': 'Payer',
  'community.sort.downloads': 'Téléchargements',
  'community.sort.rating': 'Note',
  'community.sort.newest': 'Dernières versions',
  'community.pagination.total': '{total} indicateurs au total',
  'community.noDescription': 'Pas encore de description',
  'community.detail.type': 'Tapez',
  'community.detail.pricing': 'Tarifs',
  'community.detail.rating': 'Note',
  'community.detail.downloads': 'Téléchargements',
  'community.detail.author': 'Auteur',
  'community.detail.description': 'Présentation',
  'community.detail.detailContent': 'Description détaillée',
  'community.detail.backtestStats': 'Statistiques de backtest',
  'community.action.purchase': "indicateur d'achat",
  'community.action.addToMyIndicators': 'Ajouter à mes indicateurs',
  'community.action.favorite': 'Collecte',
  'community.action.unfavorite': 'Annuler les favoris',
  'community.action.buyNow': 'Acheter maintenant',
  'community.action.renew': 'Renouvellement',
  'community.purchase.price': 'prix',
  'community.purchase.permanent': 'permanent',
  'community.purchase.monthly': 'mois',
  'community.purchase.confirmBuy': 'Confirmer pour acheter cet indicateur ({price} QDT) ?',
  'community.purchase.confirmRenew': 'Confirmer le renouvellement de cet indicateur ({price} QDT/mois) ?',
  'community.purchase.confirmFree': 'Confirmer pour ajouter cet indicateur gratuit ?',
  'community.purchase.confirmTitle': "Confirmer l'action",
  'community.purchase.owned': 'Vous avez acheté cet indicateur (valable en permanence)',
  'community.purchase.ownIndicator': "Il s'agit de la métrique que vous avez publiée",
  'community.purchase.expired': 'Votre abonnement a expiré',
  'community.purchase.expiresOn': "Heure d'expiration : {date}",
  'community.tabs.detail': "Détails de l'indicateur",
  'community.tabs.backtest': 'Données de backtest',
  'community.tabs.ratings': "Avis d'utilisateurs",
  'community.rating.myRating': 'Ma note',
  'community.rating.stars': '{count} étoiles',
  'community.rating.commentPlaceholder': 'Partagez votre expérience...',
  'community.rating.submit': 'Soumettre une note',
  'community.rating.modify': 'Modifier',
  'community.rating.saveModify': 'Enregistrer les modifications',
  'community.rating.cancel': 'Annuler',
  'community.rating.selectRating': 'Veuillez sélectionner une note',
  'community.rating.success': 'Évaluation réussie',
  'community.rating.modifySuccess': 'Avis modifié avec succès',
  'community.rating.failed': 'Échec de la notation',
  'community.rating.noRatings': 'Pas encore de commentaires',
  'community.backtest.note': 'Les données ci-dessus sont des résultats de backtest historiques et sont fournies à titre de référence uniquement et ne représentent pas les bénéfices futurs.',
  'community.backtest.noData': "Aucune donnée de backtest pour l'instant",
  'community.backtest.uploadHint': "L'auteur n'a pas encore téléchargé les données de backtest",
  'community.message.loadFailed': 'Échec du chargement de la liste des indicateurs',
  'community.message.purchaseProcessing': "Traitement de la demande d'achat...",
  'community.message.downloadSuccess': 'La métrique a été ajoutée à ma liste de métriques',
  'community.message.favoriteSuccess': 'Collecte réussie',
  'community.message.unfavoriteSuccess': 'Annuler la collecte avec succès',
  'community.message.operationSuccess': 'Opération réussie',
  'community.message.operationFailed': "L'opération a échoué",
  'community.banner.readOnly': 'Lecture seule',
  'community.banner.loginHint': 'Pour vous connecter ou vous inscrire, veuillez cliquer sur le bouton pour accéder à une page indépendante afin d\'éviter les problèmes CSRF',
  'community.banner.jumpButton': 'Aller à Connexion/Inscription',
  'dashboard.totalEquity': 'capitaux propres totaux',
  'dashboard.totalPnL': 'Total des profits et pertes',
  'dashboard.aiStrategies': "Stratégie d'IA",
  'dashboard.indicatorStrategies': 'Stratégie des indicateurs',
  'dashboard.running': 'Courir',
  'dashboard.pnlHistory': 'profits et pertes historiques',
  'dashboard.strategyPerformance': 'Ratio de profits et pertes de la stratégie',
  'dashboard.recentTrades': 'transactions récentes',
  'dashboard.currentPositions': 'Poste actuel',
  'dashboard.table.time': 'temps',
  'dashboard.table.strategy': 'Nom de la stratégie',
  'dashboard.table.symbol': 'Cible',
  'dashboard.table.type': 'Tapez',
  'dashboard.table.side': 'direction',
  'dashboard.table.size': 'Intérêt ouvert',
  'dashboard.table.entryPrice': "cours d'ouverture moyen",
  'dashboard.table.price': 'prix',
  'dashboard.table.amount': 'Quantité',
  'dashboard.table.profit': 'Profits et pertes',
  'dashboard.pendingOrders': 'Historique d\'exécution des ordres',
  'dashboard.totalOrders': 'Total {total} ordres',
  'dashboard.viewError': 'Voir l\'erreur',
  'dashboard.filled': 'Rempli',
  'dashboard.orderTable.time': 'Heure de création',
  'dashboard.orderTable.strategy': 'Stratégie',
  'dashboard.orderTable.symbol': 'Paire de trading',
  'dashboard.orderTable.signalType': 'Type de signal',
  'dashboard.orderTable.amount': 'Quantité',
  'dashboard.orderTable.price': 'Prix de remplissage',
  'dashboard.orderTable.status': 'Statut',
  'dashboard.orderTable.executedAt': 'Heure d\'exécution',
  'dashboard.signalType.openLong': 'Ouvrir Long',
  'dashboard.signalType.openShort': 'Ouvrir Short',
  'dashboard.signalType.closeLong': 'Fermer Long',
  'dashboard.signalType.closeShort': 'Fermer Short',
  'dashboard.signalType.addLong': 'Ajouter Long',
  'dashboard.signalType.addShort': 'Ajouter Short',
  'dashboard.status.pending': 'En attente',
  'dashboard.status.processing': 'En cours',
  'dashboard.status.completed': 'Terminé',
  'dashboard.status.failed': 'Échoué',
  'dashboard.status.cancelled': 'Annulé',
  'dashboard.table.pnl': 'profit ou perte non réalisé',
  'form.basic-form.basic.title': 'forme de base',
  'form.basic-form.basic.description': "Les pages de formulaire sont utilisées pour collecter ou vérifier les informations des utilisateurs. Les formulaires de base sont couramment utilisés dans des scénarios de formulaire comportant peu d'éléments de données.",
  'form.basic-form.title.label': 'Titre',
  'form.basic-form.title.placeholder': "Donnez un nom à l'objectif",
  'form.basic-form.title.required': 'Veuillez entrer un titre',
  'form.basic-form.date.label': 'Date de début et de fin',
  'form.basic-form.placeholder.start': 'date de début',
  'form.basic-form.placeholder.end': 'date de fin',
  'form.basic-form.date.required': 'Veuillez sélectionner les dates de début et de fin',
  'form.basic-form.goal.label': "Description de l'objectif",
  'form.basic-form.goal.placeholder': 'Veuillez saisir vos objectifs de travail par étapes',
  'form.basic-form.goal.required': "Veuillez saisir une description de l'objectif",
  'form.basic-form.standard.label': 'mesurer',
  'form.basic-form.standard.placeholder': 'Veuillez saisir des statistiques',
  'form.basic-form.standard.required': 'Veuillez saisir des statistiques',
  'form.basic-form.client.label': 'Client',
  'form.basic-form.client.required': 'Veuillez décrire les clients que vous servez',
  'form.basic-form.label.tooltip': 'destinataires de services cibles',
  'form.basic-form.client.placeholder': 'Veuillez décrire les clients que vous servez, les clients internes directement @nom/numéro de poste',
  'form.basic-form.invites.label': 'Inviter des réviseurs',
  'form.basic-form.invites.placeholder': "Veuillez directement @nom/numéro d'employé, vous pouvez inviter jusqu'à 5 personnes",
  'form.basic-form.weight.label': 'poids',
  'form.basic-form.weight.placeholder': 'Veuillez entrer',
  'form.basic-form.public.label': 'public cible',
  'form.basic-form.label.help': 'Les clients et les évaluateurs sont partagés par défaut',
  'form.basic-form.radio.public': 'publique',
  'form.basic-form.radio.partially-public': 'Partiellement public',
  'form.basic-form.radio.private': 'privé',
  'form.basic-form.publicUsers.placeholder': 'ouvert à',
  'form.basic-form.option.A': 'Collègue 1',
  'form.basic-form.option.B': 'Collègue 2',
  'form.basic-form.option.C': 'Collègue trois',
  'form.basic-form.email.required': 'Veuillez entrer votre adresse e-mail !',
  'form.basic-form.email.wrong-format': "Le format de l'adresse e-mail est incorrect !",
  'form.basic-form.userName.required': "Veuillez entrer votre nom d'utilisateur !",
  'form.basic-form.password.required': 'Veuillez entrer votre mot de passe !',
  'form.basic-form.password.twice': 'Les mots de passe saisis deux fois ne correspondent pas !',
  'form.basic-form.strength.msg': 'Veuillez saisir au moins 6 caractères. Veuillez ne pas utiliser de mots de passe faciles à deviner.',
  'form.basic-form.strength.strong': 'Force : Forte',
  'form.basic-form.strength.medium': 'Force : moyenne',
  'form.basic-form.strength.short': 'Force : trop courte',
  'form.basic-form.confirm-password.required': 'Veuillez confirmer votre mot de passe !',
  'form.basic-form.phone-number.required': 'Veuillez entrer votre numéro de téléphone portable !',
  'form.basic-form.phone-number.wrong-format': 'Le format du numéro de téléphone portable est erroné !',
  'form.basic-form.verification-code.required': 'Veuillez entrer le code de vérification !',
  'form.basic-form.form.get-captcha': 'Obtenir le code de vérification',
  'form.basic-form.captcha.second': 'secondes',
  'form.basic-form.form.optional': '(facultatif)',
  'form.basic-form.form.submit': 'Soumettre',
  'form.basic-form.form.save': 'enregistrer',
  'form.basic-form.email.placeholder': 'Courriel',
  'form.basic-form.password.placeholder': "Mot de passe d'au moins 6 caractères, sensible à la casse",
  'form.basic-form.confirm-password.placeholder': 'Confirmer le mot de passe',
  'form.basic-form.phone-number.placeholder': 'Numéro de téléphone portable',
  'form.basic-form.verification-code.placeholder': 'Code de vérification',
  'result.success.title': 'Soumission réussie',
  'result.success.description': "La page de résultats de soumission est utilisée pour renvoyer les résultats de traitement d'une série de tâches opérationnelles. S'il ne s'agit que d'une opération simple, utilisez le retour d'invite global du message. Cette zone de texte peut afficher des instructions supplémentaires simples. S'il est nécessaire d'afficher des « documents », la zone grise ci-dessous peut afficher des contenus plus complexes.",
  'result.success.operate-title': 'Nom du projet',
  'result.success.operate-id': 'ID du projet',
  'result.success.principal': 'responsable',
  'result.success.operate-time': 'Temps effectif',
  'result.success.step1-title': 'Créer un projet',
  'result.success.step1-operator': 'Qu Lili',
  'result.success.step2-title': 'Examen préliminaire du ministère',
  'result.success.step2-operator': 'Zhou Maomao',
  'result.success.step2-extra': 'Urgent',
  'result.success.step3-title': 'examen financier',
  'result.success.step4-title': 'Terminé',
  'result.success.btn-return': 'Retour à la liste',
  'result.success.btn-project': 'Afficher les articles',
  'result.success.btn-print': 'Imprimer',
  'result.fail.error.title': 'Échec de la soumission',
  'result.fail.error.description': 'Veuillez vérifier et modifier les informations suivantes avant de soumettre à nouveau.',
  'result.fail.error.hint-title': 'Le contenu que vous avez soumis contient les erreurs suivantes :',
  'result.fail.error.hint-text1': 'Votre compte a été gelé',
  'result.fail.error.hint-btn1': 'Décongeler immédiatement',
  'result.fail.error.hint-text2': "Votre compte n'est pas encore éligible pour postuler",
  'result.fail.error.hint-btn2': 'Mettre à niveau maintenant',
  'result.fail.error.btn-text': 'Retour à la modification',
  'account.settings.menuMap.custom': 'personnalisation',
  'account.settings.menuMap.binding': 'Liaison de compte',
  'account.settings.basic.avatar': 'avatar',
  'account.settings.basic.change-avatar': "Changer d'avatar",
  'account.settings.basic.email': 'Courriel',
  'account.settings.basic.email-message': 'Veuillez entrer votre email!',
  'account.settings.basic.nickname': 'Surnom',
  'account.settings.basic.nickname-message': 'Veuillez entrer votre pseudo !',
  'account.settings.basic.profile': 'Profil',
  'account.settings.basic.profile-message': 'Veuillez entrer votre profil personnel !',
  'account.settings.basic.profile-placeholder': 'Profil',
  'account.settings.basic.country': 'Pays/Région',
  'account.settings.basic.country-message': 'Veuillez entrer votre pays ou région !',
  'account.settings.basic.geographic': 'Province et ville',
  'account.settings.basic.geographic-message': 'Veuillez entrer votre province et votre ville !',
  'account.settings.basic.address': 'adresse postale',
  'account.settings.basic.address-message': 'Veuillez entrer votre adresse postale !',
  'account.settings.basic.phone': 'Numéro de contact',
  'account.settings.basic.phone-message': 'Veuillez entrer votre numéro de contact !',
  'account.settings.basic.update': 'Mettre à jour les informations de base',
  'account.settings.basic.update.success': 'Mettre à jour les informations de base avec succès',
  'account.settings.security.strong': 'Fort',
  'account.settings.security.medium': 'dans',
  'account.settings.security.weak': 'faible',
  'account.settings.security.password': 'Mot de passe du compte',
  'account.settings.security.password-description': 'Force actuelle du mot de passe :',
  'account.settings.security.phone': 'Téléphone mobile de sécurité',
  'account.settings.security.phone-description': 'Téléphone mobile déjà lié :',
  'account.settings.security.question': 'Problèmes de sécurité',
  'account.settings.security.question-description': "Aucune question de sécurité n'est définie, ce qui peut protéger efficacement la sécurité du compte.",
  'account.settings.security.email': 'Lier un e-mail',
  'account.settings.security.email-description': 'Adresse e-mail déjà liée :',
  'account.settings.security.mfa': 'Appareil MFA',
  'account.settings.security.mfa-description': 'Le périphérique MFA n’est pas lié. Après la liaison, vous pouvez confirmer à nouveau.',
  'account.settings.security.modify': 'Modifier',
  'account.settings.security.set': 'paramètres',
  'account.settings.security.bind': 'reliure',
  'account.settings.binding.taobao': 'Lier Taobao',
  'account.settings.binding.taobao-description': "Le compte Taobao n'est actuellement pas lié",
  'account.settings.binding.alipay': 'Lier Alipay',
  'account.settings.binding.alipay-description': "Le compte Alipay n'est actuellement pas lié",
  'account.settings.binding.dingding': 'Liaison DingTalk',
  'account.settings.binding.dingding-description': "Aucun compte DingTalk n'est actuellement lié",
  'account.settings.binding.bind': 'reliure',
  'account.settings.notification.password': 'Mot de passe du compte',
  'account.settings.notification.password-description': 'Les messages des autres utilisateurs seront notifiés sous forme de messages du site.',
  'account.settings.notification.messages': 'Messages système',
  'account.settings.notification.messages-description': 'Les messages système seront notifiés sous forme de messages de site.',
  'account.settings.notification.todo': 'Tâches à faire',
  'account.settings.notification.todo-description': 'Les tâches à effectuer seront notifiées sous forme de messages sur site',
  'account.settings.settings.open': 'ouvert',
  'account.settings.settings.close': 'fermer',
  'trading-assistant.title': 'Assistante commerciale',
  'trading-assistant.strategyList': 'Liste de stratégies',
  'trading-assistant.createStrategy': 'Créer une politique',
  'trading-assistant.noStrategy': 'Pas encore de stratégie',
  'trading-assistant.selectStrategy': 'Veuillez sélectionner une stratégie à gauche pour afficher les détails',
  'trading-assistant.startStrategy': 'stratégie de lancement',
  'trading-assistant.stopStrategy': "stratégie d'arrêt",
  'trading-assistant.editStrategy': 'Stratégie éditoriale',
  'trading-assistant.deleteStrategy': 'Supprimer la stratégie',
  'trading-assistant.status.running': 'Courir',
  'trading-assistant.status.stopped': 'Arrêté',
  'trading-assistant.status.error': 'Erreur',
  'trading-assistant.strategyType.IndicatorStrategy': "Stratégie d'indicateurs techniques",
  'trading-assistant.strategyType.PromptBasedStrategy': 'stratégie de mots indicateurs',
  'trading-assistant.strategyType.GridStrategy': 'stratégie de grille',
  'trading-assistant.tabs.tradingRecords': 'historique des transactions',
  'trading-assistant.tabs.positions': 'Enregistrement de poste',
  'trading-assistant.tabs.equityCurve': 'courbe des actions',
  'trading-assistant.form.step1': 'Sélectionner des indicateurs',
  'trading-assistant.form.step2': "Configuration d'échange",
  'trading-assistant.form.step3': 'Paramètres de stratégie',
  'trading-assistant.form.indicator': 'Sélectionner des indicateurs',
  'trading-assistant.form.indicatorHint': 'Vous ne pouvez sélectionner que les indicateurs techniques que vous avez achetés ou créés',
  'trading-assistant.form.qdtCostHints': "L'utilisation de la stratégie consommera du QDT, veuillez vous assurer que le compte dispose d'un solde QDT suffisant",
  'trading-assistant.form.indicatorDescription': "Description de l'indicateur",
  'trading-assistant.form.noDescription': 'Pas encore de description',
  'trading-assistant.form.exchange': 'Sélectionnez un échange',
  'trading-assistant.form.apiKey': 'Clé API',
  'trading-assistant.form.secretKey': 'Clé secrète',
  'trading-assistant.form.passphrase': 'Phrase secrète',
  'trading-assistant.form.testConnection': 'tester la connexion',
  'trading-assistant.form.strategyName': 'Nom de la stratégie',
  'trading-assistant.form.symbol': 'paire de trading',
  'trading-assistant.form.symbolHint': 'Actuellement, seules les paires de trading de cryptomonnaies sont prises en charge',
  'trading-assistant.form.initialCapital': "Montant de l'investissement",
  'trading-assistant.form.marketType': 'type de marché',
  'trading-assistant.form.marketTypeFutures': 'contrat',
  'trading-assistant.form.marketTypeSpot': 'Spot',
  'trading-assistant.form.marketTypeHint': "Le contrat prend en charge le trading bidirectionnel et l'effet de levier, tandis que le spot ne prend en charge que les positions longues et l'effet de levier est fixé à 1x.",
  'trading-assistant.form.leverage': 'Tirer parti de plusieurs',
  'trading-assistant.form.leverageHint': 'Contrat : 1-125 fois, spot : fixe 1 fois',
  'trading-assistant.form.spotLeverageFixed': "L'effet de levier du trading au comptant est fixé à 1x",
  'trading-assistant.form.spotOnlyLongHint': 'Le trading au comptant ne prend en charge que les positions longues',
  'trading-assistant.form.tradeDirection': 'Orientation commerciale',
  'trading-assistant.form.tradeDirectionLong': 'Seulement longtemps',
  'trading-assistant.form.tradeDirectionShort': 'Seulement court',
  'trading-assistant.form.tradeDirectionBoth': 'transaction bidirectionnelle',
  'trading-assistant.form.timeframe': 'période',
  'trading-assistant.form.klinePeriod': 'Période K-Line',
  'trading-assistant.form.timeframe1m': '1 minute',
  'trading-assistant.form.timeframe5m': '5 minutes',
  'trading-assistant.form.timeframe15m': '15 minutes',
  'trading-assistant.form.timeframe30m': '30 minutes',
  'trading-assistant.form.timeframe1H': '1 heure',
  'trading-assistant.form.timeframe4H': '4 heures',
  'trading-assistant.form.timeframe1D': '1 jour',
  'trading-assistant.form.selectStrategyType': 'Sélectionner le type de stratégie',
  'trading-assistant.form.indicatorStrategy': 'Stratégie d\'indicateur',
  'trading-assistant.form.indicatorStrategyDesc': 'Stratégie de trading automatisée basée sur des indicateurs techniques',
  'trading-assistant.form.aiStrategy': 'Stratégie IA',
  'trading-assistant.form.aiStrategyDesc': 'Stratégie de trading automatisée basée sur la prise de décision intelligente IA',
  'trading-assistant.form.enableAiFilter': 'Activer le filtre de décision intelligente IA',
  'trading-assistant.form.enableAiFilterHint': 'Lorsqu\'il est activé, les signaux d\'indicateur seront filtrés par l\'IA pour améliorer la qualité des transactions',
  'trading-assistant.form.aiFilterPrompt': 'Invite personnalisée',
  'trading-assistant.form.aiFilterPromptHint': 'Fournir des instructions personnalisées pour le filtrage IA, laisser vide pour utiliser la valeur par défaut du système',
  'trading-assistant.validation.strategyTypeRequired': 'Veuillez sélectionner un type de stratégie',
  'trading-assistant.form.advancedSettings': 'Paramètres avancés',
  'trading-assistant.form.orderMode': 'Mode de commande',
  'trading-assistant.form.orderModeMaker': 'Créateur',
  'trading-assistant.form.orderModeTaker': 'Prix du marché (Preneur)',
  'trading-assistant.form.orderModeHint': "Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.",
  'trading-assistant.form.makerWaitSec': "Temps d'attente pour les commandes en attente (secondes)",
  'trading-assistant.form.makerWaitSecHint': "Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.",
  'trading-assistant.form.makerRetries': 'Nombre de tentatives pour les commandes en attente',
  'trading-assistant.form.makerRetriesHint': "Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté",
  'trading-assistant.form.fallbackToMarket': "L'ordre en attente échoue et le prix du marché est dégradé.",
  'trading-assistant.form.fallbackToMarketHint': "Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.",
  'trading-assistant.form.marginMode': 'Mode marge',
  'trading-assistant.form.marginModeCross': 'Entrepôt complet',
  'trading-assistant.form.marginModeIsolated': 'Position isolée',
  'trading-assistant.form.stopLossPct': "Taux d'arrêt des pertes (%)",
  'trading-assistant.form.stopLossPctHint': "Définissez le pourcentage de stop loss, 0 signifie que le stop loss n'est pas activé",
  'trading-assistant.form.takeProfitPct': 'Ratio de profit (%)',
  'trading-assistant.form.takeProfitPctHint': 'Définissez le pourcentage de profit, 0 signifie désactiver le profit',
  'trading-assistant.form.signalMode': 'Mode signal',
  'trading-assistant.form.signalModeConfirmed': 'Mode de confirmation',
  'trading-assistant.form.signalModeAggressive': 'Mode agressif',
  'trading-assistant.form.signalModeHint': 'Mode de confirmation : vérifie uniquement les lignes K terminées ; Mode agressif : vérifie également la formation de lignes K',
  'trading-assistant.form.cancel': 'Annuler',
  'trading-assistant.form.prev': 'Étape précédente',
  'trading-assistant.form.next': 'Étape suivante',
  'trading-assistant.form.confirmCreate': 'Confirmer la création',
  'trading-assistant.form.confirmEdit': 'Confirmer les modifications',
  'trading-assistant.messages.createSuccess': 'Stratégie créée avec succès',
  'trading-assistant.messages.createFailed': 'Échec de la création de la stratégie',
  'trading-assistant.messages.updateSuccess': 'Mise à jour de la stratégie réussie',
  'trading-assistant.messages.updateFailed': 'Échec de la mise à jour de la stratégie',
  'trading-assistant.messages.deleteSuccess': 'Suppression de la stratégie réussie',
  'trading-assistant.messages.deleteFailed': 'Échec de la suppression de la stratégie',
  'trading-assistant.messages.startSuccess': 'La stratégie a démarré avec succès',
  'trading-assistant.messages.startFailed': 'Échec du démarrage de la stratégie',
  'trading-assistant.messages.stopSuccess': "La stratégie s'est arrêtée avec succès",
  'trading-assistant.messages.stopFailed': "La stratégie d'arrêt a échoué",
  'trading-assistant.messages.loadFailed': "Échec de l'obtention de la liste des règles",
  'trading-assistant.messages.runningWarning': 'La stratégie est en marche. Veuillez arrêter la stratégie avant de la modifier.',
  'trading-assistant.messages.deleteConfirmWithName': 'Êtes-vous sûr de vouloir supprimer la stratégie « {name} » ? Cette opération est irréversible.',
  'trading-assistant.messages.deleteConfirm': 'Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.',
  'trading-assistant.messages.loadTradesFailed': "Échec de l'obtention des enregistrements de transaction",
  'trading-assistant.messages.loadPositionsFailed': "Impossible d'obtenir l'enregistrement de position",
  'trading-assistant.messages.loadEquityFailed': "Impossible d'obtenir la courbe des capitaux propres",
  'trading-assistant.messages.loadIndicatorsFailed': 'Échec du chargement de la liste des indicateurs, veuillez réessayer plus tard',
  'trading-assistant.messages.spotLimitations': 'Le trading au comptant a été automatiquement réglé sur position longue uniquement, effet de levier 1x',
  'trading-assistant.messages.autoFillApiConfig': "La configuration historique de l'API de l'échange a été automatiquement renseignée",
  'trading-assistant.placeholders.selectIndicator': 'Veuillez sélectionner un indicateur',
  'trading-assistant.placeholders.selectExchange': 'Veuillez sélectionner un échange',
  'trading-assistant.placeholders.inputApiKey': 'Veuillez saisir la clé API',
  'trading-assistant.placeholders.inputSecretKey': 'Veuillez entrer la clé secrète',
  'trading-assistant.placeholders.inputPassphrase': 'Veuillez saisir la phrase secrète',
  'trading-assistant.placeholders.inputStrategyName': 'Veuillez saisir un nom de stratégie',
  'trading-assistant.placeholders.selectSymbol': 'Veuillez sélectionner une paire de trading',
  'trading-assistant.placeholders.selectTimeframe': 'Veuillez sélectionner une période',
  'trading-assistant.placeholders.selectKlinePeriod': 'Veuillez sélectionner une période K-Line',
  'trading-assistant.placeholders.inputAiFilterPrompt': 'Veuillez entrer une invite personnalisée (optionnel)',
  'trading-assistant.validation.indicatorRequired': 'Veuillez sélectionner un indicateur',
  'trading-assistant.validation.exchangeRequired': 'Veuillez sélectionner un échange',
  'trading-assistant.validation.apiKeyRequired': 'Veuillez saisir la clé API',
  'trading-assistant.validation.secretKeyRequired': 'Veuillez entrer la clé secrète',
  'trading-assistant.validation.passphraseRequired': 'Veuillez saisir la phrase secrète',
  'trading-assistant.validation.exchangeConfigIncomplete': "Veuillez remplir les informations complètes de configuration de l'échange",
  'trading-assistant.validation.testConnectionRequired': 'Veuillez d\'abord cliquer sur le bouton "Tester la connexion" et vous assurer que la connexion est réussie',
  'trading-assistant.validation.testConnectionFailed': 'Le test de connexion a échoué, veuillez vérifier la configuration et réessayer',
  'trading-assistant.validation.strategyNameRequired': 'Veuillez saisir un nom de stratégie',
  'trading-assistant.validation.symbolRequired': 'Veuillez sélectionner une paire de trading',
  'trading-assistant.validation.initialCapitalRequired': "Veuillez saisir le montant de l'investissement",
  'trading-assistant.validation.leverageRequired': 'Veuillez saisir le ratio de levier',
  'trading-assistant.table.time': 'temps',
  'trading-assistant.table.type': 'Tapez',
  'trading-assistant.table.price': 'prix',
  'trading-assistant.table.amount': 'Quantité',
  'trading-assistant.table.value': 'Montant',
  'trading-assistant.table.commission': 'frais de traitement',
  'trading-assistant.table.symbol': 'paire de trading',
  'trading-assistant.table.side': 'direction',
  'trading-assistant.table.size': 'Quantité de position',
  'trading-assistant.table.entryPrice': "Prix d'ouverture",
  'trading-assistant.table.currentPrice': 'prix actuel',
  'trading-assistant.table.unrealizedPnl': 'profit ou perte non réalisé',
  'trading-assistant.table.pnlPercent': 'Ratio de profits et pertes',
  'trading-assistant.table.buy': 'acheter',
  'trading-assistant.table.sell': 'vendre',
  'trading-assistant.table.long': 'Allez-y longtemps',
  'trading-assistant.table.short': 'court',
  'trading-assistant.table.noPositions': "Aucun poste pour l'instant",
  'trading-assistant.detail.title': 'Détails de la stratégie',
  'trading-assistant.detail.strategyName': 'Nom de la stratégie',
  'trading-assistant.detail.strategyType': 'Type de stratégie',
  'trading-assistant.detail.status': 'Statut',
  'trading-assistant.detail.tradingMode': 'modèle commercial',
  'trading-assistant.detail.exchange': 'échange',
  'trading-assistant.detail.initialCapital': 'Capital initial',
  'trading-assistant.detail.totalInvestment': "montant total de l'investissement",
  'trading-assistant.detail.currentEquity': 'Valeur nette actuelle',
  'trading-assistant.detail.totalPnl': 'Total des profits et pertes',
  'trading-assistant.detail.indicatorName': "Nom de l'indicateur",
  'trading-assistant.detail.maxLeverage': 'Effet de levier maximal',
  'trading-assistant.detail.decideInterval': 'intervalle de décision',
  'trading-assistant.detail.symbols': 'Objet de transaction',
  'trading-assistant.detail.createdAt': 'temps de création',
  'trading-assistant.detail.updatedAt': 'Heure de mise à jour',
  'trading-assistant.detail.llmConfig': "Configuration du modèle d'IA",
  'trading-assistant.detail.exchangeConfig': "Configuration d'échange",
  'trading-assistant.detail.provider': 'fournisseur',
  'trading-assistant.detail.modelId': 'ID du modèle',
  'trading-assistant.detail.close': 'Fermer',
  'trading-assistant.detail.loadFailed': "Échec de l'obtention des détails de la stratégie",
  'trading-assistant.equity.noData': "Aucune donnée sur la valeur nette pour l'instant",
  'trading-assistant.equity.equity': 'valeur nette',
  'trading-assistant.exchange.tradingMode': 'modèle commercial',
  'trading-assistant.exchange.virtual': 'trading simulé',
  'trading-assistant.exchange.live': 'Transaction réelle',
  'trading-assistant.exchange.selectExchange': 'Sélectionnez un échange',
  'trading-assistant.exchange.walletAddress': 'adresse du portefeuille',
  'trading-assistant.exchange.walletAddressPlaceholder': "Veuillez saisir l'adresse de votre portefeuille (en commençant par 0x)",
  'trading-assistant.exchange.privateKey': 'clé privée',
  'trading-assistant.exchange.privateKeyPlaceholder': 'Veuillez saisir la clé privée (64 caractères)',
  'trading-assistant.exchange.testConnection': 'tester la connexion',
  'trading-assistant.exchange.connectionSuccess': 'Connexion réussie',
  'trading-assistant.exchange.connectionFailed': 'La connexion a échoué',
  'trading-assistant.exchange.testFailed': 'Le test de connexion a échoué',
  'trading-assistant.exchange.fillComplete': "Veuillez remplir les informations complètes de configuration de l'échange",
  'trading-assistant.strategyTypeOptions.ai': "Stratégie basée sur l'IA",
  'trading-assistant.strategyTypeOptions.indicator': "Stratégie d'indicateurs techniques",
  'trading-assistant.strategyTypeOptions.aiDeveloping': "La fonction de stratégie basée sur l'IA est en cours de développement, alors restez à l'écoute",
  'trading-assistant.strategyTypeOptions.aiDevelopingWarning': "Des fonctionnalités de stratégie basées sur l'IA sont en cours de développement",
  'trading-assistant.indicatorType.trend': 'Tendance',
  'trading-assistant.indicatorType.momentum': 'élan',
  'trading-assistant.indicatorType.volatility': 'Fluctuations',
  'trading-assistant.indicatorType.volume': 'Volume',
  'trading-assistant.indicatorType.custom': 'Personnaliser',
  'trading-assistant.exchangeNames': {
    'okx': 'OKX',
    'binance': 'Binance',
    'hyperliquid': 'Hyperliquide',
    'blockchaincom': 'Blockchain.com',
    'coinbaseexchange': 'Coinbase',
    'gate': 'Porte.io',
    'mexc': 'MEXIQUE',
    'kraken': 'Kraken',
    'bitfinex': 'Bitfinex',
    'bybit': 'Bybit',
    'kucoin': 'KuCoin',
    'huobi': 'Huobi',
    'bitget': 'Bitget',
    'bitmex': 'BitMEX',
    'deribit': 'Déribuer',
    'phemex': 'Phemex',
    'bitmart': 'BitMart',
    'bitstamp': 'Timbre de bits',
    'bittrex': 'Bittrex',
    'poloniex': 'Poloniex',
    'gemini': 'Gémeaux',
    'cryptocom': 'Crypto.com',
    'bitflyer': 'bitFlyer',
    'upbit': 'Débit ascendant',
    'bithumb': 'Bithumb',
    'coinone': 'Coinone',
    'zb': 'ZB',
    'lbank': 'LBanque',
    'bibox': 'Bibox',
    'bigone': 'BigONE',
    'bitrue': 'Bitrue',
    'coinex': 'CoinEx',
    'digifinex': 'DigiFinex',
    'ftx': 'FTX',
    'ftxus': 'FTX États-Unis',
    'binanceus': 'Binance États-Unis',
    'binancecoinm': 'Binance COIN-M',
    'binanceusdm': 'Binance USDⓈ-M'
  },
  'ai-trading-assistant.title': 'Assistant de trading IA',
  'ai-trading-assistant.strategyList': 'Liste de stratégies',
  'ai-trading-assistant.createStrategy': 'Créer une politique',
  'ai-trading-assistant.noStrategy': 'Pas encore de stratégie',
  'ai-trading-assistant.selectStrategy': 'Veuillez sélectionner une stratégie à gauche pour afficher les détails',
  'ai-trading-assistant.startStrategy': 'stratégie de lancement',
  'ai-trading-assistant.stopStrategy': "stratégie d'arrêt",
  'ai-trading-assistant.editStrategy': 'Stratégie éditoriale',
  'ai-trading-assistant.deleteStrategy': 'Supprimer la stratégie',
  'ai-trading-assistant.status.running': 'Courir',
  'ai-trading-assistant.status.stopped': 'Arrêté',
  'ai-trading-assistant.status.error': 'Erreur',
  'ai-trading-assistant.tabs.tradingRecords': 'historique des transactions',
  'ai-trading-assistant.tabs.positions': 'Enregistrement de poste',
  'ai-trading-assistant.tabs.aiDecisions': 'Enregistrement de décision IA',
  'ai-trading-assistant.tabs.equityCurve': 'courbe des actions',
  'ai-trading-assistant.form.createTitle': 'Créer des stratégies de trading IA',
  'ai-trading-assistant.form.editTitle': "Modifier la stratégie de trading de l'IA",
  'ai-trading-assistant.form.strategyName': 'Nom de la stratégie',
  'ai-trading-assistant.form.modelId': "Modèle d'IA",
  'ai-trading-assistant.form.modelIdHint': 'Utilisez le service système OpenRouter sans configurer la clé API',
  'ai-trading-assistant.form.decideInterval': 'intervalle de décision',
  'ai-trading-assistant.form.decideInterval5m': '5 minutes',
  'ai-trading-assistant.form.decideInterval10m': '10 minutes',
  'ai-trading-assistant.form.decideInterval30m': '30 minutes',
  'ai-trading-assistant.form.decideInterval1h': '1 heure',
  'ai-trading-assistant.form.decideInterval4h': '4 heures',
  'ai-trading-assistant.form.decideInterval1d': '1 jour',
  'ai-trading-assistant.form.decideInterval1w': '1 semaine',
  'ai-trading-assistant.form.decideIntervalHint': 'L’intervalle de temps nécessaire à l’IA pour prendre des décisions',
  'ai-trading-assistant.form.runPeriod': "Cycle d'exécution",
  'ai-trading-assistant.form.runPeriodHint': "L'heure de début et l'heure de fin de l'exécution de la stratégie",
  'ai-trading-assistant.form.startDate': 'date de début',
  'ai-trading-assistant.form.endDate': 'date de fin',
  'ai-trading-assistant.form.qdtCostTitle': 'Instructions de déduction QDT',
  'ai-trading-assistant.form.qdtCostHint': "{cost} QDT sera déduit pour chaque décision de l'IA. Veuillez vous assurer que votre compte dispose d'un solde QDT suffisant. Lors de l'exécution de la stratégie, des frais seront déduits en temps réel pour chaque décision.",
  'ai-trading-assistant.form.apiKey': 'Clé API',
  'ai-trading-assistant.form.exchange': 'Sélectionnez un échange',
  'ai-trading-assistant.form.secretKey': 'Clé secrète',
  'ai-trading-assistant.form.passphrase': 'Phrase secrète',
  'ai-trading-assistant.form.testConnection': 'tester la connexion',
  'ai-trading-assistant.form.symbol': 'paire de trading',
  'ai-trading-assistant.form.symbolHint': 'Sélectionnez la paire de trading à trader',
  'ai-trading-assistant.form.initialCapital': 'Montant investi (marge)',
  'ai-trading-assistant.form.leverage': 'Tirer parti de plusieurs',
  'ai-trading-assistant.form.timeframe': 'période',
  'ai-trading-assistant.form.timeframe1m': '1 minute',
  'ai-trading-assistant.form.timeframe5m': '5 minutes',
  'ai-trading-assistant.form.timeframe15m': '15 minutes',
  'ai-trading-assistant.form.timeframe30m': '30 minutes',
  'ai-trading-assistant.form.timeframe1H': '1 heure',
  'ai-trading-assistant.form.timeframe4H': '4 heures',
  'ai-trading-assistant.form.timeframe1D': '1 jour',
  'ai-trading-assistant.form.marketType': 'type de marché',
  'ai-trading-assistant.form.marketTypeFutures': 'contrat',
  'ai-trading-assistant.form.marketTypeSpot': 'Spot',
  'ai-trading-assistant.form.totalPnl': 'Total des profits et pertes',
  'ai-trading-assistant.form.customPrompt': "Mots d'invite personnalisés",
  'ai-trading-assistant.form.customPromptHint': "Facultatif, utilisé pour personnaliser les stratégies de trading de l'IA et la logique de prise de décision",
  'ai-trading-assistant.form.cancel': 'Annuler',
  'ai-trading-assistant.form.prev': 'Étape précédente',
  'ai-trading-assistant.form.next': 'Étape suivante',
  'ai-trading-assistant.form.confirmCreate': 'Confirmer la création',
  'ai-trading-assistant.form.confirmEdit': 'Confirmer les modifications',
  'ai-trading-assistant.messages.createSuccess': 'Stratégie créée avec succès',
  'ai-trading-assistant.messages.createFailed': 'Échec de la création de la stratégie',
  'ai-trading-assistant.messages.updateSuccess': 'Mise à jour de la stratégie réussie',
  'ai-trading-assistant.messages.updateFailed': 'Échec de la mise à jour de la stratégie',
  'ai-trading-assistant.messages.deleteSuccess': 'Suppression de la stratégie réussie',
  'ai-trading-assistant.messages.deleteFailed': 'Échec de la suppression de la stratégie',
  'ai-trading-assistant.messages.startSuccess': 'La stratégie a démarré avec succès',
  'ai-trading-assistant.messages.startFailed': 'Échec du démarrage de la stratégie',
  'ai-trading-assistant.messages.stopSuccess': "La stratégie s'est arrêtée avec succès",
  'ai-trading-assistant.messages.stopFailed': "La stratégie d'arrêt a échoué",
  'ai-trading-assistant.messages.loadFailed': "Échec de l'obtention de la liste des règles",
  'ai-trading-assistant.messages.loadDecisionsFailed': "Échec de l'obtention du dossier de décision de l'IA",
  'ai-trading-assistant.messages.deleteConfirm': 'Êtes-vous sûr de vouloir supprimer cette stratégie ? Cette opération est irréversible.',
  'ai-trading-assistant.placeholders.inputStrategyName': 'Veuillez saisir un nom de stratégie',
  'ai-trading-assistant.placeholders.selectModelId': "Veuillez sélectionner un modèle d'IA",
  'ai-trading-assistant.placeholders.selectDecideInterval': 'Veuillez sélectionner un intervalle de décision',
  'ai-trading-assistant.placeholders.startTime': 'heure de début',
  'ai-trading-assistant.placeholders.endTime': 'heure de fin',
  'ai-trading-assistant.placeholders.inputApiKey': 'Veuillez saisir la clé API',
  'ai-trading-assistant.placeholders.selectExchange': 'Veuillez sélectionner un échange',
  'ai-trading-assistant.placeholders.inputSecretKey': 'Veuillez entrer la clé secrète',
  'ai-trading-assistant.placeholders.inputPassphrase': 'Veuillez saisir la phrase secrète',
  'ai-trading-assistant.placeholders.selectSymbol': 'Veuillez sélectionner une paire de trading, telle que : BTC/USDT',
  'ai-trading-assistant.placeholders.selectTimeframe': 'Veuillez sélectionner une période',
  'ai-trading-assistant.placeholders.inputCustomPrompt': "Veuillez saisir un mot d'invite personnalisé (facultatif)",
  'ai-trading-assistant.validation.strategyNameRequired': 'Veuillez saisir un nom de stratégie',
  'ai-trading-assistant.validation.modelIdRequired': "Veuillez sélectionner un modèle d'IA",
  'ai-trading-assistant.validation.runPeriodRequired': "Veuillez sélectionner un cycle d'exécution",
  'ai-trading-assistant.validation.apiKeyRequired': 'Veuillez saisir la clé API',
  'ai-trading-assistant.validation.exchangeRequired': 'Veuillez sélectionner un échange',
  'ai-trading-assistant.validation.secretKeyRequired': 'Veuillez entrer la clé secrète',
  'ai-trading-assistant.validation.symbolRequired': 'Veuillez sélectionner une paire de trading',
  'ai-trading-assistant.validation.initialCapitalRequired': "Veuillez saisir le montant de l'investissement",
  'ai-trading-assistant.table.time': 'temps',
  'ai-trading-assistant.table.type': 'Tapez',
  'ai-trading-assistant.table.price': 'prix',
  'ai-trading-assistant.table.amount': 'Quantité',
  'ai-trading-assistant.table.value': 'Montant',
  'ai-trading-assistant.table.symbol': 'paire de trading',
  'ai-trading-assistant.table.side': 'direction',
  'ai-trading-assistant.table.size': 'Quantité de position',
  'ai-trading-assistant.table.entryPrice': "Prix d'ouverture",
  'ai-trading-assistant.table.currentPrice': 'prix actuel',
  'ai-trading-assistant.table.unrealizedPnl': 'profit ou perte non réalisé',
  'ai-trading-assistant.table.profit': 'Profits et pertes',
  'ai-trading-assistant.table.openLong': 'Ouvert longtemps',
  'ai-trading-assistant.table.closeLong': 'Pinduo',
  'ai-trading-assistant.table.openShort': 'Ouvert court',
  'ai-trading-assistant.table.closeShort': 'vide',
  'ai-trading-assistant.table.addLong': 'Gadot',
  'ai-trading-assistant.table.addShort': 'ajouter un court',
  'ai-trading-assistant.table.closeShortProfit': 'Prendre des bénéfices sur une position courte',
  'ai-trading-assistant.table.closeShortStop': 'Arrêter la perte',
  'ai-trading-assistant.table.closeLongProfit': 'Arrêtez-vous longtemps et profitez',
  'ai-trading-assistant.table.closeLongStop': 'Arrêter la perte',
  'ai-trading-assistant.table.buy': 'acheter',
  'ai-trading-assistant.table.sell': 'vendre',
  'ai-trading-assistant.table.long': 'Allez-y longtemps',
  'ai-trading-assistant.table.short': 'court',
  'ai-trading-assistant.table.hold': 'tenir',
  'ai-trading-assistant.table.reasoning': "Raison de l'analyse",
  'ai-trading-assistant.table.decisions': 'prise de décision',
  'ai-trading-assistant.table.riskAssessment': 'évaluation des risques',
  'ai-trading-assistant.table.confidence': 'Confiance',
  'ai-trading-assistant.table.totalRecords': '{total} enregistrements au total',
  'ai-trading-assistant.table.noPositions': "Aucun poste pour l'instant",
  'ai-trading-assistant.detail.title': 'Détails de la stratégie',
  'ai-trading-assistant.equity.noData': "Aucune donnée sur la valeur nette pour l'instant",
  'ai-trading-assistant.equity.equity': 'valeur nette',
  'ai-trading-assistant.exchange.testFailed': 'Le test de connexion a échoué',
  'ai-trading-assistant.exchange.connectionSuccess': 'Connexion réussie',
  'ai-trading-assistant.exchange.connectionFailed': 'La connexion a échoué',
  'ai-trading-assistant.form.advancedSettings': 'Paramètres avancés',
  'ai-trading-assistant.form.orderMode': 'Mode de commande',
  'ai-trading-assistant.form.orderModeMaker': 'Créateur',
  'ai-trading-assistant.form.orderModeTaker': 'Prix du marché (Preneur)',
  'ai-trading-assistant.form.orderModeHint': "Le mode d'ordre en attente utilise des ordres limités et les frais de traitement sont inférieurs ; le mode prix du marché est exécuté immédiatement et les frais de traitement sont plus élevés.",
  'ai-trading-assistant.form.makerWaitSec': "Temps d'attente pour les commandes en attente (secondes)",
  'ai-trading-assistant.form.makerWaitSecHint': "Le temps d'attente pour la transaction après avoir passé une commande. Annulez et réessayez après l'expiration du délai.",
  'ai-trading-assistant.form.makerRetries': 'Nombre de tentatives pour les commandes en attente',
  'ai-trading-assistant.form.makerRetriesHint': "Le nombre maximum de tentatives lorsqu'un ordre en attente n'est pas exécuté",
  'ai-trading-assistant.form.fallbackToMarket': "L'ordre en attente échoue et le prix du marché est dégradé.",
  'ai-trading-assistant.form.fallbackToMarketHint': "Lorsque l'ordre en attente d'ouverture/de clôture n'a pas été exécuté, s'il doit être rétrogradé en ordre au marché pour garantir que la transaction soit terminée.",
  'ai-trading-assistant.form.marginMode': 'Mode marge',
  'ai-trading-assistant.form.marginModeCross': 'Entrepôt complet',
  'ai-trading-assistant.form.marginModeIsolated': 'Position isolée',
  'ai-analysis.title': 'Moteur de trading quantique',
  'ai-analysis.system.online': 'en ligne',
  'ai-analysis.system.agents': 'agent',
  'ai-analysis.system.active': 'actif',
  'ai-analysis.system.stage': 'scène',
  'ai-analysis.panel.roster': 'Composition des agents',
  'ai-analysis.panel.thinking': 'En pensant...',
  'ai-analysis.panel.done': 'Terminé',
  'ai-analysis.panel.standby': 'veille',
  'ai-analysis.input.title': 'Moteur de trading quantique',
  'ai-analysis.input.placeholder': "Sélectionnez l'actif cible (par exemple BTC/USDT)",
  'ai-analysis.input.watchlist': 'Stocks optionnels',
  'ai-analysis.input.start': "Démarrer l'analyse",
  'ai-analysis.input.recent': 'Tâches récentes :',
  'ai-analysis.vis.stage': 'étape',
  'ai-analysis.vis.processing': 'Traitement',
  'ai-analysis.result.complete': 'Analyse terminée',
  'ai-analysis.result.signal': 'signal final',
  'ai-analysis.result.confidence': 'Confiance :',
  'ai-analysis.result.new': 'nouvelle analyse',
  'ai-analysis.result.full': 'Voir le rapport complet',
  'ai-analysis.logs.title': 'Journal système',
  'ai-analysis.modal.title': 'rapport confidentiel',
  'ai-analysis.modal.fundamental': 'analyse fondamentale',
  'ai-analysis.modal.technical': 'Analyse technique',
  'ai-analysis.modal.sentiment': 'Analyse émotionnelle',
  'ai-analysis.modal.risk': 'évaluation des risques',
  'ai-analysis.stage.idle': 'veille',
  'ai-analysis.stage.1': 'Première phase : analyse multidimensionnelle',
  'ai-analysis.stage.2': 'Phase deux : débat long-court',
  'ai-analysis.stage.3': 'Phase trois : planification stratégique',
  'ai-analysis.stage.4': 'La quatrième étape : la revue du contrôle des risques',
  'ai-analysis.stage.complete': 'Terminé',
  'ai-analysis.agent.investment_director': 'Directeur des investissements',
  'ai-analysis.agent.role.investment_director': 'Analyse complète et conclusion finale',
  'ai-analysis.agent.market': 'analyste de marché',
  'ai-analysis.agent.role.market': 'Données technologiques et de marché',
  'ai-analysis.agent.fundamental': 'analyste fondamental',
  'ai-analysis.agent.role.fundamental': 'Finances et valorisation',
  'ai-analysis.agent.technical': 'analyste technique',
  'ai-analysis.agent.role.technical': 'Indicateurs et graphiques techniques',
  'ai-analysis.agent.news': 'analyste de nouvelles',
  'ai-analysis.agent.role.news': "Filtre d'actualités mondiales",
  'ai-analysis.agent.sentiment': 'analyste des sentiments',
  'ai-analysis.agent.role.sentiment': 'Social et émotionnel',
  'ai-analysis.agent.risk': 'analyste des risques',
  'ai-analysis.agent.role.risk': 'Vérification des risques de base',
  'ai-analysis.agent.bull': 'chercheur optimiste',
  'ai-analysis.agent.role.bull': 'Extraction de catalyseurs de croissance',
  'ai-analysis.agent.bear': 'chercheur baissier',
  'ai-analysis.agent.role.bear': 'Recherche de risques et de défauts',
  'ai-analysis.agent.manager': 'directeur de recherche',
  'ai-analysis.agent.role.manager': 'modérateur du débat',
  'ai-analysis.agent.trader': 'commerçant',
  'ai-analysis.agent.role.trader': 'Stratège exécutif',
  'ai-analysis.agent.risky': 'analyste activiste',
  'ai-analysis.agent.role.risky': 'stratégie agressive',
  'ai-analysis.agent.neutral': "analyste d'équilibre",
  'ai-analysis.agent.role.neutral': "stratégie d'équilibrage",
  'ai-analysis.agent.safe': 'analyste conservateur',
  'ai-analysis.agent.role.safe': 'stratégie conservatrice',
  'ai-analysis.agent.cro': 'Responsable du contrôle des risques (CRO)',
  'ai-analysis.agent.role.cro': 'autorité décisionnelle finale',
  'ai-analysis.script.market': 'Récupération des données OHLCV des principaux échanges...',
  'ai-analysis.script.fundamental': 'Récupération des rapports financiers trimestriels...',
  'ai-analysis.script.technical': 'Analyser les indicateurs techniques et les modèles de graphiques...',
  'ai-analysis.script.news': "Analyse de l'actualité financière mondiale...",
  'ai-analysis.script.sentiment': 'Analyser les tendances des réseaux sociaux...',
  'ai-analysis.script.risk': 'Calcul de la volatilité historique...',
  'invite.inviteLink': "Lien d'invitation",
  'invite.copy': 'Copier le lien',
  'invite.copySuccess': 'Copiez avec succès !',
  'invite.copyFailed': 'Échec de la copie, veuillez copier manuellement',
  'invite.noInviteLink': "Lien d'invitation non généré",
  'invite.totalInvites': 'Invitations cumulées',
  'invite.totalReward': 'Récompenses cumulées',
  'invite.rules': "Règles d'invitation",
  'invite.rule1': "Chaque fois que vous invitez avec succès un ami à s'inscrire, vous recevrez une récompense",
  'invite.rule2': "Si l'ami invité termine la première transaction, vous recevrez des récompenses supplémentaires",
  'invite.rule3': "Les récompenses d'invitation seront envoyées directement sur votre compte",
  'invite.inviteList': "Liste d'invitations",
  'invite.tasks': 'centre de mission',
  'invite.inviteeName': 'Invité',
  'invite.inviteTime': "Heure d'invitation",
  'invite.status': 'Statut',
  'invite.reward': 'récompense',
  'invite.active': 'actif',
  'invite.inactive': 'Non activé',
  'invite.completed': 'Terminé',
  'invite.claimed': 'Reçu',
  'invite.pending': 'A compléter',
  'invite.goToTask': 'compléter',
  'invite.claimReward': 'réclamer des récompenses',
  'invite.verify': 'Vérification terminée',
  'invite.verifySuccess': 'Vérification réussie ! Tâche terminée',
  'invite.verifyNotCompleted': "La tâche n'est pas encore terminée, veuillez d'abord la terminer",
  'invite.verifyFailed': 'La vérification a échoué, veuillez réessayer plus tard',
  'invite.claimSuccess': 'Vous avez reçu avec succès {reward} QDT !',
  'invite.claimFailed': 'Échec de la collecte, veuillez réessayer plus tard',
  'invite.totalRecords': '{total} enregistrements au total',
  'invite.task.twitter.title': 'Retweeter sur X (Twitter)',
  'invite.task.twitter.desc': 'Partagez nos tweets officiels sur votre compte X (Twitter)',
  'invite.task.youtube.title': 'Suivez notre chaîne YouTube',
  'invite.task.youtube.desc': 'Abonnez-vous et suivez notre chaîne YouTube officielle',
  'invite.task.telegram.title': 'Rejoindre le groupe Telegram',
  'invite.task.telegram.desc': 'Rejoignez notre groupe communautaire officiel Telegram',
  'invite.task.discord.title': 'Rejoignez un serveur Discord',
  'invite.task.discord.desc': 'Rejoignez notre serveur communautaire Discord',
  'message': '-',
  'layouts.usermenu.dialog.title': 'informations',
  'layouts.usermenu.dialog.content': 'Êtes-vous sûr de vouloir vous déconnecter ?',
  'layouts.userLayout.title': "Trouver la vérité dans l'incertitude",
  // Auto-filled missing keys from en-US (fallback to English)
  'dashboard.indicator.boundary.message': 'Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.',
  'dashboard.indicator.boundary.indicatorRule': "Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.",
  'dashboard.indicator.boundary.backtestRule': 'Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.',
  'dashboard.indicator.guide.title': 'Python Indicator & Strategy Development Guide',
  'dashboard.indicator.guide.intro': 'This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.',
  'dashboard.indicator.guide.section1.title': '1. Runtime Environment & Predefined Variables',
  'dashboard.indicator.guide.section1.env': 'Your code runs in a browser-based Python environment (Pyodide).',
  'dashboard.indicator.guide.section1.libs': 'Pre-installed Libraries',
  'dashboard.indicator.guide.section1.libsDesc': 'The following libraries are imported by default, no need to import again:',
  'dashboard.indicator.guide.section1.libsList': '<code>pandas</code> (pd), <code>numpy</code> (np), <code>math</code>, <code>json</code>',
  'dashboard.indicator.guide.section1.data': 'Input Data: df',
  'dashboard.indicator.guide.section1.dataDesc': 'The system automatically converts current K-line data into a Pandas DataFrame object, variable name is <code>df</code>.',
  'dashboard.indicator.guide.section1.dataColumns': '<code>df</code> contains the following columns (all float type):',
  'dashboard.indicator.guide.section1.dataColumnsList': '<code>time</code> (timestamp, seconds), <code>open</code>, <code>high</code>, <code>low</code>, <code>close</code>, <code>volume</code>',
  'dashboard.indicator.guide.section1.dataNote': 'Data index is arranged from old to new (0 is the earliest data, last row is the latest data).',
  'dashboard.indicator.guide.section1.dataIndex': 'Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using <code>.values</code> which loses the index.',
  'dashboard.indicator.guide.section2.title': '2. Parameter Definition',
  'dashboard.indicator.guide.section2.desc': 'You can define variables as parameters at the beginning of your code. The system will try to parse statements like <code>variable = value</code> as adjustable parameters.',
  'dashboard.indicator.guide.section2.example': 'Parameter Example',
  'dashboard.indicator.guide.section2.exampleCode': '<code>span = 20</code> or <code>multiplier = 2.0</code>',
  'dashboard.indicator.guide.section3.title': '3. Backtest Signal Setup (Important!)',
  'dashboard.indicator.guide.section3.desc': 'If you want your indicator to support backtesting, you <strong>must</strong> set the following two columns in your code:',
  'dashboard.indicator.guide.section3.backtestRequired': '<strong>Required for Backtesting:</strong>',
  'dashboard.indicator.guide.section3.backtestBuySignal': "<code>df['buy_signal']</code> - Boolean Series, True indicates buy signal",
  'dashboard.indicator.guide.section3.backtestSellSignal': "<code>df['sell_signal']</code> - Boolean Series, True indicates sell signal",
  'dashboard.indicator.guide.section3.backtestExample': 'Example:',
  'dashboard.indicator.guide.section3.backtestExampleCode': "<code>df['buy_signal'] = condition_buy</code><br/><code>df['sell_signal'] = condition_sell</code>",
  'dashboard.indicator.guide.section3.backtestNote': 'Note: Even if you only set <code>output.signals</code> for chart display, you must set these two columns to enable backtesting.',
  'dashboard.indicator.guide.section4.title': '4. Output Requirements: output',
  'dashboard.indicator.guide.section4.desc': 'At the end of code execution, you must define a dictionary named <code>output</code> to tell the chart how to display results.',
  'dashboard.indicator.guide.section4.fields': 'The <code>output</code> dictionary contains the following fields:',
  'dashboard.indicator.guide.section4.plots': '<code>plots</code> - For drawing lines (e.g., moving averages, RSI)',
  'dashboard.indicator.guide.section4.signals': '<code>signals</code> - For marking buy/sell signals (e.g., arrows, labels)',
  'dashboard.indicator.guide.section4.name': '<code>name</code> - Indicator name (optional)',
  'dashboard.indicator.guide.section4.calculatedVars': '<code>calculatedVars</code> - Calculated variables (optional, for displaying additional information)',
  'dashboard.indicator.guide.section5.title': '5. Plot Configuration (Plots)',
  'dashboard.indicator.guide.section5.desc': 'Each object in the <code>plots</code> list represents a line.',
  'dashboard.indicator.guide.section5.table.field': 'Field',
  'dashboard.indicator.guide.section5.table.type': 'Type',
  'dashboard.indicator.guide.section5.table.required': 'Required',
  'dashboard.indicator.guide.section5.table.requiredYes': 'Yes',
  'dashboard.indicator.guide.section5.table.requiredNo': 'No',
  'dashboard.indicator.guide.section5.table.desc': 'Description',
  'dashboard.indicator.guide.section5.table.name': 'The name of the indicator line, displayed in the legend',
  'dashboard.indicator.guide.section5.table.data': 'Data list, length must match the number of rows in df. Recommended to use <code>series.tolist()</code>',
  'dashboard.indicator.guide.section5.table.color': "Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign",
  'dashboard.indicator.guide.section5.table.typeDesc': "Chart type, default is 'line'",
  'dashboard.indicator.guide.section5.table.overlay': '<strong>Important.</strong> True means display on main chart (with K-line), False means display on sub-chart (independent area)',
  'dashboard.indicator.guide.section5.example': 'Example: Draw Simple Moving Average (SMA)',
  'dashboard.indicator.guide.section5.exampleCalc': 'Calculate SMA',
  'dashboard.indicator.guide.section5.exampleOutput': 'Construct Output',
  'dashboard.indicator.guide.section5.exampleOverlay': 'Display on main chart',
  'dashboard.indicator.guide.section6.title': '6. Signal Markers (Signals)',
  'dashboard.indicator.guide.section6.desc': "<code>signals</code> are used to mark buy/sell points on specific K-lines through icons or text. <strong>Note:</strong> This is only for chart display. The backtest system uses <code>df['buy_signal']</code> and <code>df['sell_signal']</code>.",
  'dashboard.indicator.guide.section6.table.type': "Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)",
  'dashboard.indicator.guide.section6.table.data': 'Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions',
  'dashboard.indicator.guide.section6.table.text': 'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',
  'dashboard.indicator.guide.section6.table.color': 'Marker color',
  'dashboard.indicator.guide.section6.hint': 'The system automatically handles positioning.',
  'dashboard.indicator.guide.section6.buy': 'Markers will be automatically positioned below the Low of the current K-line',
  'dashboard.indicator.guide.section6.sell': 'Markers will be automatically positioned above the High of the current K-line',
  'dashboard.indicator.guide.section6.example': 'Example: Draw Buy/Sell Signals',
  'dashboard.indicator.guide.section6.exampleInit': 'Initialize signal list, fill all with None',
  'dashboard.indicator.guide.section6.exampleLogic': 'Simple logic: mark buy when close price is greater than open price',
  'dashboard.indicator.guide.section6.exampleNote': 'In actual logic, please use loops or vectorized operations',
  'dashboard.indicator.guide.section6.examplePrice': 'Record price',
  'dashboard.indicator.guide.section6.exampleText': 'Buy',
  'dashboard.indicator.guide.section7.title': '7. Complete Code Examples',
  'dashboard.indicator.guide.section7.exampleA': 'Example A: Dual EMA Strategy (Supports Backtesting)',
  'dashboard.indicator.guide.section7.exampleACode': "# 1. Calculate indicators<br/>df['ema_fast'] = df['close'].ewm(span=5, adjust=False).mean()<br/>df['ema_slow'] = df['close'].ewm(span=13, adjust=False).mean()<br/><br/># 2. Calculate crossover signals<br/>cross_up = (df['ema_fast'] > df['ema_slow']) & (df['ema_fast'].shift(1) <= df['ema_slow'].shift(1))<br/>cross_down = (df['ema_fast'] < df['ema_slow']) & (df['ema_fast'].shift(1) >= df['ema_slow'].shift(1))<br/><br/># 3. 【Important】Set NEW backtest signal columns (bool)<br/>df['open_long'] = cross_up<br/>df['close_long'] = cross_down<br/>df['open_short'] = cross_down<br/>df['close_short'] = cross_up<br/><br/># 4. Generate signal data for chart display<br/>buy_signals = [df['low'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]<br/>sell_signals = [df['high'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]<br/><br/># 5. Build output<br/>output = {<br/>  \"name\": \"Dual EMA Strategy\",<br/>  \"plots\": [<br/>    {\"name\": \"EMA 5\", \"data\": df['ema_fast'].tolist(), \"color\": \"#FF6B6B\", \"overlay\": True},<br/>    {\"name\": \"EMA 13\", \"data\": df['ema_slow'].tolist(), \"color\": \"#4ECDC4\", \"overlay\": True}<br/>  ],<br/>  \"signals\": [<br/>    {\"type\": \"buy\", \"text\": \"BUY\", \"data\": buy_signals, \"color\": \"#00E676\"},<br/>    {\"type\": \"sell\", \"text\": \"SELL\", \"data\": sell_signals, \"color\": \"#FF5252\"}<br/>  ]<br/>}",
  'dashboard.indicator.guide.section7.exampleB': 'Example B: Bollinger Bands - Chart Display Only',
  'dashboard.indicator.guide.section7.exampleBCode': "# Calculate Bollinger Bands (chart display only, no backtesting)<br/>length = 20<br/>mult = 2.0<br/>df['sma'] = df['close'].rolling(length).mean()<br/>df['std'] = df['close'].rolling(length).std()<br/>df['upper'] = df['sma'] + mult * df['std']<br/>df['lower'] = df['sma'] - mult * df['std']<br/><br/>output = {<br/>  \"name\": \"Bollinger Bands\",<br/>  \"plots\": [<br/>    {\"name\": \"Upper\", \"data\": df['upper'].tolist(), \"color\": \"#FF5252\", \"overlay\": True},<br/>    {\"name\": \"Middle\", \"data\": df['sma'].tolist(), \"color\": \"#2196F3\", \"overlay\": True},<br/>    {\"name\": \"Lower\", \"data\": df['lower'].tolist(), \"color\": \"#00E676\", \"overlay\": True}<br/>  ]<br/>}",
  'dashboard.indicator.guide.section7.exampleC': 'Example C: RSI Strategy (Supports Backtesting)',
  'dashboard.indicator.guide.section7.exampleCCode': "# Calculate RSI<br/>delta = df['close'].diff()<br/>up = delta.clip(lower=0)<br/>down = -1 * delta.clip(upper=0)<br/>ema_up = up.ewm(com=13, adjust=False).mean()<br/>ema_down = down.ewm(com=13, adjust=False).mean()<br/>rs = ema_up / ema_down<br/>df['rsi'] = 100 - (100 / (1 + rs))<br/><br/># Generate trading signals<br/>buy_condition = df['rsi'] < 30  # Oversold buy<br/>sell_condition = df['rsi'] > 70  # Overbought sell<br/><br/># 【Important】Set NEW backtest signal columns (bool)<br/>df['open_long'] = buy_condition<br/>df['close_long'] = sell_condition<br/>df['open_short'] = sell_condition<br/>df['close_short'] = buy_condition<br/><br/># Generate chart signals<br/>buy_signals = [df['low'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]<br/>sell_signals = [df['high'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]<br/><br/>output = {<br/>  \"name\": \"RSI Strategy\",<br/>  \"plots\": [<br/>    {\"name\": \"RSI\", \"data\": df['rsi'].tolist(), \"color\": \"#9C27B0\", \"overlay\": False},<br/>    {\"name\": \"Overbought\", \"data\": [70] * len(df), \"color\": \"#FF5252\", \"style\": \"dashed\", \"overlay\": False},<br/>    {\"name\": \"Oversold\", \"data\": [30] * len(df), \"color\": \"#00E676\", \"style\": \"dashed\", \"overlay\": False}<br/>  ],<br/>  \"signals\": [<br/>    {\"type\": \"buy\", \"text\": \"BUY\", \"data\": buy_signals, \"color\": \"#00E676\"},<br/>    {\"type\": \"sell\", \"text\": \"SELL\", \"data\": sell_signals, \"color\": \"#FF5252\"}<br/>  ]<br/>}",
  'dashboard.indicator.guide.section6.param': 'Parameters',
  'dashboard.indicator.guide.section6.calc': 'Calculate',
  'dashboard.indicator.guide.section6.output': 'Output',
  'dashboard.indicator.guide.section6.generate': 'Generate signal data (initialize with None)',
  'dashboard.indicator.guide.section6.subchart': 'Display on sub-chart',
  'dashboard.indicator.guide.section8.title': '8. Frequently Asked Questions (FAQ)',
  'dashboard.indicator.guide.section8.q1': "Q: Why can't my indicator be backtested?",
  'dashboard.indicator.guide.section8.a1': "A: The backtest system requires NEW signal columns: <code>df['open_long']</code>, <code>df['close_long']</code>, <code>df['open_short']</code>, <code>df['close_short']</code> (boolean). Even if you set <code>output.signals</code> for chart display, you must set these columns to enable backtesting.",
  'dashboard.indicator.guide.section8.q2': 'Q: Data length mismatch?',
  'dashboard.indicator.guide.section8.a2': "A: The <code>data</code> list in <code>plots</code> and <code>signals</code> must have exactly the same length as the K-line data. If you use <code>df['xxx'].tolist()</code>, there is usually no problem.",
  'dashboard.indicator.guide.section8.q3': 'Q: How to handle NaN (empty values)?',
  'dashboard.indicator.guide.section8.a3': "A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use <code>df.fillna(0)</code> or other methods.",
  'dashboard.indicator.guide.section8.q4': 'Q: Index mismatch causing all signals to be NaN?',
  'dashboard.indicator.guide.section8.a4': "A: Please ensure you preserve the original df index (timestamp). Avoid using <code>.values</code> to create new Series. Use columns directly like <code>df['close']</code> for operations.",
  'dashboard.indicator.guide.section8.q5': 'Q: Can I use third-party network libraries?',
  'dashboard.indicator.guide.section8.a5': 'A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.',
  'dashboard.indicator.guide.section8.q6': 'Q: How to debug code?',
  'dashboard.indicator.guide.section8.a6': 'A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.',
  'dashboard.indicator.guide.section8.q7': 'Q: Backtest shows 0 signals?',
  'dashboard.indicator.guide.section8.a7': "A: Please check the data type of <code>df['open_long']</code>/<code>df['close_long']</code>/<code>df['open_short']</code>/<code>df['close_short']</code>. They should be boolean (True/False), not numeric. Use <code>condition.fillna(False).astype(bool)</code> to ensure correct type.",
  'dashboard.indicator.backtest.commissionHint': 'Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.',
  'dashboard.indicator.backtest.historyTitle': 'Backtest History',
  'dashboard.indicator.backtest.historyRefresh': 'Refresh',
  'dashboard.indicator.backtest.historyView': 'View',
  'dashboard.indicator.backtest.historyNoData': 'No backtest history',
  'dashboard.indicator.backtest.historyUseCurrent': 'Only current symbol/timeframe',
  'dashboard.indicator.backtest.historyFilterSymbol': 'Symbol',
  'dashboard.indicator.backtest.historyFilterTimeframe': 'Timeframe',
  'dashboard.indicator.backtest.historyApply': 'Apply filters',
  'dashboard.indicator.backtest.historyAIAnalyze': 'AI Analyze',
  'dashboard.indicator.backtest.historyAIAnalyzeTitle': 'AI Suggestions',
  'dashboard.indicator.backtest.historyNoAIResult': 'No AI analysis result',
  'dashboard.indicator.backtest.historyRunId': 'Run ID',
  'dashboard.indicator.backtest.historyCreatedAt': 'Time',
  'dashboard.indicator.backtest.historyRange': 'Range',
  'dashboard.indicator.backtest.historyStatus': 'Status',
  'dashboard.indicator.backtest.historyStatusSuccess': 'Success',
  'dashboard.indicator.backtest.historyStatusFailed': 'Failed',
  'dashboard.indicator.backtest.historyActions': 'Actions',
  'dashboard.indicator.backtest.hint.entryPctMax': 'Max entry: {maxPct}% (reserve budget for future scale-ins)',
  'trading-assistant.exchange.ipWhitelistTip': 'Please add the following IPs to the whitelist in your exchange API settings:',
  'signal-robot.title': 'Signal Robot Console',
  'signal-robot.createBot': 'Create New Bot',
  'signal-robot.search.nameOrSymbol': 'Name/Symbol',
  'signal-robot.search.placeholder': 'Search bot name or symbol',
  'signal-robot.search.status': 'Status',
  'signal-robot.search.statusAll': 'All',
  'signal-robot.search.statusRunning': 'Running',
  'signal-robot.search.statusPaused': 'Paused',
  'signal-robot.search.query': 'Query',
  'signal-robot.search.reset': 'Reset',
  'signal-robot.table.botName': 'Bot Name',
  'signal-robot.table.symbolTimeframe': 'Symbol/Timeframe',
  'signal-robot.table.triggerStrategy': 'Trigger Strategy',
  'signal-robot.table.notificationChannels': 'Notification Channels',
  'signal-robot.table.status': 'Status',
  'signal-robot.table.action': 'Action',
  'signal-robot.table.triggerConditions': '{count} trigger conditions',
  'signal-robot.table.monitoring': 'Monitoring',
  'signal-robot.table.paused': 'Paused',
  'signal-robot.table.edit': 'Edit',
  'signal-robot.table.pause': 'Pause',
  'signal-robot.table.start': 'Start',
  'signal-robot.table.delete': 'Delete',
  'signal-robot.table.deleteConfirm': 'Are you sure you want to delete this bot?',
  'signal-robot.table.deleteSuccess': 'Deleted successfully',
  'signal-robot.table.startSuccess': 'Bot started',
  'signal-robot.table.pauseSuccess': 'Bot paused',
  'signal-robot.channel.telegram': 'Telegram',
  'signal-robot.channel.discord': 'Discord',
  'signal-robot.channel.email': 'Email',
  'signal-robot.channel.webhook': 'Webhook',
  'signal-robot.channel.browser': 'Browser Push',
  'signal-robot.modal.createTitle': 'Create New Signal Robot',
  'signal-robot.modal.editTitle': 'Edit Signal Robot',
  'signal-robot.modal.step.basic': 'Basic Settings',
  'signal-robot.modal.step.entry': 'Entry Strategy',
  'signal-robot.modal.step.position': 'Position Management',
  'signal-robot.modal.step.risk': 'Risk Control',
  'signal-robot.modal.step.notify': 'Notification Config',
  'signal-robot.modal.prev': 'Previous',
  'signal-robot.modal.next': 'Next',
  'signal-robot.modal.preview': 'Preview Backtest',
  'signal-robot.modal.complete': 'Complete & Run',
  'signal-robot.modal.saveSuccess': 'Saved successfully',
  'signal-robot.modal.previewDeveloping': 'Preview feature is under development...',
  'signal-robot.modal.basicInfoRequired': 'Please complete basic information',
  'signal-robot.basic.alert': 'Set basic information for the bot',
  'signal-robot.basic.title': 'Basic Information',
  'signal-robot.basic.botName': 'Bot Name',
  'signal-robot.basic.botNamePlaceholder': 'e.g.: BTC SuperTrend Strategy',
  'signal-robot.basic.symbol': 'Trading Pair',
  'signal-robot.basic.symbolPlaceholder': 'Select from watchlist',
  'signal-robot.basic.noWatchlist': 'No watchlist items, please add in market page first',
  'signal-robot.basic.timeframe': 'K-Line Period',
  'signal-robot.basic.timeframe15m': '15 Minutes',
  'signal-robot.basic.timeframe30m': '30 Minutes',
  'signal-robot.basic.timeframe1h': '1 Hour',
  'signal-robot.basic.timeframe4h': '4 Hours',
  'signal-robot.basic.timeframe1d': '1 Day',
  'signal-robot.basic.autoNameSuggestion': '{symbol} Signal Robot',
  'signal-robot.entry.alert': 'Trigger entry signal when all conditions below are met',
  'signal-robot.entry.condition': 'Condition {index}',
  'signal-robot.entry.indicator': 'Indicator',
  'signal-robot.entry.indicatorSupertrend': 'SuperTrend',
  'signal-robot.entry.indicatorEma': 'EMA (Exponential Moving Average)',
  'signal-robot.entry.indicatorRsi': 'RSI (Relative Strength Index)',
  'signal-robot.entry.indicatorMacd': 'MACD',
  'signal-robot.entry.indicatorBollinger': 'Bollinger Bands',
  'signal-robot.entry.atrPeriod': 'ATR Period',
  'signal-robot.entry.multiplier': 'Multiplier',
  'signal-robot.entry.triggerSignal': 'Trigger Signal',
  'signal-robot.entry.signalTrendBullish': 'Trend Bullish',
  'signal-robot.entry.signalTrendBearish': 'Trend Bearish',
  'signal-robot.entry.signalIsUptrend': 'Is Uptrend',
  'signal-robot.entry.signalIsDowntrend': 'Is Downtrend',
  'signal-robot.entry.period': 'Period',
  'signal-robot.entry.compareCondition': 'Compare Condition',
  'signal-robot.entry.priceAbove': 'Price > EMA (Price Above)',
  'signal-robot.entry.priceBelow': 'Price < EMA (Price Below)',
  'signal-robot.entry.crossUp': 'Price Crosses Above EMA (Golden Cross)',
  'signal-robot.entry.crossDown': 'Price Crosses Below EMA (Death Cross)',
  'signal-robot.entry.compare': 'Compare',
  'signal-robot.entry.greaterThan': 'Greater Than',
  'signal-robot.entry.lessThan': 'Less Than',
  'signal-robot.entry.crossUpShort': 'Cross Up',
  'signal-robot.entry.crossDownShort': 'Cross Down',
  'signal-robot.entry.threshold': 'Threshold',
  'signal-robot.entry.selectIndicator': 'Please select an indicator to configure parameters',
  'signal-robot.entry.addCondition': 'Add Condition',
  'signal-robot.position.alert': 'Configure initial position size, leverage and pyramiding rules',
  'signal-robot.position.basicTitle': 'Basic Position Management',
  'signal-robot.position.initialSize': 'Initial Size (Capital %)',
  'signal-robot.position.initialSizeHint': 'Recommended 5% - 20%',
  'signal-robot.position.leverage': 'Leverage',
  'signal-robot.position.leverageHint': 'Please ensure your exchange account supports this leverage',
  'signal-robot.position.maxPyramiding': 'Max Pyramiding Times',
  'signal-robot.position.maxPyramidingHint': '0 means no pyramiding',
  'signal-robot.position.pyramidingTitle': 'Pyramiding Rules',
  'signal-robot.position.pyramidingEnabled': 'Enabled',
  'signal-robot.position.pyramidingDisabled': 'Disabled',
  'signal-robot.position.pyramidingCondition': 'Pyramiding Trigger Condition',
  'signal-robot.position.priceRisePct': 'Price Rises (Long) / Falls (Short)',
  'signal-robot.position.profitPct': 'Profit Reaches',
  'signal-robot.position.triggerThreshold': 'Trigger Threshold (%)',
  'signal-robot.position.triggerThresholdHint': 'e.g. 3%: add position once every 3% rise',
  'signal-robot.position.addSize': 'Single Add Size (Capital %)',
  'signal-robot.position.pyramidingDisabledHint': 'Pyramiding disabled, only initial position will be executed',
  'signal-robot.risk.alert': 'Configure take profit, stop loss and exit rules',
  'signal-robot.risk.stopLossTitle': 'Stop Loss',
  'signal-robot.risk.stopLossEnabled': 'Enabled',
  'signal-robot.risk.stopLossDisabled': 'Disabled',
  'signal-robot.risk.stopLossType': 'Stop Loss Type',
  'signal-robot.risk.stopLossFixedPct': 'Fixed Percentage',
  'signal-robot.risk.stopLossAtrMultiplier': 'ATR Multiplier',
  'signal-robot.risk.stopLossValue': 'Value',
  'signal-robot.risk.stopLossFixedHint': 'e.g. 2%: stop loss when loss reaches 2%',
  'signal-robot.risk.stopLossAtrHint': 'e.g. 2.0: stop loss when price touches ATR*2.0',
  'signal-robot.risk.stopLossDisabledHint': 'Stop loss disabled (high risk)',
  'signal-robot.risk.trailingStopTitle': 'Trailing Stop',
  'signal-robot.risk.activationProfit': 'Activation Profit (%)',
  'signal-robot.risk.activationProfitHint': 'Start trailing when profit reaches this level',
  'signal-robot.risk.callbackPct': 'Callback (%)',
  'signal-robot.risk.callbackPctHint': 'Trigger take profit when price falls from peak by this percentage',
  'signal-robot.risk.trailingStopDisabledHint': 'Trailing stop disabled',
  'signal-robot.risk.otherExitTitle': 'Other Exit Rules',
  'signal-robot.risk.signalExit': 'Allow Signal Exit',
  'signal-robot.risk.signalExitHint': 'Close position immediately when reverse signal appears (e.g. close long when short signal appears)',
  'signal-robot.notify.alert': 'Configure notification methods when signal is triggered',
  'signal-robot.notify.channelTitle': 'Notification Channels',
  'signal-robot.notify.discordWebhook': 'Discord Webhook',
  'signal-robot.notify.genericWebhook': 'Generic Webhook',
  'signal-robot.notify.webhookUrl': 'Webhook URL',
  'signal-robot.notify.webhookUrlPlaceholder': 'https://example.com/webhook',
  'signal-robot.notify.discordUrl': 'Discord URL',
  'signal-robot.notify.discordUrlPlaceholder': 'https://discord.com/api/webhooks/...',
  'signal-robot.operator.greaterThan': 'Greater Than',
  'signal-robot.operator.lessThan': 'Less Than',
  'signal-robot.operator.equal': 'Equal',
  'signal-robot.operator.goldenCross': 'Golden Cross',
  'signal-robot.operator.deathCross': 'Death Cross',
  'signal-robot.operator.increaseBy': 'Increase By',
  'signal-robot.operator.decreaseBy': 'Decrease By',
  'signal-robot.indicator.price': 'Price',
  'signal-robot.indicator.rsi': 'RSI',
  'signal-robot.indicator.kdjK': 'KDJ(K)',
  'signal-robot.indicator.kdjJ': 'KDJ(J)',
  'signal-robot.indicator.macd': 'MACD',
  'signal-robot.indicator.macdHist': 'MACD Histogram',
  'signal-robot.indicator.bollingerUp': 'Bollinger Upper',
  'signal-robot.indicator.bollingerLow': 'Bollinger Lower',
  'signal-robot.indicator.volume': 'Volume',
  'signal-robot.indicator.changePct1h': '1H Change %',
  'signal-robot.indicator.changePct24h': '24H Change %',
  'signal-robot.indicator.signalLine': 'Signal Line',

  // Settings (Memory/Reflection)
  'settings.group.agent_memory': 'Mémoire/Réflexion',
  'settings.group.reflection_worker': 'Worker de vérification de réflexion automatique',
  'settings.field.ENABLE_AGENT_MEMORY': 'Activer la mémoire de l’agent',
  'settings.field.AGENT_MEMORY_ENABLE_VECTOR': 'Activer la recherche vectorielle (local)',
  'settings.field.AGENT_MEMORY_EMBEDDING_DIM': 'Dimension d’embedding',
  'settings.field.AGENT_MEMORY_TOP_K': 'Nombre Top-K',
  'settings.field.AGENT_MEMORY_CANDIDATE_LIMIT': 'Taille de la fenêtre de candidats',
  'settings.field.AGENT_MEMORY_HALF_LIFE_DAYS': 'Demi-vie de décroissance temporelle (jours)',
  'settings.field.AGENT_MEMORY_W_SIM': 'Poids de similarité',
  'settings.field.AGENT_MEMORY_W_RECENCY': 'Poids de récence',
  'settings.field.AGENT_MEMORY_W_RETURNS': 'Poids des rendements',
  'settings.field.ENABLE_REFLECTION_WORKER': 'Activer la vérification automatique',
  'settings.field.REFLECTION_WORKER_INTERVAL_SEC': 'Intervalle de vérification (s)'
}

export default {
  ...components,
  ...locale
}
