fix(i18n): 104 clés jamais localisées + garde-fou usage→locales en CI #19

Merged
kevin merged 1 commit from fix/i18n-cles-manquantes into main 2026-07-15 22:00:23 +00:00
Owner

i18n : le changement de langue redevient effectif partout

Bug signalé par Kevin : changer la langue laissait l'onglet Conscience (et d'autres panneaux) en FR. Le switch était sain — le contenu retombait en FR par trois trous :

  1. 104 clés utilisées jamais entrées dans fr/*.json → leur fallback inline (FR) s'affichait dans les 24 langues. Conscience 46 (toutes les tuiles des instruments : cohérence, calibration, Brier, modèle de toi, valence, fidélité, carte), settings 21 (thème custom), adminroles 15, kb 10, core 7, agentsettings 4, chat/valkyrie 1+1.
  2. 32 clés du kit inline (nav, titres Réglages, common) jamais complétées dans 22 langues.
  3. Conflit feuille/nœud adminroles.groups.curator[.tooltip] → tooltip renommé curatorTooltip (i18next ne peut pas résoudre les deux).

Fix

105 clés ajoutées au FR (pluriels _one/_other pour les compteurs) + 2937 traductions mergées dans les 23 autres langues (6 traducteurs parallèles, merger déterministe fail-closed : placeholders vérifiés, aucune traduction existante modifiée — vérifié par diff structurel).

La jauge était aveugle par construction

i18n-coverage.mjs compare les locales au FR déclaré — une clé jamais entrée dans le FR lui est invisible. Nouveau garde-fou i18n-usage-check.mjs : extrait les t('ns.key') du source et exige chaque clé dans chaque langue officielle (pluriels gérés, ressources inline d'index.ts incluses, préfixes dynamiques signalés) + job CI dédié (node:20) qui échoue sur toute récidive.

Vérifié : usage-check 3262 clés × 24 langues ✓ · coverage 3853 clés, 24/24 à 100 % ✓ · tsc 0 erreur.

🤖 Generated with Claude Code

## i18n : le changement de langue redevient effectif partout Bug signalé par Kevin : changer la langue laissait l'onglet Conscience (et d'autres panneaux) en FR. Le switch était sain — le contenu retombait en FR par trois trous : 1. **104 clés utilisées jamais entrées dans `fr/*.json`** → leur fallback inline (FR) s'affichait dans les 24 langues. Conscience 46 (toutes les tuiles des instruments : cohérence, calibration, Brier, modèle de toi, valence, fidélité, carte), settings 21 (thème custom), adminroles 15, kb 10, core 7, agentsettings 4, chat/valkyrie 1+1. 2. **32 clés du kit inline** (nav, titres Réglages, common) jamais complétées dans 22 langues. 3. **Conflit feuille/nœud** `adminroles.groups.curator[.tooltip]` → tooltip renommé `curatorTooltip` (i18next ne peut pas résoudre les deux). ### Fix 105 clés ajoutées au FR (pluriels `_one`/`_other` pour les compteurs) + **2937 traductions** mergées dans les 23 autres langues (6 traducteurs parallèles, merger déterministe fail-closed : placeholders vérifiés, aucune traduction existante modifiée — vérifié par diff structurel). ### La jauge était aveugle par construction `i18n-coverage.mjs` compare les locales au FR *déclaré* — une clé jamais entrée dans le FR lui est invisible. Nouveau garde-fou **`i18n-usage-check.mjs`** : extrait les `t('ns.key')` du source et exige chaque clé dans **chaque** langue officielle (pluriels gérés, ressources inline d'`index.ts` incluses, préfixes dynamiques signalés) + **job CI dédié** (`node:20`) qui échoue sur toute récidive. Vérifié : usage-check **3262 clés × 24 langues ✓** · coverage **3853 clés, 24/24 à 100 % ✓** · `tsc` 0 erreur. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(i18n): 104 clés utilisées jamais localisées + dette inline 22 langues — le changement de langue redevient effectif partout
All checks were successful
CI / Backend — pytest (pull_request) Successful in 3m12s
CI / i18n — usage → locales (pull_request) Successful in 2m23s
8d6fa09961
Bug signalé par Kevin (07-15) : changer la langue laissait l'onglet
Conscience (et d'autres panneaux) en français. Le switch lui-même était
sain — le contenu retombait en FR par trois étages de fallback :

1. 104 clés utilisées dans le code (t('ns.key', 'fallback FR')) jamais
   entrées dans fr/*.json → le fallback inline s'affichait dans les 24
   langues. Touchés : conscience 46 (toutes les tuiles des instruments),
   settings 21 (thème custom), adminroles 15, kb 10, core 7,
   agentsettings 4, chat/valkyrie 1+1.
2. 32 clés du kit inline (nav, titres Réglages, common) jamais
   complétées dans 22 langues (dette 18-32 selon la langue).
3. Conflit feuille/nœud adminroles.groups.curator[.tooltip] → tooltip
   renommé en clé sœur curatorTooltip (i18next ne peut pas résoudre les
   deux).

Fix : 105 clés ajoutées au FR (pluriels _one/_other pour les compteurs),
2937 traductions mergées dans les 23 autres langues (6 traducteurs
parallèles, merger déterministe : placeholders vérifiés, fail-closed).

LA JAUGE ÉTAIT AVEUGLE PAR CONSTRUCTION : i18n-coverage.mjs compare les
locales au FR déclaré — une clé jamais entrée dans fr/*.json lui est
invisible. Nouveau garde-fou i18n-usage-check.mjs : extrait les t() du
source et exige chaque clé dans CHAQUE langue officielle (pluriels
gérés, ressources inline incluses, préfixes dynamiques signalés) +
job CI dédié (node:20) qui échoue sur toute récidive.

Vérifié : usage-check 3262 clés × 24 langues ✓ ; coverage 3853 clés
100 % 24/24 ✓ ; tsc 0 erreur.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kevin merged commit a99e340ee5 into main 2026-07-15 22:00:23 +00:00
kevin deleted branch fix/i18n-cles-manquantes 2026-07-15 22:00:24 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
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
kevin/Gungnir!19
No description provided.