Kann ich Intlayer ohne globalen Provider verwenden?
Ja. getIntlayer und getDictionary sind einfache Funktionen, die keinen Provider benötigen, und useIntlayer funktioniert auch außerhalb eines Providers.
Kopieren Sie den Code in die Zwischenablage
Welche Locale wird verwendet?
Eine explizit übergebene Locale hat immer Vorrang. Andernfalls wird die Locale in dieser Reihenfolge aufgelöst:
- Die Locale der aktuellen Anfrage, auf dem Server, wenn eine Intlayer-Integration sie verarbeitet: die Middlewares von
express-intlayer,fastify-intlayer,hono-intlayer,adonis-intlayer,elysia-intlayer,remix-intlayerundastro-intlayeroderIntlayerProviderin React Server Components. - Die im Browser gespeicherte Locale (Cookie,
localStorage,sessionStorage), die dein Sprachumschalter speichert. - Die
defaultLocaledeiner Konfiguration.
Jede Anfrage wird aus ihren eigenen Cookies und Headern aufgelöst und in einem anfragespezifischen Kontext gehalten. Gleichzeitige Nutzer mit unterschiedlichen Locales teilen sich nie eine Locale.
Dieselbe Auflösung gilt für getDictionary, für die von der Build-Optimierung umgeschriebenen Aufrufe sowie für useIntlayer und useDictionaryDynamic, wenn sie außerhalb eines Providers gerendert werden.
Next.js Server Components
In Next.js ist die Locale der Anfrage nur asynchron lesbar, über headers() und cookies(). Verwende getIntlayerAsync, das auf sie genauso wartet wie getLocale() aus next-intlayer/server:
Kopieren Sie den Code in die Zwischenablage
Das Lesen der Header schaltet die Route auf dynamisches Rendering um. Stellt IntlayerProvider die Locale bereits bereit, werden die Header nicht gelesen und die Route bleibt statisch.
Performance: mit oder ohne Provider
Der Inhalt ist derselbe. Der Unterschied betrifft Reaktivität und Rendering-Kosten.
Tabelle in einem Modal öffnen, um alle Daten übersichtlich anzuzeigen
| Mit Provider | Ohne Provider | |
|---|---|---|
| Locale-Wechsel | Komponenten werden direkt neu gerendert, ohne Neuladen | Nichts wird neu gerendert; die neue Locale erscheint beim nächsten Aufruf (Navigation, Neuladen) |
| Kosten eines Lesezugriffs | Kontextzugriff und Abonnement der Locale | Ein memoisierter Funktionsaufruf, dasselbe Objekt für dieselbe key + locale |
| Kosten eines Wechsels | Neues Rendern jedes Konsumenten | Keine |
| Server-Rendering | Server und Browser rendern dieselbe Locale | Außerhalb einer Anfrage-Integration rendert der Server die defaultLocale und der Browser die gespeicherte Locale: möglicher Hydration-Mismatch |
| Bundle | Der Provider-Code | Etwa 100 Byte (gzip), um die gespeicherte Locale zu lesen, zwischengespeichert bis zum nächsten Wechsel |
Behalte den Provider für interaktive Apps, die die Locale direkt wechseln oder auf dem Server rendern. Verzichte darauf bei Backends, Skripten, statischen Seiten, deren Locale aus der URL kommt (übergib sie explizit), oder Code, der Inhalte nur einmal liest.
Siehe getIntlayer für weitere Details.