Internationalisation (i18n)
Internationalisation (i18n)
BrainNotFound supporte plusieurs langues grâce à Flask-Babel. Par défaut, le français est utilisé, avec l'anglais comme langue alternative.
Langues supportées
| Code | Langue | Statut |
|---|---|---|
fr |
Français | Défaut |
en |
English | Disponible |
Changer de langue
Via l'interface
Un sélecteur de langue est disponible dans la barre de navigation. Cliquez dessus pour choisir votre langue préférée.
Détection automatique
Si vous n'avez pas défini de préférence, BrainNotFound détecte automatiquement la langue de votre navigateur via l'en-tête Accept-Language.
Préférence utilisateur
Votre choix de langue est sauvegardé : - Utilisateurs connectés : En base de données (persistant) - Visiteurs : En session (temporaire)
Pour les développeurs
Workflow de traduction
# 1. Extraire les nouvelles chaînes à traduire
pybabel extract -F babel.cfg -k _l -k _ -o messages.pot .
# 2. Mettre à jour les catalogues existants
pybabel update -i messages.pot -d translations
# 3. Éditer les traductions
# Fichier : translations/en/LC_MESSAGES/messages.po
# 4. Compiler (automatique au démarrage Docker)
pybabel compile -d translations
Structure des fichiers
babel.cfg # Configuration d'extraction
messages.pot # Catalogue source (généré)
translations/
├── fr/LC_MESSAGES/
│ ├── messages.po # Traductions françaises
│ └── messages.mo # Compilé (généré)
└── en/LC_MESSAGES/
├── messages.po # Traductions anglaises
└── messages.mo # Compilé (généré)
Marquer les chaînes à traduire
Dans les routes Python
from flask_babel import lazy_gettext as _l
# Messages flash
flash(_l('Connexion réussie'), 'success')
# Avec des variables
flash(_l('Quiz "%(title)s" créé', title=quiz.title), 'success')
Dans les templates Jinja2
<h1>{{ _('Bienvenue') }}</h1>
<button>{{ _('Se connecter') }}</button>
{# Avec des variables #}
<p>{{ _('Bonjour %(name)s', name=user.username) }}</p>
Compilation automatique
Les traductions sont compilées automatiquement au démarrage du conteneur Docker. Vous n'avez pas besoin de les compiler manuellement en production.
Prompts IA multilingues
Les prompts de correction et d'entretien IA sont également traduits. Ils utilisent des dictionnaires par langue dans private.example/prompts/ :
GRADING_PROMPT_TEMPLATE = {
'fr': """Tu es un correcteur bienveillant...""",
'en': """You are a benevolent grader..."""
}
Cela permet : - Feedback IA dans la langue de l'utilisateur - Évaluation adaptée au contexte linguistique - Critères et instructions traduits
Ajouter une nouvelle langue
-
Initialiser le catalogue :
bash pybabel init -i messages.pot -d translations -l es # Exemple : espagnol -
Traduire : Éditez
translations/es/LC_MESSAGES/messages.po -
Ajouter à la configuration : Dans
config.py:python LANGUAGES = ['fr', 'en', 'es'] -
Traduire les prompts IA : Ajoutez la clé
'es'dans les fichiersprivate.example/prompts/*.py -
Compiler et redémarrer :
bash pybabel compile -d translations docker compose restart web
Ordre de priorité
La langue est déterminée dans cet ordre :
- Préférence utilisateur (si connecté et définie)
- Session (si définie via le sélecteur)
- Accept-Language (détection navigateur)
- Défaut : Français (
fr)