diff --git a/src/lib/views/Settings.svelte b/src/lib/views/Settings.svelte
index 6763b2d..b20e0b5 100644
--- a/src/lib/views/Settings.svelte
+++ b/src/lib/views/Settings.svelte
@@ -706,16 +706,18 @@
{t("nav.about")}
-
+
{#if settings.backendStub && section === "sync"}
-
- Preview mode — the sync backend isn't implemented yet (Phase 9). Changes are kept in the UI
- only.
-
+ {t("settings.sync.stub")}
{/if}
{#if section === "recording"}
@@ -1261,51 +1263,52 @@
{:else if section === "sync"}
- Sync & upload
+ {t("settings.sync.title")}
settings.setSyncEnabled((e.target as HTMLInputElement).checked)}
/>
- Enable uploading meeting artifacts to configured targets
+ {t("settings.sync.enable_label")}
-
- Off by default. Nothing is uploaded unless this is on and a target is enabled. Self-hosted
- targets keep data on your own server; third-party clouds are clearly labeled.
-
+ {t("settings.sync.enable_hint")}
- Targets
+ {t("settings.sync.targets_title")}
{#if settings.targets.length === 0}
- No targets yet. Add one below.
+ {t("settings.sync.no_targets")}
{:else}
{/each}
{/if}
-
{#each ["webdav", "onedrive", "dropbox", "box"] as k (k)}
@@ -1317,20 +1320,22 @@
{/if}
{#if form.kind === "webdav"}
-
- WebDAV covers Nextcloud, ownCloud, Cloudreve, Seafile, and Synology. (Seafile: enable
- SeafDAV server-side.)
-
+
{t("settings.sync.webdav_hint")}
- Name
Provider
+ >{t("settings.sync.name")}
+ {t("settings.sync.provider")}
{#each PROVIDERS as p (p)}{p} {/each}
Server URL {t("settings.sync.server_url")}
{#if davAutoPath}
Just your server URL — WhispAssist adds
- /remote.php/dav/files/<username>/ automatically. {t("settings.sync.server_url_note_1")}
+ /remote.php/dav/files/<username>/
+ {t("settings.sync.server_url_note_2")}
{/if}
- Remote folder
- Username
App password {t("settings.sync.remote_folder")}
+ {t("settings.sync.username")}
+ {t("settings.sync.app_password")}
- Upload
- transcript
- notes
- summary
+ {t("settings.sync.upload_legend")}
recording (.wav, if retained)
+ {t("settings.sync.artifact_transcript")}
+
+ {t("settings.sync.artifact_notes")}
+
+ {t("settings.sync.artifact_summary")}
+
+ {t("settings.sync.artifact_recording")}
Allow plaintext http for
- a LAN address (not recommended)
+ {t("settings.sync.allow_plaintext")}
- Encrypt before upload (destination stores only ciphertext)
- {#if !vault?.unlocked}— requires an unlocked vault {/if}
+ {t("settings.sync.encrypt_before")}
+ {#if !vault?.unlocked}{t("settings.sync.requires_vault")} {/if}
-
Test connection
+
{t("settings.sync.test_connection")}
{editingId ? "Save changes" : "Add target"} {editingId
+ ? t("settings.sync.save_changes")
+ : t("settings.sync.add_target_btn")}
{#if editingId}
-
Cancel
+
{t("settings.sync.cancel")}
{/if}
{#if testResult}
@@ -1399,27 +1417,28 @@
{:else}
- {form.kind} is a third-party cloud — uploading sends your data off your device to {form.kind}.
+ {t("settings.sync.third_party_banner", { kind: form.kind })}
- Name
+ {t("settings.sync.name")}
- Link {form.kind} account…
- Opens an OAuth sign-in (loopback redirect); the token is stored in your OS credential
- store. {t("settings.sync.link_account", { kind: form.kind })}
+ {t("settings.sync.oauth_hint")}
{#if settings.linkMessage}
{settings.linkMessage}
{/if}
{/if}
-
+
{:else if section === "ai"}