fix(i18n): numbers, units, dates and order in the UI language, and after a switch (E30 S3)
Every locale formatter takes the language as an argument. Under the React
Compiler a formatter that read the i18n singleton was memoized on its other
arguments, so a card kept "2 hr 4 min" after a switch to Hungarian; plexLang()
had the same flaw and left Plex queries in the old language. Components now
take the language from useTranslation, and the signature makes forgetting it
a type error.
- ratings, file sizes, stream stats: the language's decimal mark ("8,3")
- view and subscriber counts compact in the language ("1,2 E")
- seconds as the language's unit ("6 mp") in the sliders and the stats
- a person's birth and death dates as dates, not ISO strings
- A-Z lists by the shown name in the language's alphabet (compareText),
the tag catalog re-sorted by its translated names
- lint local/locale-format (was date-format) also refuses Intl.NumberFormat
outside lib/format.ts, localeCompare, and a component reading the language
off the i18n singleton
This commit is contained in:
@@ -22,16 +22,16 @@ export function parseSummary(summary: string | null | undefined): JobResult | nu
|
||||
* stored "new=3, failed=0" — English keys, a Python dict repr for a nested phase. A count's key is
|
||||
* named from `scheduler.result`, a `skipped` / `reason` word from `scheduler.skip`; an unnamed key or
|
||||
* word shows as it is, and an `error` stays the upstream's own text (it is diagnostic). */
|
||||
export function jobResultText(t: TFunction, result: JobResult): string {
|
||||
export function jobResultText(t: TFunction, result: JobResult, lang: string): string {
|
||||
return Object.entries(result)
|
||||
.map(([key, value]) => {
|
||||
const label = t(`scheduler.result.${key}`, { defaultValue: key.replace(/_/g, " ") });
|
||||
if (typeof value === "number") return `${label}: ${formatNumber(value)}`;
|
||||
if (typeof value === "number") return `${label}: ${formatNumber(value, lang)}`;
|
||||
if (typeof value === "string")
|
||||
return key === "error"
|
||||
? `${label}: ${value}`
|
||||
: `${label}: ${t(`scheduler.skip.${vocabKey(value)}`, { defaultValue: value })}`;
|
||||
return `${label} (${jobResultText(t, value)})`;
|
||||
return `${label} (${jobResultText(t, value, lang)})`;
|
||||
})
|
||||
.join(" · ");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user