Thème et langue (hooks et contrôles)

Thème et langue (hooks et contrôles)

Guide détaillé d'utilisation des contrôles UI et des hooks pour gérer le thème et la langue dans une SPA

Ce guide explique comment utiliser les contrôles visuels (ThemeToggle, sélecteur de langue) et les helpers client (useTheme, useLanguage, useAuthProviders) pour offrir un basculement de thème et une sélection de langue persistante et fiable côté client.

Ce que couvre cette page

Contrôles UI réutilisables

Dialogs, Loaders et ThemeToggle : où les placer et comment les attendre se comporter dans l’interface.

Helpers client

useTheme, useLanguage et useAuthProviders : comportement utilisateur, persistance des préférences et interactions basiques.

Persistance côté client

Conserver thème et langue dans le navigateur (localStorage), tests et scénarios de migration entre sessions/appareils.

Introductif rapide : ce guide est axé sur l’utilisation quotidienne et l’intégration UX — pas sur l’implémentation interne. Les composants sont conçus pour fonctionner dans une application single-page (SPA). Si vous placez les contrôles au bon endroit, l’expérience de l’utilisateur devient fluide : basculement instantané de thème, changement de langue immédiat et sauvegarde automatique des préférences.

Workflow : Placer et utiliser le contrôle ThemeToggle (visuel)

1

1 — Choisir l'emplacement idéal

Placez ThemeToggle dans la barre de navigation ou en haut à droite de la page (coin haut‑droit recommandé). Les utilisateurs s’attendent à trouver le contrôle de thème près des autres actions globales (profil, langue, notifications).

2

2 — Vérifier l'accessibilité

Assurez-vous que le bouton a un titre/tooltip clair (ex. « Activer le mode sombre » / « Activer le mode clair ») et une étiquette pour les lecteurs d’écran. Le contraste visuel du bouton doit rester lisible dans les deux thèmes.

3

3 — Tester le basculement visuel

Cliquez sur le contrôle pour basculer entre mode clair et sombre. Observez la commutation des éléments visibles (background, texte, icônes et éventuels logos alternatifs). Confirmez que l’effet est immédiat sans rechargement de page.

4

4 — Vérifier l'effet sur les éléments partagés

Vérifiez les composants globaux (topbar, logos, images alternatives, arrière‑plans) : certains éléments doivent changer d’apparence selon le thème. Si vous avez un logo sombre/claire, validez qu’il s’affiche correctement selon le thème.

5

5 — Tester sur plusieurs pages

Naviguez entre plusieurs pages de l’application pour vérifier que le thème reste appliqué lors des changements de route dans la SPA.

Workflow : Utiliser le helper useTheme (comportement et persistance)

1

1 — Comprendre les fonctions exposées

Le helper fournit l’état courant (ex. indicateur ‘isDark’), une action pour définir explicitement le thème, et une action pour basculer. Ces actions affectent immédiatement l’apparence de l’application et enregistrent la préférence côté client.

2

2 — Initialisation au chargement

Au premier affichage d’un utilisateur, le helper lit la préférence stockée côté client et applique le thème correspondant. Le comportement par défaut est souvent le mode sombre si aucune préférence n’est trouvée.

3

3 — Forcer un thème depuis l'interface

Si vous avez besoin d’un bouton ou d’une option dédiée (par ex. “Mode clair” / “Mode sombre”), utilisez l’action de définition explicite du helper pour appliquer et persister la préférence.

4

4 — Confirmer la persistance

Après un changement, fermez l’onglet ou rafraîchissez la page pour vérifier que la préférence est restaurée automatiquement. Si elle l’est, la persistance côté client fonctionne correctement.

5

5 — Cas de test avancés

Tester : 1) ouvrir en navigation privée (certains navigateurs empêchent la persistance), 2) vider le stockage du navigateur et revérifier la valeur par défaut, 3) simuler conflit (préférence ancienne vs nouvelle) et observer comportement.

Workflow : Utiliser useLanguage et les contrôles de langue

1

1 — Placer le sélecteur de langue

Placez le contrôle de langue (LanguageSelector) dans la topbar, à proximité du ThemeToggle et de l’accès au compte. L’emplacement cohérent aide l’utilisateur à le trouver rapidement.

2

2 — Changer la langue depuis l'UI

Lorsqu’un utilisateur sélectionne une langue, le helper met à jour l’état de langue actif, applique immédiatement les traductions disponibles et sauvegarde la préférence côté client.

3

3 — Vérifier la mise à jour des libellés

Vérifiez que tous les libellés d’interface (menus, boutons, messages) changent comme attendu. Sur les pages longues, parcourir le contenu permet de confirmer que la plupart des éléments sont traduits.

4

4 — Comportement en cas de traduction manquante

Si une chaîne n’est pas disponible dans la langue choisie, validez que l’interface utilise une langue de repli (souvent anglais ou la langue commune) pour éviter des zones vides.

5

5 — Persistance et rétablissement

Vérifiez que la langue est restaurée automatiquement après fermeture/rouverture du navigateur — la sélection doit être lue depuis la persistance côté client.

Workflow : Persister les préférences côté client (vérification et gestion)

1

1 — Identifier les clés de stockage

Confirmez quelles clés sont utilisées pour stocker le thème et la langue dans le navigateur (par ex. “preferred-theme”, “preferred-language”). Cela permet de faire des vérifications manuelles lors des tests.

2

2 — Tester la sauvegarde automatique

