/* OSGKeyboard · English localization (development language) */ "OSGKeyboard" = "OSGKeyboard"; /* Onboarding */ "onboarding.welcome.subtitle" = "Tap the mic to speak, tap again to finish — polished text in any app."; "onboarding.enable.title" = "Enable OSGKeyboard"; "onboarding.enable.step1" = "Settings → General → Keyboard → Keyboards"; "onboarding.enable.step2" = "Tap “Add New Keyboard…” and choose OSGKeyboard"; "onboarding.enable.step3" = "Tap OSGKeyboard and enable “Allow Full Access”"; "onboarding.enable.step4" = "Allow Full Access is required for the microphone and LLM calls."; "onboarding.enable.openSettings" = "Open iOS Settings"; "onboarding.api.title" = "Choose engine"; "onboarding.api.subtitle" = "Local ASR needs no key; add an API key to enable AI polish."; "onboarding.api.localReady.title" = "Local ASR is ready"; "onboarding.api.localReady.body" = "Recognition works on-device. Add an API key in Settings for AI polish."; "keyboard.onboarding.practice.mic" = "Tap the mic, then tap again when done"; /* Common navigation */ "common.back" = "Back"; "common.next" = "Next"; "common.done" = "Done"; "common.continue" = "Continue"; "common.reset" = "Reset"; "common.cancel" = "Cancel"; "common.delete" = "Delete"; "common.space" = "Space"; "common.newline" = "Return"; "common.send" = "Send"; "keyboard.return.go" = "Go"; "keyboard.return.search" = "Search"; "keyboard.return.join" = "Join"; "keyboard.return.next" = "Next"; "keyboard.return.route" = "Route"; "keyboard.return.google" = "Google"; "keyboard.return.yahoo" = "Yahoo"; "keyboard.return.emergencyCall" = "Emergency Call"; /* Privacy footnote (onboarding welcome page) */ "privacy.audio.title" = "On-device transcription"; "privacy.audio.body" = "Powered by the on-device iOS speech engine."; "privacy.network.title" = "Automatic text polish"; "privacy.network.body" = "AI formats and polishes your text automatically."; "privacy.universal.title" = "Works everywhere"; "privacy.universal.body" = "Chat, email, vibe coding — just speak."; /* Home */ "home.status.ready" = "Ready"; "home.status.setupIncomplete" = "Setup incomplete"; "home.hero.label" = "Tap to configure"; "home.action.enableInSettings" = "Enable in iOS Settings"; "home.action.editApi" = "Edit API Configuration"; "home.action.keyboardPreview" = "Keyboard Preview (Debug)"; "home.action.openSettingsA11y" = "Open OSGKeyboard settings"; /* API settings */ "api.baseUrl" = "Base URL"; "api.model" = "Model"; "api.getKey" = "Get an API key"; "api.key" = "API Key"; "api.key.placeholder" = "sk-…"; "api.key.show" = "Show"; "api.key.hide" = "Hide"; "api.connection" = "Connection"; "api.test.idle" = "Test connection"; "api.test.running" = "Testing…"; "api.test.success" = "Success · Retry"; "api.test.failure" = "Failed · Retry"; "api.test.connected" = "Connected"; "api.test.missing" = "API key missing"; "api.test.rateLimited" = "Rate limited (429)"; "api.test.http" = "HTTP %d"; "api.test.network" = "Network error"; "api.test.connectedWith" = "“%@”"; "api.test.transportWith" = "%@"; /* Settings */ "settings.title" = "Settings"; "settings.reset.title" = "Reset all settings?"; "settings.reset.message" = "API key, model, and base URL will be cleared."; "settings.reset.confirm" = "Reset all settings"; "settings.engine.title" = "Speech transcription method"; "settings.engine.subtitle" = "Local: built-in system transcription. Cloud: ASR transcription with optional LLM polish."; "settings.engine.local.title" = "On-device transcription"; "settings.engine.local.ios26" = "Always on-device, no network."; "settings.engine.local.legacy" = "Transcribe with the built-in system speech service"; "settings.engine.cloud.title" = "Cloud transcription"; "settings.engine.cloud.subtitle" = "Cloud ASR transcription, with optional LLM polish"; "settings.provider.title" = "Provider"; "settings.provider.subtitle" = "Pick the LLM that polishes your dictation."; "settings.api.title" = "API"; "settings.language.title" = "Language"; "settings.language.subtitle.cloud" = "Recognition language and text processing mode."; "settings.language.subtitle.local" = "Recognition language."; "settings.mode.title" = "Mode"; "settings.mode.off" = "Off"; "settings.mode.transcribe" = "Transcribe"; "settings.mode.polish" = "Polish"; "settings.systemPrompt.title" = "System Prompt"; "settings.systemPrompt.reset" = "Reset"; "settings.asrLocale" = "ASR locale"; "settings.engineBadge.ios26" = "SpeechAnalyzer — always on-device"; "settings.engineRow.title" = "Recognition engine"; "settings.onDeviceOnly.title" = "On-device only"; "settings.onDeviceOnly.body" = "Disable cloud fallback. The keyboard reports an error instead of going online."; "settings.legend.onDevice" = "On-device"; "settings.legend.cloudFallback" = "Cloud fallback"; /* App group error */ "appGroup.error.title" = "App Group not configured"; "appGroup.error.body" = "OSGKeyboard needs an App Group to share config between the main app and the keyboard extension."; "appGroup.error.step1" = "Create group.com.osgkeyboard.shared in the Apple Developer portal"; "appGroup.error.step2" = "Enable it for both the main app and the keyboard extension"; "appGroup.error.step3" = "Re-generate the provisioning profile and download it"; /* Keyboard preview */ "preview.title" = "Keyboard Preview"; "preview.subtitle" = "Tap Start/Stop Recording to test here. On the real keyboard, press and hold the mic disc."; "preview.placeholder" = "Type here or tap the record button"; "preview.clear" = "Clear text"; "preview.openSettingsA11y" = "Open OSGKeyboard settings"; "preview.modeChip.cycle" = "Cycle input mode"; "preview.localeChip.cycle" = "Cycle recognition language"; /* Keyboard (ext) */ "keyboard.tab.ai" = "AI"; "keyboard.tab.voice" = "Voice"; "keyboard.tab.chinese" = "中文"; "keyboard.tab.english" = "EN"; "keyboard.tab.ai.a11y" = "Switch to AI Q&A"; "keyboard.tab.voice.a11y" = "Switch to voice input"; "keyboard.tab.chinese.a11y" = "Switch to Chinese typing"; "keyboard.tab.english.a11y" = "Switch to English typing"; "keyboard.placeholder.idle" = "Tap to talk"; "keyboard.placeholder.preparing" = "Preparing"; "keyboard.placeholder.preparingRecording" = "Preparing mic…"; "keyboard.placeholder.processing" = "Processing"; "keyboard.placeholder.error" = "Polishing failed"; "keyboard.models.notDownloaded" = "On-device models not downloaded"; "keyboard.models.downloadHint" = "Open OSGKeyboard to download models"; "keyboard.rec" = "REC"; "keyboard.space" = "Space"; "keyboard.denied.mic" = "Mic denied"; "keyboard.denied.speech" = "Speech denied"; "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.undoA11y" = "Undo last input"; "keyboard.redoA11y" = "Redo"; "keyboard.copyA11y" = "Copy"; "keyboard.cutA11y" = "Cut"; "keyboard.cursorDrag.hint" = "Hold and drag to move the cursor"; "keyboard.cursorDrag.centerHint" = "Drag to move the cursor"; "keyboard.nextKeyboardA11y" = "Next keyboard"; "keyboard.nextKeyboardA11yHint" = "Tap to switch to the next keyboard. Touch and hold to see all keyboards."; "keyboard.typing.setupA11yHint" = "Open OSGKeyboard to finish input method setup."; /* Flow session (keyboard) */ "keyboard.flow.sessionInactive" = "Voice session off"; "keyboard.flow.start" = "Start"; "keyboard.flow.startA11y" = "Start voice session"; "keyboard.flow.sessionExpired" = "Voice session ended. Open OSGKeyboard to restart."; "keyboard.flow.startingSession" = "Starting voice session…"; "keyboard.flow.transcribing" = "Transcribing…"; "keyboard.flow.resultTimeout" = "Timed out waiting for transcription. Try again."; "keyboard.flow.hostDisconnected" = "Voice session disconnected. Open OSGKeyboard to restart."; "keyboard.flow.manualOpenHost" = "Could not auto-open the app. Open OSGKeyboard from the Home Screen, then return."; /* Keyboard status badges */ "keyboard.status.rec" = "REC"; "keyboard.status.recWarning" = "REC"; "keyboard.status.processing" = "···"; "keyboard.status.error" = "!"; /* Keyboard errors */ "keyboard.error.appGroupUnavailable" = "App Group not configured"; "keyboard.error.appGroupCommunication" = "App Group not configured. Reinstall and check signing."; "keyboard.error.fullAccessRequired" = "Enable Allow Full Access for OSGKeyboard in Settings to use voice input."; "keyboard.error.fullAccessForJump" = "Allow Full Access is required before the keyboard can open the app."; "keyboard.error.manualOpenSettings" = "System blocked the jump. Open OSGKeyboard manually to reach Settings."; "keyboard.error.manualOpenForFlow" = "Voice session not running. Open OSGKeyboard, then tap the mic again."; "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.mic.hint.missingPolishApiKey" = "Add an API key in Settings to enable polish"; "keyboard.error.llm.localPolishUnavailable" = "API key missing · 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"; /* Legacy dictation handoff progress */ "keyboard.dictation.opening" = "Opening OSGKeyboard…"; "keyboard.dictation.openingLocal" = "Opening OSGKeyboard (on-device)…"; "keyboard.dictation.recording" = "Recording in OSGKeyboard — return here when done"; "keyboard.dictation.recordingLocal" = "Recording on-device — return here when done"; "keyboard.dictation.transcribing" = "Transcribing — return here when ready"; "keyboard.dictation.transcribingLocal" = "On-device transcribing — return here when ready"; "keyboard.dictation.failed" = "Recording failed. Try again."; "keyboard.dictation.resultTimeout" = "Timed out waiting for dictation. Finish in OSGKeyboard and retry."; /* Translation menu */ "keyboard.translation.offMenu" = "Don't translate"; "keyboard.translation.a11y" = "Translation"; "keyboard.translation.a11yHint" = "Toggle translation or change the target language."; "keyboard.clipboard.a11y" = "Clipboard"; "keyboard.clipboard.a11yHint" = "Open clipboard history or enable clipboard capture."; "keyboard.clipboard.guide.body" = "Turn on clipboard history in Settings first."; "keyboard.clipboard.guide.cta" = "Open Settings"; "keyboard.clipboard.panel.title" = "Clipboard"; "keyboard.clipboard.panel.empty" = "No history yet"; "keyboard.clipboard.panel.delete" = "Delete"; "keyboard.clipboard.panel.close" = "Close clipboard"; "keyboard.clipboard.panel.closeHint" = "Return to the keyboard."; "keyboard.clipboard.clear.title" = "Clear clipboard history?"; "keyboard.clipboard.clear.message" = "This permanently removes all saved clipboard items from this device. This cannot be undone."; "keyboard.clipboard.clear.confirm" = "Clear history"; "keyboard.clipboard.suggestion.dismissA11y" = "Dismiss clipboard suggestion"; "keyboard.clipboard.suggestion.dismissHint" = "Hide this clipboard suggestion strip."; "keyboard.voice.cancel" = "Cancel voice input"; "keyboard.voice.cancelHint" = "Discard the current recording, recognition, and polish result."; "keyboard.scenario.a11y" = "Polish scenario"; "keyboard.scenario.a11yHint" = "Choose how dictation is polished."; /* Mode chip labels (used in both ext + preview stub) */ "mode.off" = "Off"; "mode.transcribe" = "Transcribe"; "mode.polish" = "Polish"; /* Locale chip labels (preview stub) */ "locale.zh-Hans" = "ZH-Hans"; /* Locale menu items (settings) */ "locale.auto" = "Auto"; "locale.zh-Hans" = "Chinese (Simplified)"; "locale.zh-Hant" = "Chinese (Traditional)"; "locale.en-US" = "English (US)"; "locale.ja-JP" = "Japanese"; "locale.ko-KR" = "Korean"; /* Voice gated until host-app onboarding finishes */ "keyboard.hint.finishSetupInApp" = "Finish setup in OSGKeyboard to use voice input."; /* v0.3.0: AppContext chip on the keyboard top bar */ "keyboard.appContext.a11y" = "Polish context"; "keyboard.appContext.a11yHint" = "Tap to override the auto-detected input context (code, email, chat, document)."; "keyboard.appContext.chip.code" = "Code"; "keyboard.appContext.chip.email" = "Email"; "keyboard.appContext.chip.chat" = "Chat"; "keyboard.appContext.chip.document" = "Document"; "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, natural tone"; "keyboard.appContext.menu.document" = "Document — long-form, structured"; "keyboard.appContext.menu.unknown" = "General — neutral tone"; /* Long-press editing of the last insertion */ "keyboard.edit.hint.available" = "Hold to edit your last input"; "keyboard.edit.error.noTarget" = "No recent input is available to edit"; "keyboard.edit.error.llmUnavailable" = "Configure an AI service in the main app first"; "keyboard.edit.error.startTimeout" = "Microphone startup timed out. Tap to retry"; "keyboard.edit.error.processing" = "Editing failed. Try again"; "keyboard.edit.error.processingTimeout" = "Editing timed out. Try again"; "keyboard.edit.error.unchanged" = "Nothing changed. Try a different instruction"; "keyboard.edit.status.preparing" = "Starting microphone…"; "keyboard.edit.status.listening" = "Listening for your editing instruction"; "keyboard.edit.status.processing" = "Editing…"; "keyboard.edit.status.review" = "Swipe to compare the original and edited text"; "keyboard.edit.status.applying" = "Applying edit…"; "keyboard.edit.page.original" = "Original"; "keyboard.edit.page.edited" = "Edited"; "keyboard.edit.helper.speak" = "Speak to edit"; "keyboard.edit.helper.finish" = "Tap to finish"; "keyboard.edit.helper.compare" = "Swipe to compare"; "keyboard.edit.helper.apply" = "Tap to apply"; "keyboard.edit.helper.append" = "Insert at cursor"; "keyboard.edit.close" = "Close edit mode"; "keyboard.edit.closeHint" = "Discard this edit and return to voice input."; "keyboard.edit.apply" = "Apply edit"; "keyboard.edit.append" = "Insert at cursor"; "keyboard.edit.stop" = "Finish editing instruction"; /* AI question mode */ "keyboard.ai.placeholder" = "Tap the microphone to ask AI"; "keyboard.ai.hintA11yPrefix" = "Suggestion: "; "keyboard.ai.hint" = "Insert the AI answer, then tap Send"; "keyboard.ai.listening" = "Listening…"; "keyboard.ai.recognizing" = "Recognizing your question…"; "keyboard.ai.generating" = "AI is answering…"; "keyboard.ai.thinking" = "AI is thinking…"; "keyboard.ai.send" = "Send"; "keyboard.ai.insert" = "Insert"; "keyboard.ai.inserted" = "Inserted"; "keyboard.ai.sent" = "Sent"; "keyboard.ai.cancel" = "Cancel AI question"; "keyboard.ai.cancelHint" = "Cancel the current recording, recognition, or AI request."; "keyboard.ai.sendA11y" = "Tap once to insert the AI answer, then tap again to send in supported fields"; "keyboard.ai.startA11y" = "Start asking AI"; "keyboard.ai.stopA11y" = "Finish the question and send it to AI"; "keyboard.assistant.longPressCoach" = "Tap to dictate · Hold to ask AI"; "keyboard.assistant.micA11y" = "Voice and AI"; "keyboard.assistant.micHint" = "Tap to dictate. Hold to ask AI."; "keyboard.assistant.dictationAction" = "Start voice dictation"; "keyboard.assistant.aiAction" = "Ask AI"; "keyboard.assistant.space" = "Space"; "keyboard.assistant.delete" = "Delete"; "keyboard.assistant.sendHint" = "Performs the current field's Send, Search, Done, or Go action."; "keyboard.assistant.insertPending" = "Insert retained AI answer"; "keyboard.assistant.discardPending" = "Discard AI answer"; "keyboard.assistant.discardPendingHint" = "Discard the answer retained because the cursor or input field changed."; "keyboard.assistant.dismissClipboard" = "Dismiss clipboard suggestions"; "keyboard.assistant.dismissClipboardHint" = "Hide the current clipboard summary and skills."; "keyboard.ai.error.missingAPIKey" = "Configure an AI service in the main app first"; "keyboard.ai.error.pipelineBusy" = "Voice input is busy. Try again shortly"; "keyboard.ai.error.startTimeout" = "Microphone startup timed out. Try again"; "keyboard.ai.error.requestTimeout" = "AI response timed out. Try again"; "keyboard.ai.error.requestFailed" = "AI response failed. Try again"; "keyboard.ai.error.clipboardUnavailable" = "This clipboard suggestion expired. Copy the text again"; "keyboard.ai.skill.reply" = "Reply"; "keyboard.ai.skill.summarize" = "Summarize"; "keyboard.ai.skill.translate" = "Translate"; "keyboard.ai.skill.extractTodos" = "Tasks"; "keyboard.ai.skill.extractEvents" = "Events"; "keyboard.ai.skill.saveToNotes" = "Notes"; "keyboard.ai.skill.navigate" = "Navigate"; "keyboard.ai.skill.previewPolish" = "Polish"; "keyboard.ai.skill.previewIdeas" = "Ideas"; "keyboard.ai.skill.previewTone" = "Tone"; "keyboard.ai.skill.noTodos" = "No tasks in the clipboard"; "keyboard.ai.skill.noEvents" = "No date or time in the clipboard"; "keyboard.ai.skill.noAddress" = "No address in the clipboard"; "keyboard.ai.skill.noNote" = "Nothing to save to Notes"; "keyboard.ai.skill.noExportItems" = "Nothing to send to the Shortcut"; "keyboard.ai.skill.extracting" = "Finding tasks…"; "keyboard.ai.skill.extractingEvents" = "Finding events…"; "keyboard.ai.skill.extractingAddress" = "Finding an address…"; "keyboard.ai.skill.namingNote" = "Naming the note…"; "keyboard.ai.skill.runningShortcut" = "Running Shortcut…"; "keyboard.ai.skill.openingMaps" = "Opening Maps…"; "keyboard.ai.skill.shortcutMissing" = "Companion Shortcut not found. Reinstall it in Skills"; "keyboard.ai.skill.handoffFailed" = "Couldn’t open the app to run the Shortcut";