{
  "app": {
    "name": "TrainUs",
    "loading": "Chargement…"
  },
  "common": {
    "markdownHint": "Markdown basique supporté",
    "back": "Retour",
    "clearSearch": "Effacer la recherche"
  },
  "error": {
    "dbInitFailed": "Impossible d'initialiser la base de données",
    "browserNotCompatible": "Votre navigateur ne prend pas en charge les fonctionnalités de stockage requises. Veuillez vous assurer d'utiliser une version récente de votre navigateur et de ne pas être en navigation privée.",
    "dbNewerThanApp": "Vos données ont été créées par une version plus récente de l'application. Vos données n'ont pas été modifiées. Veuillez recharger la page pour obtenir la dernière version de l'application.",
    "dbMigrationFailed": "La mise à jour de la base de données a échoué et vos données n'ont pas été modifiées. Rechargez la page pour réessayer, ou restaurez la sauvegarde que vous venez de télécharger si le problème persiste.",
    "dbConnectionLost": "La connexion à la base de données a été perdue suite à une erreur inattendue. Rechargez la page pour vous reconnecter.",
    "reload": "Recharger"
  },
  "migration": {
    "title": "Mise à jour de la base de données requise",
    "body": "L'application a été mise à jour et votre base de données doit être migrée de la version {{from}} vers la version {{to}}.",
    "backupRequired": "Avant de mettre à jour, veuillez télécharger une sauvegarde de vos données. La mise à jour ne pourra démarrer qu'une fois la sauvegarde enregistrée.",
    "downloadBackup": "Télécharger la sauvegarde",
    "update": "Mettre à jour",
    "updating": "Mise à jour…"
  },
  "nav": {
    "mainNav": "Navigation principale",
    "home": "Accueil",
    "exercises": "Exercices",
    "combos": "Combos",
    "sessions": "Séances",
    "collections": "Collections",
    "stats": "Statistiques",
    "settings": "Réglages"
  },
  "home": {
    "title": "Accueil",
    "empty": "Aucune séance exécutée pour le moment. Lancez une séance pour voir votre activité ici !",
    "recentSessions": "Séances récentes",
    "sessionsLast7Days": "Séances (7 derniers jours)",
    "sessionsLast30Days": "Séances (30 derniers jours)",
    "history": "Historique",
    "exportHtml": "Exporter en HTML",
    "exportedOn": "Exporté le {{date}}"
  },
  "exercises": {
    "title": "Exercices",
    "empty": "Aucun exercice pour le moment. Créez votre premier exercice pour commencer !",
    "searchPlaceholder": "Rechercher des exercices…",
    "noResults": "Aucun exercice ne correspond à votre recherche.",
    "new": "Nouvel exercice",
    "edit": "Modifier l'exercice",
    "detail": "Détails de l'exercice",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer « {{title}} » ? Cette action est irréversible.",
    "deleteConfirmWithHistory": "Êtes-vous sûr de vouloir supprimer « {{title}} » ? Cela supprimera également {{count}} entrée(s) du journal. Cette action est irréversible.",
    "deleteConfirmUsage": "Il est utilisé dans {{sessions}} séance(s) et {{combos}} combo(s), et en sera retiré.",
    "deleted": "Exercice supprimé.",
    "form": {
      "title": "Titre",
      "titlePlaceholder": "ex. Pompes",
      "description": "Description",
      "descriptionPlaceholder": "Description facultative…",
      "asymmetric": "Exercice asymétrique",
      "alternate": "Alterner les côtés à chaque répétition",
      "alternateFalse": "Compléter toutes les répétitions d'un côté, puis changer",
      "imageUrls": "URLs des images",
      "videoUrls": "URLs des vidéos",
      "urlPlaceholder": "https://…",
      "addUrl": "Ajouter une URL",
      "removeUrl": "Supprimer",
      "defaultReps": "Répétitions par défaut",
      "defaultWeight": "Poids par défaut (kg)",
      "save": "Enregistrer",
      "cancel": "Annuler"
    },
    "reps": "reps",
    "weight": "kg",
    "asymmetricLabel": "Asymétrique",
    "alternateLabel": "Alternance",
    "delete": "Supprimer l'exercice",
    "videoOffline": "Les vidéos ne sont pas disponibles hors ligne.",
    "evenRepsHint": "Le nombre de répétitions doit être pair pour les exercices asymétriques."
  },
  "combos": {
    "title": "Combos",
    "empty": "Aucun combo pour le moment. Créez votre premier combo pour commencer !",
    "searchPlaceholder": "Rechercher des combos…",
    "noResults": "Aucun combo ne correspond à votre recherche.",
    "new": "Nouveau Combo",
    "edit": "Modifier le Combo",
    "detail": "Détails du Combo",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer « {{title}} » ? Cette action est irréversible.",
    "deleteConfirmUsage": "Il est utilisé dans {{sessions}} séance(s) et en sera retiré.",
    "deleted": "Combo supprimé.",
    "exercises": "exercices",
    "timerConfig": "Configuration du minuteur",
    "delete": "Supprimer le combo",
    "form": {
      "title": "Titre",
      "titlePlaceholder": "ex. Upper Body Blast",
      "description": "Description",
      "descriptionPlaceholder": "Description facultative…",
      "type": "Type",
      "exercises": "Exercices",
      "selectExercise": "Sélectionner un exercice",
      "noExercises": "Aucun exercice disponible — créez d'abord des exercices",
      "addExercise": "Ajouter Exercice",
      "reps": "Reps",
      "weight": "Poids (kg)",
      "save": "Enregistrer",
      "cancel": "Annuler"
    },
    "types": {
      "none": "Aucun",
      "emom": "EMOM",
      "amrap": "AMRAP",
      "tabata": "TABATA"
    },
    "timer": {
      "emomDuration": "Durée",
      "amrapDuration": "Durée",
      "tabataWorkTime": "Temps de travail (s)",
      "tabataRestTime": "Temps de repos (s)",
      "tabataSeconds": "secondes",
      "minutes": "minutes",
      "rounds": "tours"
    }
  },
  "collections": {
    "title": "Collections",
    "empty": "Aucune collection pour le moment. Créez votre première collection pour organiser vos séances !",
    "searchPlaceholder": "Rechercher des collections…",
    "noResults": "Aucune collection ne correspond à votre recherche.",
    "new": "Nouvelle Collection",
    "edit": "Modifier la Collection",
    "detail": "Détails de la Collection",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer « {{label}} » ? Cette action est irréversible.",
    "deleted": "Collection supprimée.",
    "sessions": "séances",
    "delete": "Supprimer la collection",
    "form": {
      "label": "Libellé",
      "labelPlaceholder": "ex. Entraînement Hebdomadaire",
      "sessions": "Séances",
      "selectSession": "Sélectionner une séance",
      "noSessions": "Aucune séance disponible — créez d'abord des séances",
      "addSession": "Ajouter Séance",
      "save": "Enregistrer",
      "cancel": "Annuler"
    }
  },
  "sessions": {
    "title": "Séances",
    "empty": "Aucune séance pour le moment.",
    "searchPlaceholder": "Rechercher des séances…",
    "noResults": "Aucune séance ne correspond à votre recherche.",
    "new": "Nouvelle séance",
    "edit": "Modifier la séance",
    "detail": "Détails de la séance",
    "deleteConfirm": "Êtes-vous sûr de vouloir supprimer « {{title}} » ? Cette action est irréversible.",
    "deleteConfirmWithHistory": "Êtes-vous sûr de vouloir supprimer « {{title}} » ? Cela supprimera également {{count}} journal(aux) d'exécution. Cette action est irréversible.",
    "deleteConfirmUsage": "Elle fait partie de {{collections}} collection(s) et en sera retirée.",
    "deleted": "Séance supprimée.",
    "items": "éléments",
    "delete": "Supprimer la séance",
    "itemType": {
      "exercise": "Exercice",
      "combo": "Combo"
    },
    "form": {
      "title": "Titre",
      "titlePlaceholder": "ex. Upper Body Day",
      "description": "Description",
      "descriptionPlaceholder": "Description facultative…",
      "items": "Éléments",
      "reps": "Reps",
      "durationMin": "Durée (min)",
      "weight": "Poids (kg)",
      "selectExercise": "Sélectionner un exercice",
      "selectCombo": "Sélectionner un combo",
      "noExercises": "Aucun exercice disponible — créez d'abord des exercices",
      "noCombos": "Aucun combo disponible — créez d'abord des combos",
      "addItem": "Ajouter élément",
      "save": "Enregistrer",
      "cancel": "Annuler"
    }
  },
  "stats": {
    "title": "Statistiques",
    "empty": "Pas encore de données. Exécutez une séance pour voir vos statistiques.",
    "usingSince": "Vous utilisez TrainUs depuis le {{date}}",
    "dateRange": {
      "7d": "7 jours",
      "30d": "30 jours",
      "3m": "3 mois",
      "all": "Tout"
    },
    "summary": {
      "sessions": "Séances",
      "exercises": "Exercices faits",
      "streak": "Jours consécutifs"
    },
    "charts": {
      "frequency": {
        "title": "Fréquence",
        "week": "Par semaine",
        "month": "Par mois",
        "yLabel": "Séances",
        "noData": "Aucune séance dans cette période."
      },
      "volume": {
        "title": "Volume",
        "yLabel": "Volume (kg·rép.)",
        "noData": "Aucune donnée de volume dans cette période."
      },
      "progression": {
        "title": "Progression",
        "selectExercise": "Sélectionner un exercice…",
        "reps": "Rép.",
        "weight": "Poids (kg)",
        "noData": "Aucune donnée pour cet exercice dans cette période."
      }
    }
  },
  "settings": {
    "title": "Réglages",
    "language": "Langue",
    "userName": "Nom d'utilisateur",
    "userNamePlaceholder": "Entrez votre nom",
    "nameRequired": "Le nom ne peut pas être vide",
    "userId": "Identifiant",
    "theme": "Thème",
    "themeLight": "Clair",
    "themeDark": "Sombre",
    "themeTrainus": "TrainUs",
    "database": "Base de données",
    "downloadDb": "Télécharger la base de données",
    "downloadDbHint": "Télécharger ou restaurer le fichier SQLite brut.",
    "restoreDb": "Restaurer la base de données",
    "restoreDbWarning": "Ceci va remplacer TOUTES les données actuelles par le contenu du fichier sélectionné. Cette action est irréversible.\n\nVersion actuelle de l'application : {{version}}\n\nÊtes-vous sûr de vouloir continuer ?",
    "restoreInProgress": "Restauration en cours…",
    "restoreSuccess": "Base de données restaurée avec succès",
    "restoreError": "Échec de la restauration",
    "restoreAdapted": "Schéma adapté de la version {{from}} à la version {{to}}.",
    "restoreRows": "ligne(s)",
    "restoreDismiss": "OK",
    "restoreErrorCodes": {
      "INVALID_FILE": "Le fichier sélectionné n'est pas une base de données SQLite valide ou est corrompu.",
      "INCOMPLETE_DB": "Le fichier sélectionné n'est pas une base de données TrainUs valide (tables requises manquantes).",
      "INCOMPATIBLE_VERSION": "La version de la base de données est incompatible et aucun chemin de migration n'est disponible.",
      "ADAPT_FAILED": "Échec de l'adaptation du schéma de la base de données.",
      "RESTORE_FAILED": "Une erreur est survenue lors de la restauration des données.",
      "UNEXPECTED": "Une erreur inattendue est survenue."
    },
    "exportImport": "Exporter / Importer",
    "exportAllData": "Exporter toutes les données",
    "exportData": "Exporter les données",
    "importData": "Importer les données",
    "importAsMine": "Importer comme les miens",
    "comingSoon": "Disponible dans une prochaine mise à jour.",
    "suffixManagement": "Suffixes d'importation",
    "suffixHint": "Gérez les suffixes utilisés pour distinguer les exercices importés d'autres utilisateurs.",
    "suffixDeleteConfirm": "Supprimer le suffixe « {{suffix}} » pour {{name}} ? Les exercices importés ne seront pas supprimés.",
    "suffixDeleteTitle": "Supprimer le suffixe",
    "backupReminderInvalid": "Doit être entre 1 et 365",
    "initializeDb": "Initialiser la base de données",
    "initializeDbHint": "Supprimer toutes les données et réinitialiser la base de données à son état initial. Cette action est irréversible.",
    "initializeDbTitle": "Initialiser la base de données",
    "initializeDbConfirm": "Je comprends que cela supprimera définitivement toutes mes données et ne peut pas être annulé",
    "backup": {
      "lastBackup": "Dernière sauvegarde : {{when}}",
      "neverBackedUp": "Jamais sauvegardé",
      "reminderEvery": "Me rappeler tous les",
      "reminderEveryUnit": "jours"
    },
    "sound": "Son",
    "soundVolume": "Volume",
    "soundTest": "Tester",
    "voiceAnnouncements": "Annonces vocales",
    "checkUpdates": "Vérifier les mises à jour",
    "checkForUpdate": "Vérifier les mises à jour",
    "upToDate": "Vous êtes à jour",
    "lastManualCheck": "Dernière vérification manuelle : {{when}}",
    "neverCheckedManually": "Jamais vérifié manuellement",
    "credits": "Crédits",
    "manageJournal": "Gérer les journaux d'exercices",
    "manageJournalHint": "Supprimez les entrées du journal d'exercices sur une plage de dates.",
    "cleanJournalBtn": "Nettoyer le journal"
  },
  "cleanJournal": {
    "title": "Nettoyer le journal",
    "hint": "Sélectionnez une plage de dates pour supprimer définitivement toutes les entrées du journal d'exercices.",
    "from": "Du",
    "to": "Au",
    "errorToBeforeFrom": "La date de fin doit être égale ou postérieure à la date de début.",
    "matchCount_one": "{{count}} séance sera supprimée.",
    "matchCount_other": "{{count}} séances seront supprimées.",
    "matchCount": "{{count}} séance(s) seront supprimée(s).",
    "confirmLabel": "Je comprends que cette action supprimera définitivement les entrées du journal sélectionnées et ne peut pas être annulée.",
    "deleteBtn": "Supprimer"
  },
  "credits": {
    "title": "Crédits",
    "intro": "Icônes open source utilisées dans cette application:",
    "appIcon": {
      "name": "Mighty Force",
      "description": "Icône de l'application, par Delapouite",
      "author": "Delapouite"
    },
    "bootstrapIcons": {
      "name": "Bootstrap Icons",
      "description": "Icônes d'interface utilisées dans toute l'application"
    },
    "gameIcons": "game-icons.net est maintenu par Lorc, Delapouite & contributeurs",
    "thirdParties": {
      "title": "Bibliothèques tierces"
    },
    "testingTools": {
      "title": "Outils de test"
    }
  },
  "export": {
    "exercises": "Exporter tous les exercices",
    "exercise": "Exporter cet exercice",
    "combos": "Exporter tous les combos",
    "combo": "Exporter ce combo",
    "sessions": "Exporter toutes les séances",
    "session": "Exporter cette séance",
    "collections": "Exporter toutes les collections",
    "collection": "Exporter cette collection",
    "executionLogs": "Journaux d'exécution",
    "settings": "Paramètres",
    "filterTitle": "Exporter les données",
    "filterDescription": "Sélectionnez les types de données à exporter."
  },
  "import": {
    "title": "Importer des données",
    "titleAsMine": "Importer comme les miens",
    "exercises": "Importer des exercices",
    "importAsMine": "Importer comme les miens",
    "cancel": "Annuler",
    "continue": "Continuer",
    "apply": "Importer",
    "done": "Terminé",
    "importing": "Importation en cours…",
    "exerciseCount": "exercice(s)",
    "totalCount": "élément(s)",
    "executionLogs": "journal(aux) d'exécution",
    "from": "De {{name}} le {{date}}",
    "usingSuffix": "Suffixe : [{{suffix}}]",
    "suffixExplanation": "Ces éléments proviennent de {{name}}. Choisissez un court suffixe pour les distinguer des vôtres.",
    "suffixLabel": "Suffixe",
    "suffixPlaceholder": "ex. JD",
    "suffixPreview": "Les titres ressembleront à : « {{title}} [{{suffix}}] »",
    "suffixRequired": "Le suffixe est requis.",
    "suffixTaken": "Ce suffixe est déjà utilisé par un autre utilisateur.",
    "suffixRenameFailed": "Le renommage a échoué : il créerait des titres en double. Rien n'a été renommé.",
    "collisionExplanation": "{{count}} élément(s) sont en conflit avec des données existantes. Choisissez quoi faire pour chacun :",
    "replace": "Remplacer",
    "skip": "Ignorer",
    "replaceAll": "Tout remplacer",
    "skipAll": "Tout ignorer",
    "exportedOn": "Exporté le {{date}}",
    "reportTitle": "Importation terminée",
    "reportTotalImported": "{{count}} élément(s) importé(s)",
    "reportImported": "{{count}} importé(s)",
    "reportReplaced": "{{count}} remplacé(s)",
    "reportUpdated": "{{count}} mis à jour",
    "reportSkipped": "{{count}} ignoré(s)",
    "errors": {
      "invalidJson": "Le fichier ne contient pas de JSON valide.",
      "invalidFormat": "Le format du fichier n'est pas reconnu.",
      "missingMetadata": "Le fichier ne contient pas de métadonnées.",
      "wrongApp": "Ce fichier n'a pas été exporté depuis TrainUs.",
      "missingSchema": "Le fichier ne contient pas d'information de version du schéma.",
      "newerSchema": "Ce fichier a été exporté depuis une version plus récente de TrainUs. Veuillez mettre à jour l'application.",
      "missingData": "Le fichier ne contient aucune donnée.",
      "missingExporter": "Le fichier ne contient pas d'informations sur l'exportateur."
    }
  },
  "validation": {
    "required": "Ce champ est requis.",
    "minValue": "La valeur doit être ≥ {{min}}.",
    "invalidUrl": "Veuillez entrer une URL valide (https://…).",
    "titleTaken": "Un exercice avec ce titre existe déjà.",
    "comboTitleTaken": "Un combo avec ce titre existe déjà.",
    "collectionLabelTaken": "Une collection avec ce libellé existe déjà."
  },
  "shortcuts": {
    "edit": "— appuyez sur E",
    "new": "— appuyez sur N",
    "back": "— appuyez sur Échap",
    "save": "— Ctrl+Entrée"
  },
  "execution": {
    "start": "Démarrer la séance",
    "exit": "Quitter la séance",
    "steps": "étapes",
    "now": "MAINTENANT",
    "next": "SUIVANT",
    "round": "Tour",
    "reps": "Reps",
    "weight": "Poids",
    "side": "Côté",
    "sideLeft": "GAUCHE",
    "sideRight": "DROIT",
    "asymAlternate": "(1x{{left}} ↔ 1x{{right}}) × {{count}}",
    "asymSequential": "{{count}}x {{left}} → {{count}}x {{right}}",
    "done": "Terminé",
    "previous": "Étape précédente",
    "continue": "Continuer",
    "oneMoreRound": "Un tour de plus",
    "comboContext": "Combo : {{title}} — Tour {{round}} sur {{total}}",
    "comboComplete": "{{title}} — {{rounds}} tour(s) terminé(s)",
    "complete": "Séance terminée !",
    "backToSession": "Retour à la séance",
    "timer": {
      "pause": "Pause",
      "resume": "Reprendre",
      "rest": "REPOS",
      "nextExercise": "Suivant :",
      "timeUp": "Temps écoulé",
      "timeUpTitle": "⏱ Temps écoulé — {{title}}"
    },
    "showDetails": "Afficher les détails de l'exercice",
    "hideDetails": "Masquer les détails de l'exercice",
    "videoOffline": "Les vidéos ne sont pas disponibles hors ligne.",
    "leaveConfirm": "Vous êtes en pleine séance. Partir quand même ? La séance sera marquée comme interrompue.",
    "voice": {
      "next": "Suivant : {{title}}"
    }
  },
  "backup": {
    "reminder": {
      "tooltip": "Dernière sauvegarde il y a {{days}} jour(s) — cliquez pour sauvegarder",
      "tooltipNever": "Pas encore de sauvegarde — cliquez pour en créer une"
    },
    "modal": {
      "title": "Rappel de sauvegarde",
      "body": "Votre dernière sauvegarde remonte à {{days}} jour(s). Nous vous recommandons de sauvegarder régulièrement.",
      "bodyNever": "Vous n'avez jamais effectué de sauvegarde. Nous vous recommandons d'en créer une.",
      "dismiss": "Ignorer",
      "goToSettings": "Aller aux paramètres"
    }
  },
  "firstLoadWarning": {
    "title": "Avant de commencer",
    "singleTab": "TrainUs ne peut être ouvert que dans un seul onglet à la fois. L'ouvrir dans un second onglet provoquera des erreurs.",
    "privateMode": "TrainUs ne fonctionne pas en navigation privée — vos données ne seraient pas sauvegardées.",
    "dismiss": "J'ai compris"
  },
  "appUpdate": {
    "title": "Mise à jour disponible",
    "body": "Une nouvelle version de TrainUs est prête. Mettez à jour maintenant, ou continuez et mettez à jour plus tard.",
    "updateNow": "Mettre à jour",
    "later": "Plus tard",
    "updating": "Mise à jour en cours…"
  },
  "install": {
    "button": "Installer l'application",
    "dismiss": "Ignorer l'invitation à installer"
  },
  "modal": {
    "close": "Fermer la boîte de dialogue"
  },
  "saveFile": {
    "title": "Enregistrer le fichier",
    "label": "Nom du fichier",
    "cancel": "Annuler",
    "save": "Enregistrer"
  },
  "about": {
    "title": "À propos de TrainUs",
    "appVersion": "Version de l'application",
    "dbVersion": "Version de la base de données",
    "author": "Créé par",
    "links": "Liens",
    "repository": "Dépôt",
    "website": "Site web",
    "license": "Licence",
    "licenseBtn": "Voir la licence"
  },
  "license": {
    "title": "Licence"
  }
}
