{
  "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.uploadSiteOfflineMode": "La publication du site est bloquée en mode avion.",
  "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",
  "menu.item.validateTranslations": "Valider les traductions",
  "translationValidation.tabTitle": "Validation des traductions",
  "translationValidation.title": "Valider les traductions",
  "translationValidation.summary": "Lignes BD vérifiées : {dbRows} · Fichiers vérifiés : {files} · Lignes BD invalides : {invalidDb} · Fichiers invalides : {invalidFiles}",
  "translationValidation.loading": "Validation des traductions en cours...",
  "translationValidation.empty": "Exécutez Blog -> Valider les traductions pour inspecter l’intégrité des traductions.",
  "translationValidation.databaseTitle": "Lignes de traduction invalides dans la base de données",
  "translationValidation.filesystemTitle": "Fichiers de traduction invalides sur le disque",
  "translationValidation.noneDatabase": "Aucune ligne de traduction invalide trouvée.",
  "translationValidation.noneFilesystem": "Aucun fichier de traduction invalide trouvé.",
  "translationValidation.error.validate": "Échec de la validation des traductions",
  "translationValidation.issue.sameLanguage": "La langue de traduction correspond à la langue canonique de l’article",
  "translationValidation.issue.missingSource": "La traduction pointe vers un article source manquant",
  "translationValidation.issue.doNotTranslate": "L'article est marqué ne-pas-traduire mais a des traductions",
  "translationValidation.issue.contentInDatabase": "Traduction publiée avec contenu encore en base au lieu du système de fichiers",
  "translationValidation.field.translationFor": "Article source",
  "translationValidation.field.translationId": "Ligne de traduction",
  "translationValidation.field.title": "Titre",
  "translationValidation.field.languages": "Langues",
  "translationValidation.field.filePath": "Fichier",
  "translationValidation.languagesWithCanonical": "{canonical} = {translation}",
  "translationValidation.revalidate": "Revalider",
  "translationValidation.revalidating": "Revalidation…",
  "translationValidation.fix": "Corriger les problèmes",
  "translationValidation.fixing": "Correction…",
  "translationValidation.toast.fixSuccess": "{dbRows} lignes DB et {files} fichiers supprimés, {flushed} traductions écrites sur disque",
  "translationValidation.error.fix": "Échec de la correction des traductions invalides",
  "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.technology.semanticSimilarityLabel": "Similarité sémantique",
  "settings.technology.semanticSimilarityDescription": "Active les embeddings IA locaux pour les suggestions de publications similaires, les suggestions de tags et la détection de doublons. Télécharge un modèle d'environ 100 Mo lors du premier usage.",
  "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 requise",
  "chat.apiKeyRequiredDescription": "Configurez une clé API dans les Réglages pour activer le chat IA.",
  "chat.openSettings": "Ouvrir les Réglages",
  "chat.apiKeyPlaceholder": "Saisissez votre clé API...",
  "chat.apiKeySave": "Enregistrer la clé",
  "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",
  "aiSuggestions.postTitle": "Analyse IA de l'article",
  "aiSuggestions.analyzingPost": "Analyse de l'article…",
  "aiSuggestions.excerptField": "Résumé / Extrait",
  "aiSuggestions.slugField": "Slug",
  "aiSuggestions.slugLockedWarning": "Le slug ne peut être modifié qu'avant la première publication.",
  "aiSuggestions.postEmpty": "Aucune suggestion n'a été générée pour cet article.",
  "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.loadingRelated": "Chargement des publications connexes...",
  "insert.section.relatedPosts": "Publications connexes",
  "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.offlineMode": "Cette action est bloquée en mode avion.",
  "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 entre la base de données et les fichiers pour les articles, médias, scripts et modèles. 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.stats.scripts": "Scripts",
  "metadataDiff.stats.templates": "Modèles",
  "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.summary.mediaNoDiffs": "✅ Aucune différence trouvée ! Les {total} fichiers média sont synchronisés.",
  "metadataDiff.summary.mediaWithDiffs": "⚠️ {count} fichiers média présentent des différences sur {total}.",
  "metadataDiff.summary.scriptNoDiffs": "✅ Aucune différence trouvée ! Les {total} scripts sont synchronisés.",
  "metadataDiff.summary.scriptWithDiffs": "⚠️ {count} scripts présentent des différences sur {total}.",
  "metadataDiff.summary.templateNoDiffs": "✅ Aucune différence trouvée ! Les {total} modèles sont synchronisés.",
  "metadataDiff.summary.templateWithDiffs": "⚠️ {count} modèles présentent des différences sur {total}.",
  "metadataDiff.group.differences": "Différences de {label}",
  "metadataDiff.group.postsCount": "{count} articles",
  "metadataDiff.group.itemsCount": "{count} éléments",
  "metadataDiff.fieldFilter.toggle": "Filtrer par {field}",
  "metadataDiff.tab.posts": "Articles",
  "metadataDiff.tab.media": "Médias",
  "metadataDiff.tab.scripts": "Scripts",
  "metadataDiff.tab.templates": "Modèles",
  "metadataDiff.orphanFiles.title": "Fichiers orphelins ({count})",
  "metadataDiff.orphanFiles.description": "Ces fichiers existent sur le disque mais n'ont pas d'entrée correspondante dans la base de données. Ils peuvent provenir de changements de slug ou de modifications manuelles.",
  "metadataDiff.orphanFiles.badge": "Fichier orphelin",
  "metadataDiff.orphanFiles.slug": "Slug",
  "metadataDiff.orphanFiles.path": "Chemin",
  "metadataDiff.orphanFiles.importButton": "D → BD",
  "metadataDiff.orphanFiles.importTitle": "Importer tous les fichiers orphelins dans la base de données",
  "metadataDiff.orphanFiles.importing": "Importation…",
  "metadataDiff.orphanFiles.importSuccess": "{success} fichiers orphelins importés{failed}",
  "metadataDiff.orphanFiles.importError": "Échec de l'importation des fichiers orphelins",
  "metadataDiff.sync.failed": "échoué",
  "metadataDiff.sync.dbToFile.title": "Mettre à jour les fichiers avec les valeurs de la base",
  "metadataDiff.sync.dbToFile.short": "BD→F",
  "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.short": "F→BD",
  "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.fileMissing": "Fichier manquant",
  "metadataDiff.value.fileMissing": "(manquant)",
  "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.languagesAvailable": "{count} langues disponibles",
  "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.blogLanguagesLabel": "Langues du blog",
  "settings.project.blogLanguagesDescription": "Langues dans lesquelles le blog est rendu. La langue principale est toujours incluse. Les langues supplémentaires génèrent des sous-arborescences traduites.",
  "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.excerpt": "Extrait",
  "editor.field.categories": "Catégories",
  "editor.field.content": "Contenu",
  "editor.field.template": "Modèle",
  "editor.field.templateDefault": "Par défaut",
  "editor.field.language": "Langue",
  "editor.field.languageDefault": "Par défaut du projet",
  "language.en": "Anglais",
  "language.de": "Allemand",
  "language.fr": "Français",
  "language.it": "Italien",
  "language.es": "Espagnol",
  "editor.placeholder.tags": "Ajouter des étiquettes...",
  "editor.placeholder.author": "Nom de l’auteur",
  "editor.placeholder.excerpt": "Résumé facultatif pour les listes et aperçus",
  "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.translations.title": "Traductions",
  "editor.translations.currentLanguage": "Langue actuelle : {language}",
  "editor.translations.none": "Aucune traduction pour le moment.",
  "editor.translations.selectTarget": "Sélectionner la langue cible",
  "editor.translations.translateButton": "Traduire vers...",
  "editor.translations.translateTitle": "Créer ou actualiser une traduction avec l’IA",
  "editor.translations.translating": "Traduction...",
  "editor.translations.refresh": "Actualiser",
  "editor.translations.refreshTitle": "Regénérer cette traduction avec l’IA",
  "editor.translations.publish": "Publier",
  "editor.translations.publishTitle": "Publier cette traduction dans son fichier Markdown",
  "editor.translations.publishing": "Publication...",
  "editor.translations.missing": "Manquantes : {languages}",
  "editor.translations.complete": "Toutes les langues de traduction prises en charge sont disponibles.",
  "editor.translations.translateSuccess": "Traduction mise à jour pour {language}",
  "editor.translations.translateFailed": "La traduction a échoué",
  "editor.translations.publishSuccess": "Traduction publiée pour {language}",
  "editor.translations.publishFailed": "Échec de la publication de la traduction",
  "editor.translations.status.draft": "Brouillon",
  "editor.translations.status.published": "Publié",
  "editor.translations.status.archived": "Archivé",
  "editor.excerpt.toggle": "Extrait",
  "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",
  "editor.dropImage.importing": "Importation de l'image…",
  "editor.dropImage.success": "Image importée et liée",
  "editor.dropImage.failed": "Échec de l'importation de l'image déposée",
  "editor.dropImage.invalidType": "Seuls les fichiers image peuvent être déposés ici",
  "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.ai.refreshModelCatalog": "Actualiser le catalogue",
  "settings.ai.refreshing": "Actualisation…",
  "settings.ai.modelInfoMaxOutput": "Sortie max.",
  "settings.ai.modelInfoContext": "Contexte",
  "settings.ai.modelInfoInputPrice": "Entrée",
  "settings.ai.modelInfoOutputPrice": "Sortie",
  "settings.ai.modelInfoTokens": "tokens",
  "settings.ai.modelInfoPerMTok": "/MTok",
  "settings.ai.mistralApiKeyLabel": "Clé API Mistral",
  "settings.ai.mistralApiKeyDescription": "Votre clé API Mistral AI. Permet d'utiliser les modèles Mistral comme alternative à OpenCode.",
  "settings.ai.mistralApiKeyConfigured": "Clé API Mistral configurée",
  "settings.ai.changeMistralApiKey": "Modifier la clé API Mistral",
  "settings.ai.titleModelLabel": "Modèle de génération de titres",
  "settings.ai.titleModelDescription": "Modèle utilisé pour générer automatiquement les titres de conversation.",
  "settings.ai.imageAnalysisModelLabel": "Modèle d'analyse d'images",
  "settings.ai.imageAnalysisModelDescription": "Modèle utilisé pour l'analyse automatique d'images (titre, texte alternatif, légende).",
  "settings.ai.providerOpenCode": "OpenCode",
  "settings.ai.providerMistral": "Mistral",
  "settings.ai.providerOllama": "Ollama (Local)",
  "settings.ai.providerLmstudio": "LM Studio (Local)",
  "settings.ai.providerOther": "Autre",
  "settings.ai.ollamaLabel": "Ollama (Modèles locaux)",
  "settings.ai.ollamaDescription": "Connectez-vous à une instance Ollama locale pour utiliser des modèles d'IA locaux.",
  "settings.ai.ollamaEnable": "Activer Ollama",
  "settings.ai.ollamaCapabilitiesDescription": "Configurer les capacités de chaque modèle Ollama. Activer les outils pour les appels de fonctions ou la vision pour l'analyse d'images.",
  "settings.ai.ollamaCapModel": "Modèle",
  "settings.ai.ollamaCapTools": "Outils",
  "settings.ai.ollamaCapVision": "Vision",
  "chat.providerKeyMissing": "Le modèle '{{model}}' nécessite une clé API {{provider}}. Configurez-la dans les paramètres.",
  "settings.toast.modelCatalogRefreshed": "Catalogue mis à jour ({{count}} modèles)",
  "settings.toast.modelCatalogUpToDate": "Le catalogue est déjà à jour",
  "settings.toast.modelCatalogRefreshFailed": "Échec de l'actualisation du catalogue",
  "settings.toast.ollamaEnabled": "Ollama activé",
  "settings.toast.ollamaDisabled": "Ollama désactivé",
  "settings.ai.lmstudioLabel": "LM Studio (Modèles locaux)",
  "settings.ai.lmstudioDescription": "Connectez-vous à une instance LM Studio locale pour utiliser des modèles d'IA locaux.",
  "settings.ai.lmstudioEnable": "Activer LM Studio",
  "settings.ai.lmstudioCapabilitiesDescription": "Configurer les capacités de chaque modèle LM Studio. Activer les outils pour les appels de fonctions ou la vision pour l'analyse d'images.",
  "settings.ai.lmstudioCapModel": "Modèle",
  "settings.ai.lmstudioCapTools": "Outils",
  "settings.ai.lmstudioCapVision": "Vision",
  "settings.toast.lmstudioEnabled": "LM Studio activé",
  "settings.toast.lmstudioDisabled": "LM Studio désactivé",
  "settings.ai.offlineLabel": "Mode avion",
  "settings.ai.offlineDescription": "Lorsqu'il est activé, seuls les modèles hébergés localement (Ollama, LM Studio) sont utilisés. Les fournisseurs cloud sont désactivés.",
  "settings.ai.offlineEnable": "Activer le mode avion",
  "settings.ai.offlineChatModel": "Modèle de chat hors ligne",
  "settings.ai.offlineChatModelDescription": "Modèle utilisé pour les conversations en mode avion.",
  "settings.ai.offlineTitleModel": "Modèle de titre hors ligne",
  "settings.ai.offlineTitleModelDescription": "Modèle utilisé pour la génération de titres en mode avion.",
  "settings.ai.offlineImageAnalysisModel": "Modèle d'analyse d'image hors ligne",
  "settings.ai.offlineImageAnalysisModelDescription": "Modèle utilisé pour l'analyse d'images en mode avion.",
  "settings.ai.offlineNoLocalProviders": "Aucun fournisseur local activé. Activez d'abord Ollama ou LM Studio.",
  "settings.ai.offlineNoLocalModels": "Aucun modèle local disponible",
  "settings.toast.offlineEnabled": "Mode avion activé",
  "settings.toast.offlineDisabled": "Mode avion désactivé",
  "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.quickActions.detectLanguageTitle": "Détecter la langue",
  "editor.media.quickActions.detectLanguageDescription": "Détecter la langue des métadonnées avec l’IA",
  "editor.media.quickActions.translateTitle": "Traduire en…",
  "editor.media.quickActions.translateDescription": "Créer ou actualiser une traduction avec l’IA",
  "editor.media.translations.currentLanguage": "Langue actuelle : {language}",
  "editor.media.translations.selectTarget": "Sélectionner la langue cible",
  "editor.post.quickActions.title": "Actions rapides",
  "editor.post.quickActions.analyzing": "⏳ Analyse…",
  "editor.post.quickActions.button": "⚡ Actions rapides",
  "editor.post.quickActions.aiTitle": "IA : Suggérer titre, résumé et slug",
  "editor.post.quickActions.aiDescription": "Analyse le contenu pour suggérer des métadonnées",
  "editor.post.quickActions.detectLanguageDescription": "Détecter la langue avec l'IA",
  "editor.post.quickActions.detecting": "Détection…",
  "editor.post.quickActions.languageDetected": "Langue détectée",
  "editor.post.quickActions.detectLanguageFailed": "Échec de la détection de la langue",
  "editor.post.error.analyzePost": "Échec de l'analyse de l'article",
  "editor.post.error.applyFailed": "Impossible d'appliquer les suggestions IA",
  "editor.post.toast.aiApplied": "Suggestions IA appliquées",
  "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.field.language": "Langue",
  "editor.media.field.languageNone": "Non défini",
  "editor.media.translations.title": "Traductions",
  "editor.media.translations.none": "Aucune traduction pour le moment.",
  "editor.media.translations.translateButton": "Traduire en…",
  "editor.media.translations.translating": "Traduction…",
  "editor.media.translations.translateSuccess": "Traduction mise à jour pour {language}",
  "editor.media.translations.translateFailed": "Échec de la traduction",
  "editor.media.translations.refresh": "Actualiser",
  "editor.media.translations.refreshTitle": "Régénérer cette traduction par IA",
  "editor.media.translations.deleteTitle": "Supprimer cette traduction",
  "editor.media.translations.deleted": "Traduction supprimée pour {language}",
  "editor.media.translations.deleteFailed": "Échec de la suppression de la traduction",
  "editor.media.translations.editTitle": "Modifier la traduction — {language}",
  "editor.media.translations.saved": "Traduction enregistrée pour {language}",
  "editor.media.translations.saveFailed": "Échec de l’enregistrement de la traduction",
  "editor.media.toast.languageDetected": "Langue détectée : {language}",
  "editor.media.error.detectLanguage": "Échec de la détection de la langue",
  "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",
  "statusBar.offlineMode": "Mode avion",
  "statusBar.offlineModeActive": "Mode avion (actif)",
  "statusBar.offlineModeTooltip": "Cliquer pour basculer le mode avion",
  "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.aiSuggestedLabel": "Suggestions IA",
  "tagInput.allTagsLabel": "Tous les tags",
  "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}",
  "duplicatesView.tabTitle": "Trouver les doublons",
  "duplicatesView.title": "Articles en double",
  "duplicatesView.description": "Articles avec une grande similarité de contenu pouvant être des doublons.",
  "duplicatesView.loading": "Recherche des doublons...",
  "duplicatesView.empty": "Aucun article en double trouvé.",
  "duplicatesView.error": "Impossible de charger les doublons",
  "duplicatesView.refresh": "Actualiser",
  "duplicatesView.dismiss": "Ignorer",
  "duplicatesView.similarity": "{value}% similaire",
  "duplicatesView.exactMatch": "Doublon exact",
  "duplicatesView.openPost": "Ouvrir l'article",
  "duplicatesView.count": "{count} paires trouvées",
  "duplicatesView.showMore": "Afficher plus",
  "duplicatesView.checkAll": "Tout cocher",
  "duplicatesView.uncheckAll": "Tout décocher",
  "duplicatesView.dismissChecked": "Ignorer cochés ({count})",
  "duplicatesView.notEnabled": "La similarité sémantique n'est pas activée. Activez-la dans Paramètres → Technologie.",
  "editor.doNotTranslateLabel": "Ne pas traduire",
  "blog.fillMissing.nothingToDo": "Toutes les traductions sont à jour.",
  "blog.fillMissing.started": "Tâche de traduction démarrée. Consultez le panneau des tâches pour le progrès.",
  "blog.fillMissing.error": "Échec du remplissage des traductions manquantes."
}
