このページとあなたの好きなAIアシスタントを使ってドキュメントを要約します
バージョン履歴
- "バリアント機能のリリース"v9.0.02026/6/12
- "`variant`は文字列またはオブジェクトを受け付けるようになりました — 以前の `meta` / 動的レコードはオブジェクトバリアントとして宣言されます"v9.1.02026/6/26
- "バリアントは上書きするキーのみを宣言します。宣言されていないバリアントはデフォルトのエントリにフォールバックします"v9.1.12026/7/31
- "プロバイダーがアンビエントな `variant` プロパティを受け取り、セレクターが順序付きの優先チェーンを受け取れるようになりました"v9.1.22026/8/4
このページのコンテンツはAIを使用して翻訳されました。
英語の元のコンテンツの最新バージョンを見るIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
バリアント
バリアントは、同じ辞書 key を共有しつつ、それぞれ異なる variant 値を持つコンテンツファイルの集合です。Intlayer は useIntlayer に渡されたセレクターに基づいて適切なファイルを提供します。
variant の値は2 つの形式を取れます:
- 文字列 — 単一の名前付き代替(A/B テスト、季節バナー、フィーチャーフラグ)。
- オブジェクト — フィールドの集合でアドレス指定される構造化された識別子(CMS レコード、ユーザー固有コピー、不透明な ID をキーとする任意のコンテンツ)。オブジェクト全体が同一性です。エントリを解決するには、セレクターが等しいオブジェクトを提供する必要があります。
オブジェクト形式は旧metaフィールドを置き換えます。以前meta: { id, … }と書いていた箇所はすべてvariant: { id, … }と書き、{ variant: { id, … } }で選択してください。
名前付き(文字列)バリアント
各ファイルは 1 つの名前付き代替を表します。variant を省略する(または "default" に設定する)と、フォールバックとして扱われます。
コードをクリップボードにコピー
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;コードをクリップボードにコピー
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;部分的なバリアント
バリアントは上書きするキーのみを宣言します。残りはデフォルトのエントリから継承されます。
コードをクリップボードにコピー
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "hero-banner",
variant: "summer",
content: {
headline: t({
en: "Build faster all summer",
fr: "Développez plus vite tout l'été",
}),
},
} satisfies Dictionary;
export default dictionary;コードをクリップボードにコピー
useIntlayer("hero-banner", { variant: "summer" });// → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` は継承されますuseIntlayer("hero-banner", { variant: "never-declared" });// → デフォルトのエントリしたがって、実際にテキストが異なる場所にのみバリアントファイルを追加します。バリアントを宣言しているがデフォルトのエントリがない場合にのみ、キーは null に解決されます。
名前付きバリアントの利用
デフォルトバリアント
コードをクリップボードにコピー
import { useIntlayer } from "react-intlayer";
export const Hero = () => {
const { headline, cta } = useIntlayer("hero-banner");
// → デフォルトバリアント
return (
<section>
<h1>{headline}</h1>
<a>{cta}</a>
</section>
);
};名前付きバリアント
コードをクリップボードにコピー
const { headline, cta } = useIntlayer("hero-banner", { variant: "black_friday",});ロケールを明示した名前付きバリアント
コードをクリップボードにコピー
const content = useIntlayer("hero-banner", { variant: "black_friday", locale: "fr",});オブジェクト(構造化)バリアント
オブジェクトバリアントは、variant フィールドで宣言された任意のキー・値ペアの集合でコンテンツをアドレス指定します。これにより、CMS レコード、ユーザー固有コピー、または不透明な ID をキーとする任意のコンテンツをモデル化できます。オブジェクト全体が同一性です。エントリが解決されるには、セレクターが等しいオブジェクトを提供する必要があります。
コードをクリップボードにコピー
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;コードをクリップボードにコピー
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 です。フィールドの順序は問いません。
コードをクリップボードにコピー
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>;
};ロケールを明示する場合
コードをクリップボードにコピー
const content = useIntlayer("product", { variant: { id: "prod_abc", userId: "user_123" }, locale: "fr",});フィールド欠落 — 一致なし
コードをクリップボードにコピー
// null を返します: `userId` が欠落しているため、オブジェクトは宣言されたバリアントに一致しませんconst content = useIntlayer("product", { variant: { id: "prod_abc" } });アンビエントバリアント
バリアントの次元の中には、テナント、学校種別、プラン階層のように、セッション全体で固定されるものがあります。これらは一度だけ解決されるものであり、各コンポーネントが手で渡すべきものではありません。
これらを注入するためにuseIntlayerを独自のフックでラップしないでください。ビルド時の最適化は、フレームワークパッケージからインポートされたリテラルなuseIntlayer("key")の呼び出しだけを書き換えるため、ラッパーの背後にあるものはバンドルされません。
代わりに、locale とまったく同じように、プロバイダーで一度だけバリアントを宣言します:
コードをクリップボードにコピー
import { IntlayerProvider } from "react-intlayer";
export const App = ({ locale, schoolType }) => (
<IntlayerProvider locale={locale} variant={schoolType}>
<Hero />
</IntlayerProvider>
);これでプロバイダー配下のすべての辞書の読み取りがそのバリアントで解決され、呼び出し側のセレクターが常に優先されます:
コードをクリップボードにコピー
useIntlayer("hero-banner");// → プロバイダーのバリアントuseIntlayer("hero-banner", { variant: "summer" });// → "summer" — プロバイダーのバリアントを置き換えます(拡張はしません)形式
variant プロパティは 3 つの形式を受け取ります:
テーブルをモーダルで開き、すべてのデータを明確に表示
| 形式 | 意味 |
|---|---|
variant="school1" | すべてのキーに対する 1 つの名前付きバリアント |
variant={["school1", "default"]} | 順序付きの優先チェーン |
variant={{ "hero-banner": "school1", default: "base" }} | 辞書キーごとに 1 つのバリアント |
優先チェーン
チェーンは各キーが宣言しているエントリーに対して左から右へ順に試され、最初に宣言されているものが採用されます。どれも宣言されていない場合は、単一の値のときとまったく同じく、暗黙のデフォルトエントリーが使われます。
コードをクリップボードにコピー
<IntlayerProvider variant={["school1", "school2"]} />// `hero-banner` は `school1` エントリーを宣言していないが `school2` を宣言している → "school2"// どちらも宣言していないキー → デフォルトエントリーしたがって ["black_friday", "summer"] は「このキーに black friday があればそれ、なければ summer、それもなければデフォルト」と読めます。チェーンは呼び出し側でも使えます:
コードをクリップボードにコピー
useIntlayer("hero-banner", { variant: ["black_friday", "summer"] });これはコンテンツファイルの variant フィールドが受け取る配列とちょうど逆であることに注意してください。あちらでは配列が要素ごとに 1 つのエントリーを宣言しますが、こちらでは優先順位に従ってそれらを消費します。
キーごとのマップ
辞書キーごとに個別に指定します。予約された default エントリーが、記載されていないすべてのキーをカバーします:
コードをクリップボードにコピー
<IntlayerProvider variant={{ "hero-banner": "school1", product: ["school1", "default"], default: "base", }}/>プロバイダーでは、プレーンなオブジェクトは常にキーごとのマップとして読み取られ、オブジェクトバリアントとしては解釈されません(両者は構造的に同一のためです)。オブジェクトバリアントをグローバルに指定するには、エントリーの下にネストしてください: variant={{ default: { id: "prod_abc" } }}。
マップのキーは宣言済みの辞書キーと照合されるため、タイプミス(あるいは variant={{ id: "prod_abc" }} のようにオブジェクトバリアントを直接書いた場合)はコンパイルエラーになります。
読み込みモード
オブジェクトバリアントはしばしば遅延読み込みされます。これを制御するには辞書に importMode を設定します:
コードをクリップボードにコピー
const dictionary = {
key: "product",
importMode: "fetch", // or "dynamic"
variant: { id: "prod_abc", userId: "user_123" },
content: { … },
} satisfies Dictionary;
export default dictionary;static、dynamic、fetch モードの詳細についてはバンドル最適化を参照してください。
典型的なユースケース
- 実験キーで駆動される A/B コピーテスト
- 季節またはプロモーションのバナー
- フィーチャーフラグ付きメッセージ
- ロケール固有のマーケティングキャンペーン
- CMS で管理される製品ごとのマーケティングコピー
- ユーザー固有またはアカウント固有のコンテンツ
- 実行時に不透明な ID をキーとする任意のコンテンツ