From 030b06329a19fd790ebb61ae1f97add0eda4c10c Mon Sep 17 00:00:00 2001 From: iamdoubz <> Date: Sun, 12 Jul 2026 09:35:22 -0500 Subject: [PATCH] feat(i18n): display-language selector in Settings + t() on nav and transcription-language strings --- src/lib/views/Settings.svelte | 60 +++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/src/lib/views/Settings.svelte b/src/lib/views/Settings.svelte index 2e0dbe2..1d15f44 100644 --- a/src/lib/views/Settings.svelte +++ b/src/lib/views/Settings.svelte @@ -6,6 +6,7 @@ import { settings } from "../stores/settings.svelte"; import { calendar } from "../stores/calendar.svelte"; import { meetings } from "../stores/meetings.svelte"; + import { t, i18n, LOCALES } from "../i18n/index.svelte"; import ConsentNotice from "../components/ConsentNotice.svelte"; import HostedAiBanner from "../components/HostedAiBanner.svelte"; import { open } from "@tauri-apps/plugin-dialog"; @@ -49,7 +50,16 @@ let { onClose }: { onClose: () => void } = $props(); let section = $state< - "recording" | "hardware" | "storage" | "calendar" | "sync" | "ai" | "mcp" | "privacy" | "about" + | "recording" + | "hardware" + | "storage" + | "calendar" + | "sync" + | "ai" + | "mcp" + | "privacy" + | "language" + | "about" >("recording"); // The currently active whisper model (T8.7, FR-TRX-4) — gates the @@ -650,31 +660,34 @@ Settings (section = "recording")}> - Recording + {t("nav.recording")} (section = "hardware")}> - Hardware + {t("nav.hardware")} (section = "storage")}> - Storage + {t("nav.storage")} (section = "calendar")}> - Calendar + {t("nav.calendar")} (section = "sync")}> - Sync + {t("nav.sync")} (section = "ai")}> - AI + {t("nav.ai")} (section = "mcp")}> - MCP server + {t("nav.mcp")} (section = "privacy")}> - Privacy + {t("nav.privacy")} + + (section = "language")}> + {t("nav.language")} (section = "about")}> - About + {t("nav.about")} @@ -1002,10 +1015,10 @@ {/each} - Transcription Language + {t("settings.transcription.title")} {#if activeModel?.multilingual} Language + >{t("settings.transcription.label")} { @@ -1013,16 +1026,13 @@ settings.setWhisperLanguage(v || null); }} > - Auto-detect + {t("settings.transcription.auto")} {#each settings.languages as l (l.code)} {l.label} {/each} - - Applies to the next recording. The language actually used is shown on each meeting - afterward. - + {t("settings.transcription.applies_hint")} {:else} Language @@ -1890,6 +1900,22 @@ {#if vaultMsg}{vaultMsg}{/if} {/if} + {:else if section === "language"} + + {t("settings.language.title")} + {t("settings.language.display")} + i18n.setLocale((e.target as HTMLSelectElement).value)} + > + {#each LOCALES as l (l.code)} + {l.label} + {/each} + + + {t("settings.language.display_hint")} + {:else if section === "about"} About
- Applies to the next recording. The language actually used is shown on each meeting - afterward. -
{t("settings.transcription.applies_hint")}
{vaultMsg}
{t("settings.language.display_hint")}