**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
77 lines
3.4 KiB
Markdown
77 lines
3.4 KiB
Markdown
# 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 position
|
|
- **`pages/_app.tsx`** : Modification pour charger la langue depuis localStorage de manière synchrone au démarrage
|
|
- **`hooks/useI18n.ts`** : Migration de IndexedDB vers localStorage pour la langue
|
|
- **`components/LanguageSelector.tsx`** : Migration de IndexedDB vers localStorage pour la cohérence
|
|
- **`locales/fr.txt`** : Ajout des traductions pour les paramètres de langue
|
|
- **`locales/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érence
|
|
- `settings.language.description` : Choisissez votre langue préférée pour l'interface
|
|
- `settings.language.loading` : Chargement...
|
|
- `settings.language.french` : Français
|
|
- `settings.language.english` : Anglais
|
|
|
|
### Anglais (en.txt)
|
|
- `settings.language.title` : Preferred Language
|
|
- `settings.language.description` : Choose your preferred language for the interface
|
|
- `settings.language.loading` : Loading...
|
|
- `settings.language.french` : French
|
|
- `settings.language.english` : English
|
|
|
|
## Modalités de déploiement
|
|
1. Les modifications sont rétrocompatibles
|
|
2. Les utilisateurs existants avec une préférence dans IndexedDB devront la reconfigurer (migration automatique possible si nécessaire)
|
|
3. 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
|