استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- "إصدار ميزة المتغيرات"v9.0.0١٢/٦/٢٠٢٦
- "تقبل `variant` الآن سلسلة أو كائنًا — تُعلن السجلات الديناميكية أو `meta` السابقة كمتغيرات كائنات"v9.1.0٢٦/٦/٢٠٢٦
- "تُعرّف المتغيرة فقط المفاتيح التي تتجاوزها؛ بينما تتراجع المتغيرات غير المُعرّفة إلى الإدخال الافتراضي"v9.1.1٣١/٧/٢٠٢٦
- "تقبل المزوِّدات خاصية `variant` محيطية؛ وتقبل المحدِّدات سلسلة تفضيل مرتَّبة"v9.1.2٤/٨/٢٠٢٦
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزية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 شكلين:
- سلسلة نصية — بديل مُسمّى واحد (اختبارات A/B، لافتات موسمية، أعلام ميزات).
- كائن — مُميِّز منظّم يُعنوَن بمجموعة من الحقول (سجلات CMS، محتوى خاص بالمستخدم، أي محتوى مفتاحه مُعرِّف غامض). الكائن بأكمله هو الهوية: يجب أن يوفّر المُحدِّد كائنًا مساويًا لحلّ المدخلة.
يحلّ الشكل الكائني محل حقلmetaالسابق. في كل مكان كنت تكتب فيه سابقًاmeta: { id, … }، اكتبvariant: { id, … }، وحدّدها بـ{ variant: { id, … } }.
المتغيرات المسماة (سلسلة نصية)
يمثّل كل ملف بديلًا مُسمّى واحدًا. وإغفال 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 { 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 { 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",});متغير مُسمّى بلغة locale صريحة
نسخ الكود إلى الحافظة
const content = useIntlayer("hero-banner", { variant: "black_friday", locale: "fr",});المتغيرات الكائنية (المنظّمة)
يُعنوِن المتغير الكائني المحتوى بمجموعة عشوائية من أزواج المفتاح-القيمة المُعلَنة في حقل variant — مما يتيح نمذجة سجلات CMS، أو المحتوى الخاص بالمستخدم، أو أي محتوى مفتاحه مُعرِّف غامض. الهوية هي الكائن بأكمله: يجب أن يوفّر المُحدِّد كائنًا مساويًا حتى تُحلّ المدخلة.
نسخ الكود إلى الحافظة
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>;
};مع لغة locale صريحة
نسخ الكود إلى الحافظة
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 ثلاثة أشكال:
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| الشكل | المعنى |
|---|---|
variant="school1" | متغير مسمّى واحد لكل المفاتيح |
variant={["school1", "default"]} | سلسلة تفضيل مرتَّبة |
variant={{ "hero-banner": "school1", default: "base" }} | متغير لكل مفتاح قاموس |
سلسلة التفضيل
تُجرَّب السلسلة من اليسار إلى اليمين مقابل المدخلات التي يصرّح بها كل مفتاح، ويفوز أول مدخل مُصرَّح به. وعندما لا يكون أي منها مُصرَّحًا به، يُستخدم المدخل الافتراضي الضمني — تمامًا كما في حالة القيمة المفردة.
نسخ الكود إلى الحافظة
<IntlayerProvider variant={["school1", "school2"]} />// `hero-banner` لا يصرّح بمدخل `school1` لكنه يصرّح بـ `school2` ← "school2"// مفتاح لا يصرّح بأي منهما ← المدخل الافتراضيلذا تُقرأ ["black_friday", "summer"] على أنها «black friday إن كان لهذا المفتاح واحد، وإلا summer، وإلا الافتراضي». وتُقبل السلاسل أيضًا في موضع الاستدعاء:
نسخ الكود إلى الحافظة
useIntlayer("hero-banner", { variant: ["black_friday", "summer"] });لاحظ أن هذا هو الصورة المعكوسة للمصفوفة التي يقبلها حقل variant في ملف المحتوى: فهناك تُصرِّح المصفوفة بمدخل لكل عنصر، أما هنا فتستهلكها بترتيب الأولوية.
خريطة لكل مفتاح
خاطب كل مفتاح قاموس على حدة. ويغطي المدخل المحجوز 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 للنصوص مُوجَّهة بمفتاح تجربة
- لافتات موسمية أو ترويجية
- رسائل بأعلام الميزات
- حملات تسويقية خاصة بلغة locale
- نص تسويقي لكل منتج يُدار في CMS
- محتوى خاص بالمستخدم أو الحساب
- أي محتوى يُعنوَن بمُعرِّف غامض في وقت التشغيل