mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-06 05:26:54 +08:00
parent
e1c8e4a226
commit
92d97c1fee
1 changed files with 118 additions and 13 deletions
|
@ -1,6 +1,6 @@
|
|||
import { roundTo2 } from "@monkeytype/util/numbers";
|
||||
import { Day } from "date-fns";
|
||||
import * as Locales from "date-fns/locale";
|
||||
|
||||
/**
|
||||
* Converts seconds to a human-readable string representation of time.
|
||||
* @param sec The number of seconds to convert.
|
||||
|
@ -106,6 +106,115 @@ export function secondsToString(
|
|||
return ret.trim();
|
||||
}
|
||||
|
||||
/*
|
||||
generated by
|
||||
import * as Locales from "date-fns/locale";
|
||||
const result = {};
|
||||
for (const locale of Object.keys(Locales)) {
|
||||
// @ts-ignore
|
||||
const data = Locales[locale] as Locales.Locale;
|
||||
result[locale] = (data.options?.weekStartsOn as number) % 7;
|
||||
}
|
||||
*/
|
||||
|
||||
const weekStartsOnFallback: Record<string, Day> = {
|
||||
af: 0,
|
||||
ar: 6,
|
||||
arDZ: 0,
|
||||
arEG: 0,
|
||||
arMA: 1,
|
||||
arSA: 0,
|
||||
arTN: 1,
|
||||
az: 1,
|
||||
be: 1,
|
||||
beTarask: 1,
|
||||
bg: 1,
|
||||
bn: 0,
|
||||
bs: 1,
|
||||
ca: 1,
|
||||
ckb: 0,
|
||||
cs: 1,
|
||||
cy: 0,
|
||||
da: 1,
|
||||
de: 1,
|
||||
deAT: 1,
|
||||
el: 1,
|
||||
enAU: 1,
|
||||
enCA: 0,
|
||||
enGB: 1,
|
||||
enIE: 1,
|
||||
enIN: 1,
|
||||
enNZ: 1,
|
||||
enUS: 0,
|
||||
enZA: 0,
|
||||
eo: 1,
|
||||
es: 1,
|
||||
et: 1,
|
||||
eu: 1,
|
||||
faIR: 6,
|
||||
fi: 1,
|
||||
fr: 1,
|
||||
frCA: 0,
|
||||
frCH: 1,
|
||||
fy: 1,
|
||||
gd: 0,
|
||||
gl: 1,
|
||||
gu: 1,
|
||||
he: 0,
|
||||
hi: 0,
|
||||
hr: 1,
|
||||
ht: 1,
|
||||
hu: 1,
|
||||
hy: 1,
|
||||
id: 1,
|
||||
is: 1,
|
||||
it: 1,
|
||||
itCH: 1,
|
||||
ja: 0,
|
||||
jaHira: 0,
|
||||
ka: 1,
|
||||
kk: 1,
|
||||
km: 0,
|
||||
kn: 1,
|
||||
ko: 0,
|
||||
lb: 1,
|
||||
lt: 1,
|
||||
lv: 1,
|
||||
mk: 1,
|
||||
mn: 1,
|
||||
ms: 1,
|
||||
mt: 1,
|
||||
nb: 1,
|
||||
nl: 1,
|
||||
nlBE: 1,
|
||||
nn: 1,
|
||||
oc: 1,
|
||||
pl: 1,
|
||||
pt: 1,
|
||||
ptBR: 0,
|
||||
ro: 1,
|
||||
ru: 1,
|
||||
se: 1,
|
||||
sk: 1,
|
||||
sl: 1,
|
||||
sq: 1,
|
||||
sr: 1,
|
||||
srLatn: 1,
|
||||
sv: 1,
|
||||
ta: 1,
|
||||
te: 0,
|
||||
th: 0,
|
||||
tr: 1,
|
||||
ug: 0,
|
||||
uk: 1,
|
||||
uz: 1,
|
||||
uzCyrl: 1,
|
||||
vi: 1,
|
||||
zhCN: 1,
|
||||
zhHK: 0,
|
||||
zhTW: 1,
|
||||
};
|
||||
|
||||
export function getFirstDayOfTheWeek(): Day {
|
||||
if (navigator.language === undefined || navigator.language === null) {
|
||||
return 0;
|
||||
|
@ -128,20 +237,16 @@ export function getFirstDayOfTheWeek(): Day {
|
|||
return (locale.getWeekInfo().firstDay as number) % 7;
|
||||
}
|
||||
|
||||
//use date-fns for browsers like firefox
|
||||
// @ts-ignore
|
||||
let dateFnsLocale = Locales[
|
||||
navigator.language.replaceAll("-", "")
|
||||
] as Locales.Locale;
|
||||
|
||||
if (dateFnsLocale === undefined || dateFnsLocale === null) {
|
||||
//retry with language only
|
||||
// @ts-ignore
|
||||
dateFnsLocale = Locales[navigator.language.split("-")[0]] as Locales.Locale;
|
||||
//use fallback generated from date-fns for browsers like firefox
|
||||
let fallback = weekStartsOnFallback[navigator.language.replaceAll("-", "")];
|
||||
if (fallback !== undefined) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
if (dateFnsLocale !== undefined && dateFnsLocale !== null) {
|
||||
return ((dateFnsLocale.options?.weekStartsOn ?? 0) % 7) as Day;
|
||||
//retry with language only
|
||||
fallback = weekStartsOnFallback[navigator.language.split("-")[0] as string];
|
||||
if (fallback !== undefined) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
return 0; //start on sunday
|
||||
|
|
Loading…
Add table
Reference in a new issue