شیء Intl.PluralRules ابزاری فوقالعاده برای پیدا کردن فرم جمع یا مفرد صحیح کلمات بر اساس اعداد است. این ابزار کلمات را به صورت خودکار برای شما جمع نمیبندد (مثلاً اینطور نیست که کلمه "apple" را به آن بدهید و خروجی "apples" بگیرید!)، بلکه بر اساس عددی که به آن میدهید، به شما میگوید که سیستم زبانی آن فرهنگ در حال حاضر کدام دسته یا فرمِ جمع را ترجیح میدهد.
شما احتمالاً پیش از این در کدهای خود کارهایی شبیه به این انجام میدادید:
function formatMessage(n) {
return `You have ${n} ${n === 1 ? "apple" : "apples"}.`;
}
اما تعمیم دادن این ساختارِ شرطی ساده به زبانهای دیگر اصلاً کار راحتی نیست؛ به خصوص زبانهایی که بر خلاف انگلیسی یا فارسی، فقط به دو حالت مفرد و جمع محدود نمیشوند و دارای چندین و چند فرم جمع مختلف (مثل فرمهای دوگانه، فرمهای جمع کوچک، جمع بزرگ و...) هستند.
بیا با یک مثال واقعی ببینیم چطور Intl.PluralRules با دو نوع شمارش اصلی (Cardinal) و ترتیبی (Ordinal) این مشکل را به زیباترین شکل ممکن حل میکند:
// ۱. فرمتکننده برای اعداد اصلی (مثل ۱، ۲، ۳ ...)
const prCard = new Intl.PluralRules("en-US");
// ۲. فرمتکننده برای اعداد ترتیبی (مثل اول، دوم، چهل و دوم ...)
const prOrd = new Intl.PluralRules("en-US", { type: "ordinal" });
// تعریف پسوندهای ترتیبی انگلیسی بر اساس دستهبندیهای استاندارد Intl
const englishOrdinalSuffixes = {
one: "st", // برای اول (1st)
two: "nd", // برای دوم (2nd)
few: "rd", // برای سوم (3rd)
other: "th", // برای بقیه (4th, 42nd, ...)
};
// تعریف فرمهای کلمه گربه بر اساس دستهبندیهای استاندارد Intl
const catPlural = {
one: "cat",
other: "cats",
};
function formatMessage(n1, n2) {
// متد select() مشخص میکند عدد در کدام دسته (one, two, few, other) قرار میگیرد
const ordinalCategory = prOrd.select(n1);
const cardinalCategory = prCard.select(n2);
return `The ${n1}${englishOrdinalSuffixes[ordinalCategory]} U.S. president had ${n2} ${catPlural[cardinalCategory]}.`;
}
console.log(formatMessage(42, 1)); // خروجی: The 42nd U.S. president had 1 cat.
console.log(formatMessage(45, 0)); // خروجی: The 45th U.S. president had 0 cats.
در استاندارد بینالمللی زبان (CLDR)، حداکثر ۶ دستهبندی برای قوانین جمع وجود دارد: zero ،one ،two ،few ،many و other. جاوااسکریپت به کمک Intl.PluralRules و متد .select() به شما میگوید عدد پاس داده شده در زبان هدف جزو کدام یک از این ۶ دسته است. شما کافی است مثل شیء catPlural یا englishOrdinalSuffixes در کد بالا، معادلهای متنی هر دسته را در یک ابجکت بنویسید تا برنامه شما بدون نیاز به کدهای شرطیِ تودرتو، برای هر زبانی در دنیا کاملاً دقیق کار کند!
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript