هل يمكنني استخدام Intlayer بدون provider عام؟

    نعم. getIntlayer وgetDictionary دوال بسيطة لا تحتاج إلى أي provider، وuseIntlayer تعمل أيضًا خارج provider.

    ts
    import { getIntlayer } from "intlayer";
    
    const { title } = getIntlayer("app"); // لم تُمرَّر أي locale
    

    أي locale تُستخدم؟

    الـ locale الممررة صراحةً لها الأولوية دائمًا. وإلا، تُحل الـ locale بهذا الترتيب:

    1. locale الطلب الحالي، على الخادم، عندما يعالجه تكامل من Intlayer: الـ middlewares الخاصة بـ express-intlayer وfastify-intlayer وhono-intlayer وadonis-intlayer وelysia-intlayer وremix-intlayer وastro-intlayer، أو IntlayerProvider في React Server Components.
    2. locale المخزنة في المتصفح (cookie، localStorage، sessionStorage)، وهي التي يحفظها مبدّل اللغة لديك.
    3. defaultLocale من إعداداتك.

    يُحل كل طلب من ملفات cookies والـ headers الخاصة به، ويُحفظ في نطاق خاص بهذا الطلب. لا يتشارك المستخدمون المتزامنون ذوو الـ locales المختلفة الـ locale أبدًا.

    ينطبق الحل نفسه على getDictionary، وعلى الاستدعاءات التي يعيد كتابتها تحسين البناء، وعلى useIntlayer وuseDictionaryDynamic عند عرضها خارج provider.

    Server Components في Next.js

    في Next.js، لا يمكن قراءة locale الطلب إلا بشكل غير متزامن، عبر headers() وcookies(). استخدم getIntlayerAsync، التي تنتظرها بنفس طريقة getLocale() من next-intlayer/server:

    tsx
    import { getIntlayerAsync } from "intlayer";
    
    export const generateMetadata = async () => {
      const { title } = await getIntlayerAsync("app"); // locale الطلب
    
      return { title };
    };
    

    تنقل قراءة الـ headers المسار إلى العرض الديناميكي. عندما يوفر IntlayerProvider الـ locale مسبقًا، لا تُقرأ الـ headers ويبقى المسار ثابتًا.

    الأداء: مع provider أو بدونه

    المحتوى نفسه. الفرق يتعلق بالتفاعلية وتكلفة العرض.

    مع providerبدون provider
    تغيير الـ localeيُعاد عرض المكونات في مكانها دون إعادة تحميللا يُعاد عرض أي شيء؛ تظهر الـ locale الجديدة في الاستدعاء التالي (تنقل، إعادة تحميل)
    تكلفة القراءةقراءة السياق والاشتراك في الـ localeاستدعاء دالة memoized، الكائن نفسه لنفس key + locale
    تكلفة التغييرإعادة عرض كل مستهلكلا شيء
    العرض على الخادميعرض الخادم والمتصفح الـ locale نفسهاخارج تكامل الطلبات، يعرض الخادم defaultLocale والمتصفح الـ locale المخزنة: hydration mismatch محتمل
    الـ Bundleكود الـ providerنحو 100 بايت (gzip) لقراءة الـ locale المخزنة، مخزنة مؤقتًا حتى التغيير التالي

    احتفظ بالـ provider للتطبيقات التفاعلية التي تغيّر الـ locale في مكانها أو تُعرض على الخادم. واستغنِ عنه في الـ backends والسكربتات والصفحات الثابتة التي تأتي الـ locale فيها من الـ URL (مرّرها صراحةً)، أو الكود الذي يقرأ المحتوى مرة واحدة.

    راجع getIntlayer لمزيد من التفاصيل.