fix(frontend): align Settings desktop labels on French (#78)

UX decision (carnet #78): the human UI of IdeA is French by default,
uniform per surface — proper nouns and technical acronyms (URL, LAN,
IP/CIDR, HTTPS, API, CLI…) stay as-is. Settings mixed English (AI
Profiles, Deployment) with French (Appareils, frozen by UX for #77).

Renames the Settings menu/nav, the Profils IA and Déploiement panels
(titles, actions, states, help text) to French, per the carnet's
exhaustive list. Updates the affected tests accordingly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 14:53:32 +02:00
parent a69c5db093
commit 6e92536d84
6 changed files with 94 additions and 90 deletions

View File

@ -401,9 +401,10 @@ export function ProjectsView() {
},
{
id: "settings",
label: "Settings",
label: "Paramètres",
// One entry per section (#68). The entries name sections and mark the open
// one; closing lives in the view ("Close Settings"), so no label alternates.
// one; closing lives in the view ("Fermer les paramètres"), so no label
// alternates.
items: SETTINGS_SECTIONS.map((section) => ({
id: section,
label: SETTINGS_SECTION_LABEL[section],

View File

@ -208,13 +208,13 @@ describe("ProjectsView (with MockProjectGateway)", () => {
expect(screen.queryByLabelText("ai profiles settings")).toBeNull();
// Settings → AI Profiles swaps the main area to the profiles settings.
openMenuItem("Settings", "AI Profiles");
openMenuItem("Paramètres", "Profils IA");
expect(await screen.findByLabelText("ai profiles settings")).toBeTruthy();
expect(screen.queryByLabelText("project name")).toBeNull();
// #68: closing is an explicit action in the view, not an alternating menu
// label — the label never scaled past one section.
fireEvent.click(screen.getByRole("button", { name: "Close Settings" }));
fireEvent.click(screen.getByRole("button", { name: "Fermer les paramètres" }));
await waitFor(() =>
expect(screen.getByLabelText("project name")).toBeTruthy(),
);
@ -226,13 +226,13 @@ describe("ProjectsView (with MockProjectGateway)", () => {
await waitForIdle();
// The Settings menu now names sections; Deployment opens directly.
openMenuItem("Settings", "Deployment");
openMenuItem("Paramètres", "Déploiement");
expect(await screen.findByLabelText("deployment settings")).toBeTruthy();
expect(screen.queryByLabelText("ai profiles settings")).toBeNull();
// The internal nav column switches sections without leaving Settings.
const nav = screen.getByRole("navigation", { name: "settings sections" });
fireEvent.click(within(nav).getByRole("button", { name: "AI Profiles" }));
fireEvent.click(within(nav).getByRole("button", { name: "Profils IA" }));
expect(await screen.findByLabelText("ai profiles settings")).toBeTruthy();
expect(screen.queryByLabelText("deployment settings")).toBeNull();
});