האם אוכל להשתמש ב-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 שלה, ונשמרת בטווח (scope) ייעודי לכל בקשה. משתמשים בו-זמניים בעלי locales שונים לעולם אינם חולקים את אותו ה-locale.
אותו סדר פענוח חל על getDictionary, על קריאות ששוכתבו על ידי אופטימיזציית הבנייה (build optimization), ועל useIntlayer ו-useDictionaryDynamic המרונדרים מחוץ ל-provider.
ה-formatters (number, date, list…) וה-hooks שלהם (useNumber, useDate, useList…) פועלים לפי אותו סדר כאשר לא מועבר locale.
רכיבי שרת ב-Next.js (Server Components)
ב-Next.js, ניתן לקרוא את ה-locale של הבקשה רק באופן אסינכרוני, דרך headers() ו-cookies(). השתמש ב-getIntlayerAsync, הממתין לו באותו אופן שבו getLocale() מתוך next-intlayer/server פועל:
העתקת הקוד ללוח
קריאת ה-headers מעבירה את הנתיב למצב רינדור דינמי (dynamic rendering). כאשר IntlayerProvider כבר מספק את ה-locale, ה-headers אינן נקראות והנתיב נשאר סטטי.
ביצועים: עם או בלי provider
התוכן זהה. ההבדל הוא בתגובתיות (reactivity) ובעלות הרינדור.
פתיחת הטבלה בחלון כדי לראות את כל תוכן הנתונים בבירור
| עם provider | ללא provider | |
|---|---|---|
| החלפת locale | רכיבים מתרנדרים מחדש במקומם, ללא רענון עמוד | שום דבר אינו מתרנדר מחדש; ה-locale החדש יוצג בקריאה הבאה (ניווט, רענון) |
| עלות קריאה | איתור context והרשמה (subscription) ל-locale | קריאת פונקציה עם memoization, אותו אובייקט עבור אותו key + locale |
| עלות החלפה | רינדור מחדש של כל צרכן (consumer) | ללא עלות |
| רינדור שרת | השרת והדפדפן מרנדרים את אותו ה-locale | מחוץ לאינטגרציית בקשה, השרת מרנדר את ה-defaultLocale והדפדפן את ה-locale השמור: ייתכן חוסר התאמה בהידרציה (hydration mismatch) |
| Bundle | קוד ה-provider | כ-100 בתים (gzipped) לקריאת ה-locale השמור, נשמר במטמון עד לשינוי ה-locale |
שמור על ה-provider עבור אפליקציות אינטראקטיביות שמחליפות locale במקום או מתרנדרות בשרת. ניתן לוותר עליו עבור backends, סקריפטים, דפים סטטיים שה-locale שלהם מגיע מתוך ה-URL (העבר אותו במפורש), או קוד שקורא את התוכן פעם אחת בלבד.
לפרטים נוספים, עיין ב-getIntlayer.