Unverified Commit 93d62922 authored by Kourser's avatar Kourser
Browse files

i18n : passe de cohérence du dictionnaire anglais

Audit du dictionnaire (apps/web/src/i18n.tsx) contre l'ensemble des appels
t() de apps/web, puis correction. Aucun changement de comportement : le
dictionnaire seul est touché.

Ajout
- « Découverte » : seule chaîne réellement manquante sur une surface
  publique (l'aparté de découverte de la page de connexion). Les 42 autres
  clés absentes appartiennent toutes à la console d'animation, qui reste en
  français par convention — hors périmètre.

Retraits (12 entrées inatteignables)
- Quatre libellés du démarrage automatique, devenus faux depuis que les
  joueurs lancent eux-mêmes leur exercice (« L'exercice démarre à la
  première ouverture… », « Ouvrez un rôle pour commencer… »).
- Huit reliquats de formulations remplacées (« Connexion animateur »,
  « Découvrir la plateforme », « Installation… », etc.).
Chaque retrait a été vérifié par grep littéral sur apps/web : aucune de ces
chaînes n'est plus produite, ni en dur ni par une table de libellés.

Ce qui a été délibérément CONSERVÉ
- 56 entrées absentes des appels t() littéraux mais résolues
  dynamiquement — tables de libellés d'énumérations (« Alerte »,
  « Décision », « Brouillon »…). Les supprimer aurait été une régression :
  ces clés arrivent par variable, pas par littéral.
- Trois entrées identiques en français et en anglais, légitimes :
  « Export CSV », « Export JSON », « Antivirus / EDR ».

Vérifications
- 702 entrées, 0 clé manquante sur les surfaces joueur et publiques,
  0 entrée morte, 0 chaîne française non encapsulée sur ces surfaces.
- eslint, typecheck api et web, 180 tests / 20 suites : verts.
- Rendu contrôlé en anglais dans le navigateur sur /decouverte et dans
  l'espace joueur (briefing, onglets, bandeaux). Le français qui subsiste y
  est du CONTENU de kit (nom d'exercice, personnages), pas de l'interface :
  un kit est écrit dans une langue, ce n'est pas le rôle de cette couche.

Co-Authored-By: Claude (RCA)
parent 703ae2f5
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -161,7 +161,6 @@ const EN: Record<string, string> = {
  'Cythin (par défaut)': 'Cythin (default)',

  // Connexion
  'Connexion animateur': 'Facilitator sign-in',
  'Connexion impossible': 'Sign-in failed',
  'Mot de passe': 'Password',
  'Connexion…': 'Signing in…',
@@ -200,7 +199,6 @@ const EN: Record<string, string> = {
  'Archivé': 'Archived',
  'Nouvel exercice': 'New exercise',
  "Nom de l'exercice": 'Exercise name',
  'Secteur (optionnel)': 'Sector (optional)',
  'Créer': 'Create',
  'Création impossible': 'Could not create',
  'Secteur non précisé': 'Sector not specified',
@@ -254,9 +252,7 @@ const EN: Record<string, string> = {
  'Aucun inject planifié.': 'No scheduled injects.',
  '☎ Appels à passer': '☎ Calls to make',
  Appel: 'Call',
  'Messages des joueurs': 'Player messages',
  'Aucun message reçu.': 'No messages received.',
  'Activité en direct': 'Live activity',
  'Système': 'System',
  'Aucune activité.': 'No activity.',
  'Nouvel inject': 'New inject',
@@ -294,13 +290,11 @@ const EN: Record<string, string> = {
  // Bibliothèque de kits
  'a été ajouté à vos exercices, prêt à jouer.':
    'has been added to your exercises, ready to play.',
  'Installation impossible': 'Installation failed',
  "Des exercices prêts à l'emploi. « Utiliser » crée un exercice complet (contexte, personnages, chronogramme de stimuli, documents), prêt à dupliquer et à jouer.":
    'Ready-to-use exercises. "Use" creates a complete exercise (context, characters, stimulus timeline, documents), ready to duplicate and play.',
  'rôles': 'roles',
  stimuli: 'stimuli',
  documents: 'documents',
  'Installation…': 'Installing…',
  'Utiliser ce kit': 'Use this kit',
  'Aucun kit disponible.': 'No kits available.',
  'Nouveau kit': 'New kit',
@@ -831,8 +825,6 @@ const EN: Record<string, string> = {
    'Take the time to read your workspace, then start when you are ready.',
  'Vous lancerez l’exercice vous-même depuis votre espace.':
    'You will start the exercise yourself from your workspace.',
  'L’exercice démarre à la première ouverture, et les stimuli arrivent d’eux-mêmes.':
    'The exercise starts on first opening, and events arrive on their own.',
  'Exercices de gestion de crise': 'Crisis management exercises',
  Connexion: 'Sign in',
  'Espace des animateurs et des concepteurs.': 'For facilitators and designers.',
@@ -841,13 +833,11 @@ const EN: Record<string, string> = {
  'Rançongiciel dans une PME fictive, puis fuite de données. Six rôles.':
    'Ransomware in a fictional SME, then a data leak. Six roles.',
  'Sans compte': 'No account',
  'Découvrir la plateforme': 'Try the platform',
  'Jouez une crise cyber dans une PME fictive : rançongiciel, puis fuite de données. Six rôles, une trentaine de stimuli.':
    'Play a cyber crisis in a fictional SME: ransomware, then a data leak. Six roles, about thirty events.',
  'Commencer la découverte': 'Start the tour',
  'Aucun animateur nécessaire : les stimuli arrivent d’eux-mêmes.':
    'No facilitator needed: events arrive on their own.',
  'Découvrir sans compte': 'Try it without an account',
  Découverte: 'Discovery',
  'Découverte fermée': 'Discovery closed',
  'La découverte n’est pas ouverte sur cette instance.': 'Discovery is not open on this instance.',
  'Vous allez jouer une crise cyber dans une PME fictive : rançongiciel, puis fuite de données. Six rôles, une trentaine de stimuli, sur un peu moins de trois heures.':
@@ -860,8 +850,6 @@ const EN: Record<string, string> = {
  'Ouverture impossible': 'Could not open',
  'Votre session est prête': 'Your session is ready',
  Exercice: 'Exercise',
  'Ouvrez un rôle pour commencer. L’exercice démarre à la première ouverture et les stimuli arrivent d’eux-mêmes, sans animateur.':
    'Open a role to begin. The exercise starts on first opening and events arrive on their own, with no facilitator.',
  'Session éphémère : tout est supprimé à': 'Ephemeral session: everything is deleted at',
  'Gardez cette page ouverte : ces liens ne sont donnés qu’une fois.':
    'Keep this page open: these links are given only once.',