Spaces:
Running
Running
Étendre l'internationalisation (i18n)
Picarones a deux systèmes i18n distincts, qui partagent la même convention de fichiers JSON par langue :
| Système | Fichier | Contenu |
|---|---|---|
| Interface du rapport HTML | picarones/reports/html/i18n/{lang}.json |
Libellés des onglets, colonnes, boutons, messages dynamiques |
| Glossaire contextuel | picarones/reports/html/glossary/{lang}.yaml |
Définitions des métriques |
| Templates narratifs | picarones/domain/narrative/templates/{lang}.yaml |
Phrases de la synthèse factuelle |
Ajouter une nouvelle clé d'interface
- Ajoutez la clé dans
picarones/reports/html/i18n/fr.jsonETpicarones/reports/html/i18n/en.json(le testtest_fr_and_en_have_same_keyscasse sinon). - Côté HTML, utilisez l'attribut
data-i18n="ma_nouvelle_cle". Le contenu littéral du HTML est le fallback ; il est remplacé au chargement parapplyI18n()dans_app.js. - Côté JS,
I18N.ma_nouvelle_cleretourne la traduction.
<button data-i18n="my_new_button">Texte par défaut français</button>
const label = I18N.my_new_button || 'Texte par défaut français';
Ajouter une nouvelle langue
- Créez
picarones/reports/html/i18n/de.json(copiezfr.jsonet traduisez). - Créez
picarones/reports/html/glossary/de.yaml(copiezfr.yamlet traduisez). - Créez
picarones/domain/narrative/templates/de.yaml(copiezfr.yaml). - Lancez le rapport en spécifiant la langue :
picarones report --json results.json --output rapport.html --lang de.
Les loaders (get_labels, load_glossary, _load_templates) tombent
automatiquement sur fr si une langue manque.
Tests à mettre à jour
test_sprint17_jinja2_refactor.py::TestI18nFromJSON::test_fr_and_en_have_same_keysvérifie la symétrie. Pour 3 langues, étendre.test_sprint21_glossary_customize.py::TestGlossaryCompleteness::test_fr_and_en_have_same_keysvérifie la symétrie du glossaire.
Format YAML pour les templates narratifs
Voir docs/explanation/narrative-engine.md pour le détail. En bref :
fact_type_value: >-
Phrase avec des {placeholders} qui correspondent aux clés du
payload du Fact détecté.
Le rendu utilise str.format_map, pas Jinja2 — pour empêcher
toute génération arbitraire de contenu (anti-hallucination).
Référence
| Sprint | Travail i18n |
|---|---|
| 11 | Création du système FR/EN |
| 17 | Migration i18n.py (dict Python) → i18n/{fr,en}.json |
| 18 | +6 clés CDD (cdd_*) |
| 19 | +2 clés synthèse (synth_*) + 10 templates narratifs par langue |
| 20 | +9 clés Pareto (pareto_*) |
| 21 | +19 clés glossaire/personnalisation + 25 entrées glossaire par langue |