{ "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 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", "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.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.providerOther": "Autre", "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.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}" }