Автор:
    Создание:2026-06-12Последнее обновление:2026-06-12

    Динамические Записи

    Динамическая запись (dynamic record) — это файл контента, идентификация которого основана не на последовательном индексе или именованном варианте, а на произвольном наборе пар ключ-значение, объявленных в поле meta. Intlayer использует эти поля в качестве селектора во время выполнения, что позволяет адресовать записи CMS, контент конкретного пользователя или любые данные, ключи которых неизвестны во время сборки.

    Объявление динамических записей

    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;

    Использование динамических записей

    Все поля meta являются обязательными в селекторе. Опущение любого поля возвращает null и вызывает ошибку 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 гарантирует, что предоставлены как `id`, так и `userId`.
    
      if (!content) return null;
    
      return <p>{content.description}</p>;
    };

    С явным указанием локали

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

    Отсутствие поля meta — ошибка во время компиляции

    ts
    // Ошибка типа: отсутствует `userId`const content = useIntlayer("product-copy", { id: "prod_abc" });

    Режим загрузки (loading mode)

    Динамические записи обычно загружаются отложено. Установите importMode для словаря, чтобы настроить это:

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

    Подробную информацию о режимах static, dynamic и fetch см. в разделе оптимизация пакетов.

    Типичные варианты использования

    • Маркетинговые тексты для отдельных продуктов, управляемые в CMS
    • Контент конкретного пользователя или учетной записи
    • Любой контент, получаемый на основе непрозрачного runtime ID