الوقت النسبي وصيغ الجمع
استخدموا RelativeTimeFormat وPluralRules.
الوقت النسبي وصيغ الجمع درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
Intl.RelativeTimeFormat
ينشئ Intl.RelativeTimeFormat عبارات مثل «منذ 3 أيام» أو «خلال ساعتين» بلغة المستخدم.
const rtf = new Intl.RelativeTimeFormat("en-US");
console.log(rtf.format(-1, "day")); // "1 day ago"
console.log(rtf.format(2, "hour")); // "in 2 hours"السالب للماضي والموجب للمستقبل
تحدد إشارة الرقم الاتجاه: فالقيمة السالبة تشير إلى الماضي، والموجبة إلى المستقبل.
const rtf = new Intl.RelativeTimeFormat("en-US");
console.log(rtf.format(-3, "week")); // "3 weeks ago"
console.log(rtf.format(5, "minute")); // "in 5 minutes"الخيار numeric
يستخدم numeric: "auto" كلمات مألوفة مثل «أمس» أو «غدًا» بدلًا من «منذ يوم واحد».
const rtf = new Intl.RelativeTimeFormat("en-US", { numeric: "auto" });
console.log(rtf.format(-1, "day")); // "yesterday"
console.log(rtf.format(0, "day")); // "today"الوقت النسبي المترجم
يؤدي تغيير locale إلى ترجمة العبارة بأكملها تلقائيًا.
console.log(new Intl.RelativeTimeFormat("es").format(-2, "day")); // "hace 2 dias"
console.log(new Intl.RelativeTimeFormat("fr").format(3, "hour")); // "dans 3 heures"اختيار الوحدة المناسبة
تختار التطبيقات الحقيقية أكبر وحدة مناسبة. احسبوا الفرق بالثواني، ثم انتقلوا تدريجيًا إلى الوحدات الأصغر.
function ago(date) {
const diff = (date - Date.now()) / 1000;
const rtf = new Intl.RelativeTimeFormat("en-US", { numeric: "auto" });
if (Math.abs(diff) < 60) return rtf.format(Math.round(diff), "second");
if (Math.abs(diff) < 3600) return rtf.format(Math.round(diff / 60), "minute");
return rtf.format(Math.round(diff / 3600), "hour");
}
console.log(ago(new Date(Date.now() - 90000)));Intl.PluralRules
لا يقتصر تكوين صيغة الجمع على إضافة الحرف «s». إذ يربط Intl.PluralRules الرقم بفئة مثل "one" أو "other" وفق اللغة.
const pr = new Intl.PluralRules("en-US");
console.log(pr.select(1)); // "one"
console.log(pr.select(2)); // "other"
console.log(pr.select(0)); // "other"إنشاء رسائل الجمع
استخدموا الفئة لاختيار الكلمة الصحيحة.
const pr = new Intl.PluralRules("en-US");
const forms = { one: "item", other: "items" };
function label(n) { return n + " " + forms[pr.select(n)]; }
console.log(label(1)); // "1 item"
console.log(label(5)); // "5 items"لغات ذات صيغ أكثر
تحتوي لغات كثيرة على عدة فئات للجمع. فعلى سبيل المثال، تميّز البولندية بين "few" و"many"، ولذلك ستكون منطقية الجمع المضمّنة للغة الإنجليزية خاطئة.
const pr = new Intl.PluralRules("pl");
console.log(pr.select(1)); // "one"
console.log(pr.select(3)); // "few"
console.log(pr.select(5)); // "many"صيغ الجمع الترتيبية
مرّروا type: "ordinal" للحصول على فئات للأعداد الترتيبية مثل 1st و2nd و3rd.
const pr = new Intl.PluralRules("en-US", { type: "ordinal" });
const suffix = { one: "st", two: "nd", few: "rd", other: "th" };
function ordinal(n) { return n + suffix[pr.select(n)]; }
console.log(ordinal(1), ordinal(2), ordinal(3), ordinal(11)); // 1st 2nd 3rd 11thالدمج مع الأرقام
اجمعوا بين PluralRules وNumberFormat لإنشاء رسائل أعداد مترجمة بالكامل.
const nf = new Intl.NumberFormat("en-US");
const pr = new Intl.PluralRules("en-US");
const forms = { one: "file", other: "files" };
function msg(n) { return nf.format(n) + " " + forms[pr.select(n)]; }
console.log(msg(1000)); // "1,000 files"Intl.ListFormat
إضافة مفيدة: تصل Intl.ListFormat العناصر باستخدام أدوات العطف الصحيحة وفق locale.
const lf = new Intl.ListFormat("en-US", { type: "conjunction" });
console.log(lf.format(["red", "green", "blue"])); // "red, green, and blue"اختبار سريع
اختبروا الوقت النسبي وقواعد الجمع.
مراجعة: الوقت النسبي وقواعد الجمع
نسّقتم الوقت النسبي باستخدام RelativeTimeFormat، بما في ذلك numeric: "auto"، واخترتم حدود الوحدات، وطبّقتم قواعد الجمع بطريقة صحيحة عبر اللغات والأعداد الترتيبية باستخدام PluralRules، ووصلتم القوائم باستخدام ListFormat. التالي: الترتيب المراعي لـ locale.
الأسئلة الشائعة
هل درس «الوقت النسبي وصيغ الجمع» مجاني؟
نعم — نص درس «الوقت النسبي وصيغ الجمع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «الوقت النسبي وصيغ الجمع»؟
استخدموا RelativeTimeFormat وPluralRules. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الوقت النسبي وصيغ الجمع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تنسيق الأرقام والعملات
- تنسيق التواريخ والأوقات
- الوقت النسبي وصيغ الجمع
- الفرز المراعي للإعدادات المحلية