Posez votre question et obtenez un résumé du document en referencant cette page et le Provider AI de votre choix
Historique des versions
- "Initialisation de la documentation"v9.4.024/08/2026
Le contenu de cette page a été traduit à l'aide d'une IA.
Voir la dernière version du contenu original en anglaisSi vous avez une idée d’amélioration pour améliorer cette documentation, n’hésitez pas à contribuer en submitant une pull request sur GitHub.
Lien GitHub de la documentationCopier le Markdown du doc dans le presse-papiers
Documentation du plugin intlayer pour Elysia
Le plugin intlayer pour Elysia détecte la locale de l'utilisateur et injecte un objet intlayer dans le contexte de route. Il permet également l'utilisation des fonctions globales de traduction dans le contexte de la requête.
Utilisation
Copier le code dans le presse-papiers
Le plugin enregistre son contexte via underiveglobal, que Elysia type commePartial<{ intlayer: IntlayerContext }>. La valeur est toujours présente à l'exécution pour les routes enregistrées après.use(intlayer()), utilisez donc l'assertion non-nulle (intlayer!.t) — ou l'optional chaining — pour satisfaire TypeScript en modestrict.
Les mêmes helpers sont disponibles en tant qu'exports autonomes, afin de pouvoir les appeler sans déstructurer le contexte de route :
Copier le code dans le presse-papiers
Description
Le plugin effectue les opérations suivantes :
- Détection de la locale : Il lit la locale explicitement définie par le client depuis le storage (cookie, header), puis se rabat sur la locale négociée à partir du header
Accept-Language. - Injection dans le contexte : Il ajoute une propriété
intlayerau contexte de route Elysia (voir le tableau Contexte de la route ci-dessous). - Gestion du contexte : Il utilise
AsyncLocalStoragepour gérer un contexte asynchrone, permettant aux fonctions globales d'Intlayer (t,getIntlayer,getDictionary) d'accéder à la locale spécifique à la requête sans avoir à transmettre l'objet de contexte. - Préparation des dictionnaires : Il appelle
prepareIntlayerà la création du plugin, afin que les dictionnaires soient construits au démarrage de l'application.
Contexte de la route
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Propriété | Type | Description |
|---|---|---|
locale | Locale | La locale à utiliser pour cette requête, locale_storage étant prioritaire sur locale_detected. |
locale_storage | Locale (optionnel) | La locale explicitement demandée par le client via un cookie ou un header. |
locale_detected | Locale | La locale négociée à partir des headers de la requête. |
defaultLocale | Locale | La locale configurée comme fallback dans intlayer.config.ts. |
t | TranslateFunction | Une fonction de traduction. |
getIntlayer | typeof getIntlayer | Une fonction pour récupérer les dictionnaires par clé. |
getDictionary | typeof getDictionary | Une fonction pour traiter les objets dictionnaire. |
Contrairement aux plugins Intlayer basés sur Node,elysia-intlayers'appuie surAsyncLocalStorageplutôt que surcls-hooked, carcls-hookeddépend deasync_hooks.createHook, que Bun n'implémente pas.
Le contexte de requête est libéré une fois la réponse mappée, afin que les helpers autonomes ne se résolvent jamais sur une requête déjà terminée. Lorsqu'ils sont appelés en dehors d'une requête gérée par le plugin, ils se rabattent sur la locale par défaut configurée.
Ordre de résolution de la locale
Par défaut, le plugin résout la locale dans cet ordre :
- Le cookie
INTLAYER_LOCALE. - Le header
x-intlayer-locale. - La négociation du header
Accept-Language. - La
defaultLocaleconfigurée.
Copier le code dans le presse-papiers
Configuration
Le plugin lit votre fichier intlayer.config.ts. Vous pouvez personnaliser le cookie et le header utilisés pour la détection de la locale :
Copier le code dans le presse-papiers
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
defaultLocale: Locales.ENGLISH,
},
routing: {
storage: [
{ type: "header", name: "my-locale-header" },
{ type: "cookie", name: "my-locale-cookie" },
],
},
};
export default config;
Pour plus d'informations sur la configuration, consultez la documentation de configuration.
