{
  "settings": {
    "title": "Paramètres",
    "realtimeHint": "Toutes les modifications sont appliquées en temps réel",
    "general": "Général",
    "reading": "Lecture",
    "fonts": "Polices",
    "ai": "IA",
    "translationTab": "Traduction",
    "externalAi": "Accès IA externe",
    "tts": "TTS",
    "about": "À propos",
    "other": "Plus",
    "aboutDesc": "Lisez tout, comprenez davantage",
    "version": "Version",
    "techStack": "Stack technique",
    "techStackTauri": "Framework bureau multiplateforme",
    "techStackReact": "Bibliothèque de composants UI",
    "techStackTypeScript": "Sûreté de typage",
    "techStackFoliate": "Moteur de rendu eBook",
    "feedback": "Commentaires",
    "supportCenter": "Centre d'assistance",
    "license": "Open source sous licence GPL v3",
    "checkUpdate": "Vérifier les mises à jour",
    "updateChecking": "Vérification...",
    "updateAvailable": "Mise à jour disponible",
    "updateDownloading": "Téléchargement",
    "updateReady": "Mise à jour prête",
    "updateError": "Échec de la mise à jour",
    "downloadUpdate": "Télécharger la mise à jour",
    "downloading": "Téléchargement",
    "updateReadyMessage": "Mise à jour téléchargée, redémarrez l'application pour terminer l'installation",
    "updateErrorMessage": "Échec de la mise à jour, veuillez réessayer plus tard",
    "upToDate": "Vous êtes à jour",
    "relaunch": "Redémarrer l'appli",
    "dismiss": "Ignorer",
    "newVersionAvailable": "Nouvelle version {{version}} disponible. Télécharger maintenant ?",
    "later": "Plus tard",
    "ok": "OK",
    "skills": "Compétences",
    "language": "Langue",
    "general_title": "Général",
    "general_desc": "Apparence et comportement de l'appli",
    "theme": "Thème",
    "themeDesc": "Choisissez votre thème préféré",
    "system": "Système",
    "light": "Clair",
    "dark": "Sombre",
    "sepia": "Sépia",
    "autoSave": "Intervalle de sauvegarde auto",
    "autoSaveDesc": "Fréquence de sauvegarde de la progression de lecture",
    "languageDesc": "Choisissez la langue d'affichage",
    "appearance": "Apparence et langue",
    "updaterNetworkError": "Impossible de se connecter au serveur de mises à jour, vérifiez le réseau",
    "updaterNoUpdate": "Aucune mise à jour disponible ou service temporairement indisponible",
    "updaterCheckFailed": "Échec de la vérification des mises à jour",
    "updaterNoAvailable": "Aucune mise à jour disponible",
    "updaterDownloadFailed": "Échec du téléchargement de la mise à jour",
    "updaterRelaunchFailed": "Échec du redémarrage de l'appli. Veuillez la rouvrir manuellement pour terminer l'installation de la mise à jour",
    "relaunching": "Redémarrage...",
    "reading_title": "Lecture",
    "reading_desc": "Personnalisez votre expérience de lecture",
    "readingNotice": "Les paramètres de police et de mise en page s'appliquent uniquement aux EPUB et autres formats reflowables, pas aux PDF.",
    "fontSize": "Taille de police : {{size}}px",
    "lineHeight": "Interligne : {{height}}",
    "fontTheme": "Thème de police",
    "paragraphSpacing": "Espacement des paragraphes",
    "showTopTitleProgress": "Titre et progression en haut",
    "showBottomTimeBattery": "Heure et batterie en bas",
    "volumeButtonsPageTurn": "Tourner les pages avec les boutons de volume",
    "volumeButtonsPageTurnDesc": "En lecture, les boutons de volume tournent les pages",
    "followSystemFontScale": "Suivre l'échelle de police système",
    "followSystemFontScaleDesc": "Mise à l'échelle auto selon la taille de police d'accessibilité du système",
    "fixedLayoutNotice": "Le PDF est un format à mise en page fixe. Les paramètres de police et mise en page ne sont pas disponibles.",
    "notAvailableForPdf": "Non disponible pour les PDF",
    "sansSerif": "Sans-sérif",
    "serif": "Sérif",
    "monospace": "Monospace",
    "viewMode": "Mode d'affichage",
    "paginated": "Paginé",
    "scroll": "Défilement",
    "paginatedLayout": "Mise en page",
    "singlePage": "Page simple",
    "doublePage": "Double page",
    "ai_title": "Configuration IA",
    "ai_desc": "Configurer les points de terminaison IA et les paramètres de modèle",
    "ai_endpoints": "Points de terminaison",
    "ai_addEndpoint": "Ajouter un point de terminaison",
    "ai_provider": "Fournisseur",
    "ai_provider_openai": "Compatible OpenAI",
    "ai_provider_anthropic": "Anthropic Claude",
    "ai_provider_google": "Google Gemini",
    "ai_provider_deepseek": "DeepSeek",
    "ai_endpointName": "Nom",
    "ai_endpointNamePlaceholder": "ex. OpenAI, Ollama, Claude...",
    "ai_apiKey": "Clé API",
    "ai_baseUrl": "URL de base",
    "ai_baseUrlPlaceholder": "https://api.openai.com/v1",
    "ai_baseUrlOptional": "URL de base (optionnelle)",
    "ai_fetchModels": "Récupérer les modèles",
    "ai_testConnection": "Tester la connexion",
    "ai_testingConnection": "Test en cours...",
    "ai_testSuccess": "Connexion réussie",
    "ai_testSuccessWithModels": "Connexion réussie, {{count}} modèle(s) disponible(s)",
    "ai_testSuccessWithModel": "Connexion réussie, testé avec le modèle {{model}}",
    "ai_testFailed": "Échec de la connexion",
    "ai_requestUrlPreview": "URL de requête finale",
    "ai_baseUrlHint": "Les points de terminaison compatibles OpenAI ajoutent /v1 par défaut. Activez le mode URL exacte si vous voulez utiliser l'URL telle quelle.",
    "ai_ollamaCorsHint": "Impossible de se connecter à Ollama ? Définissez la variable d'environnement OLLAMA_ORIGINS=* et redémarrez Ollama.",
    "ai_exactRequestUrl": "Utiliser l'URL exacte",
    "ai_exactRequestUrlLabel": "URL de requête exacte",
    "ai_exactRequestUrlDesc": "Utiliser l'URL telle quelle, sans ajouter automatiquement /v1, /chat/completions ou /models.",
    "ai_exactRequestUrlFetchHint": "Le mode URL exacte ne peut pas déduire la liste des modèles automatiquement. Ajoutez un modèle manuellement avant de tester.",
    "ai_testModel": "Modèle de test",
    "ai_testModelAuto": "Sélection automatique du premier modèle disponible",
    "ai_fetchingModels": "Récupération...",
    "ai_modelsLoaded": "{{count}} modèles chargés",
    "ai_noModels": "Aucun modèle — récupérez depuis l'API ou ajoutez manuellement",
    "ai_addModel": "Ajouter",
    "ai_addModelPlaceholder": "Entrer le nom du modèle, ex. gpt-4o",
    "ai_removeModel": "Supprimer le modèle",
    "ai_modelsList": "Modèles",
    "ai_removeEndpoint": "Supprimer",
    "ai_activeEndpoint": "Point de terminaison actif",
    "ai_activeModel": "Modèle",
    "ai_selectModel": "Sélectionner un modèle",
    "ai_selectEndpoint": "Sélectionner un point de terminaison",
    "ai_noEndpoints": "Aucun point de terminaison configuré",
    "ai_setDefault": "Définir par défaut",
    "ai_name": "Nom",
    "webdavUrl": "URL du serveur WebDAV",
    "webdavUsername": "Nom d'utilisateur",
    "webdavPassword": "Mot de passe d'application",
    "testConnection": "Tester la connexion",
    "ai_providerLabel": "Fournisseur",
    "ai_deleteEndpoint": "Supprimer le point de terminaison",
    "ai_globalParams": "Paramètres globaux",
    "ai_contextWindow": "Fenêtre de contexte",
    "ai_slidingWindow": "Fenêtre glissante",
    "ai_contextWindowUnit": "messages",
    "ai_addManualModelPlaceholder": "Ajouter un modèle manuellement...",
    "ai_newEndpoint": "Nouveau point de terminaison",
    "model": "Modèle",
    "apiKey": "Clé API",
    "baseUrl": "URL de base (optionnelle)",
    "parameters": "Paramètres",
    "temperature": "Température : {{value}}",
    "maxTokens": "Tokens max : {{value}}",
    "slidingWindowSize": "Longueur du contexte : {{value}} tours",
    "translation_title": "Paramètres de traduction",
    "translation_desc": "Configurer les options de traduction",
    "enableTranslation": "Activer la traduction",
    "enableTranslationDesc": "Afficher la traduction du texte sélectionné",
    "targetLanguage": "Langue cible",
    "showOriginal": "Afficher l'original",
    "showOriginalDesc": "Afficher le texte original à côté de la traduction",
    "autoTranslate": "Traduction automatique",
    "autoTranslateDesc": "Traduire automatiquement la page",
    "skills_title": "Compétences",
    "skills_desc": "Gérer les extensions d'outils IA",
    "addSkill": "Ajouter une compétence",
    "noSkills": "Aucune compétence personnalisée. Les compétences intégrées sont automatiquement disponibles.",
    "builtIn": "Intégrée",
    "enabled": "Activée",
    "disabled": "Désactivée",
    "viewSkill": "Voir la compétence",
    "editSkill": "Modifier la compétence",
    "skillName": "Nom de la compétence",
    "skillNamePlaceholder": "ex. Générer une carte mentale",
    "skillDescription": "Description de la compétence",
    "skillDescriptionPlaceholder": "Brève description de ce que fait cette compétence",
    "skillPrompt": "Prompt de la compétence",
    "skillPromptPlaceholder": "Décrivez en détail le comportement et les exigences de sortie de la compétence",
    "builtinNameReadOnly": "Les noms des compétences intégrées ne peuvent pas être modifiés",
    "skillUsage": "Instructions d'utilisation de la compétence",
    "skillUsageSummary": "Résumé",
    "skillUsageSummaryDesc": "Tapez « résumer ce chapitre » ou « résumé du livre » dans le chat",
    "skillUsageCharacter": "Personnages",
    "skillUsageCharacterDesc": "Demandez « qui sont les personnages » ou « analyser le protagoniste »",
    "skillUsageQuote": "Citations",
    "skillUsageQuoteDesc": "Demandez « trouver des citations » ou « passages remarquables »",
    "skillUsageAnalysis": "Analyse",
    "skillUsageAnalysisDesc": "Demandez « quel est l'argument de l'auteur » ou « analyser la logique »",
    "vectorModel": "Modèle vectoriel",
    "vm_title": "Modèle vectoriel",
    "vm_desc": "Configurer le modèle d'embedding pour la recherche sémantique et la récupération RAG",
    "vm_modeTitle": "Source du modèle",
    "vm_modeBuiltin": "Modèle local intégré",
    "vm_modeBuiltinDesc": "Télécharger le modèle pour une exécution locale, sans API requise",
    "vm_modeRemote": "API distante",
    "vm_modeRemoteDesc": "Utiliser un service d'API d'embedding externe",
    "vm_builtinModels": "Modèles intégrés",
    "vm_builtinDesc": "Téléchargez des modèles légers pour une exécution locale dans l'appli. Le premier téléchargement est automatiquement mis en cache.",
    "vm_download": "Télécharger",
    "vm_loaded": "Chargé",
    "vm_clearCache": "Effacer",
    "vm_clearing": "Effacement...",
    "vm_clearSuccess": "Cache effacé",
    "vm_recommended": "Recommandé",
    "vm_loadError": "Échec du chargement : {{error}}",
    "vm_remoteModels": "Modèles distants",
    "vm_remoteDesc": "Se connecter à un service d'API d'embedding externe",
    "vm_noRemoteModels": "Aucune configuration de modèle distant. Ajoutez-en un pour utiliser une API d'embedding externe.",
    "vm_models": "Liste des modèles",
    "vm_addModel": "Ajouter un modèle",
    "vm_addModelTitle": "Ajouter un nouveau modèle",
    "vm_editModel": "Modifier le modèle",
    "vm_noModels": "Aucune configuration de modèle vectoriel. Ajoutez-en un pour activer la recherche sémantique.",
    "vm_name": "Nom",
    "vm_modelId": "ID du modèle",
    "vm_url": "Point de terminaison API",
    "vm_urlHint": "Entrez la racine API, une base /v1 ou l'URL complète /embeddings. L'enregistrement et le test la normalisent automatiquement.",
    "vm_apiKey": "Clé API",
    "vm_description": "Description",
    "vm_descriptionPlaceholder": "Description optionnelle du modèle",
    "vm_dimension": "Dimension : {{dim}}",
    "vm_test": "Tester",
    "vm_testing": "Test en cours...",
    "vm_testSuccess": "✓ Connexion réussie | Dimension : {{dimension}}",
    "vm_testFailed": "✗ Échec de la connexion : {{error}}",
    "vm_testFailedWithUrl": "✗ Échec de la connexion : {{error}} (URL testée : {{url}})",
    "vm_model_desc_miniLM": "Rapide et léger, bonne qualité générale",
    "vm_model_desc_bgeEn": "Embeddings anglais de haute qualité",
    "vm_model_desc_bgeZh": "Embeddings chinois de haute qualité",
    "vm_model_desc_e5": "Support multilingue, bonnes performances générales",
    "vm_lang_en": "Anglais",
    "vm_lang_zh": "Chinois",
    "vm_lang_multi": "100+ langues",
    "sync": "Synchronisation",
    "syncTitle": "Synchronisation WebDAV",
    "syncDesc": "Synchroniser les données de lecture entre appareils via WebDAV",
    "syncLayoutMigrationNotice": "Mise en page distante mise à jour — veuillez mettre à jour tous les appareils synchronisés vers cette version",
    "syncConnection": "Paramètres de connexion",
    "syncUrl": "URL du serveur",
    "syncUrlPlaceholder": "https://dav.example.com",
    "syncUsername": "Nom d'utilisateur",
    "syncPassword": "Mot de passe",
    "syncRemoteRoot": "Dossier distant",
    "syncRemoteRootPlaceholder": "readany",
    "syncRemoteRootDesc": "Choisissez le dossier distant réservé à la synchronisation ReadAny. Les chemins imbriqués sont pris en charge et seront créés automatiquement lors du test ou de la première synchronisation. ReadAny n'analyse pas les livres que vous y avez déjà placés ; importez une bibliothèque WebDAV existante avec « Connecter un autre WebDAV ».",
    "syncTestConnection": "Tester la connexion",
    "syncTesting": "Test en cours...",
    "syncTestSuccess": "Connexion réussie",
    "syncTestFailed": "Échec de la connexion : {{error}}",
    "syncSave": "Enregistrer la configuration",
    "syncSaved": "Configuration enregistrée",
    "syncStatus": "État de la synchronisation",
    "syncNow": "Synchroniser maintenant",
    "syncSyncing": "Synchronisation...",
    "syncLastSync": "Dernière synchronisation",
    "syncNever": "Jamais synchronisé",
    "syncSuccess": "Synchronisation terminée",
    "syncFailed": "Échec de la synchronisation : {{error}}",
    "syncRecordsUp": "{{count}} enregistrements envoyés",
    "syncRecordsDown": "{{count}} enregistrements téléchargés",
    "syncFilesUp": "{{count}} fichiers envoyés",
    "syncFilesDown": "{{count}} fichiers téléchargés",
    "syncFilesPartialFailed": "⚠️ Certains fichiers n'ont pas été synchronisés ({{uploadFailed}} échecs d'envoi, {{downloadFailed}} échecs de téléchargement). Causes probables : le serveur distant a refusé de créer un nouveau dossier, coupure réseau ou accès refusé. La prochaine synchronisation réessaiera automatiquement.",
    "syncAutoSync": "Synchronisation automatique",
    "syncAutoSyncDesc": "Synchroniser automatiquement les données en arrière-plan",
    "syncInterval": "Intervalle de synchronisation",
    "syncIntervalDesc": "Lorsque la synchronisation auto est activée, vérifier les mises à jour toutes les N minutes",
    "syncIntervalMinutes": "{{count}} min",
    "syncAllowInsecure": "Autoriser les connexions non sécurisées",
    "syncAllowInsecureDesc": "Ignorer la vérification du certificat TLS (pour les certificats auto-signés)",
    "syncAllowInsecureDescMobile": "Utiliser HTTP au lieu de HTTPS pour les serveurs avec certificat auto-signé",
    "syncWebdavAuthFailed": "Échec de l'authentification WebDAV. Vérifiez le nom d'utilisateur et le mot de passe d'application.",
    "syncWebdavForbidden": "Accès WebDAV refusé. Vérifiez les permissions du compte pour ce chemin.",
    "syncWebdavNotFound": "L'adresse ou le chemin WebDAV est introuvable. Vérifiez l'URL du serveur et le chemin racine.",
    "syncWebdavMethodNotAllowed": "Le serveur n'a pas répondu correctement à une requête WebDAV. Assurez-vous que WebDAV est activé.",
    "syncWebdavTimeout": "Délai d'attente WebDAV dépassé après {{seconds}} secondes. Vérifiez l'URL du serveur, le port et le réseau.",
    "syncWebdavNetworkError": "Impossible d'atteindre le serveur WebDAV. Vérifiez le réseau, l'URL, le port ou la configuration du certificat.",
    "syncWebdavDesktopScopeError": "Cette version bureau n'a pas encore autorisé cette adresse WebDAV. Mettez à jour vers la dernière version et redémarrez l'appli, puis réessayez.",
    "syncWebdavTlsError": "Échec de la validation du certificat TLS WebDAV. Vérifiez le certificat ou autorisez les connexions non sécurisées et réessayez.",
    "syncWebdavServerError": "Erreur du serveur WebDAV ({{status}}).",
    "syncWebdavHttpError": "Échec de la requête WebDAV ({{status}}).",
    "syncWebdavUnknownError": "Échec de la requête WebDAV : {{message}}",
    "syncNotConfigured": "Non configuré",
    "syncAdvanced": "Options avancées",
    "syncForceUpload": "Envoi complet",
    "syncForceUploadDesc": "Écraser la base de données distante, les livres et les couvertures avec les données actuelles de cet appareil.",
    "syncForceUploadConfirm": "Lancer un envoi complet ? La base de données distante sera écrasée et les livres et couvertures distants correspondants seront renvoyés.",
    "syncForceDownload": "Téléchargement complet",
    "syncForceDownloadDesc": "Écraser la base de données, les livres et les couvertures de cet appareil avec la copie distante.",
    "syncForceDownloadConfirm": "Lancer un téléchargement complet ? La base de données de cet appareil sera écrasée et les livres et couvertures distants seront retéléchargés.",
    "syncDeviceId": "ID de l'appareil",
    "syncReset": "Réinitialiser les données de sync",
    "syncResetDesc": "Effacer toutes les métadonnées de synchronisation. Utilisez ceci si la synchronisation rencontre des problèmes.",
    "syncResetConfirm": "Êtes-vous sûr de vouloir réinitialiser ? Cela effacera tout l'état de synchronisation et effectuera une resynchronisation complète la prochaine fois.",
    "syncResetDone": "Les données de synchronisation ont été réinitialisées",
    "syncDisconnect": "Déconnecter",
    "syncDisconnectConfirm": "Êtes-vous sûr de vouloir déconnecter ? Les données sur cet appareil ne seront pas supprimées.",
    "syncChecking": "Vérification...",
    "syncUploading": "Envoi de la base de données...",
    "syncDownloading": "Téléchargement de la base de données...",
    "syncSyncingFiles": "Synchronisation des fichiers...",
    "syncError": "Erreur de synchronisation",
    "syncDirection": "Direction : {{direction}}",
    "syncDuration": "Durée : {{ms}}ms",
    "syncConflictTitle": "Conflit de synchronisation",
    "syncConflictDesc": "Les données locales et distantes ont toutes deux été modifiées. Choisissez quelle version conserver.",
    "syncConflictUpload": "Envoyer la version locale",
    "syncConflictDownload": "Télécharger la version distante",
    "syncProgressDatabase": "{{operation}} en cours...",
    "syncProgressFiles": "{{operation}} fichiers {{completed}}/{{total}}",
    "syncBackendType": "Méthode de synchronisation",
    "syncWebdavDesc": "Synchroniser via le service WebDAV",
    "syncS3Desc": "Synchroniser via un stockage compatible S3",
    "syncLANDesc": "Transfert rapide en réseau local",
    "syncWebDavConfig": "Configuration WebDAV",
    "syncS3Config": "Configuration S3",
    "syncS3Endpoint": "Point de terminaison du service",
    "syncS3Region": "Région",
    "syncS3Bucket": "Bucket",
    "syncS3RemoteRoot": "Dossier de synchronisation",
    "syncS3RemoteRootDesc": "Choisissez le préfixe de dossier dans ce bucket. Les chemins imbriqués sont pris en charge, par exemple apps/readany.",
    "syncS3AccessKeyId": "Clé d'accès (Access Key ID)",
    "syncS3SecretAccessKey": "Clé secrète (Secret Access Key)",
    "syncS3PathStyle": "Utiliser une URL de style chemin",
    "syncLANConfig": "Transfert réseau local",
    "syncLANDescFull": "Importer de manière incrémentale les données d'un autre appareil sur le même réseau local, en fusionnant les modifications de bibliothèque et en téléchargeant les livres et couvertures manquants.",
    "syncLANServer": "Envoyer cet appareil",
    "syncLANServerDesc": "Partager les données de cet appareil pour qu'un autre appareil les importe",
    "syncLANClient": "Importer depuis un appareil",
    "syncLANClientDesc": "Importer rapidement les données de bibliothèque d'un autre appareil",
    "syncLANServerTitle": "Envoyer les données de cet appareil",
    "syncLANClientTitle": "Importer les données d'un appareil",
    "syncLANServerStatus": {
      "idle": "Non démarré",
      "starting": "Préparation...",
      "running": "En attente de l'importation",
      "stopping": "Arrêt...",
      "error": "Erreur"
    },
    "syncLANQRPlaceholder": "Le QR code apparaîtra ici",
    "syncLANPairCode": "Code d'appairage",
    "syncLANServerHint": "Ouvrez ReadAny sur un autre appareil et scannez ce QR code ou entrez le code d'appairage pour importer les données de cet appareil",
    "syncLANServerStart": "Démarrer le serveur",
    "syncLANServerStarting": "Démarrage...",
    "syncLANServerStop": "Arrêter le serveur",
    "syncLANScanQR": "Scanner le QR code",
    "syncLANScannerPlaceholder": "Zone de prévisualisation caméra",
    "syncLANManualConnect": "Importation manuelle",
    "syncLANIP": "Adresse IP",
    "syncLANPort": "Port",
    "syncLANPairCodeLabel": "Code d'appairage",
    "syncLANInvalidQR": "QR code invalide",
    "syncLANFillAll": "Veuillez remplir tous les champs",
    "syncLANConnectionFailed": "Échec de la connexion, vérifiez si le code d'appairage est correct",
    "syncLANConnecting": "Connexion...",
    "syncLANConnect": "Connecter et importer",
    "syncLANManual": "Ou saisie manuelle",
    "syncLANScanHint": "Alignez le scanner avec le QR code du bureau",
    "syncLANImportWarningTitle": "Avis d'importation réseau local",
    "syncLANImportWarning": "La connexion importera de manière incrémentale les modifications de la base de données depuis l'appareil serveur et téléchargera les livres et couvertures manquants au lieu de remplacer intégralement cet appareil. Si le serveur a des suppressions explicites, celles-ci seront également synchronisées.",
    "syncLANImportBanner": "Cette importation réseau local fusionne désormais les modifications et télécharge les fichiers manquants au lieu de remplacer toute la bibliothèque.",
    "syncLANImportStatus": "État de l'importation",
    "syncLANLastImport": "Dernière importation",
    "syncLANPreparingImport": "Préparation de l'importation",
    "syncLANImporting": "Importation",
    "syncLANImportingFiles": "Importation des fichiers",
    "syncLANImportProgressDatabase": "Importation de la base de données...",
    "syncLANImportProgressFiles": "Importation des fichiers {{completed}}/{{total}}",
    "syncLANImportComplete": "Importation terminée",
    "syncLANImportedFiles": "{{count}} fichiers importés",
    "syncLANExpoGoUnsupported": "Expo Go ne prend pas en charge l'émetteur réseau local car il nécessite des modules TCP natifs. Veuillez utiliser un Dev Client personnalisé (expo run) ou l'appli de bureau.",
    "syncAndroidExpoGoHttpUnsupported": "Android Expo Go ne prend pas en charge le test de ce point de terminaison WebDAV HTTP simple. Veuillez utiliser HTTPS, ou retester dans un Dev Client personnalisé / build de production.",
    "cameraPermission": "Permission caméra",
    "cameraPermissionDesc": "La fonctionnalité de synchronisation nécessite la permission caméra pour scanner le QR code",
    "syncClose": "Fermer",
    "syncLANManualIPHint": "Impossible de détecter automatiquement l'adresse IP. Veuillez entrer l'IP du réseau local manuellement.",
    "syncLANTauriRequired": "L'émetteur réseau local ne fonctionne que dans l'appli de bureau Tauri. Il semble que vous utilisez la page de développement du navigateur, veuillez lancer le shell de bureau à la place.",
    "syncLANAddress": "Adresse",
    "translationProvider": "Moteur de traduction",
    "selectModel": "Sélectionner un modèle",
    "noModelsFetched": "Veuillez d'abord récupérer la liste des modèles dans les paramètres IA",
    "apiKeyPlaceholder": "Entrer la clé API",
    "deeplKeyHint": "Clé API DeepL",
    "translationModel": "Modèle de traduction",
    "selectEngine": "Sélectionner un moteur",
    "username": "Nom d'utilisateur",
    "password": "Mot de passe d'application",
    "autoSync": "Synchronisation automatique",
    "autoSyncDesc": "Synchroniser automatiquement les données en arrière-plan",
    "appearanceLanguage": "Apparence et langue",
    "storageLocation": "Emplacement de stockage de la bibliothèque",
    "storageLocationDesc": "Les livres de bureau, couvertures et fichiers de base de données sont stockés ici. Changer le répertoire les migre ensemble pour éviter de remplir le disque système.",
    "storageCurrentPath": "Répertoire actuel",
    "storageTargetPath": "Répertoire cible",
    "storageChooseFolder": "Choisir un dossier",
    "storageMigrate": "Migrer vers ce répertoire",
    "storageMigrating": "Migration...",
    "storageResetDefault": "Restaurer le répertoire par défaut",
    "storageMigrationNote": "La migration déplace les livres importés, les couvertures et les fichiers de base de données ensemble. Après la migration, l'appli redémarre automatiquement et les futures importations et téléchargements de synchronisation utilisent aussi le nouveau répertoire.",
    "storageMigrationSuccess": "{{count}} fichiers migrés. L'appli va bientôt redémarrer.",
    "storageMigrationFailed": "Échec de la migration : {{error}}",
    "storageChooseFolderFirst": "Choisissez d'abord un dossier cible",
    "storageNoChange": "Ce répertoire est déjà utilisé",
    "storageAlreadyDefault": "Déjà sur le répertoire par défaut",
    "aiConfig": "Configuration IA",
    "aiProvider": "Fournisseur",
    "ai_models": "modèles",
    "ai_namePlaceholder": "ex. Mon OpenAI",
    "configImported": "Configuration importée",
    "copiedToClipboard": "Jeton copié dans le presse-papiers",
    "copyToken": "Copiez le jeton ci-dessous et importez-le sur un autre appareil",
    "english": "Anglais",
    "exportConfig": "Exporter",
    "exportFailed": "Échec de l'exportation",
    "importConfig": "Importer",
    "importFailed": "Échec de l'importation",
    "invalidConfig": "Format de configuration invalide",
    "pasteConfig": "Collez le jeton de configuration...",
    "simplifiedChinese": "Chinois simplifié",
    "syncConfig": "Configuration de synchronisation",
    "transferConfig": "Transférer la configuration",
    "vectorConfig": "Configuration vectorielle",
    "webdavAllowInsecure": "Autoriser les connexions non sécurisées",
    "ai_provider_zhipu": "Zhipu GLM",
    "ai_provider_aliyun": "Alibaba Cloud Tongyi",
    "ai_provider_custom": "Personnalisé (Compatible OpenAI)",
    "ai_currentLabel": "Actuel :",
    "ai_searchModels": "Rechercher un modèle...",
    "ai_noMatchingResults": "Aucun résultat",
    "ai_totalModels": "{{count}} modèles au total",
    "externalAiSettings": {
      "overview": {
        "title": "Accès IA externe Beta",
        "description": "Vérifie la CLI, le Skill, les dossiers de découverte client et la configuration MCP. La réparation utilise le profile sélectionné.",
        "mcpConfigHint": "MCP config signifie que ReadAny apparaît dans les fichiers de configuration courants. Redémarrez ou ouvrez une nouvelle session pour confirmer que les outils sont chargés."
      },
      "cli": {
        "title": "ReadAny CLI",
        "description": "L’application desktop exécute uniquement des vérifications CLI approuvées, pas de commandes shell arbitraires.",
        "notInstalledOrPath": "Non installé ou indisponible dans PATH",
        "runtimeEvidence": "Preuve runtime / packaging"
      },
      "agent": {
        "title": "Initialisation agent",
        "description": "Copiez cette commande vers une IA externe. Elle installe ReadAny CLI et Skill, puis retourne un extrait de configuration MCP.",
        "clientDiscoveryStatus": "État de découverte des clients",
        "clientDiscoveryEmpty": "Lancez le diagnostic pour afficher l’état de découverte du Skill.",
        "mcpConfigStatus": "État de configuration MCP",
        "mcpConfigEmpty": "Lancez le diagnostic pour afficher les résultats de configuration MCP.",
        "profileRiskWarning": "Ce profile autorise les écritures draft ou les exports. Confirmez l’interrupteur de risque avant de copier ou lancer l’initialisation.",
        "latestInstallResult": "Dernier résultat d’installation en un clic"
      },
      "skill": {
        "title": "Installer l’assistant IA",
        "description": "Copiez une instruction vers un assistant IA et laissez-le installer Skill et MCP.",
        "copyToCurrentAssistant": "Copier vers l’assistant IA actuel",
        "copyHint": "Il installera directement avec le profile sélectionné.",
        "allClients": "Tous les clients",
        "skillInstalled": "Skill installé",
        "pending": "En attente"
      },
      "mcp": {
        "title": "Profil d’accès MCP",
        "description": "Choisissez le niveau d’accès MCP. editor / publisher nécessitent une confirmation explicite ; installer CLI ou Skill ne donne pas l’écriture à lui seul.",
        "currentTemplate": "{{description}} Copie du modèle {{client}}.",
        "riskConfirmation": "Autoriser l’IA externe à utiliser les outils d’écriture/export",
        "currentTools": "Outils MCP actuels"
      },
      "profileDescriptions": {
        "readonly": "Accès lecture seule : bibliothèque, chapitres, notes, surlignages, RAG et lectures de diagnostic.",
        "editor": "Accès éditeur : inclut readonly et permet de créer des drafts EPUB et modifier leur contenu.",
        "publisher": "Accès publication : inclut editor et permet validate / export / notes export / knowledge export."
      },
      "clients": {
        "generic": "JSON générique",
        "genericShort": "Générique",
        "codex": "Codex TOML",
        "agents": "Agents générique"
      },
      "output": {
        "notRun": "Pas encore exécuté.",
        "success": "Commande terminée avec succès.",
        "exitStatus": "La commande s’est terminée avec le code {{status}}",
        "accessUninstalled": "L’accès IA externe a été supprimé.",
        "cliUninstalled": "ReadAny CLI a été désinstallé."
      },
      "skillPrompt": {
        "intro": "Installez et activez directement le Skill IA externe ReadAny.",
        "execute": "Ne vous contentez pas d’expliquer les étapes et n’affichez pas de tableau de chemins. Exécutez directement :",
        "mergeConfig": "Si vous pouvez modifier la configuration du client IA actuel, fusionnez directement la configuration MCP ; sinon donnez uniquement l’extrait minimal nécessaire.",
        "done": "Une fois terminé, répondez seulement : ReadAny Skill est installé. Redémarrez ou ouvrez une nouvelle session dans le client IA actuel.",
        "protectBooks": "Ne modifiez, n’exportez et ne supprimez pas le contenu de mes livres."
      },
      "status": {
        "betaReady": "Beta prête",
        "needsRepair": "Réparation requise",
        "notReady": "Pas prêt",
        "available": "Disponible",
        "missing": "Manquant",
        "passed": "Réussi",
        "failed": "Échec",
        "healthy": "Sain",
        "abnormal": "Anormal",
        "installed": "Installé",
        "notInstalled": "Non installé",
        "complete": "Complet",
        "configured": "Configuré",
        "needsPasteRestart": "Coller / redémarrer",
        "notDetected": "Non détecté",
        "notDetectedYet": "Pas encore détecté",
        "canCopy": "Copiable",
        "canConfigure": "Configurable",
        "waitingConfirmation": "En attente",
        "exists": "Existe",
        "managed": "Géré",
        "unmanaged": "Non géré",
        "checked": "Vérifié",
        "notFound": "Introuvable",
        "containsReadAny": "Contient readany",
        "needsConfig": "Config. requise"
      },
      "actions": {
        "verify": "Vérifier",
        "repairExternalAI": "Réparer l’IA externe",
        "diagnose": "Diagnostiquer",
        "install": "Installer",
        "repair": "Réparer",
        "uninstall": "Désinstaller",
        "update": "Mettre à jour",
        "copied": "Copié",
        "copyEvidence": "Copier la preuve",
        "copyCommand": "Copier la commande",
        "copyAllCommand": "Copier commande complète",
        "oneClickInstall": "Installer en un clic",
        "oneClickInstallAll": "Installer tout en un clic",
        "uninstallAccess": "Supprimer l’accès",
        "copyInstructions": "Copier les instructions",
        "copyConfig": "Copier config.",
        "expandDetails": "Déplier"
      },
      "labels": {
        "cli": "CLI",
        "doctor": "Diagnostic",
        "runtime": "Environnement",
        "skill": "Compétence",
        "clientLinks": "Liens clients",
        "mcpConfig": "Configuration MCP",
        "version": "Version app",
        "profile": "Autorisation",
        "tools": "Outils",
        "commandSource": "Source de commande",
        "client": "Client cible",
        "skillTarget": "Cible du Skill",
        "returnedCommand": "Commande retournée",
        "removedCliShim": "CLI shim supprimé",
        "removedSkill": "Skill supprimé",
        "distribution": "Type de distribution",
        "builtBundle": "Bundle construit",
        "desktopResource": "Ressource desktop",
        "nativeBinary": "Binaire natif",
        "usesNodeRuntime": "Utilise runtime Node",
        "node": "Node",
        "nativeSqlite": "SQLite natif",
        "bundleRoot": "Racine du bundle",
        "entrypoint": "Point d’entrée",
        "nodeExecutable": "Exécutable Node",
        "cliShim": "CLI shim",
        "mcpFormat": "Format MCP"
      },
      "empty": {
        "runDiagnostics": "Lancez le diagnostic pour afficher les résultats."
      },
      "doctorChecks": {
        "nodeRuntime": {
          "name": "Runtime Node",
          "message": "Runtime Node disponible à {{executable}} ({{version}})."
        },
        "nativeSqlite": {
          "name": "SQLite natif",
          "ok": "better-sqlite3 est disponible pour les commandes bibliothèque et données MCP.",
          "fail": "better-sqlite3 est indisponible ; les commandes bibliothèque et données MCP peuvent échouer."
        },
        "readanyHome": {
          "name": "Dossier ReadAny",
          "ok": "Le dossier ReadAny est accessible en écriture.",
          "fail": "Le dossier ReadAny n’est pas accessible en écriture."
        },
        "skill": {
          "name": "Compétence",
          "ok": "ReadAny Skill est installé dans {{path}}.",
          "fail": "ReadAny Skill n’est pas installé dans {{path}}."
        }
      }
    }
  }
}
