From 7999e66c9c78ada3666eb7cea7c22a352bb4cbf0 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 24 Jun 2026 02:30:51 +0800
Subject: [PATCH] Add cancellable model downloads

---
 privatevoice.src/frontend/src/lib/i18n/en.json |   62 ++++++++++++++++++++++--------
 1 files changed, 45 insertions(+), 17 deletions(-)

diff --git a/privatevoice.src/frontend/src/lib/i18n/en.json b/privatevoice.src/frontend/src/lib/i18n/en.json
index 722f4b5..6444716 100755
--- a/privatevoice.src/frontend/src/lib/i18n/en.json
+++ b/privatevoice.src/frontend/src/lib/i18n/en.json
@@ -1,10 +1,13 @@
 {
   "app": {
-    "name": "PrivateVoice Input",
-    "secondaryName": "私语输入"
+    "name": "PrivateVoice Dictation",
+    "brandName": "PrivateVoice",
+    "brandTagline": "Private. Offline.",
+    "secondaryName": "Private. Offline."
   },
   "nav": {
     "home": "Home",
+    "language": "Input",
     "userdict": "Dictionary",
     "permissions": "Permissions",
     "history": "History",
@@ -30,7 +33,7 @@
     "done": "Typed"
   },
   "home": {
-    "tagline": "Private.Offline",
+    "tagline": "Private. Offline.",
     "description": "Hold {key} to speak, release to recognize and type",
     "hotkeyLabel": "Trigger Hotkey",
     "modeHint": "Hold to record, release to type · Tap to start free talk, tap again to stop",
@@ -38,6 +41,8 @@
     "modeHintHold": "Hold to speak, release to stop and type"
   },
   "settings": {
+    "inputConfigTitle": "Input",
+    "inputConfigDesc": "Set input language and offline recognition models.",
     "inputDevice": "Input Device",
     "hotkeyMode": "Voice Input Mode",
     "hotkeyModeTap": "Tap",
@@ -48,17 +53,21 @@
     "languageAuto": "Automatic",
     "languageChinese": "Chinese",
     "languageEnglish": "English",
-    "languageAutoDesc": "Follow the system language, currently choosing only between Chinese and English",
+    "languageAutoDesc": "Follow the system language and choose the matching language version",
+    "languageManualDesc": "Use {language} as the app language and default recognition language",
     "languageChineseDesc": "Use the Chinese interface with SenseVoice as the default offline model",
     "languageEnglishDesc": "Use the English interface with Moonshine English as the default offline model",
     "recognitionModel": "Recognition Model",
-    "recognitionModelChineseDesc": "Use the default lightweight Chinese offline model",
+    "recognitionModelDesc": "Choose the default offline model or an available model for {language}",
+    "recognitionModelChineseDesc": "Choose the default lightweight Chinese model or a larger high-quality Chinese model",
     "recognitionModelEnglishDesc": "Choose the default lightweight model or a larger high-quality English model",
     "modelDefault": "Default",
     "modelAdvanced": "Advanced",
     "modelCurrent": "Current",
     "modelUse": "Use",
     "modelDownload": "Download",
+    "modelCancel": "Cancel",
+    "modelCancelling": "Cancelling",
     "modelWorking": "Working",
     "modelInstalled": "Installed",
     "modelNotInstalled": "Not installed",
@@ -70,18 +79,22 @@
     "copyToClipboard": "Save Recognition to Clipboard",
     "copyToClipboardDesc": "Keep recognized text in the clipboard after input; off uses it only temporarily",
     "startAtLogin": "Start at Login",
-    "startAtLoginDesc": "Launch PrivateVoice Input when you log in",
+    "startAtLoginDesc": "Launch PrivateVoice Dictation when you log in",
     "hideDockIcon": "Hide Dock Icon",
-    "hideDockIconDesc": "Show PrivateVoice Input only in the menu bar"
+    "hideDockIconDesc": "Show PrivateVoice Dictation only in the menu bar"
   },
   "models": {
     "sensevoiceDesc": "Lightweight Chinese offline model for Chinese and mixed Chinese-English input.",
     "moonshineDesc": "Lightweight English offline model, recommended default.",
-    "parakeetDesc": "Higher quality English offline model for longer sentences and technical terms."
+    "parakeetDesc": "Higher quality English offline model for longer sentences and technical terms.",
+    "parakeetV3Desc": "Multilingual European offline model for French, German, Spanish, Italian, and Portuguese.",
+    "japaneseDesc": "Dedicated Japanese offline model based on ReazonSpeech.",
+    "koreanDesc": "Dedicated Korean offline model for Korean dictation.",
+    "qwen3Desc": "Higher quality Chinese offline model for long Chinese dictation, technical terms, and mixed Chinese-English input."
   },
   "permissions": {
     "title": "Permission Check",
-    "subtitle": "PrivateVoice Input needs these permissions for recording, global hotkeys, and automatic text input",
+    "subtitle": "PrivateVoice Dictation needs these permissions for recording, global hotkeys, and automatic text input",
     "refresh": "Refresh",
     "grant": "Grant",
     "granted": "Granted",
@@ -107,7 +120,7 @@
     },
     "backgroundActivity": {
       "title": "Background Activity / Login Item",
-      "desc": "Starts PrivateVoice Input after login and allows it to run as a menu bar app in the background; it does not affect the currently running voice input."
+      "desc": "Starts PrivateVoice Dictation after login and allows it to run as a menu bar app in the background; it does not affect the currently running voice input."
     }
   },
   "hotkeys": {
@@ -131,13 +144,23 @@
     "checkingUpdate": "Checking...",
     "isLatestVersion": "Up to date",
     "checkFailed": "Check failed",
-    "tagline": "Private.Offline",
-    "slogan": "Private.Offline",
+    "displayName": "PrivateVoice Dictation",
+    "tagline": "Private offline · Custom dictionary · Privacy protected",
+    "slogan": "Voice dictation that truly belongs to you",
+    "offlineText": "This app runs fully offline. All speech recognition is completed on the local device using local models including SenseVoice, Qwen3-ASR, Moonshine English, and Parakeet.",
+    "noDataText": "Data never leaves the device. The app does not collect, upload, or store any voice, text, dictionary, or usage data.",
     "legalText": "This app is a secondary development based on the open-source VoiceSnap project and follows the MIT License.",
     "legalDetails": "For complete copyright notices, license text, and improvement details, visit:",
-    "supportUrl": "https://shanghai3168.github.io/privatevoice-support/",
-    "openSupport": "Open copyright and license details",
-    "copyright": "© {year} PrivateVoice Input · MIT License"
+    "sourceProjectLabel": "Source project",
+    "licenseLabel": "License details",
+    "privacyLabel": "Privacy policy",
+    "feedbackLabel": "Support",
+    "sourceUrl": "https://github.com/vorojar/VoiceSnap",
+    "licenseUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/",
+    "privacyUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/privacy.html",
+    "feedbackUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/support.html",
+    "openSupport": "Open support and feedback",
+    "copyright": "© {year} PrivateVoice Dictation · MIT License"
   },
   "history": {
     "title": "Recognition History",
@@ -197,7 +220,7 @@
     "from": "Recognized As",
     "to": "Replace With",
     "fromPlaceholder": "e.g. voice snap",
-    "toPlaceholder": "e.g. PrivateVoice Input",
+    "toPlaceholder": "e.g. PrivateVoice Dictation",
     "add": "Add",
     "edit": "Edit",
     "save": "Save",
@@ -255,7 +278,12 @@
     "optimizing": "Optimizing...",
     "extracting": "Extracting model files...",
     "complete": "Complete",
-    "failed": "Setup failed"
+    "failed": "Setup failed",
+    "cancel": "Cancel",
+    "cancelling": "Cancelling",
+    "cancelled": "Cancelled",
+    "cancelledDetail": "Model download was cancelled. You can download it again later.",
+    "retry": "Download again"
   },
   "update": {
     "title": "Update Available",

--
Gitblit v1.9.3