Tác giả:
    Ngày tạo:2026-09-19Cập nhật lần cuối:2026-09-19

    Tài liệu Middleware Astro onRequest

    Middleware onRequest từ astro-intlayer/middleware giải quyết ngôn ngữ của mỗi yêu cầu HTTP đến và điền vào Astro.locals.intlayer.

    Khi bạn đăng ký tích hợp intlayer() trong astro.config.mjs, middleware này sẽ được tự động đưa vào. Bạn chỉ cần nhập trực tiếp nếu bạn đang kết hợp thủ công middleware của Astro bằng sequence(...).

    Cách sử dụng

    src/middleware.ts
    import { onRequest as intlayer } from "astro-intlayer/middleware";
    import { sequence } from "astro:middleware";
    
    export const onRequest = sequence(intlayer, async (context, next) => {
      // Truy cập ngôn ngữ đã được giải quyết trong middleware tùy chỉnh của bạn
      const { locale } = context.locals.intlayer;
      console.log(`Xử lý yêu cầu cho ngôn ngữ: ${locale}`);
    
      return next();
    });
    

    Mô tả chi tiết

    Middleware thực hiện các tác vụ sau:

    1. Phát hiện ngôn ngữ:
      • URL: Phân tích tiền tố đường dẫn URL hoặc tham số truy vấn ?locale= (trừ khi routing.mode được đặt thành no-prefix).
      • Cookies / Headers: Kiểm tra cookie ngôn ngữ đã lưu hoặc giá trị header tùy chỉnh.
      • Accept-Language: Sử dụng tùy chọn ngôn ngữ của trình duyệt nếu không tìm thấy cài đặt trước đó.
      • Đối với các trang được prerender (context.isPrerendered), ngôn ngữ được trích xuất nghiêm ngặt từ URL để tránh cảnh báo khi build trong Astro.
    2. Điền Context: Điền vào Astro.locals.intlayer với:
      • locale: Ngôn ngữ đã được giải quyết.
      • defaultLocale: Ngôn ngữ dự phòng mặc định.
      • availableLocales: Mảng các ngôn ngữ đã được cấu hình.
    3. Phạm vi AsyncLocalStorage: Bao bọc quá trình xử lý yêu cầu tiếp theo trong phạm vi AsyncLocalStorage, cho phép useIntlayer(), useDictionary()useLocale() truy cập trạng thái yêu cầu mà không cần truyền tham số.

    Kiểu IntlayerLocals

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

    Tài liệu liên quan