{
|
"app": {
|
"name": "PrivateVoice Dictation",
|
"brandName": "PrivateVoice",
|
"brandTagline": "Private. Offline.",
|
"secondaryName": "Private. Offline."
|
},
|
"nav": {
|
"home": "Home",
|
"language": "Input",
|
"userdict": "Dictionary",
|
"permissions": "Permissions",
|
"history": "History",
|
"about": "About"
|
},
|
"status": {
|
"loading": "Loading",
|
"ready": "Ready",
|
"recording": "Recording",
|
"processing": "Processing",
|
"done": "Done",
|
"cancelled": "Cancelled",
|
"noVoice": "No voice detected",
|
"noContent": "No content recognized",
|
"error": "Recognition error",
|
"engineNotReady": "Engine not ready",
|
"initializing": "Initializing..."
|
},
|
"indicator": {
|
"holdToSpeak": "Hold {key} to speak",
|
"recording": "Recording...",
|
"processing": "Processing...",
|
"done": "Typed"
|
},
|
"home": {
|
"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",
|
"modeHintTap": "Tap to start speaking, tap again to stop and type",
|
"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",
|
"hotkeyModeHold": "Hold",
|
"hotkeyModeTapDesc": "Tap the hotkey to start speaking, then tap again to stop and type",
|
"hotkeyModeHoldDesc": "Hold the hotkey to speak, release to stop and type",
|
"language": "Language",
|
"languageAuto": "Automatic",
|
"languageChinese": "Chinese",
|
"languageEnglish": "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",
|
"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",
|
"modelUnavailable": "Unavailable",
|
"modelInstalled": "Installed",
|
"modelNotInstalled": "Not installed",
|
"modelActionFailed": "Model action failed",
|
"autoHide": "Auto-hide Indicator",
|
"autoHideDesc": "Automatically hide the floating indicator after completion",
|
"soundFeedback": "Sound Feedback",
|
"soundFeedbackDesc": "Play a beep when recording starts and stops",
|
"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 Dictation when you log in",
|
"hideDockIcon": "Hide Dock Icon",
|
"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.",
|
"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.",
|
"qwen3RequiresMacOS14": "Qwen3-ASR requires macOS 14 or later. This compatibility build does not support downloading it."
|
},
|
"permissions": {
|
"title": "Permission Check",
|
"subtitle": "PrivateVoice Dictation needs these permissions for recording, global hotkeys, and automatic text input",
|
"refresh": "Refresh",
|
"grant": "Grant",
|
"granted": "Granted",
|
"missing": "Missing",
|
"enabled": "Enabled",
|
"disabled": "Disabled",
|
"optional": "Optional",
|
"checking": "Checking",
|
"allGranted": "All permissions are ready",
|
"needsAttention": "Some permissions need attention",
|
"summaryDesc": "This turns green automatically once permissions are granted",
|
"microphone": {
|
"title": "Microphone",
|
"desc": "Records your speech before recognition can start."
|
},
|
"accessibility": {
|
"title": "Accessibility",
|
"desc": "Types recognized text into the active field and supports simulated paste/typing."
|
},
|
"inputMonitoring": {
|
"title": "Input Monitoring",
|
"desc": "Listens for the global right Alt hotkey while other apps are in front."
|
},
|
"backgroundActivity": {
|
"title": "Background Activity / Login Item",
|
"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": {
|
"title": "Trigger Hotkey",
|
"current": "Current Hotkey",
|
"change": "Change",
|
"pressAnyKey": "Press any key...",
|
"updated": "Updated",
|
"hintTitle": "Two Input Modes",
|
"hintHold": "Hold to Talk",
|
"hintHoldDesc": "Hold the hotkey to record, release to recognize and type. Best for quick phrases.",
|
"hintFree": "Free Talk",
|
"hintFreeDesc": "Tap the hotkey once to start, speak freely, tap again to stop and type. Best for long dictation.",
|
"hintCombo": "Keyboard shortcuts (e.g. Ctrl+C) won't trigger recording."
|
},
|
"about": {
|
"version": "Version",
|
"engineMode": "Engine",
|
"website": "Website",
|
"checkUpdate": "Check for Updates",
|
"checkingUpdate": "Checking...",
|
"isLatestVersion": "Up to date",
|
"checkFailed": "Check failed",
|
"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:",
|
"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",
|
"retention": "Keep History",
|
"days7": "7 Days",
|
"days30": "30 Days",
|
"days90": "90 Days",
|
"forever": "Forever",
|
"empty": "No history yet",
|
"emptyDesc": "Recognition results will appear here",
|
"loading": "Loading history",
|
"loadFailed": "Failed to load history",
|
"pageEmpty": "No history on this page",
|
"copied": "Copied",
|
"copy": "Copy",
|
"delete": "Delete",
|
"deleteFailed": "Delete failed",
|
"storageLocation": "Saved At",
|
"storageSize": "Size {size}",
|
"sizeUnknown": "--",
|
"copyPath": "Copy Path",
|
"pathCopied": "Path Copied",
|
"openFolder": "Open Folder",
|
"openFolderFailed": "Failed to open folder",
|
"exportCorrectionCsv": "Export Correction CSV",
|
"exportTodayUnprocessed": "Export Today Unprocessed",
|
"exportLast7DaysUnprocessed": "Export Last 7 Days Unprocessed",
|
"exportAllUnprocessed": "Export All Unprocessed",
|
"exportingCorrectionCsv": "Exporting...",
|
"exportCorrectionCsvSuccess": "Exported to {path}",
|
"exportCorrectionCsvFailed": "Export failed",
|
"exportCorrectionCsvNoEntries": "No matching unprocessed history to export",
|
"exportCorrectionCsvPrivacy": "The exported CSV contains local recognition history. Please keep it safe.",
|
"clearMenu": "Clear",
|
"clearAll": "Clear All",
|
"clearConfirm": "Are you sure you want to clear all history?",
|
"clearAllSuccess": "All history cleared",
|
"clearExported": "Clear Exported CSV History",
|
"clearExportedConfirm": "Clear history already exported to correction CSV? Exported only means a CSV was written successfully. It does not mean the CSV was reviewed or imported. Unexported history will be kept. This cannot be undone, so make sure the CSV is saved.",
|
"clearExportedSuccess": "Cleared {count} exported entries",
|
"clearExportedNoEntries": "No exported CSV history to clear",
|
"clearFailed": "Clear failed",
|
"retentionFailed": "Failed to update retention",
|
"firstPage": "First",
|
"prevPage": "Previous",
|
"nextPage": "Next",
|
"lastPage": "Last",
|
"pageInput": "Page",
|
"totalPages": "{total} pages",
|
"totalEntries": "{total} entries",
|
"today": "Today",
|
"yesterday": "Yesterday"
|
},
|
"userdict": {
|
"title": "User Dictionary",
|
"subtitle": "Replace commonly misrecognized words with the spelling you want to keep",
|
"from": "Recognized As",
|
"to": "Replace With",
|
"fromPlaceholder": "e.g. voice snap",
|
"toPlaceholder": "e.g. PrivateVoice Dictation",
|
"add": "Add",
|
"edit": "Edit",
|
"save": "Save",
|
"cancel": "Cancel",
|
"delete": "Delete",
|
"enable": "Enable",
|
"disable": "Disable",
|
"import": "Import",
|
"importJson": "Import User Dictionary",
|
"importJsonSuccess": "Dictionary JSON imported",
|
"importJsonFailed": "Dictionary JSON import failed",
|
"export": "Export User Dictionary",
|
"importCorrectionCsv": "Import Correction CSV",
|
"readingCorrectionCsv": "Reading...",
|
"previewTitle": "Correction CSV Preview",
|
"previewFile": "File: {file}",
|
"previewWillAdd": "Will Add",
|
"previewCsvDuplicate": "CSV Duplicate",
|
"previewDictDuplicate": "Dictionary Duplicate",
|
"previewConflict": "Conflict",
|
"previewInvalid": "Invalid",
|
"previewEmpty": "Empty",
|
"previewLimitExceeded": "Limit",
|
"previewTruncated": "Prioritizing the first {count} key details. Summary includes all candidates.",
|
"previewNoNewRules": "No new rules to import",
|
"previewNoDetails": "No details to show",
|
"previewRowSlot": "Row {row} · Slot {slot}",
|
"confirmImport": "Import New Rules",
|
"confirmingImport": "Importing...",
|
"importCorrectionCsvSuccess": "Imported {count} new rules",
|
"importCorrectionCsvFailed": "Correction CSV import failed",
|
"statusNew": "New",
|
"statusCsvDuplicate": "CSV Duplicate",
|
"statusDictDuplicate": "Dictionary Duplicate",
|
"statusConflict": "Conflict",
|
"statusInvalid": "Invalid",
|
"statusEmpty": "Empty",
|
"statusLimit": "Limit",
|
"imported": "Imported",
|
"exported": "Exported",
|
"exportedTo": "Exported to {path}",
|
"saved": "Saved",
|
"saveFailed": "Save failed",
|
"importFailed": "Import failed",
|
"exportFailed": "Export failed",
|
"empty": "No words yet",
|
"emptyDesc": "Add names, brands, or domain terms and recognition output will be replaced automatically",
|
"loading": "Loading dictionary",
|
"loadFailed": "Failed to load dictionary",
|
"pageEmpty": "No dictionary rules on this page"
|
},
|
"onboarding": {
|
"title": "First Time Setup",
|
"syncModel": "Downloading voice model...",
|
"optimizing": "Optimizing...",
|
"extracting": "Extracting model files...",
|
"complete": "Complete",
|
"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",
|
"version": "Version {version}",
|
"releaseNotes": "Release Notes",
|
"download": "Update Now",
|
"later": "Later",
|
"downloading": "Downloading...",
|
"applying": "Applying update..."
|
}
|
}
|