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 :
- L'utilisateur voit le bouton de changement de langue dans le header (icône « translate » + libellé « EN » ou « FR »)
- L'utilisateur clique sur le bouton
- L'application bascule instantanément dans la langue cible
- Le libellé du bouton s'inverse (ex : « EN » → « FR »)
- Le choix est sauvegardé dans
localStorage - L'attribut
langdu 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 :
- L'utilisateur visite l'application pour la première fois
- Le système détecte la langue du navigateur (
navigator.language) - Si la langue détectée est
frouen, elle est utilisée - Sinon, le français est utilisé par défaut
- 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 :
- Le bandeau de consentement apparaît en bas de l'écran
- Le message informe l'utilisateur de l'utilisation des cookies
- L'utilisateur clique sur « Accepter » ou « Refuser »
- Le choix est sauvegardé dans
localStorage(cléprimatch_cookie_consent) - Le bandeau disparaît immédiatement
Scénario alternatif — Visite ultérieure :
- L'utilisateur revient sur le site
- Le système lit
localStorageet trouve un choix déjà enregistré - 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 :
- Le premier élément focusable est le lien « Aller au contenu principal » (invisible jusqu'au focus)
- L'utilisateur appuie sur Tab → le lien skip-to-content apparaît
- L'utilisateur appuie sur Entrée → le focus se déplace vers
#main-content - Les boutons et liens affichent un anneau de focus visible lors de la navigation clavier
- 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) |