mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
Adds messages/nl.json (AI-initial, informal je/jij register, full key parity with en.json) and registers nl everywhere the locale list lives: config, loaders, Intl/date-fns mapping, zod enums, OpenAPI spec, scripts, the managed-profile picker and the notification locale guards. Dutch follows the Korean pattern for the AI surfaces (English body plus a Dutch reply-language footer, no safety-contract matrix) and gets its own banks in the outbound safety screen (dose, risk, causal, continuation), the prose-grounding and citation-coverage tables, the reference-range prose and the no-key fallback copy, each with Dutch test fixtures. PHQ-9 / GAD-7 / WHO-5 are not marked validated for nl yet: the Dutch wording has not been read against the published forms, so Dutch readers get the English items plus the existing note until it has.
52 lines
2.3 KiB
TypeScript
52 lines
2.3 KiB
TypeScript
/**
|
|
* Unit-test setup.
|
|
*
|
|
* Seed the client-side locale cache with every message bundle. In
|
|
* production only EN ships statically; the active locale arrives as an
|
|
* RSC prop from the root layout and other locales load via dynamic
|
|
* import on switch (see `src/lib/i18n/load-locale.ts`). Tests mount
|
|
* `I18nProvider` standalone — often with `renderToStaticMarkup`, which
|
|
* is synchronous and cannot await a dynamic import — so the cache is
|
|
* primed up front and `t()` resolves every locale on the first render,
|
|
* exactly like the server-handoff path does in the app.
|
|
*/
|
|
import { afterEach } from "vitest";
|
|
import { settleBackgroundTasks } from "@/lib/logging/background-tasks";
|
|
import { primeMessages } from "@/lib/i18n/load-locale";
|
|
import deMessages from "./messages/de.json";
|
|
import enMessages from "./messages/en.json";
|
|
import esMessages from "./messages/es.json";
|
|
import frMessages from "./messages/fr.json";
|
|
import itMessages from "./messages/it.json";
|
|
import plMessages from "./messages/pl.json";
|
|
import koMessages from "./messages/ko.json";
|
|
import nlMessages from "./messages/nl.json";
|
|
|
|
primeMessages("de", deMessages);
|
|
primeMessages("en", enMessages);
|
|
primeMessages("es", esMessages);
|
|
primeMessages("fr", frMessages);
|
|
primeMessages("it", itMessages);
|
|
primeMessages("pl", plMessages);
|
|
primeMessages("ko", koMessages);
|
|
primeMessages("nl", nlMessages);
|
|
|
|
/**
|
|
* Leave no background work in flight when a test ends.
|
|
*
|
|
* Several paths start a promise, return without awaiting it, and log on the
|
|
* detached handle so the failure is not swallowed. Vitest forwards every
|
|
* console write to the main thread as an `onUserConsoleLog` RPC call and
|
|
* rejects whatever is still pending on that channel while it tears a test file
|
|
* down, so a write that lands in that window fails the whole run with
|
|
* `EnvironmentTeardownError: Closing rpc while "onUserConsoleLog" was pending`
|
|
* — blamed on the file the worker was tearing down, which is not the test that
|
|
* started the work and need not log anything of its own. Awaiting the
|
|
* registered tasks here removes the precondition instead of muting the
|
|
* console, which would have thrown away a real signal and left the
|
|
* non-determinism in place. See `src/lib/logging/background-tasks.ts`.
|
|
*/
|
|
afterEach(async () => {
|
|
await settleBackgroundTasks();
|
|
});
|