{
  "common.save": "Enregistrer",
  "common.cancel": "Annuler",
  "common.clear": "Effacer",
  "common.settings": "Paramètres",
  "common.tasks": "Tâches",
  "common.running": "en cours",
  "common.pending": "en attente",
  "activity.posts": "Articles",
  "activity.pages": "Pages du site",
  "activity.media": "Médias",
  "activity.scripts": "Scripts",
  "activity.tags": "Étiquettes",
  "activity.templates": "Modèles",
  "activity.aiAssistant": "Assistant IA",
  "activity.import": "Importation",
  "activity.sourceControl": "Contrôle de source",
  "activity.toggleHint": "(cliquez à nouveau pour basculer la barre latérale)",
  "tasks.backgroundTasks": "Tâches en arrière-plan",
  "tasks.clearCompleted": "Effacer terminé",
  "tasks.recent": "Récentes",
  "tasks.noActive": "Aucune tâche active",
  "tasks.cancelTask": "Annuler la tâche",
  "tasks.triggerTitle": "{running} en cours, {pending} en attente",
  "app.taskCompleted": "Tâche terminée : {message}",
  "app.taskFailed": "Échec de la tâche : {message}",
  "app.blogmark.transforms.summary": "Transformations blogmark : {applied} appliquées, {failed} en échec",
  "app.blogmark.transforms.appliedList": "Scripts appliqués : {scripts}",
  "app.blogmark.transforms.failed": "Échec de transformation ({script}) : {message}",
  "app.blogmark.transforms.toast": "Toast du script : {message}",
  "app.blogmark.transforms.errorToast": "Erreurs de transformation blogmark : {count}",
  "app.databaseRebuildFailed": "Échec de la reconstruction de la base de données",
  "app.textReindexFailed": "Échec de la réindexation du texte",
  "app.sitemapGenerationFailed": "Échec de la génération du sitemap",
  "app.calendarRegenerationFailed": "Échec de la régénération du calendrier",  "app.uploadSiteFailed": "Échec de la publication du site",
  "app.uploadSiteNoCredentials": "Veuillez d'abord configurer les identifiants SSH dans les paramètres.",  "app.previewOpenFailed": "Impossible d’ouvrir l’aperçu de l’article sélectionné",
  "app.metadataDiff": "Diff Métadonnées",
  "app.importComplete": "Import terminé : {posts} articles, {media} fichiers média",
  "siteValidation.tabTitle": "Validation du site",
  "siteValidation.title": "Valider le site",
  "siteValidation.summary": "URLs attendues : {expected} · URLs HTML existantes : {existing} · Manquantes : {missing} · En trop : {extra} · Articles mis à jour : {updated}",
  "siteValidation.loading": "Validation du site en cours...",
  "siteValidation.missingTitle": "URLs HTML manquantes (à rendre)",
  "siteValidation.extraTitle": "URLs HTML non référencées (à supprimer)",
  "siteValidation.updatedTitle": "URLs d’articles mises à jour (à rerendre)",
  "siteValidation.noneMissing": "Aucune URL manquante trouvée.",
  "siteValidation.noneExtra": "Aucune URL en trop trouvée.",
  "siteValidation.noneUpdated": "Aucune URL d’article mise à jour trouvée.",
  "siteValidation.apply": "Appliquer",
  "siteValidation.applying": "Application en cours...",
  "siteValidation.error.validate": "Échec de la validation du site",
  "siteValidation.error.apply": "Échec de l’application de la validation",
  "siteValidation.toast.applySuccess": "Validation appliquée : {rendered} rendues, {deleted} supprimées",
  "menuEditor.tabTitle": "Menu du blog",
  "menuEditor.title": "Éditeur du menu du blog",
  "menuEditor.description": "Gérez la structure centrale de navigation du blog et enregistrez-la dans meta/menu.opml.",
  "menuEditor.loading": "Chargement du menu...",
  "menuEditor.loadError": "Impossible de charger le menu du blog",
  "menuEditor.save": "Enregistrer le menu",
  "menuEditor.saving": "Enregistrement...",
  "menuEditor.saved": "Menu du blog enregistré",
  "menuEditor.saveFailed": "Impossible d’enregistrer le menu du blog",
  "menuEditor.addEntry": "Ajouter une entrée",
  "menuEditor.newEntryPlaceholder": "Saisissez un titre de page ou un libellé de sous-menu",
  "menuEditor.createHint": "Sélectionnez une page ci-dessous ou appuyez sur Entrée pour créer un sous-menu",
  "menuEditor.pagePicker.title": "Sélectionner une page",
  "menuEditor.pagePicker.searchPlaceholder": "Rechercher des pages par titre ou slug...",
  "menuEditor.pagePicker.loading": "Chargement des pages...",
  "menuEditor.pagePicker.empty": "Aucune page correspondante trouvée.",
  "menuEditor.pagePicker.loadError": "Impossible de charger les pages",
  "menuEditor.addPage": "Ajouter une page",
  "menuEditor.addCategoryArchive": "Ajouter une archive de catégorie",
  "menuEditor.addCategoryArchiveShort": "C+",
  "menuEditor.addSubmenu": "Ajouter un sous-menu",
  "menuEditor.addChildPage": "Ajouter une page enfant",
  "menuEditor.addChildSubmenu": "Ajouter un sous-menu enfant",
  "menuEditor.moveUp": "Monter",
  "menuEditor.moveDown": "Descendre",
  "menuEditor.indent": "Indenter",
  "menuEditor.unindent": "Désindenter",
  "menuEditor.delete": "Supprimer",
  "menuEditor.details": "Détails de l’entrée",
  "menuEditor.selectItem": "Sélectionnez une entrée pour modifier ses détails.",
  "menuEditor.field.title": "Titre",
  "menuEditor.field.type": "Type",
  "menuEditor.field.pageSlug": "Slug de page",
  "menuEditor.field.pageId": "ID de page",
  "menuEditor.type.page": "Page",
  "menuEditor.type.home": "Accueil",
  "menuEditor.type.submenu": "Sous-menu",
  "menuEditor.type.categoryArchive": "Archive de catégorie",
  "menuEditor.empty": "Aucune entrée de menu. Ajoutez une page ou un sous-menu pour commencer.",
  "menuEditor.newPage": "Nouvelle page",
  "menuEditor.newSubmenu": "Nouveau sous-menu",
  "menuEditor.newCategoryPlaceholder": "Saisissez un nom de catégorie",
  "menuEditor.categoryPicker.loadError": "Impossible de charger les catégories",
  "settings.language.english": "Anglais",
  "settings.language.german": "Allemand",
  "settings.language.french": "Français",
  "settings.language.italian": "Italien",
  "settings.language.spanish": "Espagnol",
  "settings.language.portuguese": "Portugais (Português)",
  "settings.language.dutch": "Néerlandais (Nederlands)",
  "settings.language.polish": "Polonais (Polski)",
  "settings.language.russian": "Russe (Русский)",
  "settings.language.japanese": "Japonais (日本語)",
  "settings.language.chinese": "Chinois (中文)",
  "settings.language.korean": "Coréen (한국어)",
  "settings.language.arabic": "Arabe (العربية)",
  "settings.language.hindi": "Hindi",
  "settings.language.turkish": "Turc (Türkçe)",
  "settings.language.swedish": "Suédois (Svenska)",
  "settings.language.danish": "Danois (Dansk)",
  "settings.language.norwegian": "Norvégien (Norsk)",
  "settings.language.finnish": "Finnois (Suomi)",
  "settings.language.czech": "Tchèque (Čeština)",
  "settings.project.title": "Projet",
  "settings.project.browse": "Parcourir",
  "settings.project.reset": "Réinitialiser",
  "settings.project.resetDefault": "Réinitialiser par défaut",
  "settings.project.selectDataFolder": "Sélectionner le dossier de données du projet",
  "settings.editor.title": "Éditeur",
  "settings.editor.mode.wysiwyg": "WYSIWYG (éditeur visuel)",
  "settings.editor.mode.markdown": "Markdown (source)",
  "settings.editor.mode.preview": "Aperçu (lecture seule)",
  "settings.editor.diff.inline": "En ligne",
  "settings.editor.diff.sideBySide": "Côte à côte",
  "settings.content.title": "Catégories d’articles",
  "settings.content.renderInLists": "Afficher dans les listes",
  "settings.content.showTitles": "Afficher les titres",
  "settings.ai.title": "Assistant IA",
  "settings.ai.noModels": "Aucun modèle disponible",
  "settings.technology.title": "Technologie",
  "settings.technology.description": "Configurez le comportement d’exécution des scripts Python.",
  "settings.technology.pythonRuntimeModeLabel": "Mode d’exécution Python",
  "settings.technology.pythonRuntimeModeDescription": "Choisissez où les scripts Python s’exécutent pour les pipelines de transformation.",
  "settings.technology.pythonRuntimeMode.webworker": "Web Worker (recommandé)",
  "settings.technology.pythonRuntimeMode.mainThread": "Thread principal (hérité)",
  "settings.publishing.sshTitle": "Publication SSH",
  "settings.data.title": "Maintenance de la base de données",
  "settings.data.fileSystemTitle": "Système de fichiers",
  "settings.search.placeholder": "Rechercher des paramètres...",
  "settings.search.noResults": "Aucun paramètre correspondant à \"{query}\"",
  "settings.search.clear": "Effacer la recherche",
  "settings.toast.publishingSaved": "Identifiants de publication enregistrés",
  "settings.toast.saveCredentialsFailed": "Impossible d’enregistrer les identifiants",
  "settings.toast.credentialsCleared": "Identifiants {type} effacés",
  "settings.toast.projectSaved": "Paramètres du projet enregistrés",
  "settings.toast.projectSaveFailed": "Impossible d’enregistrer les paramètres du projet",
  "settings.toast.blogmarkBookmarkletCopied": "Bookmarklet blogmark copié dans le presse-papiers",
  "settings.toast.blogmarkBookmarkletCopyFailed": "Impossible de copier le bookmarklet blogmark",
  "settings.toast.blogmarkBookmarkletGenerateFailed": "Impossible de générer le bookmarklet blogmark",
  "settings.toast.categoryAdded": "Catégorie \"{category}\" ajoutée",
  "settings.toast.categoryAddFailed": "Impossible d’ajouter la catégorie",
  "settings.toast.categoryExists": "La catégorie existe déjà",
  "settings.toast.categoryProtected": "Impossible de supprimer la catégorie standard \"{category}\"",
  "settings.toast.categoryAtLeastOne": "Au moins une catégorie est requise",
  "settings.toast.categoryRemoved": "Catégorie \"{category}\" supprimée",
  "settings.toast.categoryRemoveFailed": "Impossible de supprimer la catégorie",
  "settings.toast.categoriesReset": "Catégories réinitialisées aux valeurs par défaut",
  "settings.toast.categoriesResetFailed": "Impossible de réinitialiser les catégories",
  "settings.toast.categorySettingsUpdateFailed": "Impossible de mettre à jour les paramètres de catégorie",
  "settings.toast.systemPromptSaved": "Prompt système enregistré",
  "settings.toast.systemPromptSaveFailed": "Impossible d’enregistrer le prompt système",
  "settings.toast.systemPromptReset": "Prompt système réinitialisé par défaut",
  "settings.toast.systemPromptResetFailed": "Impossible de réinitialiser le prompt système",
  "settings.toast.apiKeySaved": "Clé API enregistrée et validée",
  "settings.toast.apiKeyInvalid": "Clé API invalide",
  "settings.toast.apiKeySaveFailed": "Impossible d’enregistrer la clé API",
  "settings.toast.defaultModelUpdated": "Modèle par défaut mis à jour",
  "settings.toast.defaultModelUpdateFailed": "Impossible de définir le modèle par défaut",
  "settings.toast.rebuildPostsLoading": "Reconstruction de la base des articles...",
  "settings.toast.rebuildPostsSuccess": "Base des articles reconstruite",
  "settings.toast.rebuildPostsFailed": "Impossible de reconstruire la base des articles",
  "settings.toast.rebuildMediaLoading": "Reconstruction de la base des médias...",
  "settings.toast.rebuildMediaSuccess": "Base médias reconstruite",
  "settings.toast.rebuildMediaFailed": "Impossible de reconstruire la base des médias",
  "settings.toast.rebuildScriptsLoading": "Reconstruction de la base des scripts...",
  "settings.toast.rebuildScriptsSuccess": "Base des scripts reconstruite",
  "settings.toast.rebuildScriptsFailed": "Impossible de reconstruire la base des scripts",
  "settings.toast.rebuildTemplatesLoading": "Reconstruction de la base de données des modèles...",
  "settings.toast.rebuildTemplatesSuccess": "Base de données des modèles reconstruite",
  "settings.toast.rebuildTemplatesFailed": "Échec de la reconstruction de la base de données des modèles",
  "settings.toast.rebuildLinksLoading": "Reconstruction des liens d’articles...",
  "settings.toast.rebuildLinksSuccess": "Liens d’articles reconstruits",
  "settings.toast.rebuildLinksFailed": "Impossible de reconstruire les liens d’articles",
  "settings.toast.thumbnailsLoading": "Génération des miniatures...",
  "settings.toast.thumbnailsGenerated": "{count} miniatures générées",
  "settings.toast.thumbnailsAlreadyExist": "Toutes les miniatures existent déjà",
  "settings.toast.thumbnailsComplete": "Génération des miniatures terminée",
  "settings.toast.thumbnailsFailed": "Impossible de générer les miniatures",
  "chat.setupTitle": "Configuration du chat IA",
  "chat.apiKeyRequiredTitle": "Clé API OpenCode Zen requise",
  "chat.apiKeyRequiredDescription": "Saisissez votre clé API OpenCode pour activer le chat IA.",
  "chat.apiKeyPlaceholder": "Saisissez votre clé API...",
  "chat.apiKeySave": "Enregistrer la clé",
  "chat.apiKeyValidating": "Validation...",
  "chat.apiKeyInvalid": "Clé API invalide. Veuillez vérifier et réessayer.",
  "chat.apiKeyValidationFailed": "Impossible de valider la clé API.",
  "chat.newChat": "Nouveau chat",
  "chat.welcomeTitle": "Bienvenue dans l’assistant IA",
  "chat.welcomeDescription": "Je peux vous aider à gérer votre blog avec des visualisations riches. Essayez par exemple :",
  "chat.welcomeTipSearch": "Rechercher des articles sur un sujet précis",
  "chat.welcomeTipChart": "Afficher un graphique des articles publiés par mois",
  "chat.welcomeTipTable": "Comparer mes derniers articles dans un tableau",
  "chat.welcomeTipMetadata": "Mettre à jour les métadonnées des articles ou médias",
  "chat.welcomeTipTabs": "Afficher les statistiques par année dans des onglets avec graphiques",
  "chat.role.you": "Vous",
  "chat.role.assistant": "Assistant IA",
  "chat.stop": "Arrêter",
  "chat.inputPlaceholder": "Saisissez un message...",
  "chat.errorPrefix": "Erreur : {error}",
  "chat.errorNoResponse": "Impossible d’obtenir une réponse. Veuillez réessayer.",
  "chat.errorEmptyResponse": "Le modèle a renvoyé une réponse vide. Essayez un autre modèle ou reformulez votre question.",
  "chat.errorGeneric": "Désolé, une erreur est survenue lors du traitement de votre message.",
  "chat.cancelledSuffix": "(annulé)",
  "aiSuggestions.title": "Analyse d’image IA",
  "aiSuggestions.close": "Fermer",
  "aiSuggestions.analyzing": "Analyse de l’image...",
  "aiSuggestions.titleField": "Titre",
  "aiSuggestions.altField": "Texte alternatif",
  "aiSuggestions.captionField": "Légende",
  "aiSuggestions.hasExisting": "(valeur existante)",
  "aiSuggestions.current": "Actuel",
  "aiSuggestions.intro": "Sélectionnez les valeurs générées par l’IA à appliquer. Les valeurs existantes sont conservées par défaut.",
  "aiSuggestions.empty": "Aucune suggestion n’a été générée pour cette image.",
  "aiSuggestions.wait": "Veuillez patienter...",
  "aiSuggestions.applySelected": "Appliquer la sélection",
  "insert.title.link": "Insérer un lien",
  "insert.title.image": "Insérer une image",
  "insert.tab.linkInternal": "Lier à un article",
  "insert.tab.imageInternal": "Bibliothèque média",
  "insert.tab.linkExternal": "URL externe",
  "insert.tab.imageExternal": "Image externe",
  "insert.searchPlaceholder.link": "Rechercher des articles par titre ou contenu...",
  "insert.searchPlaceholder.image": "Rechercher des médias par nom, titre ou texte alternatif...",
  "insert.status.searching": "Recherche...",
  "insert.status.typeMore": "Saisissez au moins 2 caractères pour rechercher",
  "insert.status.noResults": "Aucun(e) {kind} trouvé(e) pour \"{query}\"",
  "insert.label.url": "Adresse URL",
  "insert.label.linkTextOptional": "Texte du lien (optionnel)",
  "insert.label.altText": "Texte alternatif",
  "insert.placeholder.linkUrl": "https://exemple.fr",
  "insert.placeholder.imageUrl": "https://exemple.fr/image.jpg",
  "insert.placeholder.linkText": "Cliquez ici",
  "insert.placeholder.imageAlt": "Description de l’image",
  "insert.submit.link": "Insérer un lien",
  "insert.submit.image": "Insérer une image",
  "insert.hint.internal": "Utilisez ↑↓ pour naviguer, Entrée pour sélectionner, Esc pour fermer",
  "insert.hint.external": "Entrez l’URL et appuyez sur Entrée ou cliquez sur le bouton, Esc pour fermer",
  "insert.hint.canonicalPost": "Canonique : /YYYY/MM/DD/slug",
  "insert.hint.canonicalMedia": "Canonique : /media/YYYY/MM/fichier.ext",
  "insert.createPost": "Créer l'article « {title} »",
  "insert.createdPost": "Article « {title} » créé",
  "postLinks.loading": "Chargement des liens...",
  "postLinks.link": "lien",
  "postLinks.links": "liens",
  "postLinks.linksTo": "Liens vers ({count})",
  "postLinks.linkedBy": "Lié par ({count})",
  "postLinks.openTitle": "Ouvrir: {title}",
  "docs.title": "Guide utilisateur",
  "docs.subtitle": "Guide utilisateur pour cette version installée de bDS.",
  "docs.apiTitle": "Documentation API",
  "docs.apiSubtitle": "Référence complète des appels API Python Runtime.",
  "docs.copyCode": "Copier le code",
  "gitDiff.header": "Diff : {target}",
  "gitDiff.noProject": "Aucun projet actif sélectionné.",
  "gitDiff.noProjectPath": "Impossible de résoudre le chemin du projet.",
  "gitDiff.loadFailed": "Impossible de charger le diff.",
  "gitDiff.loading": "Chargement du diff...",
  "gitDiff.changedFiles": "Fichiers modifiés",
  "gitDiff.previousFile": "Fichier précédent",
  "gitDiff.nextFile": "Fichier suivant",
  "errorModal.error": "Erreur",
  "errorModal.stackTrace": "Trace de pile",
  "errorModal.copyClipboard": "Copier dans le presse-papiers",
  "errorModal.copy": "Copier",
  "errorModal.noStack": "Aucune trace de pile disponible",
  "confirmDelete.title": "Confirmer la suppression",
  "confirmDelete.promptPost": "Voulez-vous vraiment supprimer l’article",
  "confirmDelete.promptMedia": "Voulez-vous vraiment supprimer le fichier média",
  "confirmDelete.warning": "Avertissement :",
  "confirmDelete.referencedBy": "Ce/cette {itemType} est référencé(e) par les éléments suivants :",
  "confirmDelete.note": "La suppression de ce/cette {itemType} supprimera toutes ces références.",
  "confirmDelete.cancel": "Annuler",
  "confirmDelete.deletePost": "Supprimer l’article",
  "confirmDelete.deleteMedia": "Supprimer le média",
  "confirmDelete.itemType.post": "article",
  "confirmDelete.itemType.media": "médias",
  "lightbox.close": "Fermer (Esc)",
  "lightbox.previous": "Précédent (←)",
  "lightbox.next": "Suivant (→)",
  "credentials.error.load": "Impossible de charger les identifiants :",
  "credentials.error.save": "Impossible d’enregistrer les identifiants :",
  "credentials.toast.saved": "Identifiants enregistrés",
  "credentials.toast.saveFailed": "Impossible d’enregistrer les identifiants",
  "credentials.toast.testing": "Test de la connexion {type}...",
  "credentials.toast.connectionFailed": "Échec de la connexion - vérifiez les identifiants",
  "credentials.tab.ssh": "Accès SSH",
  "credentials.ssh.title": "Publication SSH",
  "credentials.ssh.description": "Configurez SSH pour une publication sécurisée sur votre serveur.",
  "credentials.field.host": "Hôte",
  "credentials.field.username": "Nom d'utilisateur",
  "credentials.field.sshRemotePath": "Chemin distant",
  "credentials.ssh.placeholder.host": "serveur.exemple.fr",
  "credentials.ssh.placeholder.username": "utilisateur-ssh",
  "credentials.ssh.placeholder.remotePath": "/var/www/html",
  "gitSidebar.header": "CONTRÔLE DE SOURCE",
  "gitSidebar.loading": "Chargement...",
  "gitSidebar.error.fetchRemoteUpdates": "Impossible de récupérer les mises à jour distantes.",
  "gitSidebar.error.refreshRemoteState": "Impossible d’actualiser l’état de suivi distant.",
  "gitSidebar.error.gitMissing": "Exécutable Git introuvable. Veuillez installer Git et redémarrer l’application.",
  "gitSidebar.error.noActiveProject": "Aucun projet actif sélectionné.",
  "gitSidebar.error.loadRepoStatus": "Impossible de charger l’état du dépôt.",
  "gitSidebar.error.initFailed": "Impossible d’initialiser le dépôt Git.",
  "gitSidebar.error.actionFailed": "Échec de {action}.",
  "gitSidebar.error.commitFailed": "Impossible de valider les modifications.",
  "gitSidebar.progress.preparingInit": "Préparation de l’initialisation du dépôt...",
  "gitSidebar.progress.pushingRemote": "Envoi des commits vers le distant... cela peut prendre un moment pour les gros envois.",
  "gitSidebar.progress.fetching": "Récupération des mises à jour distantes...",
  "gitSidebar.progress.pulling": "Récupération des dernières modifications...",
  "gitSidebar.progress.pruningLfs": "Nettoyage du cache local Git LFS...",
  "gitSidebar.progress.committing": "Création du commit...",
  "gitSidebar.progress.initializingRepo": "Initialisation du dépôt...",
  "gitSidebar.history.synced": "Synchronisé",
  "gitSidebar.history.localOnly": "Local uniquement",
  "gitSidebar.history.remoteOnly": "Distant uniquement",
  "gitSidebar.init.transcript": "Journal d’initialisation",
  "gitSidebar.aria.repoActions": "Actions du dépôt",
  "gitSidebar.aria.openChanges": "Modifications ouvertes",
  "gitSidebar.aria.commitStatusLegend": "Légende du statut de commit",
  "gitSidebar.aria.versionHistory": "Historique des versions",
  "gitSidebar.action.fetch": "Récupérer",
  "gitSidebar.action.fetching": "Récupération...",
  "gitSidebar.action.pull": "Tirer",
  "gitSidebar.action.pulling": "Récupération des changements...",
  "gitSidebar.action.push": "Pousser",
  "gitSidebar.action.pushing": "Envoi...",
  "gitSidebar.action.pruneLfs": "Purger LFS",
  "gitSidebar.action.pruning": "Purge...",
  "gitSidebar.action.commit": "Valider",
  "gitSidebar.action.committing": "Commit en cours...",
  "gitSidebar.action.loadMoreHistory": "Charger plus",
  "gitSidebar.action.initializeGit": "Initialiser Git",
  "gitSidebar.action.initializing": "Initialisation...",
  "gitSidebar.openChanges": "Modifications ouvertes ({count})",
  "gitSidebar.versionHistory": "Historique des versions ({count})",
  "gitSidebar.loadingChanges": "Chargement des modifications...",
  "gitSidebar.noChanges": "Aucune modification",
  "gitSidebar.loadingHistory": "Chargement de l’historique...",
  "gitSidebar.noCommits": "Aucun commit pour le moment",
  "gitSidebar.branch": "Branche : {branch}",
  "gitSidebar.aheadBehind": "en avance {ahead} / en retard {behind}",
  "gitSidebar.notRepo": "Ce projet n’est pas un dépôt git.",
  "gitSidebar.placeholder.remoteUrl": "URL optionnelle du dépôt distant",
  "gitSidebar.placeholder.commitMessage": "Message de commit",
  "editor.untitled": "Sans titre",
  "tabBar.style": "Apparence",
  "tabBar.scripts": "Scripts",
  "tabBar.loading": "Chargement...",
  "tabBar.unknown": "Inconnu",
  "tabBar.preview": "Aperçu",
  "tabBar.modified": "Modifié",
  "tabBar.closeHint": "Fermer (Ctrl+W)",
  "tabBar.scrollLeft": "Faire défiler les onglets vers la gauche",
  "tabBar.scrollRight": "Faire défiler les onglets vers la droite",
  "tabBar.commitTitle": "Validation {hash}",
  "tabBar.error.fetchPostTitle": "Impossible de charger le titre de l’article :",
  "tabBar.error.fetchChatTitle": "Impossible de charger le titre du chat :",
  "tabBar.error.fetchImportTitle": "Impossible de charger le titre de la définition d’import :",
  "tabBar.error.fetchScriptTitle": "Impossible de charger le titre du script :",
  "tabBar.error.fetchTemplateTitle": "Impossible de charger le titre du modèle :",
  "tabBar.error.fetchCommitTitle": "Impossible de charger les titres des commits :",
  "metadataDiff.title": "Outil de diff des métadonnées",
  "metadataDiff.description": "Compare les métadonnées des articles entre la base de données et les fichiers Markdown. Corrige les incohérences causées par des bugs ou des modifications manuelles.",
  "metadataDiff.error.loadStats": "Impossible de charger les statistiques de la base de données",
  "metadataDiff.error.scan": "Impossible d’analyser les différences",
  "metadataDiff.progress.starting": "Démarrage de l’analyse...",
  "metadataDiff.progress.scanningPublished": "Analyse des articles publiés...",
  "metadataDiff.progress.scanning": "Analyse en cours...",
  "metadataDiff.action.scan": "Analyser les différences",
  "metadataDiff.action.rescan": "Relancer l’analyse",
  "metadataDiff.stats.totalPosts": "Articles au total",
  "metadataDiff.stats.published": "Publiés",
  "metadataDiff.stats.drafts": "Brouillons",
  "metadataDiff.stats.mediaFiles": "Fichiers média",
  "metadataDiff.summary.noDiffs": "✅ Aucune différence trouvée ! Les {total} articles publiés sont synchronisés.",
  "metadataDiff.summary.withDiffs": "⚠️ {count} articles présentent des différences sur {total} articles publiés.",
  "metadataDiff.group.differences": "Différences de {label}",
  "metadataDiff.group.postsCount": "{count} articles",
  "metadataDiff.sync.failed": "échoué",
  "metadataDiff.sync.dbToFile.title": "Mettre à jour les fichiers avec les valeurs de la base",
  "metadataDiff.sync.dbToFile.success": "{success} articles synchronisés vers les fichiers{échoué}",
  "metadataDiff.sync.dbToFile.error": "Échec de la synchronisation vers les fichiers",
  "metadataDiff.sync.fileToDb.title": "Mettre à jour la base avec les valeurs des fichiers",
  "metadataDiff.sync.fileToDb.success": "{success} fichiers synchronisés vers la base de données{échoué}",
  "metadataDiff.sync.fileToDb.error": "Échec de la synchronisation vers la base de données",
  "metadataDiff.value.database": "Base de données",
  "metadataDiff.value.file": "Fichier",
  "metadataDiff.empty": "Cliquez sur « Rechercher les différences » pour comparer les métadonnées de la base et celles des fichiers.",
  "sidebar.archive": "Archive",
  "sidebar.clearFilter": "Effacer le filtre",
  "sidebar.tags": "Étiquettes",
  "sidebar.categories": "Catégories",
  "sidebar.clearTags": "Effacer les étiquettes",
  "sidebar.clearCategories": "Effacer les catégories",
  "sidebar.noPostsYet": "Aucun article pour le moment",
  "sidebar.noPagesYet": "Aucune page pour le moment",
  "sidebar.noMediaYet": "Aucun média pour le moment",
  "sidebar.search": "Rechercher",
  "sidebar.searchPostsPlaceholder": "Rechercher des articles...",
  "sidebar.searchPagesPlaceholder": "Rechercher des pages...",
  "sidebar.searchMediaPlaceholder": "Rechercher des médias...",
  "sidebar.toggleFilters": "Afficher/masquer les filtres",
  "sidebar.newPost": "Nouvel article",
  "sidebar.importMedia": "Importer des médias",
  "sidebar.results": "{count} résultats",
  "sidebar.resultsFor": "{count} résultats pour \"{query}\"",
  "sidebar.clearFilters": "Effacer les filtres",
  "sidebar.drafts": "Brouillons",
  "sidebar.published": "Publiés",
  "sidebar.archived": "Archivés",
  "sidebar.untitled": "Sans titre",
  "sidebar.noMatchingPosts": "Aucun article correspondant",
  "sidebar.createFirstPost": "Créer votre premier article",
  "sidebar.loadMore": "Charger plus ({loaded} sur {total})",
  "sidebar.loading": "Chargement...",
  "sidebar.noMediaFiles": "Aucun fichier média",
  "sidebar.settingsHeader": "Paramètres",
  "sidebar.tagsHeader": "Étiquettes",
  "sidebar.nav.project": "Projet",
  "sidebar.nav.editor": "Éditeur",
  "sidebar.nav.content": "Contenu",
  "sidebar.nav.ai": "Assistant IA",
  "sidebar.nav.technology": "Technologie",
  "sidebar.nav.publishing": "Publication",
  "sidebar.nav.data": "Données",
  "sidebar.nav.style": "Style",
  "sidebar.nav.scripts": "Scripts",
  "scripts.run": "Exécuter le script",
  "scripts.save": "Enregistrer le script",
  "scripts.delete": "Supprimer le script",
  "scripts.content": "Contenu du script",
  "scripts.field.kind": "Type",
  "scripts.field.entrypoint": "Point d’entrée",
  "scripts.entrypoint.main": "main",
  "scripts.entrypoint.none": "Aucune fonction trouvée",
  "scripts.field.enabled": "Activé",
  "scripts.syntax.check": "Vérifier la syntaxe",
  "scripts.syntax.checking": "Vérification...",
  "scripts.syntax.valid": "La syntaxe Python est valide",
  "scripts.syntax.invalid": "Erreurs de syntaxe Python : {count}",
  "scripts.syntax.checkFailed": "Échec de la vérification de la syntaxe Python",
  "scripts.kind.utility": "utility",
  "scripts.kind.macro": "macro",
  "scripts.kind.transform": "transform",
  "templates.save": "Enregistrer le modèle",
  "templates.delete": "Supprimer le modèle",
  "templates.content": "Contenu du modèle",
  "templates.field.kind": "Type",
  "templates.field.enabled": "Activé",
  "templates.validate": "Valider",
  "templates.validate.valid": "La syntaxe du modèle est valide",
  "templates.validate.invalid": "Erreurs de syntaxe du modèle : {count}",
  "templates.validate.checking": "Validation en cours...",
  "templates.kind.post": "article",
  "templates.kind.list": "liste",
  "templates.kind.not_found": "non trouvé",
  "templates.kind.partial": "partiel",
  "sidebar.tagCloud": "Nuage d’étiquettes",
  "sidebar.createEdit": "Créer & modifier",
  "sidebar.mergeTags": "Fusionner les étiquettes",
  "settings.project.descriptionGeneral": "Paramètres généraux du projet de blog actif.",
  "settings.project.nameLabel": "Nom du projet",
  "settings.project.nameDescription": "Nom d’affichage de votre projet de blog.",
  "settings.project.namePlaceholder": "Mon blog",
  "settings.project.descriptionLabel": "Description",
  "settings.project.descriptionDescription": "Courte description de votre blog. Elle peut être utilisée dans les modèles et métadonnées.",
  "settings.project.descriptionPlaceholder": "Un blog sur...",
  "settings.project.dataPathLabel": "Chemin des données du projet",
  "settings.project.dataPathDescription": "Dossier personnalisé pour stocker les articles, médias et métadonnées. Laissez vide pour utiliser l’emplacement par défaut : {path}",
  "settings.project.defaultLocation": "Emplacement par défaut",
  "settings.project.publicUrlLabel": "URL publique",
  "settings.project.publicUrlDescription": "URL de base publique de votre blog publié (utilisée pour générer le sitemap).",
  "settings.project.publicUrlPlaceholder": "https://example.com",
  "settings.project.mainLanguageLabel": "Langue principale",
  "settings.project.mainLanguageDescription": "Langue principale de votre contenu. Les titres, textes alternatifs et légendes générés par l’IA utiliseront cette langue.",
  "settings.project.defaultAuthorLabel": "Auteur par défaut",
  "settings.project.defaultAuthorDescription": "Nom d’auteur par défaut pour les nouveaux articles et médias. Peut être remplacé par élément.",
  "settings.project.defaultAuthorPlaceholder": "Nom de l’auteur",
  "settings.project.maxPostsPerPageLabel": "Nombre max d’articles par page",
  "settings.project.maxPostsPerPageDescription": "Nombre maximum d’articles affichés par page de route d’aperçu.",
  "settings.project.blogmarkCategoryLabel": "Catégorie blogmark",
  "settings.project.blogmarkCategoryDescription": "Catégorie attribuée aux articles créés via les deep links du bookmarklet.",
  "settings.project.blogmarkBookmarkletLabel": "Bookmarklet navigateur",
  "settings.project.blogmarkBookmarkletDescription": "Copiez un bookmarklet à coller dans la barre de favoris de votre navigateur pour envoyer les liens de page vers bDS.",
  "settings.project.blogmarkBookmarkletCopyButton": "Copier le bookmarklet blogmark",
  "settings.project.saveButton": "Enregistrer les paramètres du projet",
  "editor.loadingPost": "Chargement de l’article...",
  "editor.unsavedChanges": "Modifications non enregistrées (enregistrement auto au changement)",
  "editor.saving": "Enregistrement...",
  "editor.publish": "Publier",
  "editor.publishTitle": "Enregistrer et publier cet article",
  "editor.discardChanges": "Annuler les modifications",
  "editor.discardDraft": "Supprimer le brouillon",
  "editor.discardChangesTitle": "Revenir à la dernière version publiée",
  "editor.discardDraftTitle": "Supprimer définitivement ce brouillon",
  "editor.delete": "Supprimer",
  "editor.deleteTitle": "Supprimer définitivement cet article",
  "editor.field.title": "Titre",
  "editor.field.tags": "Étiquettes",
  "editor.field.author": "Auteur",
  "editor.field.slug": "Slug",
  "editor.field.categories": "Catégories",
  "editor.field.content": "Contenu",
  "editor.field.template": "Modèle",
  "editor.field.templateDefault": "Par défaut",
  "editor.placeholder.tags": "Ajouter des étiquettes...",
  "editor.placeholder.author": "Nom de l’auteur",
  "editor.placeholder.categories": "Ajouter des catégories...",
  "editor.placeholder.startWriting": "Commencez à écrire...",
  "editor.mode.visual": "Visuel",
  "editor.mode.visualTitle": "Éditeur visuel",
  "editor.mode.markdownTitle": "Source Markdown",
  "editor.mode.previewTitle": "Aperçu en lecture seule",
  "editor.galleryTitle": "Voir {count} image(s)",
  "editor.insertPostLinkTitle": "Lier à un article (Ctrl+K)",
  "editor.insertMediaTitle": "Insérer une image depuis la bibliothèque média",
  "editor.previewFrameTitle": "Aperçu de l’article",
  "editor.previewLoading": "Chargement de l'aperçu...",
  "editor.metadata.toggle": "Métadonnées",
  "editor.footer.created": "Créé",
  "editor.footer.updated": "Mis à jour",
  "editor.footer.published": "Publié",
  "dashboard.title": "Tableau de bord",
  "dashboard.subtitle": "Aperçu de la base de données de votre blog",
  "dashboard.stats.totalPosts": "Articles au total",
  "dashboard.stats.published": "{count} publiés",
  "dashboard.stats.drafts": "{count} brouillons",
  "dashboard.stats.archived": "{count} archivés",
  "dashboard.stats.mediaFiles": "Fichiers média",
  "dashboard.stats.images": "{count} images",
  "dashboard.stats.tags": "Étiquettes",
  "dashboard.stats.categories": "{count} catégories",
  "dashboard.stats.protocolHealth": "Santé du protocole",
  "dashboard.stats.blockedActions": "{count} actions bloquées",
  "dashboard.stats.fallbackTurns": "{count} tours de secours",
  "dashboard.section.postsOverTime": "Articles dans le temps",
  "dashboard.section.tags": "Étiquettes",
  "dashboard.section.categories": "Catégories",
  "dashboard.section.recentlyUpdated": "Récemment mis à jour",
  "dashboard.tagCloud.more": "+{count} de plus",
  "dashboard.postCount.one": "{count} article",
  "dashboard.postCount.other": "{count} articles",
  "dashboard.status.draft": "Brouillon",
  "dashboard.status.published": "Publié",
  "dashboard.status.archived": "Archivé",
  "projectSelector.switchProject": "Changer de projet",
  "projectSelector.selectProject": "Sélectionner un projet",
  "projectSelector.projectsHeader": "Projets",
  "projectSelector.noProjectsYet": "Aucun projet pour le moment",
  "projectSelector.newProject": "Nouveau projet",
  "projectSelector.createNewProject": "Créer un nouveau projet",
  "projectSelector.projectName": "Nom du projet",
  "projectSelector.projectNamePlaceholder": "Mon blog",
  "projectSelector.descriptionOptional": "Description (facultative)",
  "projectSelector.descriptionPlaceholder": "Brève description du projet...",
  "projectSelector.projectLocation": "Emplacement du projet",
  "projectSelector.useDefaultLocation": "Utiliser l'emplacement par défaut",
  "projectSelector.defaultInternalStorage": "Par défaut (stockage interne)",
  "projectSelector.chooseFolder": "Choisir un dossier...",
  "projectSelector.projectLocationHint": "Choisissez un dossier personnalisé pour la sauvegarde cloud, ou utilisez l'emplacement interne par défaut.",
  "projectSelector.createProject": "Créer le projet",
  "projectSelector.deleteProject": "Supprimer le projet",
  "projectSelector.deleteWarning": "Cela supprimera définitivement le projet \"{name}\" et toutes ses données, y compris :",
  "projectSelector.deleteItemPosts": "Tous les articles",
  "projectSelector.deleteItemMedia": "Tous les médias",
  "projectSelector.deleteItemSettings": "Tous les paramètres du projet",
  "projectSelector.typeToConfirm": "Saisissez {name} pour confirmer la suppression :",
  "projectSelector.selectProjectLocation": "Sélectionner l'emplacement du projet",
  "projectSelector.deleteProjectTitle": "Supprimer {name}",
  "projectSelector.toast.switched": "Projet actif : {name}",
  "projectSelector.toast.switchFailed": "Échec du changement de projet",
  "projectSelector.toast.created": "Projet \"{name}\" créé",
  "projectSelector.toast.createFailed": "Impossible de créer le projet",
  "projectSelector.toast.existingSettingsFound": "Paramètres de projet existants détectés",
  "projectSelector.toast.selectFolderFailed": "Échec de la sélection du dossier",
  "projectSelector.toast.deletedWithData": "Projet \"{name}\" et toutes ses données supprimés",
  "projectSelector.toast.deleteFailed": "Impossible de supprimer le projet",
  "tagsView.title": "Gestion des tags",
  "tagsView.subtitle": "Gérez les tags du blog, attribuez des couleurs et lancez des actions groupées.",
  "tagsView.loadingTags": "Chargement des tags...",
  "tagsView.noTagsFound": "Aucun tag trouvé",
  "tagsView.discoverFromPosts": "Découvrir les tags à partir des articles",
  "tagsView.selectedCount": "{count} tag(s) sélectionné(s)",
  "tagsView.clearSelection": "Effacer la sélection",
  "tagsView.cloud.title": "Nuage de tags",
  "tagsView.cloud.description": "Cliquez sur les tags pour les sélectionner. Survolez-les pour voir le nombre d'articles.",
  "tagsView.manage.title": "Créer et modifier des tags",
  "tagsView.manage.description": "Créez de nouveaux tags ou modifiez les existants. Attribuez des couleurs pour mieux les distinguer.",
  "tagsView.create.title": "Créer un tag",
  "tagsView.create.action": "Créer",
  "tagsView.tagNamePlaceholder": "Nom du tag",
  "tagsView.chooseColor": "Choisir une couleur",
  "tagsView.removeColor": "Supprimer la couleur",
  "tagsView.edit.title": "Modifier le tag : {name}",
  "tagsView.edit.action": "Modifier",
  "tagsView.edit.postTemplate": "Modèle d'article",
  "tagsView.deleteAction": "Supprimer",
  "tagsView.merge.title": "Fusionner des tags",
  "tagsView.merge.description": "Sélectionnez plusieurs tags ci-dessus puis fusionnez-les en un seul. Tous les articles seront mis à jour.",
  "tagsView.merge.selectAtLeastTwo": "Sélectionnez au moins 2 tags dans le nuage pour les fusionner.",
  "tagsView.merge.countInto": "Fusionner {count} tags vers :",
  "tagsView.merge.selectTarget": "Sélectionner le tag cible...",
  "tagsView.merge.action": "Fusionner les tags",
  "tagsView.merge.tagsToDelete": "Tags à supprimer : {tags}",
  "tagsView.sync.title": "Synchroniser les tags",
  "tagsView.sync.description": "Découvrir les tags présents dans les articles mais absents de la base de tags.",
  "tagsView.sync.action": "Synchroniser les tags depuis les articles",
  "tagsView.confirmDelete.title": "Supprimer le tag",
  "tagsView.confirmDelete.message": "Voulez-vous vraiment supprimer le tag \"{tagName}\" ? Il sera retiré de tous les articles. Cette action s'exécute en tâche de fond.",
  "tagsView.confirmDelete.action": "Supprimer le tag",
  "tagsView.confirmMerge.title": "Fusionner des tags",
  "tagsView.confirmMerge.message": "Voulez-vous vraiment fusionner {count} tag(s) vers \"{target}\" ? Les tags source seront supprimés et tous les articles seront mis à jour. Cette action s'exécute en tâche de fond.",
  "tagsView.confirmMerge.action": "Fusionner les tags",
  "tagsView.none": "(aucun)",
  "tagsView.tagCountTitle": "{count} {item}",
  "tagsView.postsSingular": "article",
  "tagsView.postsPlural": "articles",
  "tagsView.toast.tagNameRequired": "Le nom du tag est requis",
  "tagsView.toast.tagCreated": "Tag créé",
  "tagsView.toast.tagDeleted": "Tag supprimé. {postsUpdated} article(s) mis à jour.",
  "tagsView.toast.tagUpdated": "Tag mis à jour",
  "tagsView.toast.targetTagNotFound": "Tag cible introuvable",
  "tagsView.toast.noSourceTagsToMerge": "Aucun tag source à fusionner",
  "tagsView.toast.tagsMerged": "{tagsDeleted} tag(s) fusionné(s) vers \"{targetTag}\". {postsUpdated} article(s) mis à jour.",
  "tagsView.toast.discoveredTags": "{count} nouveau(x) tag(s) découvert(s)",
  "tagsView.toast.alreadySynced": "Tous les tags sont déjà synchronisés",
  "tagsView.error.deleteFailedTitle": "Échec de la suppression",
  "tagsView.error.mergeFailedTitle": "Échec de la fusion",
  "linkedMediaPanel.title": "📷 Médias liés",
  "linkedMediaPanel.collapsedTitle": "📷 Médias ({count})",
  "linkedMediaPanel.importAndLink": "Importer et lier des médias",
  "linkedMediaPanel.linkExisting": "Lier un média existant",
  "linkedMediaPanel.selectMediaToLink": "Sélectionner les médias à lier",
  "linkedMediaPanel.searchPlaceholder": "Rechercher des médias...",
  "linkedMediaPanel.noUnlinkedMedia": "Aucun média non lié disponible",
  "linkedMediaPanel.noMediaLinked": "Aucun média lié à cet article",
  "linkedMediaPanel.importMedia": "Importer des médias",
  "linkedMediaPanel.unlinkFromPost": "Délier de l'article",
  "linkedMediaPanel.toast.importedLinked": "{count} fichier(s) importé(s) et lié(s)",
  "linkedMediaPanel.toast.importFailed": "Échec de l'import des médias",
  "linkedMediaPanel.toast.unlinked": "Média délié de l'article",
  "linkedMediaPanel.toast.unlinkFailed": "Échec du déliage du média",
  "linkedMediaPanel.toast.linked": "Média lié à l'article",
  "linkedMediaPanel.toast.linkFailed": "Échec de la liaison du média",
  "styleView.title": "Style",
  "styleView.subtitle": "Sélectionnez un thème Pico CSS et prévisualisez les principaux articles avant application.",
  "styleView.themePickerAria": "Sélecteur de thème Pico",
  "styleView.previewMode": "Mode d'aperçu",
  "styleView.mode.auto": "Auto",
  "styleView.mode.light": "Clair",
  "styleView.mode.dark": "Sombre",
  "styleView.applyTheme": "Appliquer le thème",
  "styleView.themePreviewTitle": "Aperçu du thème",
  "styleView.toast.appliedTheme": "Thème appliqué : {theme}",
  "styleView.toast.applyThemeFailed": "Échec de l'application du thème",
  "panel.tabsAria": "Onglets du panneau",
  "panel.output": "Sortie",
  "panel.postLinks": "Liens d'articles",
  "panel.gitLog": "Journal Git",
  "panel.closeTitle": "Fermer le panneau",
  "panel.noRecentTasks": "Aucune tâche récente",
  "panel.noOutput": "Aucune sortie",
  "panel.copyOutput": "Copier la sortie",
  "panel.openPostEditor": "Ouvrez un éditeur d'article pour voir les liens",
  "panel.loadingPostLinks": "Chargement des liens d'articles...",
  "panel.noPostLinks": "Aucun lien pour cet article",
  "panel.openPostOrMediaEditor": "Ouvrez un éditeur d'article ou de média pour voir le journal Git",
  "panel.loadingGitLog": "Chargement du journal Git...",
  "panel.noCommits": "Aucun commit trouvé pour cet élément",
  "panel.error.loadPostLinks": "Impossible de charger les liens d'articles.",
  "panel.error.loadGitLog": "Impossible de charger le journal Git.",
  "panel.direction.from": "depuis",
  "panel.direction.to": "vers",
  "settings.editor.description": "Personnalisez le comportement et l’apparence de l’éditeur.",
  "settings.editor.defaultModeLabel": "Mode par défaut",
  "settings.editor.defaultModeDescription": "Choisissez le mode d’ouverture de l’éditeur.",
  "settings.editor.diffViewStyleLabel": "Style de vue diff",
  "settings.editor.diffViewStyleDescription": "Définissez l’affichage des différences.",
  "settings.editor.wrapLongLinesLabel": "Retour à la ligne",
  "settings.editor.wrapLongLinesDescription": "Replier automatiquement les lignes longues.",
  "settings.editor.wrapLongLinesAria": "Activer le retour à la ligne",
  "settings.editor.hideUnchangedRegionsLabel": "Masquer les zones inchangées",
  "settings.editor.hideUnchangedRegionsDescription": "Réduire les sections sans modifications dans la vue diff.",
  "settings.editor.hideUnchangedRegionsAria": "Activer le masquage des zones inchangées",
  "settings.content.newCategoryPlaceholder": "Nouvelle catégorie",
  "settings.content.addCategory": "Ajouter une catégorie",
  "settings.content.resetDefaults": "Réinitialiser par défaut",
  "settings.content.description": "Gérez les catégories disponibles pour les articles du blog. Chaque article peut avoir une seule catégorie qui détermine son modèle d’affichage.",
  "settings.content.standardSuffix": " (standard)",
  "settings.content.categoryColumn": "Catégorie",
  "settings.content.titleColumn": "Titre",
  "settings.content.actionsColumn": "Actions",
  "settings.content.postTemplateColumn": "Modèle d'article",
  "settings.content.listTemplateColumn": "Modèle de liste",
  "settings.content.postTemplateAria": "{category} modèle d'article",
  "settings.content.listTemplateAria": "{category} modèle de liste",
  "settings.content.renderInListsAria": "{category} afficher dans les listes",
  "settings.content.showTitlesAria": "{category} afficher les titres",
  "settings.content.categoryTitleAria": "Titre affiché pour {category}",
  "settings.content.removeCategoryTitle": "Supprimer la catégorie \"{category}\"",
  "settings.ai.description": "Configurez l’assistant de chat IA qui vous aide à gérer le contenu de votre blog.",
  "settings.ai.apiKeyLabel": "Clé API",
  "settings.ai.apiKeyDescription": "Saisissez votre clé API pour activer les fonctionnalités IA.",
  "settings.ai.apiKeyConfigured": "Clé API configurée",
  "settings.ai.configured": "Configuré",
  "settings.ai.changeApiKey": "Changer la clé API",
  "settings.ai.defaultModelLabel": "Modèle par défaut",
  "settings.ai.defaultModelDescription": "Sélectionnez le modèle IA utilisé par défaut.",
  "settings.ai.systemPromptLabel": "Prompt système",
  "settings.ai.systemPromptDescription": "Définissez les instructions système envoyées au modèle.",
  "settings.ai.systemPromptPlaceholder": "Écrivez votre prompt système ici…",
  "settings.ai.savePrompt": "Enregistrer le prompt",
  "settings.ai.resetPrompt": "Réinitialiser le prompt",
  "settings.publishing.sshHostDescription": "Nom d'hôte ou IP du serveur SSH.",
  "settings.publishing.sshUsernameDescription": "Nom d'utilisateur SSH.",
  "settings.publishing.sshRemotePathDescription": "Le répertoire de destination sur le serveur distant où votre blog sera publié.",
  "settings.publishing.sshModeLabel": "Mode de transfert",
  "settings.publishing.sshModeDescription": "Sélectionnez la méthode de transfert de fichiers pour la publication via SSH.",
  "settings.publishing.sshMode.scp": "SCP",
  "settings.publishing.sshMode.rsync": "rsync",
  "settings.publishing.sshKeyAuthNotice": "L'authentification par clé SSH doit être configurée sur votre système avant d'utiliser ce mode de publication. Assurez-vous que votre clé publique est ajoutée au fichier authorized_keys du serveur distant.",
  "settings.data.description": "Gérez et réindexez les données locales.",
  "settings.data.rebuildPostsLabel": "Reconstruire les index des articles",
  "settings.data.rebuildPostsDescription": "Analyse tous les articles et met à jour l’index de données.",
  "settings.data.rebuildPostsAction": "Reconstruire",
  "settings.data.rebuildMediaLabel": "Reconstruire la base médias",
  "settings.data.rebuildMediaDescription": "Réanalyse tous les fichiers médias et leurs métadonnées sidecar. Régénère les entrées manquantes.",
  "settings.data.rebuildMediaAction": "Reconstruire les médias",
  "settings.data.rebuildScriptsLabel": "Reconstruire la base des scripts",
  "settings.data.rebuildScriptsDescription": "Réanalyse tous les scripts Python et reconstruit l’index des métadonnées de scripts.",
  "settings.data.rebuildScriptsAction": "Reconstruire les scripts",
  "settings.data.rebuildTemplatesLabel": "Reconstruire la base de données des modèles",
  "settings.data.rebuildTemplatesDescription": "Re-scanner tous les modèles Liquid et reconstruire l'index des métadonnées.",
  "settings.data.rebuildTemplatesAction": "Reconstruire les modèles",
  "settings.data.rebuildLinksLabel": "Reconstruire les liens d’articles",
  "settings.data.rebuildLinksDescription": "Réanalyse tous les articles et reconstruit le graphe interne des liens entre articles.",
  "settings.data.rebuildLinksAction": "Reconstruire les liens",
  "settings.data.regenerateThumbnailsLabel": "Régénérer les miniatures",
  "settings.data.regenerateThumbnailsDescription": "Génère les miniatures manquantes pour toutes les images. Utile après un import média externe.",
  "settings.data.regenerateThumbnailsAction": "Générer les miniatures",
  "settings.data.fileSystemDescription": "Accédez aux fichiers et dossiers de données du projet.",
  "settings.data.openDataFolderLabel": "Ouvrir le dossier de données",
  "settings.data.openDataFolderDescription": "Ouvrez le dossier de données du projet contenant articles, médias et fichiers de base de données.",
  "settings.data.openFolderAction": "Ouvrir le dossier",
  "sidebar.chat.header": "Chat",
  "sidebar.chat.newChat": "Nouveau chat",
  "sidebar.chat.apiKeyNeeded": "Une clé API est nécessaire pour utiliser le chat.",
  "sidebar.chat.noConversations": "Aucune conversation",
  "sidebar.chat.startNew": "Commencer une nouvelle conversation",
  "sidebar.chat.deleteConversation": "Supprimer la conversation",
  "sidebar.chat.createFailed": "Échec de création de la conversation : {error}",
  "sidebar.chat.deleteFailed": "Échec de suppression de la conversation : {error}",
  "sidebar.chat.yesterday": "Hier",
  "sidebar.import.header": "Import",
  "sidebar.import.newDefinition": "Nouvelle définition",
  "sidebar.scripts.header": "SCRIPTS",
  "sidebar.scripts.newScript": "Nouveau script",
  "sidebar.scripts.none": "Aucun script",
  "sidebar.scripts.createScript": "Créer un script",
  "sidebar.scripts.createFailed": "Impossible de créer le script",
  "sidebar.scripts.deleteScript": "Supprimer le script",
  "sidebar.scripts.deleteFailed": "Impossible de supprimer le script",
  "sidebar.templates.header": "MODÈLES",
  "sidebar.templates.newTemplate": "Nouveau modèle",
  "sidebar.templates.none": "Aucun modèle",
  "sidebar.templates.createTemplate": "Créer un modèle",
  "sidebar.templates.createFailed": "Impossible de créer le modèle",
  "sidebar.templates.deleteTemplate": "Supprimer le modèle",
  "sidebar.templates.deleteFailed": "Impossible de supprimer le modèle",
  "sidebar.templates.deleteConfirmWithRefs": "Ce modèle est référencé par {postCount} article(s) et {tagCount} tag(s). Supprimer quand même ? Les références seront supprimées.",
  "sidebar.import.none": "Aucune définition d’import",
  "sidebar.import.createDefinition": "Créer une définition",
  "sidebar.import.deleteDefinition": "Supprimer la définition",
  "sidebar.import.createFailed": "Échec de création de la définition : {error}",
  "sidebar.import.deleteFailed": "Échec de suppression de la définition : {error}",
  "editor.error.saveTitle": "Échec de l’enregistrement",
  "editor.error.saveMessage": "Impossible d’enregistrer l’article : {error}",
  "editor.error.publishTitle": "Échec de la publication",
  "editor.error.publishMessage": "Impossible de publier l’article : {error}",
  "editor.error.discardTitle": "Échec de l’abandon",
  "editor.error.deleteTitle": "Échec de la suppression",
  "editor.error.operationMessage": "L’opération a échoué : {error}",
  "editor.error.deletePostMessage": "Impossible de supprimer l’article : {error}",
  "editor.error.fetchPostReferencesMessage": "Impossible de récupérer les références d’article : {error}",
  "editor.confirm.discardChanges": "Ignorer les modifications non enregistrées ?",
  "editor.confirm.deleteDraft": "Supprimer ce brouillon ?",
  "editor.toast.published": "Article publié",
  "editor.toast.reverted": "Modifications annulées",
  "editor.toast.draftDeleted": "Brouillon supprimé",
  "editor.toast.postDeleted": "Article supprimé",
  "editor.media.notFound": "Média introuvable",
  "editor.media.error.analyzeImage": "Impossible d’analyser l’image : {error}",
  "editor.media.error.updateTitle": "Échec de mise à jour",
  "editor.media.error.updateMessage": "Impossible de mettre à jour le média : {error}",
  "editor.media.error.replaceTitle": "Échec du remplacement",
  "editor.media.error.replaceMessage": "Impossible de remplacer le fichier média : {error}",
  "editor.media.error.deleteMessage": "Impossible de supprimer le média : {error}",
  "editor.media.error.fetchReferencesMessage": "Impossible de récupérer les références du média : {error}",
  "editor.media.toast.aiApplied": "Suggestions IA appliquées",
  "editor.media.toast.linkedToPost": "Média lié à l’article",
  "editor.media.toast.linkFailed": "Échec de liaison du média : {error}",
  "editor.media.toast.unlinkedFromPost": "Média dissocié de l’article",
  "editor.media.toast.unlinkFailed": "Échec de dissociation du média : {error}",
  "editor.media.toast.updated": "Média mis à jour",
  "editor.media.toast.fileReplaced": "Fichier média remplacé",
  "editor.media.toast.deleted": "Média supprimé",
  "editor.media.quickActions.title": "Actions rapides",
  "editor.media.quickActions.analyzing": "🔎 Analyse en cours…",
  "editor.media.quickActions.button": "✨ Analyser avec l’IA",
  "editor.media.quickActions.aiTitle": "Titre suggéré par l’IA",
  "editor.media.quickActions.aiDescription": "Générez automatiquement un titre, un texte alternatif et une légende.",
  "editor.media.replaceFile": "Remplacer le fichier",
  "editor.media.field.fileName": "Nom du fichier",
  "editor.media.field.type": "Type",
  "editor.media.field.size": "Taille",
  "editor.media.field.dimensions": "Dimensions",
  "editor.media.field.title": "Titre",
  "editor.media.field.altText": "Texte alternatif",
  "editor.media.field.caption": "Légende",
  "editor.media.field.tags": "Tags",
  "editor.media.field.author": "Auteur",
  "editor.media.placeholder.title": "Saisissez un titre",
  "editor.media.placeholder.altText": "Décrivez l’image pour l’accessibilité",
  "editor.media.placeholder.caption": "Ajouter une légende",
  "editor.media.placeholder.tags": "Ajouter des tags",
  "editor.media.placeholder.author": "Nom de l’auteur",
  "editor.media.linkedPosts": "Articles liés",
  "editor.media.linkToPostTitle": "Lier à un article",
  "editor.media.linkAction": "Lier",
  "editor.media.searchPosts": "Rechercher des articles",
  "editor.media.noMatchingPosts": "Aucun article correspondant à « {query} »",
  "editor.media.noPostsToLink": "Aucun article disponible à lier",
  "editor.media.morePosts": "{count} autres articles",
  "editor.media.notLinked": "Non lié",
  "editor.media.openPost": "Ouvrir l’article",
  "editor.media.unlinkFromPost": "Dissocier de l’article",
  "postSearch.placeholder": "Rechercher des articles…",
  "postSearch.searching": "Recherche…",
  "postSearch.typeMore": "Tapez plus de caractères pour rechercher",
  "postSearch.noResults": "Aucun résultat pour « {query} »",
  "postSearch.hint": "Rechercher par titre, slug ou contenu",
  "statusBar.posts": "Articles",
  "statusBar.media": "Médias",
  "statusBar.more": "+{count} en plus",
  "statusBar.tokens": "Tokens : {input} entr. / {output} sort. ({cached} en cache)",
  "statusBar.theme": "Thème : {theme}",
  "statusBar.ui": "UI",
  "statusBar.uiLanguage": "Langue de l’interface",
  "windowTitleBar.toggleSidebar": "Basculer la barre latérale",
  "windowTitleBar.hideSidebar": "Masquer la barre latérale",
  "windowTitleBar.showSidebar": "Afficher la barre latérale",
  "windowTitleBar.togglePanel": "Basculer le panneau",
  "windowTitleBar.hidePanel": "Masquer le panneau",
  "windowTitleBar.showPanel": "Afficher le panneau",
  "windowTitleBar.toggleAssistantSidebar": "Basculer le panneau Assistant",
  "windowTitleBar.hideAssistantSidebar": "Masquer le panneau Assistant (Ctrl+\\)",
  "windowTitleBar.showAssistantSidebar": "Afficher le panneau Assistant (Ctrl+\\)",
  "assistantSidebar.title": "Assistant IA",
  "assistantSidebar.description": "Commencez avec une requête ciblée enrichie du contexte éditeur actuel.",
  "assistantSidebar.context.label": "Contexte actuel",
  "assistantSidebar.context.none": "Aucun contexte éditeur actif",
  "assistantSidebar.prompt.placeholder": "Demandez à l’assistant d’analyser ou d’interroger votre travail en cours…",
  "assistantSidebar.button.start": "Démarrer avec contexte",
  "assistantSidebar.button.starting": "Démarrage…",
  "assistantSidebar.conversationTitle": "Session Assistant",
  "assistantSidebar.error.startFailed": "Impossible de démarrer la session assistant",
  "assistantSidebar.error.actionFailed": "L’action assistant n’a pas pu être exécutée",
  "tagInput.alreadyAdded": "Le tag « {tag} » est déjà ajouté",
  "tagInput.remove": "Supprimer",
  "tagInput.createdTag": "Tag « {tag} » créé",
  "tagInput.createdCategory": "Catégorie « {name} » créée",
  "tagInput.createTag": "Créer le tag « {tag} »",
  "tagInput.createCategory": "Créer la catégorie « {name} »",
  "importAnalysis.loadingDefinition": "Chargement de la définition d’import…",
  "importAnalysis.namePlaceholder": "Nom de la définition d’import",
  "importAnalysis.headerDescription": "Analysez un fichier WXR avant import.",
  "importAnalysis.uploadsFolder": "Dossier d’uploads",
  "importAnalysis.noFolderSelected": "Aucun dossier sélectionné",
  "importAnalysis.wxrFile": "Fichier WXR",
  "importAnalysis.selectFileToAnalyze": "Sélectionnez un fichier à analyser",
  "importAnalysis.analyzing": "Analyse…",
  "importAnalysis.selectAndAnalyze": "Sélectionner et analyser",
  "importAnalysis.analyzingWxr": "Analyse du fichier WXR…",
  "importAnalysis.emptyState": "Sélectionnez un fichier WXR et lancez l’analyse.",
  "importAnalysis.importing": "Import en cours…",
  "importAnalysis.importComplete": "Import terminé : {count}",
  "importAnalysis.importFailed": "Échec de l’import : {error}",
  "importAnalysis.untitledImport": "Import sans titre",
  "importAnalysis.executionStarting": "Démarrage...",
  "importAnalysis.unknownError": "Erreur inconnue",
  "importAnalysis.readyToImport": "Prêt à importer :",
  "importAnalysis.tagsCategories": "tags/catégories",
  "importAnalysis.posts": "articles",
  "importAnalysis.media": "médias",
  "importAnalysis.pages": "pages",
  "importAnalysis.nothingToImport": "Rien à importer",
  "importAnalysis.importItems": "Importer {count} éléments",
  "importAnalysis.postSlugConflicts": "Conflits de slug d’article",
  "importAnalysis.pageSlugConflicts": "Conflits de slug de page",
  "importAnalysis.postsWithCount": "Articles ({count})",
  "importAnalysis.otherWithCount": "Autres ({count})",
  "importAnalysis.pagesWithCount": "Pages ({count})",
  "importAnalysis.mediaWithCount": "Médias ({count})",
  "importAnalysis.site": "Site",
  "importAnalysis.untitled": "Sans titre",
  "importAnalysis.url": "URL",
  "importAnalysis.language": "Langue",
  "importAnalysis.file": "Fichier",
  "importAnalysis.notAvailable": "N/D",
  "importAnalysis.new": "nouveau",
  "importAnalysis.update": "mise à jour",
  "importAnalysis.conflict": "conflit",
  "importAnalysis.duplicate": "doublon",
  "importAnalysis.missing": "manquant",
  "importAnalysis.categories": "Catégories",
  "importAnalysis.existing": "existant",
  "importAnalysis.mapped": "mappé",
  "importAnalysis.tags": "Tags",
  "importAnalysis.dateDistribution": "Répartition par date",
  "importAnalysis.postsPages": "Articles/Pages",
  "importAnalysis.total": "total",
  "importAnalysis.wordpressId": "ID WordPress",
  "importAnalysis.type": "Type",
  "importAnalysis.author": "Auteur",
  "importAnalysis.unknown": "Inconnu",
  "importAnalysis.published": "Publié",
  "importAnalysis.excerpt": "Extrait",
  "importAnalysis.content": "Contenu",
  "importAnalysis.loading": "Chargement...",
  "importAnalysis.mimeType": "Type MIME",
  "importAnalysis.uploaded": "Téléversé",
  "importAnalysis.parentPostId": "ID du post parent",
  "importAnalysis.description": "Description",
  "importAnalysis.slug": "Slug",
  "importAnalysis.newEntryWxr": "Nouvelle entrée (WXR)",
  "importAnalysis.existingEntry": "Entrée existante",
  "importAnalysis.resolution": "Résolution",
  "importAnalysis.ignore": "Ignorer",
  "importAnalysis.overwrite": "Écraser",
  "importAnalysis.importNewSlug": "Importer (nouveau slug)",
  "importAnalysis.status": "Statut",
  "importAnalysis.title": "Titre",
  "importAnalysis.wpStatus": "Statut WP",
  "importAnalysis.existingMatch": "Correspondance existante",
  "importAnalysis.none": "--",
  "importAnalysis.filename": "Nom de fichier",
  "importAnalysis.path": "Chemin",
  "importAnalysis.taxonomyTitle": "Catégories & Tags",
  "importAnalysis.mappedCount": "{count} mappé(s)",
  "importAnalysis.analyzeWith": "Analyser avec...",
  "importAnalysis.aiMappingHint": "L’IA suggère des correspondances entre nouveaux éléments et éléments existants pour éviter les doublons",
  "importAnalysis.mapToPlaceholder": "Mapper vers...",
  "importAnalysis.mappingTooltip": "Cliquer pour {action} le mapping",
  "importAnalysis.mappingActionEdit": "modifier",
  "importAnalysis.mappingActionAdd": "ajouter",
  "importAnalysis.clearMapping": "Effacer le mapping",
  "importAnalysis.macrosWithCount": "Macros ({count})",
  "importAnalysis.unmappedCount": "{count} non mappé(s)",
  "importAnalysis.macroStatusMapped": "Mappé",
  "importAnalysis.macroStatusUnknown": "Inconnu",
  "importAnalysis.macroUses": "{count} utilisations",
  "importAnalysis.usedIn": "Utilisé dans : {items}{more}",
  "importAnalysis.moreSuffix": ", +{count} de plus",
  "importAnalysis.noParameters": "(aucun paramètre)",

  "sidebar.nav.mcp": "Serveur MCP",

  "settings.mcp.title": "Serveur MCP",
  "settings.mcp.description": "Configurez le serveur Model Context Protocol qui permet aux agents de programmation IA d'interagir avec votre blog.",
  "settings.mcp.statusLabel": "État du serveur",
  "settings.mcp.statusDescription": "État actuel du serveur MCP.",
  "settings.mcp.portRunning": "En cours d'exécution sur le port {port}",
  "settings.mcp.portStopped": "Non démarré",
  "settings.mcp.agentsTitle": "Configuration des agents",
  "settings.mcp.agentsDescription": "Ajoutez le serveur MCP bDS à la configuration de votre agent de programmation. Les paramètres existants sont préservés.",
  "settings.mcp.addToAgent": "Ajouter à {agent}",
  "settings.mcp.removeFromAgent": "Retirer de {agent}",
  "settings.mcp.alreadyConfigured": "Configuré",
  "settings.toast.mcpConfigSuccess": "Serveur MCP bDS ajouté à la configuration de {agent}",
  "settings.toast.mcpConfigRemoveSuccess": "Serveur MCP bDS retiré de la configuration de {agent}",
  "settings.toast.mcpConfigFailed": "Échec de la configuration de {agent}: {error}",
  "settings.toast.mcpConfigRemoveFailed": "Échec du retrait de {agent}: {error}",
  "settings.toast.mcpConfigPath": "Configuration écrite dans {path}"
}
