feat(frontend): russian and english interface with a language choice in settings, soon stubs removed

This commit is contained in:
hh committed 2026-10-19 01:54:34 +00:00
1 parent 3d2f670e87
commit 3460246749
13 files changed
+313 -132

No files matched your search

+30 -20
View File
@@ -1,29 +1,39 @@
const time = new Intl.DateTimeFormat(undefined, {
hour: "2-digit",
minute: "2-digit",
});
const day = new Intl.DateTimeFormat(undefined, {
day: "numeric",
month: "short",
});
const full = new Intl.DateTimeFormat(undefined, {
day: "numeric",
hour: "2-digit",
minute: "2-digit",
month: "short",
year: "numeric",
});
import { locale } from "#lib/i18n/locale.svelte.js";
const OPTIONS = {
day: { day: "numeric", month: "short" },
full: {
day: "numeric",
hour: "2-digit",
minute: "2-digit",
month: "short",
year: "numeric",
},
time: { hour: "2-digit", minute: "2-digit" },
} satisfies Record<string, Intl.DateTimeFormatOptions>;
const formatters = new Map<string, Intl.DateTimeFormat>();
function format(kind: keyof typeof OPTIONS, date: Date): string {
const key = `${locale.tag}:${kind}`;
let formatter = formatters.get(key);
if (!formatter) {
formatter = new Intl.DateTimeFormat(locale.tag, OPTIONS[kind]);
formatters.set(key, formatter);
}
return formatter.format(date);
}
export function formatTime(iso: string): string {
return time.format(new Date(iso));
return format("time", new Date(iso));
}
export function formatDay(iso: string): string {
return day.format(new Date(iso));
return format("day", new Date(iso));
}
export function formatFull(iso: string): string {
return full.format(new Date(iso));
return format("full", new Date(iso));
}
export function formatListDate(iso: string | null): string {
@@ -33,7 +43,7 @@ export function formatListDate(iso: string | null): string {
const date = new Date(iso);
const now = new Date();
if (date.toDateString() === now.toDateString()) {
return time.format(date);
return format("time", date);
}
return day.format(date);
return format("day", date);
}