Author:
    Creation:2026-09-19Last update:2026-09-19

    onRequest Astro рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкреНрд░рд▓реЗрдЦрди

    astro-intlayer/middleware рдХрд╛ onRequest рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкреНрд░рддреНрдпреЗрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд▓реЛрдХреЗрд▓ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ Astro.locals.intlayer рдХреЛ рднрд░рддрд╛ рд╣реИред

    рдЬрдм рдЖрдк astro.config.mjs рдореЗрдВ intlayer() рдПрдХреАрдХрд░рдг рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрднреА рд╕реАрдзреЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк sequence(...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ Astro рдорд┐рдбрд▓рд╡реЗрдпрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВред

    рдЙрдкрдпреЛрдЧ

    src/middleware.ts
    import { onRequest as intlayer } from "astro-intlayer/middleware";
    import { sequence } from "astro:middleware";
    
    export const onRequest = sequence(intlayer, async (context, next) => {
      // рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рд╣рд▓ рдХрд┐рдП рдЧрдП рд▓реЛрдХреЗрд▓ рддрдХ рдкрд╣реБрдБрдЪреЗрдВ
      const { locale } = context.locals.intlayer;
      console.log(`рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╕рдВрднрд╛рд▓рдирд╛: ${locale}`);
    
      return next();
    });
    

    рд╡рд┐рд╡рд░рдг

    рдорд┐рдбрд▓рд╡реЗрдпрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

    1. рд▓реЛрдХреЗрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛:
      • URL: URL рдкрде рдЙрдкрд╕рд░реНрдЧ рдпрд╛ ?locale= рдЦреЛрдЬ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ routing.mode no-prefix рдкрд░ рд╕реЗрдЯ рди рд╣реЛ)ред
      • рдХреБрдХреАрдЬрд╝ / рд╣реЗрдбрд░: рд╕рд╣реЗрдЬреЗ рдЧрдП рд▓реЛрдХреЗрд▓ рдХреБрдХреАрдЬрд╝ рдпрд╛ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдорд╛рдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред
      • Accept-Language: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рд╡рд╛рд░реНрддрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред
      • рдкреНрд░реА-рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреЗрдЬреЛрдВ (context.isPrerendered) рдХреЗ рд▓рд┐рдП, Astro рдмрд┐рд▓реНрдб рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдХреЗрд▓ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ URL рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
    2. рд╕рдВрджрд░реНрдн рднрд░рдирд╛: Astro.locals.intlayer рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реИ:
      • locale: рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓реЛрдХреЗрд▓ред
      • defaultLocale: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЙрд▓рдмреИрдХ рд▓реЛрдХреЗрд▓ред
      • availableLocales: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд▓реЛрдХреЗрд▓реНрд╕ рдХреА рд╕реВрдЪреАред
    3. AsyncLocalStorage рд╕реНрдХреЛрдк: рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ AsyncLocalStorage рд╕реНрдХреЛрдк рдХреЗ рднреАрддрд░ рд▓рдкреЗрдЯрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ useIntlayer(), useDictionary(), рдФрд░ useLocale() рдХреЛ рддрд░реНрдХ рдкрд╛рд╕ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

    IntlayerLocals рдкреНрд░рдХрд╛рд░

    ts
    export type IntlayerLocals = {
      locale: DeclaredLocales;
      defaultLocale: DeclaredLocales;
      availableLocales: DeclaredLocales[];
    };
    

    рд╕рдВрдмрдВрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