Posso usar o Intlayer sem um provider global?
Sim. getIntlayer e getDictionary são funções simples que não precisam de nenhum provider, e useIntlayer também funciona fora de um.
Copiar o código para a área de transferência
Qual locale é usado?
Um locale passado explicitamente sempre tem prioridade. Caso contrário, o locale é resolvido nesta ordem:
- O locale da requisição atual, no servidor, quando uma integração do Intlayer a trata: os middlewares de
express-intlayer,fastify-intlayer,hono-intlayer,adonis-intlayer,elysia-intlayer,remix-intlayereastro-intlayer, ou oIntlayerProvidernos React Server Components. - O locale armazenado no navegador (cookie,
localStorage,sessionStorage), aquele que o seu seletor de idioma persiste. - O
defaultLocaleda sua configuração.
Cada requisição é resolvida a partir dos seus próprios cookies e headers, e mantida em um escopo próprio da requisição. Usuários simultâneos com locales diferentes nunca compartilham o locale.
A mesma resolução se aplica a getDictionary, às chamadas reescritas pela otimização do build, e a useIntlayer e useDictionaryDynamic renderizados fora de um provider.
Server Components do Next.js
No Next.js, o locale da requisição só pode ser lido de forma assíncrona, por headers() e cookies(). Use getIntlayerAsync, que o aguarda da mesma forma que getLocale() de next-intlayer/server:
Copiar o código para a área de transferência
Ler os headers faz a rota passar para renderização dinâmica. Quando o IntlayerProvider já fornece o locale, os headers não são lidos e a rota continua estática.
Performance: com ou sem provider
O conteúdo é o mesmo. A diferença está na reatividade e no custo de renderização.
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Com um provider | Sem provider | |
|---|---|---|
| Troca de locale | Os componentes são renderizados novamente no lugar, sem recarregar | Nada é renderizado novamente; o novo locale aparece na próxima chamada (navegação, recarregamento) |
| Custo de uma leitura | Leitura do contexto e inscrição no locale | Uma chamada de função memoizada, mesmo objeto para a mesma key + locale |
| Custo de uma troca | Nova renderização de cada consumidor | Nenhum |
| Renderização no servidor | O servidor e o navegador renderizam o mesmo locale | Fora de uma integração de requisição, o servidor renderiza o defaultLocale e o navegador o armazenado: possível hydration mismatch |
| Bundle | O código do provider | Cerca de 100 bytes (gzip) para ler o locale armazenado, em cache até a próxima troca |
Mantenha o provider em apps interativos que trocam de locale no lugar ou renderizam no servidor. Dispense-o em backends, scripts, páginas estáticas cujo locale vem da URL (passe-o explicitamente) ou código que lê o conteúdo uma única vez.
Veja getIntlayer para mais detalhes.