¿Puedo usar Intlayer sin un provider global?

    Sí. getIntlayer y getDictionary son funciones simples que no necesitan ningún provider, y useIntlayer también funciona fuera de uno.

    ts
    import { getIntlayer } from "intlayer";
    
    const { title } = getIntlayer("app"); // Sin locale
    

    ¿Qué locale se usa?

    Una locale pasada explícitamente siempre tiene prioridad. Si no, la locale se resuelve en este orden:

    1. La locale de la solicitud en curso, en el servidor, cuando una integración de Intlayer la gestiona: los middlewares de express-intlayer, fastify-intlayer, hono-intlayer, adonis-intlayer, elysia-intlayer, remix-intlayer y astro-intlayer, o IntlayerProvider en los React Server Components.
    2. La locale almacenada en el navegador (cookie, localStorage, sessionStorage), la que persiste tu selector de idioma.
    3. La defaultLocale de tu configuración.

    Cada solicitud se resuelve a partir de sus propias cookies y headers, y se conserva en un ámbito propio de la solicitud. Usuarios simultáneos con locales distintas nunca comparten locale.

    La misma resolución se aplica a getDictionary, a las llamadas reescritas por la optimización del build, y a useIntlayer y useDictionaryDynamic renderizados fuera de un provider.

    Server Components de Next.js

    En Next.js, la locale de la solicitud solo se puede leer de forma asíncrona, mediante headers() y cookies(). Usa getIntlayerAsync, que la espera igual que getLocale() de next-intlayer/server:

    tsx
    import { getIntlayerAsync } from "intlayer";
    
    export const generateMetadata = async () => {
      const { title } = await getIntlayerAsync("app"); // Locale de la solicitud
    
      return { title };
    };
    

    Leer los headers hace que la ruta pase a renderizado dinámico. Cuando IntlayerProvider ya proporciona la locale, los headers no se leen y la ruta sigue siendo estática.

    Rendimiento: con o sin provider

    El contenido es el mismo. La diferencia está en la reactividad y el coste de renderizado.

    Con un providerSin provider
    Cambio de localeLos componentes se vuelven a renderizar en el sitio, sin recargarNada se vuelve a renderizar; la nueva locale aparece en la siguiente llamada (navegación, recarga)
    Coste de una lecturaLectura del contexto y suscripción a la localeUna llamada a función memoizada, mismo objeto para la misma key + locale
    Coste de un cambioNuevo renderizado de cada consumidorNinguno
    Renderizado en servidorEl servidor y el navegador renderizan la misma localeFuera de una integración de solicitud, el servidor renderiza la defaultLocale y el navegador la almacenada: posible error de hidratación
    BundleEl código del providerUnos 100 bytes (gzip) para leer la locale almacenada, en caché hasta el siguiente cambio

    Mantén el provider en aplicaciones interactivas que cambian de locale en el sitio o renderizan en el servidor. Prescinde de él en backends, scripts, páginas estáticas cuya locale viene de la URL (pásala explícitamente) o código que lee el contenido una sola vez.

    Consulta getIntlayer para más detalles.