Posso usare Intlayer senza un provider globale?
Sì. getIntlayer e getDictionary sono semplici funzioni che non richiedono alcun provider, e anche useIntlayer funziona fuori da un provider.
Copiare il codice nella clipboard
Quale locale viene usata?
Una locale passata esplicitamente ha sempre la precedenza. Altrimenti, la locale viene risolta in questo ordine:
- La locale della richiesta corrente, sul server, quando un'integrazione Intlayer la gestisce: i middleware di
express-intlayer,fastify-intlayer,hono-intlayer,adonis-intlayer,elysia-intlayer,remix-intlayereastro-intlayer, oIntlayerProvidernei React Server Components. - La locale salvata nel browser (cookie,
localStorage,sessionStorage), quella che il tuo selettore di lingua rende persistente. - La
defaultLocaledella tua configurazione.
Ogni richiesta viene risolta dai propri cookie e header, e conservata in un contesto dedicato alla richiesta. Utenti simultanei con locale diverse non condividono mai la locale.
La stessa risoluzione si applica a getDictionary, alle chiamate riscritte dall'ottimizzazione del build, e a useIntlayer e useDictionaryDynamic renderizzati fuori da un provider.
Server Components di Next.js
Su Next.js, la locale della richiesta è leggibile solo in modo asincrono, tramite headers() e cookies(). Usa getIntlayerAsync, che la attende come fa getLocale() di next-intlayer/server:
Copiare il codice nella clipboard
Leggere gli header porta la route al rendering dinamico. Quando IntlayerProvider fornisce già la locale, gli header non vengono letti e la route resta statica.
Performance: con o senza provider
Il contenuto è lo stesso. La differenza riguarda la reattività e il costo di rendering.
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Con un provider | Senza provider | |
|---|---|---|
| Cambio di locale | I componenti vengono ri-renderizzati sul posto, senza ricaricare | Nulla viene ri-renderizzato; la nuova locale compare alla chiamata successiva (navigazione, ricaricamento) |
| Costo di una lettura | Lettura del contesto e sottoscrizione alla locale | Una chiamata di funzione memoizzata, stesso oggetto per la stessa key + locale |
| Costo di un cambio | Nuovo rendering di ogni consumer | Nessuno |
| Rendering sul server | Server e browser renderizzano la stessa locale | Fuori da un'integrazione di richiesta, il server renderizza la defaultLocale e il browser quella salvata: possibile hydration mismatch |
| Bundle | Il codice del provider | Circa 100 byte (gzip) per leggere la locale salvata, in cache fino al cambio successivo |
Tieni il provider per le app interattive che cambiano locale sul posto o renderizzano sul server. Fanne a meno per backend, script, pagine statiche la cui locale viene dall'URL (passala esplicitamente) o codice che legge il contenuto una sola volta.
Vedi getIntlayer per maggiori dettagli.