Aller au contenu

Cas d'utilisation — Conformité et expérience

Ce document détaille les cas d'utilisation liés à la conformité et l'expérience utilisateur de Primatch.


UC-CONF-01 : Changer la langue de l'application

Acteur : Utilisateur (connecté ou non)

Préconditions : L'utilisateur est sur une page publique avec le header visible

Scénario principal :

  1. L'utilisateur voit le bouton de changement de langue dans le header (icône « translate » + libellé « EN » ou « FR »)
  2. L'utilisateur clique sur le bouton
  3. L'application bascule instantanément dans la langue cible
  4. Le libellé du bouton s'inverse (ex : « EN » → « FR »)
  5. Le choix est sauvegardé dans localStorage
  6. L'attribut lang du document HTML est mis à jour

Postconditions : Toute l'interface affiche les traductions dans la nouvelle langue


UC-CONF-02 : Détection automatique de la langue

Acteur : Nouveau visiteur

Préconditions : Aucune préférence de langue stockée dans localStorage

Scénario principal :

  1. L'utilisateur visite l'application pour la première fois
  2. Le système détecte la langue du navigateur (navigator.language)
  3. Si la langue détectée est fr ou en, elle est utilisée
  4. Sinon, le français est utilisé par défaut
  5. La langue initiale est sauvegardée dans localStorage

UC-CONF-03 : Accepter ou refuser les cookies

Acteur : Visiteur (première visite)

Préconditions : Aucun choix de consentement enregistré dans localStorage

Scénario principal :

  1. Le bandeau de consentement apparaît en bas de l'écran
  2. Le message informe l'utilisateur de l'utilisation des cookies
  3. L'utilisateur clique sur « Accepter » ou « Refuser »
  4. Le choix est sauvegardé dans localStorage (clé primatch_cookie_consent)
  5. Le bandeau disparaît immédiatement

Scénario alternatif — Visite ultérieure :

  1. L'utilisateur revient sur le site
  2. Le système lit localStorage et trouve un choix déjà enregistré
  3. Le bandeau n'est pas affiché

UC-CONF-04 : Navigation au clavier (accessibilité)

Acteur : Utilisateur utilisant un clavier ou un lecteur d'écran

Préconditions : L'utilisateur navigue au clavier (Tab/Shift+Tab)

Scénario principal :

  1. Le premier élément focusable est le lien « Aller au contenu principal » (invisible jusqu'au focus)
  2. L'utilisateur appuie sur Tab → le lien skip-to-content apparaît
  3. L'utilisateur appuie sur Entrée → le focus se déplace vers #main-content
  4. Les boutons et liens affichent un anneau de focus visible lors de la navigation clavier
  5. Les messages d'erreur de formulaire sont annoncés par les lecteurs d'écran (role="alert")

Implémentation technique

Composants frontend

Composant Rôle
PublicHeader Bouton de changement de langue (icône translate + libellé)
CookieConsent Bandeau de consentement RGPD avec role="dialog"
App.tsx Lien skip-to-content, intégration CookieConsent
Button.tsx Focus ring accessible (focus-visible:ring-2)
Input.tsx role="alert" sur les messages d'erreur
PlayerLayout.tsx id="main-content" sur le contenu, focus ring sur les boutons de navigation
AdminLayout.tsx id="main-content" sur le contenu
ClubManagerLayout.tsx id="main-content" sur le contenu

Configuration i18n

Fichier Rôle
src/i18n/index.ts Initialisation i18next, détection de langue (localStorage > navigator > fallback fr), persistance via événement languageChanged
src/i18n/locales/fr/*.json Traductions françaises (8 namespaces)
src/i18n/locales/en/*.json Traductions anglaises (8 namespaces)

Tokens d'accessibilité (Tailwind)

Token Valeur Usage
text-muted #535B66 Texte secondaire (ratio ≥ 4.5:1 sur fond blanc)
focus-visible:ring-primary #00C2C2 Anneau de focus des éléments interactifs
sr-only / focus:not-sr-only Lien skip-to-content visible uniquement au focus

Tests

Type Fichier Tests
Unitaires CookieConsent.test.tsx 8 tests (affichage, acceptation, refus, persistance, lien confidentialité)
E2E conformity.spec.ts 14 tests répartis en 3 groupes : Cookie Consent (5), Language Switcher (4), Accessibility (5)