feat: i18n support with first translations
This commit is contained in:
320
src/renderer/i18n/locales/fr.json
Normal file
320
src/renderer/i18n/locales/fr.json
Normal file
@@ -0,0 +1,320 @@
|
||||
{
|
||||
"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.tags": "Étiquettes",
|
||||
"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.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.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",
|
||||
"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.publishing.ftpTitle": "Publication FTP",
|
||||
"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": "No paramètres found matching \"{query}\"",
|
||||
"settings.search.clear": "Effacer la recherche",
|
||||
"settings.toast.publishingSaved": "Identifiants de publication enregistrés",
|
||||
"settings.toast.saveCredentialsFailed": "Échec de save credentials",
|
||||
"settings.toast.credentialsCleared": "Identifiants {type} effacés",
|
||||
"settings.toast.projectSaved": "Project paramètres saved",
|
||||
"settings.toast.projectSaveFailed": "Échec de save project paramètres",
|
||||
"settings.toast.categoryAdded": "Catégorie \"{category}\" ajoutée",
|
||||
"settings.toast.categoryAddFailed": "Échec de add category",
|
||||
"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": "Échec de remove category",
|
||||
"settings.toast.categoriesReset": "Catégories réinitialisées aux valeurs par défaut",
|
||||
"settings.toast.categoriesResetFailed": "Échec de reset categories",
|
||||
"settings.toast.categorySettingsUpdateFailed": "Échec de update category paramètres",
|
||||
"settings.toast.systemPromptSaved": "Prompt système enregistré",
|
||||
"settings.toast.systemPromptSaveFailed": "Échec de save system prompt",
|
||||
"settings.toast.systemPromptReset": "Prompt système réinitialisé par défaut",
|
||||
"settings.toast.systemPromptResetFailed": "Échec de reset system prompt",
|
||||
"settings.toast.apiKeySaved": "Clé API enregistrée et validée",
|
||||
"settings.toast.apiKeyInvalid": "Clé API invalide",
|
||||
"settings.toast.apiKeySaveFailed": "Échec de save API key",
|
||||
"settings.toast.defaultModelUpdated": "Modèle par défaut mis à jour",
|
||||
"settings.toast.defaultModelUpdateFailed": "Échec de set default model",
|
||||
"settings.toast.rebuildPostsLoading": "Rebuilding articles database...",
|
||||
"settings.toast.rebuildPostsSuccess": "Base des articles reconstruite",
|
||||
"settings.toast.rebuildPostsFailed": "Échec de rebuild articles database",
|
||||
"settings.toast.rebuildMediaLoading": "Rebuilding médias database...",
|
||||
"settings.toast.rebuildMediaSuccess": "Base médias reconstruite",
|
||||
"settings.toast.rebuildMediaFailed": "Échec de rebuild médias database",
|
||||
"settings.toast.rebuildLinksLoading": "Rebuilding article links...",
|
||||
"settings.toast.rebuildLinksSuccess": "Liens d’articles reconstruits",
|
||||
"settings.toast.rebuildLinksFailed": "Échec de rebuild article links",
|
||||
"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": "Échec de generate thumbnails",
|
||||
"chat.setupTitle": "Configuration du chat IA",
|
||||
"chat.apiKeyRequiredTitle": "Clé API OpenCode Zen requise",
|
||||
"chat.apiKeyRequiredDescription": "Saisissez votre clé API OpenCode pour activer le chat IA.",
|
||||
"chat.apiKeyPlaceholder": "Saisissez votre clé API...",
|
||||
"chat.apiKeySave": "Enregistrer la clé",
|
||||
"chat.apiKeyValidating": "Validation...",
|
||||
"chat.apiKeyInvalid": "Clé API invalide. Veuillez vérifier et réessayer.",
|
||||
"chat.apiKeyValidationFailed": "Échec de validate API key.",
|
||||
"chat.newChat": "Nouveau chat",
|
||||
"chat.welcomeTitle": "Bienvenue dans l’assistant IA",
|
||||
"chat.welcomeDescription": "I can help you manage your articles and médias. Try asking me to:",
|
||||
"chat.welcomeTipSearch": "Recherche for articles about a specific topic",
|
||||
"chat.welcomeTipDetails": "Get details about a specific article",
|
||||
"chat.welcomeTipTags": "Lister toutes les étiquettes ou catégories de votre blog",
|
||||
"chat.welcomeTipMetadata": "Update metadata for articles or médias",
|
||||
"chat.welcomeTipImages": "List all images in your médias library",
|
||||
"chat.role.you": "Vous",
|
||||
"chat.role.assistant": "Assistant IA",
|
||||
"chat.stop": "Arrêter",
|
||||
"chat.inputPlaceholder": "Saisissez un message...",
|
||||
"chat.errorPrefix": "Erreur : {error}",
|
||||
"chat.errorNoResponse": "Échec de get a response. Please try again.",
|
||||
"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": "Recherche articles by title or content...",
|
||||
"insert.searchPlaceholder.image": "Recherche médias by name, title, or alt text...",
|
||||
"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": "Canonical: /médias/YYYY/MM/file.ext",
|
||||
"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.",
|
||||
"gitDiff.header": "Diff : {target}",
|
||||
"gitDiff.noProject": "Aucun projet actif sélectionné.",
|
||||
"gitDiff.noProjectPath": "Impossible de résoudre le chemin du projet.",
|
||||
"gitDiff.loadFailed": "Échec de load 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": "Are you sure you want to delete the article",
|
||||
"confirmDelete.promptMedia": "Are you sure you want to delete the médias file",
|
||||
"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": "Échec de load credentials:",
|
||||
"credentials.error.save": "Échec de save credentials:",
|
||||
"credentials.toast.saved": "Identifiants enregistrés",
|
||||
"credentials.toast.saveFailed": "Échec de save credentials",
|
||||
"credentials.toast.testing": "Test de la connexion {type}...",
|
||||
"credentials.toast.connectionFailed": "Connection échoué - check credentials",
|
||||
"credentials.tab.ftp": "Accès FTP",
|
||||
"credentials.tab.ssh": "Accès SSH",
|
||||
"credentials.ftp.title": "Publication FTP",
|
||||
"credentials.ftp.description": "Configurez FTP pour publier votre blog sur un serveur web.",
|
||||
"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.password": "Mot de passe",
|
||||
"credentials.field.sshKeyPath": "Chemin de clé SSH",
|
||||
"credentials.action.testConnection": "Tester la connexion",
|
||||
"credentials.ftp.placeholder.host": "ftp.exemple.fr",
|
||||
"credentials.ftp.placeholder.username": "utilisateur-ftp",
|
||||
"credentials.ftp.placeholder.password": "Mot de passe",
|
||||
"credentials.ssh.placeholder.host": "serveur.exemple.fr",
|
||||
"credentials.ssh.placeholder.username": "utilisateur-ssh",
|
||||
"credentials.ssh.placeholder.keyPath": "~/.ssh/ma_cle",
|
||||
"gitSidebar.header": "CONTRÔLE DE SOURCE",
|
||||
"gitSidebar.loading": "Chargement...",
|
||||
"gitSidebar.error.fetchRemoteUpdates": "Échec de fetch remote updates.",
|
||||
"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": "Échec de initialize git repository.",
|
||||
"gitSidebar.error.actionFailed": "Échec de {action}.",
|
||||
"gitSidebar.error.commitFailed": "Échec de commit changes.",
|
||||
"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.initializeGit": "Initialiser Git",
|
||||
"gitSidebar.action.initializing": "Initialisation...",
|
||||
"gitSidebar.openChanges": "Ouvrir Changes ({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.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": "Échec de fetch article title:",
|
||||
"tabBar.error.fetchChatTitle": "Échec de fetch chat title:",
|
||||
"tabBar.error.fetchImportTitle": "Échec de fetch import definition title:",
|
||||
"tabBar.error.fetchCommitTitle": "Échec de fetch commit titles:",
|
||||
"metadataDiff.title": "Outil de diff des métadonnées",
|
||||
"metadataDiff.description": "Compare article metadata between database and markdown files. Fix inconsistencies caused by bugs or manual edits.",
|
||||
"metadataDiff.error.loadStats": "Échec de load database statistics",
|
||||
"metadataDiff.error.scan": "Échec de scan for differences",
|
||||
"metadataDiff.progress.starting": "Démarrage de l’analyse...",
|
||||
"metadataDiff.progress.scanningPublished": "Scanning published articles...",
|
||||
"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": "✅ No differences found! All {total} published articles are in sync.",
|
||||
"metadataDiff.summary.withDiffs": "⚠️ Found {count} articles with differences out of {total} published articles.",
|
||||
"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": "Synced {success} articles to files{échoué}",
|
||||
"metadataDiff.sync.dbToFile.error": "Échec de sync to files",
|
||||
"metadataDiff.sync.fileToDb.title": "Mettre à jour la base avec les valeurs des fichiers",
|
||||
"metadataDiff.sync.fileToDb.success": "Synced {success} files to database{échoué}",
|
||||
"metadataDiff.sync.fileToDb.error": "Échec de sync to database",
|
||||
"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."
|
||||
}
|
||||
Reference in New Issue
Block a user