Bisakah saya menggunakan Intlayer tanpa provider global?

    Bisa. getIntlayer dan getDictionary adalah fungsi biasa yang tidak memerlukan provider apa pun, dan useIntlayer juga berfungsi di luar provider.

    ts
    import { getIntlayer } from "intlayer";
    
    const { title } = getIntlayer("app"); // Tidak ada locale yang diberikan
    

    Locale mana yang digunakan?

    Locale yang diberikan secara eksplisit selalu diutamakan. Jika tidak, locale di-resolve dengan urutan berikut:

    1. Locale dari request saat ini, di server, ketika sebuah integrasi Intlayer menanganinya: middleware dari express-intlayer, fastify-intlayer, hono-intlayer, adonis-intlayer, elysia-intlayer, remix-intlayer, dan astro-intlayer, atau IntlayerProvider di React Server Components.
    2. Locale yang tersimpan di browser (cookie, localStorage, sessionStorage), yaitu yang disimpan oleh locale switcher Anda.
    3. defaultLocale dari konfigurasi Anda.

    Setiap request di-resolve dari cookies dan headers miliknya sendiri, dan disimpan dalam scope khusus request tersebut. Pengguna yang bersamaan dengan locale berbeda tidak pernah berbagi locale.

    Resolusi yang sama berlaku untuk getDictionary, untuk pemanggilan yang ditulis ulang oleh optimasi build, serta untuk useIntlayer dan useDictionaryDynamic yang di-render di luar provider.

    Server Components Next.js

    Di Next.js, locale request hanya bisa dibaca secara asinkron, melalui headers() dan cookies(). Gunakan getIntlayerAsync, yang menunggunya dengan cara yang sama seperti getLocale() dari next-intlayer/server:

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

    Membaca headers membuat route beralih ke rendering dinamis. Ketika IntlayerProvider sudah menyediakan locale, headers tidak dibaca dan route tetap statis.

    Performa: dengan atau tanpa provider

    Kontennya sama. Perbedaannya ada pada reaktivitas dan biaya rendering.

    Dengan providerTanpa provider
    Pergantian localeKomponen di-render ulang di tempat, tanpa reloadTidak ada yang di-render ulang; locale baru muncul pada pemanggilan berikutnya (navigasi, reload)
    Biaya pembacaanLookup context dan langganan ke localePemanggilan fungsi yang di-memoize, objek yang sama untuk key + locale yang sama
    Biaya pergantianRender ulang setiap consumerTidak ada
    Rendering di serverServer dan browser me-render locale yang samaDi luar integrasi request, server me-render defaultLocale dan browser locale tersimpan: kemungkinan hydration mismatch
    BundleKode providerSekitar 100 byte (gzip) untuk membaca locale tersimpan, di-cache hingga perubahan berikutnya

    Pertahankan provider untuk aplikasi interaktif yang mengganti locale di tempat atau me-render di server. Tidak perlu provider untuk backend, script, halaman statis yang locale-nya berasal dari URL (berikan secara eksplisit), atau kode yang membaca konten sekali saja.

    Lihat getIntlayer untuk detail lebih lanjut.