Czy mogę używać Intlayer bez globalnego providera?
Tak. getIntlayer i getDictionary to zwykłe funkcje, które nie potrzebują żadnego providera, a useIntlayer również działa poza nim.
Skopiuj kod do schowka
Które locale jest używane?
Jawnie przekazane locale zawsze ma pierwszeństwo. W przeciwnym razie locale jest rozwiązywane w tej kolejności:
- Locale bieżącego żądania, na serwerze, gdy obsługuje je integracja Intlayer: middleware
express-intlayer,fastify-intlayer,hono-intlayer,adonis-intlayer,elysia-intlayer,remix-intlayeriastro-intlayerlubIntlayerProviderw React Server Components. - Locale zapisane w przeglądarce (cookie,
localStorage,sessionStorage), które utrwala Twój przełącznik języka. defaultLocalez Twojej konfiguracji.
Każde żądanie jest rozwiązywane na podstawie własnych cookies i nagłówków i przechowywane w zakresie tego żądania. Równocześni użytkownicy z różnymi locale nigdy nie współdzielą locale.
To samo rozwiązywanie dotyczy getDictionary, wywołań przepisanych przez optymalizację builda oraz useIntlayer i useDictionaryDynamic renderowanych poza providerem.
Server Components w Next.js
W Next.js locale żądania można odczytać tylko asynchronicznie, przez headers() i cookies(). Użyj getIntlayerAsync, która czeka na nie tak samo jak getLocale() z next-intlayer/server:
Skopiuj kod do schowka
Odczyt nagłówków przełącza trasę na renderowanie dynamiczne. Gdy IntlayerProvider już dostarcza locale, nagłówki nie są odczytywane, a trasa pozostaje statyczna.
Wydajność: z providerem czy bez
Treść jest taka sama. Różnica dotyczy reaktywności i kosztu renderowania.
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Z providerem | Bez providera | |
|---|---|---|
| Zmiana locale | Komponenty renderują się ponownie na miejscu, bez przeładowania | Nic nie renderuje się ponownie; nowe locale pojawia się przy następnym wywołaniu (nawigacja, przeładowanie) |
| Koszt odczytu | Odczyt kontekstu i subskrypcja locale | Memoizowane wywołanie funkcji, ten sam obiekt dla tego samego key + locale |
| Koszt zmiany | Ponowne renderowanie każdego konsumenta | Brak |
| Renderowanie na serwerze | Serwer i przeglądarka renderują to samo locale | Poza integracją żądań serwer renderuje defaultLocale, a przeglądarka zapisane locale: możliwy hydration mismatch |
| Bundle | Kod providera | Około 100 bajtów (gzip) na odczyt zapisanego locale, cache'owane do następnej zmiany |
Zostaw provider w interaktywnych aplikacjach, które zmieniają locale na miejscu lub renderują na serwerze. Zrezygnuj z niego w backendach, skryptach, stronach statycznych, których locale pochodzi z URL (przekaż je jawnie), lub w kodzie, który odczytuje treść tylko raz.
Więcej szczegółów w getIntlayer.