Auteur:
    Création:2026-06-12Dernière mise à jour:2026-06-12

    Enregistrements Dynamiques

    Un enregistrement dynamique (dynamic record) est un fichier de contenu dont l'identité n'est pas un index séquentiel ou une variante nommée, mais un ensemble arbitraire de paires clé-valeur déclarées dans un champ meta. Intlayer utilise ces champs comme sélecteur au moment de l'exécution, ce qui permet d'adresser des enregistrements CMS, des copies spécifiques à l'utilisateur ou tout contenu dont les clés ne sont pas connues au moment de la compilation.

    Déclarer des enregistrements dynamiques

    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;

    Consommer des enregistrements dynamiques

    Tous les champs meta sont obligatoires dans le sélecteur. Omettre un champ renvoie null et génère une erreur 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 garantit que "id" et "userId" sont tous deux fournis.
    
      if (!content) return null;
    
      return <p>{content.description}</p>;
    };

    Avec une locale explicite

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

    Champ meta manquant — erreur de compilation

    ts
    // Erreur de type : `userId` est manquantconst content = useIntlayer("product-copy", { id: "prod_abc" });

    Mode de chargement (loading mode)

    Les enregistrements dynamiques sont généralement chargés de manière différée. Définissez importMode sur le dictionnaire pour contrôler cela :

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

    Voir optimisation du bundle pour plus de détails sur les modes static, dynamic et fetch.

    Cas d'utilisation typiques

    • Copie marketing par produit gérée dans un CMS
    • Contenu spécifique à l'utilisateur ou au compte
    • Tout contenu identifié par un ID opaque au moment de l'exécution