const fr = {
  // Navigation
  "nav.dashboard": "Tableau de bord",
  "nav.books": "Livres",
  "nav.series": "Séries",
  "nav.libraries": "Bibliothèques",
  "nav.downloads": "Téléchargements",
  "nav.jobs": "Tâches",
  "nav.tokens": "Jetons",
  "nav.users": "Utilisateurs",
  "nav.settings": "Paramètres",
  "nav.navigation": "Navigation",
  "nav.closeMenu": "Fermer le menu",
  "nav.openMenu": "Ouvrir le menu",

  // Common
  "common.save": "Enregistrer",
  "common.saving": "Enregistrement...",
  "common.cancel": "Annuler",
  "common.close": "Fermer",
  "common.delete": "Supprimer",
  "common.edit": "Modifier",
  "common.search": "Rechercher",
  "common.clear": "Effacer",
  "common.view": "Voir",
  "common.all": "Tous",
  "common.enabled": "Activé",
  "common.disabled": "Désactivé",
  "common.browse": "Parcourir",
  "common.add": "Ajouter",
  "common.noData": "Aucune donnée",
  "common.loading": "Chargement...",
  "common.error": "Erreur",
  "common.networkError": "Erreur réseau",
  "common.show": "Afficher",
  "common.perPage": "par page",
  "common.next": "Suivant",
  "common.previous": "Précédent",
  "common.first": "Premier",
  "common.previousPage": "Page précédente",
  "common.nextPage": "Page suivante",
  "common.backoffice": "backoffice",
  "common.and": "et",
  "common.via": "via",

  // Reading status
  "status.unread": "Non lu",
  "status.reading": "En cours",
  "status.read": "Lu",

  // Series status
  "seriesStatus.ongoing": "En cours",
  "seriesStatus.ended": "Terminée",
  "seriesStatus.hiatus": "Hiatus",
  "seriesStatus.cancelled": "Annulée",
  "seriesStatus.upcoming": "À paraître",
  "seriesStatus.allStatuses": "Tous les statuts",
  "seriesStatus.notDefined": "Non défini",

  // Dashboard
  "dashboard.title": "Tableau de bord",
  "dashboard.subtitle": "Aperçu de votre collection de bandes dessinées. Gérez vos bibliothèques, suivez votre progression de lecture et explorez vos livres et séries.",
  "dashboard.loadError": "Impossible de charger les statistiques. Vérifiez que l'API est en cours d'exécution.",
  "dashboard.books": "Livres",
  "dashboard.series": "Séries",
  "dashboard.libraries": "Bibliothèques",
  "dashboard.pages": "Pages",
  "dashboard.authors": "Auteurs",
  "dashboard.totalSize": "Taille totale",
  "dashboard.readingStatus": "Statut de lecture",
  "dashboard.byFormat": "Par format",
  "dashboard.byLibrary": "Par bibliothèque",
  "dashboard.booksAdded": "Livres ajoutés",
  "dashboard.jobsOverTime": "Exécutions de jobs",
  "dashboard.jobScan": "Scan",
  "dashboard.jobRebuild": "Rebuild",
  "dashboard.jobThumbnail": "Thumbnails",
  "dashboard.jobOther": "Autre",
  "dashboard.periodDay": "Jour",
  "dashboard.periodWeek": "Semaine",
  "dashboard.periodMonth": "Mois",
  "dashboard.metricBooks": "Livres",
  "dashboard.metricPages": "Pages",
  "dashboard.popularSeries": "Séries populaires",
  "dashboard.noSeries": "Aucune série pour le moment",
  "dashboard.unknown": "Inconnu",
  "dashboard.readCount": "{{read}}/{{total}} lu",
  "dashboard.metadataCoverage": "Couverture métadonnées",
  "dashboard.seriesLinked": "Séries liées",
  "dashboard.seriesUnlinked": "Séries non liées",
  "dashboard.byProvider": "Par fournisseur",
  "dashboard.bookMetadata": "Métadonnées livres",
  "dashboard.withSummary": "Avec résumé",
  "dashboard.withIsbn": "Avec ISBN",
  "dashboard.currentlyReading": "En cours de lecture",
  "dashboard.recentlyRead": "Derniers livres lus",
  "dashboard.readingActivity": "Activité de lecture",
  "dashboard.pageProgress": "p. {{current}} / {{total}}",
  "dashboard.noCurrentlyReading": "Aucun livre en cours",
  "dashboard.noRecentlyRead": "Aucun livre lu récemment",
  "dashboard.allUsers": "Tous",

  // Books page
  "books.title": "Livres",
  "books.searchPlaceholder": "Rechercher par titre, auteur, série...",
  "books.library": "Bibliothèque",
  "books.allLibraries": "Toutes les bibliothèques",
  "books.status": "Statut",
  "books.sort": "Tri",
  "books.sortTitle": "Titre",
  "books.sortLatest": "Ajout récent",
  "books.resultCount": "{{count}} résultat{{plural}}",
  "books.resultCountFor": "{{count}} résultat{{plural}} pour \u00ab {{query}} \u00bb",
  "books.bookCount": "{{count}} livre{{plural}}",
  "books.seriesHeading": "Séries",
  "books.unclassified": "Non classé",
  "books.noResults": "Aucun livre trouvé pour \"{{query}}\"",
  "books.noBooks": "Aucun livre disponible",
  "books.coverOf": "Couverture de {{name}}",
  "books.format": "Format",
  "books.allFormats": "Tous les formats",

  // Series page
  "series.title": "Séries",
  "series.searchPlaceholder": "Rechercher par nom de série...",
  "series.reading": "Lecture",
  "series.missing": "Manquant",
  "series.missingBooks": "Livres manquants",
  "series.matchingQuery": "correspondant à",
  "series.noResults": "Aucune série trouvée correspondant à vos filtres",
  "series.noSeries": "Aucune série disponible",
  "series.missingCount": "{{count}} manquant{{plural}}",
  "series.readCount": "{{read}}/{{total}} lu{{plural}}",

  // Authors page
  "nav.authors": "Auteurs",
  "authors.title": "Auteurs",
  "authors.searchPlaceholder": "Rechercher par nom d'auteur...",
  "authors.bookCount": "{{count}} livre{{plural}}",
  "authors.seriesCount": "{{count}} série{{plural}}",
  "authors.noResults": "Aucun auteur trouvé correspondant à vos filtres",
  "authors.noAuthors": "Aucun auteur disponible",
  "authors.matchingQuery": "correspondant à",
  "authors.sortName": "Nom",
  "authors.sortBooks": "Nombre de livres",
  "authors.booksBy": "Livres de {{name}}",
  "authors.seriesBy": "Séries de {{name}}",

  // Libraries page
  "libraries.title": "Bibliothèques",
  "libraries.addLibrary": "Ajouter une bibliothèque",
  "libraries.addLibraryDescription": "Créer une nouvelle bibliothèque à partir d'un dossier existant",
  "libraries.disabled": "Désactivée",
  "libraries.books": "Livres",
  "libraries.series": "Séries",
  "libraries.auto": "Auto",
  "libraries.manual": "Manuel",
  "libraries.nextScan": "Prochain : {{time}}",
  "libraries.imminent": "Imminent",
  "libraries.nextMetadataRefresh": "Prochain rafraîchissement méta. : {{time}}",
  "libraries.nextMetadataRefreshShort": "Méta. : {{time}}",
  "libraries.scanLabel": "Scan : {{mode}}",
  "libraries.watcherLabel": "Surveillance fichiers",
  "libraries.metaRefreshLabel": "Rafraîch. méta. : {{mode}}",
  "libraries.index": "Indexer",
  "libraries.fullIndex": "Complet",
  "libraries.batchMetadata": "Métadonnées en lot",
  "libraries.libraryName": "Nom de la bibliothèque",
  "libraries.addButton": "Ajouter une bibliothèque",

  // Library sub-pages
  "libraryBooks.allBooks": "Tous les livres",
  "libraryBooks.booksOfSeries": "Livres de \"{{series}}\"",
  "libraryBooks.filterLabel": "Livres de la série \"{{series}}\"",
  "libraryBooks.viewAll": "Voir tous les livres",
  "libraryBooks.noBooks": "Aucun livre dans cette bibliothèque",
  "libraryBooks.noBooksInSeries": "Aucun livre dans la série \"{{series}}\"",
  "librarySeries.noSeries": "Aucune série trouvée dans cette bibliothèque",
  "librarySeries.noBooksInSeries": "Aucun livre dans cette série",

  // Library actions
  "libraryActions.settingsTitle": "Paramètres de la bibliothèque",
  "libraryActions.sectionIndexation": "Indexation",
  "libraryActions.sectionMetadata": "Métadonnées",
  "libraryActions.autoScan": "Scan planifié",
  "libraryActions.autoScanDesc": "Scanner automatiquement les fichiers nouveaux et modifiés",
  "libraryActions.fileWatch": "Surveillance en temps réel",
  "libraryActions.fileWatchDesc": "Détecter les changements de fichiers instantanément",
  "libraryActions.schedule": "Fréquence",
  "libraryActions.provider": "Fournisseur",
  "libraryActions.providerDesc": "Source utilisée pour récupérer les métadonnées des séries",
  "libraryActions.fallback": "Fournisseur de secours",
  "libraryActions.fallbackDesc": "Utilisé quand le fournisseur principal ne retourne aucun résultat",
  "libraryActions.default": "Par défaut",
  "libraryActions.none": "Aucun",
  "libraryActions.metadataRefreshSchedule": "Rafraîchissement auto",
  "libraryActions.metadataRefreshDesc": "Re-télécharger périodiquement les métadonnées existantes",
  "libraryActions.saving": "Enregistrement...",
  "libraryActions.sectionReadingStatus": "État de lecture",
  "libraryActions.readingStatusProvider": "Provider d'état de lecture",
  "libraryActions.readingStatusProviderDesc": "Synchronise les états de lecture (lu / en cours / planifié) avec un service externe",
  "libraryActions.readingStatusPushSchedule": "Synchronisation automatique",
  "libraryActions.readingStatusPushScheduleDesc": "Pousse automatiquement la progression de lecture vers le provider selon un calendrier",
  "libraryActions.sectionProwlarr": "Détection de téléchargements",
  "libraryActions.downloadDetectionSchedule": "Détection automatique",
  "libraryActions.downloadDetectionScheduleDesc": "Lance automatiquement la détection de volumes manquants via Prowlarr selon un calendrier",

  // Reading status modal
  "readingStatus.button": "État de lecture",
  "readingStatus.linkTo": "Lier à {{provider}}",
  "readingStatus.search": "Rechercher",
  "readingStatus.searching": "Recherche en cours…",
  "readingStatus.searchPlaceholder": "Titre de la série…",
  "readingStatus.noResults": "Aucun résultat.",
  "readingStatus.link": "Lier",
  "readingStatus.unlink": "Délier",
  "readingStatus.changeLink": "Changer",
  "readingStatus.status.linked": "lié",
  "readingStatus.status.synced": "synchronisé",
  "readingStatus.status.error": "erreur",

  // Library sub-page header
  "libraryHeader.libraries": "Bibliothèques",
  "libraryHeader.bookCount": "{{count}} livre{{plural}}",
  "libraryHeader.enabled": "Activée",

  // Monitoring
  "monitoring.auto": "Auto",
  "monitoring.manual": "Manuel",
  "monitoring.hourly": "Toutes les heures",
  "monitoring.daily": "Quotidien",
  "monitoring.weekly": "Hebdomadaire",
  "monitoring.fileWatch": "Surveillance des fichiers en temps réel",

  // Jobs page
  "jobs.title": "Tâches d'indexation",
  "jobs.startJob": "Lancer une tâche",
  "jobs.startJobDescription": "Sélectionnez une bibliothèque (ou toutes) et choisissez l'action à effectuer.",
  "jobs.allLibraries": "Toutes les bibliothèques",
  "jobs.rebuild": "Mise à jour",
  "jobs.rescan": "Rescan complet",
  "jobs.fullRebuild": "Reconstruction complète (destructif)",
  "jobs.generateThumbnails": "Générer les miniatures",
  "jobs.regenerateThumbnails": "Regénérer les miniatures",
  "jobs.batchMetadata": "Métadonnées en lot",
  "jobs.refreshMetadata": "Rafraîchir métadonnées",
  "jobs.refreshMetadataDescription": "Rafraîchit les métadonnées de toutes les séries déjà liées à un fournisseur externe. Re-télécharge les informations depuis le fournisseur et met à jour les séries et livres en base (en respectant les champs verrouillés). Les séries sans lien approuvé sont ignorées. <strong>Requiert une bibliothèque spécifique</strong> (ne fonctionne pas sur \u00ab Toutes les bibliothèques \u00bb).",
  "jobs.referenceTitle": "Référence des types de tâches",
  "jobs.groupIndexation": "Indexation",
  "jobs.groupThumbnails": "Miniatures",
  "jobs.groupMetadata": "Métadonnées",
  "jobs.requiresLibrary": "Requiert une bibliothèque spécifique",
  "jobs.rebuildShort": "Scanner les fichiers nouveaux et modifiés",
  "jobs.rescanShort": "Re-parcourir tous les dossiers pour découvrir de nouveaux formats",
  "jobs.fullRebuildShort": "Tout supprimer et re-scanner depuis zéro. Les métadonnées, statuts de lecture et liens seront perdus.",
  "jobs.generateThumbnailsShort": "Miniatures manquantes uniquement",
  "jobs.regenerateThumbnailsShort": "Recréer toutes les miniatures",
  "jobs.batchMetadataShort": "Lier automatiquement les séries non liées",
  "jobs.refreshMetadataShort": "Mettre à jour les séries déjà liées",
  "jobs.rebuildDescription": "Scan incrémental : détecte les fichiers ajoutés, modifiés ou supprimés depuis le dernier scan, les indexe et génère les miniatures manquantes. Les données existantes non modifiées sont conservées. C'est l'action la plus courante et la plus rapide.",
  "jobs.rescanDescription": "Re-parcourt tous les dossiers même s'ils n'ont pas changé, pour découvrir les fichiers dans les formats nouvellement supportés (ex. EPUB). Les livres et métadonnées existants sont entièrement préservés — seuls les fichiers réellement nouveaux sont ajoutés. Plus lent qu'un rebuild mais sans risque pour vos données.",
  "jobs.fullRebuildDescription": "Supprime toutes les données indexées (livres, séries, miniatures) puis effectue un scan complet depuis zéro. Utile si la base de données est désynchronisée ou corrompue. Opération longue et destructive : les statuts de lecture et les métadonnées manuelles seront perdus.",
  "jobs.generateThumbnailsDescription": "Génère les miniatures uniquement pour les livres qui n'en ont pas encore. Les miniatures existantes ne sont pas touchées. Utile après un import ou si certaines miniatures sont manquantes.",
  "jobs.regenerateThumbnailsDescription": "Regénère toutes les miniatures depuis zéro, en remplaçant les existantes. Utile si la qualité ou la taille des miniatures a changé dans la configuration, ou si des miniatures sont corrompues.",
  "jobs.batchMetadataDescription": "Recherche automatiquement les métadonnées de chaque série de la bibliothèque auprès du provider configuré (avec fallback si configuré). Seuls les résultats avec un match unique à 100% de confiance sont appliqués automatiquement. Les séries déjà liées sont ignorées. Un rapport détaillé par série est disponible à la fin du job. <strong>Requiert une bibliothèque spécifique</strong> (ne fonctionne pas sur \u00ab Toutes les bibliothèques \u00bb).",
  "jobs.groupReadingStatus": "Statut de lecture",
  "jobs.matchReadingStatus": "Correspondance des séries",
  "jobs.matchReadingStatusShort": "Lier automatiquement les séries non associées au provider",
  "jobs.pushReadingStatus": "Push des états de lecture",
  "jobs.pushReadingStatusShort": "Envoyer les états de lecture modifiés vers AniList (push différentiel)",
  "jobs.groupProwlarr": "Téléchargement",
  "jobs.downloadDetection": "Détection de téléchargements",
  "jobs.downloadDetectionShort": "Cherche sur Prowlarr les releases disponibles pour les volumes manquants",

  // Jobs list
  "jobsList.id": "ID",
  "jobsList.library": "Bibliothèque",
  "jobsList.type": "Type",
  "jobsList.status": "Statut",
  "jobsList.stats": "Stats",
  "jobsList.duration": "Durée",
  "jobsList.created": "Créé",
  "jobsList.actions": "Actions",
  "jobsList.allTypes": "Tous les types",
  "jobsList.allStatuses": "Tous les statuts",
  "jobsList.allLibraries": "Toutes les bibliothèques",

  // Job row
  "jobRow.showProgress": "Afficher la progression",
  "jobRow.hideProgress": "Masquer la progression",
  "jobRow.scanned": "{{count}} analysés",
  "jobRow.filesIndexed": "{{count}} fichiers indexés",
  "jobRow.filesRemoved": "{{count}} fichiers supprimés",
  "jobRow.thumbnailsGenerated": "{{count}} miniatures générées",
  "jobRow.metadataProcessed": "{{count}} séries traitées",
  "jobRow.metadataRefreshed": "{{count}} séries rafraîchies",
  "jobRow.metadataLinks": "{{count}} liens analysés",
  "jobRow.seriesTotal": "{{count}} séries au total",
  "jobRow.seriesLinked": "{{count}} séries liées",
  "jobRow.seriesPushed": "{{count}} séries synchronisées",
  "jobRow.downloadFound": "{{count}} releases trouvées",
  "jobRow.errors": "{{count}} erreurs",
  "jobRow.view": "Voir",
  "jobRow.replay": "Rejouer",

  // Job progress
  "jobProgress.loadingProgress": "Chargement de la progression...",
  "jobProgress.sseError": "Échec de l'analyse des données SSE",
  "jobProgress.connectionLost": "Connexion perdue",
  "jobProgress.error": "Erreur : {{message}}",
  "jobProgress.done": "Terminé",
  "jobProgress.currentFile": "En cours : {{file}}",
  "jobProgress.pages": "pages",
  "jobProgress.thumbnails": "miniatures",
  "jobProgress.filesUnit": "fichiers",
  "jobProgress.scanned": "Analysés : {{count}}",
  "jobProgress.indexed": "Indexés : {{count}}",
  "jobProgress.removed": "Supprimés : {{count}}",
  "jobProgress.errors": "Erreurs : {{count}}",

  // Job detail
  "jobDetail.backToJobs": "Retour aux tâches",
  "jobDetail.title": "Détails de la tâche",
  "jobDetail.completedIn": "Terminé en {{duration}}",
  "jobDetail.failedAfter": "après {{duration}}",
  "jobDetail.jobFailed": "Tâche échouée",
  "jobDetail.cancelled": "Annulé",
  "jobDetail.overview": "Aperçu",
  "jobDetail.timeline": "Chronologie",
  "jobDetail.created": "Créé",
  "jobDetail.started": "Démarré",
  "jobDetail.pendingStart": "En attente de démarrage…",
  "jobDetail.finished": "Terminé",
  "jobDetail.failed": "Échoué",
  "jobDetail.library": "Bibliothèque",
  "jobDetail.book": "Livre",
  "jobDetail.allLibraries": "Toutes les bibliothèques",
  "jobDetail.phase1": "Phase 1 — Découverte",
  "jobDetail.phase2a": "Phase 2a — Extraction des pages",
  "jobDetail.phase2b": "Phase 2b — Génération des miniatures",
  "jobDetail.metadataSearch": "Recherche de métadonnées",
  "jobDetail.metadataSearchDesc": "Recherche auprès des fournisseurs externes pour chaque série",
  "jobDetail.metadataRefresh": "Rafraîchissement des métadonnées",
  "jobDetail.metadataRefreshDesc": "Re-téléchargement des métadonnées depuis les fournisseurs pour les séries déjà liées",
  "jobDetail.refreshReport": "Rapport de rafraîchissement",
  "jobDetail.refreshReportDesc": "{{count}} séries liées traitées",
  "jobDetail.refreshed": "Rafraîchies",
  "jobDetail.unchanged": "Inchangées",
  "jobDetail.refreshChanges": "Détail des changements",
  "jobDetail.refreshChangesDesc": "{{count}} séries avec des modifications",
  "jobDetail.phase1Desc": "Scan et indexation des fichiers de la bibliothèque",
  "jobDetail.phase2aDesc": "Extraction de la première page de chaque archive (nombre de pages + image brute)",
  "jobDetail.phase2bDesc": "Génération des miniatures pour les livres analysés",
  "jobDetail.inProgress": "en cours",
  "jobDetail.duration": "Durée : {{duration}}",
  "jobDetail.currentFile": "Fichier en cours",
  "jobDetail.generated": "Générés",
  "jobDetail.processed": "Traités",
  "jobDetail.total": "Total",
  "jobDetail.remaining": "Restants",
  "jobDetail.indexStats": "Statistiques d'indexation",
  "jobDetail.scanned": "Scannés",
  "jobDetail.indexed": "Indexés",
  "jobDetail.removed": "Supprimés",
  "jobDetail.warnings": "Avertissements",
  "jobDetail.errors": "Erreurs",
  "jobDetail.thumbnailStats": "Statistiques des miniatures",
  "jobDetail.batchReport": "Rapport du lot",
  "jobDetail.seriesAnalyzed": "{{count}} séries analysées",
  "jobDetail.autoMatched": "Auto-associé",
  "jobDetail.alreadyLinked": "Déjà lié",
  "jobDetail.noResults": "Aucun résultat",
  "jobDetail.tooManyResults": "Trop de résultats",
  "jobDetail.lowConfidence": "Confiance faible",
  "jobDetail.resultsBySeries": "Résultats par série",
  "jobDetail.seriesProcessed": "{{count}} séries traitées",
  "jobDetail.candidates": "candidat{{plural}}",
  "jobDetail.confidence": "confiance",
  "jobDetail.match": "Correspondance : {{title}}",
  "jobDetail.fileErrors": "Erreurs de fichiers ({{count}})",
  "jobDetail.fileErrorsDesc": "Erreurs rencontrées lors du traitement des fichiers",
  "jobDetail.readingStatusMatch": "Correspondance des séries",
  "jobDetail.readingStatusMatchDesc": "Recherche de chaque série sur le provider de statut de lecture",
  "jobDetail.readingStatusMatchReport": "Rapport de correspondance",
  "jobDetail.linked": "Liées",
  "jobDetail.ambiguous": "Ambiguës",
  "jobDetail.readingStatusPush": "Push des états de lecture",
  "jobDetail.readingStatusPushDesc": "Envoi différentiel des états de lecture vers AniList",
  "jobDetail.readingStatusPushReport": "Rapport de push",
  "jobDetail.pushed": "Envoyés",
  "jobDetail.skipped": "Ignorés",
  "jobDetail.noBooks": "Sans livres",
  "jobDetail.downloadDetection": "Détection de téléchargements",
  "jobDetail.downloadDetectionDesc": "Analyse des séries avec volumes manquants via Prowlarr",
  "jobDetail.downloadDetectionReport": "Rapport de détection",
  "jobDetail.downloadFound": "Disponibles",
  "jobDetail.downloadNotFound": "Non trouvés",
  "jobDetail.downloadNoMissing": "Complets",
  "jobDetail.downloadNoMetadata": "Sans métadonnées",
  "jobDetail.downloadAvailableReleases": "Releases disponibles",
  "jobDetail.downloadAvailableReleasesDesc": "{{count}} série(s) avec au moins une release trouvée",
  "jobDetail.downloadMissingCount": "{{count}} manquant(s)",
  "jobDetail.downloadErrors": "Erreurs de détection",
  "jobDetail.downloadErrorsDesc": "{{count}} série(s) en erreur lors de la détection",

  // Job types
  "jobType.rebuild": "Indexation",
  "jobType.rescan": "Rescan complet",
  "jobType.full_rebuild": "Indexation complète",
  "jobType.thumbnail_rebuild": "Miniatures",
  "jobType.thumbnail_regenerate": "Régén. miniatures",
  "jobType.cbr_to_cbz": "CBR → CBZ",
  "jobType.metadata_batch": "Métadonnées en lot",
  "jobType.metadata_refresh": "Rafraîchir méta.",
  "jobType.rebuildLabel": "Indexation incrémentale",
  "jobType.rebuildDesc": "Scanne les fichiers nouveaux/modifiés, les analyse et génère les miniatures manquantes.",
  "jobType.rescanLabel": "Rescan complet",
  "jobType.rescanDesc": "Re-parcourt tous les dossiers pour découvrir les fichiers dans les formats nouvellement supportés (ex. EPUB). Les données existantes sont préservées — seuls les nouveaux fichiers sont ajoutés.",
  "jobType.full_rebuildLabel": "Réindexation complète",
  "jobType.full_rebuildDesc": "Supprime toutes les données existantes puis effectue un scan complet, une ré-analyse et la génération des miniatures.",
  "jobType.thumbnail_rebuildLabel": "Reconstruction des miniatures",
  "jobType.thumbnail_rebuildDesc": "Génère les miniatures uniquement pour les livres qui n'en ont pas. Les miniatures existantes sont conservées.",
  "jobType.thumbnail_regenerateLabel": "Regénération des miniatures",
  "jobType.thumbnail_regenerateDesc": "Regénère toutes les miniatures depuis zéro, en remplaçant les existantes.",
  "jobType.cbr_to_cbzLabel": "Conversion CBR → CBZ",
  "jobType.cbr_to_cbzDesc": "Convertit une archive CBR au format ouvert CBZ.",
  "jobType.metadata_batchLabel": "Métadonnées en lot",
  "jobType.metadata_batchDesc": "Recherche les métadonnées auprès des fournisseurs externes pour toutes les séries de la bibliothèque et applique automatiquement les correspondances à 100% de confiance.",
  "jobType.metadata_refreshLabel": "Rafraîchissement métadonnées",
  "jobType.metadata_refreshDesc": "Re-télécharge et met à jour les métadonnées pour toutes les séries déjà liées à un fournisseur externe.",
  "jobType.reading_status_match": "Correspondance statut lecture",
  "jobType.reading_status_matchLabel": "Correspondance des séries (statut lecture)",
  "jobType.reading_status_matchDesc": "Recherche automatiquement chaque série de la bibliothèque sur le provider de statut de lecture configuré (ex. AniList) et crée les liens pour les séries identifiées sans ambiguïté.",
  "jobType.reading_status_push": "Push statut lecture",
  "jobType.reading_status_pushLabel": "Push des états de lecture",
  "jobType.reading_status_pushDesc": "Envoie les états de lecture modifiés (ou nouvelles séries) vers AniList de façon différentielle.",
  "jobType.download_detection": "Détection téléchargements",
  "jobType.download_detectionLabel": "Détection de téléchargements disponibles",
  "jobType.download_detectionDesc": "Analyse les séries avec des volumes manquants et interroge Prowlarr pour trouver les releases disponibles. Ne télécharge rien — produit uniquement un rapport des opportunités.",

  // Status badges
  "statusBadge.extracting_pages": "Extraction des pages",
  "statusBadge.generating_thumbnails": "Miniatures",

  // Jobs indicator
  "jobsIndicator.viewAll": "Voir toutes les tâches",
  "jobsIndicator.activeTasks": "Tâches actives",
  "jobsIndicator.runningAndPending": "{{running}} en cours, {{pending}} en attente",
  "jobsIndicator.pendingTasks": "{{count}} tâche{{plural}} en attente",
  "jobsIndicator.overallProgress": "Progression globale",
  "jobsIndicator.viewAllLink": "Tout voir →",
  "jobsIndicator.noActiveTasks": "Aucune tâche active",
  "jobsIndicator.autoRefresh": "Actualisation automatique toutes les 2s",
  "jobsIndicator.taskCount": "{{count}} tâche{{plural}} active{{plural}}",
  "jobsIndicator.thumbnails": "Miniatures",
  "jobsIndicator.regeneration": "Regénération",

  // Time
  "time.justNow": "À l'instant",
  "time.minutesAgo": "il y a {{count}}m",
  "time.hoursAgo": "il y a {{count}}h",

  // Tokens page
  "tokens.title": "Jetons API",
  "tokens.created": "Jeton créé",
  "tokens.createdDescription": "Copiez-le maintenant, il ne sera plus affiché",
  "tokens.createNew": "Créer un nouveau jeton",
  "tokens.createDescription": "Générer un nouveau jeton API avec la portée souhaitée",
  "tokens.tokenName": "Nom du jeton",
  "tokens.scopeRead": "Lecture",
  "tokens.scopeAdmin": "Admin",
  "tokens.createButton": "Créer le jeton",
  "tokens.name": "Nom",
  "tokens.scope": "Portée",
  "tokens.prefix": "Préfixe",
  "tokens.status": "Statut",
  "tokens.actions": "Actions",
  "tokens.revoked": "Révoqué",
  "tokens.active": "Actif",
  "tokens.revoke": "Révoquer",
  "tokens.user": "Utilisateur",
  "tokens.noUser": "Aucun (admin)",
  "tokens.apiTokens": "Tokens API",

  // Users page
  "users.title": "Utilisateurs",
  "users.createNew": "Créer un utilisateur",
  "users.createDescription": "Créer un compte utilisateur pour accès lecture",
  "users.username": "Nom d'utilisateur",
  "users.createButton": "Créer",
  "users.name": "Nom d'utilisateur",
  "users.tokenCount": "Nb de jetons",
  "users.createdAt": "Créé le",
  "users.actions": "Actions",
  "users.noUsers": "Aucun utilisateur",

  // Settings page
  "settings.title": "Paramètres",
  "settings.general": "Général",
  "settings.integrations": "Intégrations",
  "settings.downloadTools": "Outils de téléchargement",
  "settings.metadata": "Métadonnées",
  "settings.readingStatus": "Statut de lecture",
  "settings.savedSuccess": "Paramètres enregistrés avec succès",
  "settings.savedError": "Échec de l'enregistrement des paramètres",
  "settings.saveError": "Erreur lors de l'enregistrement des paramètres",
  "settings.cacheClearError": "Échec du vidage du cache",

  // Settings - Image Processing
  "settings.imageProcessing": "Traitement d'images",
  "settings.imageProcessingDesc": "Ces paramètres s'appliquent uniquement lorsqu'un client demande explicitement une conversion de format via l'API (ex. <code>?format=webp&width=800</code>). Les pages servies sans paramètres sont livrées telles quelles depuis l'archive, sans traitement.",
  "settings.defaultFormat": "Format de sortie par défaut",
  "settings.defaultQuality": "Qualité par défaut (1-100)",
  "settings.defaultFilter": "Filtre de redimensionnement par défaut",
  "settings.filterLanczos": "Lanczos3 (Meilleure qualité)",
  "settings.filterTriangle": "Triangle (Plus rapide)",
  "settings.filterNearest": "Nearest (Le plus rapide)",
  "settings.maxWidth": "Largeur maximale autorisée (px)",

  // Settings - Cache
  "settings.cache": "Cache",
  "settings.cacheDesc": "Gérer le cache d'images et le stockage",
  "settings.cacheSize": "Taille du cache",
  "settings.files": "Fichiers",
  "settings.directory": "Répertoire",
  "settings.cacheDirectory": "Répertoire du cache",
  "settings.maxSizeMb": "Taille max (Mo)",
  "settings.clearing": "Vidage en cours...",
  "settings.clearCache": "Vider le cache",

  // Settings - Performance
  "settings.performanceLimits": "Limites de performance",
  "settings.performanceDesc": "Configurer les performances de l'API, la limitation de débit et la concurrence de génération des miniatures",
  "settings.concurrentRenders": "Rendus simultanés",
  "settings.concurrentRendersHelp": "Nombre maximum de rendus de pages et de générations de miniatures en parallèle",
  "settings.timeoutSeconds": "Délai d'expiration (secondes)",
  "settings.rateLimit": "Limite de débit (req/s)",
  "settings.limitsNote": "Note : Les modifications des limites nécessitent un redémarrage du serveur pour prendre effet. Le paramètre « Rendus simultanés » contrôle à la fois le rendu des pages et le parallélisme de génération des miniatures.",

  // Settings - Thumbnails
  "settings.thumbnails": "Miniatures",
  "settings.thumbnailsDesc": "Configurer la génération des miniatures pendant l'indexation",
  "settings.enableThumbnails": "Activer les miniatures",
  "settings.outputFormat": "Format de sortie",
  "settings.formatOriginal": "Original (Sans ré-encodage)",
  "settings.formatOriginalDesc": "Redimensionne aux dimensions cibles, conserve le format source (JPEG→JPEG). Génération beaucoup plus rapide.",
  "settings.formatReencodeDesc": "Redimensionne et ré-encode dans le format sélectionné.",
  "settings.width": "Largeur (px)",
  "settings.height": "Hauteur (px)",
  "settings.quality": "Qualité (1-100)",
  "settings.thumbnailDirectory": "Répertoire des miniatures",
  "settings.totalSize": "Taille totale",
  "settings.thumbnailsNote": "Note : Les paramètres des miniatures sont utilisés pendant l'indexation. Les miniatures existantes ne seront pas regénérées automatiquement. La concurrence de génération des miniatures est contrôlée par le paramètre « Rendus simultanés » dans les Limites de performance ci-dessus.",

  // Settings - About
  "settings.about": "A propos",
  "settings.aboutDesc": "Gestionnaire de bibliothèque de bandes dessinées et ebooks. Indexation automatique, métadonnées depuis plusieurs fournisseurs, recherche et téléchargement intégrés, suivi de lecture.",

  // Settings - Komga
  "settings.komgaSync": "Synchronisation Komga",
  "settings.komgaDesc": "Importer le statut de lecture depuis un serveur Komga. Les livres sont associés par titre (insensible à la casse). Les identifiants ne sont pas stockés.",
  "settings.komgaUrl": "URL Komga",
  "settings.username": "Nom d'utilisateur",
  "settings.password": "Mot de passe",
  "settings.syncing": "Synchronisation...",
  "settings.syncReadBooks": "Synchroniser les livres lus",
  "settings.komgaRead": "Lus sur Komga",
  "settings.matched": "Associés",
  "settings.alreadyRead": "Déjà lus",
  "settings.newlyMarked": "Nouvellement marqués",
  "settings.matchedBooks": "{{count}} livre{{plural}} associé{{plural}}",
  "settings.unmatchedBooks": "{{count}} unmatched book{{plural}}",
  "settings.syncHistory": "Historique de synchronisation",
  "settings.read": "lus",
  "settings.new": "nouveaux",
  "settings.unmatched": "non associés",

  // Settings - Metadata Providers
  "settings.metadataProviders": "Fournisseurs de métadonnées",
  "settings.metadataProvidersDesc": "Configurer les fournisseurs de métadonnées externes pour l'enrichissement des séries/livres. Chaque bibliothèque peut remplacer le fournisseur par défaut. Tous les fournisseurs sont disponibles pour la recherche rapide dans la modale de métadonnées.",
  "settings.defaultProvider": "Fournisseur par défaut",
  "settings.defaultProviderHelp": "Utilisé par défaut pour la recherche de métadonnées. Les bibliothèques peuvent le remplacer individuellement.",
  "settings.metadataLanguage": "Langue des métadonnées",
  "settings.metadataLanguageHelp": "Langue préférée pour les résultats de recherche et les descriptions. Secours : anglais.",
  "settings.apiKeys": "Clés API",
  "settings.googleBooksKey": "Clé API Google Books",
  "settings.googleBooksPlaceholder": "Optionnel — pour des limites de débit plus élevées",
  "settings.googleBooksHelp": "Fonctionne sans clé mais avec des limites de débit plus basses.",
  "settings.comicvineKey": "Clé API ComicVine",
  "settings.comicvinePlaceholder": "Requise pour utiliser ComicVine",
  "settings.comicvineHelp": "Obtenez votre clé sur",
  "settings.freeProviders": "sont gratuits et ne nécessitent pas de clé API.",

  // Settings - Status Mappings
  "settings.statusMappings": "Correspondance de statuts",
  "settings.statusMappingsDesc": "Configurer la correspondance entre les statuts des fournisseurs et les statuts en base de données. Plusieurs statuts fournisseurs peuvent pointer vers un même statut cible.",
  "settings.targetStatus": "Statut cible",
  "settings.providerStatuses": "Statuts fournisseurs",
  "settings.addProviderStatus": "Ajouter un statut fournisseur…",
  "settings.noMappings": "Aucune correspondance configurée",
  "settings.unmappedSection": "Non mappés",
  "settings.addMapping": "Ajouter une correspondance",
  "settings.selectTargetStatus": "Sélectionner un statut cible",
  "settings.newTargetPlaceholder": "Nouveau statut cible (ex: hiatus)",
  "settings.createTargetStatus": "Créer un statut",

  // Settings - Prowlarr
  "settings.prowlarr": "Prowlarr",
  "settings.prowlarrDesc": "Configurer Prowlarr pour rechercher des releases sur les indexeurs (torrents/usenet). Seule la recherche manuelle est disponible pour le moment.",
  "settings.prowlarrUrl": "URL Prowlarr",
  "settings.prowlarrUrlPlaceholder": "http://localhost:9696",
  "settings.prowlarrApiKey": "Clé API",
  "settings.prowlarrApiKeyPlaceholder": "Clé API Prowlarr",
  "settings.prowlarrCategories": "Catégories",
  "settings.prowlarrCategoriesHelp": "ID de catégories Newznab séparés par des virgules (7030 = Comics, 7020 = Ebooks)",
  "settings.testConnection": "Tester la connexion",
  "settings.testing": "Test en cours...",
  "settings.testSuccess": "Connexion réussie",
  "settings.testFailed": "Échec de la connexion",

  // Prowlarr search modal
  "prowlarr.searchButton": "Prowlarr",
  "prowlarr.modalTitle": "Recherche Prowlarr",
  "prowlarr.searchSeries": "Rechercher la série",
  "prowlarr.searchVolume": "Rechercher",
  "prowlarr.searching": "Recherche en cours...",
  "prowlarr.noResults": "Aucun résultat trouvé",
  "prowlarr.resultCount": "{{count}} résultat{{plural}}",
  "prowlarr.missingVolumes": "Volumes manquants",
  "prowlarr.columnTitle": "Titre",
  "prowlarr.columnIndexer": "Indexeur",
  "prowlarr.columnSize": "Taille",
  "prowlarr.columnSeeders": "Seeds",
  "prowlarr.columnLeechers": "Peers",
  "prowlarr.columnProtocol": "Protocole",
  "prowlarr.searchPlaceholder": "Modifier la recherche...",
  "prowlarr.searchAction": "Rechercher",
  "prowlarr.searchError": "Erreur lors de la recherche",
  "prowlarr.notConfigured": "Prowlarr n'est pas configuré",
  "prowlarr.download": "Télécharger",
  "prowlarr.info": "Info",
  "prowlarr.sendToQbittorrent": "Envoyer à qBittorrent",
  "prowlarr.sending": "Envoi...",
  "prowlarr.sentSuccess": "Envoyé à qBittorrent",
  "prowlarr.sentError": "Échec de l'envoi à qBittorrent",
  "prowlarr.replaceAndDownload": "Télécharger et remplacer les existants",
  "prowlarr.confirmReplace": "Cela va retélécharger tous les volumes du pack, y compris ceux déjà présents. Continuer ?",
  "prowlarr.missingVol": "T{{vol}} manquant",

  // Settings - qBittorrent
  "settings.qbittorrent": "qBittorrent",
  "settings.qbittorrentDesc": "Configurer qBittorrent comme client de téléchargement. Les torrents trouvés via Prowlarr peuvent être envoyés directement à qBittorrent.",
  "settings.qbittorrentUrl": "URL qBittorrent",
  "settings.qbittorrentUrlPlaceholder": "http://localhost:8080",
  "settings.qbittorrentUsername": "Nom d'utilisateur",
  "settings.qbittorrentPassword": "Mot de passe",

  // Settings - Telegram Notifications
  "settings.notifications": "Notifications",
  "settings.telegram": "Telegram",
  "settings.telegramDesc": "Recevoir des notifications Telegram lors des scans, erreurs et liaisons de métadonnées.",
  "settings.botToken": "Bot Token",
  "settings.botTokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11",
  "settings.chatId": "Chat ID",
  "settings.chatIdPlaceholder": "123456789",
  "settings.telegramEnabled": "Activer les notifications Telegram",
  "settings.telegramEvents": "Événements",
  "settings.eventCategoryScan": "Scans",
  "settings.eventCategoryThumbnail": "Miniatures",
  "settings.eventCategoryConversion": "Conversion CBR → CBZ",
  "settings.eventCategoryMetadata": "Métadonnées",
  "settings.eventCompleted": "Terminé",
  "settings.eventFailed": "Échoué",
  "settings.eventCancelled": "Annulé",
  "settings.eventLinked": "Liée",
  "settings.eventBatchCompleted": "Batch terminé",
  "settings.eventBatchFailed": "Batch échoué",
  "settings.eventRefreshCompleted": "Rafraîchissement terminé",
  "settings.eventRefreshFailed": "Rafraîchissement échoué",
  "settings.eventCategoryReadingStatus": "État de lecture",
  "settings.eventMatchCompleted": "Synchro. terminée",
  "settings.eventMatchFailed": "Synchro. échouée",
  "settings.eventPushCompleted": "Push terminé",
  "settings.eventPushFailed": "Push échoué",
  "settings.eventCategoryDownloadDetection": "Détection téléchargements",
  "settings.telegramHelp": "Comment obtenir les informations ?",
  "settings.telegramHelpBot": "Ouvrez Telegram, recherchez <b>@BotFather</b>, envoyez <code>/newbot</code> et suivez les instructions. Copiez le token fourni.",
  "settings.telegramHelpChat": "Envoyez un message à votre bot, puis ouvrez <code>https://api.telegram.org/bot&lt;TOKEN&gt;/getUpdates</code> dans votre navigateur. Le <b>chat id</b> apparaît dans <code>message.chat.id</code>.",
  "settings.telegramHelpGroup": "Pour un groupe : ajoutez le bot au groupe, envoyez un message, puis consultez la même URL. Les IDs de groupe sont négatifs (ex: <code>-123456789</code>).",

  // Settings - AniList
  "settings.anilist": "État de lecture",
  "settings.anilistTitle": "AniList Config",
  "settings.anilistDesc": "Synchronisez votre progression de lecture avec AniList. Obtenez un token d'accès personnel sur anilist.co/settings/developer.",
  "settings.anilistToken": "Token d'accès personnel",
  "settings.anilistTokenPlaceholder": "Token AniList...",
  "settings.anilistUserId": "ID utilisateur AniList",
  "settings.anilistUserIdPlaceholder": "Numérique (ex: 123456)",
  "settings.anilistConnected": "Connecté en tant que",
  "settings.anilistNotConnected": "Non connecté",
  "settings.anilistTestConnection": "Tester la connexion",
  "settings.anilistLibraries": "Bibliothèques",
  "settings.anilistLibrariesDesc": "Activer la synchronisation AniList pour chaque bibliothèque",
  "settings.anilistEnabled": "Sync AniList activée",
  "settings.anilistLocalUserTitle": "Utilisateur local",
  "settings.anilistLocalUserDesc": "Choisir l'utilisateur local dont la progression est synchronisée avec ce compte AniList",
  "settings.anilistLocalUserNone": "— Sélectionner un utilisateur —",
  "settings.anilistSyncTitle": "AniList Sync",
  "settings.anilistSyncDesc": "Envoyer la progression locale vers AniList. Règles : aucun lu → PLANNING · au moins 1 lu → CURRENT (progression = nbre de tomes lus) · tous les tomes publiés lus (total_volumes connu) → COMPLETED.",
  "settings.anilistSyncButton": "Synchroniser vers AniList",
  "settings.anilistPullButton": "Importer depuis AniList",
  "settings.anilistPullDesc": "Importer votre liste de lecture AniList et mettre à jour la progression locale. Règles : COMPLETED/CURRENT/REPEATING → livres marqués lus jusqu'au volume de progression · PLANNING/PAUSED/DROPPED → non lus.",
  "settings.anilistSyncing": "Synchronisation...",
  "settings.anilistPulling": "Import...",
  "settings.anilistSynced": "{{count}} série(s) synchronisée(s)",
  "settings.anilistUpdated": "{{count}} série(s) mise(s) à jour",
  "settings.anilistSkipped": "{{count}} ignorée(s)",
  "settings.anilistErrors": "{{count}} erreur(s)",
  "settings.anilistLinks": "Liens AniList",
  "settings.anilistLinksDesc": "Séries associées à AniList",
  "settings.anilistNoLinks": "Aucune série liée à AniList",
  "settings.anilistUnlink": "Délier",
  "settings.anilistSyncStatus": "synced",
  "settings.anilistLinkedStatus": "linked",
  "settings.anilistErrorStatus": "error",
  "settings.anilistUnlinkedTitle": "{{count}} série(s) non liée(s)",
  "settings.anilistUnlinkedDesc": "Ces séries appartiennent à des bibliothèques activées mais n'ont pas encore de lien AniList. Recherchez chacune pour la lier.",
  "settings.anilistSearchButton": "Rechercher",
  "settings.anilistSearchNoResults": "Aucun résultat AniList.",
  "settings.anilistLinkButton": "Lier",
  "settings.anilistRedirectUrlLabel": "URL de redirection à configurer dans votre app AniList :",
  "settings.anilistRedirectUrlHint": "Collez cette URL dans le champ « Redirect URL » de votre application sur anilist.co/settings/developer.",
  "settings.anilistTokenPresent": "Token présent — non vérifié",
  "settings.anilistPreviewButton": "Prévisualiser",
  "settings.anilistPreviewing": "Chargement...",
  "settings.anilistPreviewTitle": "{{count}} série(s) à synchroniser",
  "settings.anilistPreviewEmpty": "Aucune série à synchroniser (liez des séries à AniList d'abord).",
  "settings.anilistClientId": "Client ID AniList",
  "settings.anilistClientIdPlaceholder": "Ex: 37777",
  "settings.anilistConnectButton": "Connecter avec AniList",
  "settings.anilistConnectDesc": "Utilisez OAuth pour vous connecter automatiquement. Le Client ID se trouve dans vos applications AniList (anilist.co/settings/developer).",
  "settings.anilistManualToken": "Token manuel (avancé)",

  // Settings - Language
  "settings.language": "Langue",
  "settings.languageDesc": "Choisir la langue de l'interface",

  // Pagination
  "pagination.show": "Afficher",
  "pagination.displaying": "Affichage de {{count}} éléments",
  "pagination.range": "{{start}}-{{end}} sur {{total}}",
  "pagination.previous": "Précédent",
  "pagination.next": "Suivant",

  // Book detail
  "bookDetail.libraries": "Bibliothèques",
  "bookDetail.coverOf": "Couverture de {{title}}",
  "bookDetail.technicalInfo": "Informations techniques",
  "bookDetail.file": "Fichier",
  "bookDetail.fileFormat": "Format fichier",
  "bookDetail.parsing": "Parsing",
  "bookDetail.updatedAt": "Mis à jour",

  // Book preview
  "bookPreview.preview": "Aperçu",
  "bookPreview.pages": "pages {{start}}–{{end}} / {{total}}",
  "bookPreview.prev": "← Préc.",
  "bookPreview.next": "Suiv. →",

  // Edit book form
  "editBook.editMetadata": "Modifier les métadonnées",
  "editBook.title": "Titre",
  "editBook.titlePlaceholder": "Titre du livre",
  "editBook.authors": "Auteur(s)",
  "editBook.addAuthor": "Ajouter un auteur (Entrée pour valider)",
  "editBook.language": "Langue",
  "editBook.languagePlaceholder": "ex : fr, en, jp",
  "editBook.series": "Série",
  "editBook.seriesPlaceholder": "Nom de la série",
  "editBook.volume": "Volume",
  "editBook.volumePlaceholder": "Numéro de volume",
  "editBook.isbn": "ISBN",
  "editBook.publishDate": "Date de publication",
  "editBook.publishDatePlaceholder": "ex : 2023-01-15",
  "editBook.description": "Description",
  "editBook.descriptionPlaceholder": "Résumé / description du livre",
  "editBook.lockedField": "Champ verrouillé (protégé des synchros)",
  "editBook.clickToLock": "Cliquer pour verrouiller ce champ",
  "editBook.lockedFieldsNote": "Les champs verrouillés ne seront pas écrasés par les synchros de métadonnées externes.",
  "editBook.saveError": "Erreur lors de la sauvegarde",
  "editBook.savingLabel": "Sauvegarde…",
  "editBook.saveLabel": "Sauvegarder",
  "editBook.removeAuthor": "Supprimer {{name}}",

  // Edit series form
  "editSeries.title": "Modifier la série",
  "editSeries.name": "Nom",
  "editSeries.namePlaceholder": "Nom de la série",
  "editSeries.startYear": "Année de début",
  "editSeries.startYearPlaceholder": "ex : 1990",
  "editSeries.totalVolumes": "Nombre de volumes",
  "editSeries.status": "Statut",
  "editSeries.authors": "Auteur(s)",
  "editSeries.applyToBooks": "→ livres",
  "editSeries.applyToBooksTitle": "Appliquer auteur et langue à tous les livres de la série",
  "editSeries.bookAuthor": "Auteur (livres)",
  "editSeries.bookAuthorPlaceholder": "Écrase le champ auteur de chaque livre",
  "editSeries.bookLanguage": "Langue (livres)",
  "editSeries.publishers": "Éditeur(s)",
  "editSeries.addPublisher": "Ajouter un éditeur (Entrée pour valider)",
  "editSeries.descriptionPlaceholder": "Synopsis ou description de la série…",

  // Convert button
  "convert.convertToCbz": "Convertir en CBZ",
  "convert.converting": "Conversion…",
  "convert.started": "Conversion lancée.",
  "convert.viewJob": "Voir la tâche →",
  "convert.failed": "Échec de la conversion",
  "convert.unknownError": "Erreur inconnue",

  // Mark read buttons
  "markRead.markUnread": "Marquer non lu",
  "markRead.markAllRead": "Tout marquer lu",
  "markRead.markAsRead": "Marquer comme lu",

  // Metadata search modal
  "metadata.metadataLink": "Lien métadonnées",
  "metadata.searchExternal": "Rechercher les métadonnées externes",
  "metadata.provider": "Fournisseur :",
  "metadata.searching": "Recherche de \"{{name}}\"...",
  "metadata.noResults": "Aucun résultat trouvé.",
  "metadata.resultCount": "{{count}} résultat{{plural}} trouvé{{plural}}",
  "metadata.howToSync": "Comment souhaitez-vous synchroniser ?",
  "metadata.syncSeriesOnly": "Synchroniser la série uniquement",
  "metadata.syncSeriesOnlyDesc": "Mettre à jour la description, les auteurs, les éditeurs et l'année",
  "metadata.syncSeriesAndBooks": "Synchroniser la série + les livres",
  "metadata.syncSeriesAndBooksDesc": "Récupérer aussi la liste des livres et afficher les tomes manquants",
  "metadata.backToResults": "Retour aux résultats",
  "metadata.syncingMetadata": "Synchronisation des métadonnées...",
  "metadata.syncSuccess": "Métadonnées synchronisées avec succès !",
  "metadata.seriesLabel": "Série",
  "metadata.booksLabel": "Livres",
  "metadata.booksMatched": "{{matched}} associé{{plural}}",
  "metadata.booksUnmatched": "{{count}} non associé{{plural}}",
  "metadata.external": "Externe",
  "metadata.local": "Locaux",
  "metadata.missingLabel": "Manquants",
  "metadata.missingBooks": "{{count}} livre{{plural}} manquant{{plural}}",
  "metadata.unknown": "Inconnu",
  "metadata.linkedTo": "Lié à",
  "metadata.viewExternal": "Voir sur la source externe",
  "metadata.searchAgain": "Rechercher à nouveau",
  "metadata.unlink": "Dissocier",
  "metadata.refreshLink": "Rafraîchir",
  "metadata.searchButton": "Rechercher les métadonnées",
  "metadata.metadataButton": "Métadonnées",
  "metadata.locked": "verrouillé",
  "metadata.searchFailed": "Échec de la recherche",
  "metadata.linkFailed": "Échec de la création du lien",
  "metadata.approveFailed": "Échec de l'approbation",
  "metadata.chapters": "chapitres",
  "metadata.volumes": "volumes",
  "metadata.inProgress": "en cours",
  "metadata.fallbackUsed": "(secours)",

  // Field labels
  "field.description": "Description",
  "field.authors": "Auteurs",
  "field.publishers": "Éditeurs",
  "field.start_year": "Année",
  "field.total_volumes": "Nb volumes",
  "field.status": "Statut",
  "field.summary": "Résumé",
  "field.isbn": "ISBN",
  "field.publish_date": "Date de publication",
  "field.language": "Langue",

  // Folder picker/browser
  "folder.selectFolder": "Sélectionner un dossier...",
  "folder.selectFolderTitle": "Sélectionner le dossier",
  "folder.clickToSelect": "Cliquez sur un dossier pour le sélectionner",
  "folder.noFolders": "Aucun dossier trouvé",

  // Series filters
  "seriesFilters.all": "Tous",
  "seriesFilters.missingBooks": "Livres manquants",

  // Metadata filter
  "series.metadata": "Métadonnées",
  "series.metadataAll": "Toutes",
  "series.metadataLinked": "Associée",
  "series.metadataUnlinked": "Non associée",

  // Downloads page
  "downloads.title": "Téléchargements",
  "downloads.refresh": "Actualiser",
  "downloads.filterActive": "En cours",
  "downloads.empty": "Aucun téléchargement",
  "downloads.volumes": "Volumes",
  "downloads.filesImported": "fichiers importés",
  "downloads.status.downloading": "Téléchargement",
  "downloads.status.completed": "Terminé",
  "downloads.status.importing": "Import en cours",
  "downloads.status.imported": "Importé",
  "downloads.status.error": "Erreur",
  "downloads.delete": "Supprimer",
  "downloads.cancel": "Annuler le téléchargement",
  "downloads.confirmDelete": "Supprimer ce téléchargement ?",
  "downloads.confirmCancel": "Annuler ce téléchargement ? Le torrent sera aussi supprimé de qBittorrent.",
  "downloads.availableTitle": "Disponibles au téléchargement",
  "downloads.detectedSeries": "{{count}} séries détectées",
  "downloads.missing": "manquant(s)",
  "downloads.showMore": "Voir {{count}} de plus…",
  "downloads.showLess": "Réduire",

  // Settings - Torrent Import
  "settings.torrentImport": "Import automatique",
  "settings.torrentImportDesc": "Lorsqu'activé, les torrents ajoutés via le backoffice sont suivis et les fichiers sont automatiquement importés dans la bibliothèque à la fin du téléchargement.",
  "settings.torrentImportEnabled": "Activer l'import automatique",
  "settings.torrentImportPollingInfo": "L'API interroge qBittorrent toutes les 30 secondes pour détecter les téléchargements terminés. Aucune configuration supplémentaire dans qBittorrent n'est nécessaire.",
} as const;

export type TranslationKey = keyof typeof fr;
export default fr;
