diff --git a/web/src/lib/admin/queues.ts b/web/src/lib/admin/queues.ts index f8d6149e..767831a7 100644 --- a/web/src/lib/admin/queues.ts +++ b/web/src/lib/admin/queues.ts @@ -1,3 +1,4 @@ +import { plural } from '#lib/utils/plural.js'; import type { AdminQueue, AdminSummary } from '#lib/api/types.js'; // The queues that wait on an admin (#5605), in the order the Overview lists @@ -30,5 +31,5 @@ export function countOf(summary: AdminSummary | undefined, key: QueueKey): numbe } export function queueLabel(def: QueueDef, n: number): string { - return `${n} ${n === 1 ? def.one : def.many}`; + return plural(n, def.one, def.many); } diff --git a/web/src/lib/api/client.ts b/web/src/lib/api/client.ts index 2e623394..6b9beb48 100644 --- a/web/src/lib/api/client.ts +++ b/web/src/lib/api/client.ts @@ -1,3 +1,4 @@ +import { plural } from '#lib/utils/plural.js'; export type ApiError = { code: string; message: string; @@ -18,7 +19,7 @@ export function rateLimitMessage(err: unknown): string | null { const secs = apiErr.retryAfter; if (!secs || secs <= 0) return 'Too many attempts. Try again in a few minutes.'; const mins = Math.ceil(secs / 60); - return `Too many attempts. Try again in ${mins} minute${mins === 1 ? '' : 's'}.`; + return `Too many attempts. Try again in ${plural(mins, 'minute', 'minutes')}.`; } export type User = { diff --git a/web/src/lib/components/ActiveSessions.svelte b/web/src/lib/components/ActiveSessions.svelte index 674c1d93..82ee5cd2 100644 --- a/web/src/lib/components/ActiveSessions.svelte +++ b/web/src/lib/components/ActiveSessions.svelte @@ -1,4 +1,5 @@ {#if unmatched.isPending} @@ -89,7 +89,7 @@ {u.title} -
{u.artist} · {tracks(u.tracks)}
+
{u.artist} · {plural(u.tracks, 'track', 'tracks')}

{u.detail}

@@ -131,7 +131,7 @@
{u.title}
- {u.artist} · {tracks(u.tracks)} · left off {relativeTime(u.decided_at)} + {u.artist} · {plural(u.tracks, 'track', 'tracks')} · left off {relativeTime(u.decided_at)}