क्या मैं Intlayer को global provider के बिना उपयोग कर सकता हूँ?

    हाँ। getIntlayer और getDictionary साधारण functions हैं जिन्हें किसी provider की ज़रूरत नहीं होती, और useIntlayer भी provider के बाहर काम करता है।

    ts
    import { getIntlayer } from "intlayer";
    
    const { title } = getIntlayer("app"); // कोई locale नहीं दिया गया
    

    कौन सा locale उपयोग होता है?

    स्पष्ट रूप से दिया गया locale हमेशा प्राथमिकता पाता है। अन्यथा, locale इस क्रम में resolve होता है:

    1. वर्तमान request का locale, server पर, जब कोई Intlayer integration उसे संभालता है: express-intlayer, fastify-intlayer, hono-intlayer, adonis-intlayer, elysia-intlayer, remix-intlayer और astro-intlayer के middlewares, या React Server Components में IntlayerProvider।
    2. browser में संग्रहीत locale (cookie, localStorage, sessionStorage), जिसे आपका locale switcher सहेजता है।
    3. आपके configuration का defaultLocale।

    हर request अपनी cookies और headers से resolve होती है, और उसी request के scope में रखी जाती है। अलग-अलग locale वाले एक साथ आने वाले users कभी locale साझा नहीं करते।

    यही resolution getDictionary पर, build optimization द्वारा दोबारा लिखे गए calls पर, और provider के बाहर render किए गए useIntlayer और useDictionaryDynamic पर भी लागू होता है।

    Next.js Server Components

    Next.js में, request का locale केवल asynchronous रूप से, headers() और cookies() के ज़रिए पढ़ा जा सकता है। getIntlayerAsync का उपयोग करें, जो next-intlayer/server के getLocale() की तरह ही उसकी प्रतीक्षा करता है:

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

    headers पढ़ने से route dynamic rendering में चला जाता है। जब IntlayerProvider पहले से locale देता है, तो headers नहीं पढ़े जाते और route static रहता है।

    Performance: provider के साथ या बिना

    content वही है। अंतर reactivity और rendering cost का है।

    provider के साथprovider के बिना
    locale बदलनाcomponents बिना reload के वहीं re-render होते हैंकुछ भी re-render नहीं होता; नया locale अगले call पर दिखता है (navigation, reload)
    एक read की costcontext lookup और locale का subscriptionएक memoized function call, एक ही key + locale के लिए वही object
    एक बदलाव की costहर consumer का re-renderकोई नहीं
    server renderingserver और browser एक ही locale render करते हैंrequest integration के बाहर, server defaultLocale और browser संग्रहीत locale render करता है: संभावित hydration mismatch
    Bundleprovider का codeसंग्रहीत locale पढ़ने के लिए लगभग 100 bytes (gzip), अगले बदलाव तक cache

    उन interactive apps के लिए provider रखें जो locale वहीं बदलते हैं या server पर render करते हैं। backends, scripts, URL से locale लेने वाले static pages (उसे स्पष्ट रूप से पास करें), या content को एक बार पढ़ने वाले code के लिए provider के बिना काम करें।

    अधिक जानकारी के लिए getIntlayer देखें।