Intlayer'ı global bir provider olmadan kullanabilir miyim?
Evet. getIntlayer ve getDictionary herhangi bir provider gerektirmeyen basit fonksiyonlardır ve useIntlayer da bir provider dışında çalışır.
Kodu panoya kopyala
Hangi locale kullanılır?
Açıkça verilen bir locale her zaman önceliklidir. Aksi halde locale şu sırayla çözümlenir:
- Geçerli isteğin locale'i, sunucuda, isteği bir Intlayer entegrasyonu işlediğinde:
express-intlayer,fastify-intlayer,hono-intlayer,adonis-intlayer,elysia-intlayer,remix-intlayerveastro-intlayermiddleware'leri veya React Server Components içindekiIntlayerProvider. - Tarayıcıda saklanan locale (cookie,
localStorage,sessionStorage), yani dil değiştiricinizin kaydettiği locale. - Yapılandırmanızdaki
defaultLocale.
Her istek kendi cookie'lerinden ve header'larından çözümlenir ve isteğe özel bir kapsamda tutulur. Farklı locale'lere sahip eşzamanlı kullanıcılar asla aynı locale'i paylaşmaz.
Aynı çözümleme getDictionary için, build optimizasyonunun yeniden yazdığı çağrılar için ve bir provider dışında render edilen useIntlayer ile useDictionaryDynamic için de geçerlidir.
Next.js Server Components
Next.js'te isteğin locale'i yalnızca asenkron olarak, headers() ve cookies() üzerinden okunabilir. next-intlayer/server içindeki getLocale() gibi onu bekleyen getIntlayerAsync fonksiyonunu kullanın:
Kodu panoya kopyala
Header'ları okumak route'u dinamik render'a geçirir. IntlayerProvider locale'i zaten sağlıyorsa header'lar okunmaz ve route statik kalır.
Performans: provider ile veya provider olmadan
İçerik aynıdır. Fark, reaktivite ve render maliyetindedir.
Tüm veri içeriğini net bir şekilde görmek için tabloyu modalde açın
| Provider ile | Provider olmadan | |
|---|---|---|
| Locale değişikliği | Bileşenler sayfa yenilenmeden yerinde yeniden render edilir | Hiçbir şey yeniden render edilmez; yeni locale bir sonraki çağrıda görünür (navigasyon, yenileme) |
| Bir okumanın maliyeti | Context okuması ve locale'e abonelik | Memoize edilmiş bir fonksiyon çağrısı, aynı key + locale için aynı nesne |
| Bir değişikliğin maliyeti | Her tüketicinin yeniden render edilmesi | Yok |
| Sunucu render'ı | Sunucu ve tarayıcı aynı locale'i render eder | Bir istek entegrasyonu dışında sunucu defaultLocale'i, tarayıcı ise saklanan locale'i render eder: olası hydration mismatch |
| Bundle | Provider kodu | Saklanan locale'i okumak için yaklaşık 100 bayt (gzip), bir sonraki değişikliğe kadar önbellekte |
Locale'i yerinde değiştiren veya sunucuda render eden etkileşimli uygulamalarda provider'ı koruyun. Backend'lerde, script'lerde, locale'i URL'den gelen statik sayfalarda (açıkça verin) veya içeriği bir kez okuyan kodda provider olmadan ilerleyin.
Daha fazla ayrıntı için getIntlayer sayfasına bakın.