Welcome i18n¶
Prérequis : installer, puis créer le catalogue
i18n:init crée translations/ et le catalogue fr.json.
Sans lui, toute page qui appelle trans() échoue sur Catalogue introuvable : translations/fr.json, et non par un repli silencieux.
Voir la référence pour la mise en service complète.
Objectif : premier contact avec le module opt-in forge-mvc-i18n.
Ce que vous allez apprendre : l'internationalisation de Forge repose sur des catalogues JSON (un fichier par locale) et un helper trans(clé, locale).
Sans catalogue ni module, le noyau dégrade en no-op : trans retourne la clé.
Avec l'opt-in et un catalogue, trans retourne la traduction.
Premier palier du niveau débutant de la progression i18n (vue d'ensemble des starters).
Module opt-in : repli no-op
Si forge-mvc-i18n n'est pas installé, trans("welcome.title") renvoie "welcome.title".
L'application ne casse jamais ; elle n'est simplement pas traduite.
Ce que ce starter montre¶
- créer un premier catalogue
translations/fr.json; - traduire une clé avec
trans(clé, locale="fr")dans une route.
Classes Forge utilisées¶
| Fonction | Rôle dans ce starter | Référence |
|---|---|---|
forge_mvc_i18n.trans(key, locale) |
Retourne la traduction d'une clé pour une locale. | Opt-ins |
1. Créer le catalogue français¶
2. Le contrôleur¶
# mvc/controllers/i18n_welcome_controller.py
from core.http.request import Request
from core.http.response import Response
from core.mvc.controller.base_controller import BaseController
from forge_mvc_i18n import trans
class I18nWelcomeController(BaseController):
@staticmethod
def index(request: Request) -> Response:
titre = trans("welcome.title", locale="fr")
return Response.text(titre)
Comprendre ce code¶
trans("welcome.title", locale="fr")littranslations/fr.jsonet retourne"Welcome i18n".- Le catalogue est un simple objet JSON
clé → texte: rien de magique, le stockage est visible et éditable. - Sans le module opt-in, la même ligne renverrait
"welcome.title"(repli no-op).
La route¶
# mvc/routes/__init__.py
from mvc.controllers.i18n_welcome_controller import I18nWelcomeController
with router.group("", public=True) as public:
public.add("GET", "/i18n-welcome", I18nWelcomeController.index, name="i18n_welcome_index")
À retenir¶
- L'i18n Forge = catalogues JSON + helper
trans(clé, locale). - Sans module ni catalogue,
transdégrade en no-op (retourne la clé). - Le catalogue est un simple
clé → texte, à SQL/stockage visible.
Après ce starter¶
Premier mot traduit.
Voyons la structure d'un catalogue avec deux langues.