Autor:
    Creación:2026-06-12Última actualización:2026-06-26

    Variantes

    Una variante es un conjunto de archivos de contenido que comparten la misma clave de diccionario (key) pero llevan cada uno un valor variant diferente. Intlayer sirve el archivo adecuado según el selector pasado a useIntlayer.

    El valor de variant puede adoptar dos formas:

    • Una cadena — una única alternativa con nombre (pruebas A/B, banners de temporada, feature flags).
    • Un objeto — un discriminador estructurado direccionado por un conjunto de campos (registros de CMS, contenido específico de usuario, cualquier contenido indexado por un ID opaco). El objeto completo es la identidad: el selector debe proporcionar un objeto igual para resolver la entrada.
    La forma de objeto sustituye al antiguo campo meta. Donde antes escribía meta: { id, … }, escriba variant: { id, … }, y selecciónela con { variant: { id, … } }.

    Variantes con nombre (cadena)

    Cada archivo representa una alternativa con nombre. Omitir variant (o establecerlo en "default") lo marca como el valor de reserva.

    hero-banner.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const dictionary = {
      key: "hero-banner",
      variant: "default",
      content: {
        headline: t({
          en: "Build faster with Intlayer",
          fr: "Développez plus vite avec Intlayer",
        }),
        cta: t({ en: "Get started", fr: "Commencer" }),
      },
    } satisfies Dictionary;
    
    export default dictionary;
    hero-banner.black-friday.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const dictionary = {
      key: "hero-banner",
      variant: "black_friday",
      content: {
        headline: t({
          en: "50 % off — today only",
          fr: "−50 % — aujourd'hui seulement",
        }),
        cta: t({ en: "Shop now", fr: "Acheter maintenant" }),
      },
    } satisfies Dictionary;
    
    export default dictionary;

    Consumir variantes con nombre

    Variante por defecto

    Hero.tsx
    import { useIntlayer } from "react-intlayer";
    
    export const Hero = () => {
      const { headline, cta } = useIntlayer("hero-banner");
      // → variante por defecto
    
      return (
        <section>
          <h1>{headline}</h1>
          <a>{cta}</a>
        </section>
      );
    };

    Variante con nombre

    tsx
    const { headline, cta } = useIntlayer("hero-banner", {  variant: "black_friday",});

    Variante con nombre con locale explícito

    tsx
    const content = useIntlayer("hero-banner", {  variant: "black_friday",  locale: "fr",});

    Variantes de objeto (estructuradas)

    Una variante de objeto direcciona el contenido mediante un conjunto arbitrario de pares clave-valor declarados en el campo variant — lo que permite modelar registros de CMS, contenido específico de usuario o cualquier contenido cuya clave sea un ID opaco. El objeto completo es la identidad: el selector debe proporcionar un objeto igual para que la entrada se resuelva.

    product.abc.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const dictionary = {
      key: "product",
      variant: { 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.abcd.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const dictionary = {
      key: "product",
      variant: { 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;

    Consumir variantes de objeto

    Pase el objeto coincidente a variant. Cada campo declarado en el diccionario debe proporcionarse e ser igual; de lo contrario el resultado es null. El orden de los campos no importa.

    Product.tsx
    import { useIntlayer } from "react-intlayer";
    
    export const Product = ({
      productId,
      userId,
    }: {
      productId: string;
      userId: string;
    }) => {
      const content = useIntlayer("product", {
        variant: { id: productId, userId },
      });
    
      if (!content) return null;
    
      return <p>{content.description}</p>;
    };

    Con locale explícito

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

    Campo faltante — sin coincidencia

    ts
    // Devuelve null: falta `userId`, por lo que el objeto no coincide con la variante declaradaconst content = useIntlayer("product", { variant: { id: "prod_abc" } });

    Modo de carga

    Las variantes de objeto suelen cargarse de forma diferida. Establezca importMode en el diccionario para controlarlo:

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

    Consulte optimización del bundle para detalles sobre los modos static, dynamic y fetch.

    Casos de uso típicos

    • Pruebas A/B de texto dirigidas por una clave de experimento
    • Banners de temporada o promocionales
    • Mensajería con feature flag
    • Campañas de marketing específicas por locale
    • Copia de marketing por producto gestionada en un CMS
    • Contenido específico de usuario o de cuenta
    • Cualquier contenido indexado por un ID opaco en tiempo de ejecución