Files
arboretum/packages/web/src/i18n/fr.ts
Johan LEROY 1b4c19e00a P4-C: PWA installable, service worker push & campagne de fiabilité dialogues
- PWA: public/manifest.webmanifest + icon.svg + meta index.html (theme-color, apple-touch-icon)
- public/sw.js: service worker push-only (push → showNotification tag=sessionId ;
  notificationclick → focus/ouvre /sessions/<id>) — pas de précache (hors périmètre)
- lib/push.ts + stores/push.ts: enable/disable, abonnement VAPID, enregistrement SW au boot
- DashboardView: toggle « Notifications » (gardé par pushSupported) + i18n en/fr
- campagne de fiabilité (verdict S3): classification de tous les types de dialogue sur captures
  réelles (trust/permission×2/question) + refus Esc (deny-esc2) + plan (synthétique)
- acceptance-p4.mjs: VAPID/auth/Origin, subscribe idempotent/unsubscribe, answer (rejets)

Choix: SW écrit à la main plutôt que vite-plugin-pwa (qui tirait ~295 paquets Workbox +
2 vulns esbuild high pour un SW push-only). Zéro dépendance front nouvelle. 175 tests verts,
acceptance p1..p4 ALL GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 12:23:00 +02:00

115 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type en from './en';
const fr: typeof en = {
common: {
appName: 'Arboretum',
loading: 'Chargement…',
cancel: 'Annuler',
logout: 'Se déconnecter',
language: 'Langue',
},
login: {
title: 'Connectez-vous avec votre jeton daccès',
tokenLabel: 'Jeton daccè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',
},
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.',
invalid: 'indisponible',
},
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 dArboretum — 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 dabord lapp sur lécran daccueil.',
},
ws: {
reconnecting: 'Connexion perdue — reconnexion…',
},
};
export default fr;