هل يمكنني استخدام Intlayer بدون provider عام؟
نعم. getIntlayer وgetDictionary دوال بسيطة لا تحتاج إلى أي provider، وuseIntlayer تعمل أيضًا خارج provider.
نسخ الكود إلى الحافظة
أي locale تُستخدم؟
الـ locale الممررة صراحةً لها الأولوية دائمًا. وإلا، تُحل الـ locale بهذا الترتيب:
- locale الطلب الحالي، على الخادم، عندما يعالجه تكامل من Intlayer: الـ middlewares الخاصة بـ
express-intlayerوfastify-intlayerوhono-intlayerوadonis-intlayerوelysia-intlayerوremix-intlayerوastro-intlayer، أوIntlayerProviderفي React Server Components. - locale المخزنة في المتصفح (cookie،
localStorage،sessionStorage)، وهي التي يحفظها مبدّل اللغة لديك. defaultLocaleمن إعداداتك.
يُحل كل طلب من ملفات cookies والـ headers الخاصة به، ويُحفظ في نطاق خاص بهذا الطلب. لا يتشارك المستخدمون المتزامنون ذوو الـ locales المختلفة الـ locale أبدًا.
ينطبق الحل نفسه على getDictionary، وعلى الاستدعاءات التي يعيد كتابتها تحسين البناء، وعلى useIntlayer وuseDictionaryDynamic عند عرضها خارج provider.
Server Components في Next.js
في Next.js، لا يمكن قراءة locale الطلب إلا بشكل غير متزامن، عبر headers() وcookies(). استخدم getIntlayerAsync، التي تنتظرها بنفس طريقة getLocale() من next-intlayer/server:
نسخ الكود إلى الحافظة
تنقل قراءة الـ 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 لمزيد من التفاصيل.