177 lines
3.7 KiB
JavaScript
177 lines
3.7 KiB
JavaScript
const translations = {
|
|
xseconds_other: "sekundė_sekundžių_sekundes",
|
|
xminutes_one: "minutė_minutės_minutę",
|
|
xminutes_other: "minutės_minučių_minutes",
|
|
xhours_one: "valanda_valandos_valandą",
|
|
xhours_other: "valandos_valandų_valandas",
|
|
xdays_one: "diena_dienos_dieną",
|
|
xdays_other: "dienos_dienų_dienas",
|
|
xweeks_one: "savaitė_savaitės_savaitę",
|
|
xweeks_other: "savaitės_savaičių_savaites",
|
|
xmonths_one: "mėnuo_mėnesio_mėnesį",
|
|
xmonths_other: "mėnesiai_mėnesių_mėnesius",
|
|
xyears_one: "metai_metų_metus",
|
|
xyears_other: "metai_metų_metus",
|
|
about: "apie",
|
|
over: "daugiau nei",
|
|
almost: "beveik",
|
|
lessthan: "mažiau nei",
|
|
};
|
|
|
|
const translateSeconds = (_number, addSuffix, _key, isFuture) => {
|
|
if (!addSuffix) {
|
|
return "kelios sekundės";
|
|
} else {
|
|
return isFuture ? "kelių sekundžių" : "kelias sekundes";
|
|
}
|
|
};
|
|
|
|
const translateSingular = (_number, addSuffix, key, isFuture) => {
|
|
return !addSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2];
|
|
};
|
|
|
|
const translate = (number, addSuffix, key, isFuture) => {
|
|
const result = number + " ";
|
|
if (number === 1) {
|
|
return result + translateSingular(number, addSuffix, key, isFuture);
|
|
} else if (!addSuffix) {
|
|
return result + (special(number) ? forms(key)[1] : forms(key)[0]);
|
|
} else {
|
|
if (isFuture) {
|
|
return result + forms(key)[1];
|
|
} else {
|
|
return result + (special(number) ? forms(key)[1] : forms(key)[2]);
|
|
}
|
|
}
|
|
};
|
|
|
|
function special(number) {
|
|
return number % 10 === 0 || (number > 10 && number < 20);
|
|
}
|
|
|
|
function forms(key) {
|
|
return translations[key].split("_");
|
|
}
|
|
|
|
const formatDistanceLocale = {
|
|
lessThanXSeconds: {
|
|
one: translateSeconds,
|
|
other: translate,
|
|
},
|
|
|
|
xSeconds: {
|
|
one: translateSeconds,
|
|
other: translate,
|
|
},
|
|
|
|
halfAMinute: "pusė minutės",
|
|
|
|
lessThanXMinutes: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
xMinutes: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
aboutXHours: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
xHours: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
xDays: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
aboutXWeeks: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
xWeeks: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
aboutXMonths: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
xMonths: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
aboutXYears: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
xYears: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
overXYears: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
|
|
almostXYears: {
|
|
one: translateSingular,
|
|
other: translate,
|
|
},
|
|
};
|
|
|
|
export const formatDistance = (token, count, options) => {
|
|
const adverb = token.match(/about|over|almost|lessthan/i);
|
|
const unit = adverb ? token.replace(adverb[0], "") : token;
|
|
|
|
const isFuture = options?.comparison !== undefined && options.comparison > 0;
|
|
|
|
let result;
|
|
|
|
const tokenValue = formatDistanceLocale[token];
|
|
if (typeof tokenValue === "string") {
|
|
result = tokenValue;
|
|
} else if (count === 1) {
|
|
result = tokenValue.one(
|
|
count,
|
|
options?.addSuffix === true,
|
|
unit.toLowerCase() + "_one",
|
|
isFuture,
|
|
);
|
|
} else {
|
|
result = tokenValue.other(
|
|
count,
|
|
options?.addSuffix === true,
|
|
unit.toLowerCase() + "_other",
|
|
isFuture,
|
|
);
|
|
}
|
|
|
|
if (adverb) {
|
|
const key = adverb[0].toLowerCase();
|
|
result = translations[key] + " " + result;
|
|
}
|
|
|
|
if (options?.addSuffix) {
|
|
if (options.comparison && options.comparison > 0) {
|
|
return "po " + result;
|
|
} else {
|
|
return "prieš " + result;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
};
|