🌐 [Feature] Support bilingue FR/EN #9
Labels
No labels
P0-critical
P1-high
P2-medium
P3-low
UX
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
performance
question
security
tech-debt
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
SlopVibe-org/nutri-food#9
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problème
Tous les aliments ont
name_frETname_endans la DB, mais l'app est FR uniquement. Le Guide alimentaire canadien est bilingue par nature.Solution
name_frouname_enselon la langueuserstable ou localStorageLocalisation
backend/app.py—_build_food_dict()retourne déjàname_fr or name_enAnalyse:
Issue #9 — Support bilingue FR/EN : Plan de match
Ce qui existe déjà ✅
name_frETname_en(source : Guide alimentaire canadien, naturellement bilingue)_build_food_dict()retourne déjàname_fr(fallbackname_en). La fonction CNF search cherche déjà dans les deux languesfoodetnutrientont aussiname_fr/name_enCe qui reste à faire 🔧
1. Backend — Dictionnaire de traduction (~60 chaînes)
auth.py,foods.py,tracking.py,selections.py,journal.py, etc.)extensions.py(ERR_UNAUTHORIZED,ERR_FORBIDDEN,ERR_RATE_LIMIT)_build_food_dict— accepter un paramètrelangpour choisirname_frvsname_enlanguagedans la tableusers(ou utiliser un header/query param)2. Frontend — Le gros du travail (~85 chaînes FR en dur)
index.html(830 lignes) — titre, meta, labels de modalesauth.js— Connexion, inscription, mot de passe oublié (~42 références)render.js— Rendu principal, titres, labels (891 lignes, le plus gros)cnf.js— Recherche d'aliments, formulaires d'ajout (561 lignes)grocery.js,history.js,journal.js,deals.js,food-modal.js— chacun 10-20 chaînesnutrition.js— labels de nutriments (Calories, Protéine, Fibre, Fer, etc.)3. Mécanique de toggle
i18navec dictionnairefr/encentralisét('key')helper qui lit la langue courante (localStorage)FR | EN) ou dans le menu utilisateur<html lang="...">dynamique4. Noms d'aliments
name_fr→name_envia un paramètre?lang=ensur l'API/api/foodsOrdre d'exécution proposé
Risques / notes
render.js(891 lignes) sera le plus touché — beaucoup de HTML construit en stringinnerHTML +=est déjà problématique dans ce codebase → attention de ne pas casser les event listenersi18n.jsd'abord, puis fichier par fichier, tester après chaquelanguage TEXT DEFAULT 'fr'