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.

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

    Hangi locale kullanılır?

    Açıkça verilen bir locale her zaman önceliklidir. Aksi halde locale şu sırayla çözümlenir:

    1. 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-intlayer ve astro-intlayer middleware'leri veya React Server Components içindeki IntlayerProvider.
    2. Tarayıcıda saklanan locale (cookie, localStorage, sessionStorage), yani dil değiştiricinizin kaydettiği locale.
    3. 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:

    tsx
    import { getIntlayerAsync } from "intlayer";
    
    export const generateMetadata = async () => {
      const { title } = await getIntlayerAsync("app"); // İsteğin locale'i
    
      return { title };
    };
    

    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.

    Provider ileProvider olmadan
    Locale değişikliğiBileşenler sayfa yenilenmeden yerinde yeniden render edilirHiçbir şey yeniden render edilmez; yeni locale bir sonraki çağrıda görünür (navigasyon, yenileme)
    Bir okumanın maliyetiContext okuması ve locale'e abonelikMemoize edilmiş bir fonksiyon çağrısı, aynı key + locale için aynı nesne
    Bir değişikliğin maliyetiHer tüketicinin yeniden render edilmesiYok
    Sunucu render'ıSunucu ve tarayıcı aynı locale'i render ederBir istek entegrasyonu dışında sunucu defaultLocale'i, tarayıcı ise saklanan locale'i render eder: olası hydration mismatch
    BundleProvider koduSaklanan 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.