256 lines
6.1 KiB
JavaScript
256 lines
6.1 KiB
JavaScript
import { buildLocalizeFn } from "../../_lib/buildLocalizeFn.mjs";
|
||
|
||
const numberValues = {
|
||
locale: {
|
||
1: "১",
|
||
2: "২",
|
||
3: "৩",
|
||
4: "৪",
|
||
5: "৫",
|
||
6: "৬",
|
||
7: "৭",
|
||
8: "৮",
|
||
9: "৯",
|
||
0: "০",
|
||
},
|
||
number: {
|
||
"১": "1",
|
||
"২": "2",
|
||
"৩": "3",
|
||
"৪": "4",
|
||
"৫": "5",
|
||
"৬": "6",
|
||
"৭": "7",
|
||
"৮": "8",
|
||
"৯": "9",
|
||
"০": "0",
|
||
},
|
||
};
|
||
|
||
const eraValues = {
|
||
narrow: ["খ্রিঃপূঃ", "খ্রিঃ"],
|
||
abbreviated: ["খ্রিঃপূর্ব", "খ্রিঃ"],
|
||
wide: ["খ্রিস্টপূর্ব", "খ্রিস্টাব্দ"],
|
||
};
|
||
|
||
const quarterValues = {
|
||
narrow: ["১", "২", "৩", "৪"],
|
||
abbreviated: ["১ত্রৈ", "২ত্রৈ", "৩ত্রৈ", "৪ত্রৈ"],
|
||
wide: ["১ম ত্রৈমাসিক", "২য় ত্রৈমাসিক", "৩য় ত্রৈমাসিক", "৪র্থ ত্রৈমাসিক"],
|
||
};
|
||
|
||
const monthValues = {
|
||
narrow: [
|
||
"জানু",
|
||
"ফেব্রু",
|
||
"মার্চ",
|
||
"এপ্রিল",
|
||
"মে",
|
||
"জুন",
|
||
"জুলাই",
|
||
"আগস্ট",
|
||
"সেপ্ট",
|
||
"অক্টো",
|
||
"নভে",
|
||
"ডিসে",
|
||
],
|
||
|
||
abbreviated: [
|
||
"জানু",
|
||
"ফেব্রু",
|
||
"মার্চ",
|
||
"এপ্রিল",
|
||
"মে",
|
||
"জুন",
|
||
"জুলাই",
|
||
"আগস্ট",
|
||
"সেপ্ট",
|
||
"অক্টো",
|
||
"নভে",
|
||
"ডিসে",
|
||
],
|
||
|
||
wide: [
|
||
"জানুয়ারি",
|
||
"ফেব্রুয়ারি",
|
||
"মার্চ",
|
||
"এপ্রিল",
|
||
"মে",
|
||
"জুন",
|
||
"জুলাই",
|
||
"আগস্ট",
|
||
"সেপ্টেম্বর",
|
||
"অক্টোবর",
|
||
"নভেম্বর",
|
||
"ডিসেম্বর",
|
||
],
|
||
};
|
||
|
||
const dayValues = {
|
||
narrow: ["র", "সো", "ম", "বু", "বৃ", "শু", "শ"],
|
||
short: ["রবি", "সোম", "মঙ্গল", "বুধ", "বৃহ", "শুক্র", "শনি"],
|
||
abbreviated: ["রবি", "সোম", "মঙ্গল", "বুধ", "বৃহ", "শুক্র", "শনি"],
|
||
wide: [
|
||
"রবিবার",
|
||
"সোমবার",
|
||
"মঙ্গলবার",
|
||
"বুধবার",
|
||
"বৃহস্পতিবার ",
|
||
"শুক্রবার",
|
||
"শনিবার",
|
||
],
|
||
};
|
||
|
||
const dayPeriodValues = {
|
||
narrow: {
|
||
am: "পূ",
|
||
pm: "অপ",
|
||
midnight: "মধ্যরাত",
|
||
noon: "মধ্যাহ্ন",
|
||
morning: "সকাল",
|
||
afternoon: "বিকাল",
|
||
evening: "সন্ধ্যা",
|
||
night: "রাত",
|
||
},
|
||
abbreviated: {
|
||
am: "পূর্বাহ্ন",
|
||
pm: "অপরাহ্ন",
|
||
midnight: "মধ্যরাত",
|
||
noon: "মধ্যাহ্ন",
|
||
morning: "সকাল",
|
||
afternoon: "বিকাল",
|
||
evening: "সন্ধ্যা",
|
||
night: "রাত",
|
||
},
|
||
wide: {
|
||
am: "পূর্বাহ্ন",
|
||
pm: "অপরাহ্ন",
|
||
midnight: "মধ্যরাত",
|
||
noon: "মধ্যাহ্ন",
|
||
morning: "সকাল",
|
||
afternoon: "বিকাল",
|
||
evening: "সন্ধ্যা",
|
||
night: "রাত",
|
||
},
|
||
};
|
||
|
||
const formattingDayPeriodValues = {
|
||
narrow: {
|
||
am: "পূ",
|
||
pm: "অপ",
|
||
midnight: "মধ্যরাত",
|
||
noon: "মধ্যাহ্ন",
|
||
morning: "সকাল",
|
||
afternoon: "বিকাল",
|
||
evening: "সন্ধ্যা",
|
||
night: "রাত",
|
||
},
|
||
abbreviated: {
|
||
am: "পূর্বাহ্ন",
|
||
pm: "অপরাহ্ন",
|
||
midnight: "মধ্যরাত",
|
||
noon: "মধ্যাহ্ন",
|
||
morning: "সকাল",
|
||
afternoon: "বিকাল",
|
||
evening: "সন্ধ্যা",
|
||
night: "রাত",
|
||
},
|
||
wide: {
|
||
am: "পূর্বাহ্ন",
|
||
pm: "অপরাহ্ন",
|
||
midnight: "মধ্যরাত",
|
||
noon: "মধ্যাহ্ন",
|
||
morning: "সকাল",
|
||
afternoon: "বিকাল",
|
||
evening: "সন্ধ্যা",
|
||
night: "রাত",
|
||
},
|
||
};
|
||
|
||
function dateOrdinalNumber(number, localeNumber) {
|
||
if (number > 18 && number <= 31) {
|
||
return localeNumber + "শে";
|
||
} else {
|
||
switch (number) {
|
||
case 1:
|
||
return localeNumber + "লা";
|
||
case 2:
|
||
case 3:
|
||
return localeNumber + "রা";
|
||
case 4:
|
||
return localeNumber + "ঠা";
|
||
default:
|
||
return localeNumber + "ই";
|
||
}
|
||
}
|
||
}
|
||
|
||
const ordinalNumber = (dirtyNumber, options) => {
|
||
const number = Number(dirtyNumber);
|
||
const localeNumber = numberToLocale(number);
|
||
const unit = options?.unit;
|
||
|
||
if (unit === "date") {
|
||
return dateOrdinalNumber(number, localeNumber);
|
||
}
|
||
if (number > 10 || number === 0) return localeNumber + "তম";
|
||
|
||
const rem10 = number % 10;
|
||
switch (rem10) {
|
||
case 2:
|
||
case 3:
|
||
return localeNumber + "য়";
|
||
case 4:
|
||
return localeNumber + "র্থ";
|
||
case 6:
|
||
return localeNumber + "ষ্ঠ";
|
||
default:
|
||
return localeNumber + "ম";
|
||
}
|
||
};
|
||
|
||
// function localeToNumber(locale: string): number {
|
||
// const enNumber = locale.toString().replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
|
||
// return numberValues.number[match as keyof typeof numberValues.number]
|
||
// })
|
||
// return Number(enNumber)
|
||
// }
|
||
|
||
export function numberToLocale(enNumber) {
|
||
return enNumber.toString().replace(/\d/g, function (match) {
|
||
return numberValues.locale[match];
|
||
});
|
||
}
|
||
|
||
export const localize = {
|
||
ordinalNumber,
|
||
|
||
era: buildLocalizeFn({
|
||
values: eraValues,
|
||
defaultWidth: "wide",
|
||
}),
|
||
|
||
quarter: buildLocalizeFn({
|
||
values: quarterValues,
|
||
defaultWidth: "wide",
|
||
argumentCallback: (quarter) => quarter - 1,
|
||
}),
|
||
|
||
month: buildLocalizeFn({
|
||
values: monthValues,
|
||
defaultWidth: "wide",
|
||
}),
|
||
|
||
day: buildLocalizeFn({
|
||
values: dayValues,
|
||
defaultWidth: "wide",
|
||
}),
|
||
|
||
dayPeriod: buildLocalizeFn({
|
||
values: dayPeriodValues,
|
||
defaultWidth: "wide",
|
||
formattingValues: formattingDayPeriodValues,
|
||
defaultFormattingWidth: "wide",
|
||
}),
|
||
};
|