Aller au contenu

Internationalisation (i18n)

Adaptive Learner supporte huit langues d'interface.

Langues supportées

Code Langue
de Allemand
en Anglais
es Espagnol
fr Français
el Grec
pt Portugais
tr Turc
ja Japonais

Où vivent les chaînes

Source canonique : backend/config/i18n/{lang}.yaml

Ces fichiers YAML sont la source de vérité unique pour toutes les chaînes d'interface. Après modification, exécutez :

make sync-i18n

Cela génère frontend/src/data/i18n/*.json — importé par le frontend au moment du build.

Fallback frontend : certaines chaînes critiques de chemin de démarrage sont dupliquées dans frontend/src/lib/i18n-fallback.ts. Celles-ci ne doivent être mises à jour que si la clé change.

Documentation d'aide : les fichiers Markdown sous docs/help/{lang}/ sont la source pour la documentation en langue correspondante.


Ajouter une nouvelle langue

  1. Créez le catalogue YAML : copiez backend/config/i18n/en.yaml vers {lang}.yaml et traduisez toutes les valeurs.

  2. Enregistrez la langue : ajoutez le code de langue dans la liste SUPPORTED_LANGUAGES dans backend/app/services/i18n_service.py.

  3. Ajoutez aux paramètres frontend : ajoutez le code et le libellé natif à LANGUAGES dans frontend/src/lib/languages.ts.

  4. Synchronisez : make sync-i18n

  5. Créez la documentation d'aide : copiez docs/help/en/ vers docs/help/{lang}/ et traduisez tous les fichiers Markdown.

  6. Ajoutez au catalogue de glossaire d'aide : créez les quatre fichiers backend/config/help/concepts.{lang}.yaml, methods.{lang}.yaml, steps.{lang}.yaml, features.{lang}.yaml.

  7. Tests de parité : les tests de parité i18n (backend/tests/test_i18n.py) vérifient que chaque chemin de clé dans en.yaml existe dans tous les autres catalogues. Exécutez make test-backend pour vérifier.


Format des clés

Les clés utilisent une notation par points en YAML imbriqué :

# en.yaml
session:
  start: "Start session"
  end: "End session"
  rating:
    understanding: "How well did you understand?"

Accès côté frontend : t('session.rating.understanding')


Pluriels

Les pluriels utilisent une convention à suffixe :

badge:
  count_one: "{{count}} badge"
  count_other: "{{count}} badges"

RTL (droite à gauche)

Aucune langue RTL n'est actuellement supportée. L'infrastructure CSS utilise des propriétés logiques (margin-inline-start au lieu de margin-left) par endroits, mais la parité RTL complète nécessiterait un audit. Si vous ajoutez une langue RTL, ajoutez dir="rtl" sur l'élément <html> via useI18n.


Tests de parité

Le test de parité automatisé se trouve dans backend/tests/test_i18n.py. Il échoue si un chemin de clé dans en.yaml est absent dans n'importe quel autre catalogue. Cela garantit qu'aucune traduction ne peut dériver silencieusement.

Un test supplémentaire dans frontend/src/lib/i18n.test.ts vérifie que chaque chemin de clé utilisé dans les composants résout correctement dans les huit catalogues.