feat(prices): i18n FR/EN + CHANGELOG entries #160

Closed
opened 2026-04-27 00:15:37 +00:00 by maximus · 0 comments
Owner

Goal

Add all i18n keys for the price-fetching feature in src/i18n/locales/fr.json and en.json, and update CHANGELOG (FR + EN).

Contract reference

docs/api-contract-prices.md Annexe B (error code → i18n key mapping).

Fichiers concernés

  • src/i18n/locales/fr.json
  • src/i18n/locales/en.json
  • CHANGELOG.md (English, ## [Unreleased] → ### Added)
  • CHANGELOG.fr.md (French, ## [Non publié] → ### Ajouté)

Depends on

(none — i18n keys can be added before consumers exist)

Scope

  • Sous balance.priceFetching.* (FR + EN), ajouter :

    Clé FR EN
    button « Récupérer le prix » "Fetch price"
    tooltipNotPremium « Disponible avec abonnement premium » "Available with premium subscription"
    bestEffortNotice « Source non garantie, peut être indisponible. La saisie manuelle reste prioritaire. » "Source not guaranteed, may be unavailable. Manual input remains primary."
    attribution « via Maximus le {{date}} » "via Maximus on {{date}}"
    consent.title « Récupération de prix via Maximus » "Price fetching via Maximus"
    consent.body « En cliquant sur "Accepter", tu autorises Simpl'Résultat à interroger le proxy Maximus pour récupérer ce prix. Le proxy masque ton IP aux fournisseurs de données. Aucun historique de consultation n'est stocké. » "By clicking Accept, you authorize Simpl'Résultat to query the Maximus proxy to fetch this price. The proxy hides your IP from data providers. No browsing history is stored."
    consent.accept « Accepter » "Accept"
    consent.decline « Annuler » "Cancel"
    errors.invalidSymbol / errors.invalidDate / errors.missingParam / errors.authFailed / errors.premiumRequired / errors.licenseRevoked / errors.symbolNotFound / errors.rateLimit / errors.serverUnavailable / errors.bestEffortDegraded / errors.sessionCapReached (cf. Annexe B + supplément ci-dessous) (cf. Annexe B)

    Supplément :

    • errors.bestEffortDegraded (FR) : « Source de prix temporairement indisponible — réessayez dans {{minutes}} min ou saisissez manuellement »
    • errors.sessionCapReached (FR) : « Limite de récupération atteinte pour cette session. Saisissez les prix restants manuellement. » | (EN) "Fetch limit reached for this session. Enter remaining prices manually."
  • Sous settings.privacy.priceFetchConsent.* :

    Clé FR EN
    label « Récupération de prix via Maximus » "Price fetching via Maximus"
    description « Permet à Simpl'Résultat d'utiliser le proxy Maximus pour récupérer les prix d'actifs. Privacy : ton IP est masquée. » "Allow Simpl'Résultat to use the Maximus proxy to fetch asset prices. Privacy: your IP is hidden."
    confirmRevoke « Le bouton de récupération demandera à nouveau ton consentement la prochaine fois. Continuer ? » "The fetch button will ask for consent again next time. Continue?"
    revokeButton « Révoquer le consentement » "Revoke consent"
    notPremium « Réservé aux licences premium » "Premium licenses only"
  • CHANGELOG entries sous [Unreleased] :

    • EN ### Added : "Price-fetching premium for stocks (best-effort) and crypto (direct exchanges) — privacy preserved via maximus-api proxy. Privacy toggle in Settings to revoke consent."
    • FR ### Ajouté : « Récupération de prix premium pour actions (best-effort) et crypto (exchanges directs) — vie privée préservée via proxy maximus-api. Toggle dans les Paramètres pour révoquer le consentement. »

Critères d'acceptation

  • tsc --noEmit clean
  • Toutes les clés énumérées présentes en FR ET EN (vérifier avec jq ou un test d'unicité)
  • CHANGELOG.md et CHANGELOG.fr.md mis à jour, syncro auto par vite.config.ts (cf. CLAUDE.md — pas de copie manuelle dans public/)
  • Aucune chaîne en dur dans les composants des issues #158, #159 (vérifier qu'elles utilisent toutes ces clés)

Décisions prises ce soir

  • Namespace balance.priceFetching.* confirmé.
  • Texte du consentement explicite sur la garantie privacy-first (proxy + IP cachée).

Spec source

docs/api-contract-prices.md

## Goal Add all i18n keys for the price-fetching feature in `src/i18n/locales/fr.json` and `en.json`, and update CHANGELOG (FR + EN). ## Contract reference `docs/api-contract-prices.md` Annexe B (error code → i18n key mapping). ## Fichiers concernés - `src/i18n/locales/fr.json` - `src/i18n/locales/en.json` - `CHANGELOG.md` (English, `## [Unreleased] → ### Added`) - `CHANGELOG.fr.md` (French, `## [Non publié] → ### Ajouté`) ## Depends on (none — i18n keys can be added before consumers exist) ## Scope - [ ] Sous `balance.priceFetching.*` (FR + EN), ajouter : | Clé | FR | EN | |-----|----|----| | `button` | « Récupérer le prix » | "Fetch price" | | `tooltipNotPremium` | « Disponible avec abonnement premium » | "Available with premium subscription" | | `bestEffortNotice` | « Source non garantie, peut être indisponible. La saisie manuelle reste prioritaire. » | "Source not guaranteed, may be unavailable. Manual input remains primary." | | `attribution` | « via Maximus le {{date}} » | "via Maximus on {{date}}" | | `consent.title` | « Récupération de prix via Maximus » | "Price fetching via Maximus" | | `consent.body` | « En cliquant sur "Accepter", tu autorises Simpl'Résultat à interroger le proxy Maximus pour récupérer ce prix. Le proxy masque ton IP aux fournisseurs de données. Aucun historique de consultation n'est stocké. » | "By clicking Accept, you authorize Simpl'Résultat to query the Maximus proxy to fetch this price. The proxy hides your IP from data providers. No browsing history is stored." | | `consent.accept` | « Accepter » | "Accept" | | `consent.decline` | « Annuler » | "Cancel" | | `errors.invalidSymbol` / `errors.invalidDate` / `errors.missingParam` / `errors.authFailed` / `errors.premiumRequired` / `errors.licenseRevoked` / `errors.symbolNotFound` / `errors.rateLimit` / `errors.serverUnavailable` / `errors.bestEffortDegraded` / `errors.sessionCapReached` | (cf. Annexe B + supplément ci-dessous) | (cf. Annexe B) | Supplément : - `errors.bestEffortDegraded` (FR) : « Source de prix temporairement indisponible — réessayez dans {{minutes}} min ou saisissez manuellement » - `errors.sessionCapReached` (FR) : « Limite de récupération atteinte pour cette session. Saisissez les prix restants manuellement. » | (EN) "Fetch limit reached for this session. Enter remaining prices manually." - [ ] Sous `settings.privacy.priceFetchConsent.*` : | Clé | FR | EN | |-----|----|----| | `label` | « Récupération de prix via Maximus » | "Price fetching via Maximus" | | `description` | « Permet à Simpl'Résultat d'utiliser le proxy Maximus pour récupérer les prix d'actifs. Privacy : ton IP est masquée. » | "Allow Simpl'Résultat to use the Maximus proxy to fetch asset prices. Privacy: your IP is hidden." | | `confirmRevoke` | « Le bouton de récupération demandera à nouveau ton consentement la prochaine fois. Continuer ? » | "The fetch button will ask for consent again next time. Continue?" | | `revokeButton` | « Révoquer le consentement » | "Revoke consent" | | `notPremium` | « Réservé aux licences premium » | "Premium licenses only" | - [ ] CHANGELOG entries sous `[Unreleased]` : - EN `### Added` : "Price-fetching premium for stocks (best-effort) and crypto (direct exchanges) — privacy preserved via maximus-api proxy. Privacy toggle in Settings to revoke consent." - FR `### Ajouté` : « Récupération de prix premium pour actions (best-effort) et crypto (exchanges directs) — vie privée préservée via proxy maximus-api. Toggle dans les Paramètres pour révoquer le consentement. » ## Critères d'acceptation - [ ] `tsc --noEmit` clean - [ ] Toutes les clés énumérées présentes en FR ET EN (vérifier avec `jq` ou un test d'unicité) - [ ] CHANGELOG.md et CHANGELOG.fr.md mis à jour, syncro auto par `vite.config.ts` (cf. CLAUDE.md — pas de copie manuelle dans `public/`) - [ ] Aucune chaîne en dur dans les composants des issues #158, #159 (vérifier qu'elles utilisent toutes ces clés) ## Décisions prises ce soir - Namespace `balance.priceFetching.*` confirmé. - Texte du consentement explicite sur la garantie privacy-first (proxy + IP cachée). ## Spec source `docs/api-contract-prices.md`
maximus added this to the spec-price-fetching milestone 2026-04-27 00:15:37 +00:00
maximus added the
status:ready
type:feature
source:human
labels 2026-04-27 00:15:37 +00:00
maximus modified the milestone from spec-price-fetching to overnight-2026-04-27-prices 2026-04-27 00:32:02 +00:00
maximus added
status:in-progress
and removed
status:ready
source:human
labels 2026-04-27 12:07:22 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#160
No description provided.