Files
descrybe/apps/web/src/lib/i18n/messages/fr.ts
T

5638 lines
408 KiB
TypeScript
Raw Normal View History

import type { MessageDict } from "./types";
/** French (fr) UI pack — keys must stay in sync with en.ts. */
export const fr: MessageDict = {
"app.name": "Descrybe",
"app.home": "Accueil Descrybe",
"common.cancel": "Annuler",
"common.save": "Enregistrer les modifications",
"common.saveShort": "Enregistrer",
"common.continue": "Continuer",
"common.open": "Ouvrir",
"common.markDone": "Marquer comme terminé",
"common.viewAll": "Tout voir",
"common.close": "Fermer",
"common.askAdmin": "Demandez à un administrateur de l'entreprise",
"common.you": "Vous",
"common.active": "Actif",
"common.pending": "En attente",
"common.email": "E-mail",
"common.password": "Mot de passe",
"common.name": "Votre nom",
"common.viewPricing": "Voir les tarifs",
"common.backToSignIn": "Retour à la connexion",
"common.signingOut": "Déconnexion…",
"common.signOutAndContinue": "Se déconnecter et continuer",
"common.staySignedIn": "Rester connecté",
"a11y.skipToContent": "Aller au contenu",
"theme.switchToDark": "Passer au thème sombre",
"theme.switchToLight": "Passer au thème clair",
"header.signOut": "Déconnexion",
"header.signingOut": "Déconnexion…",
"status.emDash": "—",
"status.pending": "En attente",
"status.processing": "Traitement",
"status.completed": "Terminé",
"status.failed": "Échoué",
"status.cancelled": "Annulé",
"nav.section.overview": "Vue d'ensemble",
"nav.section.catalog": "Catalogue",
"nav.section.feeds": "Feeds",
"nav.section.stores": "Boutiques",
"nav.section.processing": "Traitement",
"nav.section.marketing": "Marketing",
"nav.section.integrations": "Intégrations",
"nav.section.account": "Compte",
"nav.section.platform": "Plateforme",
"nav.dashboard": "Tableau de bord",
"nav.products": "Produits",
"nav.categories": "Catégories",
"nav.attributes": "Attributs",
"nav.fields": "Champs",
"nav.feeds": "Feeds",
"nav.exports": "Exportations",
"nav.stores": "Boutiques",
"nav.jobs": "Tâches",
"nav.campaigns": "Campagnes",
"nav.calendar": "Calendrier",
"nav.seo": "SEO",
"nav.brand": "Marque",
"nav.reviews": "Avis",
"nav.ai": "IA",
"nav.email": "E-mail",
"nav.billing": "Facturation",
"nav.settings": "Paramètres",
"nav.support": "Assistance",
"nav.admin": "Admin",
"nav.main": "Navigation principale",
"nav.sidebar": "Barre latérale de l'application",
"nav.close": "Fermer la navigation",
"nav.closeMenu": "Fermer le menu",
"nav.open": "Ouvrir la navigation",
"nav.commandPalette": "Rechercher des pages",
"nav.commandPaletteLabel": "Rechercher",
"auth.login.title": "Se connecter",
"auth.login.description": "Utilisez votre e-mail et mot de passe Descrybe.",
"auth.login.submit": "Se connecter",
"auth.login.submitting": "Connexion…",
"auth.login.failed": "Échec de la connexion",
"auth.login.passwordNotSet": "Ce compte a encore besoin d'un mot de passe. Ouvrez votre lien d'invitation, ou demandez à un administrateur d'en émettre un nouveau.",
"auth.login.setPasswordFirstTitle": "Définissez d'abord le mot de passe :",
"auth.login.setPasswordFirstBody": "utilisez le lien d'invitation de votre e-mail. Si le lien a été envoyé à une ancienne adresse (dérive d'e-mail), demandez à un administrateur de l'entreprise de renvoyer une invitation de définition de mot de passe à {email}.",
"auth.login.yourEmail": "votre e-mail",
"auth.login.platformAdminsReissue": "Les administrateurs de la plateforme peuvent réémettre depuis",
"auth.login.adminUsersLink": "Admin → Utilisateurs",
"auth.login.haveToken": "Vous avez un jeton ? Ouvrir accepter l'invitation",
"auth.login.noAccount": "Pas de compte ?",
"auth.login.createCompany": "Créer une entreprise",
"auth.login.haveInvite": "Vous avez une invitation ou un lien de définition de mot de passe ?",
"auth.login.acceptInvite": "Accepter l'invitation",
"auth.login.forgotPassword": "Mot de passe oublié ?",
"auth.login.forgotPasswordHelp": "Saisissez votre e-mail sur la page de réinitialisation. Si vous navez jamais défini de mot de passe, utilisez le lien dinvitation / définition.",
"auth.forgot.title": "Mot de passe oublié",
"auth.forgot.description": "Saisissez le-mail de votre compte. Sil correspond à un compte actif, nous enverrons un lien de réinitialisation.",
"auth.forgot.submit": "Envoyer le lien",
"auth.forgot.submitting": "Envoi…",
"auth.forgot.failed": "Impossible de demander une réinitialisation",
"auth.forgot.sentTitle": "Vérifiez votre e-mail",
"auth.forgot.sentBody": "Si un compte existe pour cette adresse, un lien de réinitialisation est en route. Le lien expire dans une heure.",
"auth.forgot.backToSignIn": "Retour à la connexion",
"auth.reset.title": "Réinitialiser le mot de passe",
"auth.reset.description": "Choisissez un nouveau mot de passe pour votre compte Descrybe (au moins 8 caractères).",
"auth.reset.submit": "Enregistrer le nouveau mot de passe",
"auth.reset.submitting": "Enregistrement…",
"auth.reset.failed": "Impossible de réinitialiser le mot de passe",
"auth.reset.doneTitle": "Mot de passe mis à jour",
"auth.reset.doneDescription": "Connectez-vous avec votre e-mail et le nouveau mot de passe.",
"auth.reset.goToSignIn": "Aller à la connexion",
"auth.reset.passwordConfirm": "Confirmer le mot de passe",
"auth.reset.passwordMismatch": "Les mots de passe ne correspondent pas",
"auth.reset.missingTitle": "Lien de réinitialisation manquant",
"auth.reset.missingDescription": "Ouvrez le lien reçu par e-mail pour choisir un nouveau mot de passe.",
"auth.reset.requestNewLink": "Demander un nouveau lien de réinitialisation",
"auth.reset.tokenMissing": "Aucun lien de réinitialisation na été fourni. Utilisez le lien de votre e-mail, ou demandez-en un nouveau.",
"auth.reset.tokenInvalid": "Ce lien de réinitialisation est invalide ou expiré. Demandez-en un nouveau depuis la page mot de passe oublié.",
"auth.reset.linkRecognized": "Lien de réinitialisation reconnu. Saisissez un nouveau mot de passe ci-dessous — le secret nest pas affiché sur cette page.",
"auth.reset.tokenLabel": "Jeton de réinitialisation",
"auth.reset.passwordHint": "Au moins 8 caractères. Pas dautres règles de complexité.",
"auth.register.title": "Créer une entreprise",
"auth.register.description": "Enregistre une entreprise et son utilisateur administrateur.",
"auth.register.companyName": "Nom de l'entreprise",
"auth.register.submit": "Créer un compte",
"auth.register.submitting": "Création…",
"auth.register.failed": "Échec de l'inscription",
"auth.register.haveAccount": "Vous avez déjà un compte ?",
"auth.register.signIn": "Se connecter",
"auth.invite.title": "Accepter l'invitation",
"auth.invite.setPasswordTitle": "Définir le mot de passe",
"auth.invite.description": "Définissez votre mot de passe pour rejoindre l'entreprise. Votre administrateur a attribué Membre (travail quotidien) ou Admin (équipe et facturation).",
"auth.invite.setPasswordDescription": "Choisissez un mot de passe pour votre compte Descrybe migré (au moins 8 caractères).",
"auth.invite.checking": "Vérification de l'invitation…",
"auth.invite.forEmail": "Invitation pour {email}.",
"auth.invite.linkRecognized": "Lien d'invitation reconnu. Saisissez un mot de passe ci-dessous pour continuer — le secret n'est pas affiché sur cette page.",
"auth.invite.resetLinkRecognized": "Lien de réinitialisation reconnu. Saisissez un mot de passe ci-dessous pour continuer — le secret n'est pas affiché sur cette page.",
"auth.invite.tokenLabel": "Jeton d'invitation",
"auth.invite.resetTokenLabel": "Jeton de réinitialisation",
"auth.invite.tokenHelp": "Collez le jeton de votre e-mail d'invitation. Il est masqué dans ce champ.",
"auth.invite.passwordHint": "Au moins 8 caractères. Aucune autre règle de complexité.",
"auth.invite.submit": "Accepter l'invitation",
"auth.invite.setPasswordSubmit": "Définir le mot de passe",
"auth.invite.accepting": "Acceptation…",
"auth.invite.saving": "Enregistrement…",
"auth.invite.verifyFailed": "Impossible de vérifier l'invitation",
"auth.invite.verifySetPasswordFailed": "Impossible de vérifier le lien de définition du mot de passe",
"auth.invite.acceptFailed": "Impossible d'accepter l'invitation",
"auth.invite.setPasswordFailed": "Impossible de définir le mot de passe",
"auth.invite.expired": "Cette invitation est invalide ou expirée. Demandez à votre administrateur d'envoyer une nouvelle invitation, puis ouvrez le nouveau lien (ou collez le nouveau jeton ci-dessous).",
"auth.invite.setPasswordExpired": "Ce lien de définition de mot de passe est invalide ou expiré. Demandez à un administrateur de l'entreprise ou de la plateforme de le réémettre, puis ouvrez le nouveau lien (ou collez le nouveau jeton ci-dessous).",
"auth.invite.emailMismatchDefault": "Vous êtes connecté avec un e-mail différent de celui de cette invitation.",
"auth.invite.expiredFooter": "Lien expiré ? Demandez à un administrateur de le réémettre — il n'y a pas d'API de renvoi en libre-service. Administrateurs de plateforme :",
"auth.invite.adminUsersLink": "Admin → Utilisateurs",
"auth.invite.doneTitle": "Vous faites partie de l'équipe",
"auth.invite.doneSetPasswordTitle": "Mot de passe enregistré",
"auth.invite.doneDescription": "Votre compte est prêt. Ensuite, ouvrez le tableau de bord pour travailler avec les flux et les produits, ou consultez les paramètres de l'entreprise.",
"auth.invite.doneSetPasswordDescription": "Connectez-vous avec votre e-mail et le nouveau mot de passe pour ouvrir votre espace de travail.",
"auth.invite.openDashboard": "Ouvrir le tableau de bord",
"auth.invite.companySettings": "Paramètres de l'entreprise",
"auth.invite.goToSignIn": "Aller à la connexion",
"auth.invite.afterSignInNote": "Après la connexion, vous arrivez dans votre espace de travail — le parcours de configuration initiale est ignoré.",
"auth.invite.mismatchTitle": "Mauvais compte pour cette invitation",
"auth.invite.mismatchDescription": "Ce lien est destiné à un e-mail différent de celui avec lequel vous êtes connecté. Déconnectez-vous pour continuer en tant qu'utilisateur invité, ou restez connecté et demandez à un administrateur de réémettre l'invitation.",
"auth.invite.mismatchDetail": "Connecté en tant que {session}, mais cette invitation est pour {invite}.",
"auth.invite.mismatchFallback": "L'e-mail de la session ne correspond pas à cette invitation.",
"auth.invite.switchAccountTitle": "Changer de compte :",
"auth.invite.switchAccountBody": "déconnectez-vous, puis terminez ce formulaire avec l'e-mail invité{emailSuffix}.",
"auth.invite.reissueTitle": "Chemin de réémission :",
"auth.invite.reissueBody": "si votre vrai e-mail de connexion a changé (dérive d'e-mail), demandez à un administrateur de l'entreprise de révoquer cette invitation et d'en envoyer une nouvelle à l'e-mail que vous utilisez pour vous connecter. Les administrateurs de la plateforme peuvent aussi réémettre des liens de définition de mot de passe depuis Admin → Utilisateurs.",
"locale.switcher": "Langue de l'interface",
"locale.menu": "Choisir la langue de l'interface",
"locale.label": "Langue du tableau de bord",
"locale.help": "Modifie les libellés de la navigation et des paramètres. La langue du contenu généré se règle séparément sous Entreprise.",
"settings.contentLanguage": "Langue du contenu",
"settings.contentLanguageHelp": "Langue utilisée pour les titres, descriptions et autres contenus générés",
"settings.tab.profile": "Profil",
"settings.tab.company": "Entreprise",
"settings.tab.alerts": "Alertes",
"settings.tab.apiKeys": "Clés API",
"settings.tab.team": "Équipe",
"settings.title": "Paramètres",
"settings.description": "Compte, entreprise, clés API et équipe.",
"settings.accessDenied": "Vous n'avez pas l'autorisation d'ouvrir les paramètres de l'entreprise. Demandez de l'aide à un administrateur.",
"settings.loadFailed": "Échec du chargement des paramètres",
"settings.profileHeading": "Profil",
"settings.personalInfo": "Informations personnelles",
"settings.personalInfoHelp": "Mettez à jour vos informations personnelles",
"settings.firstName": "Prénom",
"settings.firstNamePlaceholder": "Votre prénom",
"settings.lastName": "Nom",
"settings.lastNamePlaceholder": "Votre nom",
"settings.email": "E-mail",
"settings.profileUpdated": "Profil mis à jour.",
"settings.profileUpdateFailed": "Impossible de mettre à jour le profil",
"settings.role.member": "Membre",
"settings.role.admin": "Admin",
"settings.teamHeading": "Membres de l'équipe",
"settings.inviteUser": "Inviter un utilisateur",
"settings.teamAdminOnly": "Seuls les administrateurs de l'entreprise peuvent inviter, promouvoir, rétrograder ou retirer des coéquipiers.",
"settings.shareAcceptLink": "Partager le lien d'acceptation",
"settings.shareAcceptLinkHelp": "L'e-mail sortant n'est pas configuré. Copiez ce lien à usage unique et envoyez-le à l'invité. Il définira un mot de passe (au moins 8 caractères) et rejoindra avec le rôle que vous avez choisi.",
"settings.acceptLinkLabel": "Lien d'acceptation d'invitation à usage unique",
"settings.copyLink": "Copier le lien",
"settings.linkCopied": "Lien d'acceptation copié.",
"settings.table.email": "E-mail",
"settings.table.role": "Rôle",
"settings.table.status": "Statut",
"settings.table.joined": "Inscription / expiration",
"settings.table.actions": "Actions",
"settings.teamForbidden": "Vous n'avez pas l'autorisation de voir la liste de l'équipe. Demandez de l'aide à un administrateur.",
"settings.noTeammates": "Pas encore de coéquipiers",
"settings.noTeammatesHelp": "Invitez des collègues en tant que Membre (produits et flux) ou Admin (équipe et paramètres de l'entreprise). Les invitations en attente s'affichent ici jusqu'à acceptation.",
"settings.noTeammatesMemberHelp": "Aucun coéquipier listé pour le moment. Demandez à un administrateur d'envoyer des invitations.",
"settings.memberActions": "Actions du membre",
"settings.makeAdmin": "Rendre admin",
"settings.makeMember": "Rendre membre",
"settings.removeMember": "Retirer",
"settings.revokeInvite": "Révoquer l'invitation",
"settings.needOneAdmin": "Les entreprises ont besoin d'au moins un administrateur",
"settings.expires": "Expire le {date}",
"settings.invalidEmail": "Saisissez une adresse e-mail valide.",
"settings.inviteCreatedNoMail": "Invitation créée pour {email} en tant que {role}. Copiez le lien d'acceptation ci-dessous et partagez-le — l'e-mail sortant n'est pas configuré.",
"settings.inviteSent": "Invitation envoyée à {email} en tant que {role}. La personne doit ouvrir l'e-mail et accepter avant expiration.",
"settings.inviteFailed": "Impossible d'envoyer l'invitation",
"settings.revokeConfirm": "Révoquer cette invitation ?",
"settings.revoked": "Invitation révoquée.",
"settings.revokeFailed": "Impossible de révoquer l'invitation",
"settings.removeConfirm": "Retirer {email} de cette entreprise ?",
"settings.memberRemoved": "{email} retiré.",
"settings.removeFailed": "Impossible de retirer l'utilisateur",
"settings.roleChangeConfirm": "{action} {email} en {role} ?",
"settings.roleChanged": "{email} est maintenant {role}.",
"settings.roleChangeFailed": "Impossible de mettre à jour le rôle",
"settings.promote": "Promouvoir",
"settings.demote": "Rétrograder",
"settings.inviteTitle": "Inviter un coéquipier",
"settings.inviteDescription": "Ils recevront un lien pour définir un mot de passe (au moins 8 caractères) et rejoindre cette entreprise.",
"settings.inviteEmail": "E-mail",
"settings.inviteEmailPlaceholder": "collegue@exemple.com",
"settings.inviteRole": "Rôle",
"settings.inviteRoleHint": "Les membres gèrent les produits et les flux. Les administrateurs peuvent aussi inviter des coéquipiers et modifier les paramètres de l'entreprise.",
"settings.sendInvite": "Envoyer l'invitation",
"settings.companyHeading": "Paramètres de l'entreprise",
"settings.activeCompany": "Entreprise active",
"settings.creditsOverview": "Aperçu des crédits",
"settings.plan": "Offre",
"settings.used": "Utilisé",
"settings.companyInfo": "Informations sur l'entreprise",
"settings.companyInfoHelp": "Mettez à jour les détails de votre entreprise",
"settings.companyName": "Nom de l'entreprise",
"settings.companyNamePlaceholder": "Le nom de votre entreprise",
"settings.contentSettings": "Paramètres de contenu",
"settings.mergeProducts": "Fusionner les produits avec le même GTIN",
"settings.emailIntegration": "Intégration e-mail",
"settings.aiIntegrations": "Intégrations IA",
"settings.alertsHeading": "Alertes opérateur",
"settings.inAppToasts": "Toasts dans l'application",
"settings.emailAlerts": "Alertes e-mail",
"settings.apiKeysHeading": "Clés API",
"settings.createApiKey": "Créer une clé API",
"settings.createApiKeyShort": "Créer une clé API",
"settings.createApiKeyTitle": "Créer une clé API",
"settings.apiKeyLabel": "Clé API",
"settings.keyName": "Nom de la clé",
"settings.storeKeySafe": "Conservez-la en lieu sûr — vous ne pourrez plus voir le secret complet.",
"settings.apiKeysIntro": "Créez une clé API dentreprise pour appeler les endpoints publics /api/v1. Le secret complet nest affiché quune fois à la création — copiez-le immédiatement.",
"settings.apiKeysUseWhere": "Envoyez-la en Authorization: Bearer <key> (préféré) ou X-API-Key.",
"settings.apiKeysDocsLink": "Docs dauthentification API",
"settings.apiKeyOnceWarning": "Cest la seule fois où le secret complet est affiché. Copiez-le maintenant avant de fermer cette boîte de dialogue.",
"settings.table.name": "Nom",
"settings.table.key": "Clé",
"settings.table.lastUsed": "Dernière utilisation",
"dashboard.demoSandbox": "Bac à sable démo",
"dashboard.demoEmptyTitle": "Le bac à sable démo est vide",
"dashboard.demoEmptyHint": "Le bac à sable démo est vide — basculez vers A1 ou connectez un flux pour voir de vraies stats catalogue.",
"dashboard.overviewTitle": "Vue d'ensemble",
"dashboard.quickLinks": "Liens rapides",
"dashboard.whatsNew": "Nouveautés",
"dashboard.startTutorial": "Lancer le tutoriel",
"dashboard.resumeTutorial": "Reprendre le tutoriel",
"dashboard.restartTutorial": "Relancer le tutoriel",
"dashboard.tourTopics": "Sujets de la visite",
"dashboard.browseTutorialSections": "Parcourir les sections du tutoriel",
"dashboard.connectFeed": "Connecter un flux",
"dashboard.processProducts": "Traiter les produits",
"dashboard.openProducts": "Ouvrir les produits",
"dashboard.welcomeTo": "Bienvenue sur {name}",
"dashboard.trialBadge": "Essai",
"dashboard.actions": "Actions du tableau de bord",
"dashboard.emptyPaygHint": "Descrybe importe un catalogue, lenrichit et le traite, puis lexporte ou le pousse vers vos boutiques. Utilisez Premiers pas ci-dessous.",
"dashboard.emptyCreditsHint": "Descrybe importe un catalogue, lenrichit et le traite, puis lexporte ou le pousse vers vos boutiques. Vous avez {credits} — commencez avec Premiers pas ci-dessous.",
"dashboard.workflowTitle": "Flux catalogue",
"dashboard.recentActivity": "Activité récente",
"dashboard.loadFailed": "Échec du chargement du tableau de bord",
"dashboard.workspaceFallback": "Cet espace de travail",
"dashboard.jobFallback": "Tâche {id}",
"dashboard.workflow.feeds.connect": "Connecter une source",
"dashboard.workflow.feeds.sources": "{count} source",
"dashboard.workflow.feeds.sourcesPlural": "{count} sources",
"dashboard.workflow.products.build": "Construire le catalogue",
"dashboard.workflow.products.count": "{count} dans le catalogue",
"dashboard.workflow.map": "Map",
"dashboard.workflow.map.detail": "Associez les colonnes après avoir ajouté un flux",
"dashboard.workflow.map.ready": "Ouvrir Map sur un flux",
"dashboard.workflow.sync": "Sync",
"dashboard.workflow.sync.detail": "Récupérez un échantillon après le mapping",
"dashboard.workflow.sync.ready": "Synchroniser un échantillon dans les produits",
"dashboard.workflow.process": "Traiter",
"dashboard.workflow.processActive": "{count} actifs",
"dashboard.workflow.processWaiting": "{count} en attente",
"dashboard.workflow.processDone": "{count} terminés",
"dashboard.workflow.processRun": "Lancer les tâches IA",
"dashboard.workflow.export": "Exporter",
"dashboard.workflow.exportReady": "Modèles et téléchargement",
"dashboard.workflow.exportMap": "Mapper puis exporter",
"dashboard.workflowHint": "Catalogue entrant → enrichir / traiter → exporter ou pousser vers les boutiques. Passez à l’étape suivante pour {name}.",
"dashboard.overviewHint": "Totaux en direct pour {name}",
"dashboard.demoEmptyMessage": "Basculez vers A1 (ou une autre entreprise seedée) dans l'en-tête, ou connectez un flux ici pour remplir ce bac à sable.",
"dashboard.emptyTitle": "Importez un catalogue",
"dashboard.emptyMessage": "Catalogue entrant → enrichir / traiter → exporter ou pousser vers les boutiques. Commencez avec Premiers pas ci-dessous (ou connectez un flux / téléversez un CSV).",
"dashboard.connectFeedAnyway": "Connecter un flux quand même",
"dashboard.connectFeedShort": "Connecter un flux",
"dashboard.uploadCsv": "Téléverser un CSV",
"dashboard.goToBilling": "Aller à la facturation",
"dashboard.freePlanTitle": "Vous êtes sur l'offre Free",
"dashboard.freePlanMessageWithLimit": "{used} sur {max} produits utilisés. Le mapping des flux, le nettoyage de base et les labels énergétiques UE (EPREL) sont inclus ; passez à une offre supérieure pour les titres et descriptions IA, et plus de capacité.",
"dashboard.freePlanMessage": "Le mapping des flux, le nettoyage de base et les labels énergétiques UE (EPREL) sont inclus ; passez à une offre supérieure pour les titres et descriptions IA, et plus de capacité.",
"dashboard.outOfCreditsTitle": "Vous n'avez plus de crédits IA",
"dashboard.outOfCreditsMessage": "Achetez plus de crédits ou passez à une offre supérieure pour continuer le traitement.",
"dashboard.productLimitTitle": "Limite de produits atteinte",
"dashboard.productLimitMessage": "Votre offre {plan} autorise {max} produits ({count} dans le catalogue). Passez à une offre supérieure pour en traiter plus.",
"dashboard.productLimitMessageFull": "La limite de produits de votre offre {plan} est atteinte. Passez à une offre supérieure pour en traiter plus.",
"dashboard.comparePlans": "Comparer les offres",
"dashboard.viewPlans": "Voir les offres",
"dashboard.trialTitle": "Essai · {plan}",
"dashboard.trialMessageDated": "L'essai se termine le {date}. {credits} crédits restants.",
"dashboard.trialMessage": "{credits} crédits restants sur votre essai.",
"dashboard.lowCreditsTitle": "Crédits bientôt épuisés",
"dashboard.lowCreditsMessage": "Il reste {remaining} crédits sur {total}. Rechargez ou passez à une offre supérieure avant que les tâches ne s'arrêtent.",
"dashboard.latestJobs": "Dernières tâches de traitement",
"dashboard.noJobsEmpty": "Pas encore de tâches — importez d'abord des produits.",
"dashboard.noJobsReady": "Aucune tâche récente. Démarrez-en une depuis Produits quand vous êtes prêt.",
"dashboard.startJob": "Démarrer un job depuis Produits",
"dashboard.quickLinksHint": "Flux, produits, tâches et export.",
"dashboard.feedsImportMap": "Importer et mapper",
"dashboard.productsBrowse": "Parcourir et traiter",
"dashboard.jobsMonitor": "Surveiller les tâches",
"dashboard.exportsTemplates": "Modèles et téléchargement",
"activation.title": "Premiers pas",
"activation.description": "Descrybe importe un catalogue, lenrichit et le traite, puis lexporte ou le pousse vers vos boutiques. Terminez l’étape en cours, puis continuez — le parcours démo explique les écrans sans modifier la progression de la checklist.",
"activation.descriptionShort": "Commencez par l’étape mise en évidence ci-dessous — une action à la fois. La connexion boutique est facultative.",
"activation.nextCta": "Faire cette étape",
"activation.valueProp": "Descrybe importe un catalogue, lenrichit et le traite, puis lexporte ou le pousse vers vos boutiques.",
"activation.alreadyDone": "Déjà fait",
"activation.skipForNow": "Passer pour linstant",
"activation.showAllSteps": "Afficher les {total} étapes",
"activation.showFewerSteps": "Afficher moins d’étapes",
"activation.corePathLabel": "En bref",
"activation.corePath": "Catalogue entrant → Enrichir / traiter → Exporter ou pousser vers les boutiques",
"activation.storeWizardHint": "Pas nécessaire pour les flux ou les exports — ignorez sauf si vous voulez pousser des produits vers une boutique en ligne.",
"activation.storeWizardCta": "Lancer la configuration guidée",
"activation.focus.map": "Ensuite : ouvrez Map sur un flux, associez les colonnes, puis enregistrez. Ajoutez dabord un flux si la liste est vide.",
"activation.focus.sync": "Ensuite : synchronisez un échantillon après lenregistrement du mapping. Utilisez Sync sur un flux mappé — évitez les sources non mappées.",
"activation.focus.dismiss": "Fermer lindication",
"activation.dismiss": "Masquer la checklist",
"hypercare.report.title": "Hypercare de bascule",
"hypercare.report.message": "Données manquantes ou incorrectes après la migration ? Signalez-le pour que nous corrigions votre espace de travail.",
"hypercare.report.cta": "Signaler des données manquantes ou incorrectes",
"hypercare.report.dismiss": "Ignorer",
"hypercare.report.adminTriage": "Ouvrir la file hypercare",
"etl.gaps.title": "What did not migrate",
"etl.gaps.message": "These areas were intentionally left empty or partial after the Descrybe platform cutover. Nothing is “broken” — recreate or reconnect as needed.",
"etl.gaps.dismiss": "Dismiss",
"etl.gaps.apiKeys.title": "API keys",
"etl.gaps.apiKeys.body": "Legacy API key secrets were not migrated. Create a new key to restore API access — the secret is shown only once.",
"etl.gaps.apiKeys.cta": "Open API keys",
"etl.gaps.blobs.title": "File contents (blobs)",
"etl.gaps.blobs.body": "Upload records may exist as metadata only. File bytes were not copied — re-upload CSVs or resync object storage if you need the originals.",
"etl.gaps.blobs.countHint": "{count} file records are metadata-only (bytes were not migrated).",
"etl.gaps.blobs.cta": "Open Files",
"etl.gaps.jobs.title": "Processing history",
"etl.gaps.jobs.body": "Legacy job and task history was not backfilled for cutover. New jobs you start here will appear normally.",
"etl.gaps.jobs.emptyHint": "Optional jobs domain was not run — empty history is expected.",
"etl.gaps.jobs.migratedHint": "{count} jobs were tagged migrated from an optional backfill.",
"etl.gaps.jobs.cta": "Open Processing",
"etl.gaps.woo.title": "Store credentials",
"etl.gaps.woo.body": "WooCommerce and Shopify secrets may need to be re-entered after cutover — that is a reconnect step, not a broken sync.",
"etl.gaps.woo.cta": "Open Stores",
"etl.gaps.settings.title": "Company settings",
"etl.gaps.settings.body": "Only language and merge-products settings were imported. Re-check other company preferences in Settings.",
"etl.gaps.settings.cta": "Open company settings",
"activation.progress": "{done} sur {total} terminés",
"activation.stepsLabel": "Étapes d'activation",
"activation.pausedTitle": "Premiers pas en pause",
"activation.pausedBody": "Reprenez à tout moment — des champs produit jusqu’à lexport. La connexion boutique reste facultative.",
"activation.resume": "Reprendre la checklist",
"activation.step.enable-fields.title": "Activer les champs produit",
"activation.step.enable-fields.body": "Choisissez les colonnes produit standard que Descrybe doit mapper et nettoyer.",
"activation.step.connect-source.title": "Ajouter un flux produit",
"activation.step.connect-source.body": "Ajoutez un flux catalogue CSV ou XML pour faire entrer les produits dans Descrybe. Connecter une boutique en ligne est une étape facultative ultérieure.",
"activation.step.map.title": "Mapper les colonnes du flux",
"activation.step.map.body": "Dans Feeds, ouvrez Map sur votre flux, faites correspondre les colonnes fournisseur, puis enregistrez.",
"activation.step.sync-sample.title": "Synchroniser un échantillon",
"activation.step.sync-sample.body": "Dans Feeds, synchronisez un petit échantillon depuis un flux mappé pour vérifier le mapping avant lexécution complète.",
"activation.step.process.title": "Traiter les produits",
"activation.step.process.body": "Ouvrez les produits non traités et lancez le traitement pour générer un contenu catalogue nettoyé.",
"activation.step.store-connect.title": "Connecter une boutique",
"activation.step.store-connect.body": "Facultatif. Liez WooCommerce ou Shopify pour pousser les produits vers votre boutique. Ignorez si vous nutilisez que les flux et exports.",
"activation.step.export.title": "Créer un export",
"activation.step.export.body": "Créez un flux dexport pour télécharger ou publier les produits nettoyés en XML ou CSV.",
"stats.products": "Produits importés",
"stats.categories": "Catégories",
"stats.attributes": "Attributs",
"stats.feeds": "Feeds",
"stats.credits": "Crédits",
"stats.openCatalog": "Ouvrir le catalogue",
"stats.productsHint": "Catalogue {processed} · file {unprocessed} (compteurs séparés)",
"stats.catalogTree": "Arborescence du catalogue",
"stats.attributeLibrary": "Bibliothèque d'attributs",
"stats.importSources": "Sources d'import",
"stats.payAsYouGo": "Paiement à l'usage",
"stats.walletBilling": "Portefeuille · Facturation",
"stats.enterpriseBilling": "Entreprise · Facturation",
"stats.usedBilling": "{used} utilisés · Facturation",
"processing.jobStatus.processing": "Traitement",
"processing.jobStatus.completed": "Terminé",
"processing.jobStatus.failed": "Échoué",
"processing.jobStatus.cancelled": "Annulé",
"processing.jobStatus.pending": "En attente",
"processing.jobStatus.queued": "En file",
"processing.jobStatus.skipped": "Ignoré",
"processing.jobStatus.unknown": "Inconnu",
"processing.job.error.all_failed": "Les {count} produits ont échoué.",
"processing.job.error.partial_failed": "{count} produits ont échoué.",
"processing.step.normalize": "Normaliser",
"processing.step.parse_specs": "Analyser les specs",
"processing.step.fill_fields": "Remplir les champs",
"processing.step.eprel": "EPREL",
"processing.step.ai_enhance": "Amélioration IA",
"processing.type.full": "Traitement complet",
"processing.type.enhance_only": "Améliorer uniquement",
"processing.type.title": "Titre uniquement",
"processing.type.description": "Description uniquement",
"processing.type.attributes": "Attributs",
"processing.type.category": "Catégorie",
"processing.type.eprel": "EPREL",
"processing.type.seo": "SEO",
"processing.type.normalize": "Normaliser",
"errors.requestFailed": "Échec de la requête",
"errors.maintenance": "Le système est en maintenance. Réessayez plus tard.",
"errors.readOnly": "Le système est en mode lecture seule. Les modifications sont temporairement désactivées.",
"errors.companyAdminDenied": "Seuls les administrateurs de l'entreprise peuvent {action}. Demandez de l'aide à un administrateur.",
"errors.companyAdminDenied.actionDefault": "faire ceci",
"docs.tryIt.memberCannotCreate": "Seuls les admins peuvent créer des clés API. Les clés héritées nont pas été migrées — collez une clé ci-dessous ou demandez à un admin den créer une.",
"docs.tryIt.noKeysLegacyAdmin": "Les clés API héritées nont pas été migrées. Créez-en une via Use my API key ou Paramètres → Clés API — le secret nest affiché quune fois.",
"docs.tryIt.noKeysLegacyMember": "Aucune clé API. Les clés héritées nont pas été migrées — demandez à un admin den créer une, ou collez une clé dk_.",
"errors.couldNotUpdateLanguage": "Impossible de mettre à jour la langue",
"toast.support.replyTitle": "Réponse du support",
"toast.support.replyBody": "L'équipe a répondu à votre ticket de support.",
"toast.support.replyRe": "Re : {subject}",
"toast.support.statusTitle": "Statut du ticket mis à jour",
"toast.support.statusBody": "Le statut de votre ticket de support a changé.",
"toast.support.updateTitle": "Mise à jour du support",
"assistant.label": "Assistant",
"assistant.open": "Ouvrir l'assistant système",
"assistant.close": "Fermer l'assistant système",
"tutorial.demoTour": "Visite démo",
"tutorial.jumpToTopic": "Aller à un sujet",
"tutorial.whereNeedHelp": "Où avez-vous besoin d'aide ?",
"tutorial.skipTour": "Passer la visite",
"tutorial.skipAria": "Passer le tutoriel",
"tutorial.pickerBody": "Choisissez une section pour rouvrir cette partie de la démo. Parcourir la visite ne modifie pas les données de votre compte.",
"tutorial.sectionsAria": "Sections du tutoriel",
"tutorial.open": "Ouvrir",
"tutorial.close": "Fermer",
"tutorial.resumeLastStep": "Reprendre la dernière étape",
"tutorial.startFromBeginning": "Reprendre depuis le début",
"tutorial.stepOf": "Étape {current} sur {total}",
"tutorial.jumpTo": "Aller à…",
"tutorial.jumpToSectionAria": "Aller à la section",
"tutorial.back": "Retour",
"tutorial.pause": "Mettre en pause",
"tutorial.continue": "Continuer",
"tutorial.finishTour": "Terminer la visite",
"tutorial.missingTargetHint": "Ce contrôle n'est pas encore sur cet écran. Vous pouvez quand même Continuer — la visite n'exige jamais d'enregistrement ni de synchronisation.",
"tutorial.section.welcome": "Welcome",
"tutorial.section.catalog": "Catalog setup",
"tutorial.section.sources": "Feeds",
"tutorial.section.mapping": "Map & sync",
"tutorial.section.products": "Process",
"tutorial.section.export": "Export & stores",
"tutorial.section.grow": "Grow",
"tutorial.section.done": "Done",
"tutorial.step.welcome.title": "Bienvenue sur Descrybe",
"tutorial.step.welcome.body": "La boucle principale de Descrybe est Feeds → Process → Export / Stores. Cette démo guidée met en avant ces écrans sur votre vrai tableau de bord — sans vous demander denregistrer, synchroniser, activer des champs ou créer des feeds. Pause à tout moment ; reprise depuis len-tête. Sautez à une section si vous navez besoin daide que sur un sujet.",
"tutorial.step.welcome.tip": "Demo tour — your data stays unchanged until you choose to act outside the tour.",
"tutorial.step.welcome.nextLabel": "Start tour",
"tutorial.step.welcome.missingHint": "Youre on the dashboard — continue when ready.",
"tutorial.step.dashboard-overview.title": "Votre centre de commande",
"tutorial.step.dashboard-overview.body": "La bande de workflow catalogue montre le parcours quotidien : Feeds → Map → Sync → Process. Getting started suit le vrai progrès de lespace de travail (séparé de cette démo). Quand vous êtes prêt, utilisez Manage feeds ou Start processing — puis exportez ou connectez une boutique.",
"tutorial.step.dashboard-overview.tip": "Completing this tour does not mark checklist steps done — only real workspace progress does.",
"tutorial.step.dashboard-overview.missingHint": "The workflow strip and checklist appear after the dashboard loads.",
"tutorial.step.enable-fields.title": "Champs standard",
"tutorial.step.enable-fields.body": "Les Standard Fields sont les colonnes produit que Descrybe mappe, traite et exporte — titre, description, GTIN, images, etc. Enable recommended active un jeu par défaut adapté à la plupart des catalogues. Vous pourrez affiner la liste plus tard sans casser les mappings existants.",
"tutorial.step.enable-fields.tip": "In the demo you dont need to click Enable recommended — Continue when you understand the idea.",
"tutorial.step.enable-fields.warning": "Enabling or disabling fields affects mapping and processing for this company. Prefer Enable recommended once, then tweak carefully.",
"tutorial.step.enable-fields.missingHint": "Wait for the Fields page to load, or open Fields from the Catalog section in the sidebar.",
"tutorial.step.catalog-depth.title": "Catégories et attributs",
"tutorial.step.catalog-depth.body": "Dans la section Catalog de la barre latérale vous trouverez aussi Categories et Attributes. Categories organisent le catalogue ; les attributs alimentent filtres et descriptions structurées. Pas besoin de les configurer pour finir cette visite.",
"tutorial.step.catalog-depth.tip": "Return to this section anytime from Jump to… if you revisit taxonomy later.",
"tutorial.step.catalog-depth.missingHint": "Expand Catalog in the sidebar to open Categories or Attributes after the tour.",
"tutorial.step.connect-source.title": "Ajouter une source produit",
"tutorial.step.connect-source.body": "Les feeds font entrer les catalogues fournisseurs dans Descrybe — fichiers CSV, XML ou URL. Add Feed crée une nouvelle source ; chaque ligne montre le statut (prêt pour le mapping, mappé, actif). Map ouvre l'écran de correspondance des champs pour ce feed.",
"tutorial.step.connect-source.tip": "You dont need to add a feed for the demo. When ready for real setup, add one sample file first.",
"tutorial.step.connect-source.warning": "Avoid deleting live feeds unless you intend to remove that source and its sync history.",
"tutorial.step.connect-source.missingHint": "Open Feeds from the sidebar if this screen hasnt loaded.",
"tutorial.step.map.title": "Mapper les champs source",
"tutorial.step.map.body": "Sur l'écran Map d'un feed, vous associez les colonnes fournisseur aux standard fields Descrybe. Auto-map propose des correspondances d'après les noms de colonnes ; confirmez les floues, puis corrigez le reste. Save Mappings enregistre la carte pour que sync et traitement sachent lire chaque ligne.",
"tutorial.step.map.tip": "Demo tip: open Map on a feed when you have one — you are not required to save.",
"tutorial.step.map.warning": "Dont Save Mappings until Auto-map looks right — a bad map makes bad products.",
"tutorial.step.map.missingHint": "Add a feed and click Map to see the mapping UI; or Continue to keep learning.",
"tutorial.step.sync-sample.title": "Synchroniser un échantillon (quand prêt)",
"tutorial.step.sync-sample.body": "Après enregistrement des mappings, Sync + Process sample tire un petit lot et lance le traitement pour vérifier titres, images et attributs avant un run complet. Full Sync now dans la liste des feeds sert aux imports plus larges une fois l'échantillon bon.",
"tutorial.step.sync-sample.tip": "Skip Sync during the demo — use it only after Save Mappings on a real feed.",
"tutorial.step.sync-sample.warning": "Syncing writes products into this company. Prefer a sample first; avoid Sync now on unmapped feeds.",
"tutorial.step.sync-sample.missingHint": "Sync controls appear on feed rows and on the mapping screen footer.",
"tutorial.step.process.title": "Revoir les produits",
"tutorial.step.process.body": "Products liste les articles synchronisés et traités. Filtrez par statut, ouvrez une ligne pour le détail, et utilisez les badges EPREL quand des données d’étiquette énergétique existent. Cest ici que vous repérez les erreurs de mapping avant export ou sync boutique.",
"tutorial.step.process.tip": "Browsing products is read-only for exploration — editing a row changes live catalog data.",
"tutorial.step.process.missingHint": "Wait for the products table, or Continue if the catalog is still empty.",
"tutorial.step.processing-hub.title": "Traitement en arrière-plan",
"tutorial.step.processing-hub.body": "Les jobs sous Processing montrent la progression AI et pipeline : exécutions terminées et échecs. Lancez des jobs depuis le tableau de bord ou les produits quand vous voulez dépenser des crédits sur un lot.",
"tutorial.step.processing-hub.tip": "Jobs consume credits — watch Billing before large runs.",
"tutorial.step.processing-hub.missingHint": "Open Jobs from the Processing section in the sidebar if the page is empty.",
"tutorial.step.stores-hub.title": "Boutiques et plateformes",
"tutorial.step.stores-hub.body": "Après traitement, Stores connecte WooCommerce ou Shopify pour pousser le catalogue nettoyé vers votre boutique. Utilisez-le quand un marketplace ou CMS est la destination — ou passez à Export feeds si les partenaires nont besoin que dun fichier/URL.",
"tutorial.step.stores-hub.tip": "Reconnect banners appear if a token expires — fix those before relying on sync.",
"tutorial.step.stores-hub.missingHint": "Open Stores from the sidebar to see connection cards.",
"tutorial.step.export.title": "Exporter des produits nettoyés",
"tutorial.step.export.body": "Les export feeds publient des produits nettoyés en XML ou CSV pour canaux, partenaires ou votre boutique. Créez un export, choisissez format et filtres, puis partagez l'URL du feed ou téléchargez. Les exports lisent les données catalogue traitées — mappez et traitez d'abord pour de meilleurs résultats.",
"tutorial.step.export.tip": "You dont need to create an export during the demo.",
"tutorial.step.export.warning": "Creating or deleting export feeds affects what partners can download — avoid deleting production feeds casually.",
"tutorial.step.export.missingHint": "Wait for Export feeds to load, or open Exports from the Feeds section in the sidebar.",
"tutorial.step.billing-hub.title": "Crédits et facturation",
"tutorial.step.billing-hub.body": "Billing affiche votre plan, portefeuille et crédits restants. Le traitement et certaines fonctions AI puisent dans ce solde. Surveillez l'usage avant de grands runs catalogue.",
"tutorial.step.billing-hub.tip": "Demo accounts may show unlimited or large balances — treat production credits carefully.",
"tutorial.step.billing-hub.missingHint": "Open Billing from the Account section in the sidebar.",
"tutorial.step.grow-hub.title": "Campagnes, SEO et avis",
"tutorial.step.grow-hub.body": "Dans Marketing : Campaigns génère du contenu, Content calendar planifie les posts, SEO vérifie les fiches et Reviews sintègre à WooCommerce. Ils sappuient sur un catalogue bien mappé — terminez Feeds → Process → Export / Stores avant de vous y appuyer.",
"tutorial.step.grow-hub.tip": "Jump back here when youre ready to market, not during first mapping.",
"tutorial.step.grow-hub.missingHint": "Open Campaigns from Marketing in the sidebar, or Continue.",
"tutorial.step.tour-done.title": "Prêt à explorer",
"tutorial.step.tour-done.body": "Voici la carte produit : Feeds → Map → Sync → Process → Export / Stores. Utilisez Getting started sur le tableau de bord pour la vraie configuration. Reprenez ou relancez cette visite depuis len-tête à tout moment, ou Jump to… une section pour un rappel. Skip tour termine la démo sans changer votre checklist.",
"tutorial.step.tour-done.tip": "Demo complete — no cleanup needed. Your account was not modified by Continue alone.",
"tutorial.step.tour-done.nextLabel": "Finish tour",
"tutorial.step.tour-done.missingHint": "Return to the dashboard to finish.",
"news.uxImprovements.title": "Améliorations de l'expérience utilisateur",
"flash.contentLanguageUpdated": "Langue du contenu mise à jour.",
"theme.darkMode": "Mode sombre",
"theme.lightMode": "Mode clair",
"forbidden.title.accessRestricted": "Accès restreint",
"forbidden.title.permissionDenied": "Permission refusée",
"forbidden.message.support": "Cette zone est réservée au support et aux administrateurs de la plateforme.",
"forbidden.message.platform": "Cette zone est réservée aux administrateurs de la plateforme.",
"forbidden.message.company": "Vous navez pas lautorisation. Demandez de laide à un administrateur de lentreprise.",
"forbidden.backToDashboard": "Retour au tableau de bord",
"admin.chrome.platformOps": "Ops plateforme",
"admin.chrome.sidebar": "Barre latérale ops plateforme",
"admin.chrome.nav": "Ops plateforme",
"admin.chrome.mobileMenu": "Menu mobile ops plateforme",
"admin.chrome.opsBadge": "Ops",
"admin.chrome.backToApp": "Retour à l'app",
"admin.chrome.uiLanguage": "Langue de l'interface",
"admin.chrome.staff.supportDesk": "Bureau d'assistance",
"admin.chrome.staff.platformAdmin": "Admin plateforme",
"admin.chrome.staff.staff": "Équipe",
"admin.chrome.staff.admin": "Admin",
"admin.nav.section.overview": "Vue d'ensemble",
"admin.nav.section.directory": "Annuaire",
"admin.nav.section.support": "Assistance",
"admin.nav.section.ops": "Opérations",
"admin.nav.section.commerce": "Commerce",
"admin.nav.section.system": "Système",
"admin.nav.commandCenter": "Centre de commande",
"admin.nav.analytics": "Analytique",
"admin.nav.usersOrgs": "Utilisateurs et orgs",
"admin.nav.tickets": "Tickets",
"admin.nav.knowledge": "Connaissance",
"admin.nav.diagnostics": "Bilans",
"admin.nav.stuckProducts": "Produits bloqués",
"admin.nav.orphanProcessed": "Orphan processed",
"admin.nav.billing": "Facturation",
"admin.nav.sales": "Sales",
"admin.nav.translations": "Traductions",
"admin.nav.settings": "Paramètres",
"admin.sales.title": "Sales leads",
"admin.sales.description": "Inbound Contact sales messages and custom payment quotes.",
"admin.sales.listTitle": "Leads",
"admin.sales.listDesc": "{total} matching leads",
"admin.sales.searchPlaceholder": "Search name, email, company…",
"admin.sales.statusAll": "All statuses",
"admin.sales.status.new": "New",
"admin.sales.status.contacted": "Contacted",
"admin.sales.status.quoted": "Quoted",
"admin.sales.status.won": "Won",
"admin.sales.status.closed": "Closed",
"admin.sales.empty": "No sales leads yet.",
"admin.sales.loadError": "Could not load sales leads.",
"admin.sales.saveError": "Could not save lead.",
"admin.sales.saved": "Lead updated.",
"admin.sales.notFound": "Lead not found.",
"admin.sales.leadTitle": "Lead details",
"admin.sales.estimatedSkus": "Estimated SKUs",
"admin.sales.linkCompany": "Link company",
"admin.sales.noCompany": "No company linked",
"admin.sales.adminNotes": "Admin notes",
"admin.sales.companyRequired": "Link a company before creating a payment quote.",
"admin.sales.prepareQuote": "Prepare custom plan",
"admin.sales.prepareQuoteDesc": "Creates an is_custom plan and optional Stripe Checkout link (one-time or installments).",
"admin.sales.planName": "Plan name",
"admin.sales.monthlyCredits": "Monthly AI credits",
"admin.sales.maxProducts": "Max SKUs",
"admin.sales.unlimitedHint": "Leave blank for unlimited",
"admin.sales.totalUsd": "Total price (USD)",
"admin.sales.termMonths": "Term (months)",
"admin.sales.installmentCount": "Installments",
"admin.sales.installmentInterval": "Interval",
"admin.sales.interval.month": "Monthly",
"admin.sales.interval.quarter": "Quarterly",
"admin.sales.interval.year": "Yearly",
"admin.sales.prepareCheckoutNow": "Create Stripe Checkout link now",
"admin.sales.createQuote": "Create quote",
"admin.sales.quoteCreated": "Quote created.",
"admin.sales.quoteError": "Could not create quote.",
"admin.sales.quotesTitle": "Quotes",
"admin.sales.noQuotes": "No quotes yet for this lead.",
"admin.sales.prepareCheckout": "Prepare Checkout",
"admin.sales.checkoutReady": "Checkout link ready.",
"admin.sales.checkoutError": "Could not prepare Checkout.",
"admin.sales.markSent": "Mark sent",
"admin.sales.markedSent": "Quote marked as sent.",
"admin.sales.col.name": "Name",
"admin.sales.col.email": "Email",
"admin.sales.col.company": "Company",
"admin.sales.col.status": "Status",
"admin.sales.col.created": "Created",
"sales.contact.title": "Contact sales",
"sales.contact.lead": "Tell us about your catalog and capacity needs — we will prepare a custom plan you can pay online.",
"sales.contact.formTitle": "Send a message",
"sales.contact.formLead": "Enterprise and custom deals are prepared by our team, then paid via Stripe Checkout.",
"sales.contact.name": "Name",
"sales.contact.email": "Work email",
"sales.contact.company": "Company",
"sales.contact.phone": "Phone (optional)",
"sales.contact.estimatedSkus": "Estimated SKUs (optional)",
"sales.contact.message": "How can we help?",
"sales.contact.submit": "Send message",
"sales.contact.submitting": "Sending…",
"sales.contact.error": "Could not send your message. Please try again.",
"sales.contact.toast.success": "Message sent — we will follow up soon.",
"sales.contact.thanksTitle": "Thanks — we got your message",
"sales.contact.thanksBody": "A platform admin will review your request and can send a Checkout link for a custom plan.",
"sales.contact.bookDemo": "Book a live demo",
"sales.contact.orBookDemo": "Or book a Calendly demo",
"sales.contact.backPricing": "Back to pricing",
"admin.overview.eyebrow": "Centre de commande",
"admin.overview.title": "Vue d'ensemble de la plateforme",
"admin.overview.description": "Pouls en direct de la plateforme depuis le résumé analytique — accédez aux opérations, informations et support.",
"admin.overview.tokens": "Jetons",
"admin.overview.tokensHint": "Tout le temps · période",
"admin.overview.credits": "Crédits",
"admin.overview.creditsHint": "Sur toutes les entreprises",
"admin.overview.jobs": "Tâches",
"admin.overview.jobsHint": "Instantané de file",
"admin.overview.platform": "Plateforme",
"admin.overview.platformHint": "Locataires · volume",
"admin.overview.signals": "Signaux récents",
"admin.overview.shortcuts": "Raccourcis ops",
"admin.overview.providers": "Mix de fournisseurs IA",
"admin.overview.internalAi": "IA interne",
"admin.overview.internalAiHint": "Paramètres de la plateforme",
"admin.overview.popularKeys": "Clés populaires",
"admin.overview.popularKeysHint": "Fournisseurs populaires du locataire",
"admin.overview.customUrl": "URL personnalisée",
"admin.overview.customUrlHint": "URL de base personnalisée du locataire",
"admin.overview.linkBilling": "Facturation",
"admin.overview.linkSettings": "Paramètres",
"admin.overview.shortcut.diagnostics.title": "Bilans",
"admin.overview.shortcut.diagnostics.desc": "Contrôles de santé, file, échecs récents",
"admin.overview.shortcut.analytics.title": "Analytique",
"admin.overview.shortcut.analytics.desc": "Jetons, tâches, inscriptions, fournisseurs",
"admin.overview.shortcut.knowledge.title": "Connaissance",
"admin.overview.shortcut.knowledge.desc": "Articles, modèles, réponse auto",
"admin.overview.shortcut.users.title": "Utilisateurs et orgs",
"admin.overview.shortcut.users.desc": "Comptes, entreprises, invitations",
"admin.overview.shortcut.stuck.title": "Produits bloqués",
"admin.overview.shortcut.stuck.desc": "En cours depuis plus de 2 heures",
"admin.overview.signal.stuckTitle": "{count} tâche bloquée",
"admin.overview.signal.stuckTitlePlural": "{count} tâches bloquées",
"admin.overview.signal.stuckDetail": "En cours depuis plus de 2 heures — vérifiez et réinitialisez si besoin.",
"admin.overview.signal.stuckCta": "Ouvrir les tâches bloquées",
"admin.overview.signal.failedTitle": "{count} échecs sur les {days} derniers j",
"admin.overview.signal.failedDetail": "{completed} terminés dans la même fenêtre.",
"admin.overview.signal.failedDetailRate": "{rate}% de taux d'échec · {completed} terminés.",
"admin.overview.signal.failedCta": "Ouvrir les diagnostics",
"admin.overview.signal.runningTitle": "{count} tâche en cours",
"admin.overview.signal.runningTitlePlural": "{count} tâches en cours",
"admin.overview.signal.runningDetail": "Tâches de traitement actives en ce moment.",
"admin.overview.signal.runningCta": "Voir la file",
"admin.overview.signal.ticketsTitle": "{count} ticket de support ouvert",
"admin.overview.signal.ticketsTitlePlural": "{count} tickets de support ouverts",
"admin.overview.signal.ticketsDetail": "Tickets ouverts ou en attente dans le bureau d'assistance.",
"admin.overview.signal.ticketsCta": "Ouvrir le support",
"admin.overview.signal.clearTitle": "Aucun signal élevé",
"admin.overview.signal.clearDetail": "Aucune tâche bloquée, échec de période ni ticket ouvert dans le résumé live (derniers {days} j).",
"admin.overview.signal.clearCta": "Confirmer dans les diagnostics",
"admin.overview.badge.action": "Action",
"admin.overview.badge.watch": "Surveiller",
"admin.overview.badge.live": "En direct",
"admin.overview.badge.clear": "Effacer",
"admin.overview.summaryLoadFailed": "Impossible de charger le résumé live. Les raccourcis ci-dessous fonctionnent toujours.",
"admin.overview.keyMetrics": "Indicateurs clés",
"admin.overview.summaryWindow": "{days} j derniers · endpoint résumé",
"admin.overview.tokensPeriod": "{count} sur les {days} j derniers",
"admin.overview.creditsFoot": "{remaining} restants sur {allocated} alloués",
"admin.overview.jobsFoot": "{failed} échoués · {running} en cours · {stuck} bloqués",
"admin.overview.platformFoot": "{users} utilisateurs · {processed} traités · {feeds} flux d'entrée",
"admin.overview.fullDiagnostics": "Diagnostics complets",
"admin.overview.also": "Aussi :",
"admin.overview.linkSupport": "Bureau d'assistance",
"admin.overview.charts": "Graphiques",
"admin.overview.providerFoot": "{jobs} travaux · {products} produits",
"admin.analytics.eyebrow": "Insights",
"admin.analytics.title": "Analytique et rapports",
"admin.analytics.description": "KPI et tendances live de la plateforme à partir des jetons, tâches, inscriptions, feeds, tickets et facturation.",
"admin.analytics.period": "Période",
"admin.analytics.refreshing": "Actualisation…",
"admin.analytics.llmTokens": "Jetons LLM",
"admin.analytics.credits": "Crédits",
"admin.analytics.jobs": "Tâches",
"admin.analytics.volume": "Volume",
"admin.analytics.failureRate": "Taux d'échec",
"admin.analytics.stuckJobs": "Tâches bloquées",
"admin.analytics.apiKeys": "Clés API",
"admin.analytics.signups": "Inscriptions",
"admin.analytics.internalAi": "IA interne",
"admin.analytics.internalAiHint": "OpenAI plateforme (paramètres admin)",
"admin.analytics.popularKeys": "Clés populaires",
"admin.analytics.popularKeysHint": "OpenAI / Groq / … du locataire",
"admin.analytics.customUrl": "URL/modèle personnalisé",
"admin.analytics.customUrlHint": "URL de base du locataire + modèle + clé",
"admin.analytics.tokensByDay": "Jetons par jour",
"admin.analytics.tokensByProvider": "Jetons par classe de fournisseur",
"admin.analytics.tokensByProviderAria": "Jetons par classe de fournisseur",
"admin.analytics.internalCount": "Interne {count}",
"admin.analytics.popularCount": "Populaire {count}",
"admin.analytics.customCount": "Personnalisé {count}",
"admin.analytics.jobsByDay": "Tâches par jour",
"admin.analytics.jobsByDayHint": "Tâches créées (secondaire = échecs).",
"admin.analytics.signupsByDay": "Inscriptions par jour",
"admin.analytics.signupsByDayHint": "Nouveaux utilisateurs (primaire) et entreprises (secondaire)",
"admin.analytics.processingJobsStatus": "processing_jobs par statut",
"admin.analytics.feedSyncStatus": "feed_sync_jobs par statut",
"admin.analytics.ticketsStatus": "support_tickets par statut",
"admin.analytics.providerDetail": "Détail du fournisseur",
"admin.analytics.providerDetailHint": "Principaux modes fournisseur (plafonnés pour la taille de payload).",
"admin.analytics.noProviderRows": "Aucune ligne fournisseur",
"admin.analytics.provider": "Fournisseur",
"admin.analytics.class": "Classe",
"admin.analytics.tokensCol": "Jetons",
"admin.analytics.productsCol": "Produits",
"admin.analytics.companiesHint": "Principales entreprises par jetons avec répartition fournisseur",
"admin.analytics.noCompanies": "Aucune entreprise",
"admin.analytics.noCompaniesMsg": "La liste des entreprises est vide.",
"admin.analytics.company": "Entreprise",
"admin.analytics.internal": "Interne",
"admin.analytics.popular": "Populaire",
"admin.analytics.custom": "Personnalisé",
"admin.analytics.noBillingCycles": "Pas encore de cycles de facturation",
"admin.analytics.linkDiagnostics": "Bilans",
"admin.analytics.linkStuck": "Produits bloqués",
"admin.users.eyebrow": "Admin plateforme",
"admin.users.title": "Utilisateurs et organisations",
"admin.users.description": "Annuaire utilisateurs de la plateforme, rôles du personnel et affectations de plans d'entreprise.",
"admin.users.staffRoleUnavailable": "Les mises à jour de rôle du personnel ne sont pas encore disponibles sur ce déploiement. Contactez votre administrateur de plateforme si besoin.",
"admin.users.search": "Rechercher",
"admin.users.tabUsers": "Utilisateurs",
"admin.users.tabCompanies": "Entreprises",
"admin.users.filterWithoutPlan": "Without plan",
"admin.users.filterWithoutApiKeys": "Keys needing reissue",
"admin.users.needsApiKeyReissue": "Needs API key reissue",
"admin.users.colName": "Nom",
"admin.users.colStaffRole": "Rôle du personnel",
"admin.users.colStatus": "Statut",
"admin.users.colCreated": "Créé",
"admin.users.colActions": "Actions",
"admin.users.mustSetPassword": "Doit définir un mot de passe",
"admin.users.inactive": "Inactif",
"admin.users.reissueInvite": "Réémettre l'invitation",
"admin.users.setLocalPassword": "Définir un mot de passe local",
"admin.users.switchToUser": "Passer en utilisateur",
"admin.users.colCompany": "Entreprise",
"admin.users.colPlan": "Offre",
"admin.users.colCredits": "Crédits",
"admin.users.colLanguage": "Langue",
2026-08-16 11:37:42 +02:00
"admin.users.assignPlan": "Attribuer un forfait",
"admin.users.cloneCatalog": "Copier vers mon entreprise",
"admin.users.cloneCatalogAria": "Copier le catalogue de {name} vers votre entreprise sandbox",
"admin.users.cloneCatalogTitle": "Copier le catalogue d'entreprise",
"admin.users.cloneCatalogDesc": "Vous restez sur votre compte admin. Les données source ne sont pas modifiées.",
"admin.users.cloneCatalogFrom": "Source : {name}",
"admin.users.cloneCatalogInto": "Destination : {name}",
"admin.users.cloneCatalogWarning": "Remplace catégories, feeds, produits, attributs, mappings et marque sur la destination. Forfait, facturation, membres, clés API et connecteurs boutique ne sont pas copiés.",
"admin.users.cloneCatalogCancel": "Annuler",
"admin.users.cloneCatalogConfirm": "Copier le catalogue",
"admin.users.cloneDestFallback": "votre entreprise sandbox",
"admin.users.noUsers": "Aucun utilisateur ne correspond à ce filtre.",
"admin.users.noCompanies": "Aucune entreprise ne correspond à ce filtre.",
"admin.users.assignRoleTitle": "Assigner un rôle du personnel",
"admin.users.assignRoleDesc": "Les rôles plateforme contrôlent le panneau admin (Admin et Developer) et le bureau d'assistance (personnel support).",
"admin.users.staffRole": "Rôle du personnel",
"admin.users.saveRole": "Enregistrer le rôle",
"admin.users.assignPlanTitle": "Assigner une offre",
"admin.users.assignPlanDesc": "Attacher une offre publique, legacy ou personnalisée à cette entreprise.",
"admin.users.selectPlan": "Sélectionner une offre",
"admin.users.assign": "Assigner",
"admin.settings.title": "Paramètres de la plateforme",
"admin.settings.description": "Identifiants plateforme, rôles IA, e-mail et intégrations pour ce déploiement",
"admin.settings.intro": "Configurez ici les rôles IA plateforme, SMTP, OAuth, EPREL, Pinecone et Stripe. Laissez les secrets vides pour conserver la valeur stockée. Les clés par entreprise restent sous Intégrations du locataire.",
"admin.settings.aiRolesUnavailable": "Les rôles IA complets ne sont pas encore disponibles sur ce déploiement. Le traitement continue via les paramètres OpenAI plateforme ; les autres rôles seront persistés une fois pris en charge.",
"admin.settings.tab.integrations": "Vue d'ensemble",
"admin.settings.tab.ai": "Rôles IA",
"admin.settings.tab.mail": "Mail",
"admin.settings.tab.other": "Autre",
"admin.settings.tab.admins": "Utilisateurs admin",
"admin.settings.mailCardDesc": "Invitations de définition de mot de passe et e-mail sortant de la plateforme",
"admin.settings.integrationsCardDesc": "OAuth, EPREL, Pinecone, Stripe, feeds",
"admin.settings.tenantVsPlatform": "Locataire vs plateforme",
"admin.settings.hostSecrets": "Secrets de base de données, session et signature du serveur — configurer uniquement sur l'hôte",
"admin.settings.linkAi": "IA",
"admin.settings.linkEmail": "Courriel",
"admin.settings.linkBilling": "Facturation",
"admin.settings.provider": "Fournisseur",
"admin.settings.model": "Modèle",
"admin.settings.baseUrl": "URL de base",
"admin.settings.apiKey": "Clé API",
"admin.settings.embeddingDims": "Dimensions d'embedding (facultatif)",
"admin.settings.smtpHost": "Hôte SMTP",
"admin.settings.port": "Port",
"admin.settings.username": "Nom d'utilisateur",
"admin.settings.fromAddress": "Adresse d'expédition",
"admin.settings.testRecipient": "Destinataire de test (facultatif)",
"admin.settings.testRecipientPlaceholder": "Par défaut votre e-mail admin",
"admin.settings.googleOauth": "Google OAuth",
"admin.settings.googleOauthDesc": "Identifiants client Google OAuth plateforme facultatifs.",
"admin.settings.clientId": "ID client",
"admin.settings.eprel": "EPREL",
"admin.settings.timeout": "Délai dépassé",
"admin.settings.ficheLanguage": "Langue de la fiche",
"admin.settings.pinecone": "Pinecone",
"admin.settings.host": "Hôte",
"admin.settings.namespace": "Espace de noms",
"admin.settings.namespacePlaceholder": "facultatif",
"admin.settings.stripe": "Stripe",
"admin.settings.priceStarterMo": "ID de prix mensuel Starter",
"admin.settings.priceStarterYr": "ID de prix annuel Starter",
"admin.settings.pricePlusMo": "Plus monthly price ID",
"admin.settings.pricePlusYr": "Plus yearly price ID",
"admin.settings.priceGrowthMo": "ID de prix mensuel Growth",
"admin.settings.priceGrowthYr": "ID de prix annuel Growth",
"admin.settings.priceBusinessMo": "ID de prix mensuel Business",
"admin.settings.priceBusinessYr": "ID de prix annuel Business",
"admin.settings.priceScaleMo": "Scale monthly price ID",
"admin.settings.priceScaleYr": "Scale yearly price ID",
"admin.settings.creditPackPrices": "AI credit pack price IDs (one-time)",
"admin.settings.creditPackPricesHint": "Create one-time Prices in Stripe (mode=payment products). Paste Price IDs here — same sync path as plan subscriptions.",
"admin.settings.syncCreditPacks": "Sync Stripe packs",
"admin.settings.syncCreditPacksOk": "Synced {count} credit pack price(s) ({mode} mode).",
"admin.settings.syncCreditPacksModeHint": "Stripe mode for this sync: {mode}. Switch the secret key (sk_test_ vs sk_live_) to sync the other environment.",
"admin.settings.syncCreditPacksFailed": "Could not sync credit packs to Stripe.",
"admin.settings.pricePackSmall": "Starter pack (500 credits) price ID",
"admin.settings.pricePackMedium": "Growth pack (2,000 credits) price ID",
"admin.settings.pricePackLarge": "Catalog pack (10,000 credits) price ID",
"admin.settings.pricePackXL": "Scale pack (40,000 credits) price ID",
"admin.settings.feedAllowlist": "Liste d'autorisation d'URL privées de feeds",
"admin.settings.allowlist": "Liste d'autorisation",
"admin.settings.platformAdmins": "Administrateurs de plateforme",
"admin.settings.colUserId": "ID utilisateur",
"admin.settings.colEmail": "Courriel",
"admin.settings.colName": "Nom",
"admin.settings.colAddedOn": "Ajouté le",
"admin.settings.colRole": "Rôle",
"admin.settings.platformAdminBadge": "Admin plateforme",
"admin.settings.noAdmins": "Aucun utilisateur admin trouvé",
"admin.settings.adminStatusCheck": "Vérification du statut admin",
"admin.settings.bootstrapPage": "page bootstrap",
"admin.readiness.title": "Préparation de la bascule",
"admin.readiness.detail": "Compteurs hypercare qui nécessitent encore de lattention avant le basculement DNS.",
"admin.readiness.mustSetPassword": "{count} utilisateurs doivent définir un mot de passe",
"admin.readiness.withoutAdmin": "{count} entreprises sans administrateur",
"admin.readiness.withoutPlan": "{count} entreprises sans forfait actif",
"admin.readiness.withoutApiKeys": "{count} companies needing API key reissue",
"admin.readiness.linksAria": "Liens profonds de préparation",
"admin.readiness.linkUsers": "Utilisateurs",
"admin.readiness.linkBilling": "Facturation",
"admin.readiness.linkSettings": "Paramètres",
"admin.readiness.linkApiKeys": "Keys needing reissue",
"admin.diagnostics.eyebrow": "Plateforme",
"admin.diagnostics.title": "Bilans",
"admin.diagnostics.description": "Console ops pour la santé de l'app, profondeur de file, tâches récentes et indicateurs de config. Secrets et DSN ne sont jamais affichés ; les erreurs de tâches sont sanitizées.",
"admin.diagnostics.filterAria": "Filtre d'état de la tâche",
"admin.diagnostics.queue": "File",
"admin.diagnostics.noJobsInQueue": "Aucune tâche en file.",
"admin.diagnostics.sanitizedErrors": "Erreurs sanitizées · max 25",
"admin.diagnostics.colId": "ID",
"admin.diagnostics.colCompany": "Entreprise",
"admin.diagnostics.colStatus": "Statut",
"admin.diagnostics.colProgress": "Progression",
"admin.diagnostics.colUpdated": "Mis à jour",
"admin.diagnostics.colError": "Erreur",
"admin.diagnostics.colTicket": "Ticket",
"admin.diagnostics.colWhen": "Quand",
"admin.diagnostics.noJobsFilter": "Aucune tâche pour ce filtre.",
"admin.stuck.title": "Produits bloqués",
"admin.stuck.description": "Examinez les tâches de traitement récentes et réinitialisez celles bloquées plus de 2 heures",
"admin.stuck.noJobs": "Aucune tâche trouvée.",
"admin.stuck.filterAria": "Filtrer les tâches par statut",
"admin.orphan.title": "Orphan processed",
"admin.orphan.description": "Cutover ops #7 — report stale catalog rows first (dry-run), then confirm delete only if needed.",
"admin.orphan.cutoverHint": "Safe by default: refresh and dry-run never delete. Confirm delete sends confirm=true only after you approve the dialog.",
"admin.orphan.refreshReport": "Refresh report",
"admin.orphan.dryRunBtn": "Dry-run cleanup",
"admin.orphan.deleteBtn": "Confirm delete…",
"admin.orphan.loadFailed": "Could not load orphan report",
"admin.orphan.dryRunFailed": "Dry-run cleanup failed",
"admin.orphan.deleteFailed": "Confirmed orphan cleanup failed",
"admin.orphan.metric.total": "Total orphans",
"admin.orphan.metric.missingRaw": "Missing raw",
"admin.orphan.metric.unprocessedRaw": "Unprocessed raw",
"admin.orphan.samplesTitle": "Sample rows",
"admin.orphan.samplesDesc": "Up to 25 most recently updated orphan catalog rows",
"admin.orphan.cleanBadge": "Clean",
"admin.orphan.needsCleanupBadge": "Needs cleanup",
"admin.orphan.noneFound": "No orphan processed rows — cutover ops #7 report is clean.",
"admin.orphan.noSamples": "No sample rows in this report.",
"admin.orphan.colProcessed": "Processed ID",
"admin.orphan.colCompany": "Company",
"admin.orphan.colRaw": "Raw ID",
"admin.orphan.colReason": "Reason",
"admin.orphan.colRawStatus": "Raw status",
"admin.orphan.reason.missingRaw": "Missing raw",
"admin.orphan.reason.unprocessedRaw": "Unprocessed raw",
"admin.orphan.reason.other": "Other",
"admin.orphan.rawProcessedYes": "is_processed=true",
"admin.orphan.rawProcessedNo": "is_processed=false",
"admin.orphan.confirmTitle": "Delete orphan processed rows?",
"admin.orphan.confirmDesc": "This permanently deletes {total} processed_products row(s) whose raw is missing or unprocessed. Job product links use ON DELETE SET NULL.",
"admin.orphan.confirmDelete": "Delete orphans",
"admin.billing.title": "Admin facturation",
"admin.billing.description": "Gérez les offres, crédits, permissions de fonctions par forfait et interrupteurs de fonctions à l'échelle de la plateforme.",
"admin.billing.noCompanies": "Aucune entreprise trouvée.",
"admin.billing.noCompaniesFilter": "Aucune entreprise ne correspond à ce filtre.",
"admin.billing.assignPlanTitle": "Assigner une offre",
"admin.billing.assignPlanDesc": "Attachez une offre de facturation à une entreprise. Les crédits d'essai facultatifs réinitialisent le solde de l'entreprise pour la période d'essai.",
"admin.billing.creditsTitle": "Ajouter / ajuster des crédits",
"admin.billing.creditsDesc": "Créditer ou débiter le solde d'une entreprise.",
"admin.billing.searchCompany": "Rechercher une entreprise…",
"admin.knowledge.draft": "Brouillon",
"admin.knowledge.badge.draft": "Brouillon",
"admin.knowledge.newArticle": "Nouvel article",
"admin.knowledge.editArticle": "Modifier larticle",
"admin.knowledge.noMatchingArticles": "Aucun article correspondant",
"admin.knowledge.noArticles": "Aucun article de connaissance",
"admin.knowledge.emptyCategoryMsg": "La catégorie « {category} » est prête — ajoutez une coquille darticle pour quun agent contenu la remplisse.",
"admin.knowledge.emptyArticlesMsg": "Ajoutez des coquilles FAQ avec catégories et mots-clés. Laissez des placeholders dans le corps pour les agents contenu.",
"admin.knowledge.col.title": "Titre",
"admin.knowledge.col.name": "Nom",
"admin.knowledge.edit": "Modifier",
"admin.knowledge.newTemplate": "Nouveau modèle",
"admin.knowledge.editTemplate": "Modifier le modèle",
"admin.knowledge.allCategories": "Tout",
"admin.settings.enablePlatformSmtp": "Activer SMTP plateforme",
"admin.plans.title": "Offres d'abonnement",
"admin.plans.description": "Public ladder, A1 / Hérité, Plateforme Demo, and custom deals. Ephemeral test and obsolete ladder rows stay under Masqué.",
"admin.plans.searchPlaceholder": "Rechercher nom ou description…",
"admin.plans.searchAria": "Rechercher des offres",
"admin.plans.filterAria": "Filtrer les offres par visibilité",
"admin.plans.filter.catalog": "Catalogue",
"admin.plans.filter.public": "Public",
"admin.plans.filter.legacy": "Legacy",
"admin.plans.filter.custom": "Personnalisé",
"admin.plans.filter.hidden": "Masqué",
"admin.plans.filter.all": "Tout",
"admin.plans.col.plan": "Offre",
"admin.plans.col.visibility": "Visibilité",
"admin.plans.col.monthlyCredits": "Crédits mensuels",
"admin.plans.col.maxProducts": "Produits max.",
"admin.plans.col.term": "Durée",
"admin.plans.customPackageFlag": "Indicateur de forfait personnalisé",
"admin.plans.visibility.public": "Public",
"admin.plans.visibility.legacy": "Legacy",
"admin.plans.visibility.hidden": "Masqué",
"admin.plans.visibility.custom": "Personnalisé",
"admin.plans.edit": "Modifier",
"admin.plans.editAria": "Modifier {name}",
"admin.plans.assign": "Assigner",
"admin.plans.assignAria": "Attribuer {name}",
"admin.plans.permissions": "Autorisations du plan",
"admin.plans.permissionsAria": "Modifier permissions de l'désactivére for {name}",
"admin.plans.showing": "Affichage de {filtered} sur {total} plans",
"admin.plans.unlimited": "Illimité",
"admin.plans.optionLabel": "{name} ({credits} crédits) · {kind}",
"admin.permissions.noteStrong": "Désactivére entitlements only.",
"admin.permissions.noteBody": "These toggles set what this package may include. Plateforme-wide on/désactivé masters are on the {global} tab — a plan can enable a feature that still stays désactivé when the platform switch is désactivé.",
"admin.permissions.globalTab": "Interrupteurs globaux",
"admin.permissions.title": "Autorisations du plan",
"admin.permissions.descCount": "{enabled}/{total} activés",
"admin.permissions.matchesProfile": "correspond à {profile}",
"admin.permissions.customizedOverrides": "remplacements personnalisés",
"admin.permissions.planDefaults": "valeurs par défaut du forfait",
"admin.permissions.badge.legacy": "Forfait legacy migré",
"admin.permissions.badge.publicLadder": "Échelle publique",
"admin.permissions.badge.ladderCustom": "Public ladder · personnalisé flag",
"admin.permissions.badge.customDeal": "Personnalisé deal",
"admin.permissions.badge.clientDeal": "Accord client",
"admin.permissions.badge.customOverrides": "Personnalisé overrides",
"admin.permissions.badge.defaults": "Valeurs par défaut",
"admin.permissions.badge.customFlag": "Personnalisé flag",
"admin.permissions.package": "Forfait",
"admin.permissions.noPlans": "Aucune offre",
"admin.permissions.suffix.legacy": "· legacy",
"admin.permissions.suffix.default": " · par défaut",
"admin.permissions.suffix.custom": " · personnalisé",
"admin.permissions.section": "Section",
"admin.permissions.allSections": "Toutes les sections",
"admin.permissions.state": "État",
"admin.permissions.stateAll": "Tout",
"admin.permissions.stateOn": "Activé",
"admin.permissions.stateOff": "Désactivé",
"admin.permissions.stateDiffers": "Diffère from default",
"admin.permissions.search": "Rechercher",
"admin.permissions.searchPlaceholder": "Filtrer par clé ou libellé",
"admin.permissions.profilesAria": "Désactivére feature profiles",
"admin.permissions.applyProfile": "Appliquer le profil",
"admin.permissions.applyLegacy": "Appliquer le profil hérité",
"admin.permissions.profilesHint": "One-click matrices for public ladder packages and migrated legacy navigation. Enregistrers overrides for the sélectionné package only.",
"admin.permissions.applyNamed": "Appliquer {label}",
"admin.permissions.applyGeneric": "Appliquer le profil",
"admin.permissions.enableAll": "Tout activer",
"admin.permissions.disableAll": "Tout désactiver",
"admin.permissions.clearOverrides": "Effacer les substitutions",
"admin.permissions.globallyOff": "Globally désactivé",
"admin.permissions.enableSection": "Activer la section",
"admin.permissions.disableSection": "Désactiver la section",
"admin.permissions.noMatch": "Aucune fonctionnalité ne correspond aux filtres actuels.",
"admin.permissions.differs": "Diffère",
"admin.permissions.platformOffHint": "Désactivé à l'échelle de la plateforme even if this plan enables it.",
"admin.permissions.sectionToggled": "{label} {state} pour ce forfait.",
"admin.permissions.state.enabled": "activé",
"admin.permissions.state.disabled": "désactivé",
"admin.permissions.loadFailed": "Échec du chargement permissions de l'désactivére",
"admin.permissions.saveFailed": "Échec de l'enregistrement feature",
"admin.permissions.enableAllFailed": "Tout activer a échoué",
"admin.permissions.disableAllFailed": "Tout désactiver a échoué",
"admin.permissions.profileFailed": "Échec de apply profile",
"admin.permissions.resetFailed": "Échec de reset defaults",
"admin.permissions.sectionFailed": "Section update a échoué",
"admin.profile.legacy.label": "Legacy",
"admin.profile.legacy.description": "Migrated legacy navigation: catalog, flux, facturation, and paramètres; no Retourground Tasks, boutiques, or marketing.",
"admin.profile.free.label": "Gratuit",
"admin.profile.free.description": "Public Free ladder — AI, clé APIs, live email, and own-key AI désactivé.",
"admin.profile.starter.label": "Starter",
"admin.profile.starter.description": "Public Starter — AI on; own-key AI désactivé.",
"admin.profile.growth.label": "Growth",
"admin.profile.growth.description": "Toutes les fonctionnalités du catalogue activées.",
"admin.profile.business.label": "Business",
"admin.profile.business.description": "Toutes les fonctionnalités du catalogue activées.",
"admin.profile.enterprise.label": "Enterprise / tout activé",
"admin.profile.enterprise.description": "Full matrice de fonctionnalités (custom and Enterprise default).",
"admin.gates.noteStrong": "Plateforme-wide masters.",
"admin.gates.noteBody": "Ces interrupteurs sappliquent à tous les forfaits. Laccès effectif est {combo}. Les droits par forfait restent dans longlet {permissions}.",
"admin.gates.combo": "permission du forfait ET section globale ET fonctionnalité globale",
"admin.gates.permissionsTab": "Autorisations du plan",
"admin.gates.sectionsOff": "{count} section désactivé",
"admin.gates.sectionsOffPlural": "{count} sections désactivé",
"admin.gates.featuresOff": "{count} feature master désactivé",
"admin.gates.featuresOffPlural": "{count} feature masters désactivé",
"admin.gates.title": "Maîtres de fonctionnalités globales",
"admin.gates.description": "Disable a feature here to turn it désactivé for every package, even when a plan enables it.",
"admin.gates.section": "Section",
"admin.gates.allSections": "Toutes les sections",
"admin.gates.search": "Rechercher",
"admin.gates.searchPlaceholder": "Filtrer par clé ou libellé",
"admin.gates.sectionOff": "Section désactivé",
"admin.gates.noMatch": "Aucune fonctionnalité ne correspond aux filtres actuels.",
"admin.gates.featureAria": "{label} global",
"admin.gates.sectionsTitle": "Interrupteurs de section globale",
"admin.gates.sectionsDesc": "Turn an entire produit area on or désactivé for all packages. “Section + features” also updates every feature master in that section.",
"admin.gates.sectionAria": "Section globale {label}",
"admin.gates.enableSectionFeatures": "Activer section + fonctionnalités",
"admin.gates.disableSectionFeatures": "Désactiver section + fonctionnalités",
"admin.gates.sectionSuccess": "{label} {state} pour tous les forfaits.",
"admin.gates.sectionSuccessWithFeatures": "{label} {state} pour tous les forfaits (maîtres section et fonctionnalité).",
"admin.gates.featureSuccess": "{key} {state} globalement.",
"admin.gates.state.enabled": "activé",
"admin.gates.state.disabled": "désactivé",
"admin.gates.loadFailed": "Échec du chargement global feature switches",
"admin.gates.sectionFailed": "Échec de update global section",
"admin.gates.saveFailed": "Échec de l'enregistrement global feature",
"admin.billing.createPlan": "Créer une offre",
"admin.billing.assignPlanBtn": "Assigner une offre",
"admin.billing.stat.plans": "Offres",
"admin.billing.stat.catalogHidden": "{catalog} catalogue · {hidden} masqués",
"admin.billing.stat.creditsAllocated": "Crédits allocated",
"admin.billing.stat.acrossCompanies": "Across entreprises on this page (first 50)",
"admin.billing.stat.creditsUsed": "Crédits used",
"admin.billing.stat.creditsConsumed": "Crédits consumed on this page",
"admin.billing.stat.noActivePlan": "Aucune offre active",
"admin.billing.stat.noActivePlanHint": "Entreprises with no active subscription (this page)",
"admin.billing.tab.plans": "Offres",
"admin.billing.tab.permissions": "Autorisations du plan",
"admin.billing.tab.global": "Interrupteurs globaux",
"admin.billing.tab.companies": "Entreprises",
"admin.billing.cyclesTitle": "Facturation cycles",
"admin.billing.cyclesDesc": "Process due renewals for entreprises on scheduled cycles de facturation.",
"admin.billing.runCycles": "Run due cycles de facturation",
"admin.billing.companiesTitle": "Entreprises",
"admin.billing.companiesDesc": "Soldes de crédits et statut du forfait — assignez des forfaits ou ajustez les crédits.",
"admin.billing.searchCompaniesAria": "Rechercher entreprises",
"admin.billing.planStatusAria": "Statut de l'offre",
"admin.billing.filter.all": "Tout entreprises",
"admin.billing.filter.withPlan": "A un forfait actif",
"admin.billing.filter.withoutPlan": "Aucune offre active",
"admin.billing.col.company": "Entreprise",
"admin.billing.col.planStatus": "Statut de l'offre",
"admin.billing.col.creditsRemaining": "Crédits restants",
"admin.billing.col.total": "Total",
"admin.billing.col.used": "Utilisés",
"admin.billing.col.usagePct": "% dutilisation",
"admin.billing.badge.noPlan": "Aucun forfait",
"admin.billing.badge.active": "Actif",
"admin.billing.assignPlanAria": "Assigner le forfait à {name}",
"admin.billing.addCredits": "Ajouter des crédits",
"admin.billing.addCreditsAria": "Ajouter credits for {name}",
"admin.billing.showingCompanies": "Affichage de {filtered} sur {total} entreprises",
"admin.billing.editPlanTitle": "Modifier plan",
"admin.billing.createPlanTitle": "Créer une offre",
"admin.billing.editPlanDesc": "Update credits, produit caps, and whether this plan is marked custom.",
"admin.billing.createPlanDesc": "Créer a package. Personnalisé plans stay hidden from public pricing.",
"admin.billing.field.name": "Nom",
"admin.billing.field.description": "Description",
"admin.billing.field.descriptionPlaceholder": "Facultatif short summary for admins",
"admin.billing.field.monthlyCredits": "Crédits mensuels",
"admin.billing.field.yearlyCredits": "Crédits annuels",
"admin.billing.field.maxProducts": "Produits max.",
"admin.billing.field.maxProductsPlaceholder": "Vide = illimité",
"admin.billing.field.term": "Durée",
"admin.billing.term.monthly": "Mensuel",
"admin.billing.term.yearly": "Annuel",
"admin.billing.customPackage": "Personnalisé package",
"admin.billing.customPackageHint": "Masqué from public pricing. Use for client deals; leave désactivé for FreeBusiness.",
"admin.billing.previewBadge": "Badge daperçu : {preview}.",
"admin.billing.company": "Entreprise",
"admin.billing.selectCompany": "Sélectionner entreprise",
"admin.billing.noPlanSuffix": "· no plan",
"admin.billing.plan": "Offre",
"admin.billing.selectPlan": "Sélectionner une offre",
"admin.billing.trialAssignment": "Attribution dessai",
"admin.billing.trialHint": "Facultatif trial flag + credit grant for sales or evaluation trials.",
"admin.billing.trialCredits": "Crédits dessai",
"admin.billing.assign": "Assigner",
"admin.billing.amount": "Montant",
"admin.billing.amountHint": "Utilisez une valeur négative pour débiter.",
"admin.billing.apply": "Appliquer",
"admin.billing.planUpdated": "Offre mis à jour.",
"admin.billing.planCreated": "Offre créé.",
"admin.billing.loadFailed": "Échec du chargement facturation data",
"admin.billing.updateFailed": "Update plan a échoué",
"admin.billing.createFailed": "Créer plan a échoué",
"admin.billing.assignFailed": "Assign a échoué",
"admin.billing.creditsFailed": "Add credits a échoué",
"admin.billing.cyclesFailed": "Run cycles a échoué",
"admin.knowledge.supportInbox": "Assistance inbox",
"admin.knowledge.aiRoles": "Rôles IA",
"admin.knowledge.tab.articles": "Articles",
"admin.knowledge.tab.templates": "Modèles",
"admin.knowledge.tab.settings": "Réponse automatique",
"admin.knowledge.allStatuses": "Tout statuses",
"admin.knowledge.published": "Publié",
"admin.knowledge.createArticle": "Créer article",
"admin.knowledge.col.categories": "Catégories",
"admin.knowledge.col.status": "Statut",
"admin.knowledge.col.keywords": "Mots-clés",
"admin.knowledge.badge.published": "Publié",
"admin.knowledge.createTemplate": "Créer template",
"admin.knowledge.badge.active": "Actif",
"admin.knowledge.badge.inactive": "Inactif",
"admin.knowledge.autoFirstResponses": "Activer les premières réponses automatiques",
"admin.knowledge.faqMatching": "Correspondance FAQ / modèle",
"admin.knowledge.retryOnReply": "Réessayer on first customer reply (if no prior auto)",
"admin.knowledge.matchThreshold": "Seuil de confiance de correspondance",
"admin.knowledge.enableAiFallback": "Activer le secours IA",
"admin.knowledge.deliveryMode": "Mode de livraison",
"admin.knowledge.delivery.draft": "Brouillon uniquement (note interne)",
"admin.knowledge.delivery.autoSend": "Envoi auto au client",
"admin.knowledge.aiThreshold": "Seuil de confiance de lIA",
"admin.knowledge.usePlatformRole": "Use platform assistance AI role (recommended)",
"admin.knowledge.modelOverride": "Modèle override",
"admin.knowledge.providerOverride": "Fournisseur override",
"admin.knowledge.baseUrlOverride": "Remplacement de lURL de base",
"admin.knowledge.supportAiRoleTitle": "Assistance AI role (fallback provider)",
"admin.knowledge.configured": "Configuré",
"admin.knowledge.notReadyBadge": "Pas prêt",
"admin.knowledge.enabled": "Activé",
"admin.knowledge.disabled": "Désactivé",
"admin.knowledge.openAiRoles": "Ouvrir Plateforme paramètres → AI roles",
"admin.knowledge.field.title": "Titre",
"admin.knowledge.field.slug": "Slug",
"admin.knowledge.field.body": "Corps (markdown)",
"admin.knowledge.field.keywords": "Mots-clés",
"admin.knowledge.keywordsPlaceholder": "séparés par des virgules",
"admin.knowledge.field.intents": "Clés dintention",
"admin.knowledge.intentsPlaceholder": "séparés par des virgules",
"admin.knowledge.field.categories": "Catégorie slugs",
"admin.knowledge.categoriesPlaceholder": "facturation, account…",
"admin.knowledge.field.weight": "Poids de priorité",
"admin.knowledge.publishedEligible": "Publié (éligible à la correspondance)",
"admin.knowledge.field.name": "Nom",
"admin.knowledge.field.templateBody": "Corps",
"admin.knowledge.active": "Actif",
"admin.settings.card.aiRolesTitle": "Plateforme AI roles",
"admin.settings.card.aiRolesDesc": "Traitement, vectorization, docs/API, and assistance — separate keys/models",
"admin.settings.roleOff": " (désactivé)",
"admin.settings.roleNotSet": "· not set",
"admin.settings.someRolesUnavailable": "Some AI roles are not disponible on this deployment yet. Traitement still uses the platform OuvrirAI paramètres until all roles are assistanceed.",
"admin.settings.configure": "Configurer",
"admin.settings.card.smtpTitle": "Plateforme SMTP",
"admin.settings.configured": "Configuré",
"admin.settings.notConfigured": "Non configuré",
"admin.settings.source": "source : {source}",
"admin.settings.smtpEnabled": "SMTP activé",
"admin.settings.smtpDisabled": "SMTP désactivé",
"admin.settings.passwordSet": "· password set",
"admin.settings.card.otherTitle": "Autres intégrations",
"admin.settings.oauthSet": "Google OAuth défini",
"admin.settings.oauthOff": "Google OAuth désactivé",
"admin.settings.eprelOn": "EPREL activé",
"admin.settings.eprelOff": "EPREL désactivé",
"admin.settings.pineconeSet": "Pinecone défini",
"admin.settings.pineconeOff": "Pinecone désactivé",
"admin.settings.stripeSet": "Stripe défini",
"admin.settings.stripeOff": "Stripe désactivé",
"admin.settings.password": "Mot de passe",
"admin.settings.passwordSavedHint": "(enregistré — leave blank to keep)",
"admin.settings.secretKey": "Clé secrète",
"admin.settings.secretConfiguredHint": "(configuré — laissez vide pour conserver)",
"admin.settings.passwordConfigured": "Mot de passe configured",
"admin.settings.noSmtpPassword": "Pas de mot de passe SMTP",
"admin.settings.enabled": "Activé",
"admin.settings.disabled": "Désactivé",
"admin.settings.saveRole": "Enregistrer {label}",
"admin.settings.testConnection": "Tester la connexion",
"admin.settings.saveMail": "Enregistrer mail paramètres",
"admin.settings.saveIntegrations": "Enregistrer integrations",
"admin.settings.eprelEnabled": "EPREL enrichment activé",
"admin.settings.loadFailed": "Plateforme paramètres could not be loaded. Saving is désactivé until reload succeeds.",
"admin.settings.testAccepted": "Message de test accepté par SMTP",
"admin.stuck.cleanupBtn": "Nettoyage des jobs bloqués (>2 h en cours)",
"admin.stuck.jobsTitle": "Jobs de traitement",
"admin.stuck.jobsDesc": "100 derniers jobs · {running} en cours",
"admin.stuck.filterAll": "Tout",
"admin.stuck.filterRunning": "En cours",
"admin.stuck.filterFailed": "Échoué",
"admin.stuck.filterPending": "En attente",
"admin.stuck.filterCompleted": "Terminé",
"admin.stuck.colId": "ID",
"admin.stuck.colCompany": "Entreprise",
"admin.stuck.colStatus": "Statut",
"admin.stuck.colProgress": "Progression",
"admin.stuck.colUpdated": "Mis à jour",
"admin.stuck.colError": "Erreur",
"admin.stuck.loadFailed": "Échec du chargement des jobs",
"admin.stuck.cleanupFailed": "Échec du nettoyage",
"admin.support.knowledgeLink": "Connaissances et réponse auto",
"admin.support.queueTitle": "File de tickets",
"admin.support.queueMeta": "{total} · portée {scope}",
"admin.support.queueMetaStatus": "· statut {status}",
"admin.support.ticketCountOne": "{count} ticket",
"admin.support.ticketCountMany": "{count} tickets",
"admin.support.statusAll": "Tout statuses",
"admin.support.scopeAll": "Tout tickets",
"admin.support.scopeInbox": "Boîte de réception",
"admin.support.scopeMine": "Les miens",
"admin.support.scopeUnassigned": "Non assignés",
"admin.support.flagAny": "Tout état auto",
"admin.support.flagNeedsHuman": "Besoin dun humain",
"admin.support.flagAiDraft": "Brouillon IA",
"admin.support.colSubject": "Objet",
"admin.support.colStatus": "Statut",
"admin.support.colAuto": "Auto",
"admin.support.colPriority": "Priorité",
"admin.support.colAssignee": "Assigné",
"admin.support.colCompany": "Entreprise",
"admin.support.colUpdated": "Mis à jour",
"admin.support.colActions": "Actions",
"admin.support.autoOff": "Auto désactivé",
"admin.support.claim": "Prendre",
"admin.support.claimAria": "Prendre le ticket {subject}",
"admin.support.unassigned": "Non assigné",
"admin.support.you": "Vous",
"admin.support.assigned": "Assigné",
"admin.support.loadQueueFailed": "Échec du chargement de la file support",
"admin.support.claimFailed": "Échec de la prise en charge",
"admin.support.ticketFallbackTitle": "Assistance ticket",
"admin.support.ticketMeta": "{company} · {requester}",
"admin.support.ticketMetaFallback": "Fil de revue du staff",
"admin.support.companyFallback": "Entreprise",
"admin.support.requesterFallback": "demandeur",
"admin.support.backQueue": "File",
"admin.support.resolve": "Résoudre",
"admin.support.markPending": "Marquer en attente",
"admin.support.reopen": "Rouvrir",
"admin.support.assigneeLabel": "Assigné :",
"admin.support.unassign": "Désassigner",
"admin.support.assignToStaff": "Assigner au personnel",
"admin.support.apply": "Appliquer",
"admin.support.autoPanelTitle": "Auto-match / assistance IA",
"admin.support.autoPanelDesc": "Résultat réservé au staff du match FAQ et brouillon/envoi IA. Les clients ne voient jamais les brouillons.",
"admin.support.autoDisabledBadge": "Auto désactivé",
"admin.support.autoStatusLabel": "Statut :",
"admin.support.lastAttempt": "Dernière tentative :",
"admin.support.reenableAuto": "Réactiver lauto",
"admin.support.disableAuto": "Désactiver lauto pour ce ticket",
"admin.support.aiDraftTitle": "Brouillon IA (approuver ou modifier)",
"admin.support.aiDraftDesc": "Le mode brouillon seul a laissé une note interne. Modifiez si besoin, puis envoyez au client — ou ignorez et reprenez manuellement.",
"admin.support.confidence": "Confiance {value}",
"admin.support.statusAfterSend": "Statut après envoi",
"admin.support.approveSend": "Approuver et envoyer",
"admin.support.discardDraft": "Ignorer le brouillon",
"admin.support.threadTitle": "Fil",
"admin.support.threadMeta": "{count} · dernière activité {when}",
"admin.support.messageCountOne": "{count} message",
"admin.support.messageCountMany": "{count} messages",
"admin.support.replyTitle": "Répondre",
"admin.support.replyDesc": "Les réponses publiques notifient le client. Les notes internes restent réservées au staff. Le statut par défaut après une réponse publique est en attente.",
"admin.support.internalNote": "Note interne (invisible au client)",
"admin.support.setStatus": "Définir le statut",
"admin.support.statusDefault": "Par défaut",
"admin.support.saveNote": "Enregistrer la note",
"admin.support.sendReply": "Envoyer la réponse",
"admin.support.replyAndResolve": "Répondre et résoudre",
"admin.support.closedBanner": "Ce ticket est fermé. Rouvrez-le pour poursuivre la conversation.",
"admin.support.priorityMeta": "priorité {priority}",
"admin.support.authorAiDraft": "Brouillon IA (staff uniquement)",
"admin.support.authorInternal": "Note interne",
"admin.support.authorStaff": "Équipe",
"admin.support.authorCustomer": "Client",
"admin.support.flash.noteSaved": "Note interne enregistrée.",
"admin.support.flash.replySent": "Réponse envoyée.",
"admin.support.flash.resolved": "Ticket marqué comme résolu.",
"admin.support.flash.pending": "Ticket marqué en attente (en attente du client).",
"admin.support.flash.reopened": "Ticket rouvert.",
"admin.support.flash.statusSet": "Statut du ticket défini sur {status}.",
"admin.support.flash.autoDisabled": "Réponses automatiques désactivées pour ce ticket.",
"admin.support.flash.autoEnabled": "Réponses automatiques réactivées pour ce ticket.",
"admin.support.loadTicketFailed": "Échec du chargement du ticket",
"admin.support.replyFailed": "Échec de lenvoi de la réponse",
"admin.support.statusFailed": "Échec de la mise à jour du statut",
"admin.support.unassignFailed": "Échec de la désassignation",
"admin.support.assignFailed": "Échec de lassignation",
"admin.support.autoFailed": "Échec de la mise à jour de la réponse auto",
"admin.support.approveFailed": "Échec de lapprobation du brouillon IA",
"admin.support.discardFailed": "Échec de labandon du brouillon IA",
"admin.settings.sourceResolved": "Résolu depuis {sources}",
"admin.settings.sourceUpdated": " · mis à jour {when}",
"admin.settings.updatedAt": "Mis à jour {when}",
"admin.settings.tenantDesc": "Les clés IA et le-mail marketing de lentreprise restent sous Intégrations. Les secrets de session et de chiffrement restent dans lenvironnement serveur et ne s’éditent pas ici.",
"admin.settings.perCompanyAiEmail": "IA/e-mail par entreprise —",
"admin.settings.plansCredits": "Forfaits et crédits —",
"admin.settings.fromDatabase": "Depuis la base de données",
"admin.settings.fromEnvironment": "Depuis lenvironnement",
"admin.settings.sourceBadge": "Source : {source}",
"admin.settings.storedKey": "Clé stockée : {masked}",
"admin.settings.enableRole": "Activer ce rôle",
"admin.settings.clearApiKey": "Effacer la clé API stockée",
"admin.settings.apiKeyKeepPlaceholder": "•••• laissez vide pour conserver",
"admin.settings.apiKeyNewPlaceholder": "sk-… ou local",
"admin.settings.smtpCardTitle": "Plateforme SMTP",
"admin.settings.smtpCardDesc": "Utilisé pour les invitations mot de passe et le-mail sortant plateforme. Resend/SMTP marketing reste par entreprise sous Intégrations → E-mail.",
"admin.settings.smtpBadgeOn": "SMTP activé",
"admin.settings.smtpBadgeOff": "SMTP désactivé",
"admin.settings.enableSmtp": "Activer SMTP plateforme",
"admin.settings.storedPassword": "Mot de passe stocké : {masked}",
"admin.settings.clearSmtpPassword": "Effacer le mot de passe SMTP stocké",
"admin.settings.sendTestEmail": "Envoyer un e-mail de test",
"admin.settings.enableGoogle": "Activer Google OAuth",
"admin.settings.clientSecret": "Secret client",
"admin.settings.leaveBlankKeep": "(laissez vide pour conserver)",
"admin.settings.storedSecret": "Secret stocké : {masked}",
"admin.settings.clearClientSecret": "Effacer le secret client stocké",
"admin.settings.eprelDesc": "Données publiques gratuites d’étiquettes énergétiques UE pendant le traitement. Activé par défaut pour tous les forfaits — aucune activation ni surclassement payant. Utilisez les contrôles uniquement pour désactiver ou régler le client.",
"admin.settings.optionalKeySaved": "Clé API optionnelle enregistrée",
"admin.settings.noApiKeyNeeded": "Aucune clé API requise",
"admin.settings.optionalApiKey": "Clé API optionnelle",
"admin.settings.optionalApiKeySavedHint": "(enregistré — leave blank to keep)",
"admin.settings.optionalApiKeyPublicHint": "(lAPI publique fonctionne sans)",
"admin.settings.clearEprelKey": "Effacer la clé API EPREL stockée",
"admin.settings.pineconeDesc": "Suggestions optionnelles de catégories vectorielles pendant le traitement. Les valeurs denvironnement hôte sont utilisées si ces champs sont vides.",
"admin.settings.apiKeyConfigured": "Clé API configurée",
"admin.settings.noApiKey": "Pas de clé API",
"admin.settings.apiKeyLabel": "Clé API",
"admin.settings.clearPineconeKey": "Effacer la clé API Pinecone stockée",
"admin.settings.stripeDesc": "Remplacements optionnels de la configuration Stripe serveur. Préférez les champs mot de passe ; les valeurs ne sont plus réaffichées après enregistrement.",
"admin.settings.stripeMock": "Forcer le mode mock Stripe (hors production uniquement — désactive les vrais paiements)",
"admin.settings.webhookSecret": "Secret webhook",
"admin.settings.clearStripeSecret": "Effacer la clé secrète Stripe",
"admin.settings.clearStripeWebhook": "Effacer le secret webhook Stripe",
"admin.settings.feedAllowlistDesc": "Hôtes/CIDR séparés par des virgules autorisés pour les URL de flux privés.",
"admin.settings.adminsDesc": "Administrateurs plateforme actuellement sur ce déploiement",
"admin.settings.onboardingTitle": "Aides donboarding admin",
"admin.settings.onboardingDesc": "Utilisez les e-mails dinvitation set-password pour intégrer les utilisateurs éligibles qui ont encore besoin dun mot de passe.",
"admin.settings.sendInvites": "Envoyer les e-mails set-password",
"admin.settings.adminStatusBefore": "Les admins plateforme ne peuvent pas être créés depuis cet écran. Confirmez votre accès sur la",
"admin.settings.adminStatusAfter": ", ou demandez à un admin/ops existant de promouvoir votre compte.",
"admin.settings.loadUsersFailed": "Échec du chargement des utilisateurs admin",
"admin.settings.sendFailed": "Échec de lenvoi",
"admin.settings.saveMailFailed": "Impossible denregistrer les réglages mail",
"admin.settings.smtpNotConfigured": "SMTP nest pas configuré — activez et enregistrez dabord les réglages mail.",
"admin.settings.smtpTestFailed": "Échec du test SMTP",
"admin.settings.testEmailFailed": "Impossible denvoyer le-mail de test",
"admin.settings.saveIntegrationFailed": "Impossible denregistrer les réglages dintégration",
"admin.settings.aiSaved": "Paramètres IA {label} enregistrés. Les clés API ne sont plus jamais affichées.",
"admin.settings.aiSaveFailed": "Impossible denregistrer les réglages IA {label}",
"admin.settings.aiTestOk": "{label} : connexion OK",
"admin.settings.aiTestSkipped": "{label} : ignoré — enregistrez les identifiants (et activez le rôle) pour tester.",
"admin.settings.aiTestFailed": "{label} : échec de connexion",
"admin.settings.aiTestError": "Impossible de tester la connexion {label}",
"admin.settings.aiRole.processing.label": "Traitement",
"admin.settings.aiRole.processing.desc": "Chat/completions du pipeline produits (titres, descriptions, amélioration).",
"admin.settings.aiRole.vectorization.label": "Vectorisation",
"admin.settings.aiRole.vectorization.desc": "Embeddings pour recherche / indexation Pinecone (aligner les dimensions dindex).",
"admin.settings.aiRole.docs_api.label": "Docs / API",
"admin.settings.aiRole.docs_api.desc": "Emplacement futur dassistant docs/API — /docs Ask reste à règles et ne doit jamais appeler ce rôle.",
"admin.settings.aiRole.support.label": "Assistance",
"admin.settings.aiRole.support.desc": "IA de secours pour auto-réponse tickets — configurez fournisseur/clé/modèle ici ; activez lenvoi dans Connaissances support → Auto-réponse.",
"admin.settings.providerOption.openai": "OpenAI",
"admin.settings.providerOption.openrouter": "OpenRouter",
"admin.settings.providerOption.azure": "Azure OpenAI",
"admin.settings.providerOption.ollama": "Ollama",
"admin.settings.providerOption.custom": "Personnalisé / autre",
"admin.support.title": "Centre d'assistance",
"admin.support.description": "Boîte de réception du personnel — prenez depuis la file, filtrez par portée, ouvrez les fils et résolvez",
"admin.support.unavailable": "La file de support n'est pas disponible. Contactez votre administrateur de plateforme si cela persiste.",
"admin.support.noTickets": "Aucun ticket dans cette file.",
"admin.support.ticketNotFound": "Ticket introuvable.",
"admin.support.notAvailable": "Le support n'est pas disponible sur ce déploiement.",
"admin.support.loadFailed": "Impossible de charger ce ticket.",
"admin.support.noMessages": "Pas encore de messages.",
"admin.support.queueScopeAria": "Portée de la file",
"admin.support.statusFilterAria": "Filtre d'état",
"admin.support.autoAssistFilterAria": "Filtre d'auto-assistance",
"admin.support.searchPlaceholder": "Rechercher objet, e-mail ou entreprise",
"admin.support.searchAria": "Rechercher des tickets",
"admin.support.assignStaffAria": "Assigner au personnel",
"admin.support.aiDraftAria": "Brouillon IA",
"admin.support.replyPlaceholder": "Écrire une réponse…",
"admin.support.replyAria": "Corps de la réponse",
"admin.knowledge.eyebrow": "Admin plateforme",
"admin.knowledge.title": "Base de connaissances",
"admin.knowledge.description": "Structurez les articles d'aide pour la correspondance FAQ auto. Les agents de contenu remplissent les corps — gardez les faits exacts.",
"admin.knowledge.notReady": "La base de connaissance support n'est pas prête",
"admin.knowledge.noTemplates": "Aucun modèle de réponse",
"admin.knowledge.articleDesc": "Le corps Markdown prend en charge les images via téléversement sécurisé. N'inventez pas de faits produit — laissez des espaces réservés aux agents de contenu.",
"admin.knowledge.templateDesc": "Espaces réservés autorisés : subject, category.",
"admin.knowledge.searchPlaceholder": "Rechercher titre, slug, mots-clés…",
"admin.knowledge.searchAria": "Rechercher des articles",
"admin.knowledge.publishFilterAria": "Filtre d'état de publication",
"admin.knowledge.deleteArticleAria": "Supprimer l'article",
"admin.knowledge.deleteTemplateAria": "Supprimer le modèle",
"admin.support.autoReplyStatus.matched": "FAQ correspondante",
"admin.support.autoReplyStatus.aiDraft": "Brouillon IA en attente",
"admin.support.autoReplyStatus.aiSent": "Réponse IA envoyée",
"admin.support.autoReplyStatus.skipped": "Auto ignoré",
"admin.support.autoReplyStatus.failed": "Auto échoué",
"admin.support.autoReplyStatus.handedOff": "Intervention humaine",
"admin.support.autoReplyStatus.none": "Aucune tentative auto",
"admin.support.autoSource.kb": "Base de connaissances",
"admin.support.autoSource.template": "Modèle",
"admin.support.autoSource.ai": "Assisté par l'IA",
"admin.support.autoSource.automated": "Automatisé",
"admin.knowledge.categoriesHeading": "Catégories",
"admin.knowledge.categoriesHint": "Seaux vides préparés pour les agents de contenu.",
"admin.knowledge.showingArticles": "Affichage de {shown} articles (corps chargé à l’édition).",
"admin.knowledge.showingArticlesOf": "Affichage de {shown} sur {total} articles (corps chargé à l’édition).",
"admin.knowledge.templatesHint": "Réponses types avec espaces réservés optionnels {{subject}} / {{category}}.",
"admin.knowledge.faqAutoMatchTitle": "Correspondance FAQ auto",
"admin.knowledge.faqAutoMatchDesc": "Correspondance de mots-clés à la création du ticket. Seuil par défaut 0,78 (plage 0,500,95).",
"admin.knowledge.aiFallbackTitle": "Secours IA",
"admin.knowledge.aiFallbackDesc": "Utilisé lorsque la correspondance FAQ est sous le seuil. Les réponses utilisent le rôle IA plateforme {role}.",
"admin.knowledge.noModel": "aucun modèle",
"admin.knowledge.keyLast4": "clé …{last4}",
"admin.knowledge.sourceLabel": "source {source}",
"admin.knowledge.apiKeyNote": "La clé API vient toujours de ce rôle ; les overrides ci-dessus ne changent que fournisseur / modèle / URL de base.",
"admin.knowledge.saveAutoSettings": "Enregistrer les paramètres dauto-réponse",
"admin.knowledge.insertImage": "Insérer une image",
"admin.knowledge.uploading": "Téléversement…",
"admin.knowledge.imageUploadHint": "PNG / JPEG / WebP, max 2 Mio. Stocké sous UPLOAD_DIR/support-kb (URL publique HMAC).",
"admin.knowledge.unavailableMsg": "La base de connaissances support nest pas disponible sur ce déploiement. Contactez votre administrateur de plateforme.",
"admin.knowledge.loadFailed": "Échec du chargement des connaissances support",
"admin.knowledge.loadArticleFailed": "Échec du chargement de larticle",
"admin.knowledge.loadTemplateFailed": "Échec du chargement du modèle",
"admin.knowledge.saveArticleFailed": "Échec de lenregistrement de larticle",
"admin.knowledge.saveTemplateFailed": "Échec de lenregistrement du modèle",
"admin.knowledge.deleteArticleFailed": "Échec de la suppression de larticle",
"admin.knowledge.deleteTemplateFailed": "Échec de la suppression du modèle",
"admin.knowledge.saveAutoFailed": "Échec de lenregistrement des paramètres dauto-réponse",
"admin.knowledge.uploadImageFailed": "Échec du téléversement de limage",
"admin.translations.eyebrow": "Plateforme",
"admin.translations.title": "Traductions",
"admin.translations.description": "Examinez la couverture UI du tableau de bord et modifiez les packs de locale basés sur fichiers.",
"admin.translations.unavailable": "Traductions indisponibles",
"admin.translations.sourceOfTruth": "Source de vérité",
"admin.translations.sourceOfTruthLabel": "Source de vérité :",
"admin.translations.colLocale": "Locale",
"admin.translations.colTranslated": "Traduit",
"admin.translations.colMissing": "Manquants",
"admin.translations.colStatus": "Statut",
"admin.translations.badgeBase": "Base",
"admin.translations.badgeComplete": "Complet",
"admin.translations.badgeUnregistered": "Non enregistré",
"admin.translations.badgeGaps": "Lacunes",
"admin.translations.language": "Langue",
"admin.translations.show": "Afficher",
"admin.translations.filterMissing": "Manquants uniquement",
"admin.translations.filterTranslated": "Traduits uniquement",
"admin.translations.filterAll": "Toutes les clés",
"admin.translations.search": "Rechercher",
"admin.translations.searchPlaceholder": "Clé ou texte…",
"admin.translations.noKeysMatch": "Aucune clé ne correspond",
"admin.translations.badgeMissing": "Manquants",
"admin.translations.badgeUnsaved": "Non enregistré",
"admin.translations.english": "Anglais",
"admin.bootstrap.title": "Accès admin bootstrap",
"admin.bootstrap.description": "Confirmez si votre compte a déjà l'accès admin plateforme. Les nouveaux admins doivent être accordés par un administrateur existant.",
"admin.bootstrap.statusTitle": "Statut admin plateforme",
"admin.bootstrap.statusDesc": "L'accès admin plateforme est accordé par un administrateur existant. Il n'y a pas de bootstrap en libre-service pour ce rôle.",
"admin.bootstrap.alreadyAdmin": "Vous avez déjà l'accès admin plateforme.",
"admin.bootstrap.signedInAs": "Connecté en tant que {email}. Ouvrez le panneau admin pour continuer.",
"admin.bootstrap.signedInAsShort": "Connecté en tant que {email}",
"admin.bootstrap.notAdminTitle": "Vous n'êtes pas admin plateforme",
"admin.bootstrap.notAdminMsg": "Votre compte est connecté mais n'est pas marqué admin plateforme. Demandez à un admin existant d'accorder l'accès, puis déconnectez-vous et reconnectez-vous.",
"admin.bootstrap.goToPanel": "Aller au panneau admin",
"admin.bootstrap.loadFailed": "Échec du chargement du profil",
"admin.migrate.title": "Migration d'organisation",
"admin.migrate.description": "Cet outil de migration est retiré et ne modifie aucune donnée.",
"admin.migrate.notAvailable": "Indisponible",
"admin.migrate.body": "La migration d'organisation depuis l'ancien fournisseur d'identité n'est plus nécessaire. Les entreprises et l'auth locale sont gérées dans Utilisateurs et organisations.",
"admin.migrate.hint": "Si vous avez ouvert ceci depuis un ancien signet, continuez avec Utilisateurs et organisations, Facturation plateforme ou Produits bloqués.",
"admin.migrate.adminHome": "Accueil admin",
"admin.migrate.users": "Utilisateurs",
"admin.redirect.diagnostics": "Redirection vers Diagnostics…",
"admin.redirect.stuck": "Redirection vers Produits bloqués…",
"common.refresh": "Actualiser",
"common.delete": "Supprimer",
"common.clearSearch": "Effacer la recherche",
"common.loading": "Chargement…",
"common.never": "Jamais",
"common.back": "Retour",
"common.startOver": "Recommencer",
"common.create": "Créer",
"common.required": "Obligatoire",
"common.actions": "Actions",
"common.status": "Statut",
"common.nameCol": "Nom",
"common.products": "Produits",
"common.more": "+{count} de plus",
"feeds.title": "Vos feeds",
"feeds.loadingDesc": "Chargement de vos feeds fournisseur…",
"feeds.desc": "{page} sur cette page · {total} feeds au total — URL CSV/XML fournisseur et téléversements. Connectez depuis Boutiques pour des options guidées.",
"feeds.storesHub": "Hub des boutiques",
"feeds.addFeed": "Ajouter un feed",
"feeds.searchPlaceholder": "Rechercher des feeds...",
"feeds.emptyTitle": "Pas encore de feeds produits",
"feeds.emptyMessage": "Connectez une URL CSV/XML fournisseur ou téléversez un fichier pour synchroniser des produits dans votre catalogue.",
"feeds.connectFeed": "Connecter un feed",
"feeds.uploadCsvCta": "Téléverser un CSV",
"feeds.noMatchTitle": "Aucun feed correspondant",
"feeds.noMatchMessage": "Essayez un autre terme de recherche, ou effacez la recherche pour voir tous les feeds.",
"feeds.col.source": "Source",
"feeds.col.mapping": "Correspondance",
"feeds.col.lastData": "Dernière sync",
"feeds.copyUrl": "Copier l'URL",
"feeds.fieldsMapped": "{count} champs",
"feeds.fieldsMappedTitle": "{count} champ mappé",
"feeds.fieldsMappedTitlePlural": "{count} champs mappés",
"feeds.mappingsSaved": "Correspondances de champs enregistrées",
"feeds.mapped": "Mappé",
"feeds.notMapped": "Non mappé",
"feeds.notMappedTitle": "Pas encore de correspondances de champs — ouvrez Mapper pour configurer",
"feeds.productsFromFeed": "{count} produits de ce feed",
"feeds.noProductsYet": "Aucun produit importé depuis ce feed pour l'instant",
"feeds.syncing": "Synchronisation…",
"feeds.syncingShort": "Synchronisation",
"feeds.syncingHint": "Peut prendre quelques minutes pour les grands feeds",
"feeds.liveSync": "Sync du flux",
"feeds.productData": "Données catalogue",
"feeds.mapFields": "Mapper les champs",
"feeds.map": "Mapper",
"feeds.sync": "Synchroniser",
"feeds.syncNow": "Synchroniser maintenant",
"feeds.syncManualTitle": "Lancer une synchronisation ponctuelle maintenant. La sync auto utilise l'intervalle défini à l'édition du feed.",
"feeds.syncInProgress": "Sync en cours",
"feeds.addTitle": "Ajouter un feed",
"feeds.addDesc": "Connectez une URL de feed produits ou téléversez un CSV. Utilisez les exemples ci-dessous pour correspondre à la structure attendue.",
"feeds.field.name": "Nom",
"feeds.field.namePlaceholder": "Mon feed produits",
"feeds.tab.url": "URL du feed",
"feeds.tab.file": "Fichier CSV",
"feeds.field.url": "URL du feed",
"feeds.field.urlPlaceholder": "https://…",
"feeds.field.type": "Type",
"feeds.field.file": "Fichier CSV",
"feeds.fileHint": "Max 5 MiB. Après création, mappez les colonnes puis synchronisez — même flux que les feeds URL.",
"feeds.field.interval": "Intervalle de sync auto (minutes)",
"feeds.field.intervalHint": "Fréquence à laquelle Descrybe doit tirer ce feed automatiquement tant qu'il est actif. Sync dans la liste lance un tirage ponctuel — cela ne modifie pas ce planning.",
"feeds.createFeed": "Créer un feed",
"feeds.editTitle": "Modifier le feed",
"feeds.editDesc": "Mettre à jour le nom, le type, le planning de sync auto ou l'URL source. Sync dans la liste des feeds lance un tirage ponctuel.",
"feeds.csvSource": "Source CSV",
"feeds.uploadedCsv": "CSV téléversé",
"feeds.replaceFileHint": "Pour remplacer le fichier, créez un nouveau feed. La sync relit le téléversement stocké.",
"feeds.csvTypeLocked": "Les feeds CSV téléversés restent de type CSV.",
"feeds.saveChanges": "Enregistrer les modifications",
"feeds.historyTitle": "Historique de sync",
"feeds.historyDesc": "Tâches de sync récentes pour « {name} ».",
"feeds.historyLastSynced": "Dernière sync réussie {relative} ({absolute}).",
"feeds.historyNeverSynced": "Pas encore de sync réussie.",
"feeds.historyLoading": "Chargement de l'historique de sync…",
"feeds.historyEmpty": "Pas encore de tâches de sync.",
"feeds.history.started": "Démarré",
"feeds.history.completed": "Terminé",
"feeds.loadFailed": "Échec du chargement des feeds",
"feeds.copyFailed": "Impossible de copier l'URL",
"feeds.created": "Feed créé",
"feeds.updated": "Feed mis à jour.",
"feeds.mapBeforeSync": "Mappez les champs avant de synchroniser ce feed.",
"feeds.activateBeforeSync": "Activez le feed avant de synchroniser.",
"feeds.syncFinished": "Synchronisation terminée",
"feeds.viewProducts": "Voir les produits",
"feeds.processing": "Traitement",
"feeds.syncFailed": "Échec de la synchronisation",
"feeds.statusUpdateFailed": "Impossible de mettre à jour le statut",
"feeds.deleteConfirm": "Supprimer le feed « {name} » ? Action irréversible.",
"feeds.deleted": "Feed supprimé.",
"feeds.deleteFailed": "Impossible de supprimer le feed",
"feeds.historyLoadFailed": "Impossible de charger l'historique de sync",
"feeds.ftpUnsupported": "La sync FTP/FTPS n'est pas prise en charge. Demandez une URL HTTPS publique à votre fournisseur, téléversez un feed CSV ici, ou importez un fichier depuis Uploads.",
"feeds.ftpUnsupportedShort": "Sync FTP non prise en charge",
"feeds.ftpBadge": "FTP",
"feeds.ftpMigrateBanner": "Certains feeds utilisent encore FTP/FTPS. Descrybe ne peut pas les récupérer. Passez à une URL HTTPS publique, ajoutez un feed CSV, ou téléversez depuis Uploads.",
"feeds.ftpUploadCta": "Aller aux Uploads",
"feeds.ftpHttpsCta": "Ajouter un feed HTTPS",
"feeds.ftpCsvCta": "Téléverser un feed CSV",
"feeds.status.mappingIncomplete": "Correspondance incomplète",
"feeds.status.readyForMapping": "Prêt pour le mapping",
"feeds.status.mapped": "Mappé",
"feeds.status.active": "Actif",
"feeds.status.inactive": "Inactif",
"feeds.status.error": "Erreur",
"feeds.status.unknown": "Inconnu",
"feeds.actions.menu": "Actions du feed",
"feeds.actions.menuSyncing": "Actions du feed (sync en cours)",
"feeds.actions.editFeed": "Modifier le feed",
"feeds.actions.editMapping": "Modifier le mapping",
"feeds.actions.syncNow": "Synchroniser maintenant",
"feeds.actions.syncInProgress": "Sync en cours…",
"feeds.actions.activateToSync": "Activer le feed pour synchroniser",
"feeds.actions.viewHistory": "Voir l'historique de sync",
"feeds.actions.deactivate": "Désactiver le feed",
"feeds.actions.activate": "Activer le feed",
"feeds.actions.delete": "Supprimer le feed",
"feeds.stats.totalFeeds": "Total des feeds",
"feeds.stats.activeMapped": "{active} actifs · {mapped} mappés",
"feeds.stats.activeOnly": "{active} actifs",
"feeds.stats.totalProducts": "Produits importés",
"feeds.stats.acrossFeeds": "Lignes brutes (pas catalogue + file)",
"feeds.stats.processed": "Dans le catalogue",
"feeds.stats.readyCatalog": "Lignes catalogue — pas une part des importés",
"feeds.stats.unprocessed": "En attente de traitement",
"feeds.stats.waiting": "File brute — pas une part des importés",
"feeds.format.howTo": "Comment structurer votre feed",
"feeds.format.required": "Obligatoire :",
"feeds.preview.title": "Aperçu de la source du feed",
"feeds.preview.truncated": "Tronqué",
"feeds.preview.refresh": "Actualiser l'aperçu",
"feeds.preview.copy": "Copier l'aperçu",
"feeds.preview.loading": "Chargement de l'aperçu…",
"feeds.preview.empty": "Extrayez le schéma pour prévisualiser la source du feed.",
"feeds.schema.search": "Rechercher des champs…",
"feeds.schema.fieldName": "Nom du champ",
"feeds.schema.sourcePath": "Chemin source",
"feeds.schema.confirm": "Confirmer",
"feeds.schema.apply": "Appliquer",
"feeds.preflight.missingItemPath": "Sélectionnez un chemin d'élément produit avant de synchroniser.",
"feeds.preflight.emptyMappings": "Mappez au moins un champ source avant de synchroniser.",
"feeds.preflight.missingRequired": "Mappez les champs obligatoires avant de synchroniser : {fields}.",
"feeds.preflight.unknownSource": "Certaines sources mappées sont introuvables dans le schéma extrait : {fields}{more}. Ré-extrayez ou corrigez les chemins avant de vous fier aux valeurs d'exemple.",
"feeds.preflight.emptySample": "Les champs obligatoires ont des valeurs d'exemple vides : {fields}. Vérifiez les colonnes source avant une sync complète.",
"feeds.preflight.fix": "Corrigez les correspondances de champs avant de synchroniser.",
"mapping.title": "Mapping du feed",
"mapping.titleNamed": "Mapper : {name}",
"mapping.description": "Sélectionnez l’élément produit répétitif, extrayez les champs source, puis mappez-les vers les champs produit Descrybe.",
"mapping.autoMap": "Auto-mapper",
"mapping.fuzzy": "{count} approximatifs",
"mapping.extractSchema": "Extraire le schéma",
"mapping.backToFeeds": "Retour aux Feeds",
"mapping.ftpStillEdit": "{message} Vous pouvez toujours modifier les mappings. Pour actualiser les produits, passez en HTTPS ou téléversez un fichier.",
"mapping.ftpUploadCta": "Aller aux Uploads",
"mapping.ftpHttpsCta": "Ajouter un feed HTTPS",
"mapping.ftpCsvCta": "Téléverser un feed CSV",
"mapping.loading": "Chargement des détails du feed…",
"mapping.step1": "Sélectionner l’élément produit",
"mapping.step2": "Mapper les champs",
"mapping.step1Heading": "Étape 1 : Sélectionner l’élément produit",
"mapping.csvHint": "Les feeds CSV utilisent les en-têtes de colonnes comme champs source. Extrayez le schéma pour charger les colonnes, puis continuez le mapping.",
"mapping.howToSelect": "Comment sélectionner l’élément produit :",
"mapping.howToHint": "Guide facultatif",
"mapping.howTo.1": "Extrayez le schéma ou cliquez sur une balise répétée dans laperçu",
"mapping.howTo.2": "Chaque élément doit contenir les détails dun seul produit",
"mapping.howTo.3": "Confirmez le chemin (par exemple",
"mapping.howTo.4": "Continuez à mapper les champs source vers les champs produit",
"mapping.productElementPath": "Chemin de l’élément produit",
"mapping.pathPlaceholder": "ex. rss/channel/item ou products/product",
"mapping.continue": "Continuer →",
"mapping.continueFields": "Continuer vers le mapping des champs →",
"mapping.discovered": "{fields} champs source découverts sur {rows} ligne(s) d’échantillon.",
"mapping.suggestionsCount": "· {count} suggestion(s) dauto-mapping",
"mapping.step2Heading": "Étape 2 : Mapper les champs",
"mapping.requiredFieldsBadge": "{count} champs obligatoires",
"mapping.unmappedRequired": "{count} obligatoires non mappés",
"mapping.sourceFieldsBadge": "{count} champs source",
"mapping.suggestedBadge": "{count} suggérés",
"mapping.step2Help": "Mappez les colonnes ou nœuds XPath vers vos champs produit. Les obligatoires sont marqués *. Survolez laide pour une courte tip.",
"mapping.requiredFields": "Champs obligatoires",
"mapping.requiredMapped": "· {mapped}/{total} mappés",
"mapping.requiredProgressDone": "Tous les champs obligatoires sont mappés — prêt pour l’étape suivante.",
"mapping.requiredProgressHint": "Les champs marqués * doivent être mappés avant que ce feed puisse synchroniser des produits.",
"mapping.requiredProgressAria": "Progression des champs obligatoires : {mapped} sur {total} mappés",
"mapping.nextAfterSaveReady": "Mappings saved. Next, sync a small sample to check products look right.",
"mapping.nextAfterSaveIncomplete": "Mappings saved. Finish the remaining required fields, then sync a sample.",
"mapping.nextCtaSyncSample": "Sync + process sample",
"mapping.nextCtaFinishRequired": "Show missing required fields",
"mapping.highConfidence": "{count} mapping haute confiance prêt",
"mapping.highConfidencePlural": "{count} mappings haute confiance prêts",
"mapping.highConfidenceHelp": "Correspondances exactes et alias (par ex. EAN → GTIN). Appliquez tout, ou acceptez les puces par ligne.",
"mapping.reviewMappings": "Revoir les mappings",
"mapping.needItemPath": "Saisissez un chemin d’élément produit avant de mapper les champs.",
"mapping.removeMapping": "Supprimer le mapping",
"mapping.sourcePlaceholder": "nom de colonne ou xpath",
"mapping.processAfterSync": "Produits à traiter après la synchro",
"mapping.noFuzzyLeft": "Plus de correspondances approximatives à confirmer.",
"mapping.syncedQueued": "Feed synchronisé et {queued} produit(s) mis en file pour traitement{jobId}.",
"mapping.saveMappings": "Enregistrer les mappings",
"mapping.syncProcessSample": "Synchroniser + traiter l’échantillon",
"mapping.badgeCsv": "CSV",
"mapping.requiredAria": "Aide champs obligatoires",
"mapping.applySuggestions": "Appliquer les suggestions ({count})",
"mapping.confirmFuzzy": "Confirmer les approximatifs ({count})",
"mapping.fuzzyNeedConfirm": "{count} correspondance approximative à confirmer",
"mapping.fuzzyNeedConfirmPlural": "{count} correspondances approximatives à confirmer",
"mapping.fuzzyHelp": "Les correspondances peu fiables ne sont pas appliquées automatiquement. Confirmez ici ou acceptez par ligne.",
"mapping.missingRequiredTitle": "Les champs obligatoires ont encore besoin dun mapping source :",
"mapping.applyTip": "Astuce : appliquez les suggestions ci-dessus — beaucoup de champs obligatoires correspondent à des noms courants.",
"mapping.formatLabel": "Format :",
"mapping.itemPathLabel": "Chemin item :",
"mapping.reExtract": "Ré-extraire",
"mapping.manualRows": "Lignes manuelles",
"mapping.schemaTable": "Table schéma",
"mapping.addField": "Ajouter un champ",
"mapping.noSchemaYet": "Aucun schéma extrait pour linstant.",
"mapping.orManualRows": "ou utilisez les lignes manuelles ci-dessous.",
"mapping.sourceField": "Champ source",
"mapping.selectSource": "Sélectionner la source…",
"mapping.mapsTo": "Correspond à",
"mapping.none": "Aucun",
"mapping.backToItem": "← Retour à la sélection d’élément",
"mapping.unsaved": "Modifications non enregistrées",
"mapping.requiredFieldsColon": "Champs obligatoires :",
"mapping.sampleOptions": "Options d'échantillon",
"mapping.sampleSize": "Taille d’échantillon",
"mapping.noExactAlias": "Aucune suggestion exacte/alias à appliquer. Vérifiez les approximatifs ci-dessous.",
"mapping.noSuggestionsExtract": "Aucune suggestion — extrayez dabord le schéma.",
"mapping.schemaExtracted": "Schéma extrait : {fields} champs sur {rows} ligne(s) d’échantillon.",
"mapping.saved": "Mappings de champs enregistrés{version}.",
"mapping.savedVersion": " (v{version})",
"mapping.syncNoProducts": "Synchro terminée ; aucun produit à traiter.",
"mapping.jobSuffix": " (tâche {jobId})",
"mapping.appliedReplace": "{count} mapping(s) {kind} appliqué(s).",
"mapping.appliedNew": "{count} nouveau(x) mapping(s) {kind} appliqué(s) ({total} au total).",
"mapping.kindHighConfidence": "haute confiance",
"mapping.kindFuzzy": "approximatif(s)",
"mapping.fuzzyConfirmFlash": "{count} correspondance approximative à confirmer — utilisez Confirmer les approximatifs ou les puces par ligne.",
"mapping.fuzzyConfirmFlashPlural": "{count} correspondances approximatives à confirmer — utilisez Confirmer les approximatifs ou les puces par ligne.",
"mapping.formatHelp.title": "Comment structurer votre feed",
"mapping.formatHelp.required": "Obligatoire :",
"mapping.formatHelp.requiredBody": "{gtin} (EAN/UPC), {title} (ou {name}), {brand}",
"mapping.formatHelp.https": "Utilisez des URL HTTPS publiques pour les feeds distants (pas FTP ni localhost). Lupload CSV convient aux fichiers locaux.",
"mapping.formatHelp.specs": "Specs en paires Libellé : valeur (ex. {ram}). Dimensions : {height}, {width}, {depth}, {mass}",
"mapping.formatHelp.also": "Aussi pris en charge : prix, stock, images, catégorie, garantie, ID EPREL, descriptions HTML, images supplémentaires, URL vidéo, et plus — téléchargez l’échantillon complet.",
"mapping.formatHelp.downloadXml": "Télécharger lXML dexemple",
"mapping.formatHelp.downloadCsv": "Télécharger le CSV dexemple",
"mapping.formatHelp.xmlExample": "Exemple XML",
"mapping.formatHelp.csvExample": "Exemple CSV (en-tête + lignes)",
"mapping.sourcePreview.title": "Aperçu de la source du feed",
"mapping.sourcePreview.truncated": "Tronqué",
"mapping.sourcePreview.refresh": "Actualiser l'aperçu",
"mapping.sourcePreview.copy": "Copier l'aperçu",
"mapping.sourcePreview.loading": "Chargement de l’échantillon…",
"mapping.sourcePreview.errorHint": "Vous pouvez encore saisir le chemin de l’élément produit manuellement. Extrayez le schéma quand lURL est joignable.",
"mapping.sourcePreview.retry": "Réessayer",
"mapping.sourcePreview.empty": "Pas encore daperçu",
"mapping.sourcePreview.emptyHintXml": "Cliquez sur « Extraire le schéma » pour télécharger un échantillon et découvrir les champs, ou saisissez un chemin manuellement.",
"mapping.sourcePreview.emptyHintCsv": "Cliquez sur « Extraire le schéma » pour télécharger un échantillon et découvrir les champs.",
"mapping.sourcePreview.selectPath": "Sélectionner le chemin : {path}",
"mapping.sourcePreview.clickTag": "Cliquez sur une ligne de balise pour définir le chemin de l’élément produit.",
"mapping.table.search": "Rechercher des champs…",
"mapping.table.all": "Tous les champs",
"mapping.table.mapped": "Mappé",
"mapping.table.unmapped": "Non mappés",
"mapping.table.fieldName": "Nom du champ",
"mapping.table.sourcePath": "Chemin source",
"mapping.table.sampleValues": "Valeurs d’échantillon",
"mapping.table.type": "Type",
"mapping.table.mapTo": "Mapper vers",
"mapping.table.emptySchema": "Extrayez le schéma du feed pour remplir les champs source, ou ajoutez des mappings manuellement.",
"mapping.table.noMatch": "Aucun champ ne correspond à vos critères.",
"mapping.table.unique": "{count} uniques",
"mapping.table.nested": "imbriqué",
"mapping.table.apply": "Appliquer",
"mapping.table.confirm": "Confirmer",
"mapping.table.suggestedMatch": "Correspondance suggérée ({confidence})",
"mapping.table.confirmFuzzyMatch": "Confirmer la correspondance approximative ({percent}%)",
"mapping.preview.title": "Aperçu du mapping",
"mapping.preview.subtitle": "Forme produit d’échantillon selon vos mappings actuels",
"mapping.preview.usingSamples": "· avec échantillons extraits",
"mapping.preview.formatCsv": "format : csv",
"mapping.preview.item": "item : {path}",
"mapping.preview.sourceFields": "· {count} champs source",
"mapping.preview.empty": "Aucun champ mappé pour linstant",
"mapping.preview.emptyHint": "Mappez des colonnes ou nœuds XPath vers des champs produit. Un aperçu d’échantillon apparaîtra ici.",
"mapping.preview.rawSample": "Extrait brut",
"imports.title": "Téléversements",
"imports.description": "Imports CSV enregistrés pour cet espace de travail — produits, catégories et attributs.",
"imports.importProducts": "Importer des produits",
"imports.emptyTitle": "Aucun upload pour linstant",
"imports.emptyMessage": "Les imports CSV produits, catégories et attributs apparaîtront ici après téléversement.",
"imports.goProducts": "Aller aux produits",
"imports.categories": "Catégories",
"imports.recent": "Téléversements récents",
"imports.fileCount": "{count} fichier",
"imports.fileCountPlural": "{count} fichiers",
"imports.col.fileName": "Nom du fichier",
"imports.col.kind": "Type",
"imports.col.uploaded": "Téléversé",
"imports.col.size": "Taille",
"imports.actions": "Actions de téléversement",
"imports.loadFailed": "Échec du chargement des téléversements",
"imports.metadataOnlyNotice": "{count} upload records are metadata-only — file bytes were not migrated. Re-upload or resync storage if you need the originals.",
"imports.metadataOnlyBadge": "Metadata only (blob not migrated)",
"imports.deleteConfirm": "Supprimer « {name} » ? Cela supprime lenregistrement dupload (et le blob local sil existe).",
"imports.deleted": "Upload suppressé.",
"imports.deleteFailed": "Impossible de supprimer le téléversement",
"imports.status.uploaded": "Téléversé",
"reviews.redirectLoading": "Ouverture des avis WooCommerce…",
"reviews.tab": "Avis",
"reviews.syncTitle": "Import davis (boutique → Descrybe)",
"reviews.syncDesc": "Import entrant — tirez les avis produits WooCommerce dans Descrybe pour campagnes et réputation",
"reviews.syncQueued": "Sync des avis mis en file",
"reviews.statusBadge": "Avis : {status}",
"reviews.syncedCount": "{count} synchronisés",
"reviews.lastSync": "Dernière sync : {date}",
"reviews.noSyncYet": "Aucune sync d'avis n'est encore terminée.",
"reviews.needsReconnect": "Limport davis ne peut pas sexécuter tant que les identifiants ne sont pas reconnectés après la migration. Dans longlet Connexion : Enregistrer, puis Tester la connexion.",
"reviews.queueImport": "Mettre en file limport davis (boutique → Descrybe)",
"reviews.queueing": "Mise en file...",
"reviews.saveTestFirst": "Enregistrez les identifiants et testez la connexion avant de synchroniser",
"reviews.refreshList": "Actualiser la liste",
"reviews.loading": "Chargement des avis…",
"reviews.emptyTitle": "Aucun avis pour linstant",
"reviews.emptyMessage": "Mettez en file une synchro davis après connexion de la boutique. Cet onglet reste utilisable avec une liste vide.",
"reviews.col.product": "Produit",
"reviews.col.reviewer": "Auteur",
"reviews.col.rating": "Note",
"reviews.col.review": "Examiner",
"reviews.queuedSuccess": "Synchro avis en file. Elle sexécutera bientôt.",
"reviews.queueFailed": "Impossible de mettre la synchro des avis en file",
"campaigns.title": "Campagnes",
"campaigns.description": "Créez des campagnes e-mail saisonnières à partir de votre catalogue — choisissez une saison, sélectionnez des produits, définissez laudience, puis générez.",
"campaigns.new": "Nouvelle campagne",
"campaigns.loading": "Chargement campagnes…",
"campaigns.loadFailed": "Échec du chargement campagnes",
"campaigns.deleteConfirm": "Supprimer la campagne « {name} » ? Cette action est irréversible.",
"campaigns.deleted": "Campagne supprimée",
"campaigns.deleteFailed": "Échec de la suppression de la campagne",
"campaigns.partialUnavailable": "Les campagnes ne sont pas pleinement accessibles pour le moment. Générer et envoyer peuvent échouer jusquau retour du service.",
"campaigns.searchPlaceholder": "Rechercher campagnes…",
"campaigns.unavailableTitle": "Campagnes indisponibles",
"campaigns.unavailableMessage": "Le service campagnes est injoignable. Vous pouvez ouvrir lassistant, mais générer et envoyer attendront le retour du service.",
"campaigns.openWizard": "Ouvrir lassistant de création",
"campaigns.backDashboard": "Retour au tableau de bord",
"campaigns.browseProducts": "Parcourir les produits",
"campaigns.emptyTitle": "Pas encore de campagnes",
"campaigns.noMatches": "Aucune correspondance",
"campaigns.emptyMessage": "Créez une campagne Black Friday, Noël ou personnalisée en quelques étapes — des modèles saisonniers sont prêts à lemploi.",
"campaigns.noMatchesMessage": "Essayez un autre nom, saison ou statut.",
"campaigns.create": "Créer campagne",
"campaigns.col.season": "Saison",
"campaigns.col.updated": "Mis à jour",
"campaigns.scheduled": "Planifié {date}",
"campaigns.newTitle": "Nouvelle campagne",
"campaigns.newDesc": "Choisissez une saison, sélectionnez produits et audience, rédigez le prompt, puis générez, testez et planifiez.",
"campaigns.editTitle": "Modifier campagne",
"campaigns.editDesc": "Mettez à jour la saison, les produits et laudience — puis régénérez, envoyez un test ou planifiez.",
"campaignWizard.loading": "Chargement de l'assistant de campagne…",
"campaignWizard.apiMissing": "L'API campagnes est temporairement indisponible. Vous pouvez explorer l'assistant ; enregistrer / générer / envoyer nécessitent /api/campaigns joignable.",
"campaignWizard.upgradeTitle": "Les campagnes IA sont une fonctionnalité payante",
"campaignWizard.upgradeMessage": "Les offres Free peuvent préparer saisons et audiences, mais Générer IA nécessite Starter ou plus. Améliorez pour débloquer les brouillons e-mail IA.",
"campaignWizard.comparePlans": "Comparer les offres",
"campaignWizard.step.season": "Saison",
"campaignWizard.step.catalog": "Produits",
"campaignWizard.step.audience": "Audience",
"campaignWizard.step.prompt": "Invite",
"campaignWizard.step.preview": "Aperçu",
"campaignWizard.step.send": "Envoyer",
"campaignWizard.pickSeason": "Choisissez une saison",
"campaignWizard.pickSeasonHelp": "Parte d'un modèle — vous pourrez tout modifier ensuite.",
"campaignWizard.name": "Nom de la campagne",
"campaignWizard.namePlaceholder": "Black Friday 2026",
"campaignWizard.catalogTitle": "Catégories et produits",
"campaignWizard.catalogHelp": "Sélectionnez ce que cet e-mail doit mettre en avant. Les catégories seules suffisent pour démarrer vite.",
"campaignWizard.categories": "Catégories",
"campaignWizard.noCategories": "Pas encore de catégories — ajoutez-en sous Catalogue.",
"campaignWizard.categoriesSelected": "{count} catégorie sélectionnée",
"campaignWizard.categoriesSelectedPlural": "{count} catégories sélectionnées",
"campaignWizard.productsOptional": "Produits (facultatif)",
"campaignWizard.selectedCount": "{count} sélectionnés",
"campaignWizard.searchProducts": "Rechercher des produits…",
"campaignWizard.noProducts": "Aucun produits trouvé.",
"campaignWizard.audienceTitle": "Qui doit le recevoir ?",
"campaignWizard.audienceHelp": "Par défaut tout le monde. Affinez avec catégories ou acheteurs passés quand les commandes sont sync.",
"campaignWizard.audience.all": "Tous les contacts",
"campaignWizard.audience.allHint": "Envoyer à toute votre liste (quand le fournisseur e-mail est configuré).",
"campaignWizard.audience.byCategory": "Par intérêt de catégorie",
"campaignWizard.audience.byCategoryHint": "Personnes associées aux catégories sélectionnées.",
"campaignWizard.audience.purchased": "Acheté dans la catégorie",
"campaignWizard.audience.purchasedHint": "Clients ayant acheté des produits des catégories d'audience (commandes sync).",
"campaignWizard.audience.notPurchased": "Pas encore acheté",
"campaignWizard.audience.notPurchasedHint": "Contacts n'ayant pas acheté ces catégories — idéal pour reconquérir.",
"campaignWizard.ordersHint": "Le ciblage acheté / non acheté apparaît après sync des commandes WooCommerce.",
"campaignWizard.audienceCategories": "Catégories d'audience",
"campaignWizard.promptTitle": "Invite e-mail",
"campaignWizard.promptHelp": "Nous avons rempli un défaut solide pour {season}. Modifiez-le ou gardez-le.",
"campaignWizard.promptSeasonFallback": "cette saison",
"campaignWizard.useDefaultPrompt": "Utiliser l'invite saisonnière par défaut",
"campaignWizard.promptLabel": "Invite",
"campaignWizard.advanced": "Options avancées",
"campaignWizard.advancedHelp": "La génération IA utilise votre kit de marque (si défini) et les produits sélectionnés. L'aperçu modèle seul ignore l'IA et sert de maquette.",
"campaignWizard.planFree": "Gratuit",
"campaignWizard.planPaid": "Payant",
"campaignWizard.planLine": "Offre :",
"campaignWizard.aiLocked": "— Générer IA est verrouillé.",
"campaignWizard.generateAi": "Générer IA",
"campaignWizard.templatePreview": "Aperçu du modèle",
"campaignWizard.saveDraft": "Enregistrer le brouillon",
"campaignWizard.previewTitle": "Aperçu",
"campaignWizard.status": "Statut :",
"campaignWizard.generateToSee": "Générez un brouillon pour voir le corps de l'e-mail.",
"campaignWizard.noPreview": "Pas encore d'aperçu. Revenez à Invite et lancez Générer IA ou Aperçu du modèle.",
"campaignWizard.backToPrompt": "Retour à l'invite",
"campaignWizard.subject": "Objet",
"campaignWizard.emailPreview": "Aperçu de l'e-mail",
"campaignWizard.regenerateAi": "Régénérer avec l'IA",
"campaignWizard.regenerate": "Régénérer",
"campaignWizard.continueSend": "Continuer vers l'envoi",
"campaignWizard.testSend": "Envoi test",
"campaignWizard.testSendHelp": "Envoyez-vous une copie avant de planifier.",
"campaignWizard.testEmail": "E-mail de test",
"campaignWizard.testEmailPlaceholder": "vous@entreprise.com",
"campaignWizard.sendTest": "Envoyer le test",
"campaignWizard.scheduleTitle": "Planifier",
"campaignWizard.scheduleHelp": "Choisissez quand cette campagne doit partir.",
"campaignWizard.sendAt": "Envoyer à",
"campaignWizard.schedule": "Planifier la campagne",
"campaignWizard.generateToContinue": "Générez pour continuer",
"campaignWizard.done": "Terminé",
"campaignWizard.loadFailed": "Échec du chargement de l'assistant",
"campaignWizard.pickCatalog": "Choisissez au moins une catégorie ou un produit",
"campaignWizard.pickAudienceCats": "Choisissez des catégories daudience pour ce filtre",
"campaignWizard.completeStep": "Terminez cette étape pour continuer",
"campaignWizard.aiDraftReady": "Brouillon IA généré",
"campaignWizard.templateReady": "Aperçu du modèle prêt",
"campaignWizard.unavailableSave": "Les campagnes ne sont pas disponibles. Les brouillons ne peuvent pas être enregistrés tant que la fonctionnalité nest pas en ligne.",
"campaignWizard.generateFailed": "Échec de la génération",
"campaignWizard.generateFirst": "Générez dabord un aperçu",
"campaignWizard.enterTestEmail": "Saisissez une adresse e-mail de test",
"campaignWizard.testFailed": "Échec de lenvoi de test",
"campaignWizard.pickSchedule": "Choisissez une date et une heure",
"campaignWizard.scheduled": "Campagne planifiée",
"campaignWizard.scheduleFailed": "Échec de la planification",
"campaignWizard.draftSaved": "Brouillon enregistré",
"campaignWizard.unavailableShort": "Les campagnes ne sont pas disponibles pour le moment.",
"campaignWizard.saveFailed": "Échec de l'enregistrement",
"marketing.calendarTitle": "Calendrier de contenu",
"marketing.calendarDesc": "Liez les campagnes saisonnières aux dates, puis préparez un feed d'export avec les défauts shopping.",
"marketing.loadFailed": "Échec du chargement du calendrier",
"marketing.prepared": "Campagne préparée",
"marketing.alreadyReady": "La campagne est déjà prête",
"marketing.exportFeedsHint": "{name} → Feeds d'export",
"marketing.prepareFailed": "Impossible de préparer la campagne",
"marketing.requestFailed": "Échec de la requête",
"marketing.emptyTitle": "Aucun préréglage saisonnier",
"marketing.emptyMessage": "Les préréglages du calendrier apparaîtront ici lorsque lAPI marketing sera disponible.",
"marketing.openCampaigns": "Ouvrir les campagnes e-mail",
"marketing.window": "Fenêtre :",
"marketing.linkedExport": "Export lié :",
"marketing.openPrepared": "Ouvrir le feed préparé",
"marketing.preparing": "Préparation…",
"marketing.prepareNamed": "Préparer la campagne {name}",
"marketing.footer": "Les campagnes e-mail restent sur {link} — cette page prépare seulement les feeds d'export catalogue.",
"common.done": "Terminé",
"common.copied": "Copié dans le presse-papiers.",
"common.copyFailed": "Impossible de copier. Sélectionnez le texte et copiez-le manuellement.",
"common.submitting": "Envoi…",
"common.sending": "Envoi…",
"settings.companyAdminOnlyView": "Seuls les admins de l'entreprise peuvent modifier les paramètres. Vous pouvez voir les détails de l'espace de travail actuel.",
"settings.activeCompanyHelp": "Espace de travail pour catalogue, feeds, facturation et clés API. Changez à tout moment ici ou dans l'en-tête.",
"settings.noCompanySelected": "Aucune entreprise sélectionnée",
"settings.creditsOverviewHelp": "Solde de crédits IA de l'entreprise active. L'utilisation détaillée est dans Facturation.",
"settings.billingLabel": "Facturation",
"settings.remainingLabel": "Restants",
"settings.creditsUnavailable": "Le solde de crédits n'est pas encore disponible pour cet espace de travail.",
"settings.openBilling": "Ouvrir utilisation et facturation",
"settings.companyNameHelp": "Ce nom apparaît dans les invitations et les paramètres de l'organisation",
"settings.contentSettingsHelp": "Configurez la langue et la correspondance produits pour le contenu généré",
"settings.mergeProductsHelp": "Lorsque activé, les imports CSV combinent les lignes partageant un GTIN en un produit. Désactivez pour garder chaque ligne indépendante.",
"settings.emailIntegrationHelp": "Configurez Resend ou SMTP pour invitations, campagnes et e-mails transactionnels.",
"settings.configureEmail": "Configurer l'e-mail",
"settings.aiIntegrationsHelp": "Crédits plateforme ou votre propre clé, plus invites modifiables pour titres, descriptions, SEO et campagnes. Clés chiffrées au repos.",
"settings.openAiIntegrations": "Ouvrir les intégrations IA",
"settings.companyNameRequired": "Saisissez un nom d'entreprise.",
"settings.companySaved": "Paramètres de l'entreprise enregistrés.",
"settings.companyUpdateFailed": "Impossible de mettre à jour l'entreprise",
"settings.mergeOn": "Les produits avec le même GTIN seront fusionnés entre feeds.",
"settings.mergeOff": "Les produits avec le même GTIN restent séparés.",
"settings.mergeUpdateFailed": "Impossible de mettre à jour le paramètre de fusion",
"settings.inAppToastsHelp": "Stocké uniquement dans ce navigateur. Les échecs sont activés par défaut ; les achèvements sont masqués pour réduire le bruit. Les retours de formulaire et Annuler ne sont jamais masqués.",
"settings.emailAlertsHelp": "Les préférences dalertes e-mail arrivent bientôt. Les alertes d’échec seront activées par défaut (comme in-app) ; les e-mails dachèvement resteront off sauf opt-in.",
"settings.emailAlertsBody": "Pour linstant, configurez le mail transactionnel sous Entreprise → Intégration e-mail. Les alertes in-app ci-dessus sappliquent toujours.",
"settings.apiKeysLegacyNotice": "Les clés API héritées nont pas été migrées. Créez-en une nouvelle pour restaurer laccès — le secret nest affiché quune fois.",
"settings.apiKeysAdminOnly": "Seuls les administrateurs peuvent créer ou révoquer des clés API. Vous pouvez voir les préfixes existants.",
"settings.apiKeysCopyUnavailableNotice": "Copie indisponible pour les clés existantes — seul le préfixe est stocké. Créez une nouvelle clé pour copier le secret une fois, puis révoquez lancienne si besoin.",
"settings.apiKeysForbidden": "Vous navez pas lautorisation de voir les clés API. Demandez de laide à un administrateur.",
"settings.noApiKeys": "Pas encore de clés API",
"settings.noApiKeysHelpAdmin": "Les clés API héritées nont pas été migrées. Créez-en une pour authentifier les requêtes Descrybe (X-API-Key). Le secret complet nest affiché quune fois.",
"settings.noApiKeysHelpMember": "Aucune clé API pour cette entreprise. Les clés héritées nont pas été migrées — demandez à un administrateur den créer une.",
"settings.unnamedKey": "Clé sans nom",
"settings.neverUsed": "Jamais utilisé",
"settings.apiKeyActions": "Actions de clé API",
"settings.copyUnavailable": "Copie indisponible",
"settings.copyUnavailableTitle": "Le secret complet nest affiché quune fois à la création de la clé",
"settings.revoke": "Révoquer",
"settings.apiKeyNameRequired": "Saisissez un nom pour cette clé API.",
"settings.apiKeyCreatedOnce": "Clé API créée. Copiez-la maintenant — elle ne sera plus affichée.",
"settings.apiKeyCreated": "Clé API créée.",
"settings.apiKeyCreateFailed": "Impossible de créer la clé API",
"settings.apiKeyRevokeConfirm": "Révoquer cette clé API ? Les requêtes qui lutilisent cesseront de fonctionner.",
"settings.apiKeyRevoked": "Clé API révoquée.",
"settings.apiKeyRevokeFailed": "Impossible de révoquer la clé API",
"settings.apiKeyCopied": "Clé API copiée.",
"settings.createApiKeyOnceHelp": "Copiez cette clé maintenant — elle ne sera plus affichée. Utilisez-la en Authorization: Bearer ou X-API-Key sur /api/v1.",
"settings.createApiKeyNameHelp": "Nommez la clé pour la distinguer plus tard. Après création, envoyez-la en Authorization: Bearer (préféré) ou X-API-Key.",
"settings.keyNamePlaceholder": "p. ex. Production",
"settings.newApiKeyAria": "Nouvelle clé API affichée une fois",
"settings.copyApiKeyAria": "Copier la clé API",
"settings.alert.sync_fail.title": "Échecs de sync",
"settings.alert.sync_fail.description": "Lorsquune synchro de feed expire ou que lAPI renvoie une erreur.",
"settings.alert.sync_done.title": "Sync terminée",
"settings.alert.sync_done.description": "Lorsquune synchro de feed se termine avec succès.",
"settings.alert.ai_fail.title": "Échecs IA / traitement",
"settings.alert.ai_fail.description": "Lorsquun démarrage ou une exécution de tâche de traitement échoue.",
"settings.alert.ai_done.title": "IA / traitement terminé",
"settings.alert.ai_done.description": "Lorsquune tâche darrière-plan se termine avec succès. Les toasts de démarrage restent toujours actifs pour quAnnuler reste disponible.",
"settings.alert.export_fail.title": "Échecs d'export",
"settings.alert.export_fail.description": "Lorsquun export de produit ou de feed dexport échoue.",
"settings.alert.export_done.title": "Export terminé",
"settings.alert.export_done.description": "Lorsquun export se termine avec succès.",
"settings.alert.support_reply.title": "Réponses du personnel de support",
"settings.alert.support_reply.description": "Lorsquun agent de la plateforme répond à votre ticket de support.",
"settings.alert.support_status.title": "Changements de statut du support",
"settings.alert.support_status.description": "Lorsquun ticket de support passe à en attente ou résolu.",
"empty.forbidden.title.company": "Permission refusée",
"empty.forbidden.title.platform": "Accès restreint",
"empty.forbidden.message.company": "Vous navez pas lautorisation. Demandez de laide à un administrateur de lentreprise.",
"empty.forbidden.message.platform": "Cette zone est réservée aux administrateurs de la plateforme.",
"empty.forbidden.message.support": "Cette zone est réservée au support et aux administrateurs de la plateforme.",
"empty.forbidden.backDashboard": "Retour au tableau de bord",
"empty.forbidden.apiKeys": "Vous navez pas lautorisation de voir les clés API. Demandez de laide à un administrateur.",
"empty.forbidden.ai": "Vous navez pas lautorisation de voir les paramètres du fournisseur dIA. Demandez de laide à un administrateur.",
"empty.forbidden.email": "Vous navez pas lautorisation de voir les paramètres du fournisseur de-mail. Demandez de laide à un administrateur.",
"confirm.defaultTitle": "Confirmer la suppression",
"confirm.defaultDescription": "Êtes-vous sûr ?",
"confirm.defaultConfirm": "Confirmer",
"confirm.deleteFeed": "Supprimer le feed « {name} » ? Action irréversible.",
"confirm.deleteCampaign": "Supprimer la campagne « {name} » ? Cette action est irréversible.",
"confirm.deleteExportFeed": "Voulez-vous vraiment supprimer ce feed d'export ?",
"confirm.rotateExportToken": "Renouveler le jeton d URL du feed? L ancienne URL publique cessera immediatement de fonctionner.",
"confirm.deleteUpload": "Supprimer « {name} » ? Cela supprime lenregistrement dupload (et le blob local sil existe).",
"confirm.revokeApiKey": "Révoquer cette clé API ? Les requêtes qui lutilisent cesseront de fonctionner.",
"confirm.deleteKnowledgeArticle": "Supprimer cet article de connaissances ?",
"confirm.deleteReplyTemplate": "Supprimer ce modèle de réponse ?",
"confirm.deleteStructuredField": "Voulez-vous vraiment supprimer ce champ ? Cette action est irréversible.",
"toast.campaign.pickAudience": "Choisissez au moins une catégorie ou un produit",
"toast.campaign.pickCategories": "Choisissez des catégories daudience pour ce filtre",
"toast.campaign.completeStep": "Terminez cette étape pour continuer",
"toast.campaign.aiDraft": "Brouillon IA généré",
"toast.campaign.templatePreview": "Aperçu du modèle prêt",
"toast.campaign.generateFirst": "Générez dabord un aperçu",
"toast.campaign.testSent": "E-mail de test envoyé à {email}",
"toast.campaign.scheduled": "Campagne planifiée",
"toast.campaign.draftSaved": "Brouillon enregistré",
"toast.campaign.deleted": "Campagne supprimée",
"toast.campaign.prepared": "Campagne préparée",
"toast.campaign.alreadyReady": "La campagne est déjà prête",
"toast.campaign.prepareFailed": "Impossible de préparer la campagne",
"toast.campaign.deleteFailed": "Échec de la suppression de la campagne",
"toast.feed.copyFailed": "Impossible de copier l'URL",
"toast.feed.created": "Feed créé",
"toast.feed.updated": "Feed mis à jour.",
"toast.feed.mapBeforeSync": "Mappez les champs avant de synchroniser ce feed.",
"toast.feed.activateBeforeSync": "Activez le feed avant de synchroniser.",
"toast.feed.syncFinished": "Synchronisation terminée",
"toast.feed.deleted": "Feed supprimé.",
"toast.feed.mappingLoadFailed": "Impossible de charger les mappages. Ouvrez le mapping pour corriger avant de synchroniser.",
"toast.feed.syncFailed": "Échec de la synchronisation",
"toast.feed.statusFailed": "Impossible de mettre à jour le statut",
"toast.feed.deleteFailed": "Impossible de supprimer le feed",
"toast.feed.beforeSampling": "Avant l’échantillonnage",
"toast.processing.jobCompleted": "Traitement terminé",
"toast.processing.jobFailed": "Échec du traitement",
"toast.products.startFailed": "Impossible de démarrer le traitement",
"toast.products.jobStarted": "Tâche de traitement démarrée",
"toast.products.acceptUndone": "Acceptation annulée",
"toast.products.resetComplete": "Réinitialisation terminée",
"toast.products.nameAcceptUndone": "Acceptation du nom annulée",
"toast.products.descAcceptUndone": "Acceptation de la description annulée",
"toast.products.cancelOne": "Traitement annulé",
"toast.products.cancelMany": "Tâches de traitement annulées",
"toast.products.startJobFailed": "Impossible de démarrer la tâche de traitement",
"toast.products.acceptFailed": "Impossible d'accepter l'enrichissement",
"toast.products.updateFailed": "Impossible de mettre à jour le produit",
"toast.products.undoAcceptFailed": "Impossible d'annuler l'acceptation",
"toast.products.undoFieldAcceptFailed": "Impossible d'annuler l'acceptation du champ",
"toast.products.undoFieldDiscardFailed": "Impossible d'annuler le rejet du champ",
"toast.products.rejectFailed": "Impossible de rejeter l'enrichissement",
"toast.products.exportFailed": "Impossible d'exporter les produits sélectionnés",
"toast.products.resetFailed": "Impossible de réinitialiser les produits",
"toast.products.cancelFailed": "Impossible d'annuler la tâche de traitement",
"toast.support.ticketCreated": "Ticket créé",
"toast.support.replySent": "Réponse envoyée",
"toast.support.thanksFeedback": "Merci pour votre retour",
"toast.support.createFailed": "Impossible de créer le ticket",
"toast.support.unavailable": "Support indisponible",
"toast.support.loadFailed": "Échec du chargement des tickets de support",
"toast.support.loadTicketFailed": "Échec du chargement du ticket",
"toast.support.replyFailed": "Impossible denvoyer la réponse",
"toast.support.ratingUnavailable": "Évaluation indisponible",
"toast.support.alreadyRated": "Déjà noté",
"toast.support.ratingFailed": "Impossible denvoyer l’évaluation",
"toast.structured.fieldAdded": "Champ ajouté",
"toast.structured.fieldAddedBody": "Le champ de description structurée a été ajouté.",
"toast.structured.fieldDeleted": "Champ supprimé",
"toast.structured.fieldDeletedBody": "Le champ de description structurée a été supprimé.",
"toast.structured.addFailed": "Échec de lajout du champ",
"toast.structured.deleteFailed": "Échec de la suppression du champ",
"toast.brand.saved": "Kit de marque enregistré",
"toast.brand.logoUploaded": "Logo téléversé",
"toast.brand.saveFailed": "Échec de lenregistrement du kit de marque",
"toast.brand.uploadFailed": "Échec du téléversement du logo",
"toast.vector.indexCreated": "Index vectoriel créé avec succès",
"toast.vector.dbInitialized": "Base de données vectorielle initialisée avec succès",
"toast.vector.indexFailed": "Échec de la création de lindex vectoriel",
"toast.vector.initFailed": "Échec de linitialisation de la base vectorielle",
"toast.vector.searchFailed": "Échec de la recherche de catégories",
"toast.export.refreshFailed": "Échec de l'actualisation du feed",
"toast.mapping.loadFailed": "Échec du chargement du mapping du feed",
"toast.mapping.extractFailed": "Échec de lextraction du schéma",
"toast.mapping.saveFailed": "Échec de lenregistrement des mappages",
"toast.mapping.sampleFailed": "Échec de la synchro + traitement de l’échantillon",
"toast.attrs.createFailed": "Échec de la création",
"toast.attrs.importFailed": "Échec de l'import",
"toast.attrs.updateFailed": "Échec de la mise à jour",
"toast.attrs.deleteFailed": "Échec de la suppression",
"toast.switcher.loadUsersFailed": "Impossible de charger les utilisateurs commutables",
"toast.switcher.switchFailed": "Impossible de changer dutilisateur",
"toast.switcher.returnFailed": "Impossible de revenir à lutilisateur dorigine",
"toast.switcher.companyFailed": "Impossible de changer dentreprise",
"toast.requestFailed": "Échec de la requête",
"flash.campaign.unavailableDraft": "Les campagnes ne sont pas disponibles. Les brouillons ne peuvent pas être enregistrés tant que la fonctionnalité nest pas en ligne.",
"flash.campaign.testEmailRequired": "Saisissez une adresse e-mail de test",
"flash.campaign.scheduleRequired": "Choisissez une date et une heure",
"flash.campaign.unavailable": "Les campagnes ne sont pas disponibles pour le moment.",
"flash.campaign.generateFailed": "Échec de la génération",
"flash.campaign.testFailed": "Échec de lenvoi de test",
"flash.campaign.scheduleFailed": "Échec de la planification",
"flash.campaign.saveFailed": "Échec de l'enregistrement",
"flash.feed.copyFailed": "Impossible de copier l'URL",
"flash.feed.csvRequired": "Veuillez choisir un fichier .csv.",
"flash.feed.csvFileRequired": "Veuillez choisir un fichier CSV.",
"flash.feed.urlRequired": "LURL du feed est obligatoire.",
"flash.feed.updated": "Feed mis à jour.",
"flash.feed.syncFinishedNamed": "Synchronisation terminée pour « {name} » ({status} : {products}).",
"flash.feed.deleted": "Feed supprimé.",
"flash.feed.createFailed": "Impossible de créer le feed",
"flash.feed.updateFailed": "Impossible de mettre à jour le feed",
"flash.settings.companyNameRequired": "Saisissez un nom d'entreprise.",
"flash.settings.companySaved": "Paramètres de l'entreprise enregistrés.",
"flash.settings.companyFailed": "Impossible de mettre à jour l'entreprise",
"flash.settings.mergeFailed": "Impossible de mettre à jour le paramètre de fusion",
"flash.settings.apiKeyNameRequired": "Saisissez un nom pour cette clé API.",
"flash.settings.apiKeyCreatedFailed": "Impossible de créer la clé API",
"flash.settings.apiKeyRevoked": "Clé API révoquée.",
"flash.settings.apiKeyRevokeFailed": "Impossible de révoquer la clé API",
"flash.settings.copyFailed": "Impossible de copier. Sélectionnez le texte et copiez-le manuellement.",
"flash.products.accepted": "{count} produit(s) accepté(s) — déplacés vers Traités.",
"flash.products.updated": "Produit mis à jour.",
"flash.products.enrichmentAccepted": "Enrichissement accepté — déplacé vers Traités.",
"flash.products.originalEmpty": "La valeur d'origine est vide ; l'enrichissement ne peut pas être effacé via PATCH.",
"flash.products.selectExport": "Sélectionnez au moins un produit à exporter.",
"flash.products.exported": "{count} produit(s) exporté(s) via le feed dexport.",
"flash.support.missingId": "Identifiant de ticket manquant",
"flash.support.notFound": "Ticket introuvable",
"flash.support.unavailable": "Le support est temporairement indisponible.",
"flash.support.ratingUnavailable": "L’évaluation est temporairement indisponible. Réessayez plus tard.",
"flash.support.alreadyRated": "Vous avez déjà évalué ce ticket.",
"flash.support.queueUnavailable": "La file de support nest pas disponible sur ce déploiement.",
"flash.support.deploymentUnavailable": "Le support n'est pas disponible sur ce déploiement.",
"flash.support.replyRequired": "Le corps de la réponse est obligatoire.",
"flash.support.draftRequired": "Le corps du brouillon est obligatoire avant approbation.",
"flash.support.claimed": "Ticket pris en charge.",
"flash.support.unassigned": "Ticket non assigné.",
"flash.support.assigneeCleared": "Assigné effacé.",
"flash.support.assigneeUpdated": "Assigné mis à jour.",
"flash.support.draftApproved": "Brouillon IA approuvé et envoyé au client.",
"flash.support.draftSent": "Brouillon envoyé comme réponse du personnel.",
"flash.support.draftDiscarded": "Brouillon IA ignoré. Ticket remis à la file humaine.",
"flash.support.autoReplyDisabled": "Réponse auto désactivée (brouillon conservé comme note interne).",
"flash.structured.keyRequired": "La clé du champ est obligatoire",
"flash.category.nameRequired": "Le nom et lID unique sont obligatoires.",
"flash.category.textEmpty": "Le texte ne peut pas être vide",
"flash.export.noConfigs": "Aucun feed d'export pour l'instant. Créez-en un sous Feeds d'export, puis revenez exporter votre sélection.",
"flash.export.selectFormat": "Veuillez sélectionner un feed d'export.",
"flash.files.deleted": "Upload suppressé.",
"flash.mapping.noSuggestions": "Aucune suggestion — vérifiez les noms de champs source.",
"flash.mapping.allMapped": "Toutes les suggestions sont déjà mappées. Vérifiez les pastilles de confiance dans le tableau.",
"flash.mapping.extractFirst": "Aucune suggestion — extrayez dabord le schéma.",
"flash.mapping.pathRequired": "Saisissez un chemin d’élément produit avant de mapper les champs.",
"flash.billing.checkoutCanceled": "Checkout a été annulé. Aucune modification n'a été effectuée.",
"flash.billing.portalReturn": "Retour du portail de facturation. Gérez votre plan ici ou dans Plans.",
"flash.billing.invalidAmount": "Veuillez saisir un montant de crédits valide.",
"flash.billing.companyNotFound": "Entreprise introuvable.",
"flash.billing.creditsAdded": "{amount} crédits ont été ajoutés.",
"flash.unsubscribe.missingToken": "Jeton de désabonnement manquant.",
"flash.unsubscribe.loadFailed": "Impossible de charger le statut de désabonnement.",
"flash.unsubscribe.failed": "Échec du désabonnement.",
"flash.seo.filledMeta": "Méta remplie pour « {label} » ({mode}).",
"flash.shopify.saved": "Paramètres Shopify enregistrés.",
"flash.woo.saved": "Paramètres WooCommerce enregistrés.",
"flash.woo.syncSaved": "Paramètres de synchronisation enregistrés.",
"flash.woo.autoCategories": "{count} catégories mappées automatiquement.",
"flash.woo.autoAttributes": "{count} attributs mappés automatiquement.",
"flash.ai.promptsSaved": "Modèles de prompt enregistrés. Ils sappliquent au prochain run IA.",
"flash.ai.promptRestored": "Prompt par défaut intégré restauré.",
"flash.ai.connectionOk": "Connexion OK ({detail}).",
"flash.ai.connectionByok": ", votre propre clé",
"flash.email.saved": "Fournisseur e-mail enregistré. Vérifiez le domaine, puis envoyez un test.",
"flash.email.testDryRun": "Test enregistré en mode simulation — aucun e-mail envoyé.",
"flash.email.testSent": "E-mail de test envoyé. Ladresse dexpédition est marquée vérifiée en cas de succès.",
"flash.fields.apiUnavailable": "L'API des champs standard n'est pas disponible. Les modifications ne peuvent pas être enregistrées.",
"flash.fields.updated": "Champ mis à jour avec succès",
"flash.fields.created": "Champ créé avec succès",
"flash.fields.enabledRecommended": "Champs e-commerce recommandés activés",
"flash.fields.deleted": "Champ supprimé avec succès",
"flash.fields.groupUpdated": "Groupe mis à jour avec succès",
"flash.fields.groupCreated": "Groupe créé avec succès",
"flash.fields.groupDeleted": "Groupe supprimé avec succès",
"flash.processing.cancelled": "« {name} » a été annulé.",
"flash.processing.retried": "« {name} » mis en file pour nouvel essai.",
"flash.admin.staffRoleUpdated": "Rôle du personnel mis à jour pour {email}.",
"flash.admin.staffRoleUnavailable": "Les mises à jour de rôle personnel ne sont pas encore disponibles sur ce serveur.",
2026-08-16 11:37:42 +02:00
"flash.admin.catalogCloned": "{source} copié vers {dest} : {products} produits, {categories} catégories.",
"flash.admin.planAssigned": "Offre assignée à {name}.",
"flash.admin.planAssignedShort": "Offre assignée.",
"flash.admin.creditsUpdated": "Crédits mis à jour.",
"flash.admin.cyclesProcessed": "Cycles de facturation traités : {count}",
"flash.admin.invitesSummary": "Invitations de définition de mot de passe : {parts}. Livraison e-mail : {smtp}.",
"flash.admin.smtpOn": "activé",
"flash.admin.smtpOff": "désactivé",
"flash.admin.localPasswordSet": "Mot de passe local défini pour {email}.",
"flash.admin.localPasswordUnavailable": "Les outils de mot de passe local ne sont pas disponibles dans cet environnement.",
"flash.admin.switchedUser": "Utilisateur changé. Rechargement…",
"flash.admin.switchUnavailable": "Le changement dutilisateur nest pas disponible dans cet environnement.",
"flash.admin.diagnosticsRateLimit": "Limite de diagnostics atteinte (20/min). Attendez une minute et actualisez.",
"flash.admin.smtpSaved": "Paramètres SMTP de la plateforme enregistrés. Les mots de passe restent masqués.",
"flash.admin.integrationSaved": "Paramètres dintégration enregistrés. Les champs secrets ne sont jamais réaffichés en entier.",
"flash.admin.aiSaved": "Paramètres IA {label} enregistrés. Les clés API ne sont plus jamais affichées.",
"flash.admin.cleanup": "Nettoyage : {jobs} tâches en échec, {products} produits réinitialisés.",
"flash.admin.orphanDryRun": "Dry-run only — {total} orphan(s) would be deleted. Nothing removed.",
"flash.admin.orphanDeleted": "Deleted {deleted} orphan row(s). Remaining: {remaining}.",
"flash.admin.articleUpdated": "Article mis à jour.",
"flash.admin.articleCreated": "Article créé.",
"flash.admin.templateUpdated": "Modèle mis à jour.",
"flash.admin.templateCreated": "Modèle créé.",
"flash.admin.articleDeleted": "Article supprimé.",
"flash.admin.templateDeleted": "Modèle supprimé.",
"flash.admin.autoReplySaved": "Paramètres de réponse automatique enregistrés.",
"flash.admin.imageUploaded": "Image téléversée et insérée dans le markdown.",
"flash.admin.translationsSaved": "{count} chaîne(s) enregistrée(s) pour {locale}. Commitez le pack de messages quand prêt.",
"flash.admin.featuresUpdated": "{key} mis à jour.",
"flash.admin.featuresAllOn": "Toutes les fonctionnalités activées pour cette offre.",
"flash.admin.featuresAllOff": "Toutes les fonctionnalités désactivées pour cette offre.",
"flash.admin.profileApplied": "Profil {label} appliqué à {name}.",
"flash.admin.overridesCleared": "Overrides effacés — utilisation des valeurs par défaut du nom doffre.",
"empty.plans.none": "Aucune offre trouvée.",
"empty.plans.noMatch": "Aucune offre ne correspond à ce filtre.",
"empty.plans.selectPackage": "Sélectionnez un forfait pour modifier les fonctionnalités.",
"empty.products.processingTitle": "Aucun produit en cours de traitement",
"empty.products.processingMessageCan": "La progression en direct est sur Traitement. Ouvrez une tâche en cours pour voir le statut des étapes ; cet onglet listera les produits en cours lorsque le filtrage par éléments sera disponible.",
"empty.products.processingMessageCannot": "Les produits actuellement dans une tâche apparaissent ici une fois le traitement démarré depuis le catalogue.",
"empty.products.reviewTitle": "Aucun produit nécessitant une révision",
"empty.products.reviewMessage": "Après une tâche, les produits enrichis arrivent ici. Ouvrez une ligne pour comparer original vs enrichi, puis Accepter, modifier ou Rejeter.",
"empty.products.errorTitle": "Aucun produit avec erreurs",
"empty.products.errorMessage": "Lorsquune tâche échoue pour un produit, il apparaît ici pour que vous puissiez réessayer.",
"empty.products.filterTitleUnprocessed": "Aucune correspondance non traitée",
"empty.products.filterTitle": "Aucun produit ne correspond",
"empty.products.filterMessage": "Essayez une autre recherche, catégorie ou feed — ou effacez les filtres pour tout voir.",
"empty.products.unprocessedTitle": "Pas encore de produits non traités",
"empty.products.unprocessedMessage": "Connectez un feed fournisseur ou téléversez un CSV pour importer des produits.",
"empty.products.noneTitle": "Pas encore de produits",
"empty.products.noneMessageStores": "Importez depuis un feed ou une boutique, puis démarrez un traitement pour construire le catalogue.",
"empty.products.noneMessage": "Importez depuis un feed ou téléversez un CSV, puis démarrez un traitement.",
"empty.products.viewJobs": "Voir les tâches",
"empty.products.startJob": "Démarrer une tâche",
"empty.products.clearFilters": "Effacer les filtres",
"empty.products.viewProcessed": "Voir les traités",
"empty.products.retryCatalog": "Réessayer depuis le catalogue",
"empty.products.connectFeed": "Connecter un feed",
"empty.products.addProduct": "Ajouter un produit",
"empty.products.uploadCsv": "Téléverser CSV",
"empty.feeds.noneTitle": "Pas encore de feeds produits",
"empty.feeds.noneMessage": "Connectez une URL CSV/XML fournisseur ou téléversez un fichier. Ensuite : Map → Sync → Process.",
"empty.feeds.noMatchTitle": "Aucun feed correspondant",
"empty.feeds.noMatchMessage": "Essayez un autre terme de recherche, ou effacez la recherche pour voir tous les feeds.",
"empty.export.loadFailedTitle": "Impossible de charger les feeds dexport",
"empty.export.loadFailedMessage": "Une erreur s'est produite lors du chargement de vos exports. Réessayez ou consultez l'erreur ci-dessus pour plus de détails.",
"empty.export.noneTitle": "Pas encore de feeds d'export",
"empty.export.noneMessage": "Créez un feed Google Shopping, Meta ou CSV/XML personnalisé pour choisir quels produits et champs sortir. Générez une URL publique pour Merchant Center ou tout partenaire — ou exportez une sous-sélection depuis Produits.",
"empty.export.noMatchTitle": "Aucun feed correspondant",
"empty.export.noMatchMessage": "Essayez un autre terme de recherche.",
"empty.files.noneTitle": "Aucun upload pour linstant",
"empty.files.noneMessage": "Les imports CSV (produits, catégories, attributs) apparaissent ici après upload. Après une migration plateforme, les contenus de fichiers (blobs) nont pas été copiés — ré-uploadez-les si besoin.",
"empty.files.uploadCta": "Téléverser un CSV",
"empty.export.fromProductsCta": "Exporter depuis Produits",
"empty.dashboard.noJobsTitle": "Aucun job récent",
"empty.dashboard.noJobsMessage": "Les jobs apparaissent ici après un démarrage depuis Produits. Enrichissez titres et descriptions avant dexporter.",
"empty.stores.noneTitle": "Aucune boutique connectée",
"empty.stores.noneMessage": "Connectez WooCommerce ou Shopify pour synchroniser catalogue et commandes. Fichier fournisseur ? Utilisez une URL de flux ou un CSV.",
"empty.stores.noneTitleMember": "Aucune boutique connectée",
"empty.stores.noneMessageMember": "Seuls les admins de l'entreprise peuvent connecter WooCommerce ou Shopify. Demandez de l'aide à un admin, ou utilisez Feed URL/CSV si votre rôle le permet.",
"empty.woo.openConnection": "Ouvrir les paramètres de connexion",
"empty.shopify.openConnection": "Ouvrir les paramètres de connexion",
"empty.processing.noneTitle": "Aucun job pour l'instant",
"empty.processing.noneMessage": "Démarrez un job depuis Produits quand vous êtes prêt. La progression et l'historique apparaîtront ici.",
"empty.campaigns.unavailableTitle": "Campagnes indisponibles",
"empty.campaigns.unavailableMessage": "Le service campagnes est injoignable. Vous pouvez ouvrir lassistant, mais générer et envoyer attendront le retour du service.",
"empty.calendar.noneTitle": "Aucun préréglage saisonnier",
"empty.calendar.noneMessage": "Les préréglages du calendrier apparaîtront ici lorsque lAPI marketing sera disponible.",
"empty.seo.noneTitle": "Aucun catalogue à scorer",
"empty.seo.noneMessage": "Traitez des produits ou ajoutez dabord des catégories. Les scores SEO apparaissent dès quil y a des données catalogue.",
"empty.vector.unavailableTitle": "Catégories vectorielles indisponibles",
"empty.vector.noMatchTitle": "Aucune correspondance pour linstant",
"empty.vector.noMatchMessage": "Saisissez une description produit et recherchez pour voir les correspondances vectorielles.",
"empty.structured.unavailableTitle": "Descriptions structurées indisponibles",
"empty.structured.unavailableMessage": "Cette API nest pas encore sur ce backend. Vous ne pouvez pas gérer les champs Export ID ici tant que /api/structured-descriptions nest pas branchée.",
"empty.structured.noneTitle": "Aucun champ de description structurée pour linstant",
"empty.structured.noneMessage": "Ajoutez un champ ici, ou créez des Export ID dans une formule de description de catégorie — ils apparaîtront pour les feeds dexport.",
"empty.support.unavailableTitle": "Support indisponible",
"empty.support.noneTitle": "Aucun ticket pour linstant",
"empty.support.unavailableMessage": "LAPI support est injoignable. Réessayez sous peu, ou ouvrez un nouveau ticket une fois le service disponible.",
"empty.support.filterMessage": "Aucun ticket ne correspond à ce statut. Essayez un autre filtre ou créez un ticket.",
"empty.support.noneMessage": "Décrivez votre problème ; notre équipe répondra dans ce fil. Vous recevrez aussi une notification in-app lorsque le personnel répond.",
"empty.support.createTicket": "Créer un ticket",
"empty.support.clearFilter": "Effacer le filtre",
"empty.support.ticketNotFoundTitle": "Ticket introuvable",
"empty.support.ticketNotFoundMessage": "Ce ticket a peut-être été supprimé ou vous ny avez pas accès.",
"empty.support.noMessagesTitle": "Aucun message",
"empty.support.noMessagesMessage": "Ce fil na pas encore de messages.",
"empty.settings.noApiKeysTitle": "Pas encore de clés API",
"empty.shopify.noOrdersTitle": "Pas encore de commandes",
"empty.shopify.noOrdersMessage": "Les commandes apparaissent après connexion Shopify et un import commandes. Les listes vides sont normales jusquau premier sync.",
"empty.woo.noOrdersTitle": "Pas encore de commandes",
"empty.woo.noOrdersMessage": "Les commandes apparaissent après connexion WooCommerce et une sync commandes. Les listes vides sont normales jusquau premier sync.",
"empty.woo.noReviewsTitle": "Aucun avis pour linstant",
"empty.woo.noReviewsMessage": "Les avis apparaissent après une mise en file dimport depuis une boutique connectée. Cet onglet reste utilisable avec une liste vide.",
"empty.admin.noProviderTitle": "Aucune ligne fournisseur",
"empty.admin.noProviderMessage": "Les jetons apparaissent ici lorsque les produits enregistrent un type de fournisseur.",
"empty.admin.noCompaniesTitle": "Aucune entreprise",
"empty.admin.noCompaniesMessage": "La liste des entreprises est vide.",
"empty.admin.noCyclesTitle": "Pas encore de cycles de facturation",
"empty.admin.noCyclesMessage": "Les cycles apparaissent après que les runs de facturation créent des lignes historiques.",
"empty.admin.noCompaniesFound": "Aucune entreprise trouvée.",
"empty.admin.noCompaniesMatch": "Aucune entreprise ne correspond à ce filtre.",
"empty.admin.notPlatformTitle": "Vous n'êtes pas admin plateforme",
"empty.admin.notPlatformMessage": "Votre compte est connecté mais n'est pas marqué admin plateforme. Demandez à un admin existant d'accorder l'accès, puis déconnectez-vous et reconnectez-vous.",
"empty.admin.noJobsFilter": "Aucune tâche pour ce filtre.",
"empty.admin.noAdminUsers": "Aucun utilisateur admin trouvé",
"empty.admin.noJobs": "Aucune tâche trouvée.",
"empty.admin.queueUnavailable": "La file de support n'est pas disponible. Contactez votre administrateur de plateforme si cela persiste.",
"empty.admin.noTicketsQueue": "Aucun ticket dans cette file.",
"empty.admin.knowledgeTitle": "Base de connaissances",
"empty.admin.knowledgeNotReadyTitle": "La base de connaissance support n'est pas prête",
"empty.admin.knowledgeNotReadyMessage": "Les articles et les paramètres de réponse auto ne sont pas encore configurés sur ce déploiement.",
"empty.admin.noTemplatesTitle": "Aucun modèle de réponse",
"empty.admin.noTemplatesMessage": "Les modèles sont appariés comme les articles et publiés comme réponses automatiques étiquetées.",
"empty.admin.ticketNotFound": "Ticket introuvable.",
"empty.admin.supportUnavailable": "Le support n'est pas disponible sur ce déploiement.",
"empty.admin.ticketLoadFailed": "Impossible de charger ce ticket.",
"empty.admin.noMessages": "Pas encore de messages.",
"empty.admin.translationsUnavailableTitle": "Traductions indisponibles",
"empty.admin.translationsUnavailableMessage": "Lendpoint du catalogue de traductions nest pas disponible sur cette build.",
"empty.admin.noKeysMatchTitle": "Aucune clé ne correspond",
"empty.admin.noKeysMatchMessage": "Essayez un autre filtre ou recherche, ou actualisez après lajout de nouvelles clés en anglais.",
"empty.admin.noUsersMatch": "Aucun utilisateur ne correspond à ce filtre.",
"empty.admin.noCompaniesMatchFilter": "Aucune entreprise ne correspond à ce filtre.",
"blast.title": "Confirmer lenvoi groupé",
"blast.dryRunDescription": "Le mode simulation est actif — aucun e-mail réel ne quittera Descrybe. Confirmez pour enregistrer lenvoi simulé.",
"blast.liveDescription": "Cela enverra de vrais e-mails à votre audience. Tapez I understand pour continuer.",
"blast.recipients": "Destinataires dans cette requête : {count}",
"blast.typePhrase": "Tapez « I understand »",
"blast.placeholder": "I understand",
"blast.runDryRun": "Lancer la simulation",
"blast.send": "Envoyer le blast",
"marketing.footerBefore": "Les campagnes e-mail restent sur",
"marketing.footerAfter": "— cette page prépare seulement les feeds d'export catalogue.",
"support.title": "Centre d'assistance",
"support.description": "Ouvrir a ticket for facturation, bugs, or account help. Personnel replies show here and as in-app notifications.",
"support.newTicket": "Nouveau ticket",
"support.createTicket": "Créer un ticket",
"support.loadingTickets": "Chargement tickets…",
"support.loadFailed": "Échec du chargement des tickets de support",
"support.unavailableBanner": "Assistance is not fully disponible yet. You can still prepare a ticket; submitting may wait until the service is ready.",
"support.yourTickets": "Vos tickets",
"support.ticketCount": "{count} tickets",
"support.ticketCountOne": "{count} ticket",
"support.statusFilterSuffix": "· statut {status}",
"support.filterByStatus": "Filtrer by status",
"support.unavailableTitle": "Support indisponible",
"support.emptyTitle": "Aucun ticket pour linstant",
"support.unavailableEmpty": "LAPI support est injoignable. Réessayez sous peu, ou ouvrez un nouveau ticket une fois le service disponible.",
"support.emptyFiltered": "Aucun ticket ne correspond à ce statut. Essayez un autre filtre ou créez un ticket.",
"support.emptyHelp": "Décrivez votre problème ; notre équipe répondra dans ce fil. Vous recevrez aussi une notification in-app lorsque le personnel répond.",
"support.clearFilter": "Effacer le filtre",
"support.table.subject": "Objet",
"support.table.category": "Catégorie",
"support.table.status": "Statut",
"support.table.priority": "Priorité",
"support.table.updated": "Mis à jour",
"support.openTicketAria": "Ouvrir ticket {subject}",
"support.status.all": "Tout",
"support.status.open": "Ouvrir",
"support.status.pending": "En attente",
"support.status.resolved": "Résolu",
"support.status.closed": "Fermé",
"support.new.title": "Nouveau ticket d'assistance",
"support.new.description": "Dites-nous de quoi vous avez besoin. Incluez étapes, messages derreur ou détails de facture si pertinent.",
"support.new.back": "Retour to tickets",
"support.new.details": "Détails du ticket",
"support.new.detailsHelp": "Statut starts as open. You may get an automated answer first; a human teammate can take over anytime from the same thread.",
"support.new.subject": "Objet",
"support.new.subjectPlaceholder": "Résumé court",
"support.new.category": "Catégorie",
"support.new.priority": "Priorité",
"support.new.optional": "Facultatif details",
"support.new.optionalHint": "(SKU, tags — aide au routage)",
"support.new.relatedSku": "SKU associé",
"support.new.relatedSkuPlaceholder": "p. ex. ABC-123",
"support.new.relatedSkuHelp": "Produit or flux SKU if this is about a specific item.",
"support.new.tags": "Tags",
"support.new.tagsPlaceholder": "login, facture (séparés par des virgules)",
"support.new.tagsHelp": "Jusqu’à 10 libellés courts. Nous normalisons espaces et ponctuation.",
"support.new.tagsWillSend": "Envoi : {tags}",
"support.new.message": "Message",
"support.new.messagePlaceholder": "Décrivez le problème, ce que vous attendiez et tout élément qui aide à le reproduire.",
"support.new.createdTitle": "Ticket créé",
"support.new.createdBody": "Nous répondrons dans ce fil. Surveillez les notifications in-app.",
"support.new.viewTicket": "Voir ticket",
"support.new.unavailable": "Assistance is temporarily indisponible. Your message was not submitted — try again shortly.",
"support.new.unavailableTitle": "Support indisponible",
"support.new.createFailed": "Impossible de créer le ticket",
"support.ticket.fallbackTitle": "Assistance ticket",
"support.ticket.description": "Conversation thread with Descrybe assistance.",
"support.ticket.meta": "{category} · {priority} · Mis à jour {when}",
"support.ticket.allTickets": "Tout tickets",
"support.ticket.loading": "Chargement ticket…",
"support.ticket.missingId": "Identifiant de ticket manquant",
"support.ticket.notFound": "Ticket introuvable",
"support.ticket.notFoundMessage": "Ce ticket a peut-être été supprimé ou vous ny avez pas accès.",
"support.ticket.backCenter": "Retour to Assistance Center",
"support.ticket.unavailable": "Le support est temporairement indisponible.",
"support.ticket.loadFailed": "Échec du chargement du ticket",
"support.ticket.openedMeta": "Ouvrired {when} · {category} · {priority} priority",
"support.ticket.sku": "SKU {sku}",
"support.ticket.messagesAria": "Messages du ticket",
"support.ticket.noMessages": "Aucun message",
"support.ticket.noMessagesHelp": "Ce fil na pas encore de messages.",
"support.ticket.yourReply": "Votre réponse",
"support.ticket.replyPlaceholder": "Add details or reply to assistance…",
"support.ticket.sendReply": "Envoyer la réponse",
"support.ticket.replySent": "Réponse envoyée",
"support.ticket.reopened": "Ticket rouvert pour revue de l’équipe.",
"support.ticket.replyAdded": "Votre message a été ajouté au fil.",
"support.ticket.replyFailed": "Impossible denvoyer la réponse",
"support.ticket.reopenHint": "Répondre rouvre ce ticket pour l’équipe.",
"support.ticket.humanHint": "Replying asks a human teammate to continue from ici.",
"support.ticket.closedBanner": "This ticket is closed. Créer a new ticket if you still need help.",
"support.kind.you": "Vous",
"support.kind.human": "Assistance",
"support.kind.auto": "Automatisé",
"support.kind.ai": "Assisté par l'IA",
"support.kind.system": "Système",
"support.kind.autoBadge": "Réponse automatisée",
"support.kind.aiBadge": "Assisté par l'IA",
"support.progress.closed.title": "Ticket fermé",
"support.progress.closed.message": "This conversation is closed. Ouvrir a new ticket if you still need help.",
"support.progress.resolved.title": "Marqué comme résolu",
"support.progress.resolved.message": "Nous pensons que cest réglé. Répondez pour rouvrir, ou laissez une note rapide ci-dessous.",
"support.progress.quickAnswer.title": "Réponse rapide envoyée",
"support.progress.quickAnswer.message": "We shared an automated reply below. If it does not solve it, reply ici — a human will take over.",
"support.progress.onIt.title": "On sen occupe",
"support.progress.onIt.handedMessage": "A assistance teammate has your ticket and will reply in this thread.",
"support.progress.onIt.pendingMessage": "Assistance is reviewing your message. You will see updates in this thread.",
"support.progress.received.title": "Ticket reçu",
"support.progress.received.message": "Merci — nous avons votre demande. Une aide automatisée peut apparaître bientôt, ou un collègue répondra.",
"support.category.billing": "Facturation",
"support.category.billing.help": "Factures, payment methods, plan changes, and Stripe receipts.",
"support.category.billing_credits": "Facturation / credits",
"support.category.billing_credits.help": "Solde de crédits, quotas dusage et recharges.",
"support.category.bug": "Bug / erreur",
"support.category.bug.help": "Erreurs inattendues, écrans cassés ou étapes qui échouent à chaque fois.",
"support.category.account": "Compte / accès",
"support.category.account.help": "Login, invites, entreprise membership, and permissions.",
"support.category.integrations": "Intégrations",
"support.category.integrations.help": "WooCommerce, Shopify, API publique ou configuration du connecteur.",
"support.category.processing": "Traitement / AI",
"support.category.processing.help": "Produit traitement, AI prompts, and generation quality.",
"support.category.export": "Exporter / channels",
"support.category.export.help": "Exporter flux, channels, and sync destinations.",
"support.category.migration": "Migration / données",
"support.category.migration.help": "Données manquantes ou incorrectes après la bascule — produits, feeds, boutiques, facturation ou équipe.",
"support.category.other": "Autre",
"support.category.other.help": "Autre chose — nous lacheminerons vers le bon collègue.",
"support.priority.low": "Faible",
"support.priority.low.help": "Souhaitable ou non bloquant — nous y viendrons à tour de rôle.",
"support.priority.normal": "Normale",
"support.priority.normal.help": "Demande standard. La plupart des tickets utilisent ceci.",
"support.priority.high": "Élevé",
"support.priority.high.help": "Bloque le travail ou impacte le chiffre daffaires — à utiliser avec parcimonie.",
"support.csat.thanks": "Merci pour votre retour",
"support.csat.unavailable": "L’évaluation est temporairement indisponible. Réessayez plus tard.",
"support.csat.unavailableTitle": "Évaluation indisponible",
"support.csat.alreadyRated": "Vous avez déjà évalué ce ticket.",
"support.csat.alreadyRatedTitle": "Déjà noté",
"support.csat.submitFailed": "Impossible denvoyer l’évaluation",
"support.csat.yourRating": "Votre note",
"support.csat.ratedOutOf": "Vous avez noté ce ticket {score} sur 5",
"support.csat.howDidWeDo": "Comment sest passé le service ?",
"support.csat.formHelp": "This ticket is {status}. Rate your experience (15). Facultatif comment helps us improve.",
"support.csat.rating": "Note",
"support.csat.scoreAria": "{value} — {label}",
"support.csat.whatWentWrong": "What went wrong? (facultatif)",
"support.csat.whatWentWrongPlaceholder": "Une courte note nous aide à faire le suivi.",
"support.csat.anythingElse": "Anything else? (facultatif)",
"support.csat.optionalFeedback": "Facultatif fluxback",
"support.csat.submit": "Envoyer l’évaluation",
"support.csat.score.1": "Très insatisfait",
"support.csat.score.2": "Insatisfait",
"support.csat.score.3": "OK",
"support.csat.score.4": "Satisfait",
"support.csat.score.5": "Très satisfait",
"catalog.delete": "Supprimer",
"catalog.deleting": "Suppression…",
"catalog.saving": "Enregistrement…",
"catalog.adding": "Ajout…",
"catalog.assigning": "Attribution…",
"catalog.uploading": "Téléversement…",
"catalog.create": "Créer",
"catalog.createFailed": "Échec de la création",
"catalog.updateFailed": "Échec de la mise à jour",
"catalog.deleteFailed": "Échec de la suppression",
"catalog.importFailed": "Échec de l'import",
"catalog.confirm": "Confirmer",
"catalog.confirmDeletion": "Confirmer la suppression",
"catalog.areYouSure": "Êtes-vous sûr ?",
"catalog.previous": "Précédent",
"catalog.next": "Suivant",
"catalog.expand": "Développer",
"catalog.collapse": "Réduire",
"catalog.clearSearch": "Effacer la recherche",
"catalog.clearFilters": "Effacer les filtres",
"catalog.clearSelection": "Effacer la sélection",
"catalog.add": "Ajouter",
"catalog.update": "Mettre à jour",
"catalog.edit": "Modifier",
"catalog.accept": "Accepter",
"catalog.reject": "Rejeter",
"catalog.reset": "Réinitialiser",
"catalog.undo": "Annuler",
"catalog.close": "Fermer",
"catalog.closePanel": "Fermer le panneau",
"catalog.closeMenus": "Fermer les menus",
"catalog.openMenu": "Ouvrir le menu",
"catalog.loading": "Chargement…",
"catalog.empty": "Vide",
"catalog.required": "Obligatoire",
"catalog.optional": "Facultatif",
"catalog.features": "Fonctionnalités",
"catalog.csvImportFinished": "Import CSV terminé.",
"catalog.comparePlans": "Comparer les offres",
"catalog.saveChanges": "Enregistrer les modifications",
"catalog.saveFormula": "Enregistrer la formule",
"catalog.saveFormulaShort": "Enregistrer la formule",
"catalog.noResults": "Aucun résultat",
"products.title": "Produits",
"products.description": "Parcourez, examinez et traitez votre catalogue.",
"products.loadFailed": "Échec du chargement des produits",
"products.unnamed": "Produit sans nom",
"products.tabs.navLabel": "Vues produits",
"products.tab.processed": "Traités",
"products.tab.processedHint": "Produits terminés prêts à exporter ou synchroniser",
"products.tab.needsReview": "À revoir",
"products.tab.needsReviewHint": "Produits enrichis à accepter, modifier ou rejeter",
"products.tab.needsReviewShort": "Examiner",
"products.tab.error": "Erreurs",
"products.tab.errorHint": "Produits ayant échoué pendant un job",
"products.tab.processing": "En cours",
"products.tab.processingHint": "Produits dans un job en cours",
"products.tab.busy": "En cours",
"products.tab.unprocessed": "Non traités",
"products.tab.unprocessedHint": "Produits du catalogue pas encore traités",
"products.tab.raw": "Non traités",
"products.status.processed": "Traités",
"products.status.needsReview": "À revoir",
"products.status.processing": "Traitement",
"products.status.error": "Erreur",
"products.status.failed": "Échoué",
"products.status.unprocessed": "Non traités",
"products.status.pending": "En attente",
"products.status.unknown": "Inconnu",
"products.pagination.showing": "Affichage {start}{end} sur {total}",
"products.empty.processing.title": "Aucun job pour l'instant",
"products.empty.processing.messageJobs": "Rien n'est en cours. Démarrez un job depuis Non traités, ou ouvrez Traitement pour suivre la progression.",
"products.empty.processing.messageBasic": "Les produits apparaissent ici pendant qu'un job tourne.",
"products.empty.needsReview.title": "Aucun produit nécessitant une révision",
"products.empty.needsReview.message": "Après une tâche, les produits enrichis arrivent ici. Ouvrez une ligne pour comparer original vs enrichi, puis Accepter, modifier ou Rejeter.",
"products.empty.error.title": "Aucun produit avec erreurs",
"products.empty.error.message": "Lorsquune tâche échoue pour un produit, il apparaît ici pour que vous puissiez réessayer.",
"products.empty.noUnprocessedMatches": "Aucune correspondance non traitée",
"products.empty.noMatch": "Aucun produit ne correspond",
"products.empty.filtersHint": "Essayez une autre recherche, catégorie ou feed — ou effacez les filtres pour tout voir.",
"products.empty.noUnprocessed.title": "Pas encore de produits non traités",
"products.empty.noUnprocessed.message": "Connectez un feed fournisseur ou téléversez un CSV pour importer des produits.",
"products.empty.none.title": "Pas encore de produits",
"products.empty.none.messageStores": "Terminez dabord Feeds → Map → Sync, puis Process. Importez depuis un flux ou une boutique.",
"products.empty.none.messageBasic": "Terminez dabord Feeds → Map → Sync, puis Process. Connectez un flux ou téléversez un CSV.",
"products.actions.viewJobs": "Voir les tâches",
"products.actions.startJob": "Démarrer une tâche",
"products.actions.viewProcessed": "Voir les traités",
"products.actions.retryFromCatalog": "Réessayer depuis le catalogue",
"products.actions.connectFeed": "Connecter un feed",
"products.actions.addProduct": "Ajouter un produit",
"products.actions.uploadCsv": "Téléverser CSV",
"products.actions.exportSelected": "Exporter la sélection",
"products.export.title": "Exporter les produits sélectionnés",
"products.export.confirm": "Confirmer l'export",
"products.export.loadFailed": "Échec du chargement des options de feed d'export. Veuillez réessayer.",
"products.export.noneFound": "Aucun feed d'export pour l'instant. Créez-en un sous Feeds d'export, puis revenez exporter votre sélection.",
"products.export.selectFormat": "Veuillez sélectionner un feed d'export.",
"products.export.failed": "Impossible d'exporter les produits sélectionnés",
"products.upload.title": "Téléverser CSV",
"products.upload.description": "Importez des produits depuis un CSV (GTIN/EAN, nom, catégorie, …). Téléchargez l'échantillon pour l'ensemble complet des colonnes.",
"products.upload.submit": "Téléverser et importer",
"products.upload.chooseFirst": "Choisissez d'abord un fichier CSV.",
"products.upload.csvOnly": "Veuillez téléverser un fichier CSV.",
"products.upload.tooLarge": "CSV must be 5 MB or smaller.",
"products.processing.started": "Tâche de traitement démarrée",
"products.processing.startFailed": "Impossible de démarrer le traitement",
"products.processing.startJobFailed": "Impossible de démarrer la tâche de traitement",
"products.processing.cancelled": "Traitement annulé",
"products.processing.jobsCancelled": "Tâches de traitement annulées",
"products.processing.cancelFailed": "Impossible d'annuler la tâche de traitement",
"products.processing.justCancelled": "La tâche qui vient de démarrer a été annulée.",
"products.processing.viewInProcessing": "Voir dans Traitement",
"products.processing.confirm": "Confirmer le traitement",
"products.processing.freePlanTitle": "Offre Free — traitement sans IA",
"products.processing.freePlanBody": "Normalisation, spécifications, complétion et EPREL nutilisent aucun crédit. Les titres/descriptions AI nécessitent une formule payante ou des crédits.",
"products.enrichment.acceptTitle": "Accepter l'enrichissement ?",
"products.enrichment.acceptConfirm": "Confirmer l'acceptation de l'enrichissement",
"products.enrichment.acceptSelected": "Accepter l'enrichissement pour {count} produit(s) sélectionné(s) ? Ils passeront en Traités.",
"products.enrichment.rejectConfirm": "Confirmer le rejet de l'enrichissement",
"products.enrichment.rejectBody": "Rejeter l'enrichissement et renvoyer ce produit en non traité ? Vous pourrez relancer le traitement plus tard.",
"products.enrichment.rejectSelectedConfirm": "Confirmer le rejet de la sélection",
"products.enrichment.resetConfirm": "Confirmer la réinitialisation en non traité",
"products.enrichment.resetSelected": "Réinitialiser {count} produit(s) sélectionné(s) en non traité ? Ils réapparaîtront comme éléments non traités.",
"products.enrichment.accepted": "Enrichissement accepté — déplacé vers Traités.",
"products.enrichment.rejected": "Enrichissement rejeté — produit renvoyé en non traité.",
"products.enrichment.acceptFailed": "Impossible d'accepter l'enrichissement",
"products.enrichment.rejectFailed": "Impossible de rejeter l'enrichissement",
"products.enrichment.acceptUndone": "Acceptation annulée",
"products.enrichment.undoAcceptFailed": "Impossible d'annuler l'acceptation",
"products.enrichment.resetDone": "Produit renvoyé en non traité.",
"products.enrichment.resetFailed": "Impossible de réinitialiser les produits",
"products.enrichment.valueReset": "Valeur enrichie réinitialisée à l'original.",
"products.enrichment.originalEmpty": "La valeur d'origine est vide ; l'enrichissement ne peut pas être effacé via PATCH.",
"products.enrichment.staysNeedsReview": "Le produit reste dans Needs Review jusqu'à ce que vous acceptiez tout.",
"products.field.nameAcceptUndone": "Acceptation du nom annulée",
"products.field.descriptionAcceptUndone": "Acceptation de la description annulée",
"products.field.nameDiscardUndone": "Rejet du nom annulé",
"products.field.descriptionDiscardUndone": "Rejet de la description annulé",
"products.field.undoAcceptFailed": "Impossible d'annuler l'acceptation du champ",
"products.field.undoDiscardFailed": "Impossible d'annuler le rejet du champ",
"products.updateFailed": "Impossible de mettre à jour le produit",
"products.keyboardTips": "Raccourcis clavier",
"products.keyboardTipsShort": "Raccourcis clavier (?)",
"products.option.categories": "Catégories",
"products.option.attributes": "Attributs / spécifications",
"products.option.titlesAi": "Titres (IA)",
"products.option.descriptionsAi": "Descriptions (IA)",
"products.enrichment.piece.name": "Nom",
"products.enrichment.piece.description": "Description",
"products.enrichment.piece.attributes": "Attributs",
"products.enrichment.piece.category": "Catégorie",
"products.enrichment.state.processed": "Traités",
"products.enrichment.state.feed": "Depuis le feed",
"products.enrichment.state.missing": "Manquants",
"products.enrichment.help.name": "Titre du produit. Vert = nom traité par AI ; orange = nom du flux/original uniquement ; gris = manquant.",
"products.enrichment.help.description": "Description du produit. Vert = traitée par AI ; orange = flux/original uniquement ; gris = manquante.",
"products.enrichment.help.attributes": "Spécifications et attributs. Vert = attributs AI/enrichis ; orange = depuis le flux uniquement ; gris = aucun.",
"products.enrichment.help.category": "Catégorie assignée. Vert = catégorie définie ; gris = manquante.",
"products.enrichment.chipTitle": "{label} : {state}. {help}",
"products.enrichment.complete": "Complet — {parts}",
"products.enrichment.missingSummary": "Manquant {missing} — {parts}",
"products.issue.title": "titre",
"products.issue.gtin": "GTIN",
"products.issue.category": "catégorie",
"products.filters.allCategories": "Toutes les catégories",
"products.filters.allFeeds": "Tous les feeds",
"products.filters.allCoverage": "Toute la couverture",
"products.filters.anyFeedChange": "Tout changement de feed",
"products.filters.eprelAll": "EPREL : tous",
"products.filters.feedChangesAll": "Changements de feed : tous",
"products.filters.byCategory": "Filtrer par catégorie",
"products.filters.byCoverage": "Filtrer par couverture",
"products.filters.byFeed": "Filtrer par feed",
"products.filters.byEprel": "Filtrer par EPREL",
"products.filters.byFeedSync": "Filtrer par changements de synchronisation du feed",
"products.filters.coverageHint": "Filtrer par complétude Nom / Description / Attributs / Catégorie",
"products.filters.feedSyncHint": "Filtrer par changements de prix/stock/titre de la dernière synchronisation du feed",
"products.filters.eprelHint": "Filtrer les produits qui ont ou nont pas didentifiant EPREL d’étiquette énergétique",
"products.filters.availabilityChanged": "Disponibilité modifiée",
"products.eprel.badgeTitle": "Id EPREL présent sur ce produit (European Product Registry for Energy Labelling).",
"products.eprel.help": "L'id European Product Registry for Energy Labelling (EPREL) est présent sur ce produit.",
"products.feedData": "Données du feed",
"attributes.title": "Attributs",
"attributes.description": "Définissez les champs produit, les valeurs de liste et les assignations de catégorie.",
"attributes.loadFailed": "Échec du chargement des attributs",
"attributes.loading": "Chargement des attributs…",
"attributes.zero": "0 attributs",
"attributes.addNew": "Ajouter un nouvel attribut",
"attributes.create": "Créer l'attribut",
"attributes.edit": "Modifier l'attribut",
"attributes.delete": "Supprimer l'attribut",
"attributes.displayName": "Nom affiché de l'attribut",
"attributes.actions": "Actions sur l'attribut",
"attributes.created": "Attribut créé.",
"attributes.createdAssignFailed": "Attribut créé, mais l'assignation de catégorie a échoué.",
"attributes.updated": "Attribut mis à jour.",
"attributes.deleted": "Attribut supprimé.",
"attributes.addValue": "Ajouter une valeur",
"attributes.manageValues": "Ajouter, modifier ou supprimer des valeurs pour cet attribut de liste.",
"attributes.valueTypeHint": "Choisissez comment les valeurs sont saisies pour cet attribut.",
"attributes.createDescription": "Créez une nouvelle définition d'attribut. Vous pouvez l'assigner à une catégorie pendant la création.",
"attributes.assignToCategories": "Assigner des attributs aux catégories",
"attributes.assignFailed": "Impossible d'assigner l'attribut à la catégorie sélectionnée.",
"attributes.bulkAssignFailed": "Échec de l'assignation en masse",
"attributes.filterByCategory": "Filtrer par catégorie",
"attributes.saveValueFailed": "Impossible d'enregistrer la valeur",
"attributes.deleteValueFailed": "Impossible de supprimer la valeur",
"attributes.csvNeedHeader": "Le CSV doit inclure un en-tête et au moins une ligne",
"attributes.csvNeedColumns": "Le CSV doit inclure les colonnes « category_id » et « attribute_key »",
"attributes.type.string": "Texte",
"attributes.type.stringHint": "Texte libre — noms, modèles, notes courtes",
"attributes.type.number": "Nombre",
"attributes.type.numberHint": "Valeur numérique ; ajoutez une unité si utile (cm, kg, W)",
"attributes.type.boolean": "Oui / Non",
"attributes.type.booleanHint": "Vrai ou faux — ex. a un GPS, charge sans fil",
"attributes.type.date": "Date",
"attributes.type.dateHint": "Une date calendaire (sortie, fin de garantie, …)",
"attributes.type.list": "Liste déroulante",
"attributes.type.listHint": "Choisissez exactement une option dans une liste définie",
"attributes.type.multiselect": "Sélection multiple",
"attributes.type.multiselectHint": "Choisissez une ou plusieurs options dans une liste",
"attributes.color": "Couleur",
"categories.title": "Catégories",
"categories.description": "Organisez la hiérarchie du catalogue. Modifiez une catégorie pour ouvrir les formules titre/description et prompts IA.",
"categories.loadFailed": "Échec du chargement des catégories",
"categories.add": "Ajouter une catégorie",
"categories.edit": "Modifier la catégorie",
"categories.delete": "Supprimer la catégorie",
"categories.deleteConfirm": "Voulez-vous vraiment supprimer cette catégorie ? Cette action est irréversible.",
"categories.name": "Nom de catégorie",
"categories.namePlaceholder": "Nom de catégorie",
"categories.descriptionPlaceholder": "Description facultative de la catégorie",
"categories.uniqueIdPlaceholder": "Identifiant unique facultatif",
"categories.searchPlaceholder": "Rechercher par nom ou ID...",
"categories.created": "{name} a été créé.",
"categories.updated": "La catégorie a été mise à jour avec succès.",
"categories.deleted": "La catégorie a été supprimée avec succès.",
"categories.notFound": "Catégorie introuvable.",
"categories.loadCategoryFailed": "Échec du chargement de la catégorie",
"categories.noCategoriesYet": "Aucune catégorie pour l'instant",
"categories.noMatch": "Aucune catégorie ne correspond à « {query} ». Effacez la recherche ou essayez un autre terme.",
"categories.emptyHint": "Ajoutez une catégorie ou importez un CSV pour construire votre arbre.",
"categories.promptCountOne": "{count} catégorie a un prompt de génération IA. Ouvrez le menu ⋮ → Modifier le prompt IA, ou modifiez une catégorie et choisissez Modifier le prompt IA.",
"categories.promptCountMany": "{count} catégories ont un prompt de génération IA. Ouvrez le menu ⋮ → Modifier le prompt IA, ou modifiez une catégorie et choisissez Modifier le prompt IA.",
"categories.actions": "Actions de catégorie",
"categories.chooseCsv": "Choisir CSV",
"categories.createSingleOrImport": "Créez une seule catégorie ou importez-en plusieurs depuis un CSV.",
"categories.createSingle": "Créer une seule catégorie.",
"categories.missingNameColumn": "Colonne obligatoire 'name' manquante",
"categories.missingUniqueIdColumn": "Colonne obligatoire 'unique_id' manquante",
"categories.nameAndIdRequired": "Le nom et lID unique sont obligatoires.",
"categories.csvNeedRows": "Le fichier doit contenir une ligne d'en-tête et au moins une ligne de données",
"categories.titleFormula": "Formule de titre",
"categories.descriptionFormula": "Formule de description",
"categories.setTitleFormula": "Définir la formule de titre",
"categories.editTitleFormula": "Modifier la formule de titre",
"categories.setDescriptionFormula": "Définir la formule de description",
"categories.editDescriptionFormula": "Modifier la formule de description",
"categories.setAiPrompt": "Définir le prompt IA",
"categories.editAiPrompt": "Modifier le prompt IA",
"categories.editAiPromptShort": "Modifier le prompt IA",
"categories.aiPromptSet": "Un prompt de génération IA est défini",
"categories.aiPromptTitle": "Prompt IA de catégorie",
"categories.aiPromptDescription": "Modèle de génération par catégorie utilisé lors de l'enrichissement des produits de cette catégorie.",
"categories.aiPromptSaved": "Prompt IA enregistré.",
"categories.aiPromptCleared": "Prompt IA effacé (la valeur par défaut de l'entreprise s'appliquera).",
"categories.aiPromptSaveFailed": "Échec de l'enregistrement du prompt",
"categories.aiPromptAssignFailed": "Échec de l'assignation du prompt",
"categories.assignAiPrompt": "Assigner le prompt IA",
"categories.assignAiPromptHelp": "Copiez ce prompt de génération IA vers d'autres catégories.",
"categories.loadingPrompt": "Chargement du prompt…",
"categories.brandVoice": "Ton de marque",
"categories.productName": "Nom du produit",
"categories.gtin": "GTIN",
"categories.backToCategories": "Retour aux catégories",
"categories.cancelReturn": "Annuler et revenir aux catégories",
"categories.assignFormula": "Assigner la formule",
"categories.assignFormulaOther": "Assigner la formule à d'autres catégories",
"categories.assignTitleFormula": "Assigner la formule de titre",
"categories.assignDescriptionFormula": "Assigner la formule de description",
"categories.assignSelectHelp": "Sélectionnez les catégories auxquelles appliquer ce modèle.",
"categories.assignTitleHelp": "Sélectionnez les catégories auxquelles appliquer ce modèle de formule de titre.",
"categories.assignDescriptionHelp": "Sélectionnez les catégories auxquelles appliquer ce modèle de formule de description.",
"categories.searchCategories": "Rechercher des catégories…",
"categories.matching": " correspondantes",
"categories.titleFormulaHelp": "Créez des titres produit à partir de variables et de texte fixe pour cette catégorie.",
"categories.descriptionFormulaHelp": "Définissez le texte méta SEO et les sections de corps que l'IA doit générer pour cette catégorie.",
"categories.loadingFormula": "Chargement de la formule…",
"categories.titleFormulaSaved": "Formule de titre enregistrée avec succès",
"categories.titleFormulaRemoved": "Formule de titre supprimée avec succès",
"categories.titleFormulaSaveFailed": "Échec de l'enregistrement de la formule de titre",
"categories.titleFormulaAssignFailed": "Échec de l'assignation de la formule de titre",
"categories.descriptionFormulaRemoved": "Formule de description supprimée avec succès",
"categories.descriptionFormulaSaved": "Formule de description enregistrée avec succès",
"categories.descriptionFormulaSavedWithExports": "Formule de description enregistrée avec succès et {count} IDs dexport synchronisés",
"categories.descriptionFormulaSaveFailed": "Échec de l'enregistrement de la formule de description",
"categories.descriptionFormulaAssignFailed": "Échec de l'assignation de la formule de description",
"categories.seoTitlePlaceholder": "Indiquez à l'IA comment rédiger le titre SEO…",
"categories.seoDescriptionPlaceholder": "Indiquez à l'IA comment rédiger la description SEO…",
"categories.sectionPromptPlaceholder": "Que doit écrire l'IA dans cette section ?",
"categories.sectionKeyPlaceholder": "p. ex. short_description (lettres, chiffres, _)",
"categories.formulaElementTypes": "Types d'éléments de formule",
"categories.formulaElements": "Éléments de formule",
"categories.elementSeparator": "Séparateur d'éléments",
"categories.elementSeparatorHint": "Espace, tiret, etc.",
"categories.dragToReorder": "Glisser pour réordonner",
"categories.addCustomVariable": "Ajouter une variable personnalisée",
"categories.editCustomVariable": "Modifier la variable personnalisée",
"categories.customVariableHelp": "Définissez une variable réutilisable pour les formules de titre.",
"categories.manageVariables": "Gérer les variables",
"categories.manageVariablesHelp": "Affichez, modifiez et ajoutez des variables pour vos formules de titre.",
"categories.searchVariables": "Rechercher des variables…",
"categories.variableAdded": "Variable ajoutée avec succès",
"categories.variableUpdated": "Variable mise à jour avec succès",
"categories.variableDeleted": "Variable supprimée avec succès",
"categories.variableDeleteFailed": "Échec de la suppression de la variable",
"categories.variableNameRequired": "Le nom de la variable est obligatoire",
"categories.displayNameRequired": "Le nom d'affichage est obligatoire",
"categories.variableNamePattern": "Le nom ne peut contenir que des lettres, chiffres et underscores",
"categories.deleteVariableConfirm": "Voulez-vous vraiment supprimer cette variable ? Cela peut affecter les formules qui l'utilisent.",
"categories.removeElementConfirm": "Voulez-vous vraiment retirer cet élément de votre formule ?",
"categories.addTextElement": "Ajouter un élément texte",
"categories.addTextElementHelp": "Ajoutez un élément texte fixe à votre formule.",
"categories.editTextElement": "Modifier l'élément texte",
"categories.editTextElementHelp": "Modifiez l'élément texte de votre formule.",
"categories.staticTextPlaceholder": "Saisir le texte fixe",
"categories.textCannotBeEmpty": "Le texte ne peut pas être vide",
"categories.exampleProductName": "Nom du produit",
"categories.exampleWidget": "Acme Widget Pro (exemple)",
"fields.title": "Champs standard",
"fields.description": "Définissez des champs produit standard et organisez-les en groupes",
"fields.loading": "Chargement des champs standard…",
"fields.loadFailed": "Échec du chargement des champs",
"fields.loadGroupsFailed": "Échec du chargement des groupes de champs",
"fields.addField": "Ajouter un champ",
"fields.addGroup": "Ajouter un groupe",
"fields.createField": "Créer un champ",
"fields.createGroup": "Créer un groupe",
"fields.editField": "Modifier le champ",
"fields.editGroup": "Modifier le groupe",
"fields.basicInfo": "Informations de base",
"fields.createFieldHelp": "Créez un nouveau champ standard pour vos données produit",
"fields.editFieldHelp": "Mettez à jour les détails de ce champ standard",
"fields.createGroupHelp": "Créez un nouveau groupe pour organiser vos champs standard",
"fields.editGroupHelp": "Mettez à jour les détails de ce groupe de champs",
"fields.dataTypeHint": "Type de données de ce champ",
"fields.defaultValueOptional": "Valeur par défaut (facultatif)",
"fields.fieldDescriptionPlaceholder": "Saisissez une description pour ce champ",
"fields.groupDescriptionPlaceholder": "Saisissez une description pour ce groupe",
"fields.keyHint": "Uniquement lettres minuscules, chiffres et underscores",
"fields.exampleTitle": "Titre du produit",
"fields.noFields": "Aucun champ trouvé. Cliquez sur « Ajouter un champ » pour en créer un.",
"fields.noFieldsMatch": "Aucun champ ne correspond à votre recherche",
"fields.noGroups": "Aucun groupe trouvé. Créez votre premier groupe.",
"fields.noGroupsMatch": "Aucun groupe ne correspond à votre recherche",
"fields.fieldCreated": "Champ créé avec succès",
"fields.fieldUpdated": "Champ mis à jour avec succès",
"fields.fieldDeleted": "Champ supprimé avec succès",
"fields.groupCreated": "Groupe créé avec succès",
"fields.groupUpdated": "Groupe mis à jour avec succès",
"fields.groupDeleted": "Groupe supprimé avec succès",
"fields.saveFieldFailed": "Échec de l'enregistrement du champ",
"fields.saveGroupFailed": "Échec de l'enregistrement du groupe",
"fields.updateFieldFailed": "Échec de la mise à jour du champ",
"fields.updateUnitFailed": "Échec de la mise à jour de l'unité",
"fields.deleteFieldFailed": "Échec de la suppression du champ",
"fields.deleteGroupFailed": "Échec de la suppression du groupe",
"fields.bulkUpdateFailed": "Échec de la mise à jour en masse",
"fields.enableRecommendedFailed": "Échec de l'activation des champs recommandés",
"fields.enabledRecommended": "Champs e-commerce recommandés activés",
"fields.deleteFieldConfirm": "Cette action est irréversible. Elle supprimera définitivement le champ et le retirera de tout modèle qui l'utilise.",
"fields.deleteGroupConfirm": "Cette action est irréversible. Elle supprimera définitivement le groupe. Les champs de ce groupe devront être réaffectés.",
"fields.type.string": "Texte",
"fields.type.stringHint": "Texte libre : noms, codes, notes courtes",
"fields.type.number": "Nombre",
"fields.type.numberHint": "Valeur numérique ; ajoutez une unité si utile (EUR, pcs)",
"fields.type.boolean": "Oui / Non",
"fields.type.booleanHint": "Vrai ou faux",
"fields.type.date": "Date",
"fields.type.dateHint": "Une date de calendrier",
"fields.type.url": "URL",
"fields.type.urlHint": "Lien web (page produit, vidéo, fabricant)",
"fields.type.image": "Visuel",
"fields.type.imageHint": "URL d'image ou image de galerie",
"fields.type.dimension": "Dimension",
"fields.type.dimensionHint": "Mesure de longueur (largeur, hauteur, profondeur)",
"fields.type.weight": "Poids",
"fields.type.weightHint": "Masse / poids d'expédition",
"fields.type.color": "Couleur",
"fields.type.colorHint": "Nom ou code de couleur",
"fields.type.custom": "Personnalisé",
"fields.type.customHint": "Champ spécial / libre",
"empty.admin.knowledgeHeading": "Base de connaissances",
"empty.admin.translationsHeading": "Traductions",
"flash.attrs.createdLinkFailed": "Attribut créé, mais l'assignation de catégorie a échoué.",
"flash.attrs.created": "Attribut créé.",
"flash.attrs.csvImported": "Import CSV terminé.",
"flash.attrs.updated": "Attribut mis à jour.",
"flash.attrs.deleted": "Attribut supprimé.",
"flash.attrs.valueDeleted": "Valeur supprimée.",
"flash.attrs.assignedLinks": "{count} lien(s) catégorieattribut assigné(s).",
"flash.brand.saved": "Kit de marque enregistré.",
"flash.brand.logoType": "Le logo doit être PNG, JPEG ou WebP",
"flash.brand.logoSize": "Le logo dépasse la limite de 2 MiB",
"flash.brand.logoUploaded": "Logo téléversé.",
"flash.categories.updated": "La catégorie a été mise à jour avec succès.",
"flash.categories.deleted": "La catégorie a été supprimée avec succès.",
"flash.categories.csvImported": "Import CSV terminé.",
"flash.products.csvImported": "Product CSV import finished.",
"flash.categories.descFormulaAssigned": "Formule de description assignée à {count} catégories",
"flash.categories.promptAssigned": "Prompt assigné à {count} {noun}.",
"flash.categories.promptNounOne": "catégorie",
"flash.categories.promptNounMany": "catégories",
"flash.categories.titleFormulaAssigned": "Formule de titre assignée à {count} {noun}",
"flash.categories.variableDeleted": "Variable supprimée avec succès",
"flash.export.updated": "Feed d'export mis à jour.",
"flash.export.created": "Feed d'export créé.",
"flash.export.urlCopied": "URL publique du feed {format} copiée. Collez-la dans tout système qui récupère des feeds produit.",
"flash.export.copyFailed": "Échec de la copie de l'URL dans le presse-papiers",
"flash.export.refreshed": "Feed actualisé.",
"flash.export.refreshedWithCount": "Feed actualisé ({count} produits).",
"flash.export.deleted": "Feed d'export supprimé avec succès.",
"flash.export.tokenRotated": "Jeton d URL publique renouvele. Mettez a jour les systemes qui utilisent l ancienne URL.",
"common.edit": "Modifier",
"common.previous": "Précédent",
"common.next": "Suivant",
"common.saving": "Enregistrement…",
"common.deleting": "Suppression…",
"common.adding": "Ajout…",
"common.processing": "Traitement…",
"common.upload": "Téléverser",
"common.expand": "Développer",
"common.collapse": "Réduire",
"common.optional": "Facultatif",
"common.enabled": "Activé",
"common.on": "Activé",
"common.off": "Désactivé",
"common.system": "Système",
"common.type": "Type",
"common.unit": "Unité",
"common.group": "Groupe",
"common.search": "Rechercher",
"common.openMenu": "Ouvrir le menu",
"common.areYouSure": "Êtes-vous sûr ?",
"common.selectGroup": "Sélectionner un groupe",
"attributes.addAttribute": "Ajouter un attribut",
"attributes.searchPlaceholder": "Rechercher des attributs…",
"attributes.searchAria": "Rechercher des attributs (appuyez sur Entrée pour rechercher)",
"attributes.filterCategoryAria": "Filtrer par catégorie",
"attributes.allCategories": "Toutes les catégories",
"attributes.col.name": "Nom",
"attributes.col.key": "Clé d'attribut",
"attributes.col.type": "Type",
"attributes.col.unit": "Unité",
"attributes.col.categories": "Catégories",
"attributes.col.updated": "Dernière mise à jour",
"attributes.col.actions": "Actions",
"attributes.emptyTitle": "Aucun attribut trouvé",
"attributes.emptyFiltered": "Essayez d'effacer la recherche ou le filtre de catégorie.",
"attributes.emptyHint": "Ajoutez un attribut ou importez un CSV pour commencer.",
"attributes.noValues": "Aucune valeur",
"attributes.actionsAria": "Actions sur l'attribut",
"attributes.editDetails": "Modifier les détails",
"attributes.loadingValues": "Chargement des valeurs...",
"attributes.noValuesYetHint": "Aucune valeur ajoutée. Utilisez « Manage Values » pour en ajouter.",
"attributes.pageZero": "0 attributs",
"attributes.pageShowing": "Affichage de {from}{to} sur {total} attributs",
"attributes.linkCategoryFailed": "Impossible d'assigner l'attribut à la catégorie sélectionnée.",
"attributes.createdLinkFailed": "Attribut créé, mais l'assignation de catégorie a échoué.",
"attributes.createFailed": "Échec de la création",
"attributes.importFinished": "Import CSV terminé.",
"attributes.importFailed": "Échec de l'import",
"attributes.updateFailed": "Échec de la mise à jour",
"attributes.deleteFailed": "Échec de la suppression",
"attributes.valueUpdated": "Valeur mise à jour.",
"attributes.valueAdded": "Valeur ajoutée.",
"attributes.valueSaveFailed": "Impossible d'enregistrer la valeur",
"attributes.valueDeleted": "Valeur supprimée.",
"attributes.valueDeleteFailed": "Impossible de supprimer la valeur",
"attributes.csvNeedRows": "Le CSV doit inclure un en-tête et au moins une ligne",
"attributes.rowUnknown": "Ligne {row} : catégorie ou attribut inconnu",
"attributes.rowLinkFailed": "Ligne {row} : {detail}",
"attributes.linkFailedShort": "échec du lien",
"attributes.assignedLinks": "{count} lien(s) catégorieattribut assigné(s).",
"attributes.rowsFailed": "{count} ligne(s) ont échoué.",
"attributes.addTitle": "Ajouter un nouvel attribut",
"attributes.addDesc": "Créez une nouvelle définition d'attribut. Vous pouvez l'assigner à une catégorie pendant la création.",
"attributes.tab.single": "Unique",
"attributes.tab.bulk": "Import en masse",
"attributes.field.key": "Clé d'attribut",
"attributes.field.keyPlaceholder": "attribut-key",
"attributes.field.displayName": "Nom affiché",
"attributes.field.displayNamePlaceholder": "Nom affiché de l'attribut",
"attributes.field.type": "Type",
"attributes.field.typeDefaultHint": "Choisissez comment les valeurs sont saisies pour cet attribut.",
"attributes.field.category": "Catégorie",
"attributes.field.categoryPlaceholder": "Sélectionner une catégorie…",
"attributes.field.categoryHint": "Sélectionnez la catégorie à laquelle appartient cet attribut. Les attributs doivent être assignés à une catégorie.",
"attributes.field.unitOptional": "Unité (facultatif)",
"attributes.field.unitPlaceholder": "p. ex. cm, kg, etc.",
"attributes.field.exampleOptional": "Exemple (facultatif)",
"attributes.field.examplePlaceholder": "p. ex. 100x200",
"attributes.createAttribute": "Créer l'attribut",
"attributes.bulk.fileLabel": "Fichier CSV ou TSV",
"attributes.bulk.downloadCsv": "Télécharger le modèle CSV",
"attributes.bulk.downloadTsv": "Télécharger le modèle TSV",
"attributes.bulk.uploadHint": "Téléversez un fichier CSV ou TSV avec les colonnes suivantes :",
"attributes.bulk.col.key": "Identifiant unique (obligatoire)",
"attributes.bulk.col.name": "Nom affiché (obligatoire)",
"attributes.bulk.col.valueType": "string (Texte), number, boolean (Oui/Non), date, list (Liste déroulante), multiselect",
"attributes.bulk.col.categoryId": "ID unique de catégorie",
"attributes.bulk.col.unitExample": "facultatif",
"attributes.bulk.col.parentKey": "Clé parente pour les valeurs de liste",
"attributes.editTitle": "Modifier l'attribut",
"attributes.editDesc": "Mettre à jour les détails de l'attribut « {name} »",
"attributes.field.keyHint": "Identifiant unique de cet attribut",
"attributes.field.displayNameHint": "Le nom qui sera affiché aux utilisateurs",
"attributes.deleteTitle": "Supprimer l'attribut",
"attributes.deleteDesc": "Voulez-vous vraiment supprimer « {name} » ? Cette action est irréversible.",
"attributes.deleteWarningValues": "Attention : cela supprimera aussi toutes les valeurs associées à cet attribut.",
"attributes.manageTitleNamed": "Gérer les valeurs de {name}",
"attributes.manageTitle": "Gérer les valeurs",
"attributes.manageDesc": "Ajouter, modifier ou supprimer des valeurs pour cet attribut de liste.",
"attributes.valueKey": "Clé de valeur",
"attributes.valueKeyHint": "Identifiant unique de cette valeur",
"attributes.displayValue": "Valeur affichée",
"attributes.displayValuePlaceholder": "Valeur à afficher",
"attributes.displayValueHint": "Le nom affiché qui sera montré pour cette valeur",
"attributes.updateValue": "Mettre à jour la valeur",
"attributes.noValuesYet": "Pas encore de valeurs.",
"attributes.assignTitle": "Assigner des attributs aux catégories",
"attributes.assignDesc": "Téléversez un CSV associant les ID uniques de catégorie aux clés d'attribut.",
"attributes.downloadTemplate": "Télécharger le modèle",
"attributes.csvFile": "Fichier CSV",
"attributes.assignSuccess": "Assignations appliquées avec succès.",
"attributes.assigning": "Attribution…",
"attributes.uploadAndAssign": "Téléverser et assigner",
"attributes.type.string.label": "Texte",
"attributes.type.string.hint": "Texte libre — noms, modèles, notes courtes",
"attributes.type.number.label": "Nombre",
"attributes.type.number.hint": "Valeur numérique ; ajoutez une unité si utile (cm, kg, W)",
"attributes.type.boolean.label": "Oui / Non",
"attributes.type.boolean.hint": "Vrai ou faux — ex. a un GPS, charge sans fil",
"attributes.type.date.label": "Date",
"attributes.type.date.hint": "Une date calendaire (sortie, fin de garantie, …)",
"attributes.type.list.label": "Liste déroulante",
"attributes.type.list.hint": "Choisissez exactement une option dans une liste définie",
"attributes.type.multiselect.label": "Sélection multiple",
"attributes.type.multiselect.hint": "Choisissez une ou plusieurs options dans une liste",
"standardFields.title": "Champs standard",
"standardFields.description": "Définissez des champs produit standard et organisez-les en groupes",
"standardFields.apiUnavailable": "L'API des champs standard n'est pas disponible. Les modifications ne peuvent pas être enregistrées.",
"standardFields.apiUnreachable": "L'API des champs standard n'est pas joignable pour le moment. Créer/modifier reste désactivé jusqu'à ce que /api/standard-fields et /api/field-groups répondent.",
"standardFields.loading": "Chargement des champs standard…",
"standardFields.tab.fields": "Champs",
"standardFields.tab.groups": "Groupes",
"standardFields.heading": "Champs standard",
"standardFields.headingHint": "Activez les champs pour le mapping et le traitement — une bascule par ligne.",
"standardFields.enableRecommended": "Activer les recommandés",
"standardFields.enableSelected": "Activer la sélection ({count})",
"standardFields.disableSelected": "Désactiver la sélection",
"standardFields.addField": "Ajouter un champ",
"standardFields.searchFields": "Rechercher des champs...",
"standardFields.col.enabled": "Activé",
"standardFields.col.name": "Nom",
"standardFields.col.key": "Clé",
"standardFields.col.type": "Type",
"standardFields.col.unit": "Unité",
"standardFields.col.group": "Groupe",
"standardFields.col.status": "Statut",
"standardFields.emptySearch": "Aucun champ ne correspond à votre recherche",
"standardFields.emptyHint": "Aucun champ trouvé. Cliquez sur « Ajouter un champ » pour en créer un.",
"standardFields.selectFieldAria": "Sélectionner {name}",
"standardFields.enableFieldAria": "Activer {name}",
"standardFields.systemFieldTitle": "Champ système — ne peut pas être supprimé",
"standardFields.groupsHeading": "Groupes de champs",
"standardFields.addGroup": "Ajouter un groupe",
"standardFields.searchGroups": "Rechercher des groupes...",
"standardFields.col.description": "Description",
"standardFields.col.displayOrder": "Ordre d'affichage",
"standardFields.emptyGroupsSearch": "Aucun groupe ne correspond à votre recherche",
"standardFields.emptyGroupsHint": "Aucun groupe trouvé. Créez votre premier groupe.",
"standardFields.unknownGroup": "Groupe inconnu",
"standardFields.loadGroupsFailed": "Échec du chargement des groupes de champs",
"standardFields.loadFieldsFailed": "Échec du chargement des champs",
"standardFields.fieldUpdated": "Champ mis à jour avec succès",
"standardFields.fieldCreated": "Champ créé avec succès",
"standardFields.saveFieldFailed": "Échec de l'enregistrement du champ",
"standardFields.enabledNamed": "Activé {name}",
"standardFields.disabledNamed": "{name} désactivé",
"standardFields.updateFieldFailed": "Échec de la mise à jour du champ",
"standardFields.updateUnitFailed": "Échec de la mise à jour de l'unité",
"standardFields.bulkEnabled": "{count} champ(s) activé(s)",
"standardFields.bulkDisabled": "{count} champ(s) désactivé(s)",
"standardFields.bulkFailed": "Échec de la mise à jour en masse",
"standardFields.recommendedEnabled": "Champs e-commerce recommandés activés",
"standardFields.recommendedFailed": "Échec de l'activation des champs recommandés",
"standardFields.fieldDeleted": "Champ supprimé avec succès",
"standardFields.deleteFieldFailed": "Échec de la suppression du champ",
"standardFields.groupUpdated": "Groupe mis à jour avec succès",
"standardFields.groupCreated": "Groupe créé avec succès",
"standardFields.saveGroupFailed": "Échec de l'enregistrement du groupe",
"standardFields.groupDeleted": "Groupe supprimé avec succès",
"standardFields.deleteGroupFailed": "Échec de la suppression du groupe",
"standardFields.editField": "Modifier le champ",
"standardFields.addNewField": "Ajouter un champ",
"standardFields.editFieldDesc": "Mettez à jour les détails de ce champ standard",
"standardFields.addFieldDesc": "Créez un nouveau champ standard pour vos données produit",
"standardFields.field.name": "Nom",
"standardFields.field.namePlaceholder": "Titre du produit",
"standardFields.field.nameHint": "Nom affiché de ce champ",
"standardFields.field.key": "Clé",
"standardFields.field.keyPlaceholder": "titre_produit",
"standardFields.field.keyTitle": "Uniquement lettres minuscules, chiffres et underscores",
"standardFields.field.keyHint": "Identifiant unique (minuscules, sans espaces)",
"standardFields.field.type": "Type",
"standardFields.field.typeDefaultHint": "Type de données de ce champ",
"standardFields.field.group": "Groupe",
"standardFields.field.groupHint": "Groupe auquel appartient ce champ",
"standardFields.field.enabled": "Activé",
"standardFields.field.enabledHint": "Utiliser ce champ dans le mapping et le traitement",
"standardFields.field.required": "Champ obligatoire",
"standardFields.field.requiredHint": "Les champs obligatoires doivent être mappés sur chaque feed avant de pouvoir synchroniser des produits.",
"standardFields.field.unit": "Unité",
"standardFields.field.unitPlaceholder": "kg, EUR, cm…",
"standardFields.field.unitHint": "Unité facultative affichée avec ce champ",
"standardFields.field.description": "Description",
"standardFields.field.descriptionPlaceholder": "Saisissez une description pour ce champ",
"standardFields.field.default": "Valeur par défaut",
"standardFields.field.defaultPlaceholder": "Valeur par défaut (facultatif)",
"standardFields.field.defaultHint": "Valeur par défaut lorsqu'aucune valeur n'est fournie",
"standardFields.saveUnavailable": "Enregistrer (indisponible)",
"standardFields.updateField": "Mettre à jour le champ",
"standardFields.createField": "Créer un champ",
"standardFields.editGroup": "Modifier le groupe",
"standardFields.addNewGroup": "Ajouter un groupe",
"standardFields.editGroupDesc": "Mettez à jour les détails de ce groupe de champs",
"standardFields.addGroupDesc": "Créez un nouveau groupe pour organiser vos champs standard",
"standardFields.group.name": "Nom",
"standardFields.group.namePlaceholder": "Informations de base",
"standardFields.group.nameHint": "Nom affiché de ce groupe",
"standardFields.group.description": "Description",
"standardFields.group.descriptionPlaceholder": "Saisissez une description pour ce groupe",
"standardFields.group.descriptionHint": "Description facultative expliquant le but de ce groupe",
"standardFields.group.order": "Ordre d'affichage",
"standardFields.group.orderHint": "Les numéros plus bas apparaissent en premier",
"standardFields.updateGroup": "Mettre à jour le groupe",
"standardFields.createGroup": "Créer un groupe",
"standardFields.deleteFieldDesc": "Cette action est irréversible. Elle supprimera définitivement le champ et le retirera de tout modèle qui l'utilise.",
"standardFields.deleteGroupDesc": "Cette action est irréversible. Elle supprimera définitivement le groupe. Les champs de ce groupe devront être réaffectés.",
"standardFields.type.string.label": "Texte",
"standardFields.type.string.hint": "Texte libre : noms, codes, notes courtes",
"standardFields.type.number.label": "Nombre",
"standardFields.type.number.hint": "Valeur numérique ; ajoutez une unité si utile (EUR, pcs)",
"standardFields.type.boolean.label": "Oui / Non",
"standardFields.type.boolean.hint": "Vrai ou faux",
"standardFields.type.date.label": "Date",
"standardFields.type.date.hint": "Une date de calendrier",
"standardFields.type.url.label": "URL",
"standardFields.type.url.hint": "Lien web (page produit, vidéo, fabricant)",
"standardFields.type.image.label": "Visuel",
"standardFields.type.image.hint": "URL d'image ou image de galerie",
"standardFields.type.dimension.label": "Dimension",
"standardFields.type.dimension.hint": "Mesure de longueur (largeur, hauteur, profondeur)",
"standardFields.type.weight.label": "Poids",
"standardFields.type.weight.hint": "Masse / poids d'expédition",
"standardFields.type.color.label": "Couleur",
"standardFields.type.color.hint": "Nom ou code de couleur",
"standardFields.type.custom.label": "Personnalisé",
"standardFields.type.custom.hint": "Champ spécial / libre",
"standardFields.fallback.gtin": "GTIN/EAN",
"standardFields.fallback.title": "Nom du produit",
"standardFields.fallback.brand": "Marque",
"standardFields.fallback.description": "Description",
"standardFields.fallback.product_model": "Modèle de produit",
"standardFields.fallback.price": "Prix",
"standardFields.fallback.sale_price": "Prix soldé",
"standardFields.fallback.purchase_price": "Prix d'achat",
"standardFields.fallback.currency": "Devise",
"standardFields.fallback.image_url": "URL de l'image",
"standardFields.fallback.main_image": "Image principale",
"standardFields.fallback.additional_image_urls": "Images supplémentaires",
"standardFields.fallback.product_url": "URL du produit",
"standardFields.fallback.official_link": "Lien officiel",
"standardFields.fallback.sku": "SKU",
"standardFields.fallback.mpn": "MPN",
"standardFields.fallback.category": "Catégorie",
"standardFields.fallback.availability": "Disponibilité",
"standardFields.fallback.stock": "Stock disponible",
"standardFields.fallback.color": "Couleur",
"standardFields.fallback.size": "Taille",
"standardFields.fallback.material": "Matériau",
"standardFields.fallback.warranty": "Garantie",
"standardFields.fallback.service": "Service",
"standardFields.fallback.weight": "Poids",
"standardFields.fallback.net_depth": "Profondeur nette",
"standardFields.fallback.net_height": "Hauteur nette",
"standardFields.fallback.net_width": "Largeur nette",
"standardFields.fallback.net_mass": "Masse nette",
"standardFields.fallback.video_url": "URL de la vidéo",
"standardFields.fallback.eprel_id": "ID EPREL",
"standardFields.fallback.specs": "Spécifications",
"standardFields.fallback.specifications": "Spécifications (legacy)",
"standardFields.tip.gtin": "Global Trade Item Number : code-barres/EAN/UPC identifiant le produit.",
"standardFields.tip.title": "Nom produit destiné au client, affiché dans les catalogues et canaux.",
"standardFields.tip.brand": "Nom du fabricant ou de la marque (pas du détaillant).",
"standardFields.tip.description": "Texte produit plus long ; utilisé pour l'enrichissement et les listings canaux.",
"standardFields.tip.product_model": "Nom/numéro de modèle du fabricant.",
"standardFields.tip.price": "Prix de vente régulier (numérique ; devise mappée séparément).",
"standardFields.tip.sale_price": "Prix réduit ou promotionnel en période de solde.",
"standardFields.tip.purchase_price": "Votre coût / prix d'achat (interne).",
"standardFields.tip.currency": "Code devise ISO pour les champs de prix (p. ex. EUR, USD).",
"standardFields.tip.image_url": "URL de l'image principale du produit.",
"standardFields.tip.main_image": "URL de l'image principale de la galerie (alias de image).",
"standardFields.tip.additional_image_urls": "URL d'images supplémentaires (séparées par des virgules ou nœuds répétés).",
"standardFields.tip.product_url": "URL publique de la page produit sur votre boutique ou site.",
"standardFields.tip.official_link": "URL de la page produit du fabricant ou de la marque.",
"standardFields.tip.sku": "Stock Keeping Unit : votre code article interne.",
"standardFields.tip.mpn": "Manufacturer Part Number : code pièce du fournisseur.",
"standardFields.tip.category": "Catégorie produit ou chemin de taxonomie.",
"standardFields.tip.availability": "Statut de type en stock / rupture / précommande.",
"standardFields.tip.stock": "Quantité d'inventaire numérique.",
"standardFields.tip.color": "Attribut de couleur pour les variantes.",
"standardFields.tip.size": "Attribut de taille pour les variantes.",
"standardFields.tip.material": "Matériau principal ou composition.",
"standardFields.tip.warranty": "Durée ou texte de garantie.",
"standardFields.tip.service": "Notes de service ou d'assistance.",
"standardFields.tip.weight": "Poids d'expédition ou net.",
"standardFields.tip.eprel_id": "Identifiant produit de l'étiquette énergétique UE (EPREL).",
"standardFields.tip.specs": "Spécifications techniques structurées.",
"standardFields.tip.specifications": "Champ specs hérité ; préférez specs lorsque les deux existent.",
"export.dialog.title": "Exporter les produits sélectionnés",
"export.dialog.description": "Exporter {count} produit(s) sélectionné(s). Choisissez le feed d'export qui définit format et champs — comme choisir quoi synchroniser, mais pour un téléchargement ou un partenaire.",
"export.dialog.loadFailed": "Échec du chargement des options de feed d'export. Veuillez réessayer.",
"export.dialog.selectPlaceholder": "Sélectionnez un feed d'export…",
"export.dialog.help": "Votre sélection choisit les produits ; le feed choisit le format du canal et les champs mappés.",
"export.dialog.emptyTitle": "Aucun feed d'export pour l'instant",
"export.dialog.emptyMessage": "Créez un feed d'export pour choisir format et champs, puis revenez exporter cette sélection.",
"export.dialog.createFeedCta": "Créer un feed d'export",
"export.dialog.confirmAria": "Confirmer l'export",
"export.dialog.export": "Exporter",
"billing.title": "Utilisation et facturation",
"billing.loadFailed": "Échec du chargement de la facturation",
"billing.usageLoadFailed": "Échec du chargement de l'utilisation",
"billing.checkoutComplete": "Checkout terminé. Votre plan et vos crédits seront actualisés sous peu.",
"billing.checkoutCompletePlan": "Plan mis à jour. Vos crédits {plan} sont prêts.",
"billing.checkoutCanceled": "Checkout a été annulé. Aucune modification n'a été effectuée.",
"billing.portalReturned": "Retour du portail de facturation. Gérez votre plan ici ou dans Plans.",
"billing.comparePlans": "Comparer les forfaits",
"billing.managePayment": "Gérer le paiement",
"billing.addCredits": "Ajouter des crédits",
"billing.addingCredits": "Ajout…",
"billing.addCreditsTitle": "Ajouter des crédits",
"billing.addCreditsDescription": "Administrateur plateforme uniquement. Les crédits sont immédiatement disponibles pour les titres IA, descriptions et autres étapes payantes.",
"billing.creditAmount": "Montant de crédit",
"billing.invalidCreditAmount": "Veuillez saisir un montant de crédits valide.",
"billing.companyNotFound": "Entreprise introuvable.",
"billing.creditsAdded": "{amount} crédits ont été ajoutés.",
"billing.addCreditsFailed": "Échec de l'ajout de crédits. Un accès administrateur plateforme peut être requis.",
"billing.planApplied": "Plan appliqué. Vos crédits sont prêts.",
"billing.checkoutFailed": "Échec du paiement",
"billing.portalFailed": "Impossible d'ouvrir le portail de facturation",
"billing.noPlanAssigned": "Aucun forfait assigné",
"billing.unlimited": "Illimité",
"billing.payAsYouGo": "Paiement à l'usage",
"billing.noMonthlyAiCredits": "Pas de crédits IA mensuels",
"billing.header.noPlan": "Aucun plan assigné. Choisissez un plan ou demandez à un administrateur.",
"billing.header.free": "Mappez les feeds et nettoyez les données produit sans crédits IA.",
"billing.header.enterprise": "Produits et capacité IA illimités.",
"billing.header.payg": "Paiement à l'usage — les crédits proviennent du portefeuille de l'entreprise.",
"billing.header.remaining": "{remaining} crédits IA restants pour cette période.",
"billing.na": "N/A",
"billing.range.7d": "7 derniers jours",
"billing.range.30d": "30 derniers jours",
"billing.range.cycle": "cycle de facturation actuel",
"billing.range.all": "tout le temps",
"billing.rangeOpt.7d": "7 derniers jours",
"billing.rangeOpt.30d": "30 derniers jours",
"billing.rangeOpt.cycle": "Cycle actuel",
"billing.rangeOpt.all": "Tout le temps",
"billing.freeBannerTitle": "Vous êtes sur l'offre Free",
"billing.freeBannerMessage": "Passez à un plan supérieur pour les titres et descriptions IA, et des limites produits plus élevées.",
"billing.outOfCreditsTitle": "Vous n'avez plus de crédits IA",
"billing.productLimitTitle": "Limite de produits atteinte",
"billing.outOfCreditsMessage": "Les titres et descriptions IA sont en pause jusqu'à l'ajout de crédits ou une mise à niveau.",
"billing.productLimitMessage": "Passez à un plan supérieur pour plus de capacité produits.",
"billing.lowCreditsTitle": "Crédits bientôt épuisés",
"billing.lowCreditsMessage": "Il ne reste que {remaining} crédits sur {plan}. Passez à un plan supérieur avant votre prochain grand lot.",
"billing.currentPlan": "Forfait actuel",
"billing.periodEnds": "La période de facturation se termine le {date}",
"billing.openEndedContract": "Contrat ouvert",
"billing.creditWallet": "Portefeuille de crédits",
"billing.creditsRemaining": "Crédits restants",
"billing.enterpriseCapacity": "Capacité gérée entreprise",
"billing.paygUsed": "{used} utilisés · pas d'allocation mensuelle",
"billing.trialLeftover": "Crédits d'essai / restants",
"billing.aiLockedFree": "IA verrouillée sur Free",
"billing.usedOf": "{used} utilisés sur {total}",
"billing.noBalanceTitle": "Pas encore de solde de crédits",
"billing.noBalanceBody": "Les crédits de votre plan s'afficheront ici une fois la facturation configurée pour cet espace de travail.",
"billing.needCapacity": "Besoin de plus de capacité ?",
"billing.selfServeUpgrade": "Mise à niveau en libre-service vers Starter, Growth ou Business",
"billing.viaStripe": "via Stripe",
2026-08-16 11:37:42 +02:00
"billing.checkoutUnavailable": "Les achats en libre-service sont indisponibles tant que Stripe n'est pas configuré. Contactez les ventes pour un forfait.",
"billing.upgradeToGrowth": "Passer à Growth",
"billing.askAdminPlan": "Demandez à un administrateur de changer le plan.",
"billing.usage": "Utilisation",
"billing.productsProcessed": "{count} produits traités · {range}",
"billing.updating": "Mise à jour…",
"billing.productsByDay": "Produits par jour",
"billing.chartAmber": "Ambre = tokens. Plage : {range}.",
"billing.chartRange": "Plage : {range}.",
"billing.nothingToChartTitle": "Rien à afficher pour l'instant",
"billing.nothingToChartBody": "Ajoutez des produits ou connectez un feed — l'utilisation apparaîtra ici.",
"billing.dailyChartsHint": "Les graphiques quotidiens sont disponibles pour les 7 derniers jours, 30 jours ou le cycle de facturation en cours.",
"billing.noNewProducts": "Aucun nouveau produit sur {range}",
"billing.catalogOverall": "Le catalogue compte {count} produits au total.",
"billing.chartProducts": "Produits",
"billing.chartTokens": "Jetons",
"billing.chartEmpty": "Aucun produit sur cette période.",
"billing.adminStats": "{tokens} tokens · {jobs} tâches · {input} entrées / {export} feeds d'export",
"billing.whatUsesCredits": "Ce qui consomme des crédits",
"billing.burnsCredits": "Consomme des crédits",
"billing.noCreditCost": "Sans coût de crédits",
"billing.publicPricing": "Tarifs publics",
"billing.managePlanOnPlans": "Gérer le plan dans Plans",
"billing.recovery.pastDueTitle": "Paiement en retard",
"billing.recovery.pastDueAdmin": "Le paiement de votre abonnement a échoué. Mettez à jour le paiement dans le Customer Portal — l'accès reste ouvert pendant cette période de grâce.",
"billing.recovery.pastDueMember": "La facturation nécessite une attention. Demandez à un administrateur de mettre à jour le paiement dans le Customer Portal. L'accès reste ouvert pendant cette période de grâce.",
"billing.recovery.openPortal": "Ouvrir le Customer Portal",
"billing.recovery.contactAdmin": "Contacter un administrateur",
"billing.recovery.goToBilling": "Aller à la facturation",
"billing.recovery.missingPlanTitle": "Aucune offre assignée",
"billing.recovery.missingPlanMessage": "Cette entreprise n'a pas de plan actif (souvent après une migration ignorée). Assignez un plan via Checkout ou contactez le support — ne supposez pas une capacité Unlimited.",
"billing.recovery.choosePlan": "Choisir une offre",
"billing.upgrade": "Mettre à niveau",
"billing.askCompanyAdmin": "Demandez à un administrateur de l'entreprise",
"billing.memberHint": "Seuls les administrateurs peuvent changer de plan ou ouvrir Checkout.",
"billing.unlimitedPlanWallet": "Plan illimité · portefeuille {wallet}",
"billing.creditsSuffix": "{label} crédits",
"billing.perMonth": "{amount} / mois",
"billing.zeroPerMonth": "0 / mois",
"billing.upTo": "Jusqu'à {count}",
"billing.skusUnlimited": "{used} SKUs (illimité)",
"billing.skusOnly": "{used} SKUs",
"billing.skusOf": "{used} / {max} SKUs",
"billing.planKind.none": "Aucune offre active",
"billing.planKind.enterprise": "Entreprise / personnalisé",
"billing.planKind.trial": "Essai",
"billing.planKind.standard": "Offre standard",
"billing.creditUsage.normalize.label": "Normaliser, specs et remplir",
"billing.creditUsage.normalize.detail": "Le nettoyage des données et le remplissage d'attributs s'exécutent sans crédits IA.",
"billing.creditUsage.ai.label": "Titres et descriptions IA",
"billing.creditUsage.ai.detail": "Facturé par produit selon la fonctionnalité IA et la quantité de texte généré.",
"billing.creditUsage.eprel.label": "EPREL / étiquettes énergétiques",
"billing.creditUsage.eprel.detail": "Données EPREL UE publiques gratuites sur tous les plans (sans crédits).",
"billing.creditUsage.campaign.label": "IA campagne et application de marque",
"billing.creditUsage.campaign.detail": "Les étapes IA payantes qui utilisent le modèle géré consomment des crédits entreprise.",
"exports.title": "Flux d'export",
"exports.description": "Choisissez quoi publier par canal — quels produits et champs — puis partagez une URL de feed publique (sans connexion).",
"exports.descriptionFiltered": "Liens publics Google Shopping, Meta et feeds personnalisés. Affichage de {filtered} sur {total} feeds.",
"exports.loadFailed": "Échec du chargement des feeds d'export",
"exports.loadFeedFailed": "Échec du chargement du feed d'export",
"exports.refresh": "Actualiser",
"exports.refreshing": "Actualisation…",
"exports.create": "Créer un flux d'export",
"exports.edit": "Modifier le feed d'export",
"exports.editDescription": "Mettez à jour le nom, le statut, les produits inclus et les champs mappés.",
"exports.howToTitle": "Comment choisir quoi exporter",
"exports.howTo.choose": "Ce qui entre dans le feed",
"exports.howTo.chooseBody": "— définissez le feed source et les statuts produit à la création/édition pour que l'URL publique n'inclue que ces produits.",
"exports.howTo.subset": "Sous-ensemble ponctuel",
"exports.howTo.subsetBody": "— sur",
"exports.howTo.productsLink": "Produits",
"exports.howTo.subsetTail": ", sélectionnez des lignes et Exporter pour télécharger uniquement ces produits avec le format et les champs du feed.",
"exports.howTo.google": "Google Shopping",
"exports.howTo.googleBody": "— créez un préréglage CSV ou XML, Generate, copiez l'URL publique dans Merchant Center → Products → Feeds → scheduled fetch.",
"exports.howTo.meta": "Catalogue Meta",
"exports.howTo.metaBody": "— préréglage CSV pour les sources de données Commerce Manager.",
"exports.howTo.custom": "CSV/XML personnalisé",
"exports.howTo.customBody": "— tout partenaire ; la même URL publique fonctionne pour les pollers cron / webhook.",
"exports.howTo.rest": "REST",
"exports.howTo.restBody": "— clés API sous",
"exports.howTo.settingsApiKeys": "Paramètres → Clés API",
"exports.howTo.restTail": "(clés legacy non migrées) pull",
"exports.howTo.openapi": "OpenAPI",
"exports.feedStatus": "Statut du feed",
"exports.generating": "Génération de l'export — cela peut prendre un moment pour les grands catalogues.",
"exports.generationFailed": "Échec de la génération. Consultez l'erreur ci-dessus, puis réessayez Refresh Feed.",
"exports.exportedProducts": "{count} produits exportés",
"exports.lastGenerated": "Dernière génération : {time}",
"exports.neverGenerated": "Jamais généré",
"exports.searchPlaceholder": "Rechercher des feeds...",
"exports.searchAria": "Rechercher des feeds",
"exports.clearSearch": "Effacer la recherche",
"exports.loading": "Chargement des feeds…",
"exports.loadErrorTitle": "Impossible de charger les feeds d'export",
"exports.loadErrorBody": "Une erreur s'est produite lors du chargement de vos exports. Réessayez ou consultez l'erreur ci-dessus pour plus de détails.",
"exports.tryAgain": "Réessayer",
"exports.emptyTitle": "Pas encore de feeds d'export",
"exports.emptyBody": "Créez un feed Google Shopping, Meta ou CSV/XML personnalisé pour choisir quels produits et champs sortir. Générez une URL publique pour Merchant Center ou tout partenaire — ou exportez une sous-sélection depuis Produits.",
"exports.emptyCta": "Créer un flux Google Shopping",
"exports.noMatchTitle": "Aucun feed correspondant",
"exports.noMatchBody": "Essayez un autre terme de recherche.",
"exports.col.name": "Nom",
"exports.col.format": "Format",
"exports.col.feedUrl": "URL du feed",
"exports.col.lastGenerated": "Dernière génération",
"exports.col.status": "Statut",
"exports.col.actions": "Actions",
"exports.working": "En cours.",
"exports.generatingShort": "Génération…",
"exports.copyUrl": "Copier l'URL",
"exports.openMenu": "Ouvrir le menu",
"exports.preview": "Aperçu",
"exports.download": "Télécharger",
"exports.refreshFeed": "Actualiser le feed",
"exports.editAction": "Modifier",
"exports.delete": "Supprimer",
"exports.rotateToken": "Renouveler le jeton d URL",
"exports.rotateFailed": "Echec du renouvellement du jeton d URL",
"exports.deleting": "Suppression…",
"exports.channelPreset": "Préréglage de canal",
"exports.name": "Nom",
"exports.format": "Format",
"exports.sourceFeed": "Feed source (facultatif)",
"exports.sourceFeedHelp": "Limitez ce feed aux produits d'un feed d'entrée, ou laissez Tous les produits — c'est ainsi que vous choisissez ce que l'URL publique inclut.",
"exports.allProducts": "Tous les produits",
"exports.rootElement": "Élément racine",
"exports.itemElement": "Élément item",
"exports.productStatuses": "Statuts produits (séparés par des virgules)",
"exports.productStatusesHelp": "N'inclure que les produits avec ces statuts (par ex. active). Laissez vide pour tous les statuts.",
"exports.status": "Statut",
"exports.active": "Actif",
"exports.inactive": "Inactif",
"exports.fieldMappings": "Correspondances de champs",
"exports.addField": "Ajouter un champ",
"exports.outputKey": "Clé de sortie",
"exports.source": "Source",
"exports.customSource": "Personnalisé (attr.* / spec.*)",
"exports.removeField": "Retirer le champ",
"exports.fieldHelp": "Les exports lisent les produits traités (avec mapped_data brut en secours). Utilisez eprel_* / energy_* pour les champs EPREL, spec.* pour une spécification, ou specifications.* pour développer toutes les specs en nœuds XML.",
"exports.saving": "Enregistrement…",
"exports.saveChanges": "Enregistrer",
"exports.createFeed": "Créer un feed",
"exports.updated": "Feed d'export mis à jour.",
"exports.created": "Feed d'export créé.",
"exports.saveFailed": "Échec de l'enregistrement",
"exports.urlCopied": "URL publique du feed {format} copiée. Collez-la dans tout système qui récupère des feeds produit.",
"exports.copyFailed": "Échec de la copie de l'URL dans le presse-papiers",
"exports.refreshed": "Feed actualisé",
"exports.refreshedWithCount": "Feed actualisé ({count} produits).",
"exports.refreshFailed": "Échec de l'actualisation du feed",
"exports.deleteConfirm": "Voulez-vous vraiment supprimer ce feed d'export ?",
"exports.deleted": "Feed d'export supprimé avec succès.",
"exports.deleteFailed": "Échec de la suppression du feed d'export",
"exports.defaultName": "Nouveau feed d'export",
"exports.fallbackName": "Feed d'export",
"exports.dialog.selectTitle": "Exporter les produits sélectionnés",
"exports.dialog.selectDescription": "Choisissez une configuration de feed d'export pour les {count} produits sélectionnés.",
"exports.dialog.noneFound": "Aucune configuration de feed d'export trouvée. Veuillez en créer une dans la section Export Feeds.",
"exports.dialog.loadFailed": "Échec du chargement des options de feed d'export. Veuillez réessayer.",
"exports.dialog.selectRequired": "Veuillez sélectionner un format de feed d'export.",
"exports.dialog.selectPlaceholder": "Sélectionnez un format de feed d'export...",
"exports.dialog.confirmAria": "Confirmer l'export",
"exports.dialog.export": "Exporter",
"exports.preset.google_shopping_csv.label": "Google Shopping (CSV)",
"exports.preset.google_shopping_csv.shortLabel": "Google Shopping CSV",
"exports.preset.google_shopping_csv.description": "Feed produit Merchant Center avec les colonnes Google standard (id, title, price, gtin, …).",
"exports.preset.google_shopping_csv.hint": "Après avoir actualisé le feed, copiez l'URL CSV publique dans Google Merchant Center → Products → Feeds → Add feed → Scheduled fetch.",
"exports.preset.google_shopping_csv.defaultName": "Google Shopping CSV",
"exports.preset.google_shopping_xml.label": "Google Shopping (XML)",
"exports.preset.google_shopping_xml.shortLabel": "Google Shopping XML",
"exports.preset.google_shopping_xml.description": "Mêmes colonnes Google que les éléments XML (g:id, g:title, …) pour les feeds XML Merchant Center.",
"exports.preset.google_shopping_xml.hint": "Collez l'URL XML publique dans Merchant Center en tant que scheduled fetch. Mappez les champs boutique manquants (link, price) sous Field mappings si besoin.",
"exports.preset.google_shopping_xml.defaultName": "Google Shopping XML",
"exports.preset.meta_csv.label": "Catalogue Meta (CSV)",
"exports.preset.meta_csv.shortLabel": "Meta CSV",
"exports.preset.meta_csv.description": "Colonnes du catalogue Facebook / Instagram Commerce (id, title, availability, price, image_link, …).",
"exports.preset.meta_csv.hint": "Dans Meta Commerce Manager → Catalog → Data sources → Add items → Use data feed, collez l'URL CSV publique.",
"exports.preset.meta_csv.defaultName": "Catalogue Meta CSV",
"exports.preset.custom_csv.label": "CSV personnalisé",
"exports.preset.custom_csv.shortLabel": "CSV personnalisé",
"exports.preset.custom_csv.description": "Choisissez vos propres colonnes et sources produit pour tout partenaire ou webhook.",
"exports.preset.custom_csv.hint": "Ajoutez ou renommez librement les clés de sortie. L'URL publique ne nécessite pas de connexion pour télécharger.",
"exports.preset.custom_csv.defaultName": "Export CSV personnalisé",
"exports.preset.custom_xml.label": "XML personnalisé",
"exports.preset.custom_xml.shortLabel": "XML personnalisé",
"exports.preset.custom_xml.description": "Créez une forme XML personnalisée avec vos propres noms root/item et mappings de champs.",
"exports.preset.custom_xml.hint": "Définissez les noms d'éléments root et item, puis mappez chaque clé de sortie à une source produit.",
"exports.preset.custom_xml.defaultName": "Export XML personnalisé",
"processing.title": "Traitement",
"processing.description": "Progression en direct du pipeline pour les tâches de traitement produit. Actualisation automatique tant que cet onglet est visible. Les tâches terminées renvoient vers Needs Review pour accepter / modifier / rejeter.",
"processing.refresh": "Actualiser",
"processing.loadFailed": "Échec du chargement des tâches de traitement",
"processing.tooManyRequests": "Trop de requêtes — attendez un moment et réessayez.",
"processing.serverError": "{fallback} (erreur serveur {status}). Réessayez sous peu.",
"processing.httpError": "{fallback} (HTTP {status})",
"processing.cancelFailed": "Impossible d'annuler cette tâche",
"processing.retryFailed": "Impossible de réessayer cette tâche",
"processing.cancelledMsg": "« {name} » a été annulé.",
"processing.queuedRetry": "« {name} » mis en file pour nouvel essai.",
"processing.jobFallback": "Tâche {id}",
"processing.tasks": "Tâches",
"processing.pipelineHint": "Pipeline : normalize → specs → fill → EPREL → AI. Les démarrages volumineux peuvent se diviser en tâches sœurs.",
"processing.emptyTitle": "Aucune tâche darrière-plan pour linstant",
"processing.emptyBody": "Aucun travail en arrière-plan pour le moment. Démarrez un nouveau job depuis Products quand vous êtes prêt.",
"processing.startJob": "Démarrer une tâche",
"processing.connectFeed": "Connecter un feed",
"processing.splitBatch": "Lot divisé · {jobs} tâches · {products} produits",
"processing.col.task": "Tâche",
"processing.col.status": "Statut",
"processing.col.steps": "Étapes",
"processing.col.progress": "Progression",
"processing.col.started": "Démarré",
"processing.col.completed": "Terminé",
"processing.col.actions": "Actions",
"processing.partOfBatch": "· partie du lot",
"processing.nowStep": "Maintenant : {step}",
"processing.skip": "(ignorer)",
"processing.reviewResults": "Examiner les résultats",
"processing.reviewTitle": "Ouvrez Needs Review pour accepter, modifier ou rejeter l'enrichissement",
"processing.cancel": "Annuler",
"processing.cancelling": "Annulation…",
"processing.cancelTitle": "Annuler cette tâche en attente ou en cours",
"processing.retry": "Réessayer",
"processing.retrying": "Nouvel essai…",
"processing.actions.onPage": "{count} sur cette page",
"processing.actions.clearSelection": "Effacer la sélection",
"processing.actions.processSelected": "Traiter la sélection",
"processing.actions.processAria": "Traiter les produits sélectionnés",
"processing.actions.processAriaCount": "Traiter {count} produit{plural} sélectionné(s) sur cette page",
"processing.actions.whatToProcess": "Que traiter",
"processing.actions.freeNoAiTitle": "Offre Free — pas de crédits IA",
"processing.actions.freeNoAiBody": "Normalize, specs, fill et EPREL s'exécutent toujours. Les titres/descriptions IA nécessitent un plan payant ou des crédits.",
"processing.actions.comparePlans": "Comparer les offres",
"processing.actions.selectAll": "Tout sélectionner",
"processing.actions.selectAllAria": "Sélectionner tous les modes de traitement",
"processing.actions.upgradeRequired": "{label} (amélioration requise)",
"processing.actions.upgradeSuffix": " · améliorer",
"processing.actions.credits": "{credits} crédits",
"processing.actions.free": "gratuit",
"processing.actions.autoCategorizeTitle": "Ajout automatique de la catégorisation",
"processing.actions.autoCategorizeBody": "{count} produit(s) nécessitent une catégorisation pour le traitement {types}",
"processing.actions.aiLocked": "Les options IA sont verrouillées sur Free. Passez à un plan supérieur pour traiter titres/descriptions.",
"processing.actions.totalCredits": "Crédits totaux ({count} sur cette page) :",
"processing.actions.starting": "Démarrage…",
"processing.actions.processCount": "Traiter {count} sur cette page",
"processing.actions.close": "Fermer",
"processing.actions.accept": "Accepter",
"processing.actions.acceptEnrichment": "Accepter l'enrichissement",
"processing.actions.export": "Exporter",
"processing.actions.exportSelected": "Exporter la sélection",
"processing.actions.reject": "Rejeter",
"processing.actions.rejectReset": "Rejeter (réinitialiser)",
"processing.actions.resetUnprocessed": "Réinitialiser à Non traité",
"processing.actions.confirmTitle": "Confirmer le traitement",
"processing.actions.confirmBody": "Traiter {count} produit(s) sur cette page pour {credits} crédits. Les crédits sont consommés au démarrage de la tâche et ne peuvent pas être annulés depuis cette action.",
"processing.actions.confirmStart": "Démarrer le traitement",
"processing.option.category": "Catégories",
"processing.option.attributes": "Attributs / specs",
"processing.option.title": "Titres (IA)",
"processing.option.description": "Descriptions (IA)",
"processing.receipt.view": "Voir dans Traitement",
"processing.receipt.undo": "Annuler",
"processing.receipt.format": "{succeeded} réussis · {skipped} ignorés · {failed} échoués",
"processing.receipt.cancelledOne": "Traitement annulé",
"processing.receipt.cancelledMany": "Tâches de traitement annulées",
"processing.receipt.cancelledDesc": "La tâche qui vient de démarrer a été annulée.",
"processing.receipt.cancelFailed": "Impossible d'annuler la tâche de traitement",
"unsubscribe.title": "Se désabonner",
"unsubscribe.me": "Me désabonner",
"unsubscribe.invalidLink": "Lien invalide",
"unsubscribe.failedShort": "Échec du désabonnement",
"unsubscribe.already": "Vous êtes déjà désabonné.",
"unsubscribe.confirmPrompt": "Confirmez ci-dessous pour vous désabonner des e-mails marketing.",
"unsubscribe.done": "Vous êtes désabonné.",
"stores.title": "Boutiques et sources",
"stores.description": "Connectez nimporte quelle boutique ou fournisseur au même endroit — Woo, Shopify, URL de flux ou CSV. Boutiques live : produits Descrybe → boutique ; commandes/avis boutique → Descrybe. Exportez quand le catalogue est prêt.",
"stores.allInputFeeds": "Tous les feeds d'entrée",
"stores.exportFeeds": "Feeds d'export",
"stores.migrationNote": "Après une migration de plateforme Descrybe, les identifiants WooCommerce et Shopify peuvent devoir être ressaisis — cest une reconnexion, pas une sync cassée.",
"stores.docsPrefix": "Docs :",
"stores.docsApiOverview": "Aperçu de l'API",
"stores.docsSuffix": "pour laccès produit public ; utilisez WooCommerce ou Shopify ci-dessous pour la sync boutique en direct.",
"stores.connectorsHeading": "Connecteurs boutique et catalogue",
"stores.statusAria": "Statut : {label}",
"stores.ctaAria": "{cta} : {title}",
"stores.startTitle": "Par où commencer ?",
"stores.startBody": "Boutique Woo → WooCommerce. Shopify ou une autre plateforme → URL de flux ou import CSV. Prêt pour Merchant Center ou partenaires → Flux dexport (préréglage Google Shopping ou champs personnalisés). Après une migration, reconnectez Woo/Shopify avant dattendre que la sync fonctionne.",
"stores.startBodyMember": "Demandez à un admin de connecter WooCommerce ou Shopify. Vous pouvez toujours ouvrir les boutiques connectées (sync/navigation) et utiliser Feed URL, CSV ou les feeds d'export selon le forfait.",
"stores.wizard.title": "Configuration guidée de boutique",
"stores.wizard.description": "Connectez une boutique, testez la connexion, lancez la première sync produits, puis c'est terminé.",
"stores.wizard.guidedSetup": "Configuration guidée",
"stores.wizard.guidedSetupAria": "Démarrer la configuration guidée de boutique",
"stores.wizard.adminOnly": "Seuls les admins peuvent lancer la configuration guidée (enregistrer les identifiants et premier sync). Vous pouvez toujours ouvrir les boutiques connectées.",
"stores.wizard.pickChannel": "Choisir un connecteur",
"stores.wizard.pickChannelBody": "Choisissez WooCommerce ou Shopify. Terminez connecter → tester → première sync sur la page du connecteur, puis revenez ici.",
"stores.wizard.channel.shopify": "Shopify",
"stores.wizard.channel.woocommerce": "WooCommerce",
"stores.wizard.channelLabel": "Configuration : {channel}",
"stores.wizard.changeChannel": "Changer de connecteur",
"stores.wizard.noChannels": "Aucun connecteur boutique sur votre offre. Mettez à niveau ou demandez à un admin.",
"stores.wizard.progress": "{done} sur {total} terminé",
"stores.wizard.stepsLabel": "Étapes de configuration boutique",
"stores.wizard.step.connect.title": "Connecter",
"stores.wizard.step.connect.body": "Enregistrez les identifiants sur la page du connecteur.",
"stores.wizard.step.test.title": "Tester la connexion",
"stores.wizard.step.test.body": "Lancez Tester la connexion jusqu'à succès.",
"stores.wizard.step.sync.title": "Première synchronisation",
"stores.wizard.step.sync.body": "Mettez en file la première sync produits (activez la sync si besoin).",
"stores.wizard.step.done.title": "Terminé",
"stores.wizard.step.done.body": "Votre boutique est connectée et une sync a démarré ou est terminée.",
"stores.wizard.openConnector": "Ouvrir le connecteur",
"stores.wizard.viewProducts": "Voir les produits",
"stores.wizard.backToHub": "Retour aux boutiques",
"stores.wizard.banner.generic": "Configuration guidée : terminez cette étape, puis revenez à l'assistant.",
"stores.wizard.banner.test": "Configuration guidée — testez la connexion, puis revenez à l'assistant.",
"stores.wizard.banner.sync": "Configuration guidée — lancez la première sync produits, puis revenez à l'assistant.",
"stores.wizard.banner.return": "Retour à l'assistant",
"stores.wizard.banner.dismiss": "Fermer",
"stores.woo.title": "WooCommerce",
"stores.woo.description": "Poussez les produits Descrybe → WooCommerce. Importez commandes et avis WooCommerce → Descrybe.",
"stores.woo.ctaReconnect": "Reconnecter Woo",
"stores.woo.ctaOpen": "Ouvrir Woo",
"stores.woo.ctaConnect": "Connecter Woo",
"stores.woo.ctaView": "Voir Woo",
"stores.shopify.title": "Shopify",
"stores.shopify.description": "Poussez les produits Descrybe → Shopify. Importez les commandes Shopify → Descrybe. Les avis ne sont pas disponibles via lAdmin API Shopify.",
"stores.shopify.ctaReconnect": "Reconnecter Shopify",
"stores.shopify.ctaOpen": "Ouvrir Shopify",
"stores.shopify.ctaConnect": "Connecter Shopify",
"stores.shopify.ctaView": "Voir Shopify",
"stores.feedUrl.title": "URL du feed",
"stores.feedUrl.description": "Pull any supplier or boutique catalog from a public CSV or XML URL on a schedule. Map fields, then sync.",
"stores.feedUrl.cta": "Ajouter l'URL du feed",
"stores.csv.title": "Téléversement CSV",
"stores.csv.description": "Téléversez un CSV produits comme flux dentrée. Idéal pour des fichiers fournisseur ponctuels ou des exports admin Shopify.",
"stores.csv.cta": "Téléverser CSV",
"stores.export.title": "Export / REST",
"stores.export.description": "Publiez Google Shopping ou un CSV/XML personnalisé avec une URL publique. Ou récupérez les produits via une clé API (/api/v1).",
"stores.export.cta": "Ouvrir les exports",
"stores.apiKeys.title": "Clés API",
"stores.apiKeys.description": "Les anciennes clés API nont pas été migrées. Créez une nouvelle clé dans Paramètres pour restaurer laccès /api/v1 — le secret nest affiché quune fois.",
"stores.apiKeys.descriptionMember": "Clés API entreprise pour /api/v1. Les clés héritées nont pas été migrées — seuls les admins peuvent créer ou révoquer ; préfixes visibles dans Paramètres.",
"stores.apiKeys.cta": "Gérer les clés API",
"stores.apiKeys.ctaView": "Voir les clés API",
"stores.status.needsReconnect": "Nécessite reconnexion",
"stores.status.connected": "Connecté",
"stores.status.notConnected": "Non connecté",
"stores.status.ready": "Prêt",
"stores.status.outbound": "Sortant",
"stores.status.reissue": "Réémettre",
"store.tab.connection": "Connexion",
"store.tab.orders": "Commandes",
"store.tab.settings": "Paramètres",
"store.tab.categories": "Catégories",
"store.tab.attributes": "Attributs",
"store.tab.reviews": "Avis",
"store.badge.credentialsOnFile": "Identifiants enregistrés",
"store.badge.syncEnabled": "Envoi produits activé",
"store.badge.syncDisabled": "Envoi produits désactivé",
"store.badge.syncQueued": "Envoi produits en file",
"store.badge.dryRun": "Simulation",
"store.badge.testStatus": "Test : {status}",
"store.badge.syncStatus": "Envoi produits : {status}",
"store.badge.ordersQueued": "Sync des commandes mise en file",
"store.badge.ordersStatus": "Commandes : {status}",
"store.badge.syncedCount": "{count} synchronisés",
"store.badge.mappedCount": "{count} mappés",
"store.badge.productsCount": "{count} produits",
"store.badge.optionsCount": "{count} options",
"store.lastSync": "Dernière sync : {date}",
"store.noOrdersSyncYet": "Aucune sync de commandes n'est encore terminée.",
"store.save": "Enregistrer",
"store.saving": "Enregistrement...",
"store.testing": "Test en cours...",
"store.testConnection": "Tester la connexion",
"store.queueing": "Mise en file...",
"store.queueProductPush": "Mettre en file lenvoi produits (Descrybe → boutique)",
"store.queueFirstProductSync": "Mettre en file le premier envoi produits (Descrybe → boutique)",
"store.queueOrdersImport": "Mettre en file limport commandes (boutique → Descrybe)",
"store.refreshList": "Actualiser la liste",
"store.saveBeforeTest": "Enregistrez les identifiants avant de tester",
"store.saveTestBeforeQueue": "Enregistrez les identifiants et testez la connexion avant de synchroniser",
"store.connectionOk": "Connexion OK",
"store.connectionSuccessful": "Connexion réussie",
"store.connectionSuccessfulDot": "Connexion réussie.",
"store.connectionFailed": "Échec de la connexion",
"store.connectionFailedDot": "Échec de la connexion.",
"store.connectionTestFailed": "Échec du test de connexion",
"store.testFailed": "Échec du test",
"store.setupSteps": "Étapes de configuration",
"store.col.order": "Commande",
"store.col.customer": "Client",
"store.col.status": "Statut",
"store.col.total": "Total",
"store.col.date": "Date",
"store.loadingOrders": "Chargement des commandes…",
"store.loadingOrdersDot": "Chargement des commandes.",
"flash.store.saveFailed": "Impossible denregistrer les paramètres",
"flash.store.queueSyncFailed": "Impossible de mettre la synchronisation en file",
"flash.store.queueOrdersFailed": "Impossible de mettre la synchro des commandes en file",
"flash.store.connectedTo": "Connecté à {name}.",
"flash.shopify.loadFailed": "Échec du chargement de la config Shopify",
"flash.shopify.productSyncQueued": "Synchro produits en file. Le worker lexécutera bientôt.",
"flash.shopify.ordersSyncQueued": "Synchro commandes en file. Le worker lexécutera bientôt.",
"flash.woo.loadFailed": "Échec du chargement de la config WooCommerce",
"flash.woo.productSyncQueued": "Synchro produits en file. Elle sexécutera bientôt.",
"flash.woo.ordersSyncQueued": "Synchro commandes en file. Elle sexécutera bientôt.",
"flash.woo.reviewsSyncQueued": "Synchro avis en file. Elle sexécutera bientôt.",
"flash.woo.queueReviewsFailed": "Impossible de mettre la synchro des avis en file",
"flash.woo.remoteMapsFailed": "Échec du chargement des maps distantes",
"flash.woo.syncSettingsFailed": "Impossible denregistrer les paramètres de synchronisation",
"flash.woo.categoryAutoMapFailed": "Échec du mappage auto des catégories",
"flash.woo.attributeAutoMapFailed": "Échec du mappage auto des attributs",
"shopify.title": "Intégration Shopify",
"shopify.description": "Connect a Shopify store with Dev Dashboard client credentials (recommended) or a legacy Admin API token. Products: Descrybe → Shopify. Orders: Shopify → Descrybe.",
"shopify.adminOnly": "Only entreprise admins can change Shopify connection paramètres. Synchroniser and browse stay disponible.",
"shopify.lockedTitle": "Connexion Shopify verrouillée",
"shopify.noCredentialsMember": "Aucun identifiant Shopify nest encore enregistré. Demandez à un administrateur de connecter la boutique. Sync et consultation des commandes restent disponibles après enregistrement et test de connexion.",
"shopify.enterToken": "Saisir les identifiants",
"shopify.noCredentials": "Aucun identifiant Shopify enregistré. Saisissez votre domaine *.myshopify.com et le Client ID + secret du Dev Dashboard (ou un jeton Admin API hérité), puis Enregistrer et Tester la connexion. Après une migration de plateforme, les anciens secrets ne sont pas repris — reconnectez avec un jeton neuf.",
"shopify.allConnectors": "Tous les connecteurs de boutique",
"shopify.setupDesc": "New Shopify apps are created in the Dev Dashboard (not Develop apps in Admin). Paste Client ID + secret below — Descrybe exchanges them for Admin API tokens and refreshes before they expire.",
"shopify.setup.oauthNote": "Still manual: create/install the app in Shopify and paste Client ID + secret here. Descrybe does not host a one-click App Store install. Legacy permanent shpat_ tokens from older Admin custom apps still work.",
"shopify.setup.scopesTitle": "Scopes Admin API requis",
"shopify.setup.scopesIntro": "Add these scopes on the app version in the Dev Dashboard before you release and install:",
"shopify.setup.step3.scopes": "write_products, read_products, read_orders",
"shopify.setup.step3.mid": ", then",
"shopify.setup.step3.release": "Release",
"shopify.setup.step4.install": "Install app",
"shopify.setup.step5.before": "In app Settings, copy",
"shopify.setup.step5.clientId": "Client ID",
"shopify.setup.step5.and": "and",
"shopify.setup.step5.clientSecret": "Client secret",
"shopify.setup.step5.mid": ". Below: enter shop domain, paste both, enable sync →",
"shopify.setup.step5.save": "Save",
"shopify.setup.step5.arrow": "→",
"shopify.setup.step5.test": "Test Connection",
"shopify.setup.step5.after": ". Descrybe stores secrets encrypted and refreshes the short-lived access token automatically.",
"shopify.setup.step6.products": "Products",
"shopify.setup.step6.productsTail": "Descrybe → Shopify (outbound push).",
"shopify.setup.step6.orders": "Orders",
"shopify.setup.step6.ordersTail": "Shopify → Descrybe (inbound pull).",
"shopify.setup.step7.before": "No live shop yet? Enable",
"shopify.setup.step7.dryRun": "Dry run",
"shopify.setup.step7.after": "(or use the special dry-run access token) to walk through the flow without calling Shopify.",
"shopify.setup.openDevDashboard": "Open Dev Dashboard",
"shopify.setup.openDevelopApps": "Open shop Develop apps",
"shopify.setup.openDevelopAppsNeedDomain": "Enter your shop domain below to unlock a direct Admin link for this store.",
"shopify.setup.openDevelopAppsHint": "Opens Shopify Admin → Develop apps for this shop (legacy apps / install approvals). New apps start in the Dev Dashboard.",
"shopify.setup.copyScopes": "Copy required scopes",
"shopify.setup.scopesCopied": "Scopes copied",
"shopify.setup.docsCreate": "Create app docs",
"shopify.setup.docsTokens": "Access token docs",
"shopify.setup.showLegacyToken": "I have a legacy Admin API access token (shpat_…)",
"shopify.setup.hideLegacyToken": "Hide legacy token field",
"shopify.field.shopDomainHelp": "Admin API host only — use the *.myshopify.com name, not a custom storefront domain.",
"shopify.field.clientId": "Client ID",
"shopify.field.clientSecret": "Client secret",
"shopify.field.clientSecretHelp": "From Dev Dashboard → your app → Settings. Descrybe exchanges these for a short-lived Admin API token and refreshes it automatically.",
"shopify.field.accessTokenHelp": "Only for custom apps created in Shopify Admin before January 2026. New apps should use Client ID + secret instead.",
"shopify.placeholder.clientId": "Client ID from Dev Dashboard",
"shopify.placeholder.clientIdKeep": "Client ID on file — enter a new one to replace",
"shopify.placeholder.clientSecret": "Client secret",
"shopify.placeholder.clientSecretKeep": "Secret on file — enter a new one to replace",
"shopify.setup.scope.write_products": "write_products",
"shopify.setup.scope.write_productsWhy": "Créer et mettre à jour des produits dans Shopify (push sortant)",
"shopify.setup.scope.read_products": "read_products",
"shopify.setup.scope.read_productsWhy": "Trouver les produits existants par SKU avant mise à jour",
"shopify.setup.scope.read_orders": "read_orders",
"shopify.setup.scope.read_ordersWhy": "Importer les commandes dans Descrybe (entrant)",
"shopify.setup.step1": "Si vous avez connecté Shopify avant une migration de plateforme : créez une nouvelle app Dev Dashboard (ou reconnectez avec un jeton hérité neuf) — les anciens secrets enregistrés ne sont pas repris.",
"shopify.setup.step2.before": "Open the",
"shopify.setup.step2.path": "Shopify Dev Dashboard",
"shopify.setup.step2.after": "→ Apps → Create app → Start from Dev Dashboard (or use the deep link below).",
"shopify.setup.step3.before": "Create a version: set App URL (default home is fine for API-only), add scopes",
"shopify.setup.step3.after": ".",
"shopify.setup.step4.before": "From the app Home tab,",
"shopify.setup.step4.after": "on your store (merchant must approve scopes).",
"shopify.testSectionTitle": "Vérifier la connexion",
"shopify.testHint": "Enregistrez dabord le domaine boutique et le jeton, puis lancez Tester la connexion. Un test réussi confirme le jeton et les scopes avant de mettre la sync en file.",
"shopify.overwriteTitle": "Écraser les produits Shopify ?",
"shopify.overwriteBodyCount": "Cela met en file une poussée de produits sortante. {count} produit(s) Shopify déjà liés peuvent être mis à jour avec le contenu Descrybe.",
"shopify.overwriteBody": "Cela met en file une poussée de produits sortante. Les produits Shopify correspondants peuvent être mis à jour avec le contenu Descrybe.",
"shopify.credentialsTitle": "Identifiants de la boutique",
"shopify.credentialsDesc.before": "Le domaine de la boutique doit être votre",
"shopify.credentialsDesc.code": "*.myshopify.com",
"shopify.credentialsDesc.after": "domain. Prefer Dev Dashboard Client ID + secret; legacy Admin API tokens still work.",
"shopify.field.shopDomain": "Domaine de la boutique",
"shopify.field.accessToken": "Jeton d'accès Admin API",
"shopify.field.apiVersion": "Version de l'API",
"shopify.placeholder.tokenKeep": "******** (laisser vide pour conserver)",
"shopify.enableSync": "Activer lenvoi produits (Descrybe → Shopify)",
"shopify.dryRunLabel": "Essai à blanc (aucun appel Shopify live)",
"shopify.ordersTitle": "Import des commandes (Shopify → Descrybe)",
"shopify.ordersDesc": "Shopify → Descrybe — importe commandes et lignes dans Descrybe (n’écrit pas vers Shopify).",
"shopify.ordersNeedsReconnect": "Limport des commandes ne peut pas sexécuter tant que les identifiants ne sont pas reconnectés après la migration. Dans longlet Connexion : Enregistrer, puis Tester la connexion.",
"shopify.notesTitle": "Notes",
"shopify.notesDesc": "Capacités du connecteur Shopify",
"shopify.notes.productsLabel": "Produits (Descrybe → Shopify)",
"shopify.notes.productsBody": "— les produits Descrybe traités sont créés ou mis à jour dans Shopify (correspondance SKU via GraphQL sil ny a pas did produit Shopify en cache). Une re-sync peut écraser les champs distants correspondants.",
"shopify.notes.ordersLabel": "Commandes (Shopify → Descrybe)",
"shopify.notes.ordersBody": "— récupérés pour le reporting et de futurs workflows daudience.",
"shopify.notes.reviewsLabel": "Avis",
"shopify.notes.reviewsBody": "-- not assistanceed. Shopify has no first-party produit reviews Admin API (third-party review apps are out of scope here).",
"shopify.notes.encryption.before": "Jetons are encrypted at rest with",
"woo.title": "Intégration WooCommerce",
"woo.description": "Create a WordPress REST API key, connect your store, then push products (Descrybe → WooCommerce) and pull orders/reviews (WooCommerce → Descrybe).",
"woo.allStores": "Toutes les boutiques",
"woo.adminOnly": "Seuls les administrateurs de lentreprise peuvent modifier la connexion et le mapping WooCommerce. La synchronisation et la navigation restent disponibles.",
"woo.enterCredentials": "Saisir les identifiants",
"woo.noCredentials": "Aucun identifiant WooCommerce enregistré. Saisissez lURL de la boutique, créez une clé REST API Lecture/Écriture dans WordPress, collez Consumer Key et Secret, puis Enregistrer et Tester la connexion. Après une migration de plateforme, les anciens secrets ne sont pas repris — reconnectez avec une clé neuve.",
"woo.lockedTitle": "Connexion WooCommerce verrouillée",
"woo.noCredentialsMember": "Aucun identifiant WooCommerce nest encore enregistré. Demandez à un administrateur de connecter la boutique. Sync, commandes et avis restent disponibles après enregistrement et test de connexion.",
"woo.setupDesc": "Follow these steps to create a WooCommerce REST API key in WordPress and connect it here. Descrybe never creates keys on your store for you.",
"woo.setup.step1": "Si vous avez connecté WooCommerce avant une migration de plateforme : créez une nouvelle clé REST API — les anciens identifiants enregistrés ne sont pas utilisables.",
"woo.setup.step2.before": "Enter your store",
"woo.setup.step2.path": "HTTPS URL",
"woo.setup.step2.after": "in the form below (example: https://yourstore.com).",
"woo.setup.step3.before": "In WordPress admin, open",
"woo.setup.step3.path": "WooCommerce → Settings → Advanced → REST API",
"woo.setup.step3.after": "(or use the deep link once your store URL is filled in).",
"woo.setup.step4.before": "Click",
"woo.setup.step4.addKey": "Add key",
"woo.setup.step4.mid": ", set permissions to",
"woo.setup.step4.permissions": "Read/Write",
"woo.setup.step4.after": ", then copy the Consumer Key (ck_…) and Consumer Secret (cs_…). The secret is shown only once.",
"woo.setup.step5.before": "Paste the key and secret below, enable sync if ready, then",
"woo.setup.step5.save": "Save",
"woo.setup.step5.arrow": "→",
"woo.setup.step5.test": "Test Connection",
"woo.setup.step5.after": ".",
"woo.setup.step6.products": "Products",
"woo.setup.step6.productsTail": "Descrybe → WooCommerce (outbound push).",
"woo.setup.step6.orders": "Orders",
"woo.setup.step6.and": "and",
"woo.setup.step6.reviews": "reviews",
"woo.setup.step6.inboundTail": "WooCommerce → Descrybe (inbound pull). Sync runs in the background — check status badges on this page.",
"woo.setup.openKeys": "Ouvrir les clés REST API",
"woo.setup.addKey": "Ajouter une clé",
"woo.setup.openKeysHint": "Ouvre ladmin WordPress → WooCommerce → Réglages → Avancé → REST API.",
"woo.setup.openKeysNeedUrl": "Enregistrez dabord une URL de boutique valide pour ouvrir les liens admin.",
"woo.setup.docsLink": "Documentation REST API WooCommerce",
"woo.overwriteTitle": "Écraser les produits WooCommerce ?",
"woo.overwriteBodyCount": "Cela met en file une poussée de produits sortante. {count} produit(s) WooCommerce déjà liés peuvent être mis à jour avec le contenu Descrybe.",
"woo.overwriteBody": "Cela met en file une poussée de produits sortante. Les produits WooCommerce correspondants peuvent être mis à jour avec le contenu Descrybe.",
"woo.connectionTitle": "Store connection",
"woo.connectionDesc": "Paste your store URL and a Read/Write REST API key pair. Save, then Test Connection before queuing syncs.",
"woo.enableSync": "Activer lenvoi produits (Descrybe → WooCommerce)",
"woo.field.storeUrl": "URL de la boutique",
"woo.field.storeUrlHelp": "URL publique du site en https. Pour lAPI REST WooCommerce et les liens vers ladmin WordPress.",
"woo.field.consumerKey": "Consumer Key",
"woo.field.consumerSecret": "Consumer Secret",
"woo.field.credentialsHelp": "Clé et secret consommateur en lecture/écriture. Laissez vide pour conserver les identifiants existants.",
"woo.placeholder.keep": "******** (inchangé)",
"woo.keepCredentialsHint": "Laissez clé/secret vides à l'enregistrement pour conserver les identifiants existants.",
"woo.saveConfiguration": "Enregistrer la configuration",
"woo.categoryMappingTitle": "Correspondance des catégories",
"woo.categoryMappingDesc": "Faites correspondre vos catégories internes aux catégories WooCommerce",
"woo.autoMapCategories": "Mapper les catégories automatiquement",
"woo.autoMapping": "Mapping automatique...",
"woo.refreshCategories": "Actualiser les catégories",
"woo.availableCategories": "Catégories WooCommerce disponibles",
"woo.categoriesEmptyHint": "Testez la connexion, puis actualisez pour charger les catégories WooCommerce.",
"woo.attributeMappingTitle": "Correspondance des attributs",
"woo.attributeMappingDesc": "Faites correspondre vos attributs internes aux attributs WooCommerce",
"woo.autoMapAttributes": "Mapper les attributs automatiquement",
"woo.refreshAttributes": "Actualiser les attributs",
"woo.availableAttributes": "Attributs WooCommerce disponibles",
"woo.attributesEmptyHint": "Testez la connexion, puis actualisez pour charger les attributs WooCommerce.",
"woo.ordersTitle": "Import des commandes (WooCommerce → Descrybe)",
"woo.ordersDesc": "WooCommerce → Descrybe — importe commandes et lignes dans Descrybe (n’écrit pas vers la boutique).",
"woo.ordersNeedsReconnect": "Limport des commandes ne peut pas sexécuter tant que les identifiants ne sont pas reconnectés après la migration. Dans longlet Connexion : Enregistrer, puis Tester la connexion.",
"woo.syncSettingsTitle": "Paramètres de sync",
"woo.syncSettingsDesc": "Configurer comment les produits sont poussés Descrybe → WooCommerce",
"woo.matchStrategy": "Produit Matching Strategy",
"woo.matchStrategyHelp": "Lenvoi produits (Descrybe → WooCommerce) associe les produits distants par SKU ou EAN/GTIN. Mettez en file depuis longlet Connexion (manuel).",
"woo.lastSyncLabel": "Dernière sync",
"woo.saveSyncSettings": "Enregistrer les paramètres de sync",
"woo.match.sku": "SKU",
"woo.match.ean": "EAN/GTIN",
"plan.feature.section.shell": "Environnement",
"plan.feature.section.dashboard": "Tableau de bord",
"plan.feature.section.catalog": "Catalogue",
"plan.feature.section.feeds": "Feeds",
"plan.feature.section.stores": "Boutiques",
"plan.feature.section.processing": "Traitement",
"plan.feature.section.marketing": "Marketing",
"plan.feature.section.integrations": "Intégrations",
"plan.feature.section.billing": "Facturation",
"plan.feature.section.settings": "Paramètres",
"plan.feature.section.support": "Assistance",
"plan.feature.section.capabilities": "Capacités",
"plan.feature.shell.navigation": "Navigation latérale",
"plan.feature.shell.command_palette": "Palette de commandes",
"plan.feature.shell.company_switcher": "Sélecteur d'entreprise",
"plan.feature.shell.support_notifications": "Cloche de notifications d'assistance",
"plan.feature.shell.tutorial": "Tutoriel produit",
"plan.feature.shell.account_menu": "Menu du compte",
"plan.feature.shell.billing_recovery_banner": "Bannière de récupération de facturation",
"plan.feature.dashboard.overview": "Aperçu du tableau de bord",
"plan.feature.dashboard.stats": "Cartes de statistiques",
"plan.feature.dashboard.quick_links": "Liens rapides",
"plan.feature.dashboard.recent_jobs": "Tâches récentes",
"plan.feature.dashboard.news_feed": "Fil d'actualités",
"plan.feature.dashboard.activation_checklist": "Liste d'activation",
"plan.feature.dashboard.migrated_checklist": "Liste de cohorte migrée",
"plan.feature.dashboard.etl_gaps": "Panneau des écarts ETL",
"plan.feature.dashboard.store_reconnect": "Bannière de reconnexion boutique",
"plan.feature.dashboard.upgrade_banners": "Bannières de mise à niveau",
"plan.feature.catalog.products": "Produits",
"plan.feature.catalog.products.tab_processed": "Produits - onglet Traités",
"plan.feature.catalog.products.tab_needs_review": "Produits - onglet À revoir",
"plan.feature.catalog.products.tab_error": "Produits - onglet Erreur",
"plan.feature.catalog.products.tab_processing": "Produits - onglet En cours",
"plan.feature.catalog.products.tab_unprocessed": "Produits - onglet Non traités",
"plan.feature.catalog.products.process_categories": "Traiter les catégories",
"plan.feature.catalog.products.process_attributes": "Traiter attributs / spécifications",
"plan.feature.catalog.products.process_ai_titles": "Traiter les titres IA",
"plan.feature.catalog.products.process_ai_descriptions": "Traiter les descriptions IA",
"plan.feature.catalog.products.enrichment_review": "Panneau de revue d'enrichissement",
"plan.feature.catalog.products.export_selection": "Exporter les produits sélectionnés",
"plan.feature.catalog.products.upgrade_prompt": "Invites de mise à niveau produits",
"plan.feature.catalog.categories": "Catégories",
"plan.feature.catalog.categories.title_formula": "Formule de titre de catégorie",
"plan.feature.catalog.categories.description_formula": "Formule de description de catégorie",
"plan.feature.catalog.attributes": "Attributs",
"plan.feature.catalog.attributes.bulk_import": "Import en masse des attributs",
"plan.feature.catalog.standard_fields": "Champs standard",
"plan.feature.catalog.standard_fields.groups": "Groupes de champs standard",
"plan.feature.catalog.structured_descriptions": "Champs de description structurée",
"plan.feature.catalog.vector_categories": "Catégories vectorielles",
"plan.feature.feeds.list": "Feeds d'import",
"plan.feature.feeds.add_url": "Ajouter l'URL du feed",
"plan.feature.feeds.add_csv": "Ajouter un feed par téléversement CSV",
"plan.feature.feeds.sync": "Synchroniser le feed",
"plan.feature.feeds.mapping": "Mapping du feed",
"plan.feature.feeds.mapping.select_item": "Mapping - sélectionner l'élément item",
"plan.feature.feeds.mapping.map_fields": "Mapping - mapper les champs",
"plan.feature.feeds.export_feeds": "Feeds d'export",
"plan.feature.feeds.export_feeds.create": "Créer un feed d'export",
"plan.feature.feeds.export_feeds.generate": "Générer le feed d'export",
"plan.feature.feeds.uploads": "Téléversements de fichiers",
"plan.feature.stores.hub": "Hub des boutiques",
"plan.feature.stores.woocommerce": "Intégration WooCommerce",
"plan.feature.stores.woocommerce.connection": "Connexion WooCommerce",
"plan.feature.stores.woocommerce.categories": "Sync catégories WooCommerce",
"plan.feature.stores.woocommerce.attributes": "Sync attributs WooCommerce",
"plan.feature.stores.woocommerce.orders": "Commandes WooCommerce",
"plan.feature.stores.woocommerce.reviews": "Avis WooCommerce",
"plan.feature.stores.woocommerce.settings": "Paramètres WooCommerce",
"plan.feature.stores.shopify": "Intégration Shopify",
"plan.feature.stores.shopify.connection": "Connexion Shopify",
"plan.feature.stores.shopify.orders": "Commandes Shopify",
"plan.feature.stores.shopify.settings": "Paramètres Shopify",
"plan.feature.processing.monitor": "Moniteur de traitement",
"plan.feature.marketing.campaigns": "Campagnes",
"plan.feature.marketing.campaigns.create": "Assistant nouvelle campagne",
"plan.feature.marketing.campaigns.generate_ai": "Génération IA de campagne",
"plan.feature.marketing.campaigns.send": "Envoi / blast de campagne",
"plan.feature.marketing.content_calendar": "Calendrier de contenu",
"plan.feature.marketing.brand_kit": "Kit de marque",
"plan.feature.marketing.brand_ai_apply": "Appliquer la marque IA dans les prompts",
"plan.feature.marketing.seo": "Recommandations SEO",
"plan.feature.marketing.seo.template_fill": "Remplissage de modèle SEO",
"plan.feature.marketing.seo.ai_rewrite": "Réécriture SEO par IA",
"plan.feature.marketing.reviews": "Avis",
"plan.feature.integrations.ai": "Intégrations IA",
"plan.feature.integrations.ai.byok": "Apportez votre propre clé IA",
"plan.feature.integrations.email": "Envoi d'e-mails",
"plan.feature.integrations.email.test": "Envoi d'e-mail de test",
"plan.feature.integrations.email.blast": "Envoi massif d'e-mails",
"plan.feature.billing.overview": "Aperçu de la facturation",
"plan.feature.billing.customer_portal": "Portail client Stripe",
"plan.feature.billing.quick_upgrade": "Paiement de mise à niveau rapide",
"plan.feature.billing.plans_compare": "Comparer les offres",
"plan.feature.billing.checkout": "Paiement Stripe",
"plan.feature.settings.profile": "Paramètres du profil",
"plan.feature.settings.company": "Paramètres de l'entreprise",
"plan.feature.settings.alerts": "Préférences d'alertes",
"plan.feature.settings.api_keys": "Clés API",
"plan.feature.settings.team": "Gestion de l'équipe",
"plan.feature.settings.team_invite": "Inviter un coéquipier",
"plan.feature.support.center": "Centre d'assistance",
"plan.feature.support.ticket_create": "Nouveau ticket d'assistance",
"plan.feature.support.ticket_thread": "Fil du ticket d'assistance",
"plan.feature.capability.sku_cap": "Plafond de SKU produit",
"plan.feature.capability.ai_credits": "Portefeuille de crédits IA",
"plan.feature.capability.ai_processing": "Tâches de traitement IA",
"plan.feature.capability.eprel": "Enrichissement EPREL",
"plan.feature.capability.normalize_specs_fill": "Normaliser / specs / remplir",
"plan.feature.capability.campaign_ai": "Génération IA de campagne",
"plan.feature.capability.email_live_send": "Livraison d'e-mails en direct",
"plan.feature.capability.brand_ai_apply": "Ton de marque dans les prompts IA",
"plan.feature.capability.seo_ai_rewrite": "Réécriture SEO par IA",
"plan.feature.capability.feed_source_limit": "Limite de sources de feed (marketing)",
"plan.feature.capability.export_feed_limit": "Limite de feeds d'export (marketing)",
"plan.feature.capability.storage_limit": "Limite de stockage (marketing)",
"plan.feature.capability.api_access": "Accès API REST (marketing)",
"plan.feature.capability.byok": "Apportez votre propre clé IA",
"billing.plan.free": "Gratuit",
"products.actions.selectAll": "Tout sélectionner",
"products.actions.upgradeSuffix": " · améliorer",
"products.actions.upgradeRequired": "{label} (amélioration requise)",
"products.actions.free": "gratuit",
"products.actions.credits": "{credits} crédits",
"products.actions.autoCategorizeTitle": "Ajout automatique de la catégorisation",
"products.actions.autoCategorizeBody": "{count} produit(s) nécessitent une catégorisation pour le traitement {types}",
"products.actions.aiLocked": "Les options IA sont verrouillées sur Free. Passez à un plan supérieur pour traiter titres/descriptions.",
"products.actions.processSelected": "Traiter la sélection",
"products.actions.markProcessed": "Marquer comme traité",
"products.actions.resetUnprocessed": "Réinitialiser en non traité",
"products.actions.export": "Exporter",
"products.upload.dropHint": "Déposez un CSV ici ou cliquez pour parcourir",
"products.upload.supportsHint": "Prend en charge les imports produits .csv (ean, name, category…)",
"products.export.chooseConfig": "Exporter {count} produit(s) sélectionné(s). Choisissez le feed d'export qui définit format et champs.",
"products.export.selectPlaceholder": "Sélectionnez un feed d'export…",
"fields.typeLabel": "Type",
"fields.groupLabel": "Groupe",
"fields.selectGroup": "Sélectionner un groupe",
"fields.groupBelongsHint": "Groupe auquel appartient ce champ",
"fields.addFieldShort": "Ajouter un champ",
"fields.enableRecommended": "Activer les recommandés",
"feeds.activated": "Feed activé.",
"feeds.deactivated": "Feed désactivé.",
"feeds.syncTimeout": "Synchroniser timed out waiting for the server. The job may still finish — open Synchroniser History to check status.",
"feeds.createdMapHint": "Feed créé. Mappez les champs avant de synchroniser.",
"feeds.createdPlain": "Feed créé.",
"feeds.createdMapDesc": "Mappez les colonnes source aux champs produit, puis synchronisez.",
"feeds.lastLiveSync": "Dernière sync réussie du flux : {when}",
"feeds.noLiveSyncProducts": "Pas encore de sync réussie du flux. Catalogue dernièrement mis à jour {when}.",
"feeds.noDataYet": "Pas encore de sync ni de données catalogue.",
"products.filters.incomplete": "Incomplet",
"products.filters.complete44": "Complet (4/4)",
"products.filters.missingName": "Nom manquant",
"products.filters.missingDescription": "Description manquante",
"products.filters.missingAttributes": "Attributs manquants",
"products.filters.missingCategory": "Catégorie manquante",
"products.filters.hasEprel": "Avec EPREL",
"products.filters.noEprel": "Sans EPREL",
"products.filters.priceChanged": "Prix modifié",
"products.filters.stockChanged": "Stock modifié",
"products.filters.titleChanged": "Titre modifié",
"products.filters.newFromFeed": "Nouveau depuis le feed",
"products.filters.otherFieldChange": "Autre changement de champ",
"products.filters.sortUpdatedNewest": "Mis à jour (plus récent)",
"products.filters.sortUpdatedOldest": "Mis à jour (plus ancien)",
"products.filters.sortNameAsc": "Nom (A-Z)",
"products.filters.sortNameDesc": "Nom (Z-A)",
"products.filters.searchPlaceholder": "Rechercher des produits...",
"products.filters.searchCategories": "Rechercher des catégories...",
"products.filters.selectFeed": "Sélectionner un feed",
"products.filters.loadingFeeds": "Chargement des feeds…",
"products.table.loading": "Chargement des produits",
"products.table.uncategorized": "Sans catégorie",
"products.table.assignCategory": "Attribuer une catégorie",
"products.table.changeCategory": "Changer la catégorie de {name}",
"products.table.selectCategory": "Sélectionner une catégorie…",
"products.table.saveCategory": "Enregistrer la catégorie",
"products.table.cancelCategory": "Annuler la modification de catégorie",
"products.table.categoryRequired": "Choisir une catégorie",
"products.table.noCategoriesAvailable": "Pas encore de catégories — créez-en une sous Catalogue",
"products.table.qualityUnavailable": "Qualité indisponible",
"products.table.full": "Complet",
"products.table.empty": "Vide",
"products.table.saveName": "Enregistrer le nom",
"products.table.cancelRename": "Annuler le renommage",
"products.table.noSyncYet": "Pas encore de sync",
"products.feedSync.feedAndWhen": "{feed} · {when}",
"products.feedSync.syncedWhen": "Synchronisé {when}",
"products.table.productOptions": "Options produit",
"products.edit.details": "Détails du produit",
"products.edit.noEprel": "Aucun id EPREL sur ce produit.",
"products.edit.specsPresent": "Les spécifications techniques sont présentes sur ce produit.",
"products.edit.noEnrichedName": "Aucun nom enrichi",
"products.edit.resetName": "Réinitialiser le nom enrichi à l'original",
"products.edit.cannotClearName": "L'original est vide — impossible d'effacer le nom enrichi via PATCH",
"products.edit.showPreview": "Afficher l'aperçu",
"products.edit.editHtml": "Modifier le HTML",
"products.edit.noEnrichedDescription": "Aucune description enrichie",
"products.edit.resetDescription": "Réinitialiser la description enrichie à l'original",
"products.edit.cannotClearDescription": "Loriginal est vide — impossible deffacer la description enrichie via PATCH",
"products.edit.unknownFeed": "Feed inconnu",
"products.edit.noProcessedName": "Aucun nom traité disponible",
"products.edit.feedNamed": "Flux · {name}",
"products.edit.noAiDescription": "Aucune description IA",
"products.edit.sourceLabel": "Libellé source",
"products.edit.coverageTitle": "Combien de Nom, Description, Attributs et Catégorie sont présents (flux ou traités).",
"products.edit.coverageReady": "{count}/4 prêts",
"products.edit.eprelPresentTitle": "L'id European Product Registry for Energy Labelling (EPREL) est présent sur ce produit.",
"products.edit.noEprelBadge": "Sans EPREL",
"products.edit.specsBadge": "Specs",
"products.edit.reviewBannerTitle": "Révisez les champs enrichis avant daccepter",
"products.edit.reviewBannerHelp": "Utilisez longlet Révision pour comparer originaux et IA. Raccourcis : A accepter · R rejeter · Alt+1/2 champ · ⌘/Ctrl+Entrée tout accepter.",
"products.edit.tab.review": "Examiner",
"products.edit.tab.details": "Détails",
"products.edit.tab.content": "Contenu",
"products.edit.tab.attributes": "Attributs",
"products.edit.tab.feed": "Flux",
"products.edit.changed": "Modifié",
"products.edit.matched": "Correspondant",
"products.edit.original": "Original",
"products.edit.enriched": "Enrichi",
"products.edit.discardName": "Rejeter le nom",
"products.edit.acceptName": "Accepter le nom",
"products.edit.discardDescription": "Rejeter la description",
"products.edit.acceptDescription": "Accepter la description",
"products.edit.noCategory": "No Catégorie",
"products.edit.whatsFilledIn": "Ce qui est renseigné",
"products.edit.coverageLegend": "Gray = missing · Orange = from flux · Green = processed",
"products.edit.feedSource": "Flux source",
"products.edit.updatedRelative": "· mis à jour {when}",
"products.edit.viewAllFeedFields": "View all flux fields ({filled}/{total})",
"products.edit.productIdentity": "Produit identity",
"products.edit.aiProcessedName": "Nom traité par AI",
"products.edit.originalName": "Nom dorigine",
"products.edit.productIdSku": "Produit ID / SKU",
"products.edit.rowUpdated": "Ligne produit mise à jour {when}",
"products.edit.noRawUpdateTime": "No raw produit update time",
"products.edit.feedSyncLabel": "· flux sync {when}",
"products.edit.neverRecorded": "jamais enregistré",
"products.edit.feedFilledCount": "{filled} renseignés · {total} champs",
"products.edit.noMappedFeedFields": "No mapped flux fields on this produit.",
"products.edit.fieldCol": "Champ",
"products.edit.valueFromFeed": "Valeur from flux",
"products.edit.core": "Cœur",
"products.edit.aiProcessedDescription": "Description traitée par AI",
"products.edit.originalDescription": "Description dorigine",
"products.edit.noAttrsYet": "No attribut or specification data on this produit yet.",
"products.edit.fromFeed": "Depuis le feed",
"products.edit.feedAttrsHelp": "Valeurs extraites du flux (spécifications HTML, garantie, dimensions, EPREL). Les clés sont liées à attribute_key lorsque possible.",
"products.edit.fieldsCount": "{count} champs",
"products.edit.originalAttributes": "Attributs dorigine",
"products.edit.aiAttributes": "Attributs IA / enrichis",
"products.edit.editableAttributes": "Attributs modifiables",
"products.edit.editableAttributesHelp": "Les modifications sont enregistrées dans la carte dattributs du produit. Les lignes feed et IA ci-dessous restent en référence lorsquelles diffèrent.",
"products.edit.addAttribute": "Ajouter un attribut",
"products.edit.attrKeyPlaceholder": "Clé",
"products.edit.attrValuePlaceholder": "Valeur",
"products.edit.removeAttribute": "Supprimer {key}",
"products.edit.noEditableAttrs": "Pas encore dattributs modifiables. Ajoutez une paire clé/valeur.",
"products.edit.reject": "Rejeter",
"products.edit.accept": "Accepter",
"taskIndicator.title": "Tâches en arrière-plan",
"taskIndicator.activeOne": "1 tâche en cours",
"taskIndicator.activeMany": "{count} tâches en cours",
"taskIndicator.view": "Voir la progression",
"taskIndicator.expand": "Développer la liste des tâches",
"taskIndicator.collapse": "Réduire la liste des tâches",
"taskIndicator.progressAria": "Progression de la tâche {pct} pour cent",
"taskIndicator.progressCounts": "{done} sur {total} produits",
"attributes.assignBulk": "Assigner aux catégories",
"products.filters.search": "Rechercher",
"products.filters.sortAria": "Tri : {label}",
"products.filters.sortLabel": "Tri : {label}",
"products.table.colIdName": "ID/Nom",
"products.table.colCoverage": "Couverture",
"products.table.coverageTitle": "Couverture : N=Nom, D=Description, A=Attributs, C=Catégorie. Gris=manquant, orange=depuis le flux, vert=traité. EPREL affiche lid du registre d’étiquette énergétique.",
"products.table.colFeed": "Feed",
"products.table.colCategory": "Catégorie",
"products.table.colStatus": "Statut",
"products.table.colUpdated": "Dernière mise à jour",
"products.table.colActions": "Actions",
"products.table.loadingDots": "Chargement des produits…",
"products.table.noneFound": "Aucun produits trouvé.",
"products.table.selectProduct": "Sélectionner le produit {name}",
"products.table.rename": "Renommer {name}",
"products.table.productNameAria": "Nom du produit pour {name}",
"products.table.selectPage": "Sélectionner {count} on this page",
"products.table.deselectPage": "Désélectionner {count} sur cette page",
"categories.assign": "Assigner",
"categories.titleFormulaSubtitle": "Configurez comment les titres de produits doivent être générés pour {name}",
"categories.addText": "Ajouter du texte",
"categories.aboutTitleFormulas": "À propos des formules de titre",
"categories.aboutTitleFormulasHelp": "Les titres sont assemblés de gauche à droite à partir des éléments ci-dessous.",
"categories.variablesReplacedHelp": "Les variables sont remplacées par les données produit lorsquelles sont disponibles. Les valeurs manquantes sont ignorées.",
"categories.variableTypeHelp": "Champ dynamique issu des données produit (exemple : marque).",
"categories.textTypeHelp": "Texte statique qui apparaît toujours tel qu’écrit.",
"categories.assignTitleCopyHelp": "Utilisez Assigner pour copier cette formule vers dautres catégories qui doivent partager le même modèle de titre.",
"categories.titleFormulaInvalid": "Cette page de formule de titre nécessite une catégorie valide. Revenez aux catégories et rouvrez Modifier la formule de titre.",
"categories.preview.title": "Aperçu du titre",
"categories.preview.description": "Voici comment vos titres de produits seront structurés",
"categories.preview.exampleTab": "Aperçu dexemple",
"categories.preview.structureTab": "Structure de la formule",
"categories.preview.noElements": "Aucun élément ajouté pour linstant",
"categories.brandTips.title": "Conseils liés à la marque",
"categories.brandTips.freePlan": "Le kit de marque est modifiable en Free ; lapplication IA se débloque sur les forfaits payants.",
"categories.brandTips.editBrandKit": "Modifier le kit de marque",
"categories.brandTips.emptyBefore": "Ajoutez une voix ou des termes préférés dans ",
"categories.brandTips.emptyAfter": " pour des conseils ici.",
"categories.brandTips.brandKit": "Kit de marque",
"categories.brandTips.descGuidanceBefore": "Conseils de votre ",
"categories.brandTips.descGuidanceAfter": " pour les sections de description.",
"categories.formulaElementsTitle": "Éléments de formule",
"categories.formulaElementsHelp": "Glissez-déposez les éléments pour les réordonner",
"categories.noElementsAdded": "Aucun élément ajouté",
"categories.addElementsHint": "Ajoutez des variables ou du texte depuis le panneau de droite",
"categories.editTextElementAria": "Modifier l’élément texte {value}",
"categories.removeElementAria": "Supprimer l’élément {type} {value}",
"categories.tab.single": "Unique",
"categories.tab.bulk": "Import en masse",
"categories.uniqueIdLabel": "ID unique",
"categories.parentLabel": "Parent",
"categories.noneRoot": "Aucun (racine)",
"categories.descriptionLabel": "Description",
"categories.csvUploadHelp": "Importez un CSV avec les colonnes name, unique_id, et éventuellement parent_unique_id et description.",
"categories.downloadTemplate": "Télécharger le modèle",
"categories.variableNameKey": "Nom (clé)",
"categories.displayName": "Nom affiché",
"categories.exampleValue": "Valeur dexemple",
"categories.variableExists": "Une variable nommée \"{name}\" existe déjà.",
"categories.addVariable": "Ajouter une variable",
"categories.updateVariable": "Mettre à jour la variable",
"categories.col.displayName": "Nom affiché",
"categories.col.key": "Clé",
"categories.col.description": "Description",
"categories.col.example": "Exemple",
"categories.noVariablesFound": "Aucune variable trouvée",
"categories.availableVariables": "Variables disponibles",
"categories.manage": "Gérer",
"categories.noVariablesMatch": "Aucune variable ne correspond à “{query}”.",
"categories.noUnusedVariables": "Plus de variables inutilisées. Ajoutez une variable personnalisée, ou retirez un élément pour en libérer une.",
"categories.exampleColon": "Exemple : {value}",
"categories.editVariableAria": "Modifier {label}",
"categories.deleteVariableAria": "Supprimer {label}",
"categories.addVariableAria": "Ajouter {label}",
"categories.textLabel": "Texte",
"categories.textAppearsAsWritten": "Ce texte apparaîtra exactement tel qu’écrit dans vos titres",
"categories.addTextButton": "Ajouter du texte",
"categories.updateTextButton": "Mettre à jour le texte",
"categories.structureDescriptionsFor": "Structurez les descriptions produits pour {name}",
"categories.metaInformation": "Informations meta",
"categories.metaInformationHelp": "Instructions utilisées par lIA pour les balises de titre SEO et de meta description.",
"categories.metaTitleFormula": "Formule de meta titre",
"categories.metaTitleHint": "Affiché dans les résultats de recherche et les onglets du navigateur (environ 5060 caractères).",
"categories.metaDescriptionFormula": "Formule de meta description",
"categories.metaDescriptionHint": "Affiché sous le titre dans les résultats de recherche (environ 120155 caractères).",
"categories.resetToDefault": "Réinitialiser par défaut",
"categories.descriptionSections": "Sections de description",
"categories.descriptionSectionsHelp": "Glissez les sections pour définir lordre de la description générée.",
"categories.noSectionsYet": "Pas encore de sections",
"categories.addSectionsHint": "Ajoutez un titre, un paragraphe ou une liste pour commencer.",
"categories.aiInstructions": "Instructions IA",
"categories.exportIdOptional": "ID dexport (facultatif)",
"categories.exportIdUnique": "LID dexport doit être unique",
"categories.addSection": "Ajouter une section",
"categories.aboutDescriptionFormulas": "À propos des formules de description",
"categories.aboutDescriptionFormulasHelp": "Ces instructions indiquent à lIA comment rédiger les descriptions des produits de cette catégorie.",
"categories.sectionTypesHeading": "Types de section",
"categories.sectionTypeHeadings": "Titres (H1H4) :",
"categories.sectionTypeHeadingsHelp": "Titres et sous-titres",
"categories.sectionTypeParagraphs": "Paragraphes :",
"categories.sectionTypeParagraphsHelp": "Blocs de contenu principaux",
"categories.sectionTypeLists": "Listes à puces :",
"categories.sectionTypeListsHelp": "Fonctionnalités et specs",
"categories.aiInstructionsHeading": "Instructions IA",
"categories.aiInstructionsBody": "Écrivez un objectif clair par section (contenu, ton, longueur). Des consignes floues produisent un texte flou.",
"categories.exportIdsHeading": "IDs dexport",
"categories.exportIdsBody": "Les IDs facultatifs associent une section aux flux dexport (par exemple short_description).",
"categories.assignDescCopyHelp": "Utilisez Assigner pour copier ce modèle vers dautres catégories qui doivent partager la même structure.",
"categories.descriptionFormulaInvalid": "Cette page de formule de description nécessite une catégorie valide. Revenez aux catégories et rouvrez Modifier la formule de description.",
"categories.sectionType.h1": "Titre 1",
"categories.sectionType.h2": "Titre 2",
"categories.sectionType.h3": "Titre 3",
"categories.sectionType.h4": "Titre 4",
"categories.sectionType.p": "Paragraphe",
"categories.sectionType.ul": "Liste à puces",
"categories.aiGenerationPrompt": "Prompt de génération IA",
"categories.aiPromptOverrides": "Remplace le prompt utilisateur damélioration produit de lentreprise pour {name}",
"categories.promptTemplate": "Modèle de prompt",
"categories.promptTemplateHelp": "Utilisez des espaces réservés comme {{name}} et {{description}}. Laissez vide pour utiliser la valeur par défaut de lentreprise dans Intégrations → IA.",
"categories.clear": "Effacer",
"categories.promptLabel": "Invite",
"categories.charactersCount": "{count} caractères",
"categories.activeOverride": "· remplacement actif pour cette catégorie",
"categories.usingCompanyDefault": "· utilisation de la valeur par défaut de lentreprise / intégrée",
"categories.usingCompanyDefaultForLang": "· vide pour cette langue — la valeur par défaut entreprise / intégrée sapplique",
"categories.aiPromptSavedLang": "Prompt IA enregistré pour {lang}.",
"categories.aiPromptClearedLang": "Prompt IA effacé pour {lang} (la valeur par défaut de lentreprise sappliquera).",
"contentLang.switcherLabel": "Langue de contenu",
"contentLang.primary": "principal",
"contentLang.hasOverride": "personnalisé",
"contentLang.addLanguage": "Ajouter une langue…",
"contentLang.add": "Ajouter",
"contentLang.removeLanguage": "Retirer {lang}",
"contentLang.resultsHint": "Changez de langue pour examiner les titres et descriptions IA de chaque langue de contenu.",
"contentLang.settingsTitle": "Langues de contenu",
"contentLang.settingsHelp": "La langue principale est utilisée par défaut. Les langues supplémentaires ont leurs propres prompts et résultats IA (chaque passage consomme des crédits).",
"ai.prompts.languageHelp": "Modifiez les prompts de lentreprise par langue de contenu. Une langue vide utilise la valeur intégrée par défaut pour cette langue.",
"header.accountSettingsAria": "Paramètres du compte pour {email}",
"switcher.switchUserAria": "Changer dutilisateur : {label}",
"switcher.unavailable": "Le changement dutilisateur nest pas disponible dans cet environnement.",
"switcher.loadFailed": "Impossible de charger les utilisateurs.",
"support.notifications.aria": "Notifications dassistance",
"support.notifications.ariaUnread": "Notifications dassistance, {count} non lues",
"time.never": "Jamais",
"time.invalid": "Date invalide",
"time.unknown": "Date inconnue",
"time.justNow": "à linstant",
"time.neverUsed": "Jamais utilisé",
"billing.plan.enterprise": "Entreprise",
"news.heading": "Mises à jour de la plateforme",
"news.subtitle": "Dernières fonctionnalités et améliorations",
"news.keyFeatures": "Fonctionnalités clés :",
"news.badge.new": "Nouveau",
"news.footer": "Cest tout pour le moment — revenez après la prochaine version.",
"news.category.enhancement": "Amélioration",
"news.category.feature": "Fonctionnalité",
"news.category.integration": "Intégration",
"news.category.newFeature": "Nouvelle fonctionnalité",
"news.category.billing": "Facturation",
"news.uxImprovements.description": "Utilisabilité renforcée avec contrôles du guide, améliorations API et meilleure navigation.",
"news.uxImprovements.f1": "Ignorer/masquer le guide",
"news.uxImprovements.f2": "Améliorations de fiabilité de lAPI",
"news.uxImprovements.f3": "Navigation dinterface améliorée",
"news.uxImprovements.f4": "Meilleure efficacité du flux de travail",
"news.multiselect.title": "Prise en charge des attributs multisélection",
"news.multiselect.description": "Les produits peuvent avoir plusieurs valeurs pour les attributs de type liste.",
"news.multiselect.f1": "Type dattribut multisélection",
"news.multiselect.f2": "Sélection multiple à l’édition produit",
"news.multiselect.f3": "Plusieurs valeurs sur un seul attribut",
"news.multiselect.f4": "Extraction améliorée pour champs multisélection",
"news.multiselect.f5": "Meilleure compatibilité des flux dexport",
"news.csvEan.title": "Téléversement CSV dEAN",
"news.csvEan.description": "Téléversez des CSV dEAN pour traiter des centaines de produits dun coup.",
"news.csvEan.f1": "Téléversement CSV glisser-déposer",
"news.csvEan.f2": "Validation du format EAN (EAN-8, EAN-13, UPC-12, GTIN-14)",
"news.csvEan.f3": "Détection automatique des doublons",
"news.csvEan.f4": "Traitement produit en masse",
"news.csvEan.f5": "Statistiques de traitement détaillées",
"news.brick.title": "Prise en charge des attributs code BRICK",
"news.brick.description": "Système dattributs avec codes BRICK pour classification et export standardisés.",
"news.brick.f1": "Gestion des attributs code BRICK",
"news.brick.f2": "Formatage automatique des codes à lexport",
"news.brick.f3": "Intégration des codes BRICK dans les flux XML",
"news.brick.f4": "Améliorations de compatibilité des flux dexport",
"news.apiV1.title": "Publication de lAPI v1",
"news.apiV1.description": "Nouveaux endpoints API v1 pour catégories, attributs, flux, produits et exports.",
"news.apiV1.f1": "Endpoints RESTful de lAPI v1",
"news.apiV1.f2": "Gestion des catégories et attributs",
"news.apiV1.f3": "Création et gestion des flux",
"news.apiV1.f4": "Traitement des produits via API",
"news.apiV1.f5": "Accès programmatique aux flux dexport",
"news.apiV1.f6": "Authentification et autorisation",
"news.feedFiltering.title": "Filtrage des flux sur la page produits",
"news.feedFiltering.description": "Page produits avec filtrage de flux optimisé, états de chargement et meilleures perfs.",
"news.feedFiltering.f1": "Filtrage des flux amélioré",
"news.feedFiltering.f2": "États de chargement améliorés",
"news.feedFiltering.f3": "Performance des requêtes optimisée",
"news.feedFiltering.f4": "Meilleure gestion de la pagination",
"news.feedFiltering.f5": "Améliorations de la fonctionnalité dexport",
"news.exportFeeds.title": "Système de flux dexport",
"news.exportFeeds.description": "Système complet de flux dexport XML/CSV avec configurations personnalisées.",
"news.exportFeeds.f1": "Formats dexport XML et CSV",
"news.exportFeeds.f2": "Mappage de champs personnalisé",
"news.exportFeeds.f3": "Aperçu de lexport",
"news.exportFeeds.f4": "Export produit basé sur des tâches",
"news.exportFeeds.f5": "Intégration des données EPREL",
"news.exportFeeds.f6": "URL publiques des flux dexport",
"news.woocommerce.title": "Intégration WooCommerce",
"news.woocommerce.description": "Synchronisez produits, catégories et attributs avec les boutiques WooCommerce.",
"news.woocommerce.f1": "Configuration des identifiants boutique",
"news.woocommerce.f2": "Mappage catégories et attributs",
"news.woocommerce.f3": "Sync produit bidirectionnelle",
"news.woocommerce.f4": "Options de stratégie de correspondance",
"news.eprel.title": "Intégration des étiquettes énergétiques EPREL",
"news.eprel.description": "Intégration au registre européen d’étiquetage énergétique pour les données defficacité.",
"news.eprel.f1": "Traitement automatique des ID EPREL",
"news.eprel.f2": "Récupération des images d’étiquette énergétique",
"news.eprel.f3": "Téléchargements des fiches énergétiques produit",
"news.eprel.f4": "Extraction de la classe énergétique",
"news.eprel.f5": "Prise en charge multilingue",
"news.aiCategorization.title": "Catégorisation produit améliorée",
"news.aiCategorization.description": "Système de catégorisation IA plus précis avec support hiérarchique.",
"news.aiCategorization.f1": "Navigation hiérarchique des catégories",
"news.aiCategorization.f2": "Score de confiance",
"news.aiCategorization.f3": "Prise en charge multilingue",
"news.aiCategorization.f4": "Gestion automatique des repli",
"news.standardFields.title": "Gestion des champs standard",
"news.standardFields.description": "Gérez les champs produit standard avec groupes, validation et valeurs par défaut.",
"news.standardFields.f1": "Organisation par groupes de champs",
"news.standardFields.f2": "Champs système et personnalisés",
"news.standardFields.f3": "Règles de validation des champs",
"news.standardFields.f4": "Prise en charge des valeurs par défaut",
"news.standardFields.f5": "Configuration automatique des champs",
"news.billingSystem.title": "Facturation basée sur les crédits",
"news.billingSystem.description": "Nouveau système de facturation par crédits avec suivi dusage et options de paiement flexibles.",
"news.billingSystem.f1": "Traitement basé sur les crédits",
"news.billingSystem.f2": "Analytique dusage",
"news.billingSystem.f3": "Cycles de facturation flexibles",
"news.billingSystem.f4": "Gestion des moyens de paiement",
"news.billingSystem.f5": "Génération de factures",
"products.pageTitle": "Gestion des produits",
"products.pageDescriptionStoresBefore": "Gérez, traitez et optimisez votre catalogue. Connectez une boutique ou importez un CSV via",
"products.pageDescriptionBasic": "Gérez, traitez et optimisez votre catalogue. Importez via Feeds ou téléversez un CSV.",
"products.keyboard.esc": "— fermez le panneau d'édition ou les dialogues",
"products.keyboard.toggle": "— afficher/masquer cet conseil",
"products.keyboard.reviewPrefix": "Dans le panneau Needs Review :",
"products.keyboard.acceptAll": "tout accepter",
"products.keyboard.rejectShort": "rejeter",
"products.keyboard.acceptFields": "accepter nom / description",
"products.connectStore": "Connecter la boutique",
"products.updating": "Mise à jour…",
"products.needLinkedRaw": "Les produits sélectionnés nécessitent un produit brut lié pour être traités.",
"products.selectToProcess": "Sélectionnez au moins un produit à traiter.",
"products.undoResetHint": "Annuler renvoie le produit à non traité via une réinitialisation.",
"products.field.accepted": "{label} accepté dans le produit.",
"products.field.acceptFailed": "Impossible d'accepter {field}",
"products.field.discarded": "Enrichissement {label} ignoré.",
"products.field.discardFailed": "Impossible d'ignorer {field}",
"products.upgradeRequired": "Mise à niveau requise",
"products.upgradeBody": "Cette fonctionnalité nécessite une offre payante ou des crédits IA.",
"products.enrichment.rejectTitle": "Rejeter l'enrichissement ?",
"products.enrichment.rejectSelectedTitle": "Rejeter les produits sélectionnés ?",
"products.enrichment.resetTitle": "Réinitialiser à non traité ?",
"products.selectedOnPage": "{count} sélectionnés sur cette page",
"products.selectionPageOnly": "Affichage de {shown} sur {total} — sélection limitée à cette page",
"products.edit.coverageHint": "Combien de Nom, Description, Attributs et Catégorie sont présents (flux ou traités).",
"products.edit.noEprelShort": "Sans EPREL",
"products.edit.specs": "Specs",
"products.edit.reviewBannerBody": "Utilisez longlet Révision pour comparer originaux et IA. Raccourcis : A accepter · R rejeter · Alt+1/2 champ · ⌘/Ctrl+Entrée tout accepter.",
"products.edit.whatsFilled": "Ce qui est renseigné",
"products.edit.legend": "Gray = missing · Orange = from flux · Green = processed",
"products.edit.updatedAgo": "· mis à jour {relative}",
"products.edit.status": "Statut",
"products.edit.noRawUpdate": "No raw produit update time",
"products.edit.feedSyncPart": "· sync du flux",
"products.edit.filledFields": "{filled} renseignés · {total} champs",
"products.edit.noMappedFields": "No mapped flux fields on this produit.",
"products.edit.emptyBadge": "Vide",
"products.edit.coreBadge": "Cœur",
"products.edit.feedAttrsHint": "Valeurs extraites du flux (spécifications HTML, garantie, dimensions, EPREL). Les clés sont liées à attribute_key lorsque possible.",
"products.edit.originalAttrs": "Attributs dorigine",
"products.edit.aiAttrs": "Attributs IA / enrichis",
"mapping.confidence.exact": "Exact",
"mapping.confidence.alias": "Alias",
"mapping.confidence.fuzzy": "Flou",
"field.group.basic": "Informations de base",
"field.group.pricing": "Tarification",
"field.group.media": "Médias",
"field.group.taxonomy": "Taxonomie",
"field.group.inventory": "Inventaire",
"field.group.attributes": "Attributs",
"field.group.shipping": "Expédition",
"field.group.compliance": "Conformité",
"field.group.other": "Autre",
"common.yes": "Oui",
"common.no": "Non",
"status.running": "En cours",
"flash.admin.analyticsLoadFailed": "Échec du chargement des analyses",
"flash.admin.diagnosticsLoadFailed": "Échec du chargement des diagnostics",
"flash.admin.diagnosticsUnavailable": "Les diagnostics ne sont pas disponibles sur ce déploiement. Contactez ladministrateur de la plateforme.",
"flash.admin.diagnosticsUnreachable": "Impossible datteindre lAPI de diagnostics. Vérifiez que lAPI tourne et que PUBLIC_API_URL / le proxy Vite pointent vers elle.",
"admin.charts.statusEmpty": "Aucune ligne dans cette répartition pour linstant.",
"admin.charts.seriesEmpty": "Aucune donnée pour cette période.",
"admin.charts.primaryDefault": "Principal",
"admin.charts.statusAria": "Répartition par statut",
"admin.charts.seriesAria": "Graphique {label}",
"admin.analytics.lastNDaysAria": "{days} derniers jours",
"admin.analytics.overview": "Vue d'ensemble",
"admin.analytics.overviewHint": "Totaux plateforme avec contexte de période pour les {days} derniers jours.",
"admin.analytics.tokensInPeriod": "{tokens} sur la période · issus des produits traités",
"admin.analytics.creditsRemainingOf": "{remaining} restants sur {allocated} alloués",
"admin.analytics.noJobsYet": "Aucun job pour linstant",
"admin.analytics.feedsVolume": "{input} entrants · {export} feeds dexport",
"admin.analytics.usersCompaniesRaw": "{users} utilisateurs · {companies} entreprises · {raw} bruts",
"admin.analytics.operations": "Opérations",
"admin.analytics.operationsHint": "Signaux de fiabilité, clés et croissance pour la période sélectionnée.",
"admin.analytics.failedCompleted": "{failed} échoués · {completed} terminés",
"admin.analytics.runningOver2h": "En cours > 2 h ·",
"admin.analytics.apiKeysTotal": "{total} au total (révoquées incluses)",
"admin.analytics.signupsDetail": "utilisateurs · {companies} entreprises · {tickets} tickets ouverts/en attente",
"admin.analytics.providerMix": "Mix de fournisseurs",
"admin.analytics.providerMixHint": "Consommation de tokens selon la configuration des identifiants IA.",
"admin.analytics.productsJobs": "{products} produits · {jobs} jobs",
"admin.analytics.trends": "Tendances",
"admin.analytics.trendsHint": "Séries quotidiennes pour tokens, fournisseurs, jobs et inscriptions.",
"admin.analytics.tokensByDayHint": "Tokens du traitement produit terminé (secondaire = produits ce jour-là)",
"admin.analytics.seriesTokens": "Jetons",
"admin.analytics.seriesProducts": "Produits",
"admin.analytics.emptyTokens": "Aucun produit traité avec tokens sur cette période.",
"admin.analytics.tokensByProviderHint": "Répartition quotidienne : interne / populaire / personnalisé (par type de fournisseur)",
"admin.analytics.emptyProviderTokens": "Aucun token étiqueté fournisseur sur cette période.",
"admin.analytics.providerDayTip": "{date} : Interne {internal} · Populaire {popular} · Personnalisé {custom}",
"admin.analytics.seriesCreated": "Créé",
"admin.analytics.seriesFailed": "Échoué",
"admin.analytics.emptyJobsSeries": "Aucun job de traitement créé sur cette période.",
"admin.analytics.seriesUsers": "Utilisateurs",
"admin.analytics.seriesCompanies": "Entreprises",
"admin.analytics.emptySignups": "Aucune inscription utilisateur ou entreprise sur cette période.",
"admin.analytics.statusMix": "Mix de statuts",
"admin.analytics.statusMixHint": "Files historiques pour jobs, sync de feeds et support.",
"admin.analytics.jobStatus": "Statut des jobs",
"admin.analytics.feedSyncQueue": "File de sync des feeds",
"admin.analytics.supportTickets": "Tickets support",
"admin.analytics.emptyJobStatus": "Aucun job de traitement pour linstant.",
"admin.analytics.emptyFeedSync": "Aucun job de sync de feeds pour linstant.",
"admin.analytics.emptyTickets": "Aucun ticket support pour linstant.",
"admin.analytics.usageDetail": "Détail dutilisation",
"admin.analytics.usageDetailHint": "Modes fournisseur, principales entreprises et cumuls de cycles de facturation.",
"admin.analytics.companyUsage": "Usage par entreprise",
"admin.analytics.jobsCol": "Jobs",
"admin.analytics.billingCycles": "Facturation cycles",
"admin.analytics.billingCyclesHint": "Cumuls historiques des cycles passés (peuvent retarder par rapport à labonnement actif)",
"admin.analytics.periodCol": "Période",
"admin.analytics.creditsCol": "Crédits",
"admin.analytics.dataNotes": "Notes sur les données",
"admin.diagnostics.endpointNotMounted": "Endpoint non monté",
"admin.diagnostics.noPayload": "Aucune charge utile de diagnostic",
"admin.diagnostics.unavailableShort": "Les diagnostics ne sont pas disponibles sur ce déploiement.",
"admin.diagnostics.fixThenRefresh": "Corrigez lerreur ci-dessus, puis actualisez.",
"admin.diagnostics.refreshOrConfirm": "Actualisez ou confirmez que lAPI est saine.",
"admin.diagnostics.systemStatus": "État du système",
"admin.diagnostics.snapshot": "Instantané {when}",
"admin.diagnostics.queueTotal": "{total} au total",
"admin.diagnostics.queueStuck": "processing_jobs · bloqués en cours (>2 h) :",
"admin.diagnostics.driver": "Pilote : {driver}",
"admin.diagnostics.openStuck": "Ouvrir les produits bloqués",
"admin.diagnostics.configPresence": "Présence de configuration",
"admin.diagnostics.configHint": "Booléens uniquement · env {env} · RPM {rpm} · lot {batch} · tentatives {retries}",
"admin.diagnostics.cutoverTitle": "Préparation cutover",
"admin.diagnostics.cutoverHint": "Indicateurs de présence uniquement — indices goose, âge worker, plans manquants. Pas de Stripe/SMTP live.",
"admin.diagnostics.cutoverGoose": "Goose",
"admin.diagnostics.cutoverGooseVersion": "version_max {max} · attendu ≥ {min}",
"admin.diagnostics.cutoverGooseRequired": "Migrations requises",
"admin.diagnostics.cutoverWorker": "Worker",
"admin.diagnostics.cutoverWorkerAge": "vu il y a {age}s · périmé après {stale}s",
"admin.diagnostics.cutoverWorkerAgeUnknown": "âge indisponible · périmé après {stale}s",
"admin.diagnostics.cutoverPlansMissing": "Entreprises sans plan",
"admin.diagnostics.cutoverPlansUnavailable": "Compte des plans indisponible",
"admin.diagnostics.cutoverApiKeysMissing": "Companies without API keys",
"admin.diagnostics.cutoverApiKeysUnavailable": "API key inventory unavailable",
"admin.diagnostics.cutoverApiKeysHint": "Legacy keys were not migrated — tenants must create a new dk_ key (no fake import).",
"admin.diagnostics.cutoverApiKeysLink": "List companies needing reissue",
"admin.diagnostics.cutoverApplied": "appliquée",
"admin.diagnostics.cutoverPending": "en attente",
"admin.diagnostics.etlInventoryTitle": "ETL gap inventory",
"admin.diagnostics.etlInventoryHint": "Read-only COUNTs — no fake import. Blob bytes and default job history stay unmigrated unless ops ran optional domain jobs.",
"admin.diagnostics.etlInventoryFiles": "Files metadata-only",
"admin.diagnostics.etlInventoryFilesDetail": "metadata-only / total file rows",
"admin.diagnostics.etlInventoryJobs": "Jobs migrated tag",
"admin.diagnostics.etlInventoryJobsDefault": "jobs domain not run (empty history expected)",
"admin.diagnostics.etlInventoryJobsRan": "optional jobs domain backfill detected",
"admin.diagnostics.etlInventoryTasks": "Tasks rows",
"admin.diagnostics.etlInventoryTasksDetail": "legacy task history present in Postgres",
"admin.diagnostics.recentJobs": "Tâches récentes",
"admin.diagnostics.recentAiFailures": "Échecs IA support récents",
"admin.diagnostics.aiFailuresHint": "support_ticket_activity · kind=ai_failed",
"admin.diagnostics.relatedTools": "Outils ops associés",
"admin.diagnostics.toolStuckTitle": "Produits bloqués",
"admin.diagnostics.toolStuckDesc": "Nettoyer les jobs en cours depuis plus de 2 heures.",
"admin.diagnostics.toolOrphanTitle": "Orphan processed",
"admin.diagnostics.toolOrphanDesc": "Cutover ops #7 — dry-run report, then confirm delete.",
"admin.diagnostics.toolAnalyticsTitle": "Analytique",
"admin.diagnostics.toolAnalyticsDesc": "Tendances et graphiques dusage plateforme.",
"admin.diagnostics.toolBootstrapTitle": "Bootstrap",
"admin.diagnostics.toolBootstrapDesc": "Confirmer laccès admin plateforme pour ce compte.",
"admin.diagnostics.toolSettingsTitle": "Paramètres",
"admin.diagnostics.toolSettingsDesc": "Messagerie, IA et mode système de la plateforme.",
"admin.diagnostics.config.maintenance_mode": "Mode maintenance",
"admin.diagnostics.config.read_only_mode": "Mode lecture seule",
"admin.diagnostics.config.session_secure": "Cookie de session sécurisé",
"admin.diagnostics.config.smtp_enabled": "SMTP activé",
"admin.diagnostics.config.email_dry_run": "Email dry-run",
"admin.diagnostics.config.smtp_host_set": "Hôte SMTP défini",
"admin.diagnostics.config.stripe_mock": "Stripe mock",
"admin.diagnostics.config.eprel_enabled": "EPREL activé",
"admin.diagnostics.config.upload_dir_configured": "Répertoire dupload configuré",
"admin.diagnostics.config.trusted_proxies_configured": "Proxys de confiance définis",
"admin.diagnostics.config.web_origin_set": "Origine web définie",
"admin.diagnostics.config.public_api_url_set": "URL API publique définie",
"admin.diagnostics.config.token_signing_secret_set": "Secret de signature des tokens défini",
"admin.diagnostics.config.openai_key_set": "Clé OpenAI définie",
"admin.diagnostics.config.pinecone_key_set": "Clé Pinecone définie",
"admin.diagnostics.config.stripe_secret_set": "Secret Stripe défini",
"admin.diagnostics.config.stripe_webhook_secret_set": "Secret webhook Stripe défini",
"admin.diagnostics.config.stripe_mock_rejected_in_prod": "Mock Stripe rejeté en production",
"admin.diagnostics.config.credentials_encryption_key_set": "Clé de chiffrement des identifiants définie",
"categories.selectAll": "Tout sélectionner",
"categories.selectedCount": "{count} sélectionnés",
"categories.noMatchingCategories": "Aucune catégorie correspondante",
"categories.assigningProgress": "Attribution… {progress}%",
"categories.assignToCount": "Assigner à {count}",
"categories.aiPromptSavedForCategory": "Un prompt de génération IA est enregistré pour cette catégorie.",
"categories.titleAndDescriptionFormulasSaved": "Les formules de titre et de description sont enregistrées pour cette catégorie.",
"categories.titleFormulaSavedForCategory": "Une formule de titre est enregistrée pour cette catégorie.",
"categories.descriptionFormulaSavedForCategory": "Une formule de description est enregistrée pour cette catégorie.",
"site.account": "Compte",
"site.goToApp": "Aller à lapp",
"site.logIn": "Connexion",
"site.getStarted": "Commencer",
"site.nav.primary": "Principal",
"site.nav.mobile": "Mobile",
"site.nav.home": "Accueil",
"site.nav.pricing": "Tarifs",
"site.nav.apiDocs": "Docs API",
"seo.home.title": "Descrybe — Transformez les flux fournisseurs en fiches produit prêtes",
"seo.home.description": "Connectez des flux CSV ou XML de fournisseurs, mappez-les à vos catégories et attributs, générez des titres et descriptions conformes à vos règles, puis exportez ou synchronisez avec WooCommerce.",
"seo.pricing.title": "Tarifs — Free, Starter, Growth, Business | Descrybe",
"seo.pricing.description": "Commencez gratuitement avec 100 produits et le mapping de flux. Les offres payantes ajoutent titres et descriptions IA, plus de SKU, flux d'export et sync WooCommerce — à partir de 49 $/mois. Enterprise pour les catalogues illimités.",
"seo.privacy.title": "Politique de confidentialité | Descrybe",
"seo.privacy.description": "Comment Descrybe collecte, utilise et protège les données de compte, catalogues de produits et flux fournisseurs lorsque vous utilisez notre plateforme de données produit.",
"seo.terms.title": "Conditions d'utilisation | Descrybe",
"seo.terms.description": "Conditions d'utilisation de Descrybe : import de flux, enrichissement de catalogue, contenu assisté par IA, exports et synchronisation WooCommerce pour votre entreprise.",
"seo.features.title": "Fonctionnalités — Flux, enrichissement et export | Descrybe",
"seo.features.description": "Découvrez comment Descrybe importe les flux fournisseurs, mappe les champs à votre taxonomie, enrichit les données produit et diffuse les catalogues via flux d'export, WooCommerce ou API.",
"pricing.page.eyebrow": "Tarifs",
"pricing.page.title": "Des offres simples pour des catalogues en croissance",
"pricing.page.lead": "Commencez gratuitement avec le mapping de flux et un nettoyage de base. Passez à un plan supérieur quand vous avez besoin de titres et descriptions IA, de plus de produits, dexports ou de la sync WooCommerce — de Starter à Enterprise.",
"pricing.page.subscribedBefore": "Déjà abonné ? Gérez lusage sous",
"pricing.page.subscribedMid": "ou comparez les offres dans",
"pricing.page.plansLink": "Offres",
"pricing.page.subscribedAfter": ".",
"legal.lastUpdated": "Dernière mise à jour : {date}",
"legal.backHome": "← Retour à laccueil",
"legal.emailLabel": "E-mail :",
"legal.postalLabel": "Adresse postale :",
"legal.privacy.title": "Politique de confidentialité",
"legal.privacy.intro.h": "Introduction",
"legal.privacy.intro.p1": "Chez Descrybe (\"nous\", \"notre\" ou \"nos\"), nous respectons votre vie privée et nous engageons à protéger vos informations personnelles. La présente Politique de confidentialité explique comment nous collectons, utilisons, divulguons et protégeons vos informations lorsque vous utilisez la plateforme de données produit de Descrybe et les services associés (collectivement, les \"Services\").",
"legal.privacy.intro.p2": "En accédant à nos Services ou en les utilisant, vous acceptez les pratiques décrites dans la présente Politique de confidentialité. Si vous n'êtes pas d'accord avec les politiques et pratiques décrites ici, veuillez ne pas utiliser nos Services.",
"legal.privacy.collect.h": "Informations que nous collectons",
"legal.privacy.collect.lead": "Nous collectons plusieurs types d'informations auprès des utilisateurs de nos Services et à leur sujet, notamment :",
"legal.privacy.collect.personal.h": "Informations personnelles",
"legal.privacy.collect.personal.p": "Lorsque vous créez un compte, nous collectons des informations pouvant servir à vous identifier, telles que votre nom, adresse e-mail, numéro de téléphone, nom d'entreprise et informations de facturation. Nous collectons ces informations directement auprès de vous lorsque vous nous les fournissez.",
"legal.privacy.collect.userData.h": "Données utilisateur",
"legal.privacy.collect.userData.p": "Pour fournir nos Services, nous collectons et traitons des données produit, des flux fournisseurs, des descriptions de produits et tout autre contenu que vous téléversez, saisissez ou soumettez autrement sur notre plateforme. Cela peut inclure des attributs produit, des structures de taxonomie, des modèles et d'autres données nécessaires au fonctionnement de nos Services.",
"legal.privacy.collect.usage.h": "Informations d'utilisation",
"legal.privacy.collect.usage.p": "Nous collectons automatiquement certaines informations sur votre appareil et sur la façon dont vous interagissez avec nos Services, notamment l'adresse IP, le type d'appareil, le type de navigateur, le système d'exploitation, les heures d'accès, les pages consultées, les fonctionnalités utilisées et toute autre activité système. Nous utilisons ces informations pour améliorer nos Services et l'expérience utilisateur.",
"legal.privacy.collect.cookies.h": "Cookies et technologies de suivi",
"legal.privacy.collect.cookies.p": "Nous utilisons des cookies, des balises web et des technologies de suivi similaires pour collecter des informations sur vos activités de navigation sur notre site. Vous pouvez contrôler les cookies via les paramètres de votre navigateur et d'autres outils. Toutefois, si vous bloquez certains cookies, vous pourriez ne pas pouvoir utiliser toutes les fonctionnalités de nos Services.",
"legal.privacy.use.h": "Comment nous utilisons vos informations",
"legal.privacy.use.lead": "Nous utilisons les informations collectées à diverses fins, notamment pour :",
"legal.privacy.use.li1": "Fournir, maintenir et améliorer nos Services",
"legal.privacy.use.li2": "Traiter les transactions et envoyer les informations associées, y compris confirmations, factures et notifications de service",
"legal.privacy.use.li3": "Développer de nouveaux produits, services, fonctionnalités et capacités",
"legal.privacy.use.li4": "Personnaliser votre expérience et proposer du contenu et des fonctionnalités pertinents pour vos intérêts",
"legal.privacy.use.li5": "Répondre à vos demandes, commentaires et questions",
"legal.privacy.use.li6": "Vous envoyer des avis techniques, des mises à jour, des alertes de sécurité ainsi que des messages d'assistance et d'administration",
"legal.privacy.use.li7": "Surveiller et analyser les tendances, l'utilisation et les activités liées à nos Services",
"legal.privacy.use.li8": "Détecter, enquêter et prévenir les transactions frauduleuses et autres activités illégales",
"legal.privacy.use.li9": "Protéger nos droits, notre propriété et notre sécurité, ainsi que les droits, la propriété et la sécurité de nos utilisateurs ou de tiers",
"legal.privacy.use.li10": "Respecter les obligations légales et faire appliquer nos conditions d'utilisation",
"legal.privacy.ai.h": "IA et apprentissage automatique",
"legal.privacy.ai.p1": "Nos Services utilisent des technologies d'intelligence artificielle et d'apprentissage automatique pour traiter les données produit, générer du contenu et fournir d'autres fonctionnalités automatisées. Les données que vous fournissez à nos Services peuvent être utilisées pour entraîner et améliorer nos modèles d'IA. Nous mettons toutefois en œuvre des garanties appropriées pour protéger vos données et préserver leur confidentialité.",
"legal.privacy.ai.p2": "Nous n'utilisons pas d'informations personnellement identifiables pour entraîner nos modèles d'IA généraux sans votre consentement explicite. Les données produit utilisées pour l'entraînement de l'IA sont anonymisées et agrégées dans la mesure du possible.",
"legal.privacy.share.h": "Comment nous partageons vos informations",
"legal.privacy.share.lead": "Nous pouvons partager vos informations dans les circonstances suivantes :",
"legal.privacy.share.providers.h": "Prestataires de services",
"legal.privacy.share.providers.p": "Nous pouvons partager vos informations avec des fournisseurs tiers, prestataires de services, sous-traitants ou agents qui exécutent des services pour notre compte, tels que le traitement des paiements, l'analyse de données, l'envoi d'e-mails, l'hébergement, le support client et l'assistance marketing.",
"legal.privacy.share.transfers.h": "Transferts d'entreprise",
"legal.privacy.share.transfers.p": "Si nous participons à une fusion, une acquisition, un financement, une réorganisation, une faillite ou une cession d'actifs de l'entreprise, vos informations peuvent être transférées dans le cadre de cette opération. Nous vous informerons de tout changement de ce type concernant la propriété ou le contrôle de vos informations personnelles.",
"legal.privacy.share.legal.h": "Exigences légales",
"legal.privacy.share.legal.p": "Nous pouvons divulguer vos informations si la loi l'exige ou en réponse à des demandes valides d'autorités publiques (p. ex. un tribunal ou un organisme gouvernemental). Nous pouvons également divulguer vos informations pour faire appliquer nos conditions d'utilisation, protéger nos droits, notre vie privée, notre sécurité ou notre propriété, et/ou ceux de nos affiliés, utilisateurs ou de tiers.",
"legal.privacy.share.consent.h": "Avec votre consentement",
"legal.privacy.share.consent.p": "Nous pouvons partager vos informations avec des tiers lorsque vous nous avez donné votre consentement à cet effet.",
"legal.privacy.security.h": "Sécurité des données",
"legal.privacy.security.p1": "Nous avons mis en œuvre des mesures techniques et organisationnelles appropriées destinées à protéger vos informations personnelles contre la perte accidentelle et contre l'accès, l'utilisation, l'altération et la divulgation non autorisés. Toutes les informations que vous nous fournissez sont stockées sur des serveurs sécurisés derrière des pare-feu.",
"legal.privacy.security.p2": "La sécurité de vos informations dépend également de vous. Lorsque nous vous avons fourni (ou que vous avez choisi) un mot de passe pour accéder à certaines parties de nos Services, vous êtes responsable du maintien de la confidentialité de ce mot de passe. Nous vous demandons de ne partager votre mot de passe avec personne.",
"legal.privacy.security.p3": "Malheureusement, la transmission d'informations via Internet n'est pas totalement sécurisée. Bien que nous fassions de notre mieux pour protéger vos informations personnelles, nous ne pouvons garantir la sécurité des informations personnelles transmises à nos Services. Toute transmission d'informations personnelles s'effectue à vos propres risques.",
"legal.privacy.rights.h": "Vos droits et choix",
"legal.privacy.rights.lead": "Nous nous efforçons de vous offrir des choix concernant les informations personnelles que vous nous fournissez. Selon votre localisation, vous pouvez disposer de certains droits relatifs à vos informations personnelles, notamment :",
"legal.privacy.rights.li1": "Accéder à vos informations personnelles et les mettre à jour",
"legal.privacy.rights.li2": "Demander la suppression de vos informations personnelles",
"legal.privacy.rights.li3": "Vous opposer au traitement de vos informations personnelles ou le restreindre",
"legal.privacy.rights.li4": "La portabilité des données",
"legal.privacy.rights.li5": "Retirer votre consentement (le cas échéant)",
"legal.privacy.rights.footer": "Pour exercer vos droits, veuillez nous contacter à l'aide des coordonnées figurant à la fin de la présente Politique de confidentialité. Notez que certains de ces droits peuvent être limités ou non applicables selon votre localisation et les circonstances particulières.",
"legal.privacy.retention.h": "Conservation des données",
"legal.privacy.retention.p1": "Nous conserverons vos informations personnelles aussi longtemps que nécessaire pour atteindre les finalités décrites dans la présente Politique de confidentialité, sauf si une durée de conservation plus longue est exigée ou autorisée par la loi. Pour déterminer la durée de conservation, nous prenons en compte la quantité, la nature et la sensibilité des informations, le risque potentiel de préjudice en cas d'utilisation ou de divulgation non autorisée, les finalités du traitement et les exigences légales applicables.",
"legal.privacy.retention.p2": "Nous pouvons conserver certaines informations après la fermeture de votre compte, notamment pour respecter nos obligations légales, résoudre des litiges et faire appliquer nos accords.",
"legal.privacy.intl.h": "Transferts internationaux de données",
"legal.privacy.intl.p1": "Vos informations personnelles peuvent être transférées et traitées dans des pays autres que celui dans lequel vous résidez. Ces pays peuvent disposer de lois sur la protection des données différentes de celles de votre pays.",
"legal.privacy.intl.p2": "Si nous transférons vos informations personnelles vers des pays situés hors de l'Espace économique européen ou d'autres régions disposant de lois complètes sur la protection des données, nous veillerons à ce que des garanties appropriées soient en place pour protéger vos informations personnelles et à ce que le transfert soit conforme à la réglementation applicable en matière de protection des données.",
"legal.privacy.children.h": "Confidentialité des mineurs",
"legal.privacy.children.p": "Nos Services ne sont pas destinés aux personnes de moins de 16 ans, et nous ne collectons pas sciemment d'informations personnelles auprès de mineurs de moins de 16 ans. Si nous apprenons que nous avons collecté ou reçu des informations personnelles d'un mineur de moins de 16 ans sans vérification du consentement parental, nous supprimerons ces informations. Si vous pensez que nous pourrions détenir des informations provenant d'un mineur de moins de 16 ans ou le concernant, veuillez nous contacter.",
"legal.privacy.changes.h": "Modifications de notre Politique de confidentialité",
"legal.privacy.changes.p1": "Nous pouvons mettre à jour notre Politique de confidentialité de temps à autre. Si nous apportons des modifications substantielles à la manière dont nous traitons les informations personnelles des utilisateurs, nous vous en informerons par e-mail à l'adresse indiquée dans votre compte et/ou via un avis sur notre site web.",
"legal.privacy.changes.p2": "La date de la dernière révision de la Politique de confidentialité figure en haut de la page. Il vous incombe de vous assurer que nous disposons d'une adresse e-mail à jour, active et joignable, et de consulter périodiquement notre site web et la présente Politique de confidentialité pour vérifier s'il y a des modifications.",
"legal.privacy.contact.h": "Contact",
"legal.privacy.contact.lead": "Si vous avez des questions ou des préoccupations concernant notre Politique de confidentialité ou nos pratiques en matière de données, veuillez nous contacter à :",
"legal.terms.title": "Conditions d'utilisation",
"legal.terms.s1.h": "1. Acceptation des conditions",
"legal.terms.s1.p": "En accédant à la plateforme de données produit de Descrybe et aux services associés (collectivement, les \"Services\") ou en les utilisant, vous acceptez d'être lié par les présentes Conditions d'utilisation et par toutes les lois et réglementations applicables. Si vous n'êtes pas d'accord avec l'une quelconque de ces conditions, il vous est interdit d'utiliser ou d'accéder aux Services.",
"legal.terms.s2.h": "2. Licence d'utilisation",
"legal.terms.s2.p1": "Sous réserve du respect des présentes Conditions d'utilisation, Descrybe vous accorde une licence limitée, non exclusive, non transférable et révocable pour accéder aux Services et les utiliser à des fins professionnelles.",
"legal.terms.s2.lead": "Cette licence n'inclut pas :",
"legal.terms.s2.li1": "La modification ou la copie des Services ou de tout contenu qu'ils contiennent",
"legal.terms.s2.li2": "L'utilisation des Services à toute fin commerciale autre que l'usage professionnel autorisé",
"legal.terms.s2.li3": "La tentative de décompilation ou d'ingénierie inverse de tout logiciel contenu dans les Services",
"legal.terms.s2.li4": "La suppression de tout avis de droits d'auteur ou de propriété des matériaux",
"legal.terms.s2.li5": "Le transfert des matériaux à une autre personne ou le \"miroir\" des matériaux sur tout autre serveur",
"legal.terms.s2.p2": "Cette licence prendra fin automatiquement si vous violez l'une quelconque de ces restrictions et pourra être résiliée par Descrybe à tout moment.",
"legal.terms.s3.h": "3. Abonnement et paiement",
"legal.terms.s3.p1": "L'accès aux Services peut nécessiter un abonnement payant. Les conditions de paiement seront précisées lors du processus d'abonnement. Tous les paiements sont non remboursables, sauf indication écrite contraire de Descrybe.",
"legal.terms.s3.p2": "Descrybe se réserve le droit de modifier les tarifs d'abonnement moyennant un préavis raisonnable. L'utilisation continue des Services après une modification tarifaire constitue l'acceptation des nouveaux tarifs.",
"legal.terms.s4.h": "4. Contenu utilisateur",
"legal.terms.s4.p1": "Vous conservez tous les droits sur tout contenu que vous soumettez, publiez ou affichez sur ou via les Services (\"Contenu utilisateur\"). En fournissant du Contenu utilisateur à Descrybe, vous accordez à Descrybe une licence mondiale, non exclusive et libre de redevances pour utiliser, reproduire, modifier, adapter, publier, traduire et distribuer ce contenu dans le cadre de la fourniture des Services.",
"legal.terms.s4.lead": "Vous déclarez et garantissez que :",
"legal.terms.s4.li1": "Vous détenez ou contrôlez tous les droits sur le Contenu utilisateur que vous fournissez",
"legal.terms.s4.li2": "Le Contenu utilisateur ne viole pas les présentes Conditions d'utilisation",
"legal.terms.s4.li3": "Le Contenu utilisateur ne causera de préjudice à aucune personne ni entité",
"legal.terms.s5.h": "5. Intelligence artificielle",
"legal.terms.s5.p1": "Les Services utilisent des technologies d'intelligence artificielle et d'apprentissage automatique. Vous reconnaissez que le contenu généré par IA peut ne pas être parfait et acceptez de relire tout contenu généré par IA avant de l'utiliser dans vos opérations commerciales.",
"legal.terms.s5.p2": "Descrybe peut utiliser du Contenu utilisateur anonymisé et agrégé pour entraîner et améliorer nos modèles d'IA, sous réserve de notre Politique de confidentialité. Vous pouvez refuser que vos données soient utilisées pour l'entraînement de l'IA en nous contactant.",
"legal.terms.s6.h": "6. Propriété intellectuelle",
"legal.terms.s6.p": "Les Services ainsi que leur contenu, leurs fonctionnalités et leurs capacités d'origine sont la propriété de Descrybe et sont protégés par les lois internationales sur le droit d'auteur, les marques, les brevets, les secrets commerciaux et autres droits de propriété intellectuelle ou de propriété.",
"legal.terms.s7.h": "7. Exclusion de garanties",
"legal.terms.s7.p1": "Les Services sont fournis \"en l'état\" et \"selon disponibilité\". Descrybe n'émet aucune garantie, expresse ou implicite, et décline par les présentes toutes les garanties, y compris, sans limitation, les garanties implicites de qualité marchande, d'adéquation à un usage particulier, d'absence de contrefaçon ou de cours d'exécution.",
"legal.terms.s7.p2": "Descrybe ne garantit pas que les Services fonctionneront de manière ininterrompue, sécurisée ou disponible à un moment ou un lieu particulier, ni que les erreurs ou défauts seront corrigés.",
"legal.terms.s8.h": "8. Limitation de responsabilité",
"legal.terms.s8.lead": "En aucun cas Descrybe ne pourra être tenu responsable de dommages indirects, accessoires, spéciaux, consécutifs ou punitifs, y compris, sans limitation, la perte de bénéfices, de données, d'usage, de clientèle ou d'autres pertes intangibles, résultant de :",
"legal.terms.s8.li1": "Votre accès aux Services ou leur utilisation, ou l'impossibilité d'y accéder ou de les utiliser",
"legal.terms.s8.li2": "Toute conduite ou tout contenu de tiers sur les Services",
"legal.terms.s8.li3": "Tout contenu obtenu à partir des Services",
"legal.terms.s8.li4": "L'accès, l'utilisation ou l'altération non autorisés de vos transmissions ou de votre contenu",
"legal.terms.s9.h": "9. Résiliation",
"legal.terms.s9.p1": "Descrybe peut résilier ou suspendre votre accès aux Services immédiatement, sans préavis ni responsabilité, pour quelque motif que ce soit, y compris, sans limitation, si vous violez les présentes Conditions d'utilisation.",
"legal.terms.s9.p2": "En cas de résiliation, votre droit d'utiliser les Services cessera immédiatement. Si vous souhaitez résilier votre compte, vous pouvez simplement cesser d'utiliser les Services ou nous contacter pour demander la suppression du compte.",
"legal.terms.s10.h": "10. Droit applicable",
"legal.terms.s10.p": "Les présentes Conditions sont régies et interprétées conformément aux lois de la Slovénie, sans égard aux principes de conflit de lois.",
"legal.terms.s11.h": "11. Modifications des conditions",
"legal.terms.s11.p": "Descrybe se réserve le droit de modifier ou de remplacer les présentes Conditions d'utilisation à tout moment. Il vous incombe de consulter périodiquement ces Conditions pour y déceler d'éventuelles modifications. L'utilisation continue des Services après la publication de toute modification constitue l'acceptation de ces modifications.",
"legal.terms.s12.h": "12. Contact",
"legal.terms.s12.lead": "Si vous avez des questions concernant les présentes Conditions d'utilisation, veuillez nous contacter à :",
"plans.loadFailed": "Impossible de charger les plans",
"plans.loading": "Chargement des plans…",
"plans.apiUnavailable": "L'API des plans n'est pas encore disponible sur ce backend. Affichage de la comparaison publique des tarifs.",
"plans.title": "Choisissez votre plan",
"plans.sub.onPrefix": "Vous êtes sur",
"plans.sub.enterpriseSuffix": "— produits et IA illimités. Aucune mise à niveau en libre-service n'est nécessaire.",
"plans.sub.paygSuffix": "— paiement à l'usage. Comparez les plans publics ci-dessous, ou contactez les ventes pour Enterprise.",
"plans.sub.creditsMid": "avec {remaining} crédits IA restants.",
"plans.sub.creditsSuffix": "Passez de Starter → Growth → Business via Checkout, ou contactez les ventes pour Enterprise.",
"plans.sub.none": "Aucun plan n'est encore attribué (par exemple après une migration ignorée). Choisissez un plan ci-dessous — la capacité n'est pas Illimitée tant que Checkout ou un administrateur n'en a pas attribué un.",
"plans.stripeHint": "Les mises à niveau en libre-service utilisent Stripe Checkout.",
2026-08-16 11:37:42 +02:00
"plans.checkoutUnavailable": "Le paiement en libre-service est indisponible tant que Stripe n'est pas configuré. Contactez les ventes pour un forfait.",
"plans.fallbackName": "Offre",
"plans.fallbackDescription": "Capacité pour votre catalogue",
"plans.badge.current": "Actuel",
"plans.badge.popular": "Le plus populaire",
"plans.price.custom": "Sur mesure",
"plans.price.forever": "pour toujours",
"plans.price.perMonth": "/mois",
"plans.price.seePricing": "Voir les tarifs",
"plans.capacity.unlimitedSkus": "SKU illimités",
"plans.capacity.unlimitedAi": "Crédits IA illimités",
"plans.capacity.upToProducts": "Jusqu'à {count} produits",
"plans.capacity.creditsPerMonth": "{count} crédits IA / mois",
"plans.cta.requestUpgrade": "Demander une mise à niveau",
"plans.cta.current": "Plan actuel",
"plans.cta.contactSales": "Contacter les ventes",
"plans.cta.switchInBilling": "Changer dans la facturation",
"plans.cta.upgradeTo": "Passer à {name}",
"plans.cta.startingCheckout": "Démarrage du checkout…",
"plans.planApplied": "Plan {plan} appliqué. Vos crédits sont prêts.",
"plans.faq.title": "Questions fréquentes",
"plans.faq.limit.q": "Que se passe-t-il si j'atteins une limite ?",
"plans.faq.limit.a": "Des bandeaux d'avertissement apparaissent d'abord. Lorsque vous n'avez plus de crédits IA ou que vous atteignez le plafond de SKU, les tâches nécessitant cette capacité sont bloquées jusqu'à ce que vous libériez de l'espace, attendiez le cycle suivant ou passiez à un plan supérieur.",
"plans.faq.selfServe.q": "Puis-je mettre à niveau moi-même ?",
"plans.faq.selfServe.a": "Les administrateurs de l'entreprise peuvent souscrire Starter, Growth et Business en libre-service via Checkout sur la carte du plan. Les membres doivent s'adresser à un administrateur — Checkout exige le rôle d'administrateur. Enterprise passe toujours par les ventes. Les administrateurs de plateforme peuvent toujours attribuer des plans dans Billing Admin.",
"plans.faq.enterprise.q": "Enterprise et des millions de SKU",
"plans.faq.enterprise.a": "La capacité sur mesure, la clé IA apportée (BYOK), le SLA et la gestion de compte passent par les ventes. Réservez un créneau via Calendly — Enterprise n'est pas en libre-service à l'échelle de millions de SKU. L'application affiche Illimité pour la capacité SKU et IA.",
"plans.faq.pricing.q": "Où trouver les tarifs publics ?",
"plans.faq.pricing.aBefore": "Consultez la comparaison marketing sur la",
"plans.faq.pricing.pricingPage": "page Tarifs",
"plans.faq.pricing.aMid": "— les CTA sont Commencer (inscription) ou Contacter les ventes. Gérez l'utilisation à tout moment dans",
"plans.faq.pricing.aAfter": ".",
"plans.custom.title": "Besoin d'un plan sur mesure ?",
"plans.custom.body": "La capacité Enterprise, la clé IA apportée et les SLA sont gérés avec notre équipe.",
"plans.custom.looking": "Vous cherchez les détails des plans publics ?",
"ai.title": "Intégrations IA",
"ai.description": "Choisissez les crédits de la plateforme ou votre propre clé, puis personnalisez les prompts avec des variables.",
"ai.crumb": "Intégrations IA",
"ai.adminOnly": "Seuls les administrateurs de lentreprise peuvent modifier les paramètres IA. Vous pouvez consulter la configuration actuelle.",
"ai.badge.ownKey": "Votre propre clé",
"ai.badge.platform": "Crédits / clé de la plateforme",
"ai.badge.active": "Actif : {label}",
"ai.badge.platformKeyAvailable": "Clé plateforme disponible",
"ai.badge.lastTest": "Dernier test : {status}",
"ai.providerMode.title": "Mode du fournisseur",
"ai.providerMode.desc": "La plateforme utilise les crédits Descrybe et notre clé. Populaire ou Personnalisé utilise votre clé compatible OpenAI (lappel au fournisseur ne consomme pas de crédits plateforme ; les règles de crédits des fonctionnalités sappliquent toujours).",
"ai.whoPays": "Qui paie le modèle ?",
"ai.mode.internal": "Plateforme (crédits / clé Descrybe)",
"ai.mode.popular": "Votre clé — fournisseur populaire",
"ai.mode.custom": "Votre clé — endpoint personnalisé",
"ai.useCompanyKey": "Utiliser cette clé dentreprise pour le traitement, le SEO IA et les campagnes IA",
"ai.popular.title": "Fournisseur populaire",
"ai.popular.desc": "Endpoints compatibles OpenAI. Anthropic via OpenRouter.",
"ai.field.provider": "Fournisseur",
"ai.field.model": "Modèle",
"ai.placeholder.modelId": "id du modèle",
"ai.baseUrlLabel": "URL de base : {url}",
"ai.custom.title": "Endpoint personnalisé",
"ai.custom.desc": "Saisissez lURL de base HTTPS de votre fournisseur dIA.",
"ai.field.baseUrl": "URL de base",
"ai.apiKey.title": "Clé API",
"ai.apiKey.desc": "Laissez vide pour conserver la clé existante. Les secrets bruts ne sont jamais renvoyés — uniquement un last4 masqué.",
"ai.storedKey": "Clé enregistrée : {masked}",
"ai.field.apiKey": "Clé API",
"ai.placeholder.keepKey": "•••• laissez vide pour conserver",
"ai.clearStoredKey": "Effacer la clé API enregistrée",
"ai.saveProvider": "Enregistrer le fournisseur",
"ai.testConnection": "Tester la connexion",
"ai.prompts.title": "Modèles de prompt",
"ai.prompts.descBefore": "Personnalisez les prompts système et utilisateur pour les textes produit, les méta SEO et les e-mails de campagne. Insérez des variables comme",
"ai.prompts.descMid": "— elles sont renseignées à lexécution. La voix du kit de marque est disponible sous",
"ai.prompts.descAfter": ".",
"ai.field.feature": "Fonctionnalité",
"ai.badge.custom": "Personnalisé",
"ai.badge.builtin": "Valeur par défaut intégrée",
"ai.badge.disabledDefault": "Désactivé → utilisation du défaut",
"ai.useCustomPrompt": "Utiliser ce prompt personnalisé (désactivé = défaut intégré)",
"ai.insertVariableInto": "Insérer la variable dans",
"ai.insert.system": "Système",
"ai.insert.user": "Utilisateur",
"ai.field.systemPrompt": "Prompt système",
"ai.field.userPrompt": "Prompt utilisateur",
"ai.savePrompts": "Enregistrer les prompts",
"ai.resetDefault": "Réinitialiser par défaut",
"ai.editBrandVoice": "Modifier la voix de marque",
"ai.flash.loadFailed": "Échec du chargement des paramètres IA",
"ai.flash.usingPlatform": "Utilisation de lIA de la plateforme (crédits / clé Descrybe lorsquils sont configurés).",
"ai.flash.providerSaved": "Fournisseur IA enregistré. Les clés sont chiffrées et ne sont plus affichées.",
"ai.flash.saveFailed": "Enregistrement impossible",
"ai.flash.savePromptsFailed": "Impossible denregistrer les prompts",
"ai.flash.resetFailed": "Impossible de réinitialiser le prompt",
"ai.flash.connectionFailed": "Échec de la connexion",
"ai.flash.testFailed": "Échec du test",
"ai.action.changeSettings": "modifier les paramètres du fournisseur IA",
"ai.action.changePrompts": "modifier les prompts IA",
"ai.action.testProvider": "tester le fournisseur IA",
"email.title": "Envoi de-mails",
"email.description": "Resend ou SMTP pour les campagnes marketing. Secrets chiffrés au repos.",
"email.adminOnly": "Seuls les administrateurs de lentreprise peuvent modifier les paramètres du fournisseur de-mail. Vous pouvez consulter la configuration actuelle.",
"email.crumb": "Intégration e-mail",
"email.dryRunForced": "Le mode dry-run est forcé ({reason}). Les plans Free et EMAIL_DRY_RUN nenvoient jamais de vrais envois massifs.",
"email.dryRunPolicy": "politique",
"email.badge.verified": "Vérifié",
"email.badge.notVerified": "Non vérifié",
"email.badge.canSendReal": "Envoi réel autorisé",
"email.badge.realBlocked": "Envoi réel bloqué",
"email.badge.lastTest": "Dernier test : {status}",
"email.provider.title": "Fournisseur",
"email.provider.desc": "Configuration par entreprise. Le SMTP/Resend denvironnement de la plateforme sert de secours uniquement en cas de secrets manquants.",
"email.field.provider": "Fournisseur",
"email.provider.resend": "Resend",
"email.provider.smtp": "SMTP",
"email.field.fromEmail": "E-mail de lexpéditeur",
"email.field.domain": "Domaine",
"email.field.from": "De",
"email.field.fromName": "Nom de lexpéditeur",
"email.field.replyTo": "Reply-To",
"email.resendKeySaved": "Clé API Resend (enregistrée — laissez vide pour conserver)",
"email.resendKey": "Clé API Resend",
"email.field.smtpHost": "Hôte SMTP",
"email.field.port": "Port",
"email.field.username": "Nom dutilisateur",
"email.field.passwordSaved": "Mot de passe (enregistré)",
"email.field.password": "Mot de passe",
"email.verifyDomain": "Vérifier le domaine",
"email.testGate.title": "Test et contrôle des envois",
"email.testGate.desc": "Les envois de test vérifient ladresse de lexpéditeur. Les vrais envois massifs exigent de saisir “I understand”.",
"email.field.recipient": "Destinataire",
"email.sendTest": "Envoyer un test",
"email.confirmBlast": "Confirmer lenvoi massif…",
"email.flash.loadFailed": "Échec du chargement des paramètres e-mail",
"email.flash.saveFailed": "Enregistrement impossible",
"email.flash.verifyUpdated": "Vérification mise à jour.",
"email.flash.verifyFailed": "Échec de la vérification",
"email.flash.testFailed": "Échec de lenvoi de test",
"email.flash.blastDryRun": "Contrôle de livraison enregistré en mode dry-run — aucun e-mail na été envoyé.",
"email.flash.blastDone": "Contrôle de livraison terminé : {sent} envoyés, {failed} échoués.",
"email.flash.blastFailed": "Échec de lenvoi massif",
"email.blast.subject": "Contrôle de livraison e-mail Descrybe",
"email.blast.body": "Ceci est un contrôle de livraison à une seule adresse depuis Descrybe pour confirmer que votre intégration e-mail peut envoyer. Destinataire : {recipient}",
"email.action.changeSettings": "modifier les paramètres du fournisseur de-mail",
"email.action.verifyDomain": "vérifier le domaine e-mail",
"email.action.sendTest": "envoyer un e-mail de test",
"email.action.sendBlasts": "envoyer des campagnes e-mail",
"seo.title": "Recommandations SEO",
"seo.description": "Scores de checklist pour les méta du catalogue, titres, images et mots-clés. Le remplissage par modèle est gratuit ; la réécriture IA est payante.",
"seo.upgradeTitle": "La réécriture IA est une fonctionnalité payante",
"seo.upgradeMessage": "Les plans Free peuvent encore corriger les méta manquantes avec des modèles basés sur des règles. Passez à un forfait supérieur ou ajoutez des crédits pour utiliser les réécritures IA.",
"seo.comparePlans": "Comparer les forfaits",
"seo.openProducts": "Ouvrir les produits",
"seo.overallScore": "Score SEO global",
"seo.overallScoreHint": "Moyenne des éléments de la checklist",
"seo.productsScanned": "Produits analysés",
"seo.productsScannedHint": "Produits traités dans lentreprise",
"seo.categoriesScanned": "Catégories analysées",
"seo.categoriesScannedHint": "Y compris les contrôles de formules méta",
"seo.aiRewrite": "Réécriture IA",
"seo.available": "Disponible",
"seo.gated": "Restreint",
"seo.templateFree": "Le remplissage par modèle reste gratuit sur tous les forfaits",
"seo.checklist": "Checklist",
"seo.affectedFindings": "{affected} concernés · {count} constats",
"seo.fixable": "Corrigeable",
"seo.clearFilter": "Effacer le filtre",
"seo.findings": "Constats",
"seo.noFindings": "Aucun constat pour ce filtre — beau travail.",
"seo.col.issue": "Problème",
"seo.col.entity": "Entité",
"seo.col.severity": "Gravité",
"seo.col.actions": "Actions",
"seo.filling": "Remplissage…",
"seo.templateFill": "Remplissage par modèle",
"seo.aiTitleAllowed": "Réécrire avec lIA (utilise des crédits)",
"seo.aiTitleGated": "Nécessite un forfait payant ou des crédits",
"seo.rewriting": "Réécriture…",
"seo.aiRewriteBtn": "Réécriture IA",
"seo.viewProduct": "Voir le produit",
"seo.flash.loadFailed": "Échec du chargement des recommandations SEO",
"seo.flash.aiPaid": "La réécriture IA nécessite un forfait payant ou des crédits.",
"seo.flash.applyFailed": "Échec de lapplication de la correction",
"brand.title": "Kit de marque",
"brand.description": "Définissez la voix, les consignes et les couleurs pour que les titres et descriptions produit restent fidèles à la marque.",
"brand.loading": "Chargement du kit de marque…",
"brand.adminOnly": "Seuls les administrateurs de lentreprise peuvent modifier le kit de marque. Vous pouvez consulter la voix, les couleurs et le logo actuels.",
"brand.aiApplyFreeAdmin": "Vous pouvez modifier votre kit de marque en Free. Lapplication IA (injection de la voix de marque dans les prompts damélioration) se débloque à partir de Starter.",
"brand.aiApplyGated": "Lapplication IA (injection de la voix de marque dans les prompts damélioration) se débloque à partir de Starter.",
"brand.aiEnhanceUses": "Lamélioration IA utilisera cette voix de marque lors du traitement des produits.",
"brand.comparePlans": "Comparer les forfaits",
"brand.voice.title": "Voix et consignes",
"brand.voice.desc": "Ton, règles à faire / à éviter et formulations préférées",
"brand.field.voiceTone": "Voix / ton",
"brand.placeholder.voiceTone": "ex. Assuré, concis, technique mais accessible",
"brand.field.dos": "À faire (une par ligne)",
"brand.placeholder.dos": "Commencez par le bénéfice principal\nGardez les titres sous 80 caractères",
"brand.field.donts": "À éviter (une par ligne)",
"brand.placeholder.donts": "Pas de MAJUSCULES\nÉvitez les superlatifs sans preuve",
"brand.field.preferredTerms": "Termes préférés (un par ligne ou séparés par des virgules)",
"brand.placeholder.preferredTerms": "sans fil, premium, classe énergétique",
"brand.visual.title": "Identité visuelle",
"brand.visual.desc": "Couleurs et logo utilisés dans les conseils et campagnes adaptés à la marque",
"brand.field.primaryColor": "Couleur primaire",
"brand.field.secondaryColor": "Couleur secondaire",
"brand.field.logoImage": "Image du logo",
"brand.logoHint": "PNG, JPEG ou WebP jusqu’à 2 MiB. Stocké dans les téléversements de votre entreprise.",
"brand.uploading": "Téléversement…",
"brand.uploadLogo": "Téléverser le logo",
"brand.clear": "Effacer",
"brand.field.logoUrl": "URL du logo",
"brand.placeholder.logoUrl": "https://… ou téléversé /api/brand/logo/files/…",
"brand.logoAlt": "Aperçu du logo de marque",
"brand.tipsTitle": "Conseils formule / aperçu",
"brand.saving": "Enregistrement…",
"brand.save": "Enregistrer le kit de marque",
"brand.flash.loadFailed": "Échec du chargement du kit de marque",
"structured.title": "Champs de description structurée",
"structured.loading": "Chargement des champs de description structurée…",
"structured.backDashboard": "Retour au tableau de bord",
"structured.categoryFormulas": "Formules de catégorie",
"structured.exportFeeds": "Flux dexport",
"structured.intro": "Ces champs sont créés automatiquement lorsque vous ajoutez des Export IDs aux sections de formule de description. Ils peuvent être utilisés dans vos flux dexport pour inclure des parties précises de vos descriptions produit.",
"structured.addField": "Ajouter un champ",
"structured.openCategories": "Ouvrir les catégories",
"structured.tableCaption": "Ces champs servent à structurer des parties des descriptions produit pour lexport.",
"structured.col.fieldKey": "Clé du champ",
"structured.col.type": "Type",
"structured.col.created": "Créé",
"structured.col.actions": "Actions",
"structured.dialogTitle": "Ajouter un champ de description structurée",
"structured.fieldKeyLabel": "Clé du champ (obligatoire)",
"structured.fieldKeyPlaceholder": "ex. features, specifications",
"structured.fieldTypeLabel": "Type de champ",
"structured.type.text": "Texte",
"structured.type.number": "Nombre",
"structured.type.boolean": "Booléen",
"structured.type.list": "Liste",
"structured.adding": "Ajout...",
"structured.flash.loadFailed": "Échec du chargement des champs de description structurée",
"assistant.ariaLabel": "Assistant système",
"assistant.title": "Assistant système",
"assistant.subtitle": "Naviguez, guidez et exécutez les actions prises en charge",
"assistant.resetAria": "Réinitialiser la conversation",
"assistant.resetTitle": "Réinitialiser",
"assistant.closeAria": "Fermer lassistant",
"assistant.messageLabel": "Message",
"assistant.placeholder": "ex. ajouter une URL de flux, clés API, attributs, traitement…",
"assistant.sendAria": "Envoyer",
"site.bookDemo": "Réserver une démo",
"site.demoShort": "Démo",
"site.allRightsReserved": "Tous droits réservés.",
"site.cookiePolicy": "Politique de cookies",
"site.cookieSettings": "Paramètres des cookies",
"consent.title": "Cookies et analytique",
"consent.description": "Nous utilisons des cookies nécessaires pour faire fonctionner Descrybe. Les cookies optionnels danalytique et de marketing nous aident à comprendre lusage et mesurer les campagnes. Vous pouvez modifier votre choix à tout moment.",
"consent.acceptAll": "Tout accepter",
"consent.rejectNonEssential": "Refuser les non essentiels",
"consent.customize": "Personnaliser",
"consent.save": "Enregistrer les préférences",
"consent.necessary": "Nécessaires",
"consent.necessaryDesc": "Requis pour la connexion, la sécurité (CSRF), le thème, la langue et mémoriser ce choix.",
"consent.alwaysOn": "Toujours actifs",
"consent.analytics": "Analytique",
"consent.analyticsDesc": "Aide à comprendre lusage du produit (Google Analytics via GTM).",
"consent.marketing": "Marketing",
"consent.marketingDesc": "Pour la mesure publicitaire et la personnalisation lorsque des balises ads sont configurées dans GTM.",
"consent.policyLink": "Lire la Politique de cookies",
"seo.cookies.title": "Politique de cookies | Descrybe",
"seo.cookies.description": "Comment Descrybe utilise les cookies nécessaires, analytiques et marketing, y compris GTM et GA4, et comment modifier votre consentement.",
"legal.cookies.title": "Politique de cookies",
"legal.cookies.intro.h": "Aperçu",
"legal.cookies.intro.p1": "Cette Politique de cookies explique comment Descrybe utilise les cookies et technologies similaires sur le site et lapplication. À lire avec notre Politique de confidentialité.",
"legal.cookies.intro.p2": "Lorsque requis, nous demandons votre consentement avant dactiver les cookies analytiques ou marketing. Les cookies nécessaires assurent le service de façon sécurisée et ne requièrent pas de consentement.",
"legal.cookies.types.h": "Catégories de cookies",
"legal.cookies.necessary.h": "Nécessaires",
"legal.cookies.necessary.p": "Ils maintiennent la session, protègent les formulaires (CSRF), stockent le thème et la langue, et mémorisent votre choix. Sans eux, le produit ne fonctionne pas correctement.",
"legal.cookies.analytics.h": "Analytique",
"legal.cookies.analytics.p": "Si vous autorisez lanalytique, nous chargeons des balises GTM pouvant déposer des cookies GA4 pour mesurer les pages et événements. Les événements sont bloqués tant que analytics_storage nest pas accordé.",
"legal.cookies.marketing.h": "Marketing",
"legal.cookies.marketing.p": "Si vous autorisez le marketing, les balises publicitaires GTM peuvent utiliser le stockage publicitaire et signaux associés pour la mesure et la personnalisation.",
"legal.cookies.gtm.h": "Google Tag Manager et GA4",
"legal.cookies.gtm.p": "Lorsquil est configuré, Descrybe charge un conteneur GTM. GA4 est configuré dans ce conteneur. Le Consent Mode v2 refuse par défaut le stockage analytique et publicitaire jusqu’à acceptation des catégories.",
"legal.cookies.third.h": "Tiers",
"legal.cookies.third.p": "Google (Tag Manager / Analytics) peut traiter des données techniques (URL, appareil/navigateur, noms d’événements) avec consentement. Nous nenvoyons pas volontairement mots de passe, clés API ou coordonnées dans les événements.",
"legal.cookies.manage.h": "Modifier votre consentement",
"legal.cookies.manage.p": "Utilisez Paramètres des cookies dans le pied de page (ou le bouton ci-dessous) pour rouvrir la bannière. Vous pouvez aussi effacer les données du site dans le navigateur.",
"site.privacyPolicy": "Politique de confidentialité",
"site.termsOfService": "Conditions dutilisation",
"site.legalNav": "Mentions légales",
"site.footer.aria": "Site",
"site.footer.description": "Descrybe transforme les flux fournisseurs en catalogues produits propres et prêts pour les canaux — mappez les champs, enrichissez attributs et textes, puis exportez ou synchronisez avec WooCommerce.",
"site.footer.rightsLine": "© {year} {name}. Tous droits réservés.",
"site.footer.navTitle": "Navigation",
"site.footer.platform": "Plateforme",
"site.footer.solutions": "Solutions",
"site.footer.contact": "Nous contacter",
"home.hero.tagline": "Données produit pour les équipes e-commerce",
"home.hero.title": "Des flux fournisseurs aux fiches produit",
"home.hero.lead": "Connectez des flux fournisseurs, mappez-les à vos catégories, renseignez les attributs requis et rédigez titres et descriptions selon vos règles — puis exportez ou synchronisez avec votre boutique.",
"home.hero.learnMore": "En savoir plus",
"home.hero.apply": "Demander laccès",
"home.hero.supportedBy": "Soutenu par",
"home.hero.msAlt": "Microsoft for Startups",
"home.image.previewAlt": "Aperçu de la plateforme Descrybe : du flux à la fiche produit",
"home.how.title": "Voici comment Descrybe vous fait gagner du temps pour mettre les produits en vente",
"home.how.lead": "Importez une fois des données fournisseurs en désordre. Descrybe vous aide à les catégoriser, compléter les attributs, rédiger les fiches et envoyer des produits prêts vers vos canaux.",
"home.how.apply": "Demander laccès",
"home.how.step1.title": "Importez votre taxonomie",
"home.how.step1.desc": "Configurez les catégories et attributs déjà utilisés par votre boutique",
"home.how.step1.f1": "Définissez les attributs obligatoires par catégorie",
"home.how.step1.f2": "Définissez des formules de titre par catégorie",
"home.how.step1.f3": "Définissez des modèles de description et dextrait de recherche",
"home.how.step2.title": "Importez les données fournisseurs",
"home.how.step2.desc": "Connectez une URL de flux ou téléversez un fichier produits",
"home.how.step2.f1": "Importez depuis CSV, XML ou API",
"home.how.step2.f2": "Planifiez des imports automatiques depuis vos fournisseurs",
"home.how.step2.f3": "Mappez les champs avec une interface simple en glisser-déposer",
"home.how.step3.title": "Transformez et enrichissez",
"home.how.step3.desc": "Choisissez les produits à traiter et laissez Descrybe :",
"home.how.step3.f1": "Attribuer les bonnes catégories",
"home.how.step3.f2": "Compléter les attributs produit requis",
"home.how.step3.f3": "Créer des titres et descriptions clairs et adaptés à la recherche",
"home.how.step4.title": "Exportez vers les canaux",
"home.how.step4.desc": "Envoyez des données produit prêtes là où vous vendez",
"home.how.step4.f1": "Générez des flux produit spécifiques par canal",
"home.how.step4.f2": "Gardez le contrôle total des champs exportés",
"home.how.step4.f3": "Restez à jour quand les données fournisseurs changent",
"home.benefits.title": "Tout ce quil faut pour des données produit plus propres",
"home.benefits.lead": "De limport de flux aux fiches prêtes pour le canal — sans reconstruire chaque fichier à la main.",
"home.benefits.shield.title": "Repérez tôt les fiches incomplètes",
"home.benefits.shield.desc": "Contrôlez les données selon les règles de catégorie pour corriger attributs manquants et textes faibles avant mise en ligne.",
"home.benefits.chart.title": "Fiches plus claires, meilleure conversion",
"home.benefits.chart.desc": "Titres et descriptions qui mettent en avant ce qui compte pour lacheteur — bénéfices, specs et termes de recherche de votre catalogue.",
"home.benefits.database.title": "Une structure produit cohérente",
"home.benefits.database.desc": "Gardez le même arbre de catégories et la même forme dattributs sur les exports et canaux pour que les clients trouvent les produits de la même façon partout.",
"home.benefits.search.title": "Contenu produit adapté à la recherche",
"home.benefits.search.desc": "Rédigez titres, descriptions et meta snippets plus faciles à comprendre pour acheteurs et moteurs de recherche.",
"home.benefits.cost.title": "Moins de saisie manuelle",
"home.benefits.cost.desc": "Automatisez mapping, remplissage dattributs et textes pour que l’équipe se concentre sur le merchandising — pas le nettoyage de tableurs.",
"home.benefits.scale.title": "Prêt pour chaque canal de vente",
"home.benefits.scale.desc": "Adaptez flux dexport et sync WooCommerce aux formats attendus par chaque canal, sans reconstruire le catalogue à la main.",
"home.cta.titleLead": "Mettez les produits sur le marché ",
"home.cta.titleHighlight": "plus vite",
"home.cta.description": "Arrêtez de reconstruire les données produit à chaque fichier fournisseur. Mappez une fois, enrichissez avec vos règles et publiez des fiches prêtes à vendre.",
"home.cta.f1": "Démo personnalisée",
"home.cta.f2": "Conseil dexperts",
"home.cta.f3": "Prochaines étapes claires",
"home.cta.apply": "Demander laccès",
"home.cta.imageAlt": "Pages produit Descrybe",
"home.product.eyebrow": "Ce que fait Descrybe",
"home.product.title": "Flux fournisseurs en entrée. Fiches prêtes en sortie — export, WooCommerce ou API.",
"home.product.description": "Descrybe aide les équipes e-commerce à transformer des flux CSV et XML fournisseurs en catalogues propres. Mappez vers vos catégories, enrichissez attributs et textes, puis livrez via exports, sync WooCommerce ou API publique.",
"home.product.pipelineAria": "Pipeline produit",
"home.product.p1.label": "Flux entrants",
"home.product.p1.detail": "CSV / XML depuis des URL fournisseurs",
"home.product.p2.label": "Mapper",
"home.product.p2.detail": "Associez les colonnes à vos champs",
"home.product.p3.label": "Enrichir",
"home.product.p3.detail": "Catégories, attributs, titres",
"home.product.p4.label": "Livrer",
"home.product.p4.detail": "Export · Woo · API",
"pricing.section.badge": "Capacité SKU + crédits IA",
"pricing.section.title": "Commencez gratuitement. Scalez quand le catalogue grandit.",
"pricing.section.lead": "Free inclut le mapping de flux, un nettoyage produit de base et les étiquettes énergétiques UE (EPREL) jusqu’à 100 SKU (sans crédits IA). Les offres payantes ajoutent titres et descriptions IA, plus de capacité et dexports — Starter, Growth, Business, ou contactez les ventes pour Enterprise.",
"pricing.section.billingPeriod": "Période de facturation",
"pricing.section.monthly": "Mensuel",
"pricing.section.yearly": "Annuel",
"pricing.section.savePercent": "Économisez 20 %",
"pricing.section.publicBefore": "Offres publiques : Free, Starter, Growth, Business et Enterprise. Créez un compte Free, puis passez à un plan supérieur sous",
"pricing.section.publicOr": "ou",
"pricing.section.publicAfter": "via Stripe Checkout. Enterprise reste géré par les ventes.",
"pricing.section.plansLink": "Offres",
"pricing.section.billingLink": "Facturation",
"pricing.section.capabilitiesTitle": "Ce pour quoi chaque offre est conçue",
"pricing.section.capabilitiesLead": "Importez des flux, enrichissez votre catalogue, puis exportez ou synchronisez avec WooCommerce",
"pricing.section.faqTitle": "Questions fréquentes",
"pricing.section.readyTitle": "Prêt à mapper votre premier flux ?",
"pricing.section.readyLead": "Créez un compte Free — sans carte. Déjà un compte ? Ouvrez lapp ou comparez les offres.",
"pricing.section.contactSales": "Contacter les ventes",
"pricing.cap.feeds": "Des flux au catalogue",
"pricing.cap.feeds.f1": "Flux fournisseurs CSV / XML / URL",
"pricing.cap.feeds.f2": "Mapping et validation des champs",
"pricing.cap.feeds.f3": "Fusion multi-fournisseurs",
"pricing.cap.feeds.f4": "Sync planifiée",
"pricing.cap.feeds.f5": "Transformations selon la catégorie",
"pricing.cap.processing": "Traitement et IA",
"pricing.cap.processing.f1": "Nettoyage des données et remplissage dattributs (toutes offres)",
"pricing.cap.processing.f2": "Titres et descriptions IA (payant)",
"pricing.cap.processing.f3": "Étiquettes énergétiques UE / EPREL (toutes offres)",
"pricing.cap.processing.f4": "Formules, voix de marque, variables",
"pricing.cap.processing.f5": "Crédits gérés ou votre propre clé IA",
"pricing.cap.export": "Export et canaux",
"pricing.cap.export.f1": "Flux dexport XML / CSV",
"pricing.cap.export.f2": "Sync WooCommerce / Shopify",
"pricing.cap.export.f3": "API complète",
"pricing.cap.export.f4": "Formats spécifiques par canal",
"pricing.cap.export.f5": "Mises à jour en masse",
"pricing.cap.limits": "Limites et contrôle",
"pricing.cap.limits.f1": "Plafonds SKU (produits)",
"pricing.cap.limits.f2": "Packs mensuels de crédits IA",
"pricing.cap.limits.f3": "Rôles et invitations d’équipe",
"pricing.cap.limits.f4": "Options SLA Enterprise",
"pricing.faq.credits.q": "Que sont les crédits IA ?",
"pricing.faq.credits.a": "Les crédits IA paient des étapes comme la génération de titres et descriptions. Free inclut 0 crédit IA — vous pouvez quand même mapper des flux et nettoyer les données. Packs mensuels payants : Starter 150, Plus 500, Growth 1 200, Business 4 000, Scale 8 000. Enterprise inclut un large pack géré (et votre propre clé). À partir de Growth, vous pouvez optionnellement utiliser votre propre clé.",
"pricing.faq.packs.q": "Can I buy extra AI credits?",
"pricing.faq.packs.a": "Yes. One-time packs: Starter $19 / 500 credits, Growth $59 / 2,000, Catalog $199 / 10,000, Scale $599 / 40,000. Buy from Billing after you have a paid plan (or Free with leftover trial credits). Packs do not change your SKU or feed limits.",
"pricing.faq.limits.q": "Que se passe-t-il si jatteins la limite produits ou crédits ?",
"pricing.faq.limits.a": "Nous vous prévenons à lapproche. Au plafond produits ou sans crédits IA, les jobs qui en ont besoin se mettent en pause jusqu’à libérer de la capacité, attendre le prochain cycle ou changer doffre.",
"pricing.faq.change.q": "Puis-je monter ou descendre doffre ?",
"pricing.faq.change.a": "Oui. Commencez sur Free, puis passez à Starter, Plus, Growth, Business ou Scale depuis Plans ou Facturation (Stripe Checkout). Enterprise est toujours géré par les ventes.",
"pricing.faq.free.q": "Que comprend Free ?",
"pricing.faq.free.a": "Free pour toujours : 50 produits, un flux, nettoyage et remplissage dattributs, étiquettes énergétiques UE (EPREL — données publiques, sans crédits), plus un export manuel — avec 0 crédit IA. Sans carte. Passez à une offre supérieure pour lIA ou plus de capacité.",
"pricing.faq.why.q": "Pourquoi ne pas payer par produit comme les outils de contenu seuls ?",
"pricing.faq.why.a": "Descrybe couvre le parcours complet du flux fournisseur au catalogue jusqu’à WooCommerce ou lexport — pas seulement le copy IA. Vous payez la capacité plateforme (produits et flux) ; lIA est une couche dusage par-dessus.",
"pricing.faq.annual.q": "Comment fonctionne la facturation annuelle ?",
"pricing.faq.annual.a": "La facturation annuelle offre environ 20 % de moins que le prix mensuel. Commencez gratuitement, puis choisissez lannuel au Checkout (ou contactez les ventes).",
"pricing.calc.badge": "Plan calculator",
"pricing.calc.title": "Find the right plan",
"pricing.calc.lead": "Enter feeds, catalog size, and how many products you want to enhance with AI (count each language pass).",
"pricing.calc.feeds": "Feed sources",
"pricing.calc.feedsHint": "Supplier / import feeds you need to connect",
"pricing.calc.skus": "Catalog products (SKUs)",
"pricing.calc.skusHint": "Total products you will store and process",
"pricing.calc.aiVolume": "AI process volume",
"pricing.calc.aiHint": "Roughly products × languages you want to enhance per month",
"pricing.calc.recommendedLabel": "Recommended",
"pricing.calc.budgetLabel": "Budget option",
"pricing.calc.coversCredits": "Needs about {count} AI credits / month",
"pricing.calc.aiIncluded": "Included monthly credits cover this AI volume",
"pricing.calc.aiNeedsPacks": "Add {count}× {pack} (~{usd}) for the AI shortfall",
"pricing.calc.orYearly": "or ~{amount}/mo yearly",
"pricing.calc.budgetNote": "Lower list price with yearly discount and/or credit packs when that still fits.",
"pricing.calc.noBudget": "The recommended plan is already the leanest fit for these inputs.",
"pricing.calc.enterpriseTitle": "Sounds like Enterprise",
"pricing.calc.enterpriseBody": "Your feeds or catalog size exceed self-serve caps. Talk to sales for unlimited capacity and a managed AI grant or BYOK.",
"pricing.calc.ctaPlan": "Choose {name}",
"pricing.calc.disclaimer": "Estimates use list prices and ~2 credits per AI product enhance. Checkout prices come from Stripe. A1 and other client deals stay admin-only.",
"pricing.card.mostPopular": "Le plus populaire",
"pricing.card.custom": "Sur mesure",
"pricing.card.forever": "pour toujours",
"pricing.card.perMonth": "mois",
"pricing.card.perYear": "an",
"pricing.card.savePerMonth": "Économisez ${amount}/mois",
"pricing.card.discountBadge": "-20 %",
"pricing.card.unlimitedSkus": "SKU illimités",
"pricing.card.oneMSkus": "1 M+ SKU",
"pricing.card.upToSkus": "Jusqu’à {count} SKU",
"pricing.card.unlimitedAi": "Crédits IA illimités",
"pricing.card.zeroCredits": "0 crédit IA / mois",
"pricing.card.creditsPerMonth": "{count} crédits IA / mois",
"pricing.card.showLess": "Afficher moins",
"pricing.card.showMoreFeature": "Afficher {count} fonction de plus",
"pricing.card.showMoreFeatures": "Afficher {count} fonctions de plus",
"pricing.card.upgradeTo": "Passer à {name}",
"pricing.plan.free.description": "Mappez un flux dexemple et nettoyez les données produit — sans carte",
"pricing.plan.starter.description": "Petits catalogues qui ont besoin de titres et descriptions IA",
"pricing.plan.plus.description": "Plus de produits, de flux et dIA pour les catalogues en croissance",
"pricing.plan.growth.description": "Flux multi-fournisseurs vers boutiques et exports shopping",
"pricing.plan.business.description": "Catalogues mid-market avec BYOK",
"pricing.plan.scale.description": "Catalogues à l’échelle distributeur avec support prioritaire",
"pricing.plan.enterprise.description": "Capacité illimitée, SLA et équipe compte dédiée",
"pricing.feature.credits100": "100 AI credits / month (~50% catalog cover)",
"pricing.feature.credits100starter": "100 AI credits / month (~50% catalog cover)",
"pricing.feature.credits400": "400 AI credits / month (~50% catalog cover)",
"pricing.feature.credits600": "600 AI credits / month (~10% credit base)",
"pricing.feature.credits1800": "1,800 AI credits / month (~6% credit base)",
"pricing.feature.credits2700": "2,700 AI credits / month (~15% credit base)",
"pricing.feature.credits5000base": "5,000 AI credits / month (~10% credit base)",
"pricing.feature.credits7000": "7,000 AI credits / month (~20% credit base)",
"pricing.feature.credits12000": "12,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits16000": "16,000 AI credits / month (~16% credit base)",
"pricing.feature.upTo1mSkus": "Up to 1,000,000 SKUs",
"pricing.feature.upTo15kSkus": "Up to 15,000 SKUs",
"pricing.feature.credits15000": "15,000 AI credits / month (~75% catalog cover)",
"pricing.feature.credits60000": "60,000 AI credits / month (~75% catalog cover)",
"pricing.feature.upTo50Skus": "Jusqu’à 50 SKU",
"pricing.feature.upTo100Skus": "Up to 100 SKUs",
"pricing.feature.upTo400Skus": "Up to 400 SKUs",
"pricing.feature.upTo1200Skus": "Up to 1,200 SKUs",
"pricing.feature.upTo4kSkus": "Up to 4,000 SKUs",
"pricing.feature.upTo12kSkus": "Up to 12,000 SKUs",
"pricing.feature.oneFeedSource": "1 source de flux",
"pricing.feature.twoFeedSources": "2 feed sources",
"pricing.feature.threeFeedSources": "3 sources de flux",
"pricing.feature.fourFeedSources": "4 feed sources",
"pricing.feature.sixFeedSources": "6 feed sources",
"pricing.feature.twelveFeedSources": "12 feed sources",
"pricing.feature.twentyFiveFeedSources": "25 feed sources",
"pricing.feature.cleanData": "Nettoyer les données, analyser les specs et remplir les champs",
"pricing.feature.eprel": "Étiquettes énergétiques UE (EPREL)",
"pricing.feature.zeroCredits": "0 crédit IA / mois",
"pricing.feature.oneManualExport": "1 flux dexport manuel",
"pricing.feature.twoExports": "2 export feeds",
"pricing.feature.fourExports": "4 export feeds",
"pricing.feature.wooTestOnly": "Test de connexion WooCommerce uniquement",
"pricing.feature.upTo2Seats": "Jusqu’à 2 sièges",
"pricing.feature.aiTitles": "Titres et descriptions IA",
"pricing.feature.liveStoreSync": "Sync boutique en direct",
"pricing.feature.apiAccess": "Accès API",
"pricing.feature.byok": "Apportez votre propre clé IA",
"pricing.feature.upTo500Skus": "Jusqu’à 500 SKU",
"pricing.feature.upTo1000Skus": "Up to 1,000 SKUs",
"pricing.feature.fiveFeedSources": "5 feed sources",
"pricing.feature.fiveExports": "5 export feeds",
"pricing.feature.credits250": "250 AI credits / month (~25% catalog cover)",
"pricing.feature.credits1000": "1,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits1000full": "1,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits10000full": "10,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits50000full": "50,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits100000": "100,000 AI credits / month (full primary-language catalog)",
"pricing.feature.credits225000": "225,000 AI credits / month (~75% catalog cover)",
"pricing.feature.credits12500": "12,500 AI credits / month (~25% catalog cover)",
"pricing.feature.credits30000": "30,000 AI credits / month (~20% catalog cover)",
"pricing.feature.upTo75kSkus": "Up to 75,000 SKUs",
"pricing.feature.threeExports": "3 flux dexport",
"pricing.feature.sixExports": "6 export feeds",
"pricing.feature.tenExports": "10 export feeds",
"pricing.feature.fullWooSync": "Sync WooCommerce complète",
"pricing.feature.readApi": "Accès API en lecture",
"pricing.feature.emailSupport": "Support e-mail",
"pricing.feature.creditPacks": "Buy extra AI credit packs",
"pricing.feature.upTo2500Skus": "Jusqu’à 2 500 SKU",
"pricing.feature.upTo1500Skus": "Up to 1,500 SKUs",
"pricing.feature.upTo3500Skus": "Up to 3,500 SKUs",
"pricing.feature.upTo9500Skus": "Up to 9,500 SKUs",
"pricing.feature.upTo18kSkus": "Up to 18,000 SKUs",
"pricing.feature.upTo55kSkus": "Up to 55,000 SKUs",
"pricing.feature.upTo5000Skus": "Up to 5,000 SKUs",
"pricing.feature.eightFeedSources": "8 sources de flux",
"pricing.feature.credits500": "500 crédits IA / mois",
"pricing.feature.credits1250": "1,250 AI credits / month (~25% catalog cover)",
"pricing.feature.credits5000": "5,000 AI credits / month (~25% catalog cover)",
"pricing.feature.eightExports": "8 flux dexport",
"pricing.feature.fifteenExports": "15 export feeds",
"pricing.feature.wooShopifySync": "Sync WooCommerce + Shopify complète",
"pricing.feature.upTo10kSkus": "Jusqu’à 10 000 SKU",
"pricing.feature.upTo25kSkus": "Up to 25,000 SKUs",
"pricing.feature.fifteenFeedSources": "15 sources de flux",
"pricing.feature.tenFeedSources": "10 feed sources",
"pricing.feature.twentyFeedSources": "20 feed sources",
"pricing.feature.thirtyFeedSources": "30 feed sources",
"pricing.feature.credits1200": "1 200 crédits IA / mois",
"pricing.feature.credits10000": "10,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits25000": "25,000 AI credits / month (~50% catalog cover)",
"pricing.feature.twentyExports": "20 flux dexport",
"pricing.feature.fortyExports": "40 export feeds",
"pricing.feature.fullFormulas": "Formules et variables complètes",
"pricing.feature.fullApi": "Accès API complet",
"pricing.feature.byokAddon": "Option bring-your-own-key",
"pricing.feature.emailSupport24h": "Support e-mail (24 h)",
"pricing.feature.upTo40kSkus": "Jusqu’à 40 000 SKU",
"pricing.feature.upTo50kSkus": "Up to 50,000 SKUs",
"pricing.feature.fortyFeedSources": "40 sources de flux",
"pricing.feature.fiftyFeedSources": "50 feed sources",
"pricing.feature.credits4000": "4 000 crédits IA / mois",
"pricing.feature.credits40000": "40,000 AI credits / month (~50% catalog cover)",
"pricing.feature.credits50000half": "50,000 AI credits / month (~50% catalog cover)",
"pricing.feature.unlimitedExports": "Flux dexport illimités",
"pricing.feature.fullApiWebhooks": "API complète",
"pricing.feature.byokIncluded": "Votre propre clé IA incluse",
"pricing.feature.priorityEmail": "Support e-mail prioritaire",
"pricing.feature.upTo100kSkus": "Jusqu’à 100 000 SKU",
"pricing.feature.upTo150kSkus": "Up to 150,000 SKUs",
"pricing.feature.hundredFeedSources": "100 sources de flux",
"pricing.feature.hundredFiftyFeedSources": "150 feed sources",
"pricing.feature.credits8000": "8 000 crédits IA / mois",
"pricing.feature.credits50000": "50,000 AI credits / month (~25% catalog cover)",
"pricing.feature.credits120000": "120,000 AI credits / month (~40% catalog cover)",
"pricing.feature.prioritySlack": "Support prioritaire + Slack",
"pricing.feature.unlimitedSkus": "SKU illimités",
"pricing.feature.unlimitedFeeds": "Sources de flux illimitées",
"pricing.feature.unlimitedAiOwnKey": "Crédits IA illimités / clé propre",
"pricing.feature.ssoWebhooksAm": "SSO, gestionnaire de compte dédié",
"pricing.feature.customIntegrations": "Intégrations sur mesure",
"pricing.feature.slaPriority": "SLA et support prioritaire",
"pricing.pack.tiny.name": "Nano pack",
"pricing.pack.tiny.desc": "Smoke tests / tiny fixes (25 credits ≈ 12 AI products)",
"pricing.pack.small.name": "Starter pack",
"pricing.pack.small.desc": "Extra AI for fixes and tests (~250 products)",
"pricing.pack.medium.name": "Growth pack",
"pricing.pack.medium.desc": "Keep enhancing after the monthly plan allowance (~1,000 products)",
"pricing.pack.large.name": "Catalog pack",
"pricing.pack.large.desc": "Big top-up for large catalogs and re-runs (~5,000 products)",
"pricing.pack.xl.name": "Scale pack",
"pricing.pack.xl.desc": "Heavy usage / agency bursts (~20,000 products)",
"pricing.pack.xxl.name": "Business pack",
"pricing.pack.xxl.desc": "Large multi-language buffer (3,000 credits ≈ 1,500 AI products)",
"pricing.pack.mega.name": "Scale pack",
"pricing.pack.mega.desc": "Distributor / agency burst (8,000 credits ≈ 4,000 AI products)",
"pricing.section.faqDescription": "Réponses claires sur les forfaits, les crédits et ce quinclut Free.",
"billing.buyCreditPacks": "Buy AI credit packs",
"billing.buyCreditPacksHint": "Plans cover ~75% of your SKU cap with AI. Top up anytime for the rest, fixes, and tests — without changing your plan.",
"billing.packCredits": "{credits} crédits",
"billing.packApproxProducts": "~{count} AI products",
"billing.buyPack": "Buy",
"billing.checkoutCompletePack": "Credit pack purchased — {credits} AI credits added.",
"billing.packCheckoutFailed": "Could not start credit pack checkout.",
"empty.default.noItems": "Aucun élément trouvé.",
"settings.tabLockedHint": "Not on your plan",
"stores.connectorLocked": "Not on your plan",
"stores.connectorUpgrade": "Upgrade to unlock",
"plan.upgrade.title": "Cette fonctionnalité nest pas dans votre forfait",
"plan.upgrade.message": "Passez à un forfait supérieur pour débloquer cette partie de Descrybe.",
"plan.upgrade.defaultMessage": "Votre forfait actuel ninclut pas cette partie de Descrybe. Passez à un forfait supérieur pour la débloquer, ou demandez à un admin de lentreprise si vous ne pouvez pas modifier la facturation.",
"plan.upgrade.sectionOff.title": "Cette fonctionnalité est temporairement indisponible",
"plan.upgrade.sectionOff.message": "Cette partie de Descrybe est désactivée sur la plateforme pour le moment. Ce nest pas un problème dupgrade — réessayez plus tard ou contactez le support.",
"plan.upgrade.sectionOff.cta": "Retour au tableau de bord",
"plan.upgrade.stores.message": "Les connecteurs WooCommerce et Shopify nécessitent un forfait qui inclut Boutiques. Passez à un forfait supérieur pour les connecter — ou continuez avec les flux et lAPI sur votre forfait actuel.",
"plan.upgrade.stillWorks.title": "Ce qui fonctionne encore avec votre forfait",
"plan.upgrade.stillWorks.feeds.label": "Flux dentrée",
"plan.upgrade.stillWorks.feeds.description": "Ajoutez des URL CSV ou XML et des imports de fichiers pour synchroniser les catalogues sans connecteurs de boutique.",
"plan.upgrade.stillWorks.export.label": "Flux dexport",
"plan.upgrade.stillWorks.export.description": "Générez des flux sortants pour les canaux shopping et les partenaires.",
"plan.upgrade.stillWorks.processing.label": "Tâches en arrière-plan",
"plan.upgrade.stillWorks.processing.description": "Surveillez les jobs IA et catalogue dans Traitement — disponible sur votre forfait même sans connecteurs de boutique.",
"plan.upgrade.stillWorks.api.label": "Clés API",
"plan.upgrade.stillWorks.api.description": "Créez une clé dans Paramètres pour utiliser /api/v1 — le secret nest affiché quune fois.",
"plan.upgrade.stillWorks.docs.label": "Docs API",
"plan.upgrade.stillWorks.docs.description": "Lisez laperçu de lAPI et intégrez sans WooCommerce ni Shopify.",
"plan.upgrade.feature.settings.api_keys": "Les clés API nécessitent un forfait payant",
"plan.upgrade.feature.catalog.products.process_ai_titles": "Les titres IA sont une fonctionnalité payante",
"plan.upgrade.feature.catalog.products.process_ai_descriptions": "Les descriptions IA sont une fonctionnalité payante",
"plan.upgrade.feature.marketing.campaigns.generate_ai": "LIA des campagnes nécessite un forfait payant",
"plan.upgrade.feature.marketing.campaigns.send": "Lenvoi réel de campagnes nécessite un forfait payant",
"plan.upgrade.feature.marketing.brand_ai_apply": "La voix de marque dans lIA nécessite un forfait payant",
"plan.upgrade.feature.marketing.seo.ai_rewrite": "La réécriture SEO IA nécessite un forfait payant",
"plan.upgrade.feature.integrations.ai.byok": "Apporter votre propre clé IA commence avec Growth",
"plan.upgrade.feature.capability.byok": "Apporter votre propre clé IA commence avec Growth",
"plan.upgrade.feature.marketing.campaigns": "Les campagnes ne sont pas dans votre forfait",
"plan.upgrade.feature.marketing.content_calendar": "Le calendrier de contenu nest pas dans votre forfait",
"plan.upgrade.feature.marketing.seo": "Les outils SEO ne sont pas dans votre forfait",
"plan.upgrade.feature.marketing.brand_kit": "Le kit de marque nest pas dans votre forfait",
"plan.upgrade.feature.marketing.reviews": "Les avis ne sont pas dans votre forfait",
"plan.upgrade.feature.integrations.ai": "Les intégrations IA ne sont pas dans votre forfait",
"plan.upgrade.feature.integrations.email": "Lenvoi de-mails nest pas dans votre forfait",
"plan.upgrade.feature.processing.monitor": "Le traitement nest pas dans votre forfait",
"plan.upgrade.feature.stores.hub": "Les connecteurs de boutique ne sont pas dans votre forfait",
"plan.upgrade.feature.stores.woocommerce": "WooCommerce nest pas dans votre forfait",
"plan.upgrade.feature.stores.shopify": "Shopify nest pas dans votre forfait",
"plan.upgrade.feature.support.center": "Le centre dassistance nest pas dans votre forfait",
"plan.upgrade.feature.support.ticket_create": "La création de tickets dassistance nest pas dans votre forfait",
"plan.upgrade.feature.support.ticket_thread": "Les fils de tickets dassistance ne sont pas dans votre forfait",
"plan.upgrade.feature.catalog.structured_descriptions": "Les descriptions structurées ne sont pas dans votre forfait",
"plan.upgrade.feature.catalog.vector_categories": "Les catégories vectorielles ne sont pas dans votre forfait",
"plan.checkingAccess": "Vérification de laccès au forfait…",
"upgradeBanner.comparePlans": "Comparer les offres",
"upgradeBanner.talkToSales": "Parler aux ventes",
"commandPalette.closeAria": "Fermer la recherche",
"commandPalette.ariaLabel": "Rechercher des pages",
"commandPalette.placeholder": "Rechercher des pages…",
"commandPalette.searchAria": "Rechercher des pages",
"commandPalette.destinationsAria": "Pages",
"commandPalette.noMatches": "Aucune page correspondante",
"commandPalette.announceIdleOne": "Recherche. {count} page.",
"commandPalette.announceIdleMany": "Recherche. {count} pages.",
"commandPalette.announceNone": "Aucune page correspondante.",
"commandPalette.announceMatchOne": "{count} page correspondante.",
"commandPalette.announceMatchMany": "{count} pages correspondantes.",
"vector.title": "Test des catégories vectorielles",
"vector.description": "Recherchez dans lindex de catégories vectorielles lorsque Pinecone est configuré. Création dindex et initialisation ne sont pas encore disponibles en v2.",
"vector.probing": "Vérification de lAPI des catégories vectorielles…",
"vector.unavailable": "Les catégories vectorielles ne sont pas encore sur ce backend. Rien à exécuter ici tant que /api/vector-categories/* nest pas branché.",
"vector.browseCategories": "Parcourir les catégories",
"vector.initHeading": "Initialiser la base vectorielle",
"vector.initComingSoon": "Créer lindex et Initialiser la BD vectorielle ne sont pas encore disponibles en v2 (bientôt). La recherche fonctionne toujours lorsque Pinecone est configuré.",
"vector.createIndex": "Créer lindex",
"vector.initDb": "Initialiser la BD vectorielle",
"vector.searchHeading": "Rechercher des catégories",
"vector.searchPlaceholder": "Saisir une description de produit…",
"vector.results": "Résultats :",
"vector.categoryLabel": "Catégorie :",
"vector.idLabel": "ID :",
"vector.scoreLabel": "Score :",
"switcher.switching": "Changement…",
"switcher.returnTo": "Revenir à {email}",
"switcher.switchUser": "Changer dutilisateur",
"switcher.loadingUsers": "Chargement des utilisateurs…",
"switcher.empty": "Aucun utilisateur interchangeable trouvé.",
"switcher.noCompany": "Aucune entreprise",
"switcher.unknownCompany": "Entreprise inconnue",
"companySwitcher.select": "Sélectionner une entreprise",
"companySwitcher.switchAria": "Changer dentreprise : {label}",
"companySwitcher.companies": "Entreprises",
2026-08-14 00:06:43 +02:00
"companySwitcher.returnTo": "Revenir à {name}",
"companySwitcher.returnHome": "Revenir à lentreprise dorigine",
"storeReconnect.primaryLabel": "Reconnecter la boutique",
"storeReconnect.titlePlural": "Reconnecter les boutiques après la migration",
"storeReconnect.titleChannel": "Reconnecter {channel} après la migration",
"storeReconnect.titleSingular": "Reconnecter la boutique après la migration",
"storeReconnect.messageWithItems": "Les identifiants API de boutique nont pas été repris (ou ne peuvent pas être utilisés) après la migration de la plateforme. Ce nest pas une sync cassée — reconnectez chaque boutique, puis Testez la connexion avant de mettre une sync en file.",
"storeReconnect.messageSingle": "Les identifiants API de {channel} nont pas été repris (ou ne peuvent pas être utilisés) après la migration de la plateforme. Ce nest pas une sync cassée — collez de nouveaux identifiants, Enregistrez, puis Testez la connexion avant de mettre une sync en file.",
"storeReconnect.channelFallback": "Boutique",
"storeReconnect.askAdmin": "Demandez à un administrateur de lentreprise de reconnecter — seuls les administrateurs peuvent enregistrer les identifiants de boutique.",
"storeReconnect.reconnectItem": "Reconnecter {label}",
"admin.storeReconnect.channel.other": "Other",
"admin.storeReconnect.channel.woocommerce": "WooCommerce",
"admin.storeReconnect.channel.shopify": "Shopify",
"admin.storeReconnect.reason.other": "Other",
"admin.storeReconnect.reason.missingCredentials": "Missing credentials",
"admin.storeReconnect.enabledNo": "No",
"admin.storeReconnect.enabledYes": "Yes",
"admin.storeReconnect.colLastTest": "Last test",
"admin.storeReconnect.colEnabled": "Enabled",
"admin.storeReconnect.colReason": "Reason",
"admin.storeReconnect.colIdentity": "Identity",
"admin.storeReconnect.colChannel": "Channel",
"admin.storeReconnect.colCompany": "Company",
"admin.storeReconnect.noRows": "No rows in this page.",
"admin.storeReconnect.noneFound": "No stores need reconnect right now.",
"admin.storeReconnect.needsBadge": "Needs reconnect",
"admin.storeReconnect.cleanBadge": "No gaps",
"admin.storeReconnect.listDesc": "Store URL / shop domain present without usable secrets (matches merchant reconnect banner).",
"admin.storeReconnect.listTitle": "Connected but invalid",
"admin.storeReconnect.metric.showing": "Rows shown",
"admin.storeReconnect.metric.total": "Gaps total",
"admin.storeReconnect.cutoverHint": "Read-only inventory. Merchants reconnect via /stores/wizard or the channel Connection tab — this page does not mutate credentials.",
"admin.storeReconnect.loadFailed": "Could not load store reconnect inventory.",
"admin.storeReconnect.refresh": "Refresh",
"admin.storeReconnect.description": "Companies with a connected store identity but missing or unusable API credentials (cutover credential gaps).",
"admin.storeReconnect.title": "Store reconnect inventory",
"admin.nav.storeReconnect": "Store reconnect",
"storeReconnect.wizardHint": "Prefer a step-by-step flow? Open Guided setup (/stores/wizard), or reconnect the channel below and Test Connection before syncing.",
"storeReconnect.wizardLabel": "Guided setup",
"storeReconnect.reviewsHint": "Limport davis ne peut pas sexécuter tant que les identifiants ne sont pas reconnectés après la migration. Dans longlet Connexion : Enregistrer, puis Tester la connexion.",
"storeReconnect.ordersHint": "Limport des commandes ne peut pas sexécuter tant que les identifiants ne sont pas reconnectés après la migration. Dans longlet Connexion : Enregistrer, puis Tester la connexion.",
"productSync.directionTitle": "Produits : Descrybe → boutique",
"productSync.outbound": "Descrybe → {channel}",
"productSync.outboundBody": "— envoie les produits Descrybe traités vers la boutique (création ou mise à jour des produits distants correspondants). Nimporte pas le catalogue boutique dans Descrybe.",
"productSync.firstSync": "Première sync",
"productSync.firstSyncBody": "— les produits sans correspondance sont créés dans {channel}. Les syncs suivantes mettent à jour les produits déjà liés par id ou stratégie de correspondance.",
"productSync.reSync": "Re-sync",
"productSync.reSyncBody": "— les produits distants correspondants peuvent être écrasés avec le contenu Descrybe ({count} liés pour linstant).",
"productSync.queued": "Sync produits en file",
"productSync.live.queued": "En file — en attente du worker",
"productSync.live.running": "Synchronisation en cours",
"productSync.live.watching": "Suivi du statut… les compteurs apparaissent à la fin.",
"productSync.live.success": "Sync terminée : {total} total · {created} créés · {updated} mis à jour · {failed} échoués · {skipped} ignorés",
"productSync.live.partial": "Sync terminée avec des échecs : {total} total · {created} créés · {updated} mis à jour · {failed} échoués · {skipped} ignorés",
"productSync.live.failed": "Échec de la sync{detail}.",
"productSync.live.timedOut": "Toujours en cours — actualisez plus tard pour le statut et les compteurs.",
"productSync.live.ordersSuccess": "Sync commandes terminée ({status}).",
"productSync.live.reviewsSuccess": "Sync avis terminée ({status}).",
"productSync.retry": "Réessayer la sync",
"productSync.lastStatus": "Dernière : {status}",
"productSync.dryRun": "Simulation",
"productSync.lastSyncAt": "Dernière sync produits : {date}",
"productSync.noneYet": "Aucune sync produits nest encore terminée.",
"productSync.lastRun": "Dernière exécution : {total} au total · {created} créés · {updated} mis à jour · {failed} échoués · {skipped} ignorés",
"productSync.needsReconnect": "La sync produits ne peut pas sexécuter tant que les identifiants ne sont pas reconnectés après la migration. Dans longlet Connexion : Enregistrer, puis Tester la connexion.",
"productSync.scheduleTitle": "Planning de sync produits automatique",
"productSync.scheduleHelp": "Comme les intervalles des feeds : définissez la fréquence des pushes produits, ou mettez le planning en pause. La file manuelle reste disponible. Les webhooks boutique ne sont pas utilisés — interrogation/file uniquement.",
"productSync.scheduleInterval": "Intervalle de sync (heures)",
"productSync.scheduleIntervalHint": "1168 heures. Par défaut 6 heures si non défini côté serveur.",
"productSync.schedulePause": "Mettre en pause la sync automatique",
"productSync.schedulePauseHint": "Arrête uniquement les pushes planifiés. Vous pouvez toujours lancer une sync manuellement.",
"productSync.scheduleSave": "Enregistrer le planning",
"productSync.scheduleSaved": "Planning de sync produits enregistré.",
"productSync.schedulePausedSaved": "Sync produits automatique en pause.",
"productSync.scheduleSaveFailed": "Impossible denregistrer le planning de sync",
"productSync.schedulePausedBadge": "Planning en pause",
"productSync.scheduleActiveBadge": "Planning actif",
"productSync.scheduleNeedsConfig": "Enregistrez dabord la connexion boutique",
"productSync.scheduleAdminOnly": "Administrateur dentreprise requis",
"productSync.delivery.title": "Mises à jour par interrogation, pas par webhooks boutique",
"productSync.delivery.body": "Descrybe ne reçoit pas les webhooks Shopify ou WooCommerce. Les envois de produits sexécutent quand vous les mettez en file ou selon le planning automatique. Cette page suit la progression en interrogeant l’état de la connexion — pas via des événements push boutique en direct.",
"productSync.delivery.inboundNote": "Commandes et avis utilisent aussi des tirages en file (planifiés ou manuels), pas des webhooks en direct.",
"productSync.delivery.hubNote": "Les connecteurs boutique synchronisent selon un planning ou quand vous lancez une tâche — pas via des webhooks boutique en direct.",
"productSync.delivery.badge.manual": "File manuelle",
"productSync.delivery.badge.scheduled": "Planifié toutes les {hours} h",
"productSync.delivery.badge.scheduledDefault": "Planifié (défaut serveur)",
"productSync.delivery.badge.paused": "Planning en pause",
"productSync.delivery.badge.webhooksOff": "Webhooks boutique : non disponibles",
"productSync.scope.title": "What to sync",
"productSync.scope.hint": "Optional filters for this push only. Leave blank to sync the latest processed products up to the limit.",
"productSync.scope.status": "Status",
"productSync.scope.statusAll": "All statuses",
"productSync.scope.statusCompleted": "Completed",
"productSync.scope.statusNeedsReview": "Needs review",
"productSync.scope.statusProcessing": "Processing",
"productSync.scope.statusError": "Error",
"productSync.scope.category": "Category",
"productSync.scope.categoryPlaceholder": "Exact category name (optional)",
"productSync.scope.limit": "Max products",
"productSync.scope.products": "Specific products",
"productSync.scope.productsHint": "Optional. Search and select processed products to push only those.",
"productSync.scope.productsOverrideHint": "Selected products override status, category, and max-products filters for this sync.",
"productSync.scope.productsSearch": "Search products…",
"productSync.scope.productsLoading": "Loading products…",
"productSync.scope.productsEmpty": "No processed products found.",
"productSync.scope.productsSelected": "{count} selected",
"productSync.scope.productsSelectedList": "Selected products",
"productSync.scope.productsClear": "Clear selection",
"productSync.scope.productsMax": "Maximum {max} products",
"store.syncingLive": "Synchronisation…",
"files.recentUploads": "Téléversements récents",
"files.colFileName": "Nom du fichier",
"files.colKind": "Type",
"files.colUploaded": "Téléversé",
"files.colRows": "Lignes",
"files.loading": "Chargement des téléversements…",
"files.empty": "Aucun téléversement pour linstant.",
"products.filters.sortProducts": "Trier les produits",
"products.table.options": "Options",
};