feat(i18n): add French (FR) language support (#2113)

* feat(i18n): add French (FR) language support

- Add Fr variant to UiLanguage enum in Rust backend
- Create French locale directory with 5 translation files:
  - common.json: Common UI elements (buttons, states, navigation)
  - settings.json: Settings pages translations
  - projects.json: Project management strings
  - tasks.json: Task-related strings
  - organization.json: Organization management strings
- Update languages.ts with FR mapping and Français endonym
- Update config.ts to import and register French resources

Follows the pattern established by PR #994 (Korean) and PR #795 (Spanish)

* fmt

* fix i18n

* types

* fix(i18n): add missing customise key to fr/common.json

* fix(i18n): add missing customise key to fr/common.json

---------

Co-authored-by: Gabriel Gordon-Hall <ggordonhall@gmail.com>
This commit is contained in:
Anthony Mahé
2026-01-18 10:13:50 +01:00
committed by GitHub
parent 6f7b0b6ebc
commit 9766f9930d
9 changed files with 1614 additions and 1 deletions

View File

@@ -9,6 +9,11 @@ import enSettings from './locales/en/settings.json';
import enProjects from './locales/en/projects.json';
import enTasks from './locales/en/tasks.json';
import enOrganization from './locales/en/organization.json';
import frCommon from './locales/fr/common.json';
import frSettings from './locales/fr/settings.json';
import frProjects from './locales/fr/projects.json';
import frTasks from './locales/fr/tasks.json';
import frOrganization from './locales/fr/organization.json';
import jaCommon from './locales/ja/common.json';
import jaSettings from './locales/ja/settings.json';
import jaProjects from './locales/ja/projects.json';
@@ -43,6 +48,13 @@ const resources = {
tasks: enTasks,
organization: enOrganization,
},
fr: {
common: frCommon,
settings: frSettings,
projects: frProjects,
tasks: frTasks,
organization: frOrganization,
},
ja: {
common: jaCommon,
settings: jaSettings,

View File

@@ -8,6 +8,7 @@ export type { UiLanguage } from '../../../shared/types';
export const UI_TO_I18N = {
EN: 'en',
FR: 'fr',
JA: 'ja',
ES: 'es',
KO: 'ko',
@@ -18,6 +19,7 @@ export const UI_TO_I18N = {
const SUPPORTED_UI_LANGUAGES = [
'BROWSER',
'EN',
'FR',
'JA',
'ES',
'KO',
@@ -28,6 +30,7 @@ export const SUPPORTED_I18N_CODES = Object.values(UI_TO_I18N);
const FALLBACK_ENDONYMS = {
en: 'English',
fr: 'Français',
ja: '日本語',
es: 'Español',
ko: '한국어',

View File

@@ -0,0 +1,291 @@
{
"buttons": {
"save": "Enregistrer",
"cancel": "Annuler",
"send": "Envoyer",
"delete": "Supprimer",
"edit": "Modifier",
"create": "Créer",
"continue": "Continuer",
"reset": "Réinitialiser",
"manage": "Gérer",
"connect": "Connecter",
"disconnect": "Déconnecter",
"close": "Fermer",
"replay": "Rejouer"
},
"states": {
"loading": "Chargement...",
"loadingHistory": "Chargement de l'historique",
"saving": "Enregistrement...",
"error": "Erreur",
"success": "Succès",
"reconnecting": "Reconnexion"
},
"language": {
"browserDefault": "Par défaut du navigateur"
},
"conversation": {
"plan": "Plan",
"planToggle": {
"show": "Afficher le plan",
"hide": "Masquer le plan"
},
"toolDetailsToggle": {
"show": "Afficher les détails",
"hide": "Masquer les détails"
},
"args": "Arguments",
"output": "Sortie",
"result": "Résultat",
"deniedByUser": "{{toolName}} refusé par l'utilisateur",
"taskCompleted": "Tâche terminée",
"ran": "Exécuté",
"tool": "Outil",
"toolSummary": {
"read": "Lu {{path}}",
"searched": "Recherché \"{{query}}\"",
"fetched": "Récupéré {{url}}",
"ranCommand": "Commande exécutée",
"createdTask": "Tâche créée : {{description}}",
"todoOperation": "{{operation}} tâches à faire"
},
"fixScript": "Corriger le script"
},
"folderPicker": {
"legend": "Cliquez sur les noms de dossiers pour naviguer • Utilisez les boutons d'action pour sélectionner",
"manualPathLabel": "Saisir le chemin manuellement :",
"go": "Aller",
"searchLabel": "Rechercher dans le répertoire actuel :",
"selectCurrent": "Sélectionner l'actuel",
"gitRepo": "dépôt git",
"selectPath": "Sélectionner le chemin"
},
"branchSelector": {
"placeholder": "Sélectionner une branche",
"searchPlaceholder": "Rechercher des branches...",
"empty": "Aucune branche trouvée",
"badges": {
"current": "actuelle",
"remote": "distante"
},
"currentDisabled": "Impossible de sélectionner la branche actuelle"
},
"breadcrumb": {
"more": "Plus"
},
"orgMembers": {
"moreCount": "+{{count}} autres"
},
"orgSwitcher": {
"title": "Changer d'organisation",
"description": "Sélectionnez une organisation vers laquelle basculer.",
"loadError": "Échec du chargement des organisations. Veuillez réessayer.",
"noOrganizations": "Vous n'êtes membre d'aucune organisation.",
"menuItem": "Organisation",
"loadingPlaceholder": "Chargement des organisations...",
"selectPlaceholder": "Sélectionner une organisation",
"currentBadge": " (actuelle)"
},
"navbar": {
"tryNewUI": "essayer la nouvelle interface"
},
"signOut": "Se déconnecter",
"devMode": {
"banner": "Mode développement - Ceci est une version de développement"
},
"oauth": {
"title": "Se connecter à Vibe Kanban",
"description": "Connectez-vous pour rejoindre des organisations et partager des tâches avec votre équipe",
"continueWithGitHub": "Continuer avec GitHub",
"continueWithGoogle": "Continuer avec Google",
"waitingTitle": "Terminer l'authentification",
"waitingDescription": "Une fenêtre popup a été ouverte pour l'authentification",
"waitingForAuth": "En attente de l'authentification...",
"popupInstructions": "Si la fenêtre popup ne s'est pas ouverte, veuillez vérifier les paramètres de votre bloqueur de popups.",
"back": "Retour",
"successTitle": "Authentification réussie !",
"welcomeBack": "Bienvenue, {{name}}",
"errorTitle": "Échec de l'authentification",
"errorDescription": "Un problème est survenu lors de l'authentification de votre compte",
"tryAgain": "Réessayer"
},
"toolbar": {
"sortBy": "Trier par",
"groupBy": "Grouper par"
},
"sorting": {
"ascending": "Croissant",
"descending": "Décroissant"
},
"grouping": {
"date": "Date",
"assignee": "Assigné",
"label": "Libellé"
},
"workspaces": {
"title": "Espaces de travail",
"searchPlaceholder": "Rechercher...",
"active": "Actif",
"archived": "Archivé",
"loading": "Chargement...",
"selectToStart": "Sélectionnez un espace de travail pour commencer",
"draft": "Brouillon",
"viewArchive": "Voir les archives",
"backToActive": "Retour aux actifs",
"noArchived": "Aucun espace de travail archivé",
"pin": "Épingler",
"unpin": "Désépingler",
"archive": "Archiver",
"more": "Plus d'actions",
"rename": {
"title": "Renommer l'espace de travail",
"description": "Saisissez un nouveau nom pour cet espace de travail.",
"nameLabel": "Nom",
"placeholder": "Saisir le nom de l'espace de travail",
"action": "Renommer",
"renaming": "Renommage..."
}
},
"fileTree": {
"searchPlaceholder": "Rechercher des fichiers...",
"noResults": "Aucun fichier correspondant",
"title": "Fichiers",
"showGitHubComments": "Afficher les commentaires GitHub",
"hideGitHubComments": "Masquer les commentaires GitHub"
},
"sections": {
"changes": "Modifications",
"repositories": "Dépôts",
"addRepositories": "Ajouter des dépôts",
"project": "Projet",
"processes": "Processus",
"devServer": "Serveur de développement",
"advanced": "Avancé",
"workingBranch": "Branche de travail",
"recent": "Récent",
"other": "Autre",
"devServerPreview": "Aperçu du serveur de développement",
"terminal": "Terminal"
},
"repos": {
"loading": "Chargement des dépôts...",
"noRecentRepos": "Aucun dépôt récent trouvé",
"noReposAdded": "Aucun dépôt ajouté",
"noReposAddedHint": "Ajoutez un ou plusieurs dépôts à cet espace de travail depuis les options ci-dessous"
},
"actions": {
"browseRepos": "Parcourir les dépôts sur le disque",
"createNewRepo": "Créer un nouveau dépôt sur le disque",
"viewInChangesPanel": "Voir dans le panneau des modifications",
"copyPath": "Copier le chemin",
"copyWorktreePath": "Copier le chemin du worktree",
"openInIde": "Ouvrir dans l'IDE",
"repoSettings": "Paramètres du dépôt",
"cancel": "Annuler",
"saveChanges": "Enregistrer les modifications",
"copied": "Copié"
},
"comments": {
"addReviewComment": "Ajouter un commentaire de révision",
"addPlaceholder": "Ajouter un commentaire...",
"editPlaceholder": "Modifier le commentaire..."
},
"confirm": {
"defaultConfirm": "Confirmer",
"defaultCancel": "Annuler"
},
"empty": {
"noChanges": "Aucune modification à afficher"
},
"commandBar": {
"noResults": "Aucun résultat trouvé.",
"back": "Retour",
"defaultPlaceholder": "Tapez une commande ou recherchez..."
},
"chatBox": {
"variants": "Variantes",
"customise": "Personnaliser"
},
"projects": {
"noProjectFound": "Aucun projet trouvé",
"createFirstPrompt": "Créez d'abord un projet pour commencer à travailler sur des tâches.",
"createNew": "Créer un nouveau projet",
"noProjectsFound": "Aucun projet trouvé"
},
"betaWorkspaces": {
"title": "Essayer la nouvelle interface",
"intro": "Nous avons reconstruit l'interface de Vibe Kanban de A à Z, et vous êtes invité à l'essayer.",
"newUiDescription": "La nouvelle interface est optimisée pour le travail quotidien : jongler avec les agents, prévisualiser les modifications et réviser le code. Elle débloque également des fonctionnalités non disponibles dans l'ancienne interface :",
"newFeatures": {
"multiRepo": "Modifier plusieurs dépôts en même temps",
"multiAgent": "Exécuter plusieurs conversations d'agents (même avec différents agents) dans un seul espace de travail",
"commandBar": "Navigation plus rapide avec la barre de commandes"
},
"oldUiDescription": "Pour l'instant, quelques éléments restent dans l'interface actuelle :",
"oldFeatures": {
"kanban": "Gestion des tâches sur le tableau kanban",
"settings": "Modification des paramètres",
"projects": "Gestion des projets"
},
"transition": "Pendant la transition au cours des prochaines semaines, vous passerez d'une interface à l'autre.",
"optOutNote": "Vous souhaitez vous désinscrire ? Vous pouvez revenir à l'interface actuelle à tout moment dans les Paramètres.",
"joinBeta": "Rejoindre la bêta",
"maybeLater": "Peut-être plus tard"
},
"workspacesGuide": {
"welcome": {
"title": "Bienvenue",
"content": "Bienvenue dans les Espaces de travail, une interface repensée pour Vibe Kanban. Nous la déployons auprès d'utilisateurs sélectionnés pour recueillir leurs premiers retours. Partagez vos impressions à tout moment en utilisant l'icône de feedback dans la barre de navigation."
},
"commandBar": {
"title": "Barre de commandes",
"content": "La barre de commandes est votre hub central de navigation. Ouvrez-la avec CMD+K pour rechercher et accéder à toutes les actions disponibles dans un espace de travail."
},
"contextBar": {
"title": "Barre de contexte",
"content": "La barre de contexte vous permet de basculer rapidement entre les panneaux. Faites-la glisser là où cela vous convient le mieux."
},
"sidebar": {
"title": "Barre latérale des espaces de travail",
"content": "Visualisez l'état de tous vos espaces de travail d'un coup d'œil. Les notifications mettent en évidence ceux qui nécessitent votre attention. Archivez les espaces de travail fusionnés pour garder votre barre latérale propre."
},
"multiRepo": {
"title": "Support multi-dépôts",
"content": "Ajoutez plusieurs dépôts à un seul espace de travail. Référencez le code d'un dépôt tout en travaillant dans un autre, ou implémentez des modifications sur plusieurs dépôts à la fois."
},
"sessions": {
"title": "Sessions multiples",
"content": "Créez plusieurs sessions de conversation d'agent au sein d'un même espace de travail, y compris des sessions avec différents agents. Cela vous aide à contourner les limites de conversation ou à lancer des agents de révision dans des fils séparés."
},
"preview": {
"title": "Prévisualiser les modifications",
"content": "Prévisualisez votre travail dans un navigateur intégré sans changer de contexte. Testez sur ordinateur, mobile et des tailles de viewport personnalisées."
},
"diffs": {
"title": "Diffs et commentaires",
"content": "Le panneau de diffs repensé inclut une arborescence de vos modifications. Commentez directement sur les diffs pour donner des retours à l'agent, et visualisez les commentaires GitHub lorsque votre espace de travail est lié à une PR."
},
"classicUi": {
"title": "Retourner à l'interface classique",
"content": "Cliquez sur l'icône de sortie à gauche de la barre de navigation pour revenir au tableau kanban classique. Pour désactiver complètement la nouvelle interface, modifiez l'option \"Activer la bêta des espaces de travail\" sous \"Fonctionnalités bêta\" dans les paramètres."
}
},
"logs": {
"searchLogs": "Rechercher dans les logs",
"selectProcessToView": "Sélectionnez un processus pour voir les logs"
},
"processes": {
"noProcesses": "Aucun processus"
},
"search": {
"matchCount": "{{current}} sur {{total}}",
"noMatches": "Aucune correspondance"
},
"contextUsage": {
"label": "Utilisation du contexte",
"emptyTooltip": "L'utilisation du contexte apparaît après la prochaine réponse",
"tooltip": "Contexte : {{percentage}}% · {{used}} / {{total}} tokens",
"ariaLabel": "Utilisation du contexte : {{percentage}}%"
}
}

View File

@@ -0,0 +1,78 @@
{
"createDialog": {
"title": "Créer une nouvelle organisation",
"description": "Créez une nouvelle organisation pour collaborer avec votre équipe.",
"nameLabel": "Nom de l'organisation",
"namePlaceholder": "ex: Acme Corporation",
"slugLabel": "Identifiant",
"slugPlaceholder": "ex: acme-corporation",
"slugHelper": "Utilisé dans les URLs. Uniquement des lettres minuscules, chiffres et tirets.",
"creating": "Création en cours...",
"createButton": "Créer l'organisation"
},
"inviteDialog": {
"title": "Inviter un membre",
"description": "Envoyez une invitation pour rejoindre votre organisation.",
"emailLabel": "Adresse e-mail",
"emailPlaceholder": "collegue@exemple.com",
"roleLabel": "Rôle",
"rolePlaceholder": "Sélectionner un rôle",
"roleHelper": "Les administrateurs peuvent gérer les membres et les paramètres de l'organisation.",
"sending": "Envoi en cours...",
"sendButton": "Envoyer l'invitation"
},
"roles": {
"member": "Membre",
"admin": "Administrateur"
},
"memberList": {
"title": "Membres",
"description": "Gérez les membres et leurs rôles dans {{orgName}}",
"inviteButton": "Inviter un membre",
"loading": "Chargement des membres...",
"none": "Aucun membre trouvé",
"you": "Vous"
},
"invitationList": {
"title": "Invitations en attente",
"description": "Voir les invitations en attente pour {{orgName}}",
"loading": "Chargement des invitations...",
"none": "Aucune invitation en attente",
"invited": "Invité le {{date}}",
"pending": "En attente"
},
"settings": {
"title": "Paramètres de l'organisation",
"description": "Gérez les membres et les permissions de l'organisation",
"selectLabel": "Sélectionner une organisation",
"selectPlaceholder": "Sélectionner une organisation",
"selectHelper": "Choisissez une organisation pour voir et gérer ses membres",
"noOrganizations": "Aucune organisation disponible",
"loadingOrganizations": "Chargement des organisations...",
"loadError": "Échec du chargement des organisations",
"dangerZone": "Zone de danger",
"dangerZoneDescription": "Actions irréversibles et destructives",
"deleteOrganization": "Supprimer l'organisation",
"deleteOrganizationDescription": "Supprime définitivement cette organisation et toutes ses données",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer {{orgName}} ? Cette action est irréversible.",
"deleteSuccess": "Organisation supprimée avec succès",
"deleteError": "Échec de la suppression de l'organisation"
},
"loginRequired": {
"title": "Connexion requise",
"description": "Vous devez être connecté pour gérer les paramètres de l'organisation.",
"action": "Connexion"
},
"confirmRemoveMember": "Êtes-vous sûr de vouloir retirer ce membre de l'organisation ?",
"sharedProjects": {
"title": "Projets partagés",
"description": "Projets distants dans {{orgName}} et leurs liens vers les projets locaux",
"loading": "Chargement des projets...",
"noProjects": "Aucun projet partagé trouvé dans cette organisation",
"notLinked": "Non lié",
"linkedTo": "Lié à : {{projectName}}",
"linked": "Lié",
"linkProject": "Lier un projet...",
"noAvailableProjects": "Aucun projet disponible"
}
}

View File

@@ -0,0 +1,59 @@
{
"title": "Projets",
"subtitle": "Gérez vos projets et suivez leur progression",
"createProject": "Créer un projet",
"linkToOrganization": "Lier à un projet distant",
"loading": "Chargement des projets...",
"repoSearch": {
"searching": "Recherche de dépôts...",
"stillSearching": "Recherche en cours... ({{seconds}}s)",
"takingLonger": "Cela prend plus de temps que prévu. Vous pouvez parcourir manuellement ci-dessous.",
"noReposFound": "Aucun dépôt trouvé dans les emplacements courants.",
"browseHint": "Utilisez l'option ci-dessous pour parcourir et trouver un dépôt."
},
"errors": {
"fetchFailed": "Échec de la récupération des projets",
"deleteFailed": "Échec de la suppression du projet"
},
"empty": {
"title": "Aucun projet pour le moment",
"description": "Commencez par créer votre premier projet.",
"createFirst": "Créer votre premier projet"
},
"linkDialog": {
"title": "Lier le projet à un projet distant",
"description": "Liez ce projet local à un projet distant pour la collaboration et la synchronisation.",
"projectLabel": "Projet",
"organizationLabel": "Organisation",
"loadingOrganizations": "Chargement des organisations...",
"noOrganizations": "Aucune organisation disponible. Créez d'abord une organisation.",
"selectOrganization": "Sélectionner une organisation",
"loginRequired": {
"title": "Connexion requise",
"description": "Vous devez être connecté pour lier des projets.",
"action": "Connexion"
},
"linkModeLabel": "Mode de liaison",
"linkToExisting": "Lier à un existant",
"createNew": "Créer un nouveau",
"remoteProjectLabel": "Projet distant",
"loadingRemoteProjects": "Chargement des projets distants...",
"noRemoteProjects": "Aucun projet distant trouvé dans cette organisation. Essayez d'en créer un nouveau à la place.",
"selectRemoteProject": "Sélectionner un projet distant",
"newProjectNameLabel": "Nom du nouveau projet distant",
"newProjectNamePlaceholder": "Saisir le nom du projet",
"linking": "Liaison en cours...",
"linkButton": "Lier le projet",
"errors": {
"selectOrganization": "Veuillez sélectionner une organisation",
"selectRemoteProject": "Veuillez sélectionner un projet distant",
"enterProjectName": "Veuillez saisir un nom de projet",
"linkFailed": "Échec de la liaison du projet"
}
},
"unlinkFromOrganization": "Délier du projet distant",
"projectNotFound": "Le projet que vous recherchez n'existe pas ou a été supprimé.",
"viewProject": "Voir le projet",
"openInIDE": "Ouvrir dans l'IDE",
"createdDate": "Créé le {{date}}"
}

View File

@@ -0,0 +1,448 @@
{
"settings": {
"layout": {
"nav": {
"title": "Paramètres",
"general": "Général",
"generalDesc": "Thème, notifications et préférences",
"projects": "Projets",
"projectsDesc": "Dépôts de projet et configuration",
"repos": "Dépôts",
"reposDesc": "Scripts et configuration des dépôts",
"agents": "Agents",
"agentsDesc": "Configurations des agents de codage",
"mcp": "Serveurs MCP",
"mcpDesc": "Serveurs Model Context Protocol",
"organizations": "Paramètres de l'organisation",
"organizationsDesc": "Gérer les membres et les permissions de l'organisation"
}
},
"general": {
"loading": "Chargement des paramètres...",
"loadError": "Échec du chargement de la configuration.",
"save": {
"button": "Enregistrer les paramètres",
"success": "✓ Paramètres enregistrés avec succès !",
"error": "Échec de l'enregistrement de la configuration",
"unsavedChanges": "• Vous avez des modifications non enregistrées",
"discard": "Abandonner"
},
"appearance": {
"title": "Apparence",
"description": "Personnalisez l'apparence de l'application.",
"theme": {
"label": "Thème",
"placeholder": "Sélectionner un thème",
"helper": "Choisissez votre palette de couleurs préférée."
},
"language": {
"label": "Langue",
"placeholder": "Sélectionner une langue",
"helper": "Choisissez votre langue préférée. Par défaut du navigateur suit la langue de votre système."
}
},
"taskExecution": {
"title": "Agent de codage par défaut",
"description": "Choisissez l'agent de codage par défaut pour les tâches.",
"executor": {
"label": "Configuration d'agent par défaut",
"placeholder": "Sélectionner un profil",
"helper": "Choisissez la configuration d'agent par défaut à utiliser lors de la création d'une tentative de tâche."
},
"variant": "PAR DÉFAUT",
"defaultLabel": "Par défaut"
},
"editor": {
"title": "Éditeur",
"description": "Configurez votre expérience d'édition de code.",
"type": {
"label": "Type d'éditeur",
"placeholder": "Sélectionner un éditeur",
"helper": "Choisissez votre interface d'éditeur de code préférée."
},
"customCommand": {
"label": "Commande d'éditeur personnalisée",
"placeholder": "ex: code, subl, vim",
"helper": "Saisissez la commande pour lancer votre éditeur personnalisé. Elle sera utilisée pour ouvrir les fichiers."
},
"remoteSsh": {
"host": {
"label": "Hôte SSH distant (optionnel)",
"placeholder": "ex: nom d'hôte ou adresse IP",
"helper": "Définissez ceci si Vibe Kanban fonctionne sur un serveur distant. Lorsque défini, cliquer sur \"Ouvrir dans l'éditeur\" générera une URL pour ouvrir votre éditeur via SSH au lieu de lancer une commande locale."
},
"user": {
"label": "Utilisateur SSH distant (optionnel)",
"placeholder": "ex: nom d'utilisateur",
"helper": "Nom d'utilisateur SSH pour la connexion distante. S'il n'est pas défini, VS Code utilisera votre config SSH ou vous demandera."
}
},
"availability": {
"checking": "Vérification de la disponibilité...",
"available": "Disponible",
"notFound": "Non trouvé dans le PATH"
}
},
"github": {
"title": "Intégration GitHub",
"cliSetup": {
"title": "Configuration de GitHub CLI",
"description": "L'authentification GitHub CLI est requise pour créer des pull requests et interagir avec les dépôts GitHub.",
"setupWillTitle": "Cette configuration va :",
"steps": {
"checkInstalled": "Vérifier si GitHub CLI (gh) est installé",
"installHomebrew": "L'installer via Homebrew si nécessaire (macOS)",
"authenticate": "S'authentifier avec GitHub en utilisant OAuth"
},
"setupNote": "La configuration s'exécutera dans la fenêtre de chat. Vous devrez compléter l'authentification dans votre navigateur.",
"runSetup": "Lancer la configuration",
"running": "Exécution en cours...",
"errors": {
"brewMissing": "Homebrew n'est pas installé. Installez-le pour activer la configuration automatique.",
"notSupported": "La configuration automatique n'est pas prise en charge sur cette plateforme. Installez GitHub CLI manuellement.",
"setupFailed": "Échec de l'exécution de la configuration GitHub CLI."
},
"help": {
"homebrew": {
"description": "L'installation automatique nécessite Homebrew. Installez Homebrew depuis",
"brewSh": "brew.sh",
"manualInstall": "puis relancez la configuration. Alternativement, installez GitHub CLI manuellement avec :",
"afterInstall": "Après l'installation, authentifiez-vous avec :"
},
"manual": {
"description": "Installez GitHub CLI depuis la",
"officialDocs": "documentation officielle",
"andAuthenticate": "puis authentifiez-vous avec votre compte GitHub."
}
}
}
},
"git": {
"title": "Git",
"description": "Configurez les préférences de nommage des branches git",
"branchPrefix": {
"label": "Préfixe de branche",
"placeholder": "vk",
"helper": "Préfixe pour les noms de branches auto-générés. Laissez vide pour aucun préfixe.",
"preview": "Aperçu :",
"previewWithPrefix": "{{prefix}}/1a2b-nom-tache",
"previewNoPrefix": "1a2b-nom-tache",
"errors": {
"slash": "Le préfixe ne peut pas contenir '/'.",
"startsWithDot": "Le préfixe ne peut pas commencer par '.'.",
"endsWithDot": "Le préfixe ne peut pas se terminer par '.' ou '.lock'.",
"invalidSequence": "Contient une séquence invalide (.., @{).",
"invalidChars": "Contient des caractères invalides.",
"controlChars": "Contient des caractères de contrôle."
}
}
},
"pullRequests": {
"title": "Pull Requests",
"description": "Configurez le comportement de création des PR",
"autoDescription": {
"label": "Générer automatiquement la description de la PR par défaut",
"helper": "Lorsque activé, l'agent IA mettra automatiquement à jour le titre et la description de la PR après sa création."
},
"customPrompt": {
"useCustom": "Utiliser un prompt personnalisé",
"helper": "Prompt personnalisé pour l'agent IA lors de la génération des descriptions de PR. Utilisez {pr_number} et {pr_url} comme variables."
}
},
"notifications": {
"title": "Notifications",
"description": "Contrôlez quand et comment vous recevez des notifications.",
"sound": {
"label": "Notifications sonores",
"helper": "Jouer un son lorsque les tentatives de tâches sont terminées.",
"fileLabel": "Son",
"filePlaceholder": "Sélectionner un son",
"fileHelper": "Choisissez le son à jouer lorsque les tâches sont terminées. Cliquez sur le bouton volume pour prévisualiser."
},
"push": {
"label": "Notifications push",
"helper": "Afficher les notifications système lorsque les tentatives de tâches sont terminées."
}
},
"privacy": {
"title": "Confidentialité",
"description": "Aidez à améliorer Vibe-Kanban en partageant des données d'utilisation anonymes.",
"telemetry": {
"label": "Activer la télémétrie",
"helper": "Active le suivi anonyme des événements d'utilisation pour aider à améliorer l'application. Aucun prompt ou information de projet n'est collecté."
}
},
"taskTemplates": {
"title": "Tags",
"description": "Créez des extraits de texte réutilisables pouvant être insérés dans les descriptions de tâches en utilisant @nom_du_tag."
},
"tags": {
"manager": {
"title": "Tags de tâches",
"addTag": "Ajouter un tag",
"noTags": "Aucun tag pour le moment. Créez des extraits de texte réutilisables pour les descriptions de tâches courantes. Utilisez @nom_du_tag dans n'importe quelle tâche.",
"table": {
"tagName": "Nom du tag",
"content": "Contenu",
"actions": "Actions"
},
"actions": {
"editTag": "Modifier le tag",
"deleteTag": "Supprimer le tag"
},
"deleteConfirm": "Êtes-vous sûr de vouloir supprimer le tag \"{{tagName}}\" ?"
},
"dialog": {
"createTitle": "Créer un tag",
"editTitle": "Modifier le tag",
"tagName": {
"label": "Nom du tag",
"required": "*",
"hint": "Utilisez ce nom avec @ dans les descriptions de tâches : @{{tagName}}",
"placeholder": "ex: correction_bug, plan_test, docs_api",
"error": "Le nom du tag ne peut pas contenir d'espaces. Utilisez des underscores à la place (ex: mon_tag)"
},
"content": {
"label": "Contenu",
"required": "*",
"hint": "Texte qui sera inséré lorsque vous utilisez @{{tagName}} dans les descriptions de tâches",
"placeholder": "Saisissez le texte qui sera inséré lorsque vous utiliserez ce tag"
},
"errors": {
"nameRequired": "Le nom du tag est requis",
"saveFailed": "Échec de l'enregistrement du tag"
},
"buttons": {
"cancel": "Annuler",
"create": "Créer",
"update": "Mettre à jour"
}
}
},
"safety": {
"title": "Sécurité et avertissements",
"description": "Réinitialisez les accusés de réception des avertissements de sécurité et de l'intégration.",
"disclaimer": {
"title": "Accusé de réception de l'avertissement",
"description": "Réinitialiser l'avertissement de sécurité.",
"button": "Réinitialiser"
},
"onboarding": {
"title": "Intégration",
"description": "Réinitialiser le flux d'intégration.",
"button": "Réinitialiser"
}
},
"beta": {
"title": "Fonctionnalités bêta",
"description": "Essayez les fonctionnalités expérimentales avant leur sortie.",
"workspaces": {
"label": "Activer la bêta des espaces de travail",
"helper": "Utiliser la nouvelle interface des espaces de travail lors de la visualisation des tentatives de tâches. Les tâches s'ouvriront d'abord en vue tâche, et les tentatives s'ouvriront dans la nouvelle vue des espaces de travail."
},
"commitReminder": {
"label": "Rappel de commit",
"helper": "Demander aux agents compatibles de commiter les modifications avant de s'arrêter."
}
}
},
"agents": {
"title": "Configurations des agents de codage",
"description": "Personnalisez le comportement des agents de codage avec différentes configurations.",
"loading": "Chargement des configurations d'agents...",
"save": {
"button": "Enregistrer les configurations d'agents",
"success": "✓ Configurations d'exécuteurs enregistrées avec succès !"
},
"availability": {
"checking": "Vérification...",
"loginDetected": "Utilisation récente détectée",
"loginDetectedTooltip": "Identifiants d'authentification récents trouvés pour cet agent",
"installationFound": "Utilisation précédente détectée",
"installationFoundTooltip": "Configuration d'agent trouvée. Vous devrez peut-être vous connecter pour l'utiliser.",
"notFound": "Inconnu",
"notFoundTooltip": "Nous n'avons pas pu vérifier que cet agent est configuré, mais vous pouvez essayer."
},
"editor": {
"formLabel": "Modifier le JSON",
"agentLabel": "Agent",
"agentPlaceholder": "Sélectionner le type d'exécuteur",
"configLabel": "Configuration",
"configPlaceholder": "Sélectionner une configuration",
"createNew": "Créer une nouvelle...",
"deleteTitle": "Impossible de supprimer la dernière configuration",
"deleteButton": "Supprimer {{name}}",
"deleteText": "Supprimer",
"jsonLabel": "Configuration de l'agent (JSON)",
"jsonPlaceholder": "Chargement des profils...",
"jsonLoading": "Chargement...",
"pathLabel": "Emplacement du fichier de configuration :"
},
"errors": {
"deleteFailed": "Échec de la suppression de la configuration. Veuillez réessayer.",
"saveFailed": "Échec de l'enregistrement des configurations d'agents. Veuillez réessayer.",
"saveConfigFailed": "Échec de l'enregistrement de la configuration. Veuillez réessayer."
}
},
"mcp": {
"title": "Configuration des serveurs MCP",
"description": "Configurez les serveurs Model Context Protocol pour étendre les capacités des agents de codage avec des outils et ressources personnalisés.",
"loading": "Chargement de la configuration MCP...",
"applying": "Application de la configuration...",
"labels": {
"agent": "Agent",
"agentPlaceholder": "Sélectionner un exécuteur",
"agentHelper": "Choisissez pour quel agent configurer les serveurs MCP.",
"serverConfig": "Configuration du serveur (JSON)",
"popularServers": "Serveurs populaires",
"serverHelper": "Cliquez sur une carte pour insérer ce serveur MCP dans le JSON ci-dessus.",
"saveLocation": "Les modifications seront enregistrées dans :"
},
"loadingStates": {
"jsonEditor": "Chargement...",
"configuration": "Chargement de la configuration actuelle des serveurs MCP..."
},
"errors": {
"loadFailed": "Échec du chargement de la configuration.",
"invalidJson": "Format JSON invalide",
"validationError": "Erreur de validation",
"saveFailed": "Échec de l'enregistrement des serveurs MCP",
"applyFailed": "Échec de l'application de la configuration des serveurs MCP",
"addServerFailed": "Échec de l'ajout du serveur préconfiguré",
"mcpError": "Erreur de configuration MCP : {{error}}",
"notSupported": "MCP non pris en charge",
"supportMessage": "Pour utiliser les serveurs MCP, veuillez sélectionner un exécuteur différent prenant en charge MCP (Claude, Amp, Gemini, Codex ou Opencode) ci-dessus."
},
"save": {
"button": "Enregistrer la configuration MCP",
"success": "Paramètres enregistrés !",
"successMessage": "✓ Configuration MCP enregistrée avec succès !",
"loading": "Chargement de la configuration actuelle des serveurs MCP..."
}
},
"projects": {
"title": "Configuration du projet",
"description": "Configurez les scripts et paramètres spécifiques au projet.",
"loading": "Chargement des projets...",
"loadError": "Échec du chargement des projets.",
"selector": {
"label": "Sélectionner un projet",
"placeholder": "Choisir un projet à configurer",
"helper": "Sélectionnez un projet pour voir et modifier sa configuration.",
"noProjects": "Aucun projet disponible"
},
"general": {
"title": "Paramètres généraux",
"description": "Configurez les informations de base du projet.",
"name": {
"label": "Nom du projet",
"placeholder": "Saisir le nom du projet",
"helper": "Un nom d'affichage pour ce projet."
},
"repoPath": {
"label": "Chemin du dépôt Git",
"placeholder": "/chemin/vers/votre/depot/existant",
"helper": "Le chemin absolu vers votre dépôt git sur le disque."
}
},
"save": {
"button": "Enregistrer les paramètres du projet",
"success": "✓ Paramètres du projet enregistrés avec succès !",
"error": "Échec de l'enregistrement des paramètres du projet",
"unsavedChanges": "• Vous avez des modifications non enregistrées",
"discard": "Abandonner",
"confirmSwitch": "Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir changer de projet ? Vos modifications seront perdues."
}
},
"repos": {
"title": "Configuration du dépôt",
"description": "Configurez les scripts qui s'exécutent lorsque ce dépôt est utilisé dans les espaces de travail.",
"loading": "Chargement des dépôts...",
"loadError": "Échec du chargement des dépôts.",
"selector": {
"label": "Sélectionner un dépôt",
"placeholder": "Choisir un dépôt à configurer",
"helper": "Sélectionnez un dépôt pour voir et modifier sa configuration.",
"noRepos": "Aucun dépôt disponible"
},
"general": {
"title": "Paramètres généraux",
"description": "Configurez les informations de base du dépôt.",
"displayName": {
"label": "Nom d'affichage",
"placeholder": "Saisir le nom d'affichage",
"helper": "Un nom convivial pour ce dépôt."
},
"path": {
"label": "Chemin du dépôt"
}
},
"scripts": {
"title": "Scripts et configuration",
"description": "Configurez le serveur de développement, la configuration, le nettoyage et les fichiers à copier pour ce dépôt. Ces scripts s'exécutent chaque fois que le dépôt est utilisé dans un espace de travail.",
"setup": {
"label": "Script de configuration",
"helper": "Ce script s'exécute depuis le worktree après sa création et avant le démarrage de l'agent de codage. Utilisez-le pour les tâches de configuration comme l'installation des dépendances ou la préparation de l'environnement.",
"parallelLabel": "Exécuter le script de configuration en parallèle avec l'agent de codage",
"parallelHelper": "Lorsque activé, le script de configuration s'exécute simultanément avec l'agent de codage au lieu d'attendre la fin de la configuration."
},
"cleanup": {
"label": "Script de nettoyage",
"helper": "Ce script s'exécute depuis le worktree après l'exécution de l'agent de codage, uniquement si des modifications ont été effectuées. Utilisez-le pour les tâches d'assurance qualité comme l'exécution de linters, formateurs, tests ou autres étapes de validation."
},
"copyFiles": {
"label": "Copier les fichiers",
"helper": "Liste de fichiers séparés par des virgules à copier depuis le répertoire du dépôt original vers le worktree. Utile pour les fichiers d'environnement comme .env. Assurez-vous qu'ils sont dans le gitignore !",
"placeholder": "Chemins de fichiers ou patterns glob (ex: .env, config/*.json)"
},
"devServer": {
"label": "Script du serveur de développement",
"helper": "Démarre un serveur de développement pour ce dépôt. Les scripts s'exécutent depuis le répertoire du worktree du dépôt."
}
},
"save": {
"button": "Enregistrer les paramètres du dépôt",
"success": "Paramètres du dépôt enregistrés avec succès !",
"error": "Échec de l'enregistrement des paramètres du dépôt",
"unsavedChanges": "Vous avez des modifications non enregistrées",
"discard": "Abandonner",
"confirmSwitch": "Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir changer de dépôt ? Vos modifications seront perdues."
}
}
},
"integrations": {
"github": {
"cliSetup": {
"title": "Configuration de GitHub CLI",
"description": "L'authentification GitHub CLI est requise pour créer des pull requests et interagir avec les dépôts GitHub.",
"setupWillTitle": "Cette configuration va :",
"steps": {
"checkInstalled": "Vérifier si GitHub CLI (gh) est installé",
"installHomebrew": "L'installer via Homebrew si nécessaire (macOS)",
"authenticate": "S'authentifier avec GitHub en utilisant OAuth"
},
"setupNote": "La configuration s'exécutera dans la fenêtre de chat. Vous devrez compléter l'authentification dans votre navigateur.",
"runSetup": "Lancer la configuration",
"running": "Exécution en cours...",
"errors": {
"brewMissing": "Homebrew n'est pas installé. Installez-le pour activer la configuration automatique.",
"notSupported": "La configuration automatique n'est pas prise en charge sur cette plateforme. Installez GitHub CLI manuellement.",
"setupFailed": "Échec de l'exécution de la configuration GitHub CLI."
},
"help": {
"homebrew": {
"description": "L'installation automatique nécessite Homebrew. Installez Homebrew depuis",
"brewSh": "brew.sh",
"manualInstall": "puis relancez la configuration. Alternativement, installez GitHub CLI manuellement avec :",
"afterInstall": "Après l'installation, authentifiez-vous avec :"
},
"manual": {
"description": "Installez GitHub CLI depuis la",
"officialDocs": "documentation officielle",
"andAuthenticate": "puis authentifiez-vous avec votre compte GitHub."
}
}
}
}
}
}

View File

@@ -0,0 +1,721 @@
{
"gitPanel": {
"create": {
"warnings": {
"noReposSelected": "Veuillez sélectionner au moins un dépôt pour commencer"
}
},
"advanced": {
"workingBranch": "Branche de travail",
"placeholder": "ex: Acme Corp"
}
},
"loading": "Chargement des tâches...",
"empty": {
"noTasks": "Aucune tâche trouvée pour ce projet.",
"createFirst": "Créer la première tâche",
"noSearchResults": "Aucune tâche ne correspond à votre recherche."
},
"actions": {
"addTask": "Ajouter une tâche"
},
"filters": {
"sharedToggleAria": "Basculer les tâches partagées",
"sharedToggleTooltip": "Afficher/masquer le contenu partagé"
},
"rebase": {
"common": {
"action": "Rebaser",
"inProgress": "Rebasage en cours...",
"withTarget": "Rebaser sur {{branch}}"
},
"dialog": {
"title": "Rebaser la tentative de tâche",
"description": "Choisissez une nouvelle branche de base pour rebaser cette tentative de tâche.",
"upstreamLabel": "Branche amont",
"upstreamPlaceholder": "Sélectionner une branche amont",
"targetLabel": "Branche cible",
"targetPlaceholder": "Sélectionner une branche cible",
"advanced": "Avancé"
},
"status": {
"inProgress": "Rebasage en cours{{counts}}",
"needed": "Rebasage nécessaire{{dirty}}{{counts}}",
"dirtyMarker": " (modifié)"
}
},
"branches": {
"changeTarget": {
"dialog": {
"title": "Changer la branche cible",
"description": "Choisissez une nouvelle branche cible pour la tentative de tâche.",
"placeholder": "Sélectionner une branche cible",
"action": "Changer de branche",
"inProgress": "Changement en cours..."
}
}
},
"repos": {
"changeRepo": {
"dialog": {
"title": "Changer de dépôt",
"description": "Choisissez un dépôt pour les opérations git.",
"label": "Dépôt",
"placeholder": "Sélectionner un dépôt",
"action": "Changer de dépôt"
}
},
"selector": {
"placeholder": "Sélectionner un dépôt",
"empty": "Aucun dépôt disponible"
}
},
"preview": {
"title": "Aperçu",
"selectAttempt": "Sélectionnez une tentative pour voir l'aperçu",
"troubleAlert": {
"title": "Nous avons des difficultés à prévisualiser votre application :",
"item1": "Le serveur de développement a-t-il démarré correctement ? Il peut y avoir un bug à résoudre, ou peut-être que les dépendances doivent être installées.",
"item2": "Votre serveur de développement a-t-il affiché l'URL et le port dans le terminal au format",
"item2Suffix": " ? (c'est ainsi que nous savons qu'il fonctionne)",
"item3": "Avez-vous installé le Web Companion (requis pour le clic-pour-éditer) ? Sinon, veuillez",
"item3Link": "suivre les instructions d'installation ici",
"fixScript": "Corriger le script de développement"
},
"noServer": {
"title": "Aucun serveur de développement en cours d'exécution",
"startPrompt": "Veuillez démarrer un serveur de développement pour voir l'aperçu",
"setupTitle": "Vous devez configurer un script de serveur de développement pour utiliser la fonction d'aperçu",
"setupPrompt": "Pour utiliser l'aperçu en direct et le clic-pour-éditer, veuillez ajouter un script de serveur de développement à ce projet.",
"companionPrompt": "Pour la fonctionnalité clic-pour-éditer, ajoutez le browser companion à votre projet.",
"companionLink": "Voir le guide d'installation",
"startButton": "Démarrer le serveur de développement",
"configureButton": "Configurer",
"stopAndEditButton": "Arrêter le serveur de développement et résoudre les problèmes",
"fixScript": "Corriger le script de développement",
"editDevScript": "Modifier le script du serveur de développement",
"learnMore": "En savoir plus sur le test des applications"
},
"devScript": {
"saveAndStart": "Enregistrer et démarrer",
"saveOnly": "Enregistrer uniquement",
"saveChanges": "Enregistrer les modifications",
"cancel": "Annuler",
"errors": {
"notLoaded": "Projet non chargé",
"empty": "Le script de développement ne peut pas être vide"
}
},
"logs": {
"title": "Logs du serveur de développement",
"hide": "Masquer",
"show": "Afficher",
"label": "Logs",
"viewFull": "Voir tous les logs"
},
"noDevScript": "Aucun script de développement configuré",
"noDevScriptHint": "Configurez un script de développement dans les paramètres du projet pour utiliser l'aperçu",
"iframe": {
"title": "Aperçu du serveur de développement"
},
"toolbar": {
"refresh": "Actualiser l'aperçu",
"copyUrl": "Copier l'URL",
"openInTab": "Ouvrir dans un nouvel onglet",
"stopDevServer": "Arrêter le serveur de développement",
"clickToEdit": "Cliquer pour modifier l'URL",
"resetUrl": "Réinitialiser à l'URL détectée",
"clearUrlOverride": "Effacer le remplacement d'URL",
"desktopView": "Vue bureau",
"mobileView": "Vue mobile (390x844)",
"responsiveView": "Vue responsive (redimensionnable)",
"startDevServer": "Démarrer le serveur de développement"
},
"loading": {
"startingServer": "Démarrage du serveur de développement...",
"waitingForServer": "En attente du serveur..."
},
"browser": {
"title": "Aperçu du serveur de développement",
"devServerFallback": "Serveur de développement"
},
"urlInput": {
"placeholder": "Saisir l'URL..."
}
},
"diff": {
"viewModes": {
"inline": "Vue en ligne",
"split": "Vue divisée"
},
"ignoreWhitespace": "Ignorer les changements d'espaces",
"errorLoadingDiff": "Échec du chargement du diff : {{error}}",
"expandAll": "Développer tous les diffs",
"collapseAll": "Réduire tous les diffs",
"filesChanged_one": "{{count}} fichier modifié",
"filesChanged_other": "{{count}} fichiers modifiés",
"noChanges": "Aucune modification n'a encore été effectuée"
},
"taskPanel": {
"noTaskSelected": "Aucune tâche sélectionnée",
"loadingAttempts": "Chargement des tentatives...",
"errorLoadingAttempts": "Échec du chargement des tentatives",
"attemptsCount": "Tentatives ({{count}})",
"noAttempts": "Aucune tentative pour le moment"
},
"processes": {
"noLogsAvailable": "Aucun log disponible",
"selectAttempt": "Sélectionnez une tentative pour voir les processus d'exécution.",
"errorLoadingUpdates": "Échec du chargement des mises à jour en direct pour les processus.",
"reconnecting": "Reconnexion...",
"loading": "Chargement des processus d'exécution...",
"noProcesses": "Aucun processus d'exécution trouvé pour cette tentative.",
"processId": "ID du processus : {{id}}",
"deleted": "Supprimé",
"deletedTooltip": "Supprimé par restauration : la timeline a été restaurée à un point de contrôle et les exécutions ultérieures ont été supprimées",
"agent": "Agent :",
"exit": "Sortie : {{code}}",
"started": "Démarré : {{date}}",
"completed": "Terminé : {{date}}",
"detailsTitle": "Détails du processus",
"backToList": "Retour à la liste",
"loadingDetails": "Chargement des détails du processus...",
"errorLoadingDetails": "Échec du chargement des détails du processus. Veuillez réessayer.",
"copyLogs": "Copier les logs",
"logsCopied": "Copié !"
},
"taskHeader": {
"editTask": "Modifier la tâche",
"deleteTask": "Supprimer la tâche",
"closePanel": "Fermer le panneau"
},
"navigateToParent": "Naviguer vers la tentative de tâche parente",
"toolbar": {
"actions": "Actions",
"noAttempts": "Aucune tentative pour le moment",
"startFirstAttempt": "Démarrez votre première tentative pour commencer à travailler sur cette tâche",
"startAttempt": "Démarrer une tentative"
},
"followUp": {
"stop": "Arrêter",
"clearReviewComments": "Effacer les commentaires de révision",
"resolveConflicts": "Résoudre les conflits",
"send": "Envoyer",
"unqueuing": "Retrait de la file...",
"edit": "Modifier",
"queuing": "Mise en file...",
"queueForNextTurn": "Mettre en file pour le prochain tour",
"queue": "File d'attente",
"cancelQueue": "Annuler la file",
"queuedMessage": "Message en file d'attente - s'exécutera lorsque l'exécution actuelle sera terminée",
"runSetupScript": "Exécuter le script de configuration",
"runCleanupScript": "Exécuter le script de nettoyage",
"noSetupScript": "Aucun script de configuration configuré pour ce projet",
"noCleanupScript": "Aucun script de nettoyage configuré pour ce projet",
"scriptsDisabledWhileRunning": "Impossible d'exécuter les scripts pendant qu'un processus est en cours"
},
"todos": {
"title_one": "À faire ({{count}})",
"title_other": "À faire ({{count}})"
},
"projects": {
"create": {
"dialog": {
"title": "Créer un projet",
"description": "Saisissez un nom pour votre nouveau projet."
},
"form": {
"nameLabel": "Nom",
"namePlaceholder": "Mon projet"
},
"errors": {
"createFailed": "Échec de la création du projet"
}
}
},
"conversation": {
"executors": "Exécuteurs",
"saveAsDefault": "Enregistrer par défaut",
"you": "Vous",
"thinking": "Réflexion",
"todo": "À faire",
"todos": "À faire",
"completed": "terminé",
"incomplete": "incomplet",
"pending": "en attente",
"inProgress": "en cours",
"skipped": "ignoré",
"error": "Erreur",
"retry": "Réessayer",
"showMore": "Afficher plus",
"showLess": "Afficher moins",
"actions": {
"cancel": "Annuler",
"submitFeedback": "Soumettre le feedback",
"stop": "Arrêter",
"stopping": "Arrêt en cours",
"loading": "Chargement",
"send": "Envoyer",
"sending": "Envoi en cours",
"queue": "File d'attente",
"cancelQueue": "Annuler la file",
"requestChanges": "Demander des modifications",
"approve": "Approuver",
"clearReviewComments": "Effacer les commentaires de révision",
"edit": "Modifier le message"
},
"approval": {
"conflictWarning": "Les fichiers en conflit nécessitent une résolution manuelle",
"conflicts_one": "{{count}} conflit",
"conflicts_other": "{{count}} conflits"
},
"sessions": {
"newSession": "Nouvelle session",
"latest": "Plus récent",
"previous": "Précédent",
"label": "Sessions",
"noPreviousSessions": "Aucune session précédente"
},
"reviewComments": {
"count_one": "{{count}} commentaire de révision sera inclus",
"count_other": "{{count}} commentaires de révision seront inclus"
},
"workspace": {
"create": "Créer",
"creating": "Création en cours..."
},
"fileEntry": {
"created": "Créé",
"modified": "Modifié",
"deleted": "Supprimé",
"renamed": "Renommé"
},
"script": {
"running": "Exécution en cours...",
"exitCode": "Code de sortie : {{code}}",
"completedSuccessfully": "Terminé avec succès",
"clickToViewLogs": "Cliquer pour voir les logs"
},
"updatedTodos": "À faire mis à jour",
"viewInChangesPanel": "Voir dans le panneau des modifications",
"unableToRenderDiff": "Impossible d'afficher le diff."
},
"attempt": {
"actions": {
"openInIde": "Ouvrir dans l'IDE",
"openMenu": "Ouvrir le menu",
"startDevServer": "Démarrer le serveur de développement",
"stopDevServer": "Arrêter le serveur de développement"
},
"labels": {
"attempt": "Tentative",
"agent": "Agent",
"branch": "Branche",
"diffs": "Diffs",
"summaryAndActions": "Résumé et actions"
},
"agent": "Agent",
"path": "Chemin",
"openInEditor": "Voir les modifications dans {{editor}}",
"copied": "Copié !",
"clickToCopy": "Copier le chemin du worktree",
"stopDev": "Arrêter le développement",
"pauseDev": "Mettre en pause",
"startDev": "Démarrer le développement",
"viewDevLogs": "Voir les logs du serveur de développement",
"stopping": "Arrêt en cours...",
"stopAttempt": "Arrêter la tentative",
"newAttempt": "Nouvelle tentative",
"viewHistory": "Voir l'historique des tentatives",
"createSubtask": "Créer une sous-tâche",
"preview": "Aperçu",
"diffs": "Diffs",
"gitActions": "Actions Git",
"tryAgain": "Réessayer",
"runSetup": "Exécuter la configuration",
"setupHelpText": "{{agent}} n'est pas configuré correctement. Cliquez sur 'Exécuter la configuration' pour l'installer et vous connecter.",
"devScriptMissingTooltip": "Pour démarrer le serveur de développement, ajoutez un script de développement à ce projet"
},
"git": {
"labels": {
"taskBranch": "Branche de la tâche"
},
"branch": {
"current": "actuelle"
},
"forcePushDialog": {
"title": "Push forcé requis",
"description": "La branche distante{{branchLabel}} a divergé de votre branche locale. Un push normal a été rejeté.",
"warning": "Le push forcé écrasera les modifications distantes avec vos modifications locales. Cette action ne peut pas être annulée.",
"note": "Procédez uniquement si vous êtes certain de vouloir remplacer l'historique de la branche distante.",
"error": "Échec du push forcé"
},
"status": {
"commits_one": "commit",
"commits_other": "commits",
"conflicts": "Conflits",
"upToDate": "À jour",
"ahead": "en avance",
"behind": "en retard"
},
"states": {
"merged": "Fusionné !",
"merging": "Fusion en cours...",
"merge": "Fusionner",
"rebasing": "Rebasage en cours...",
"rebase": "Rebaser",
"pushed": "Poussé !",
"pushing": "Push en cours...",
"push": "Push",
"pushFailed": "Échec",
"forcePush": "Push forcé",
"forcePushing": "Push forcé en cours...",
"creating": "Création en cours...",
"createPr": "Créer une PR"
},
"errors": {
"changeTargetBranch": "Échec du changement de branche cible",
"pushChanges": "Échec du push des modifications",
"mergeChanges": "Échec de la fusion des modifications",
"rebaseBranch": "Échec du rebasage de la branche",
"branchStatusUnavailable": "Impossible de récupérer le statut de la branche. Vous pouvez toujours changer la branche cible."
},
"pr": {
"open": "Ouvrir la PR #{{number}}",
"number": "PR #{{number}}",
"merged": "PR #{{prNumber}} fusionnée"
},
"actions": {
"title": "Actions Git",
"changeTarget": "Changer la cible",
"prMerged": "La PR #{{number}} est déjà fusionnée",
"loginRequired": {
"title": "Connectez-vous pour gérer les actions git",
"description": "Connectez-vous à Vibe Kanban pour pouvoir pousser des branches, fusionner des modifications ou ouvrir des pull requests pour cette tâche.",
"action": "Se connecter"
}
},
"mergeDialog": {
"title": "Fusionner les modifications",
"description": "Cela fusionnera vos modifications dans la branche cible. Êtes-vous sûr de vouloir continuer ?"
},
"createRepo": {
"dialog": {
"title": "Créer un nouveau dépôt",
"description": "Initialiser un nouveau dépôt git"
},
"form": {
"nameLabel": "Nom",
"namePlaceholder": "mon-projet",
"locationLabel": "Emplacement",
"locationPlaceholder": "Répertoire actuel"
},
"browseDialog": {
"title": "Sélectionner le répertoire parent",
"description": "Choisissez où créer le nouveau dépôt"
},
"errors": {
"nameRequired": "Le nom du dépôt est requis",
"createFailed": "Échec de la création du dépôt"
},
"buttons": {
"createRepository": "Créer le dépôt"
},
"states": {
"creating": "Création en cours..."
}
}
},
"createAttemptDialog": {
"title": "Créer une tentative",
"description": "Démarrez une nouvelle tentative avec un agent de codage. Un worktree git et une branche de tâche seront créés.",
"baseBranch": "Branche de base",
"loadingBranches": "Chargement des branches...",
"selectBranch": "Sélectionner une branche",
"error": "Échec de la création de la tentative. Veuillez réessayer.",
"creating": "Création en cours...",
"start": "Démarrer"
},
"repoBranchSelector": {
"label": "Branche de base"
},
"attemptRepoSelector": {
"label": "Dépôts",
"addButton": "Ajouter",
"empty": "Aucun dépôt sélectionné. Ajoutez au moins un dépôt.",
"selectBranch": "Sélectionner une branche",
"addRepo": {
"title": "Sélectionner un dépôt Git",
"description": "Choisissez un dépôt git à ajouter à cette tentative"
}
},
"viewProcessesDialog": {
"title": "Processus d'exécution"
},
"viewRelatedTasksDialog": {
"title": "Tâches associées",
"empty": "Aucune tâche associée pour cette tentative",
"error": "Échec du chargement des tâches associées",
"tasksCount": "Tâches ({{count}})",
"columns": {
"title": "Titre",
"description": "Description",
"status": "Statut"
}
},
"attemptHeaderActions": {
"preview": "Aperçu",
"diffs": "Diffs",
"relatedTasks": "Tâches associées",
"tryNewUI": "essayer la nouvelle interface"
},
"actionsMenu": {
"attempt": "Tentative",
"openInIde": "Ouvrir la tentative dans l'IDE",
"viewProcesses": "Voir les processus",
"viewRelatedTasks": "Voir les tâches associées",
"createNewAttempt": "Créer une nouvelle tentative",
"createSubtask": "Créer une sous-tâche",
"gitActions": "Actions Git",
"editBranchName": "Modifier le nom de la branche",
"startReview": "Démarrer la révision",
"startingReview": "Démarrage de la révision...",
"task": "Tâche",
"share": "Partager",
"reassign": "Réassigner",
"stopShare": "Arrêter le partage",
"duplicate": "Dupliquer"
},
"editBranchName": {
"dialog": {
"title": "Modifier le nom de la branche",
"description": "Saisissez un nouveau nom pour la branche. Impossible de renommer s'il existe une PR ouverte.",
"branchNameLabel": "Nom de la branche",
"placeholder": "ex: feature/ma-branche",
"renaming": "Renommage en cours...",
"action": "Renommer la branche"
}
},
"startReviewDialog": {
"title": "Démarrer la révision",
"description": "Demandez à l'agent de codage de réviser vos modifications et de fournir des commentaires.",
"additionalInstructions": "Instructions supplémentaires (optionnel)",
"reviewComments": "Commentaires de révision ({{count}})",
"includeGitContext": "Inclure le contexte git",
"includeGitContextDescription": "Indique à l'agent comment voir toutes les modifications effectuées sur cette branche",
"newSession": "Nouvelle session"
},
"resolveConflicts": {
"dialog": {
"title": "Résoudre les conflits",
"description": "Des conflits ont été détectés. Choisissez comment vous voulez que l'agent les résolve.",
"sessionLabel": "Session",
"existingSession": "Continuer dans la session actuelle",
"newSession": "Démarrer une nouvelle session",
"resolve": "Résoudre les conflits",
"resolving": "Démarrage...",
"filesWithConflicts_one": "{{count}} fichier a des conflits",
"filesWithConflicts_other": "{{count}} fichiers ont des conflits",
"andMore": "...et {{count}} autres"
}
},
"stopShareDialog": {
"title": "Arrêter le partage de la tâche",
"description": "Arrêter le partage de \"{{title}}\" avec votre organisation ?",
"warning": "Arrête le partage de la tâche avec votre organisation, mais conserve votre tâche locale.",
"confirm": "Arrêter le partage de la tâche",
"inProgress": "Arrêt du partage...",
"genericError": "Échec de l'arrêt du partage de la tâche. Veuillez réessayer."
},
"shareDialog": {
"title": "Partager la tâche",
"description": "Partager \"{{title}}\" avec votre organisation ?",
"success": "Tâche partagée avec succès.",
"genericError": "Échec du partage de la tâche. Veuillez réessayer.",
"loadingSystem": "Chargement du statut du compte...",
"loginRequired": {
"title": "Connexion requise",
"description": "Vous devez vous connecter avant de pouvoir partager des tâches. Nous vous redirigerons vers la page de connexion.",
"action": "Aller à la connexion"
},
"gitProviderRequired": {
"title": "Connecter le fournisseur Git",
"description": "Connectez votre compte de fournisseur Git pour partager des tâches. Ce projet doit avoir un dépôt distant.",
"action": "Connecter"
},
"linkProjectRequired": {
"description": "Liez ce projet à une organisation avant de partager des tâches.",
"action": "Lier le projet"
},
"confirmationTitle": "Confirmer le partage",
"confirmationBody": "Le partage publiera cette tâche dans votre espace de travail partagé.",
"cancel": "Annuler",
"confirm": "Partager la tâche",
"inProgress": "Partage en cours...",
"closeButton": "Fermer"
},
"createPrDialog": {
"title": "Créer une Pull Request",
"description": "Créer une pull request pour cette tentative de tâche.",
"titleLabel": "Titre",
"titlePlaceholder": "Saisir le titre de la PR",
"descriptionLabel": "Description (optionnel)",
"descriptionPlaceholder": "Saisir la description de la PR",
"baseBranchLabel": "Branche de base",
"loadingBranches": "Chargement des branches...",
"selectBaseBranch": "Sélectionner la branche de base",
"draftLabel": "Créer comme brouillon",
"autoGenerateLabel": "Générer automatiquement la description de la PR avec l'IA",
"creating": "Création en cours...",
"createButton": "Créer la PR",
"errors": {
"insufficientPermissions": "Permissions insuffisantes. Veuillez vous assurer que le CLI dispose des permissions nécessaires.",
"repoNotFoundOrNoAccess": "Dépôt non trouvé ou accès refusé. Veuillez vérifier votre accès au dépôt et vous assurer que vous êtes authentifié.",
"failedToCreate": "Échec de la création de la PR",
"gitCliNotLoggedIn": "Git n'est pas authentifié. Exécutez \"gh auth login\" (ou configurez les identifiants Git) et réessayez.",
"gitCliNotInstalled": "Git CLI n'est pas installé. Installez Git pour créer une PR.",
"targetBranchNotFound": "La branche cible '{{branch}}' n'existe pas sur le dépôt distant. Veuillez vous assurer que la branche existe avant de créer une pull request."
},
"loginRequired": {
"title": "Connectez-vous pour créer une pull request",
"description": "Vous devez vous connecter avant de pouvoir ouvrir une pull request pour cette tâche. Nous vous amènerons à la page de connexion.",
"action": "Se connecter"
}
},
"showcases": {
"taskPanel": {
"companion": {
"title": "Vibe Kanban Companion - Pointer et cliquer",
"description": "Cliquez sur n'importe quel composant d'interface dans la fenêtre d'aperçu pour le sélectionner précisément. L'agent de codage reçoit les sélecteurs DOM exacts et la hiérarchie des composants, éliminant les retours ambigus."
},
"installation": {
"title": "Installation du serveur de développement et du Companion",
"description": "Définissez une commande de serveur de développement pour les aperçus, avec un script de configuration paramétrable dans les options. Utilisez un agent de codage pour installer automatiquement le web companion Vibe Kanban."
},
"codeReview": {
"title": "Révision de code intégrée",
"description": "Ajoutez des commentaires spécifiques aux lignes directement dans la vue des diffs avec l'icône plus. Tous les retours sont collectés et envoyés comme une révision complète à l'agent de codage."
},
"pullRequest": {
"title": "Créer une PR depuis la tâche",
"description": "Fusionnez vos modifications ou créez des pull requests directement depuis les tentatives de tâches. La boîte de dialogue PR pré-remplit le titre et la description à partir des détails de votre tâche pour des workflows simplifiés."
},
"tags": {
"title": "Tags de prompts personnalisés",
"description": "Enregistrez des prompts personnalisés comme tags et intégrez-les dans de nouvelles tâches ou messages de suivi. Réutilisez les instructions courantes pour maintenir la cohérence de votre workflow."
}
},
"buttons": {
"previous": "Précédent",
"next": "Suivant",
"finish": "Terminer"
}
},
"prComments": {
"dialog": {
"title": "Sélectionner les commentaires de la PR",
"noComments": "Aucun commentaire trouvé sur cette PR",
"selectAll": "Tout sélectionner",
"deselectAll": "Tout désélectionner",
"add": "Ajouter",
"selectedCount": "{{selected}} sur {{total}} sélectionnés"
},
"card": {
"review": "Révision",
"tooltip": "Cliquer pour voir, double-cliquer pour modifier"
}
},
"taskFormDialog": {
"createTitle": "Créer une nouvelle tâche",
"editTitle": "Modifier la tâche",
"titlePlaceholder": "Titre de la tâche...",
"descriptionPlaceholder": "Ajouter plus de détails (optionnel). Tapez @ pour rechercher des fichiers.",
"statusLabel": "Statut",
"statusOptions": {
"todo": "À faire",
"inprogress": "En cours",
"inreview": "En révision",
"done": "Terminé",
"cancelled": "Annulé"
},
"startLabel": "Démarrer",
"attachImage": "Joindre une image",
"dropImagesHere": "Déposez les images ici",
"updating": "Mise à jour...",
"updateTask": "Mettre à jour la tâche",
"starting": "Démarrage...",
"creating": "Création...",
"create": "Créer",
"discardDialog": {
"title": "Abandonner les modifications non enregistrées ?",
"description": "Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir les abandonner ?",
"continueEditing": "Continuer la modification",
"discardChanges": "Abandonner les modifications"
}
},
"terminal": {
"selectWorkspace": "Sélectionnez un espace de travail pour ouvrir le terminal"
},
"restoreLogsDialog": {
"title": "Confirmer la nouvelle tentative",
"historyChange": {
"title": "Changement d'historique",
"willDelete": "Supprimera ce processus",
"andLaterProcesses_one": "et {{count}} processus ultérieur",
"andLaterProcesses_other": "et {{count}} processus ultérieurs",
"fromHistory": "de l'historique.",
"codingAgentRuns_one": "{{count}} exécution d'agent de codage",
"codingAgentRuns_other": "{{count}} exécutions d'agent de codage",
"scriptProcesses_one": "{{count}} processus de script",
"scriptProcesses_other": "{{count}} processus de scripts",
"setupCleanupBreakdown": "({{setup}} configuration, {{cleanup}} nettoyage)",
"permanentWarning": "Cela modifie définitivement l'historique et ne peut pas être annulé."
},
"uncommittedChanges": {
"title": "Modifications non commitées détectées",
"description_one": "Vous avez {{count}} modification non commitée",
"description_other": "Vous avez {{count}} modifications non commitées",
"andUntracked_one": " et {{count}} fichier non suivi",
"andUntracked_other": " et {{count}} fichiers non suivis",
"acknowledgeLabel": "Je comprends que ces modifications peuvent être affectées"
},
"resetWorktree": {
"title": "Réinitialiser le worktree",
"enabled": "Activé",
"disabled": "Désactivé",
"disabledUncommitted": "Désactivé (modifications non commitées détectées)",
"restoreDescription": "Votre worktree sera restauré à ce commit.",
"rollbackCommits_one": "Annuler {{count}} commit depuis le HEAD actuel.",
"rollbackCommits_other": "Annuler {{count}} commits depuis le HEAD actuel.",
"discardChanges_one": "Abandonner {{count}} modification non commitée.",
"discardChanges_other": "Abandonner {{count}} modifications non commitées.",
"untrackedPresent_one": "{{count}} fichier non suivi présent (non affecté par la réinitialisation).",
"untrackedPresent_other": "{{count}} fichiers non suivis présents (non affectés par la réinitialisation).",
"forceReset": "Forcer la réinitialisation (abandonner les modifications non commitées)",
"uncommittedWillDiscard": "Les modifications non commitées seront abandonnées.",
"uncommittedPresentHint": "Modifications non commitées présentes. Activez la réinitialisation forcée ou commitez/stashez pour continuer."
},
"buttons": {
"retry": "Réessayer"
}
},
"scriptFixer": {
"title": "Corriger le script",
"setupScriptTitle": "Corriger le script de configuration",
"cleanupScriptTitle": "Corriger le script de nettoyage",
"devServerTitle": "Corriger le script du serveur de développement",
"scriptLabel": "Script (modifier)",
"logsLabel": "Logs de la dernière exécution",
"saveButton": "Enregistrer",
"saveAndTestButton": "Enregistrer et tester",
"saving": "Enregistrement...",
"testing": "Test en cours...",
"noLogs": "Aucun log d'exécution disponible",
"selectRepo": "Dépôt",
"fixScript": "Corriger le script",
"statusRunning": "Exécution en cours...",
"statusSuccess": "Terminé avec succès",
"statusFailed": "Échec avec le code de sortie {{exitCode}}",
"statusKilled": "Le processus a été interrompu"
}
}