Files
bDS/src/renderer/i18n/locales/fr.json
2026-03-01 15:24:15 +01:00

1018 lines
63 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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 douvrir laperçu de larticle 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 darticles mises à jour (à rerendre)",
"siteValidation.noneMissing": "Aucune URL manquante trouvée.",
"siteValidation.noneExtra": "Aucune URL en trop trouvée.",
"siteValidation.noneUpdated": "Aucune URL darticle 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 lapplication 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 denregistrer 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 lentré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 darticles",
"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 dexécution des scripts Python.",
"settings.technology.pythonRuntimeModeLabel": "Mode dexécution Python",
"settings.technology.pythonRuntimeModeDescription": "Choisissez où les scripts Python sexé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 denregistrer les identifiants",
"settings.toast.credentialsCleared": "Identifiants {type} effacés",
"settings.toast.projectSaved": "Paramètres du projet enregistrés",
"settings.toast.projectSaveFailed": "Impossible denregistrer 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 dajouter 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 denregistrer 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 denregistrer 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 darticles...",
"settings.toast.rebuildLinksSuccess": "Liens darticles reconstruits",
"settings.toast.rebuildLinksFailed": "Impossible de reconstruire les liens darticles",
"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 lassistant 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 dobtenir 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 dimage IA",
"aiSuggestions.close": "Fermer",
"aiSuggestions.analyzing": "Analyse de limage...",
"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 lIA à appliquer. Les valeurs existantes sont conservées par défaut.",
"aiSuggestions.empty": "Aucune suggestion na é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 limage",
"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 lURL 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 larticle",
"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 larticle",
"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 denregistrer les identifiants :",
"credentials.toast.saved": "Identifiants enregistrés",
"credentials.toast.saveFailed": "Impossible denregistrer 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 dactualiser létat de suivi distant.",
"gitSidebar.error.gitMissing": "Exécutable Git introuvable. Veuillez installer Git et redémarrer lapplication.",
"gitSidebar.error.noActiveProject": "Aucun projet actif sélectionné.",
"gitSidebar.error.loadRepoStatus": "Impossible de charger létat du dépôt.",
"gitSidebar.error.initFailed": "Impossible dinitialiser 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 linitialisation 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 dinitialisation",
"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 lhistorique...",
"gitSidebar.noCommits": "Aucun commit pour le moment",
"gitSidebar.branch": "Branche : {branch}",
"gitSidebar.aheadBehind": "en avance {ahead} / en retard {behind}",
"gitSidebar.notRepo": "Ce projet nest 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 larticle :",
"tabBar.error.fetchChatTitle": "Impossible de charger le titre du chat :",
"tabBar.error.fetchImportTitle": "Impossible de charger le titre de la définition dimport :",
"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 danalyser les différences",
"metadataDiff.progress.starting": "Démarrage de lanalyse...",
"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 lanalyse",
"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 dentré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 daffichage 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 lemplacement 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 lIA utiliseront cette langue.",
"settings.project.defaultAuthorLabel": "Auteur par défaut",
"settings.project.defaultAuthorDescription": "Nom dauteur par défaut pour les nouveaux articles et médias. Peut être remplacé par élément.",
"settings.project.defaultAuthorPlaceholder": "Nom de lauteur",
"settings.project.maxPostsPerPageLabel": "Nombre max darticles par page",
"settings.project.maxPostsPerPageDescription": "Nombre maximum darticles affichés par page de route daperç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 larticle...",
"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 lauteur",
"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 larticle",
"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 lapparence de léditeur.",
"settings.editor.defaultModeLabel": "Mode par défaut",
"settings.editor.defaultModeDescription": "Choisissez le mode douverture de léditeur.",
"settings.editor.diffViewStyleLabel": "Style de vue diff",
"settings.editor.diffViewStyleDescription": "Définissez laffichage 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 daffichage.",
"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 lassistant 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 lindex 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 lindex 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 darticles",
"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 dimport",
"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 lenregistrement",
"editor.error.saveMessage": "Impossible denregistrer larticle : {error}",
"editor.error.publishTitle": "Échec de la publication",
"editor.error.publishMessage": "Impossible de publier larticle : {error}",
"editor.error.discardTitle": "Échec de labandon",
"editor.error.deleteTitle": "Échec de la suppression",
"editor.error.operationMessage": "Lopération a échoué : {error}",
"editor.error.deletePostMessage": "Impossible de supprimer larticle : {error}",
"editor.error.fetchPostReferencesMessage": "Impossible de récupérer les références darticle : {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 danalyser limage : {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é à larticle",
"editor.media.toast.linkFailed": "Échec de liaison du média : {error}",
"editor.media.toast.unlinkedFromPost": "Média dissocié de larticle",
"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 lIA",
"editor.media.quickActions.aiTitle": "Titre suggéré par lIA",
"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 limage pour laccessibilité",
"editor.media.placeholder.caption": "Ajouter une légende",
"editor.media.placeholder.tags": "Ajouter des tags",
"editor.media.placeholder.author": "Nom de lauteur",
"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 larticle",
"editor.media.unlinkFromPost": "Dissocier de larticle",
"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 linterface",
"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 à lassistant danalyser ou dinterroger 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": "Laction assistant na 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 dimport…",
"importAnalysis.namePlaceholder": "Nom de la définition dimport",
"importAnalysis.headerDescription": "Analysez un fichier WXR avant import.",
"importAnalysis.uploadsFolder": "Dossier duploads",
"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 lanalyse.",
"importAnalysis.importing": "Import en cours…",
"importAnalysis.importComplete": "Import terminé : {count}",
"importAnalysis.importFailed": "Échec de limport : {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 darticle",
"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": "LIA 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}"
}