Localisation (i18n)
@bext-stack/framework/i18n permet la traduction des applications PRISM selon la méthode Laravel : catalogues de messages par langue, t(key, params) avec interpolation {placeholder}, pluralisation, paramètres régionaux de secours et détection des paramètres régionaux à partir de la requête. Il s'agit du remplacement partagé des copies i18n.ts que chaque site a créées manuellement, et de l'équivalent pour les développeurs d'applications de la fonctionnalité Rust I18n.
Installation#
import { createI18n } from "@bext-stack/framework/i18n";
const i18n = createI18n({
default: "en",
fallback: "en", // consulted when a key is missing in the active locale
locales: {
en: {
greeting: "Hello, {name}!",
cart: "Your cart is empty | 1 item | {count} items", // zero | one | other
},
fr: {
greeting: "Bonjour, {name} !",
cart: "Panier vide | 1 article | {count} articles",
},
},
});
Traduire#
export async function loader({ request }) {
const t = i18n.for(i18n.detect(request)); // a Translator for the request's locale
return {
hi: t.t("greeting", { name: "Ada" }), // → "Hello, Ada!" (interpolation)
cart: t.n("cart", count), // → "3 items" (pluralization)
};
}
| Membre | Fait |
|---|---|
i18n.for(locale) |
un Translator lié à une locale (inconnu → par défaut) |
i18n.detect(request) |
résoudre les paramètres régionaux de la demande (voir ci-dessous) |
t.t(key, params?) |
traduire + interpoler {placeholder} |
t.n(key, count, params?) |
pluraliser ( one|other ou zero|one|other ), {count} interpolé |
t.has(key) |
la clé est-elle présente (y compris la solution de secours) ? |
Les clés manquantes reviennent aux paramètres régionaux de secours, puis à la clé elle-même — de sorte qu'une traduction partielle se dégrade gracieusement au lieu d'être lancée.
Détection des paramètres régionaux#
detect(request) se résout dans cet ordre, le premier coup l'emporte :
- Préfixe de chemin —
/fr/dashboard→fr. - Cookie — un cookie
locale(nom configurable). Accept-Language— respecte les poidsqet correspond à la langue de base (fr-CA→fr).- Valeur par défaut.
Pour le routage préfixé à l'échelle du site ( /en/…, /fr/… ), vous pouvez également configurer
[i18n] dans bext.config.toml (la capacité Rust). Ce module est le chemin dans le code pour la traduction des chaînes et pour la détection personnalisée/à l'échelle de la page.
Essayez-le#
Le démo i18n en direct bascule entre en/fr/es/ja avec interpolation et pluralisation en direct. Source dans
sites/demo/src/app/examples/i18n/page.tsx.
Voir aussi#
- I18n — la capacité Rust + le routage
bext.config.toml. - Validation — localisez les messages de validation via les options
{ required, invalid }. - Boîte à outils de candidature — le reste de la couche d'application TypeScript.