feat: cursor navigation, key sounds, dictionary tooling, key security
Batch of in-progress app work from the working tree. - feat(keyboard): CursorNavigation + CursorDragPad for caret movement; KeyboardSoundFeedback for system key click sounds - feat(dictionary): DictionaryAliasGenerator + PersonalDictionaryEntrySheet; TranscriptPostProcessor quality gate; retire DictionaryLearner - feat(ui): TabBarVisibility handling; drop PageHeaderRow / PageHeaderConfirmButton; refresh views and localizable strings - fix(security): move the hardcoded DeepSeek key out of PreconfiguredKeys.swift into a gitignored PreconfiguredKeys.local.swift (seeded from .example by generate-xcodeproj.sh) - docs(agents): add Conventional Commits versioning + bilingual changelog rules - chore(gitignore): ignore PreconfiguredKeys.local.swift, .cache/, pycache Custom language model / lexicon work stays on feature/custom-language-model-asr. Changelog bullets added under [Unreleased]; no version bump.
This commit is contained in:
@@ -128,6 +128,8 @@
|
||||
"keyboard.openSettingsA11y" = "Open OSGKeyboard settings";
|
||||
"keyboard.deniedHint" = "Opens the OSGKeyboard settings page where you can grant microphone or speech recognition access.";
|
||||
"keyboard.tapToTalkA11y" = "Tap to talk";
|
||||
"keyboard.cursorDrag.hint" = "Hold and drag to move the cursor";
|
||||
"keyboard.cursorDrag.centerHint" = "Drag to move the cursor";
|
||||
|
||||
/* Flow session (keyboard) */
|
||||
"keyboard.flow.sessionInactive" = "Voice session off";
|
||||
@@ -155,6 +157,8 @@
|
||||
"keyboard.error.manualOpenDictateLocal" = "System blocked the jump. Open OSGKeyboard for on-device dictation, then return.";
|
||||
"keyboard.error.manualOpenDictate" = "System blocked the jump. Open OSGKeyboard to record, then return.";
|
||||
"keyboard.error.llm.noApiKey" = "API key missing · configure it in the main app";
|
||||
"keyboard.mic.disabled.missingApiKey" = "Fill in API key in Settings first";
|
||||
"keyboard.error.llm.localPolishUnavailable" = "Built-in polish unavailable · inserted raw text";
|
||||
"keyboard.error.llm.unauthorized" = "Invalid API key (401) · check main app settings";
|
||||
"keyboard.error.llm.rateLimited" = "Rate limited (429) · try again later";
|
||||
|
||||
@@ -234,6 +238,6 @@
|
||||
"keyboard.appContext.chip.unknown" = "General";
|
||||
"keyboard.appContext.menu.code" = "Code — preserve identifiers, no natural-language wrap";
|
||||
"keyboard.appContext.menu.email" = "Email — polite, professional, paragraph-broken";
|
||||
"keyboard.appContext.menu.chat" = "Chat — short, casual, emoji-friendly";
|
||||
"keyboard.appContext.menu.chat" = "Chat — short, casual, natural tone";
|
||||
"keyboard.appContext.menu.document" = "Document — long-form, structured";
|
||||
"keyboard.appContext.menu.unknown" = "General — neutral tone";
|
||||
|
||||
Reference in New Issue
Block a user