import type en from './en';

const fr: typeof en = {
  common: {
    appName: 'Arboretum',
    loading: 'Chargement…',
    cancel: 'Annuler',
    logout: 'Se déconnecter',
    language: 'Langue',
    refresh: 'Rafraîchir',
    back: 'Retour',
    search: 'Rechercher',
    settings: 'Réglages',
    close: 'Fermer',
    retry: 'Réessayer',
  },
  login: {
    title: 'Connectez-vous avec votre jeton d’accès',
    tokenLabel: 'Jeton d’accès',
    tokenPlaceholder: 'arb_…',
    submit: 'Se connecter',
    submitting: 'Connexion…',
    invalidToken: 'Jeton invalide',
    rateLimited: 'Trop de tentatives — patientez avant de réessayer',
    genericError: 'Échec de la connexion ({status})',
  },
  sessions: {
    title: 'Sessions',
    refresh: 'Rafraîchir',
    empty: 'Aucune session — démarrez-en une ci-dessous.',
    newSession: 'Nouvelle session',
    cwdLabel: 'Répertoire de travail',
    cwdPlaceholder: '/chemin/absolu/du/projet',
    commandLabel: 'Commande',
    creating: 'Création…',
    open: 'Ouvrir',
    observe: 'Observer',
    view: 'Voir',
    resume: 'Reprendre',
    fork: 'Dupliquer',
    kill: 'Tuer',
    confirmKill: 'Confirmer',
    live: 'en cours',
    resumable: 'reprenable',
    sourceDiscovered: 'découverte',
    clients: 'aucun client | 1 client | {n} clients',
    exitCode: 'code de sortie {code}',
    statusLabel: {
      starting: 'démarrage',
      running: 'en cours',
      exited: 'terminée',
    },
    registryStatus: {
      busy: 'occupée',
      idle: 'inactive',
      waiting: 'en attente',
    },
    dialog: {
      waiting: 'En attente de votre saisie',
      deny: 'Refuser (Échap)',
      kind: {
        trust: 'Confiance',
        permission: 'Permission',
        question: 'Question',
        plan: 'Plan',
      },
    },
  },
  dashboard: {
    title: 'Worktrees',
    allSessions: 'Toutes les sessions',
    groups: 'Groupes',
  },
  groups: {
    title: 'Groupes',
    new: 'Nouveau groupe',
    create: 'Créer',
    creating: 'Création…',
    nameLabel: 'Nom du groupe',
    namePlaceholder: 'ex. Stack paiements',
    colorLabel: 'Couleur',
    reposLabel: 'Dépôts',
    empty: 'Aucun groupe — créez-en un ci-dessus.',
    noRepos: 'Aucun dépôt sélectionné.',
    noReposInGroup: 'Aucun dépôt dans ce groupe — ajoutez-en ci-dessous.',
    noReposRegistered: 'Aucun dépôt enregistré — ajoutez-en d’abord depuis le tableau de bord.',
    open: 'Ouvrir',
    edit: 'Modifier les dépôts',
    editDone: 'Terminé',
    remove: 'Supprimer',
    confirmDelete: 'Confirmer',
    repoCount: 'aucun dépôt | 1 dépôt | {n} dépôts',
    dashboard: 'Tableau de bord',
    missingRepo: 'Dépôt indisponible',
    removeFromGroup: 'Retirer du groupe',
    sessionsActive: 'aucune session active | 1 session active | {n} sessions actives',
    viewList: 'Dépôts',
    viewGrid: 'Terminaux',
    gridEmpty: 'Aucune session active dans ce groupe.',
    gridCapped: '{shown} sessions affichées sur {total} — fermez des terminaux pour voir le reste.',
    newFeature: 'Nouvelle feature cross-repo',
  },
  crossRepo: {
    title: 'Nouvelle feature cross-repo',
    intro: 'Crée le même worktree dans les dépôts sélectionnés, en une seule action.',
    branchLabel: 'Nom de branche',
    branchPlaceholder: 'feature/…',
    newBranch: 'créer la branche',
    baseRefLabel: 'Réf. de base (optionnel)',
    startLabel: 'Démarrer une session',
    startNone: 'aucune session',
    reposLabel: 'Appliquer à',
    create: 'Créer dans {n} dépôts',
    creating: 'Création…',
    retryFailed: 'Réessayer les échecs',
    close: 'Fermer',
    pending: 'en cours…',
    ok: 'créé',
    error: 'échec',
  },
  repos: {
    add: 'Ajouter un repo',
    adding: 'Ajout…',
    remove: 'Retirer',
    pathLabel: 'Chemin du dépôt',
    pathPlaceholder: '/chemin/absolu/du/repo',
    empty: 'Aucun dépôt enregistré — ajoutez-en un ci-dessus, ou lancez un scan.',
    invalid: 'indisponible',
    scan: 'Scanner',
    scanResult: 'Aucun nouveau dépôt trouvé | 1 nouveau dépôt ajouté | {n} nouveaux dépôts ajoutés',
    hide: 'Masquer',
    show: 'Afficher',
    showHidden: 'Afficher les masqués ({n})',
  },
  worktrees: {
    new: 'Nouveau worktree',
    create: 'Créer',
    creating: 'Création…',
    branch: 'Branche',
    newBranch: 'créer la branche',
    start: 'Démarrer',
    startNone: 'aucune session',
    delete: 'Supprimer',
    confirmDelete: 'Confirmer',
    forceDelete: 'Forcer la suppression',
    prune: 'Élaguer',
    main: 'principal',
    detached: 'détaché',
    locked: 'verrouillé',
    prunable: 'élaguable',
    clean: 'propre',
    dirty: '{n} modifié(s)',
    noSession: 'aucune session',
  },
  terminal: {
    observer: 'observateur (lecture seule)',
    sessionEnded: 'Session terminée',
    back: 'Sessions',
    notAttachable:
      'Cette session tourne hors d’Arboretum — dupliquez-la pour interagir, ou reprenez-la une fois arrêtée.',
  },
  push: {
    enable: 'Activer les notifications',
    disable: 'Notifications activées',
    denied: 'Permission de notification refusée — activez-la dans les réglages du navigateur.',
    unsupported: 'Le push nécessite HTTPS (ex. Tailscale Serve) ; sur iOS, installez d’abord l’app sur l’écran d’accueil.',
  },
  fs: {
    browse: 'Parcourir…',
    up: 'Remonter',
    useFolder: 'Utiliser ce dossier',
    showHidden: 'Afficher les cachés',
    loading: 'Chargement…',
    empty: 'Aucun sous-dossier',
    repoBadge: 'dépôt',
  },
  ws: {
    reconnecting: 'Connexion perdue — reconnexion…',
  },
  nav: {
    worktrees: 'Worktrees',
    sessions: 'Sessions',
    groups: 'Groupes',
    settings: 'Réglages',
    help: 'Aide',
    more: 'Plus',
    gitea: 'Code source',
    buymeacoffee: 'Offrez-moi un café',
    waiting: 'en attente',
  },
  controls: {
    searchPlaceholder: 'Rechercher…',
    results: 'aucun résultat | 1 résultat | {n} résultats',
    sortBy: 'Trier par',
    filters: 'Filtres',
    clearAll: 'Effacer',
  },
  sort: {
    asc: 'Croissant',
    desc: 'Décroissant',
    session: {
      state: 'État',
      recent: 'Plus récentes',
      clients: 'Clients',
      cwd: 'Répertoire',
      command: 'Commande',
    },
    worktree: {
      main: 'Principal d’abord',
      branch: 'Branche',
      dirty: 'Modifications',
      ahead: 'En avance',
      behind: 'En retard',
      activity: 'Activité',
    },
    repo: {
      label: 'Nom',
      created: 'Créé le',
      worktrees: 'Worktrees',
      activity: 'Activité',
    },
    group: {
      label: 'Nom',
      created: 'Créé le',
      repos: 'Dépôts',
      activeSessions: 'Sessions actives',
    },
  },
  filter: {
    state: {
      label: 'État',
      live: 'Active',
      waiting: 'En attente',
      busy: 'Occupée',
      idle: 'Au repos',
      exited: 'Terminée',
      resumable: 'Reprenable',
    },
    command: {
      label: 'Commande',
    },
    source: {
      label: 'Source',
      managed: 'Gérée',
      discovered: 'Découverte',
    },
    repo: {
      label: 'Dépôt',
    },
    worktree: {
      dirtiness: 'Modifications',
      dirty: 'Modifié',
      clean: 'Propre',
      session: 'Session',
      with: 'Avec session',
      without: 'Sans session',
      flags: 'Drapeaux',
      locked: 'Verrouillé',
      prunable: 'Élaguable',
    },
  },
  pagination: {
    prev: 'Précédent',
    next: 'Suivant',
    pageOf: 'Page {page} / {pageCount}',
    perPage: 'Par page',
    all: 'Tout',
  },
  palette: {
    placeholder: 'Aller à un dépôt, worktree, session, groupe…',
    empty: 'Aucun résultat',
    hint: '↑↓ naviguer · ↵ ouvrir · échap fermer',
    types: {
      repo: 'Dépôt',
      worktree: 'Worktree',
      session: 'Session',
      group: 'Groupe',
      action: 'Action',
    },
    actions: {
      newSession: 'Nouvelle session',
      addRepo: 'Ajouter un dépôt',
      newGroup: 'Nouveau groupe',
    },
  },
  toast: {
    sessionCreated: 'Session démarrée',
    sessionKilled: 'Session tuée',
    sessionResumed: 'Session reprise',
    sessionForked: 'Session dupliquée',
    repoAdded: 'Dépôt ajouté',
    repoRemoved: 'Dépôt retiré',
    worktreeCreated: 'Worktree créé',
    worktreeDeleted: 'Worktree supprimé',
    pruned: 'Worktrees élagués',
    groupCreated: 'Groupe créé',
    groupUpdated: 'Groupe mis à jour',
    groupDeleted: 'Groupe supprimé',
    genericError: 'Une erreur est survenue',
    dismiss: 'Fermer',
  },
  attention: {
    title: 'À traiter',
    count: 'aucune session en attente | 1 session en attente | {n} sessions en attente',
    empty: 'Rien à traiter',
  },
  settings: {
    title: 'Réglages',
    // Préférences
    preferences: 'Préférences',
    preferencesHint: 'Ces réglages ne s’appliquent qu’à ce navigateur.',
    language: 'Langue',
    notifications: 'Notifications',
    notificationsEnabled: 'Activées — vous serez notifié lorsqu’une session attend une réponse.',
    notificationsDisabled: 'Désactivées.',
    enableNotifications: 'Activer les notifications',
    disableNotifications: 'Désactiver les notifications',
    testNotification: 'Envoyer un test',
    testSent: 'Notification de test envoyée',
    pushUnsupported: 'Le push exige HTTPS (ex. Tailscale Serve) ; sur iOS, installez d’abord l’app sur l’écran d’accueil.',
    // Accès & sécurité
    security: 'Accès & sécurité',
    securityHint: 'Les jetons donnent un accès complet à ce serveur. Créez-en un par appareil et révoquez ceux que vous n’utilisez plus.',
    tokens: 'Jetons d’accès',
    newTokenLabel: 'Libellé',
    newTokenPlaceholder: 'ex. téléphone, portable',
    createToken: 'Créer un jeton',
    tokenCreated: 'Jeton créé',
    copyTokenHint: 'Copiez ce jeton maintenant — par sécurité il ne sera plus jamais affiché.',
    copy: 'Copier',
    copied: 'Copié',
    current: 'courant',
    created: 'Créé le {date}',
    lastUsed: 'utilisé le {date}',
    neverUsed: 'jamais utilisé',
    revoke: 'Révoquer',
    confirmRevoke: 'Confirmer la révocation',
    tokenRevoked: 'Jeton révoqué',
    lastTokenError: 'Impossible de révoquer le dernier jeton actif — créez-en un autre d’abord.',
    save: 'Enregistrer',
    saved: 'Enregistré',
    // Sécurité & conformité
    compliance: 'Sécurité & conformité',
    complianceHint: 'Exportez ou effacez les données liées à votre jeton (RGPD), et consultez le journal d’audit des opérations sensibles.',
    exportData: 'Exporter mes données',
    refreshAudit: 'Journal d’audit',
    deleteData: 'Effacer mes données',
    deleteConfirm: 'Effacer les données liées à votre jeton (abonnements push) et révoquer ce jeton ? Action irréversible.',
    deleteDone: 'Vos données ont été effacées.',
    // Découverte des dépôts
    discovery: 'Découverte des dépôts',
    discoveryHint: 'Arboretum scanne ces dossiers à la recherche de dépôts git et les enregistre automatiquement. Les dépôts masqués sont conservés et jamais ré-ajoutés.',
    scanRoots: 'Dossiers à scanner',
    scanRootsEmpty: 'Aucun dossier configuré — votre dossier personnel est utilisé par défaut.',
    addRoot: 'Ajouter un dossier',
    removeRoot: 'Retirer',
    scanInterval: 'Intervalle de re-scan (minutes)',
    scanIntervalHint: '0 désactive le scan périodique. Les changements prennent effet au prochain redémarrage du daemon.',
    // Serveur (lecture seule)
    server: 'Serveur',
    serverHint: 'Définis au démarrage via des flags CLI — les modifier nécessite de redémarrer le daemon.',
    version: 'Version',
    port: 'Port',
    bind: 'Adresse de liaison',
    allowedOrigins: 'Origines autorisées',
    dataDir: 'Répertoire de données',
    vapidPublicKey: 'Clé publique VAPID',
    vapidContact: 'Contact VAPID',
    none: 'aucune',
    flagHint: 'Flag CLI : {flag}',
    // Soutien
    support: 'Soutenir le projet',
    supportHint: 'Arboretum est un projet personnel libre et auto-financé. S’il vous fait gagner du temps, vous pouvez soutenir son développement.',
    supportCta: 'Offrez-moi un café',
  },
  help: {
    title: 'Aide',
    intro: 'Tout ce qu’Arboretum sait faire, et comment l’utiliser.',
    searchPlaceholder: 'Rechercher dans l’aide…',
    noMatch: 'Aucun sujet correspondant',
  },
};

export default fr;
