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

    Bản Ghi Động

    Một bản ghi động (dynamic record) là một tệp nội dung có danh tính không phải là một chỉ mục tuần tự hoặc một biến thể có tên, mà là một tập hợp tùy ý gồm các cặp khóa-giá trị được khai báo trong trường meta. Intlayer sử dụng các trường đó làm bộ chọn tại runtime, giúp có thể định địa chỉ các bản ghi CMS, nội dung dành riêng cho người dùng hoặc bất kỳ nội dung nào có khóa không được biết tại thời điểm build.

    Khai báo các bản ghi động

    product-copy.abc.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const dictionary = {
      key: "product-copy",
      meta: {
        id: "prod_abc",
        userId: "user_123",
      },
      content: {
        name: t({ en: "Widget Pro", fr: "Widget Pro" }),
        description: t({ en: "The best widget.", fr: "Le meilleur widget." }),
      },
    } satisfies Dictionary;
    
    export default dictionary;
    product-copy.abcd.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const dictionary = {
      key: "product-copy",
      meta: {
        id: "prod_abcd",
        userId: "user_123",
      },
      content: {
        name: t({ en: "Widget Lite", fr: "Widget Lite" }),
        description: t({ en: "A lighter option.", fr: "Une option plus légère." }),
      },
    } satisfies Dictionary;
    
    export default dictionary;

    Sử dụng bản ghi động

    Tất cả các trường meta đều bắt buộc trong bộ chọn. Việc bỏ qua bất kỳ trường nào sẽ trả về null và gây ra lỗi TypeScript.

    ProductCopy.tsx
    import { useIntlayer } from "react-intlayer";
    
    export const ProductCopy = ({
      productId,
      userId,
    }: {
      productId: string;
      userId: string;
    }) => {
      const content = useIntlayer("product-copy", { id: productId, userId });
      // TypeScript đảm bảo rằng cả `id` và `userId` đều được cung cấp.
    
      if (!content) return null;
    
      return <p>{content.description}</p>;
    };

    Với ngôn ngữ rõ ràng

    tsx
    const content = useIntlayer("product-copy", {  id: "prod_abc",  userId: "user_123",  locale: "vi",});

    Thiếu trường meta — lỗi compile-time

    ts
    // Lỗi kiểu dữ liệu: thiếu `userId`const content = useIntlayer("product-copy", { id: "prod_abc" });

    Chế độ tải (loading mode)

    Các bản ghi động thường được tải lười (lazy loaded). Hãy thiết lập importMode trên từ điển để kiểm soát điều này:

    ts
    const dictionary = {
      key: "product-copy",
      importMode: "fetch", // hoặc "dynamic"
      meta: { id: "prod_abc", userId: "user_123" },
      content: { … },
    } satisfies Dictionary;
    
    export default dictionary;

    Xem tối ưu hóa gói bundle để biết thêm chi tiết về chế độ static, dynamicfetch.

    Các trường hợp sử dụng điển hình

    • Nội dung tiếp thị trên mỗi sản phẩm được quản lý trong CMS
    • Nội dung dành riêng cho người dùng hoặc tài khoản cụ thể
    • Bất kỳ nội dung nào được xác định bằng một ID runtime ẩn