**Motivations:** - total_sponsoring should be calculated from cache, not stored in tags - Author searches should use cache first, not query Nostr directly - All elements should be read/written from/to database - Background sync should scan all notes with service='zapwall.fr' tag and update cache - Sync should run at startup and resume on each page navigation **Root causes:** - total_sponsoring was stored in tags which required updates on every sponsoring payment - Author queries were querying Nostr directly instead of using cache - No background sync service to keep cache up to date with new notes **Correctifs:** - Removed totalSponsoring from AuthorTags interface and buildAuthorTags - Modified getAuthorSponsoring to calculate from cache (sponsoring queries) instead of tags - Modified parsePresentationEvent to set totalSponsoring to 0 (calculated on demand from cache) - Modified fetchAuthorByHashId and fetchAuthorPresentationFromPool to use cache first and calculate totalSponsoring from cache - Created platformSyncService that scans all notes with service='zapwall.fr' tag and caches them - Modified _app.tsx to start continuous sync on mount and resume on page navigation - All author presentations now calculate totalSponsoring from cache when loaded **Evolutions:** - Cache-first architecture: all queries check cache before querying Nostr - Background sync service keeps cache up to date automatically - totalSponsoring is always calculated from actual sponsoring data in cache - Better performance: cache queries are faster than Nostr queries - Non-blocking sync: background sync doesn't block UI **Pages affectées:** - lib/nostrTagSystemTypes.ts - lib/nostrTagSystemBuild.ts - lib/articlePublisherHelpersPresentation.ts - lib/sponsoring.ts - lib/authorQueries.ts - lib/platformSync.ts (new) - pages/_app.tsx
3.4 KiB
3.4 KiB
Language preference selector in settings
Date
2025-01-27
Objectif
Permettre aux utilisateurs de configurer leur langue de préférence (fr/en) dans la page des paramètres, avec chargement automatique au démarrage de l'application depuis localStorage.
Motivations
- Centraliser la gestion de la langue dans la page des paramètres
- Permettre aux utilisateurs de changer facilement leur langue préférée
- Charger automatiquement la préférence de langue au démarrage pour configurer l'application
- Utiliser localStorage pour un accès plus rapide et synchrone
Impacts
- Utilisateurs : Peuvent maintenant configurer leur langue préférée dans les paramètres
- Performance : Chargement synchrone depuis localStorage au démarrage (plus rapide qu'IndexedDB)
- Cohérence : Tous les composants utilisent maintenant localStorage pour la langue
Modifications
Fichiers créés
components/LanguageSettingsManager.tsx: Composant de gestion de la langue dans les paramètres avec sélection fr/en
Fichiers modifiés
pages/settings.tsx: Ajout du composant LanguageSettingsManager en première positionpages/_app.tsx: Modification pour charger la langue depuis localStorage de manière synchrone au démarragehooks/useI18n.ts: Migration de IndexedDB vers localStorage pour la languecomponents/LanguageSelector.tsx: Migration de IndexedDB vers localStorage pour la cohérencelocales/fr.txt: Ajout des traductions pour les paramètres de languelocales/en.txt: Ajout des traductions pour les paramètres de langue
Fonctionnalités implémentées
Composant LanguageSettingsManager
- Affichage de la langue actuelle
- Boutons pour sélectionner français ou anglais
- Sauvegarde automatique dans localStorage
- Rechargement de la page après changement pour appliquer les traductions
Chargement au démarrage
- Lecture synchrone depuis localStorage dans
_app.tsx - Détection de la langue du navigateur en fallback
- Configuration de la locale avant le chargement des traductions
Migration vers localStorage
- Remplacement de IndexedDB par localStorage pour la langue
- Accès synchrone plus rapide
- Compatibilité avec tous les navigateurs
Traductions ajoutées
Français (fr.txt)
settings.language.title: Langue de préférencesettings.language.description: Choisissez votre langue préférée pour l'interfacesettings.language.loading: Chargement...settings.language.french: Françaissettings.language.english: Anglais
Anglais (en.txt)
settings.language.title: Preferred Languagesettings.language.description: Choose your preferred language for the interfacesettings.language.loading: Loading...settings.language.french: Frenchsettings.language.english: English
Modalités de déploiement
- Les modifications sont rétrocompatibles
- Les utilisateurs existants avec une préférence dans IndexedDB devront la reconfigurer (migration automatique possible si nécessaire)
- Aucune action spéciale requise, déploiement standard
Modalités d'analyse
- Vérifier que la langue est bien chargée au démarrage dans localStorage
- Tester le changement de langue depuis les paramètres
- Vérifier que le sélecteur dans le header fonctionne toujours correctement
- Confirmer que les traductions sont appliquées après changement de langue