537a68552a
Reduce perceived latency from key release to final text: - Adaptive chunking: 2.5s first chunk + 5s follow-ups so short utterances start on-device recognition while still recording. - Session-level ASR warmup and audio-format cache reuse to remove per-utterance cold-start of SpeechAnalyzer. - Mirror live pipelined partials to the keyboard transcript line via a new flow.transcriptionPartial App Group key + Darwin ping. Also commits the accumulated custom language model, Flow session, keyboard extension restructure, and Xiaomi MiMo provider work in progress on this branch.
90 lines
4.0 KiB
Plaintext
90 lines
4.0 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.";
|
|
|
|
/* LLM providers */
|
|
"provider.openai" = "OpenAI";
|
|
"provider.deepseek" = "DeepSeek";
|
|
"provider.qwen" = "Qwen (DashScope)";
|
|
"provider.zhipu" = "Zhipu GLM";
|
|
"provider.moonshot" = "Moonshot";
|
|
"provider.mimo" = "Xiaomi MiMo";
|
|
"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: %@";
|
|
|
|
/* 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";
|
|
|
|
/* 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.";
|