993784d223
Streamline the five-step flow with smarter skip logic, a centered welcome intro, clearer zh copy, keyboard setup detection via the extension, and home tips when permissions are still missing after onboarding completes.
191 lines
8.8 KiB
Plaintext
191 lines
8.8 KiB
Plaintext
/* 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 needs no API key; Cloud polishes your text via LLM.";
|
|
"onboarding.api.localReady.title" = "No API key needed";
|
|
"onboarding.api.localReady.body" = "Local recognition is ready to use. Tap Done to start.";
|
|
|
|
/* 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";
|
|
|
|
/* 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" = "Engine";
|
|
"settings.engine.subtitle" = "Pick the recognition engine. Local engine does transcription only, no API key needed.";
|
|
"settings.engine.local.title" = "On-device";
|
|
"settings.engine.local.ios26" = "Always on-device, no network.";
|
|
"settings.engine.local.legacy" = "On-device ASR. Transcription only, no polish.";
|
|
"settings.engine.cloud.title" = "Cloud polish";
|
|
"settings.engine.cloud.subtitle" = "ASR + LLM polish. API key required.";
|
|
"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.placeholder.idle" = "Tap to talk";
|
|
"keyboard.placeholder.preparing" = "Preparing";
|
|
"keyboard.placeholder.processing" = "Processing";
|
|
"keyboard.placeholder.error" = "Polishing failed";
|
|
"keyboard.placeholder.localBadge" = "On-device";
|
|
"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";
|
|
|
|
/* 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.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.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.";
|
|
|
|
/* Locale chip (short labels) */
|
|
"locale.chip.auto" = "Auto";
|
|
"locale.chip.zh-Hans" = "简";
|
|
"locale.chip.zh-Hant" = "繁";
|
|
"locale.chip.en-US" = "EN";
|
|
"locale.chip.ja-JP" = "日";
|
|
"locale.chip.ko-KR" = "韩";
|
|
|
|
/* 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";
|