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.
Salin kode ke clipboard
Locale mana yang digunakan?
Locale yang diberikan secara eksplisit selalu diutamakan. Jika tidak, locale di-resolve dengan urutan berikut:
- 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, danastro-intlayer, atauIntlayerProviderdi React Server Components. - Locale yang tersimpan di browser (cookie,
localStorage,sessionStorage), yaitu yang disimpan oleh locale switcher Anda. defaultLocaledari 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:
Salin kode ke clipboard
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.
Buka tabel dalam modal untuk melihat semua isi data dengan jelas
| Dengan provider | Tanpa provider | |
|---|---|---|
| Pergantian locale | Komponen di-render ulang di tempat, tanpa reload | Tidak ada yang di-render ulang; locale baru muncul pada pemanggilan berikutnya (navigasi, reload) |
| Biaya pembacaan | Lookup context dan langganan ke locale | Pemanggilan fungsi yang di-memoize, objek yang sama untuk key + locale yang sama |
| Biaya pergantian | Render ulang setiap consumer | Tidak ada |
| Rendering di server | Server dan browser me-render locale yang sama | Di luar integrasi request, server me-render defaultLocale dan browser locale tersimpan: kemungkinan hydration mismatch |
| Bundle | Kode provider | Sekitar 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.