Internationalisation (i18n)
createI18n gère des catalogues par langue avec interpolation {placeholder}, pluralisation, langue de repli, et détection depuis la requête (préfixe d'URL → cookie → Accept-Language). Chaque rendu est un choix serveur frais — pas de clignotement dans la mauvaise langue.
Astuce
Ordre de détection : préfixe de chemin (/fr/…) → cookie « locale » → Accept-Language (pondéré par q) → langue par défaut. Une clé absente retombe sur la langue de repli, puis sur la clé. Pour un routage /en/… à l'échelle du site, configurez [i18n] dans bext.config.toml.
こんにちは
Adaさん、ショップへようこそ!
🛒 カートに3点
別の言語を選択:
Langue active: ja · Détectée depuis la requête: en
import { createI18n } from "@bext-stack/framework/i18n";
const i18n = createI18n({
default: "en", fallback: "en",
locales: {
en: { greeting: "Welcome, {name}!", cart: "empty | 1 item | {count} items" },
fr: { greeting: "Bienvenue, {name} !", cart: "vide | 1 article | {count} articles" },
},
});
export async function loader({ request }) {
// detection: path prefix → 'locale' cookie → Accept-Language → default
const t = i18n.for(i18n.detect(request));
return {
greeting: t.t("greeting", { name: "Ada" }), // interpolation
cart: t.n("cart", count), // pluralization (empty|one|other)
};
}