Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Riwayat Versi
- "Rilis fitur varian"v9.0.012/6/2026
- "`variant` kini menerima string atau objek — `meta` / record dinamis sebelumnya dideklarasikan sebagai varian objek"v9.1.026/6/2026
- "Varian hanya mendeklarasikan kunci yang ditimpanya; varian yang tidak dideklarasikan akan kembali ke entri default"v9.1.131/7/2026
- "Provider menerima prop `variant` ambien; selektor menerima rantai preferensi terurut"v9.1.24/8/2026
Konten halaman ini diterjemahkan menggunakan AI.
Lihat versi terakhir dari konten aslinya dalam bahasa InggrisIf 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
Varian
Sebuah varian adalah sekumpulan file konten yang berbagi key kamus yang sama tetapi masing-masing membawa nilai variant yang berbeda. Intlayer menyajikan file yang sesuai berdasarkan selektor yang diberikan ke useIntlayer.
Nilai variant dapat berupa dua bentuk:
- String — satu alternatif bernama (pengujian A/B, banner musiman, feature flag).
- Objek — diskriminator terstruktur yang dialamatkan oleh sekumpulan field (record CMS, konten khusus pengguna, konten apa pun yang dikunci oleh ID buram). Seluruh objek adalah identitasnya: selektor harus memberikan objek yang sama untuk menyelesaikan entri.
Bentuk objek menggantikan fieldmetasebelumnya. Di mana pun Anda dulu menulismeta: { id, … }, tulisvariant: { id, … }, dan pilih dengan{ variant: { id, … } }.
Varian bernama (string)
Setiap file mewakili satu alternatif bernama. Menghilangkan variant (atau mengaturnya ke "default") menandainya sebagai fallback.
Salin kode ke clipboard
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;Salin kode ke clipboard
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;Varian parsial
Varian hanya mendeklarasikan kunci yang ditimpanya; sisanya diwarisi dari entri default.
Salin kode ke clipboard
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;Salin kode ke clipboard
useIntlayer("hero-banner", { variant: "summer" });// → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` diwarisiuseIntlayer("hero-banner", { variant: "never-declared" });// → entri defaultJadi Anda hanya menambahkan file varian di mana kata-katanya benar-benar berbeda. Sebuah kunci hanya menjadi null jika mendeklarasikan varian tetapi tidak ada entri default.
Mengonsumsi varian bernama
Varian default
Salin kode ke clipboard
import { useIntlayer } from "react-intlayer";
export const Hero = () => {
const { headline, cta } = useIntlayer("hero-banner");
// → varian default
return (
<section>
<h1>{headline}</h1>
<a>{cta}</a>
</section>
);
};Varian bernama
Salin kode ke clipboard
const { headline, cta } = useIntlayer("hero-banner", { variant: "black_friday",});Varian bernama dengan locale eksplisit
Salin kode ke clipboard
const content = useIntlayer("hero-banner", { variant: "black_friday", locale: "fr",});Varian objek (terstruktur)
Varian objek mengalamatkan konten dengan sekumpulan pasangan key-value sewenang-wenang yang dideklarasikan di field variant — memungkinkan pemodelan record CMS, konten khusus pengguna, atau konten apa pun yang kuncinya berupa ID buram. Seluruh objek adalah identitasnya: selektor harus memberikan objek yang sama agar entri diselesaikan.
Salin kode ke clipboard
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;Salin kode ke clipboard
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;Mengonsumsi varian objek
Berikan objek yang cocok ke variant. Setiap field yang dideklarasikan pada kamus harus disediakan dan sama; jika tidak, hasilnya null. Urutan field tidak penting.
Salin kode ke clipboard
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>;
};Dengan locale eksplisit
Salin kode ke clipboard
const content = useIntlayer("product", { variant: { id: "prod_abc", userId: "user_123" }, locale: "fr",});Field hilang — tidak cocok
Salin kode ke clipboard
// Mengembalikan null: `userId` hilang, sehingga objek tidak cocok dengan varian yang dideklarasikanconst content = useIntlayer("product", { variant: { id: "prod_abc" } });Varian ambien
Beberapa dimensi varian tetap sepanjang satu sesi — tenant, jenis sekolah, tingkat paket. Semuanya diselesaikan sekali, dan tidak ada komponen yang perlu meneruskannya secara manual.
Jangan membungkususeIntlayerdalam hook Anda sendiri untuk menyuntikkannya. Optimasi saat build hanya menulis ulang pemanggilan literaluseIntlayer("key")yang diimpor dari paket framework, sehingga apa pun di balik pembungkus tidak akan ikut dibundel.
Sebagai gantinya, deklarasikan varian sekali pada provider, persis seperti locale:
Salin kode ke clipboard
import { IntlayerProvider } from "react-intlayer";
export const App = ({ locale, schoolType }) => (
<IntlayerProvider locale={locale} variant={schoolType}>
<Hero />
</IntlayerProvider>
);Setiap pembacaan kamus di bawah provider kini diselesaikan terhadap varian tersebut, dan selektor di titik pemanggilan selalu menang:
Salin kode ke clipboard
useIntlayer("hero-banner");// → varian dari provideruseIntlayer("hero-banner", { variant: "summer" });// → "summer" — menggantikan varian provider, bukan memperluasnyaBentuk
Prop variant menerima tiga bentuk:
Buka tabel dalam modal untuk melihat semua isi data dengan jelas
| Bentuk | Arti |
|---|---|
variant="school1" | satu varian bernama untuk setiap kunci |
variant={["school1", "default"]} | rantai preferensi terurut |
variant={{ "hero-banner": "school1", default: "base" }} | satu varian per kunci kamus |
Rantai preferensi
Rantai dicoba dari kiri ke kanan terhadap entri yang dideklarasikan setiap kunci, dan yang pertama dideklarasikan menang. Bila tidak ada yang dideklarasikan, entri default implisit digunakan — persis seperti untuk nilai tunggal.
Salin kode ke clipboard
<IntlayerProvider variant={["school1", "school2"]} />// `hero-banner` tidak mendeklarasikan entri `school1` tetapi mendeklarasikan `school2` → "school2"// kunci yang tidak mendeklarasikan keduanya → entri defaultJadi ["black_friday", "summer"] dibaca sebagai «black friday jika kunci ini memilikinya, jika tidak summer, jika tidak default». Rantai juga diterima di titik pemanggilan:
Salin kode ke clipboard
useIntlayer("hero-banner", { variant: ["black_friday", "summer"] });Perhatikan bahwa ini adalah kebalikan dari array yang diterima oleh field variant pada berkas konten: di sana array mendeklarasikan satu entri per elemen, di sini ia mengonsumsi entri tersebut sesuai urutan prioritas.
Peta per kunci
Alamatkan setiap kunci kamus secara terpisah. Entri default yang dicadangkan mencakup semua kunci yang tidak terdaftar:
Salin kode ke clipboard
<IntlayerProvider variant={{ "hero-banner": "school1", product: ["school1", "default"], default: "base", }}/>Pada provider, objek biasa selalu dibaca sebagai peta per kunci, bukan sebagai varian objek — keduanya identik secara struktural. Untuk menetapkan varian objek secara global, sarangkan di bawah sebuah entri: variant={{ default: { id: "prod_abc" } }}.
Karena kunci pada peta diperiksa terhadap kunci kamus yang Anda deklarasikan, salah ketik — atau varian objek yang ditulis langsung, seperti variant={{ id: "prod_abc" }} — adalah galat saat kompilasi.
Mode pemuatan
Varian objek sering dimuat secara malas. Atur importMode pada kamus untuk mengendalikannya:
Salin kode ke clipboard
const dictionary = {
key: "product",
importMode: "fetch", // or "dynamic"
variant: { id: "prod_abc", userId: "user_123" },
content: { … },
} satisfies Dictionary;
export default dictionary;Lihat optimasi bundle untuk detail tentang mode static, dynamic, dan fetch.
Kasus penggunaan umum
- Pengujian A/B teks yang digerakkan oleh kunci eksperimen
- Banner musiman atau promosi
- Pesan ber-feature flag
- Kampanye pemasaran spesifik locale
- Teks pemasaran per-produk yang dikelola di CMS
- Konten khusus pengguna atau akun
- Konten apa pun yang dikunci oleh ID buram saat runtime