From e26e27b5ffa5f1a96554967a8e6c242da6066187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Thu, 21 May 2026 12:09:31 +0200 Subject: [PATCH] chore(i18n): drop dead format.dateShort timeShort dateTime keys across six locales MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The runtime never reads the format namespace — every locale-aware formatter routes through Intl.DateTimeFormat directly via src/lib/format-locale.ts. The keys were only verified by their own ordering smoke test, which is also removed. --- messages/de.json | 5 -- messages/en.json | 5 -- messages/es.json | 5 -- messages/fr.json | 5 -- messages/it.json | 5 -- messages/pl.json | 5 -- .../__tests__/format-locale-order.test.ts | 69 ------------------- 7 files changed, 99 deletions(-) delete mode 100644 src/lib/i18n/__tests__/format-locale-order.test.ts diff --git a/messages/de.json b/messages/de.json index 6eb93b9a6..fc8e0fc78 100644 --- a/messages/de.json +++ b/messages/de.json @@ -33,11 +33,6 @@ "showPassword": "Passwort anzeigen", "hidePassword": "Passwort verbergen" }, - "format": { - "dateShort": "{day}.{month}.{year}", - "timeShort": "{hour}:{minute}", - "dateTime": "{day}.{month}.{year} {hour}:{minute}" - }, "doctorReport": { "title": "Gesundheitsbericht", "subtitle": "HealthLog — Persönlicher Gesundheitsbericht", diff --git a/messages/en.json b/messages/en.json index df99c3f99..fe0b3daa6 100644 --- a/messages/en.json +++ b/messages/en.json @@ -33,11 +33,6 @@ "showPassword": "Show password", "hidePassword": "Hide password" }, - "format": { - "dateShort": "{month}/{day}/{year}", - "timeShort": "{hour}:{minute}", - "dateTime": "{month}/{day}/{year} {hour}:{minute}" - }, "doctorReport": { "title": "Health Report", "subtitle": "HealthLog — Personal Health Report", diff --git a/messages/es.json b/messages/es.json index 9503a3a0c..6d49a27a1 100644 --- a/messages/es.json +++ b/messages/es.json @@ -33,11 +33,6 @@ "showPassword": "Mostrar contraseña", "hidePassword": "Ocultar contraseña" }, - "format": { - "dateShort": "{day}/{month}/{year}", - "timeShort": "{hour}:{minute}", - "dateTime": "{day}/{month}/{year} {hour}:{minute}" - }, "doctorReport": { "title": "Informe de salud", "subtitle": "HealthLog — Informe personal de salud", diff --git a/messages/fr.json b/messages/fr.json index 20dd1b199..157d24eea 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -33,11 +33,6 @@ "showPassword": "Afficher le mot de passe", "hidePassword": "Masquer le mot de passe" }, - "format": { - "dateShort": "{day}/{month}/{year}", - "timeShort": "{hour}:{minute}", - "dateTime": "{day}/{month}/{year} {hour}:{minute}" - }, "doctorReport": { "title": "Rapport de santé", "subtitle": "HealthLog — Rapport personnel de santé", diff --git a/messages/it.json b/messages/it.json index c61b76936..471cc254d 100644 --- a/messages/it.json +++ b/messages/it.json @@ -33,11 +33,6 @@ "showPassword": "Mostra password", "hidePassword": "Nascondi password" }, - "format": { - "dateShort": "{day}/{month}/{year}", - "timeShort": "{hour}:{minute}", - "dateTime": "{day}/{month}/{year} {hour}:{minute}" - }, "doctorReport": { "title": "Rapporto sanitario", "subtitle": "HealthLog — Rapporto personale di salute", diff --git a/messages/pl.json b/messages/pl.json index 7c485f648..d91bba011 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -33,11 +33,6 @@ "showPassword": "Pokaż hasło", "hidePassword": "Ukryj hasło" }, - "format": { - "dateShort": "{day}.{month}.{year}", - "timeShort": "{hour}:{minute}", - "dateTime": "{day}.{month}.{year} {hour}:{minute}" - }, "doctorReport": { "title": "Raport zdrowotny", "subtitle": "HealthLog — Osobisty raport zdrowotny", diff --git a/src/lib/i18n/__tests__/format-locale-order.test.ts b/src/lib/i18n/__tests__/format-locale-order.test.ts deleted file mode 100644 index 22dbf80c4..000000000 --- a/src/lib/i18n/__tests__/format-locale-order.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * v1.4.27 B6 — `format.dateShort` / `timeShort` / `dateTime` ordering. - * - * Each shipped locale carries a `format.*` namespace that documents - * its native date-pattern ordering as i18n strings. The actual - * formatting still routes through `Intl.*` via - * `src/lib/format-locale.ts`; the format keys exist so downstream - * surfaces (PDF export, email templates, CSV docstrings) can render - * the date hint without a JS context. - * - * This smoke test pins the ordering per locale so a copy-paste - * regression that flips DD/MM to MM/DD on the French bundle would - * fail fast. - */ -import { readFileSync } from "node:fs"; -import { join } from "node:path"; -import { describe, expect, it } from "vitest"; - -const MESSAGES = join(__dirname, "../../../../messages"); - -function loadFormat(locale: string): { - dateShort: string; - timeShort: string; - dateTime: string; -} { - const bundle = JSON.parse( - readFileSync(join(MESSAGES, `${locale}.json`), "utf8"), - ); - const fmt = bundle.format as - | { dateShort?: string; timeShort?: string; dateTime?: string } - | undefined; - if (!fmt || !fmt.dateShort || !fmt.timeShort || !fmt.dateTime) { - throw new Error(`Locale ${locale} is missing the format namespace`); - } - return fmt as { dateShort: string; timeShort: string; dateTime: string }; -} - -describe("locale-native format ordering", () => { - it("DE renders day-month-year with dot separators", () => { - const fmt = loadFormat("de"); - expect(fmt.dateShort).toBe("{day}.{month}.{year}"); - expect(fmt.dateTime).toBe("{day}.{month}.{year} {hour}:{minute}"); - expect(fmt.timeShort).toBe("{hour}:{minute}"); - }); - - it("EN renders month-day-year with slash separators", () => { - const fmt = loadFormat("en"); - expect(fmt.dateShort).toBe("{month}/{day}/{year}"); - expect(fmt.dateTime).toBe("{month}/{day}/{year} {hour}:{minute}"); - expect(fmt.timeShort).toBe("{hour}:{minute}"); - }); - - it.each([["fr"], ["es"], ["it"]])( - "%s renders day-month-year with slash separators (native ordering)", - (locale) => { - const fmt = loadFormat(locale); - expect(fmt.dateShort).toBe("{day}/{month}/{year}"); - expect(fmt.dateTime).toBe("{day}/{month}/{year} {hour}:{minute}"); - expect(fmt.timeShort).toBe("{hour}:{minute}"); - }, - ); - - it("PL renders day-month-year with dot separators (native ordering)", () => { - const fmt = loadFormat("pl"); - expect(fmt.dateShort).toBe("{day}.{month}.{year}"); - expect(fmt.dateTime).toBe("{day}.{month}.{year} {hour}:{minute}"); - expect(fmt.timeShort).toBe("{hour}:{minute}"); - }); -});