著者:
    作成:2026-06-12最終更新:2026-06-26

    バリアント

    バリアントは、同じ辞書 key を共有しつつ、それぞれ異なる variant 値を持つコンテンツファイルの集合です。Intlayer は useIntlayer に渡されたセレクターに基づいて適切なファイルを提供します。

    variant の値は2 つの形式を取れます:

    • 文字列 — 単一の名前付き代替(A/B テスト、季節バナー、フィーチャーフラグ)。
    • オブジェクト — フィールドの集合でアドレス指定される構造化された識別子(CMS レコード、ユーザー固有コピー、不透明な ID をキーとする任意のコンテンツ)。オブジェクト全体が同一性です。エントリを解決するには、セレクターが等しいオブジェクトを提供する必要があります。
    オブジェクト形式は旧 meta フィールドを置き換えます。以前 meta: { id, … } と書いていた箇所はすべて variant: { id, … } と書き、{ variant: { id, … } } で選択してください。

    名前付き(文字列)バリアント

    各ファイルは 1 つの名前付き代替を表します。variant を省略する(または "default" に設定する)と、フォールバックとして扱われます。

    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;

    名前付きバリアントの利用

    デフォルトバリアント

    Hero.tsx
    import { useIntlayer } from "react-intlayer";
    
    export const Hero = () => {
      const { headline, cta } = useIntlayer("hero-banner");
      // → デフォルトバリアント
    
      return (
        <section>
          <h1>{headline}</h1>
          <a>{cta}</a>
        </section>
      );
    };

    名前付きバリアント

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

    ロケールを明示した名前付きバリアント

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

    オブジェクト(構造化)バリアント

    オブジェクトバリアントは、variant フィールドで宣言された任意のキー・値ペアの集合でコンテンツをアドレス指定します。これにより、CMS レコード、ユーザー固有コピー、または不透明な ID をキーとする任意のコンテンツをモデル化できます。オブジェクト全体が同一性です。エントリが解決されるには、セレクターが等しいオブジェクトを提供する必要があります。

    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;

    オブジェクトバリアントの利用

    一致するオブジェクトを variant に渡します。辞書で宣言された各フィールドはすべて提供され、等しくなければなりません。そうでない場合、結果は null です。フィールドの順序は問いません。

    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>;
    };

    ロケールを明示する場合

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

    フィールド欠落 — 一致なし

    ts
    // null を返します: `userId` が欠落しているため、オブジェクトは宣言されたバリアントに一致しませんconst content = useIntlayer("product", { variant: { id: "prod_abc" } });

    読み込みモード

    オブジェクトバリアントはしばしば遅延読み込みされます。これを制御するには辞書に importMode を設定します:

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

    staticdynamicfetch モードの詳細についてはバンドル最適化を参照してください。

    典型的なユースケース

    • 実験キーで駆動される A/B コピーテスト
    • 季節またはプロモーションのバナー
    • フィーチャーフラグ付きメッセージ
    • ロケール固有のマーケティングキャンペーン
    • CMS で管理される製品ごとのマーケティングコピー
    • ユーザー固有またはアカウント固有のコンテンツ
    • 実行時に不透明な ID をキーとする任意のコンテンツ