Автор:
    Дата створення:2026-09-19Останнє оновлення:2026-09-19

    Документація middleware Astro onRequest

    Middleware onRequest з astro-intlayer/middleware визначає локаль кожного вхідного HTTP-запиту та заповнює Astro.locals.intlayer.

    Коли ви реєструєте інтеграцію intlayer() у astro.config.mjs, це middleware додається автоматично. Його потрібно імпортувати напряму лише в тому випадку, якщо ви компонуєте middleware Astro вручну за допомогою sequence(...).

    Використання

    src/middleware.ts
    import { onRequest as intlayer } from "astro-intlayer/middleware";
    import { sequence } from "astro:middleware";
    
    export const onRequest = sequence(intlayer, async (context, next) => {
      // Доступ до визначеної локалі у власному middleware
      const { locale } = context.locals.intlayer;
      console.log(`Обробка запиту для локалі: ${locale}`);
    
      return next();
    });
    

    Опис

    Middleware виконує такі завдання:

    1. Визначення локалі:
      • URL: Аналізує префікс шляху URL або параметр пошуку ?locale= (якщо routing.mode не встановлено в no-prefix).
      • Кукі / Заголовки: Перевіряє збережені кукі локалі або значення власних заголовків.
      • Accept-Language: Використовує мовні налаштування браузера за відсутності попередніх даних.
      • Для пререндерених сторінок (context.isPrerendered) локаль витягується виключно з URL-адреси, щоб уникнути попереджень збирання Astro.
    2. Заповнення контексту: Заповнює Astro.locals.intlayer наступними даними:
      • locale: Визначена локаль.
      • defaultLocale: Резервна локаль за замовчуванням.
      • availableLocales: Масив налаштованих локалей.
    3. Область AsyncLocalStorage: Обгортає подальшу обробку запиту в область AsyncLocalStorage, дозволяючи функціям useIntlayer(), useDictionary() та useLocale() отримувати стан запиту без передачі аргументів.

    Тип IntlayerLocals

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

    Пов'язана документація