228 lines
5.4 KiB
JavaScript
228 lines
5.4 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",
|
||
},
|
||
};
|
||
|
||
// CLDR #1585 - #1592
|
||
const eraValues = {
|
||
narrow: ["ईसा-पूर्व", "ईस्वी"],
|
||
abbreviated: ["ईसा-पूर्व", "ईस्वी"],
|
||
wide: ["ईसा-पूर्व", "ईसवी सन"],
|
||
};
|
||
|
||
// CLDR #1593 - #1616
|
||
const quarterValues = {
|
||
narrow: ["1", "2", "3", "4"],
|
||
abbreviated: ["ति1", "ति2", "ति3", "ति4"],
|
||
wide: ["पहली तिमाही", "दूसरी तिमाही", "तीसरी तिमाही", "चौथी तिमाही"],
|
||
};
|
||
|
||
// Note: in English, the names of days of the week and months are capitalized.
|
||
// If you are making a new locale based on this one, check if the same is true for the language you're working on.
|
||
// Generally, formatted dates should look like they are in the middle of a sentence,
|
||
// e.g. in Spanish language the weekdays and months should be in the lowercase.
|
||
// https://www.unicode.org/cldr/charts/32/summary/hi.html
|
||
// CLDR #1617 - #1688
|
||
const monthValues = {
|
||
narrow: [
|
||
"ज",
|
||
"फ़",
|
||
"मा",
|
||
"अ",
|
||
"मई",
|
||
"जू",
|
||
"जु",
|
||
"अग",
|
||
"सि",
|
||
"अक्टू",
|
||
"न",
|
||
"दि",
|
||
],
|
||
|
||
abbreviated: [
|
||
"जन",
|
||
"फ़र",
|
||
"मार्च",
|
||
"अप्रैल",
|
||
"मई",
|
||
"जून",
|
||
"जुल",
|
||
"अग",
|
||
"सित",
|
||
"अक्टू",
|
||
"नव",
|
||
"दिस",
|
||
],
|
||
|
||
wide: [
|
||
"जनवरी",
|
||
"फ़रवरी",
|
||
"मार्च",
|
||
"अप्रैल",
|
||
"मई",
|
||
"जून",
|
||
"जुलाई",
|
||
"अगस्त",
|
||
"सितंबर",
|
||
"अक्टूबर",
|
||
"नवंबर",
|
||
"दिसंबर",
|
||
],
|
||
};
|
||
|
||
// CLDR #1689 - #1744
|
||
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: "रात",
|
||
},
|
||
};
|
||
|
||
const ordinalNumber = (dirtyNumber, _options) => {
|
||
const number = Number(dirtyNumber);
|
||
return numberToLocale(number);
|
||
};
|
||
|
||
export function localeToNumber(locale) {
|
||
const enNumber = locale.toString().replace(/[१२३४५६७८९०]/g, function (match) {
|
||
return numberValues.number[match];
|
||
});
|
||
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",
|
||
}),
|
||
};
|