166 lines
3.3 KiB
JavaScript
166 lines
3.3 KiB
JavaScript
|
import { buildLocalizeFn } from "../../_lib/buildLocalizeFn.mjs";
|
|||
|
|
|||
|
const eraValues = {
|
|||
|
narrow: ["av. J.-C", "ap. J.-C"],
|
|||
|
abbreviated: ["av. J.-C", "ap. J.-C"],
|
|||
|
wide: ["avant Jésus-Christ", "après Jésus-Christ"],
|
|||
|
};
|
|||
|
|
|||
|
const quarterValues = {
|
|||
|
narrow: ["T1", "T2", "T3", "T4"],
|
|||
|
abbreviated: ["1er trim.", "2ème trim.", "3ème trim.", "4ème trim."],
|
|||
|
wide: ["1er trimestre", "2ème trimestre", "3ème trimestre", "4ème trimestre"],
|
|||
|
};
|
|||
|
|
|||
|
const monthValues = {
|
|||
|
narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
|
|||
|
abbreviated: [
|
|||
|
"janv.",
|
|||
|
"févr.",
|
|||
|
"mars",
|
|||
|
"avr.",
|
|||
|
"mai",
|
|||
|
"juin",
|
|||
|
"juil.",
|
|||
|
"août",
|
|||
|
"sept.",
|
|||
|
"oct.",
|
|||
|
"nov.",
|
|||
|
"déc.",
|
|||
|
],
|
|||
|
|
|||
|
wide: [
|
|||
|
"janvier",
|
|||
|
"février",
|
|||
|
"mars",
|
|||
|
"avril",
|
|||
|
"mai",
|
|||
|
"juin",
|
|||
|
"juillet",
|
|||
|
"août",
|
|||
|
"septembre",
|
|||
|
"octobre",
|
|||
|
"novembre",
|
|||
|
"décembre",
|
|||
|
],
|
|||
|
};
|
|||
|
|
|||
|
const dayValues = {
|
|||
|
narrow: ["D", "L", "M", "M", "J", "V", "S"],
|
|||
|
short: ["di", "lu", "ma", "me", "je", "ve", "sa"],
|
|||
|
abbreviated: ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
|
|||
|
|
|||
|
wide: [
|
|||
|
"dimanche",
|
|||
|
"lundi",
|
|||
|
"mardi",
|
|||
|
"mercredi",
|
|||
|
"jeudi",
|
|||
|
"vendredi",
|
|||
|
"samedi",
|
|||
|
],
|
|||
|
};
|
|||
|
|
|||
|
const dayPeriodValues = {
|
|||
|
narrow: {
|
|||
|
am: "AM",
|
|||
|
pm: "PM",
|
|||
|
midnight: "minuit",
|
|||
|
noon: "midi",
|
|||
|
morning: "mat.",
|
|||
|
afternoon: "ap.m.",
|
|||
|
evening: "soir",
|
|||
|
night: "mat.",
|
|||
|
},
|
|||
|
abbreviated: {
|
|||
|
am: "AM",
|
|||
|
pm: "PM",
|
|||
|
midnight: "minuit",
|
|||
|
noon: "midi",
|
|||
|
morning: "matin",
|
|||
|
afternoon: "après-midi",
|
|||
|
evening: "soir",
|
|||
|
night: "matin",
|
|||
|
},
|
|||
|
wide: {
|
|||
|
am: "AM",
|
|||
|
pm: "PM",
|
|||
|
midnight: "minuit",
|
|||
|
noon: "midi",
|
|||
|
morning: "du matin",
|
|||
|
afternoon: "de l’après-midi",
|
|||
|
evening: "du soir",
|
|||
|
night: "du matin",
|
|||
|
},
|
|||
|
};
|
|||
|
|
|||
|
const ordinalNumber = (dirtyNumber, options) => {
|
|||
|
const number = Number(dirtyNumber);
|
|||
|
const unit = options?.unit;
|
|||
|
|
|||
|
if (number === 0) return "0";
|
|||
|
|
|||
|
const feminineUnits = ["year", "week", "hour", "minute", "second"];
|
|||
|
let suffix;
|
|||
|
|
|||
|
if (number === 1) {
|
|||
|
suffix = unit && feminineUnits.includes(unit) ? "ère" : "er";
|
|||
|
} else {
|
|||
|
suffix = "ème";
|
|||
|
}
|
|||
|
|
|||
|
return number + suffix;
|
|||
|
};
|
|||
|
|
|||
|
const LONG_MONTHS_TOKENS = ["MMM", "MMMM"];
|
|||
|
|
|||
|
export const localize = {
|
|||
|
preprocessor: (date, parts) => {
|
|||
|
// Replaces the `do` tokens with `d` when used with long month tokens and the day of the month is greater than one.
|
|||
|
// Use case "do MMMM" => 1er août, 29 août
|
|||
|
// see https://github.com/date-fns/date-fns/issues/1391
|
|||
|
|
|||
|
if (date.getDate() === 1) return parts;
|
|||
|
|
|||
|
const hasLongMonthToken = parts.some(
|
|||
|
(part) => part.isToken && LONG_MONTHS_TOKENS.includes(part.value),
|
|||
|
);
|
|||
|
|
|||
|
if (!hasLongMonthToken) return parts;
|
|||
|
|
|||
|
return parts.map((part) =>
|
|||
|
part.isToken && part.value === "do"
|
|||
|
? { isToken: true, value: "d" }
|
|||
|
: part,
|
|||
|
);
|
|||
|
},
|
|||
|
|
|||
|
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",
|
|||
|
}),
|
|||
|
};
|