From 9e1e300c721747db7f8070e949ddb574057fbfca Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 21 Oct 2025 16:59:13 +0300 Subject: [PATCH] fix(client): normalize locale when formatting time (closes #7444) --- apps/client/src/utils/formatters.spec.ts | 10 ++++++++-- apps/client/src/utils/formatters.ts | 11 ++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/client/src/utils/formatters.spec.ts b/apps/client/src/utils/formatters.spec.ts index 4c2f043bc..821207d9f 100644 --- a/apps/client/src/utils/formatters.spec.ts +++ b/apps/client/src/utils/formatters.spec.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from "vitest"; import options from "../services/options"; -import { formatDateTime } from "./formatters"; +import { formatDateTime, normalizeLocale } from "./formatters"; -describe("formatDateTime", () => { +describe("formatters", () => { it("tolerates incorrect locale", () => { options.set("formattingLocale", "cn_TW"); @@ -10,4 +10,10 @@ describe("formatDateTime", () => { expect(formatDateTime(new Date(), "full", "none")).toBeTruthy(); expect(formatDateTime(new Date(), "none", "full")).toBeTruthy(); }); + + it("normalizes locale", () => { + expect(normalizeLocale("zh_CN")).toBe("zh-CN"); + expect(normalizeLocale("cn")).toBe("zh-CN"); + expect(normalizeLocale("tw")).toBe("zh-TW"); + }); }); diff --git a/apps/client/src/utils/formatters.ts b/apps/client/src/utils/formatters.ts index ab1263a54..a7c9cceed 100644 --- a/apps/client/src/utils/formatters.ts +++ b/apps/client/src/utils/formatters.ts @@ -10,7 +10,7 @@ export function formatDateTime(date: string | Date | number | null | undefined, return ""; } - const locale = options.get("formattingLocale") || options.get("locale") || navigator.language; + const locale = normalizeLocale(options.get("formattingLocale") || options.get("locale") || navigator.language); let parsedDate; if (typeof date === "string" || typeof date === "number") { @@ -51,3 +51,12 @@ export function formatDateTime(date: string | Date | number | null | undefined, throw new Error("Incorrect state."); } + +export function normalizeLocale(locale: string) { + locale = locale.replaceAll("_", "-"); + switch (locale) { + case "cn": return "zh-CN"; + case "tw": return "zh-TW"; + default: return locale; + } +}