diff --git a/src/__tests__/copy-matches-behaviour-guard.test.ts b/src/__tests__/copy-matches-behaviour-guard.test.ts index 727b10d01..979e01cf6 100644 --- a/src/__tests__/copy-matches-behaviour-guard.test.ts +++ b/src/__tests__/copy-matches-behaviour-guard.test.ts @@ -92,6 +92,13 @@ const FINALITY_PHRASES: Record = { pl: ["nie można cofnąć", "nie można tego cofnąć", "trwale", "nieodwracaln"], ko: ["되돌릴 수 없", "복구할 수 없", "영구", "완전히 삭제"], nl: ["niet ongedaan", "definitief", "permanent", "onherroepelijk"], + "pt-BR": [ + "não pode ser desfeit", + "não é possível desfazer", + "permanentemente", + "definitivamente", + "irreversível", + ], }; /** Per-locale phrase that promises the short undo window. */ @@ -104,6 +111,7 @@ const UNDO_PHRASES: Record = { pl: "cofnąć", ko: "되돌릴 수 있", nl: "ongedaan maken", + "pt-BR": "desfazer", }; /** Confirmation bodies whose surface renders an Undo affordance. */ @@ -189,6 +197,7 @@ describe("sleep debt is labelled as a balance, not a summed deficit", () => { pl: ["skumulowan", "niedobór", "niedoboru"], ko: ["누적", "부족분", "적자", "쌓인"], nl: ["cumulatief", "opgeteld", "tekort", "opgebouwd"], + "pt-BR": ["acumulad", "déficit", "deficit", "somad"], }; for (const locale of LOCALES) { @@ -326,6 +335,17 @@ describe("the mood prognosis never states a cause", () => { "verlaagt je", "verhoogt je", ], + "pt-BR": [ + "porque", + "por causa de", + "devido a", + "provoca", + "leva a", + "melhora o seu", + "melhora a sua", + "piora o seu", + "piora a sua", + ], }; /** Every leaf string under `insights.mood.prognosis`, flattened. */ @@ -430,6 +450,12 @@ describe("the MCP token copy never claims the mint is read-only", () => { "alleen-lezentoken", "token met alleen leesrechten", ], + "pt-BR": [ + "token somente leitura", + "token de somente leitura", + "token só de leitura", + "token apenas de leitura", + ], }; for (const locale of LOCALES) { @@ -480,6 +506,7 @@ describe("AI consent withdrawal copy matches what withdrawing does", () => { pl: ["własnym kluczu", "lokalnym modelu"], ko: ["자신의 키", "로컬 모델"], nl: ["eigen sleutel", "lokaal model"], + "pt-BR": ["sua própria chave", "modelo local"], }; for (const locale of LOCALES) { diff --git a/src/__tests__/sharing-boundary-copy.test.ts b/src/__tests__/sharing-boundary-copy.test.ts index 55c6d2f14..b0731e96c 100644 --- a/src/__tests__/sharing-boundary-copy.test.ts +++ b/src/__tests__/sharing-boundary-copy.test.ts @@ -105,7 +105,7 @@ describe("the published boundary matches the one the code draws", () => { expect(accessDescription()).toMatch(/allergies, family history/i); }); - it("keeps the refusal paragraph honest in all six locales", () => { + it("keeps the refusal paragraph honest in every locale", () => { // The delegate-facing half. It is shown on a page sharing does NOT cover, // so a sentence that over-claims there is read at the exact moment // somebody is working out where the edge is. @@ -125,7 +125,7 @@ describe("the published boundary matches the one the code draws", () => { // And it must still say the account itself stays with its owner — // dropping that would fix one over-claim by removing the boundary. expect(text, locale).toMatch( - /konto|account|compte|cuenta|konta|koncie|계정/i, + /konto|account|compte|cuenta|konta|koncie|conta|계정/i, ); } expect(missing).toEqual([]); diff --git a/src/components/clinician/__tests__/clinician-view-locales.test.tsx b/src/components/clinician/__tests__/clinician-view-locales.test.tsx index fd3198b0e..366f794a4 100644 --- a/src/components/clinician/__tests__/clinician-view-locales.test.tsx +++ b/src/components/clinician/__tests__/clinician-view-locales.test.tsx @@ -223,9 +223,9 @@ const FULL_RECORD = { const DOTTED_KEY = /\b[a-z][A-Za-z0-9]*(\.[A-Za-z0-9_]+){2,}\b/g; describe(" resolves every label in every locale", () => { - it("covers all eight shipped locales", () => { + it("covers all nine shipped locales", () => { // A floor: an empty locale list would make the loop below assert nothing. - expect(locales.length).toBe(8); + expect(locales.length).toBe(9); }); for (const locale of locales) { diff --git a/src/components/settings/access/__tests__/managed-profile-affordances.test.tsx b/src/components/settings/access/__tests__/managed-profile-affordances.test.tsx index a90c813e9..c9b4afe3e 100644 --- a/src/components/settings/access/__tests__/managed-profile-affordances.test.tsx +++ b/src/components/settings/access/__tests__/managed-profile-affordances.test.tsx @@ -34,6 +34,7 @@ import { join } from "node:path"; import { renderToStaticMarkup } from "react-dom/server"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { locales } from "@/lib/i18n/config"; import { I18nProvider } from "@/lib/i18n/context"; import { ApiError } from "@/lib/api/api-fetch"; import type { AccountAccessEntry } from "@/lib/sharing/account-access-view"; @@ -285,12 +286,12 @@ describe("the managed-profile card, in the shared-access section", () => { } // The timezone control is the shared picker, which labels itself. expect(html).toContain('id="managed-profile-timezone"'); - // Eight languages offered, which is the route's enum exactly. + // Every shipped language offered, which is the route's enum exactly. const options = /]*data-slot="managed-profile-locale"[\s\S]*?<\/select>/ .exec(html)?.[0] .match(/