Автор:
    БозданиС:2026-09-19ПослСднСС обновлСниС:2026-09-19

    ДокумСнтация ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ПО intlayer для Remix 3

    ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ПО intlayer для Remix 3 управляСт слоСм ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²ΠΎ всём вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΠΎΠ΅ Π½Π° Π²Π΅Π±-стандартах (Request ΠΈ Response), ΠΎΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ локалям (пСрСнаправлСния ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ пСрСзаписи), опрСдСляСт локаль запроса, сохраняСт Π΅Ρ‘ Π² cookie ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ создаёт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ AsyncLocalStorage, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ props ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅.

    ИспользованиС

    ЗарСгистрируйтС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ПО intlayer ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Remix 3:

    src/server.ts
    import { createRouter } from "remix/router";
    import { intlayer, useIntlayer, useLocale } from "remix-intlayer";
    
    const router = createRouter({
      middleware: [intlayer()],
    });
    
    // ΠžΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ `/`, `/fr`, `/es`, локаль опрСдСляСтся ΠΈΠ· запроса
    router.get("/", () => {
      const { title } = useIntlayer("home");
      return new Response(title);
    });
    

    ОписаниС

    ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ПО intlayer выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

    1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° словарСй: ЗапускаСт prepareIntlayer ΠΏΡ€ΠΈ стартС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС сгСнСрированныС словари Π±Ρ‹Π»ΠΈ собраны ΠΈ доступны.
    2. ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎ локалям: ΠžΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ запрос Π² соотвСтствии с настроСнной стратСгиСй ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ (prefix_always, prefix_as_needed, no_prefix):
      • ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ: Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ /about ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° ΠΏΡƒΡ‚ΡŒ с прСфиксом Π»ΠΎΠΊΠ°Π»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /fr/about), ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ПО Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚-ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ location ΠΈ Set-Cookie.
      • Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ пСрСзаписи: Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ обращаСтся ΠΊ /fr/about, URL Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ пСрСзаписываСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваш ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° совпадал с /about, Π° опрСдСлённая локаль фиксируСтся ΠΊΠ°ΠΊ fr.
      • Π›ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ псСвдонимы URL: Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° пСрСзаписи URL, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² intlayer.config.ts (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ /fr/about Π² /fr/a-propos).
    3. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΠΈ: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ локаль ΠΏΠΎ прСфиксу URL, сохранённым cookie, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ ΠΈΠ»ΠΈ прСдпочтСниям Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Accept-Language.
    4. Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ контСкста:
      • ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΠ΅Ρ‚ IntlayerState (locale, defaultLocale, availableLocales) ΠΊ RequestContext Remix ΠΏΠΎΠ΄ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Intlayer ΠΈ Π² context.intlayer.
      • ВыполняСт ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‡Π°ΡΡ‚ΡŒ запроса Π²Π½ΡƒΡ‚Ρ€ΠΈ области AsyncLocalStorage (requestStorage), Ρ‡Ρ‚ΠΎ позволяСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ useIntlayer, useDictionary ΠΈ useLocale Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ…, прСдставлСниях ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ….
    5. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅: ДобавляСт исходящиС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ cookie Π»ΠΎΠΊΠ°Π»ΠΈ ΠΊ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΌΡƒ HTTP-ΠΎΡ‚Π²Π΅Ρ‚Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

    Ѐункция intlayer ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ IntlayerMiddlewareOptions:

    ts
    import { intlayer, type IntlayerMiddlewareOptions } from "remix-intlayer";
    
    const options: IntlayerMiddlewareOptions = {
      // ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ
    };
    
    const middleware = intlayer(options);
    

    ΠŸΡ€ΡΠΌΠΎΠΉ доступ ΠΊ контСксту

    Помимо использования Ρ…ΡƒΠΊΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½ΠΎΠ΅ состояниС IntlayerState нСпосрСдствСнно ΠΈΠ· контСкста запроса Remix:

    ts
    import { Intlayer } from "remix-intlayer";
    
    router.get("/api/locale", (context) => {
      // Π§Π΅Ρ€Π΅Π· context.get()
      const state = context.get(Intlayer);
    
      // Или Ρ‡Π΅Ρ€Π΅Π· прямоС свойство context.intlayer
      const { locale } = context.intlayer;
    
      return Response.json({ locale });
    });
    

    Бвязанная докумСнтация