34be2e8dd1
Use redacted cursor neighborhood and pause-aware chunks for more natural polish, validate protected terms with retry/local fallback, and structure bilingual prompts for consistency and provider prefix caching.
427 lines
23 KiB
Plaintext
427 lines
23 KiB
Plaintext
/* Engine status labels */
|
||
"engine.summary.local" = "On-device · %@";
|
||
"engine.summary.cloud" = "Active: %@";
|
||
"engine.summary.cloudWithModel" = "Active: %1$@ · %2$@";
|
||
"engine.asr.appleSpeech" = "Apple SpeechAnalyzer";
|
||
|
||
/* v0.2.0: flow-level warnings surfaced alongside the final transcript. */
|
||
"flow.warning.cloudPolishMissingKey" = "Cloud polish needs an API key in Settings. Inserted raw ASR text.";
|
||
"flow.warning.localPolishUnavailable" = "Built-in polish is unavailable. Inserted raw ASR text.";
|
||
"flow.warning.polishDegraded" = "Weak network — inserted raw ASR text without polish.";
|
||
"flow.warning.polishDegradedQuality" = "Polish output failed validation; inserted a conservative version.";
|
||
|
||
/* LLM providers */
|
||
"provider.openai" = "OpenAI";
|
||
"provider.ark" = "Volcengine Ark";
|
||
"provider.deepseek" = "DeepSeek";
|
||
"provider.qwen" = "Qwen (DashScope)";
|
||
"provider.zhipu" = "Zhipu GLM";
|
||
"provider.moonshot" = "Moonshot";
|
||
"provider.siliconflow" = "SiliconFlow";
|
||
"provider.groq" = "Groq";
|
||
"provider.minimax" = "MiniMax";
|
||
"provider.mimo" = "Xiaomi MiMo";
|
||
"provider.openrouter" = "OpenRouter";
|
||
"provider.gemini" = "Google Gemini";
|
||
"provider.anthropic" = "Anthropic Claude";
|
||
"provider.xai" = "xAI Grok";
|
||
"provider.mistral" = "Mistral AI";
|
||
"provider.cometapi" = "CometAPI";
|
||
"provider.alibabaCoding" = "Alibaba Coding";
|
||
"provider.codingPlanX" = "CodingPlanX";
|
||
"provider.volcengine" = "Volcengine ASR";
|
||
"provider.bailian" = "Bailian Realtime ASR";
|
||
"provider.whisper" = "Whisper (OpenAI)";
|
||
"provider.codex_oauth" = "Codex OAuth";
|
||
"provider.custom" = "Custom";
|
||
|
||
/* LLM errors */
|
||
"error.llm.invalidURL" = "Invalid API URL. Check Base URL in Settings.";
|
||
"error.llm.noAPIKey" = "API Key is missing.";
|
||
"error.llm.http" = "API returned HTTP %lld. Try again later or contact the provider.";
|
||
"error.llm.decoding" = "Failed to parse the API response.";
|
||
"error.llm.transport" = "Network error. Check your connection and try again.";
|
||
"error.llm.rateLimited" = "Too many API requests. Please wait and try again.";
|
||
"error.llm.cancelled" = "Request cancelled.";
|
||
|
||
/* ASR errors */
|
||
"error.asr.localeUnsupported" = "Speech language assets are unavailable. Try again later or switch the recognition language.";
|
||
"error.asr.assetsNotReady" = "Speech language assets are not ready. Try again later.";
|
||
"error.asr.formatUnsupported" = "This device does not support the required audio format.";
|
||
"error.asr.noSpeech" = "No speech detected. Please try again.";
|
||
"error.asr.chunkFailed" = "Segment %lld failed: %@";
|
||
|
||
/* Cloud ASR errors */
|
||
"error.cloudASR.noAPIKey" = "API Key is missing.";
|
||
"error.cloudASR.invalidURL" = "Invalid cloud ASR endpoint.";
|
||
"error.cloudASR.http" = "Cloud ASR returned HTTP %lld.";
|
||
"error.cloudASR.httpWithMessage" = "Cloud ASR returned HTTP %lld: %@";
|
||
"error.cloudASR.decoding" = "Failed to parse cloud ASR response: %@";
|
||
"error.cloudASR.transport" = "Cloud ASR network error: %@";
|
||
"error.cloudASR.emptyTranscript" = "Cloud ASR returned an empty transcript.";
|
||
"error.cloudASR.audioTooLong" = "Audio segment is too long for this cloud ASR provider.";
|
||
"error.cloudASR.providerUnsupported" = "This provider does not support cloud speech recognition yet.";
|
||
"error.cloudASR.streamingNotImplemented" = "Streaming ASR failed for this provider. Check your API key and network, or try again.";
|
||
|
||
/* Provider tools */
|
||
"providerTools.error.invalidURL" = "Invalid model endpoint.";
|
||
"providerTools.error.missingAPIKey" = "API Key is missing.";
|
||
"providerTools.error.http" = "Model endpoint returned HTTP %lld.";
|
||
"providerTools.error.empty" = "No models returned.";
|
||
"providerTools.error.decoding" = "Failed to parse model list.";
|
||
"providerTools.error.transport" = "Network error while loading models.";
|
||
|
||
/* Polish scenarios */
|
||
"polishScenario.daily_chat" = "Daily Chat";
|
||
"polishScenario.social_lifestyle" = "Social Network";
|
||
"polishScenario.social_short" = "Instagram";
|
||
"polishScenario.goofy" = "Goofy";
|
||
"polishScenario.work" = "Work";
|
||
"polishScenario.document" = "Document";
|
||
"polishScenario.todo" = "TODO";
|
||
"polishScenario.custom" = "Custom";
|
||
"polishScenario.chip.daily_chat" = "Chat";
|
||
"polishScenario.chip.social_lifestyle" = "Social";
|
||
"polishScenario.chip.social_short" = "IG";
|
||
"polishScenario.chip.goofy" = "Goofy";
|
||
"polishScenario.chip.work" = "Work";
|
||
"polishScenario.chip.document" = "Doc";
|
||
"polishScenario.chip.todo" = "TODO";
|
||
"polishScenario.chip.custom" = "Custom";
|
||
"polishStyle.light" = "Light Cleanup";
|
||
"polishStyle.structured" = "Clear Structure";
|
||
"polishStyle.formal" = "Formal Writing";
|
||
"polishStyle.dating" = "Dating Coach";
|
||
"polishStyle.chat" = "Daily Chat";
|
||
"polishStyle.flex" = "Flex Guide";
|
||
"polishStyle.corp" = "Corp Speak";
|
||
"polishStyle.diba" = "DiBa Logic";
|
||
"polishStyle.xhs" = "RED Sisters";
|
||
|
||
/* v0.3.0: Polish intensity picker */
|
||
"polish.intensity.off" = "Off";
|
||
"polish.intensity.light" = "Light";
|
||
"polish.intensity.medium" = "Medium";
|
||
"polish.intensity.heavy" = "Heavy";
|
||
"polish.intensity.off.desc" = "No polish; inserts raw ASR unless your personal dictionary has entries, then runs ASR correction only.";
|
||
"polish.intensity.light.desc" = "Drop only isolated filler words and obvious duplications. Punctuation and structure still apply.";
|
||
"polish.intensity.medium.desc" = "Correct recognition errors, remove fillers, polish phrasing. Punctuation and structure always apply. Default.";
|
||
"polish.intensity.heavy.desc" = "Restructure into lists and paragraphs when needed. Best for meeting notes and reports.";
|
||
|
||
/* v0.3.0: Detected app context labels */
|
||
"appContext.code" = "Code";
|
||
"appContext.email" = "Email";
|
||
"appContext.chat" = "Chat";
|
||
"appContext.document" = "Document";
|
||
"appContext.unknown" = "General";
|
||
|
||
/* v0.3.0: Personal dictionary categories */
|
||
"dict.category.properNoun" = "Names & places";
|
||
"dict.category.technical" = "Technical terms";
|
||
"dict.category.acronym" = "Acronyms";
|
||
"dict.category.productName" = "Product names";
|
||
"dict.category.custom" = "Custom";
|
||
|
||
/* v0.3.0: Personal dictionary sources */
|
||
"dict.source.manual" = "Manual";
|
||
"dict.source.history" = "Auto-learned";
|
||
"dict.source.contacts" = "From Contacts";
|
||
"dict.source.recentEdit" = "From recent edit";
|
||
|
||
/* Keyboard UI (shared between extension + preview) */
|
||
"keyboard.tapToTalkA11y" = "Tap to talk";
|
||
"keyboard.translation.chip" = "Translate";
|
||
"keyboard.translation.offMenu" = "Don't translate";
|
||
"keyboard.translation.a11y" = "Translation";
|
||
"keyboard.translation.a11yHint" = "Toggle translation or change the target language.";
|
||
|
||
/* macOS app */
|
||
"mac.section.dashboard" = "Home";
|
||
"mac.section.history" = "History";
|
||
"mac.section.dictionary" = "Dictionary";
|
||
"mac.section.styles" = "Polish Styles";
|
||
"mac.styles.subtitle" = "Choose or create a complete writing personality for polished dictation.";
|
||
"mac.styles.add" = "Add Polish Style";
|
||
"mac.styles.edit" = "Edit Style";
|
||
"mac.styles.builtin" = "Built-in";
|
||
"mac.styles.fun" = "Fun styles";
|
||
"mac.styles.custom" = "My Styles";
|
||
"mac.styles.copy" = "Copy";
|
||
"mac.styles.viewPrompt" = "View Prompt";
|
||
"mac.styles.light" = "Minimal rewriting with recognition and punctuation fixes.";
|
||
"mac.styles.structured" = "Clear paragraphs and lists for multiple points.";
|
||
"mac.styles.formal" = "Professional writing for email and work.";
|
||
"mac.styles.dating" = "Warm, playful messages with a light touch of wit.";
|
||
"mac.styles.chat" = "Short, natural messages without a formal tone.";
|
||
"mac.styles.flex" = "4A / study-abroad Chinglish with optional luxury seasoning.";
|
||
"mac.styles.corp" = "Big-tech buzzwords for syncs, pushback, and blame-shifting.";
|
||
"mac.styles.diba" = "Clean logical takedowns that leave the other side stuck.";
|
||
"mac.styles.xhs" = "Sisterly Xiaohongshu note voice with hooks, ready to post.";
|
||
"mac.styles.customDescription" = "Custom complete writing personality";
|
||
"mac.styles.error" = "Couldn’t Save Style";
|
||
"mac.styles.validation" = "Check the name, prompt length, and the 8-style limit.";
|
||
"mac.styles.name" = "Style name";
|
||
"mac.styles.prompt" = "Complete prompt";
|
||
"mac.styles.hint" = "Use {{DICTIONARY}} to place the personal dictionary. System rules are appended automatically.";
|
||
"mac.section.settings" = "Settings";
|
||
"mac.brand.subtitle" = "AI DICTATION";
|
||
"mac.brand.tagline" = "Speak it. It’s typed.";
|
||
"mac.brand.tagline.subtitle" = "Local-first · Cross-device · One-tap dictation";
|
||
"mac.devices" = "Devices";
|
||
"mac.page.history.subtitle" = "Every dictation, kept in order.";
|
||
"mac.page.dictionary.subtitle" = "Words that teach recognition your voice.";
|
||
"mac.page.settings.subtitle" = "Engine, shortcuts, and appearance.";
|
||
"mac.status.ready" = "Ready when you are…";
|
||
"mac.status.listening" = "Listening…";
|
||
"mac.status.transcribing" = "Transcribing…";
|
||
"mac.status.polishing" = "Polishing…";
|
||
"mac.status.copied" = "Copied to clipboard";
|
||
"mac.status.pasted" = "Inserted into front app";
|
||
"mac.status.copiedAndPasted" = "Copied and inserted";
|
||
"mac.status.deliveryWithNote" = "%@ — %@";
|
||
"stat.dictationTime" = "Dictation Time";
|
||
"stat.words" = "Dictation Chars";
|
||
"stat.translation" = "Translation Chars";
|
||
"stat.dictionary" = "Dictionary";
|
||
"stat.cumulativeDuration" = "Total time";
|
||
"stat.transcribed" = "Transcribed";
|
||
"stat.cumulativeTranslation" = "Translated";
|
||
"stat.customTerms" = "Custom terms";
|
||
"stat.weekChart.title" = "Last 7 days";
|
||
"stat.weekChart.caption" = "Dictation chars";
|
||
"stat.weekChart.empty" = "No dictation yet this week";
|
||
"mac.status.chipReady" = "Ready";
|
||
"mac.status.chipProcessing" = "Processing";
|
||
"mac.overlay.listening" = "Listening";
|
||
"mac.overlay.preparing" = "Starting…";
|
||
"mac.overlay.transcribing" = "Transcribing";
|
||
"mac.overlay.polishing" = "Polishing";
|
||
"mac.overlay.live" = "Live";
|
||
"mac.overlay.done" = "Done";
|
||
"mac.overlay.dragHint" = "Drag to move · double-click to reset";
|
||
"mac.record.start" = "Record";
|
||
"mac.record.stop" = "Stop";
|
||
"mac.record.pressStop" = "Press Stop";
|
||
"mac.copy" = "Copy";
|
||
"mac.openWindow" = "Open Window";
|
||
"mac.quit" = "Quit";
|
||
"mac.mode.cloud" = "Cloud Mode";
|
||
"mac.mode.local" = "Local Mode";
|
||
"mac.connected" = "Connected";
|
||
"mac.offline" = "Offline";
|
||
"mac.history.empty" = "No dictations yet";
|
||
"mac.history.emptyBody" = "Hold Option anywhere to speak — transcripts land here.";
|
||
"mac.history.select" = "Select a dictation";
|
||
"mac.history.clearTitle" = "Clear all history?";
|
||
"mac.history.clearMessage" = "This cannot be undone.";
|
||
"mac.history.clearConfirm" = "Clear all";
|
||
"mac.history.clearDayTitle" = "Delete this day's history?";
|
||
"mac.history.clearDayMessage" = "All transcripts from this day will be removed. This cannot be undone.";
|
||
"mac.history.clearDayConfirm" = "Delete day";
|
||
"mac.history.clearDayButton" = "Delete this day's history";
|
||
"mac.dict.health" = "Vocabulary Health";
|
||
"mac.dict.healthDesc" = "Custom terms that bias recognition and are never rewritten.";
|
||
"mac.dict.add" = "Add Personal Word";
|
||
"mac.dict.addField" = "Word or phrase";
|
||
"mac.dict.addFooter" = "Common recognition mistakes will be generated automatically after saving.";
|
||
"mac.dict.aliasesGenerating" = "Generating aliases…";
|
||
"mac.dict.search" = "Search words";
|
||
"mac.dict.empty" = "No words yet";
|
||
"mac.dict.emptyBody" = "Add personal words to improve recognition accuracy. They sync across your devices via iCloud.";
|
||
"mac.dict.noMatch" = "No matches";
|
||
"mac.cancel" = "Cancel";
|
||
"mac.save" = "Save";
|
||
"mac.done" = "Done";
|
||
"mac.delete" = "Delete";
|
||
"mac.dict.deleteTitle" = "Delete this word?";
|
||
"mac.dict.deleteMessage" = "This cannot be undone.";
|
||
"mac.hint.holdOption" = "Hold Option to dictate";
|
||
"mac.settings.cloudProvider" = "CLOUD PROVIDER";
|
||
"mac.settings.polishProvider" = "TEXT POLISH (LLM)";
|
||
"mac.settings.asrProvider" = "SPEECH RECOGNITION (ASR)";
|
||
"mac.settings.asrService" = "ASR service";
|
||
"mac.settings.asrApiKey" = "ASR API key";
|
||
"mac.settings.asrModel" = "ASR model";
|
||
"mac.settings.baseURL" = "Base URL";
|
||
"mac.settings.service" = "Service";
|
||
"mac.settings.apiKey" = "API Key";
|
||
"mac.settings.model" = "Model";
|
||
"mac.settings.modelFetchHint" = "Enter an API Key, then fetch models.";
|
||
"mac.settings.connectionCheck" = "Connection check";
|
||
"mac.settings.validate" = "Validate";
|
||
"mac.settings.fetchModels" = "Fetch models";
|
||
"mac.settings.validating" = "Validating…";
|
||
"mac.settings.validateSuccess" = "Success · Retry";
|
||
"mac.settings.validateFailure" = "Failed · Retry";
|
||
"mac.settings.loadingModels" = "Loading models…";
|
||
"mac.settings.modelsLoaded" = "%lld models loaded.";
|
||
"mac.settings.selectModel" = "Select model";
|
||
"mac.settings.modelSelected" = "Selected %@";
|
||
"mac.settings.modelsEmptyHint" = "Tap refresh to load models";
|
||
"mac.settings.thinking" = "Thinking";
|
||
"mac.settings.thinkingSubtitle" = "Slower, higher quality — recommended off";
|
||
"mac.settings.thinkingHint" = "Off by default. Enable only for slower, deeper reasoning.";
|
||
"mac.settings.translation" = "Polish then translate";
|
||
"mac.settings.translationOff" = "Don't translate";
|
||
"mac.settings.volcengineAppId" = "APP ID";
|
||
"mac.settings.volcengineAccessToken" = "Access Token";
|
||
"mac.settings.volcengineResourceId" = "Resource ID";
|
||
"mac.settings.volcengineNote" = "Secret Key is not required. Resource ID defaults to volc.seedasr.sauc.duration.";
|
||
"mac.settings.recognition" = "RECOGNITION METHOD";
|
||
"mac.settings.cloudEngine" = "Cloud Engine & AI Refinement";
|
||
"mac.settings.cloudEngineDesc" = "Premium transcription via your provider's API, plus AI grammar and style polishing.";
|
||
"mac.settings.localEngine" = "Local Recognition";
|
||
"mac.settings.localEngineDesc" = "On-device transcription with a local model. High privacy, zero latency.";
|
||
"mac.settings.localSpeechFallback" = "Local Recognition (Apple Speech)";
|
||
"mac.settings.localSpeechFallbackDesc" = "On-device Apple Speech when the Qwen3 model is not installed.";
|
||
"mac.settings.about" = "About";
|
||
"mac.settings.privacyPolicy" = "Privacy Policy";
|
||
"mac.settings.thirdPartyLicenses" = "Third-Party Licenses";
|
||
"mac.settings.licenses.footer" = "Open-source components used by OSGKeyboard. License texts are reproduced from upstream repositories; model weights are downloaded at runtime and cached on device. OSGKeyboard itself is source-available — commercial licensing: rocky.hk@gmail.com.";
|
||
"mac.settings.restartOnboarding" = "Restart First-Run Setup";
|
||
"mac.settings.general" = "General";
|
||
"mac.settings.input" = "Input & Shortcuts";
|
||
"mac.settings.recognitionLanguage" = "Recognition Language";
|
||
"mac.settings.interfaceLanguage" = "Interface Language";
|
||
"mac.settings.autoPaste" = "Auto-paste after dictation";
|
||
"mac.settings.autoPasteDesc" = "Simulate ⌘V in the front app after transcription (requires Accessibility).";
|
||
"mac.settings.hotkey" = "Global shortcut";
|
||
"mac.settings.hotkeyDesc" = "Hold Option (⌥) to dictate from any app.";
|
||
"mac.settings.hotkeyTrigger" = "Shortcut key";
|
||
"mac.settings.hotkeyTriggerDesc" = "Which Option (⌥) key starts dictation when held.";
|
||
"mac.hotkeyTrigger.rightOption" = "Right Option (⌥)";
|
||
"mac.hotkeyTrigger.leftOption" = "Left Option (⌥)";
|
||
"mac.hotkeyTrigger.eitherOption" = "Either Option key";
|
||
"mac.hint.hold.rightOption" = "Hold right Option (⌥) to dictate";
|
||
"mac.hint.hold.leftOption" = "Hold left Option (⌥) to dictate";
|
||
"mac.hint.hold.eitherOption" = "Hold either Option (⌥) to dictate";
|
||
"mac.hint.holdOption" = "Hold Option to dictate";
|
||
"mac.settings.qwen3Model" = "Qwen3 model folder";
|
||
"mac.settings.qwen3ModelDesc" = "Folder with config.json, model.safetensors, vocab.json, and merges.txt.";
|
||
"mac.settings.qwen3Browse" = "Choose folder…";
|
||
"mac.settings.qwen3Missing" = "Qwen3 model not found — using Apple Speech for now.";
|
||
"mac.settings.mlxModelMissing" = "Select a Qwen3 MLX model folder below, or choose another installed model.";
|
||
"mac.settings.selectedModelMissing" = "%@ is not installed — using Apple Speech for now.";
|
||
"mac.settings.localModelFallbackApple" = "No local model is ready — using Apple Speech for now.";
|
||
"mac.settings.accessibility" = "Accessibility Permission";
|
||
"mac.settings.accessibilityDesc" = "Required for global shortcut and auto-paste.";
|
||
"mac.settings.openAccessibility" = "Open System Settings";
|
||
"mac.settings.appearance" = "Appearance";
|
||
"mac.settings.appearanceDesc" = "Match the system, or force a light or dark look.";
|
||
"mac.appearance.system" = "System";
|
||
"mac.appearance.light" = "Light";
|
||
"mac.appearance.dark" = "Dark";
|
||
"mac.onboarding.progress" = "Step %lld of %lld";
|
||
"mac.onboarding.back" = "Back";
|
||
"mac.onboarding.next" = "Next";
|
||
"mac.onboarding.finish" = "Finish";
|
||
"mac.onboarding.skipForNow" = "Skip for now";
|
||
"mac.onboarding.welcome.title" = "Speak it. It’s typed.";
|
||
"mac.onboarding.welcome.subtitle" = "Set up dictation in a minute. Everything here can be changed later in Settings.";
|
||
"mac.onboarding.welcome.privacy" = "Your voice stays local unless you choose a cloud provider.";
|
||
"mac.onboarding.welcome.hotkey" = "Hold Option to dictate from any app.";
|
||
"mac.onboarding.welcome.local" = "Local Sherpa recognition can be prepared now or later.";
|
||
"mac.onboarding.microphone.title" = "Allow microphone access";
|
||
"mac.onboarding.microphone.subtitle" = "OSGKeyboard needs the microphone to capture your dictation audio.";
|
||
"mac.onboarding.microphone.allow" = "Allow Microphone";
|
||
"mac.onboarding.microphone.granted" = "Microphone access is granted.";
|
||
"mac.onboarding.microphone.needed" = "Microphone access is needed for recording.";
|
||
"mac.onboarding.accessibility.title" = "Enable Accessibility";
|
||
"mac.onboarding.accessibility.subtitle" = "Accessibility lets OSGKeyboard listen for the global shortcut and paste text into the front app. You can skip it and grant it later.";
|
||
"mac.onboarding.accessibility.open" = "Open System Settings";
|
||
"mac.onboarding.accessibility.granted" = "Accessibility permission is granted.";
|
||
"mac.onboarding.accessibility.needed" = "Accessibility is not enabled yet.";
|
||
"mac.onboarding.engine.title" = "Choose a recognition path";
|
||
"mac.onboarding.engine.subtitle" = "Start locally for privacy, or use your own cloud API for provider-based recognition and polish.";
|
||
"mac.onboarding.engine.localDesc" = "Private on-device recognition with Sherpa models. Falls back to Apple Speech until a model is installed.";
|
||
"mac.onboarding.engine.cloudDesc" = "Use your API key for cloud speech recognition and AI polishing.";
|
||
"mac.onboarding.cloud.title" = "Configure API access";
|
||
"mac.onboarding.cloud.subtitle" = "Pick a provider and add your key. This step is optional, so you can finish now and fill it later in Settings.";
|
||
"mac.onboarding.cloud.skipHint" = "You can leave these blank and finish setup; cloud mode will ask for a key before use.";
|
||
"mac.onboarding.model.title" = "Prepare local recognition";
|
||
"mac.onboarding.model.subtitle" = "Download the basic Sherpa runtime and default model now, or skip and continue with Apple Speech fallback.";
|
||
"mac.onboarding.model.download" = "Download Default Model";
|
||
"mac.onboarding.model.done" = "Local model is ready.";
|
||
"mac.onboarding.model.skipHint" = "Skipping is safe: Settings keeps the same download controls for later.";
|
||
"mac.onboarding.popover.title" = "Finish setup";
|
||
"mac.onboarding.popover.subtitle" = "Open the main window to choose permissions, API settings, and local model download.";
|
||
"mac.error.noAudio" = "No audio captured";
|
||
"mac.error.noCloudASR" = "Selected provider has no cloud ASR";
|
||
"mac.error.emptyTranscript" = "No speech recognized";
|
||
"mac.error.qwen3ModelMissing" = "Qwen3-ASR model not installed";
|
||
"mac.error.qwen3LoadFailed" = "Failed to load Qwen3 model: %@";
|
||
"mac.error.qwen3InferenceFailed" = "Qwen3 transcription failed: %@";
|
||
"mac.localASR.models" = "Local ASR Engine & Models";
|
||
"mac.localASR.modelsDesc" = "Models download directly. Mainland China uses the hf-mirror mirror first; elsewhere the official Hugging Face endpoint first. Interrupted downloads resume automatically and fall back across mirrors.";
|
||
"mac.localASR.downloadSource" = "Download source";
|
||
"mac.localASR.downloadSource.auto" = "Automatic (by region)";
|
||
"mac.localASR.downloadSource.hfMirror" = "hf-mirror (recommended in China)";
|
||
"mac.localASR.downloadSource.huggingface" = "Hugging Face (official)";
|
||
"mac.localASR.download" = "Download";
|
||
"mac.localASR.selectFolder" = "Choose folder";
|
||
"mac.localASR.openFolder" = "Open folder";
|
||
"mac.localASR.pause" = "Pause";
|
||
"mac.localASR.resume" = "Resume";
|
||
"mac.localASR.needsFolder" = "Folder required";
|
||
"mac.localASR.installDone" = "Install completed.";
|
||
"mac.localASR.installed" = "Installed";
|
||
"mac.localASR.notInstalled" = "Not installed";
|
||
"mac.localASR.personalDictionaryTag" = "Personal dictionary";
|
||
"mac.localASR.badge.fastest" = "Fastest";
|
||
"mac.localASR.badge.balanced" = "Most balanced";
|
||
"mac.localASR.badge.quality" = "Best quality";
|
||
"mac.localASR.hotwordsYes" = "Hotwords";
|
||
"mac.localASR.hotwordsNo" = "No hotwords";
|
||
"mac.localASR.catalogMissing" = "Local ASR catalog is missing from the app bundle.";
|
||
"mac.localASR.diagnostics" = "Last Bias Diagnostics";
|
||
"mac.localASR.diagnosticsDesc" = "Captured after your most recent local dictation.";
|
||
"mac.localASR.diagEmpty" = "No local dictation yet.";
|
||
"mac.localASR.diagBackend" = "Backend";
|
||
"mac.localASR.diagUserTerms" = "User terms";
|
||
"mac.localASR.diagBuiltinTerms" = "Builtin terms";
|
||
"mac.localASR.diagHotwords" = "Hotwords sent";
|
||
"mac.localASR.diagPrompt" = "Prompt chars";
|
||
"mac.localASR.diagTruncated" = "Prompt truncated";
|
||
"mac.localASR.delete" = "Delete";
|
||
"mac.localASR.deleteDone" = "Model deleted.";
|
||
"mac.localASR.redownload" = "Re-download";
|
||
"mac.localASR.revealInFinder" = "Reveal in Finder";
|
||
"mac.localASR.openStorage" = "Open model storage folder";
|
||
"mac.localASR.runtime" = "Local ASR runtime";
|
||
"mac.localASR.runtimeDesc" = "Installed automatically with the models above; required for Qwen3, SenseVoice, and similar models.";
|
||
"mac.localASR.phase.downloading" = "Downloading";
|
||
"mac.localASR.phase.paused" = "Paused";
|
||
"mac.localASR.phase.extracting" = "Extracting";
|
||
"mac.localASR.phase.validating" = "Validating";
|
||
"mac.localASR.phase.finalizing" = "Finalizing";
|
||
"mac.localASR.phase.failed" = "Failed";
|
||
"mac.localASR.phase.completed" = "Completed";
|
||
"mac.error.accessibilityRequired" = "Enable Accessibility for OSGKeyboard in System Settings";
|
||
"mac.foregroundApp" = "Front app: %@";
|
||
"mac.sync.settingsTitle" = "Cross-Device iCloud Sync";
|
||
"mac.sync.settingsSubtitle" = "Sync settings, history, and API keys across devices via iCloud.";
|
||
"mac.sync.syncNow" = "Sync Now";
|
||
"mac.sync.dictTitle" = "Personal dictionary iCloud sync";
|
||
"mac.sync.dictSubtitle" = "Keep your dictionary in sync across all devices.";
|
||
"mac.sync.error.generic" = "Could not sync with iCloud. Try again later.";
|
||
"mac.sync.error.dictTooLarge" = "Dictionary is too large to sync via iCloud.";
|
||
|
||
"settings.appLanguage.auto" = "Auto";
|
||
"settings.appLanguage.english" = "English";
|
||
"settings.appLanguage.chinese" = "Chinese";
|
||
|
||
/* Voluntary support tip (Consumable IAP — no feature unlock) */
|
||
"tip.title" = "Support the Developer";
|
||
"tip.body" = "OSGKeyboard is completely free with every feature unlocked. If you find it useful, you can leave an optional tip — it does not unlock anything extra.";
|
||
"tip.button" = "Tip %@";
|
||
"tip.buttonFallback" = "Send a Tip";
|
||
"tip.consumableNotice" = "Consumable in-app purchase. Tips cannot be restored (Apple policy).";
|
||
"tip.thankYou.title" = "Thank you!";
|
||
"tip.thankYou.message" = "Your support helps keep OSGKeyboard free and open for everyone.";
|
||
"tip.thankYou.past" = "You've supported us %lld time(s). Thank you!";
|
||
"tip.error.title" = "Purchase Failed";
|
||
"tip.error.productUnavailable" = "The tip product is unavailable right now. Try again later.";
|
||
"tip.error.pending" = "Your purchase is pending approval.";
|
||
"tip.error.unknown" = "The purchase could not be completed.";
|
||
"tip.alert.dismiss" = "OK";
|