Changez thème/langue via l’UI, puis ouvrez les outils du navigateur pour vérifier la présence des valeurs correspondantes. Fermez l’onglet et rouvrez l’app : la préférence doit être restaurée.

3

3 — Scénarios où la persistance échoue

Comprendre les limites : navigation privée restreint parfois la persistance; certains bloqueurs ou politiques de sécurité peuvent interdire l’accès au stockage ; un nettoyage manuel du navigateur efface les préférences.

4

4 — Fournir une option de réinitialisation

Ajoutez dans les paramètres utilisateur un bouton “Réinitialiser préférences” permettant de supprimer les valeurs sauvegardées et de revenir aux valeurs par défaut.

5

5 — Communication à l'utilisateur

Si le changement ne persiste pas (ex. navigation privée), affichez une notification explicative pour l’utilisateur (ex. “La sauvegarde des préférences est limitée en navigation privée”).

Astuce : emplacement du ThemeToggle

Placez ThemeToggle à proximité du sélecteur de langue et du profil pour une expérience cohérente. Les utilisateurs s’attendent à trouver les contrôles globaux regroupés dans la même zone.

Astuce : gestion des traductions partielles

Pour les langues partielles, fournissez toujours une langue de secours lisible et affichez un indicateur discret montrant que certaines chaînes peuvent ne pas être encore traduites.

Avertissement : conçu pour SPA (SSR désactivé)

Ces composants et helpers sont conçus pour fonctionner dans une application single‑page (SPA). Si votre application exécute un rendu côté serveur (SSR) ou force un premier rendu différent, vous pouvez observer un « flash » de style (apparence initiale différente) ou des problèmes de synchronisation des préférences.

Workflow : Scénarios de migration et synchronisation des préférences entre sessions et appareils

1

1 — Scénario simple : même navigateur, même appareil

Comportement attendu : la préférence stockée côté client est lue et appliquée automatiquement à chaque ouverture. Aucun traitement spécial n’est nécessaire.

2

2 — Scénario multi‑onglets

Tester : ouvrir plusieurs onglets, changer la préférence dans un onglet. Assurez-vous que les autres onglets détectent le changement (si votre application écoute les événements de stockage) ou qu’un rafraîchissement applique la nouvelle valeur.

3

3 — Scénario multi‑appareils sans compte

Sans synchronisation via compte, la préférence ne suit pas l’utilisateur entre appareils. Proposez une option d’export / import manuel (fichier JSON à copier/coller) si nécessaire pour certains publics.

4

4 — Scénario multi‑appareils avec compte

Si votre application offre une synchronisation liée au compte utilisateur, enregistrez les préférences sur le profil (optionnel) pour les restaurer sur d’autres appareils après connexion. Donnez à l’utilisateur la possibilité de choisir entre “préférence du compte” et “préférence locale”.

5

5 — Gestion des conflits

Quand une préférence locale et une préférence synchronisée diffèrent, choisissez une stratégie claire : priorité au compte (serveur) ou priorité à la locale la plus récente. Affichez un message informatif si vous appliquez un remplacement automatique.

6

6 — Versionner le format de préférence

Préparez votre format de préférence à évoluer (ex. ajouter un thème personnalisé). Lors d’une migration, détectez l’ancienne version et effectuez une mise à jour sûre plutôt que de supprimer la préférence sans prévenir.

Cette approche s’appuie uniquement sur la persistance côté client. Avantages : simplicité, rapidité. Inconvénients : préférences liées au navigateur/au dispositif. Idéale pour sites publics sans compte.

Sauvegarde des préférences dans le profil utilisateur (option facultative). Avantages : expérience cohérente sur plusieurs appareils. Inconvénients : nécessite mécanisme d’association à un compte et gestion des conflits.

Garde une copie locale et propose un mode de synchronisation optionnel après connexion : démarrage rapide en local, puis synchronisation si l’utilisateur l’active.

Avant (sans persistance)

  • L’utilisateur choisit un thème/langue.
  • Après un rafraîchissement, la préférence est perdue.
  • Mauvaise expérience sur sessions répétées.

Après (avec persistance)

  • La préférence est sauvegardée automatiquement.
  • Restaurée à l’ouverture suivante.
  • Expérience cohérente et prévisible.

Limites à garder à l'esprit

  • Le stockage côté client est lié au navigateur et à l’origine : changer de navigateur ou utiliser un autre appareil ne transfère pas automatiquement les préférences.
  • La navigation privée ou certains bloqueurs peuvent empêcher la persistance.
  • Si le rendu initial de la page se fait avant la lecture de la préférence, un court « flash » d’apparence non attendue peut survenir.

Bonnes pratiques UX

  • Informez l’utilisateur si la préférence ne peut pas être sauvegardée et proposez une alternative (ex. export/import).
  • Offrez une option claire de réinitialisation des préférences pour revenir aux réglages par défaut.

Questions fréquentes — Thème et langue

Checklist rapide avant déploiement

  • Le ThemeToggle est visible et accessible depuis la topbar.
  • Les labels et tooltips sont localisés pour chaque langue.
  • Les préférences sont restaurées après fermeture/rouvrir du navigateur.
  • Les cas de navigation privée et de suppression de stockage ont été testés.
  • Une option de réinitialisation est disponible pour l’utilisateur.

En savoir plus et tester

Consultez la galerie des composants pour voir ThemeToggle, LanguageSelector, Dialogs et Loaders en action, et testez les scénarios décrits dans ce guide.