استخدم مساعدك المفضل للملخص واستخدم هذه الصفحة والموفر AI الذي تريده
تاريخ الإصدارات
- "تم تقديم محتوى يعتمد على الاختيار"v9.1.0٣٠/٧/٢٠٢٦
تمت ترجمة محتوى هذه الصفحة باستخدام الذكاء الاصطناعي.
اعرض آخر نسخة المحتوى الأصلي باللغة الإنكليزية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
المحتوى المستند إلى الاختيار (Select) / Intlayer
كيف يعمل Select
في Intlayer، يتم تحقيق المحتوى المستند إلى الاختيار من خلال الدالة select التي تقوم بتعيين قيم نصية عشوائية لمحتواها المقابل. هذا يعادل رسالة {value, select, …} في ICU، أو تعليمة switch في الكود الخاص بتطبيقك.
استخدم select عندما يكون المُميّز (discriminant) عبارة عن سلسلة نصية حرة: حالة (status)، خطة (plan)، منصة (platform)، أو دور (role). أما بالنسبة للمُميّزات الأخرى، يوفر Intlayer عقدًا مخصصة:
افتح الجدول في نافذة منبثقة لعرض جميع محتويات البيانات بوضوح
| المُميّز | العقدة |
|---|---|
| كمية | enu() |
| قيمة منطقية (Boolean) | cond() |
| جنس | gender() |
| أي نص آخر | select() |
إعداد المحتوى المستند إلى الاختيار
لإعداد المحتوى المستند إلى الاختيار في مشروع Intlayer الخاص بك، قم بإنشاء وحدة محتوى تتضمن تعريفات الاختيار الخاصة بك. فيما يلي أمثلة بتنسيقات متعددة.
نسخ الكود إلى الحافظة
import { select, type Dictionary } from "intlayer";
const myPostContent = {
key: "my_key",
content: {
publishStatus: select({
draft: "This post is a draft",
published: "This post is live",
scheduled: "This post is scheduled",
fallback: "Unknown status", // اختياري
}),
},
} satisfies Dictionary;
export default myPostContent;إذا لم يتم الإعلان عنfallback، فسيتم اعتبار المفتاح الأخير المعلن كخيار احتياطي عند عدم تطابق القيمة المقدمة مع أي حالة معلنة: نفس عقدcond()وgender().
سلامة الأنواع (Type Safety)
يتم استنتاج المعامل المقبول من الحالات المعلنة:
- بدون
fallback، سيتم قبول الحالات المعلنة فقط: يعتبر الخطأ الإملائي خطأ في النوع (type error). - مع
fallback، يُقبل أي نص (حيث يغطي الخيار الاحتياطي القيم غير المتطابقة) بينما تستمر الحالات المعلنة في توفير ميزة الإكمال التلقائي (autocompletion).
لماذا لا تستخدم كائنًا بسيطًا؟
من المغري أن تقوم بتعريف كائن بسيط والوصول إليه باستخدام القيمة أثناء وقت التشغيل:
نسخ الكود إلى الحافظة
// ❌ لا تفعل هذاconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus[publishType]}</p>;يحلل مترجم (compiler) Intlayer كود المصدر الخاص بك لاستبعاد المحتوى غير المستخدم ولضغط (minify) المفاتيح المتبقية. لا يمكن تقييم الوصول الديناميكي المحسوب (obj[expr]) بشكل ثابت، لذلك سيتم تحديد الفرع بأكمله كأنه غامض (opaque): سيبقى في الحزمة (bundle) وتبقى مفاتيحه بدون ضغط.
عند استخدام select()، يتم معالجة الحالة داخل استدعاء دالة بدلاً من الوصول كخاصية. يرى المترجم ذلك كوصول ثابت لحقل واحد، ويحسّن العقدة تمامًا كما يفعل مع enu()، cond() أو gender():
نسخ الكود إلى الحافظة
// ✅ افعل هذاconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus(publishType)}</p>;استخدام المحتوى المستند إلى الاختيار
لاستخدام المحتوى المستند إلى الاختيار داخل مكون React، قم باستيراد واستخدام الخطاف useIntlayer من حزمة react-intlayer. يقوم هذا الخطاف بجلب المحتوى للمفتاح المحدد ويسمح لك بتمرير قيمة لاختيار الإخراج المناسب.
نسخ الكود إلى الحافظة
import type { FC } from "react";
import { useIntlayer } from "react-intlayer";
const PostStatus: FC = () => {
const { publishStatus } = useIntlayer("my_key");
return (
<div>
<p>
{
/* المخرجات: This post is a draft */
publishStatus("draft")
}
</p>
<p>
{
/* المخرجات: This post is live */
publishStatus("published")
}
</p>
<p>
{
/* المخرجات: Unknown status */
publishStatus("Archived")
}
</p>
</div>
);
};
export default PostStatus;دمج Select مع العقد الأخرى
تحتوي كل حالة على عقدة محتوى كاملة، لذلك يمكن تركيب select مع t()، insert()، md() وغيرها:
نسخ الكود إلى الحافظة
import { insert, select, t, type Dictionary } from "intlayer";const myPostContent = { key: "my_key", content: { publishStatus: select({ draft: insert( t({ en: "{{name}} saved a draft", fr: "{{name}} a enregistré un brouillon", ar: "حفظ {{name}} مسودة", }) ), published: insert( t({ en: "{{name}} published the post", fr: "{{name}} a publié l’article", ar: "نشر {{name}} المقال", }) ), fallback: insert( t({ en: "{{name}} updated the post", fr: "{{name}} a mis à jour l’article", ar: "قام {{name}} بتحديث المقال", }) ), }), },} satisfies Dictionary;export default myPostContent;نسخ الكود إلى الحافظة
publishStatus("draft")({ name: "Alice" }); // المخرجات: حفظ Alice مسودةالترحيل من select الخاص بـ ICU
الرسائل التي تستخدم معامل select في ICU يتم استيرادها كعقد select:
نسخ الكود إلى الحافظة
{publishType, select, draft {draft} published {published} other {Unknown}}ستصبح:
نسخ الكود إلى الحافظة
select( { draft: "draft", published: "published", fallback: "Unknown", }, "publishType");تم إعادة تسمية الحالة other في ICU إلى fallback، وهو الاسم القياسي في Intlayer لجميع الحالات غير المتطابقة. يسجل المعامل الثاني اسم المتغير الخاص بـ ICU لكي يتم إرجاع الرسالة كجملة ICU كما هي تمامًا في وقت التصدير.
لاحظ أن الرسالة بـselectفي ICU التي تكون حالاتها قيم جنس (male/female/other) ستُستورد بدلاً من ذلك كعقدةgender.
الموارد الإضافية
للحصول على معلومات أكثر تفصيلًا حول التكوين والاستخدام، راجع الموارد التالية:
تقدم هذه الموارد رؤى أعمق حول كيفية إعداد واستخدام Intlayer داخل بيئات وأطر عمل متنوعة.