fb97ec2937
Merge dictation and AI controls into one assistant surface, preserve safe insertion and clipboard actions, and align settings and tests with the new flow.
341 lines
17 KiB
Plaintext
341 lines
17 KiB
Plaintext
/* OSGKeyboard · 简体中文翻译 */
|
|
|
|
"OSGKeyboard" = "OSGKeyboard";
|
|
|
|
/* Onboarding */
|
|
"onboarding.welcome.subtitle" = "点按麦克风说话,再点一次结束,文字即出现。";
|
|
"onboarding.enable.title" = "启用 OSGKeyboard";
|
|
"onboarding.enable.step1" = "设置 → 通用 → 键盘 → 键盘";
|
|
"onboarding.enable.step2" = "点击「添加新键盘…」并选择 OSGKeyboard";
|
|
"onboarding.enable.step3" = "点击 OSGKeyboard 并启用「允许完全访问」";
|
|
"onboarding.enable.step4" = "允许完全访问是麦克风和网络调用的前提。";
|
|
"onboarding.enable.openSettings" = "打开 iOS 设置";
|
|
"onboarding.api.title" = "选择引擎";
|
|
"onboarding.api.subtitle" = "本地识别无需 Key;填写 API Key 后可开启 AI 润色。";
|
|
"onboarding.api.localReady.title" = "本地识别已就绪";
|
|
"onboarding.api.localReady.body" = "识别在端侧完成。请在设置中填写 API Key 以开启 AI 润色。";
|
|
|
|
/* Common navigation */
|
|
"common.back" = "返回";
|
|
"common.next" = "下一步";
|
|
"common.done" = "完成";
|
|
"common.continue" = "继续";
|
|
"common.reset" = "重置";
|
|
"common.cancel" = "取消";
|
|
"common.delete" = "删除";
|
|
"common.space" = "空格";
|
|
"common.newline" = "回车";
|
|
"common.send" = "发送";
|
|
"keyboard.return.go" = "前往";
|
|
"keyboard.return.search" = "搜索";
|
|
"keyboard.return.join" = "加入";
|
|
"keyboard.return.next" = "下一项";
|
|
"keyboard.return.route" = "路线";
|
|
"keyboard.return.google" = "Google";
|
|
"keyboard.return.yahoo" = "Yahoo";
|
|
"keyboard.return.emergencyCall" = "紧急电话";
|
|
|
|
/* Privacy footnote (onboarding welcome page) */
|
|
"privacy.audio.title" = "支持本地转写";
|
|
"privacy.audio.body" = "支持 iOS 本地引擎转录";
|
|
"privacy.network.title" = "文字自动润色";
|
|
"privacy.network.body" = "通过 AI 自动对文字进行排版润色";
|
|
"privacy.universal.title" = "处处可用";
|
|
"privacy.universal.body" = "聊天、邮件、Vibe Coding 动嘴就行";
|
|
|
|
/* Home */
|
|
"home.status.ready" = "就绪";
|
|
"home.status.setupIncomplete" = "未完成配置";
|
|
"home.hero.label" = "点此配置";
|
|
"home.action.enableInSettings" = "在 iOS 设置中启用";
|
|
"home.action.editApi" = "编辑 API 配置";
|
|
"home.action.keyboardPreview" = "键盘预览(Debug)";
|
|
"home.action.openSettingsA11y" = "打开 OSGKeyboard 设置";
|
|
|
|
/* API settings */
|
|
"api.baseUrl" = "接口地址";
|
|
"api.model" = "模型";
|
|
"api.getKey" = "获取 API Key";
|
|
"api.key" = "API Key";
|
|
"api.key.placeholder" = "sk-…";
|
|
"api.key.show" = "显示";
|
|
"api.key.hide" = "隐藏";
|
|
"api.connection" = "连接测试";
|
|
"api.test.idle" = "测试连接";
|
|
"api.test.running" = "测试中…";
|
|
"api.test.success" = "成功 · 重试";
|
|
"api.test.failure" = "失败 · 重试";
|
|
"api.test.connected" = "连接成功";
|
|
"api.test.missing" = "未填写 API Key";
|
|
"api.test.rateLimited" = "API 限流 (429)";
|
|
"api.test.http" = "HTTP %d";
|
|
"api.test.network" = "网络错误";
|
|
"api.test.connectedWith" = "“%@”";
|
|
"api.test.transportWith" = "%@";
|
|
|
|
/* Settings */
|
|
"settings.title" = "设置";
|
|
"settings.reset.title" = "重置所有设置?";
|
|
"settings.reset.message" = "API key、model 和 base URL 都会被清空。";
|
|
"settings.reset.confirm" = "重置所有设置";
|
|
"settings.engine.title" = "语音转写方式";
|
|
"settings.engine.subtitle" = "本地:系统内置转写;云端:ASR 转写,可用 LLM 润色。";
|
|
"settings.engine.local.title" = "本地转写";
|
|
"settings.engine.local.ios26" = "始终端侧,无需联网。";
|
|
"settings.engine.local.legacy" = "通过系统内置服务语音转写";
|
|
"settings.engine.cloud.title" = "云端转写";
|
|
"settings.engine.cloud.subtitle" = "通过云端 ASR 转写,可用 LLM 润色";
|
|
"settings.provider.title" = "云端引擎";
|
|
"settings.provider.subtitle" = "选择 LLM 提供商。";
|
|
"settings.api.title" = "接口";
|
|
"settings.language.title" = "语言";
|
|
"settings.language.subtitle.cloud" = "选择识别语言和文字处理模式。";
|
|
"settings.language.subtitle.local" = "选择识别语言。";
|
|
"settings.mode.title" = "模式";
|
|
"settings.mode.off" = "关闭";
|
|
"settings.mode.transcribe" = "转写";
|
|
"settings.mode.polish" = "润色";
|
|
"settings.systemPrompt.title" = "系统提示";
|
|
"settings.systemPrompt.reset" = "重置";
|
|
"settings.asrLocale" = "识别语言";
|
|
"settings.engineBadge.ios26" = "SpeechAnalyzer — 始终端侧";
|
|
"settings.engineRow.title" = "识别引擎";
|
|
"settings.onDeviceOnly.title" = "仅端侧识别";
|
|
"settings.onDeviceOnly.body" = "禁用云端回退,识别失败时会报错而非联网。";
|
|
"settings.legend.onDevice" = "端侧识别";
|
|
"settings.legend.cloudFallback" = "需联网";
|
|
|
|
/* App group error */
|
|
"appGroup.error.title" = "App Group 未配置";
|
|
"appGroup.error.body" = "OSGKeyboard 需要 App Group 才能在键盘扩展和主 App 之间共享配置。";
|
|
"appGroup.error.step1" = "在 Apple Developer 后台创建 group.com.osgkeyboard.shared";
|
|
"appGroup.error.step2" = "主 App 和键盘扩展都启用该 App Group";
|
|
"appGroup.error.step3" = "重新生成 provisioning profile 并下载";
|
|
|
|
/* Keyboard preview */
|
|
"preview.title" = "键盘预览";
|
|
"preview.subtitle" = "点击「开始录音」/「停止录音」按钮测试;真实键盘为长按麦克风圆盘。";
|
|
"preview.placeholder" = "试着输入或点击按钮录音";
|
|
"preview.clear" = "清空";
|
|
"preview.openSettingsA11y" = "打开 OSGKeyboard 设置";
|
|
"preview.modeChip.cycle" = "切换输入模式";
|
|
"preview.localeChip.cycle" = "切换识别语言";
|
|
|
|
/* Keyboard (ext) */
|
|
"keyboard.tab.ai" = "AI";
|
|
"keyboard.tab.voice" = "语音";
|
|
"keyboard.tab.chinese" = "中文";
|
|
"keyboard.tab.english" = "EN";
|
|
"keyboard.tab.ai.a11y" = "切换到 AI 问答";
|
|
"keyboard.tab.voice.a11y" = "切换到语音输入";
|
|
"keyboard.tab.chinese.a11y" = "切换到中文输入";
|
|
"keyboard.tab.english.a11y" = "切换到英文输入";
|
|
"keyboard.placeholder.idle" = "点按说话";
|
|
"keyboard.placeholder.preparing" = "准备中…";
|
|
"keyboard.placeholder.preparingRecording" = "准备录音…";
|
|
"keyboard.placeholder.processing" = "处理中…";
|
|
"keyboard.placeholder.error" = "润色失败";
|
|
"keyboard.models.notDownloaded" = "本地模型尚未下载";
|
|
"keyboard.models.downloadHint" = "打开 OSGKeyboard 下载模型";
|
|
"keyboard.rec" = "REC";
|
|
"keyboard.space" = "空格";
|
|
"keyboard.denied.mic" = "麦克风被拒绝";
|
|
"keyboard.denied.speech" = "语音识别被拒绝";
|
|
"keyboard.openSettingsA11y" = "打开 OSGKeyboard 设置";
|
|
"keyboard.deniedHint" = "打开 OSGKeyboard 设置,可授予麦克风 / 语音识别权限。";
|
|
"keyboard.tapToTalkA11y" = "点按说话";
|
|
"keyboard.undoA11y" = "撤销上次输入";
|
|
"keyboard.redoA11y" = "重做";
|
|
"keyboard.copyA11y" = "拷贝";
|
|
"keyboard.cutA11y" = "剪切";
|
|
"keyboard.cursorDrag.hint" = "按住并拖动以移动光标";
|
|
"keyboard.cursorDrag.centerHint" = "拖动移动光标";
|
|
"keyboard.nextKeyboardA11y" = "切换键盘";
|
|
"keyboard.nextKeyboardA11yHint" = "轻点切换到下一个键盘;长按查看全部键盘。";
|
|
"keyboard.typing.setupA11yHint" = "打开 OSGKeyboard 完成输入法初始化。";
|
|
|
|
/* Flow session (keyboard) */
|
|
"keyboard.flow.sessionInactive" = "语音会话未启动";
|
|
"keyboard.flow.start" = "启动";
|
|
"keyboard.flow.startA11y" = "启动语音会话";
|
|
"keyboard.flow.sessionExpired" = "语音会话已结束,请打开 OSGKeyboard 重新启动";
|
|
"keyboard.flow.startingSession" = "正在启动语音会话…";
|
|
"keyboard.flow.transcribing" = "识别中…";
|
|
"keyboard.flow.resultTimeout" = "等待识别结果超时,请重试";
|
|
"keyboard.flow.hostDisconnected" = "语音会话已断开,请打开 OSGKeyboard 重新启动";
|
|
"keyboard.flow.manualOpenHost" = "无法自动跳转,请从主屏幕打开 OSGKeyboard 后返回";
|
|
|
|
/* Keyboard status badges */
|
|
"keyboard.status.rec" = "录音";
|
|
"keyboard.status.recWarning" = "录音";
|
|
"keyboard.status.processing" = "···";
|
|
"keyboard.status.error" = "!";
|
|
|
|
/* Keyboard errors */
|
|
"keyboard.error.appGroupUnavailable" = "App Group 未配置";
|
|
"keyboard.error.appGroupCommunication" = "App Group 未配置,请重新安装并检查签名";
|
|
"keyboard.error.fullAccessRequired" = "请在系统设置中为 OSGKeyboard 开启「允许完全访问」";
|
|
"keyboard.error.fullAccessForJump" = "请先开启「允许完全访问」,否则键盘无法跳转到 App";
|
|
"keyboard.error.manualOpenSettings" = "系统拒绝了跳转,请手动打开 OSGKeyboard 进入设置";
|
|
"keyboard.error.manualOpenForFlow" = "语音会话未启动,请打开 OSGKeyboard 后再点麦克风";
|
|
"keyboard.error.manualOpenDictateLocal" = "系统拒绝了跳转,请手动打开 OSGKeyboard 完成本地转写";
|
|
"keyboard.error.manualOpenDictate" = "系统拒绝了跳转,请手动打开 OSGKeyboard 录音";
|
|
"keyboard.error.llm.noApiKey" = "未配置 API Key · 请在主 App 设置中填写";
|
|
"keyboard.mic.disabled.missingApiKey" = "请先在设置中填写 API Key";
|
|
"keyboard.mic.hint.missingPolishApiKey" = "请先在设置中填写 API Key,才能润色";
|
|
"keyboard.error.llm.localPolishUnavailable" = "未填写 API Key · 已插入原始文本";
|
|
"keyboard.error.llm.unauthorized" = "API Key 无效 (401) · 请检查主 App 设置";
|
|
"keyboard.error.llm.rateLimited" = "API 限流 (429) · 请稍后再试";
|
|
|
|
/* Legacy dictation handoff progress */
|
|
"keyboard.dictation.opening" = "正在打开 OSGKeyboard…";
|
|
"keyboard.dictation.openingLocal" = "正在打开 OSGKeyboard(本地转写)…";
|
|
"keyboard.dictation.recording" = "正在录音,请完成后返回当前输入页";
|
|
"keyboard.dictation.recordingLocal" = "正在本地录音,请完成后返回当前输入页";
|
|
"keyboard.dictation.transcribing" = "识别中,请稍候并返回输入页";
|
|
"keyboard.dictation.transcribingLocal" = "本地识别中,请稍候并返回输入页";
|
|
"keyboard.dictation.failed" = "录音失败,请重试";
|
|
"keyboard.dictation.resultTimeout" = "等待录音结果超时,请返回 OSGKeyboard 完成录音后重试";
|
|
|
|
/* 翻译菜单 */
|
|
"keyboard.translation.offMenu" = "不翻译";
|
|
"keyboard.translation.a11y" = "翻译";
|
|
"keyboard.translation.a11yHint" = "切换翻译开关或修改目标语言。";
|
|
"keyboard.clipboard.a11y" = "剪贴板";
|
|
"keyboard.clipboard.a11yHint" = "查看剪贴板历史或开启剪贴板功能。";
|
|
"keyboard.clipboard.guide.body" = "请先在设置中开启剪贴板历史。";
|
|
"keyboard.clipboard.guide.cta" = "去设置开启";
|
|
"keyboard.clipboard.panel.title" = "剪贴板";
|
|
"keyboard.clipboard.panel.empty" = "暂无历史记录";
|
|
"keyboard.clipboard.panel.delete" = "删除";
|
|
"keyboard.clipboard.panel.close" = "关闭剪贴板";
|
|
"keyboard.clipboard.panel.closeHint" = "返回键盘输入界面。";
|
|
"keyboard.clipboard.clear.title" = "清空剪贴板历史?";
|
|
"keyboard.clipboard.clear.message" = "将从本机永久删除全部剪贴板历史,且无法撤销。";
|
|
"keyboard.clipboard.clear.confirm" = "清空历史";
|
|
"keyboard.clipboard.suggestion.dismissA11y" = "关闭剪贴板建议";
|
|
"keyboard.clipboard.suggestion.dismissHint" = "隐藏本次剪贴板建议条。";
|
|
"keyboard.voice.cancel" = "取消本次语音输入";
|
|
"keyboard.voice.cancelHint" = "放弃当前录音、识别和润色结果。";
|
|
"keyboard.scenario.a11y" = "润色场景";
|
|
"keyboard.scenario.a11yHint" = "选择润色风格或使用场景。";
|
|
|
|
/* Mode chip labels */
|
|
"mode.off" = "关闭";
|
|
"mode.transcribe" = "转写";
|
|
"mode.polish" = "润色";
|
|
|
|
/* Locale chip labels (preview stub) */
|
|
"locale.zh-Hans" = "简体";
|
|
|
|
/* Locale menu items (settings) */
|
|
"locale.auto" = "跟随系统";
|
|
"locale.zh-Hans" = "中文(简体)";
|
|
"locale.zh-Hant" = "中文(繁體)";
|
|
"locale.en-US" = "English (US)";
|
|
"locale.ja-JP" = "日本語";
|
|
"locale.ko-KR" = "한국어";
|
|
|
|
/* 未完成主 App 引导时,语音入口提示 */
|
|
"keyboard.hint.finishSetupInApp" = "请在 OSGKeyboard App 中完成设置后再使用语音输入。";
|
|
|
|
/* v0.3.0:键盘顶栏的输入场景芯片 */
|
|
"keyboard.appContext.a11y" = "润色场景";
|
|
"keyboard.appContext.a11yHint" = "点击可手动切换输入场景(代码/邮件/聊天/文档),覆盖自动检测结果。";
|
|
"keyboard.appContext.chip.code" = "代码";
|
|
"keyboard.appContext.chip.email" = "邮件";
|
|
"keyboard.appContext.chip.chat" = "聊天";
|
|
"keyboard.appContext.chip.document" = "文档";
|
|
"keyboard.appContext.chip.unknown" = "通用";
|
|
"keyboard.appContext.menu.code" = "代码 — 保留标识符、不做自然语言化";
|
|
"keyboard.appContext.menu.email" = "邮件 — 礼貌专业、合理分段";
|
|
"keyboard.appContext.menu.chat" = "聊天 — 简短随意、保留口语";
|
|
"keyboard.appContext.menu.document" = "文档 — 长文、结构化";
|
|
"keyboard.appContext.menu.unknown" = "通用 — 中性口吻";
|
|
|
|
/* 长按编辑上一条输入 */
|
|
"keyboard.edit.hint.available" = "长按编辑上一条";
|
|
"keyboard.edit.error.noTarget" = "没有可编辑的上一条输入";
|
|
"keyboard.edit.error.llmUnavailable" = "请先在主 App 配置可用的 AI 服务";
|
|
"keyboard.edit.error.startTimeout" = "麦克风启动超时,点击重试";
|
|
"keyboard.edit.error.processing" = "编辑失败,请重试";
|
|
"keyboard.edit.error.processingTimeout" = "编辑超时,请重试";
|
|
"keyboard.edit.error.unchanged" = "内容没有变化,请换一种说法";
|
|
"keyboard.edit.status.preparing" = "正在启动麦克风…";
|
|
"keyboard.edit.status.listening" = "正在聆听编辑指令";
|
|
"keyboard.edit.status.processing" = "正在编辑…";
|
|
"keyboard.edit.status.review" = "左右滑动对比原文和结果";
|
|
"keyboard.edit.status.applying" = "正在应用编辑…";
|
|
"keyboard.edit.page.original" = "原文";
|
|
"keyboard.edit.page.edited" = "编辑后";
|
|
"keyboard.edit.helper.speak" = "说话编辑文字";
|
|
"keyboard.edit.helper.finish" = "点击完成编辑";
|
|
"keyboard.edit.helper.compare" = "左右滑动对比";
|
|
"keyboard.edit.helper.apply" = "点击应用编辑";
|
|
"keyboard.edit.helper.append" = "插入当前位置";
|
|
"keyboard.edit.close" = "关闭编辑模式";
|
|
"keyboard.edit.closeHint" = "放弃本次编辑并返回语音输入。";
|
|
"keyboard.edit.apply" = "应用编辑";
|
|
"keyboard.edit.append" = "插入当前位置";
|
|
"keyboard.edit.stop" = "完成编辑指令";
|
|
|
|
/* AI 问答模式 */
|
|
"keyboard.ai.placeholder" = "点击麦克风向 AI 提问";
|
|
"keyboard.ai.hintA11yPrefix" = "建议:";
|
|
"keyboard.ai.hint" = "先插入 AI 回答,再按发送";
|
|
"keyboard.ai.listening" = "正在聆听…";
|
|
"keyboard.ai.recognizing" = "正在识别问题…";
|
|
"keyboard.ai.generating" = "AI 正在回答…";
|
|
"keyboard.ai.thinking" = "AI 正在思考…";
|
|
"keyboard.ai.send" = "发送";
|
|
"keyboard.ai.insert" = "插入";
|
|
"keyboard.ai.inserted" = "已插入";
|
|
"keyboard.ai.sent" = "已发送";
|
|
"keyboard.ai.cancel" = "取消 AI 问答";
|
|
"keyboard.ai.cancelHint" = "取消当前录音、识别或 AI 请求。";
|
|
"keyboard.ai.sendA11y" = "首次点击插入 AI 回答;在支持发送的输入框中再次点击发送";
|
|
"keyboard.ai.startA11y" = "开始向 AI 提问";
|
|
"keyboard.ai.stopA11y" = "结束提问并发送给 AI";
|
|
"keyboard.assistant.longPressCoach" = "轻点听写 · 长按问 AI";
|
|
"keyboard.assistant.micA11y" = "语音与 AI";
|
|
"keyboard.assistant.micHint" = "轻点开始语音听写,长按向 AI 提问。";
|
|
"keyboard.assistant.dictationAction" = "开始语音听写";
|
|
"keyboard.assistant.aiAction" = "向 AI 提问";
|
|
"keyboard.assistant.space" = "空格";
|
|
"keyboard.assistant.delete" = "删除";
|
|
"keyboard.assistant.sendHint" = "执行当前输入框的发送、搜索、完成或前往操作。";
|
|
"keyboard.assistant.insertPending" = "插入保留的 AI 回答";
|
|
"keyboard.assistant.discardPending" = "丢弃 AI 回答";
|
|
"keyboard.assistant.discardPendingHint" = "丢弃因光标或输入框变化而保留的回答。";
|
|
"keyboard.assistant.dismissClipboard" = "关闭剪贴板建议";
|
|
"keyboard.assistant.dismissClipboardHint" = "隐藏当前剪贴板摘要和技能。";
|
|
"keyboard.ai.error.missingAPIKey" = "请先在主 App 配置可用的 AI 服务";
|
|
"keyboard.ai.error.pipelineBusy" = "语音服务正忙,请稍后重试";
|
|
"keyboard.ai.error.startTimeout" = "麦克风启动超时,请重试";
|
|
"keyboard.ai.error.requestTimeout" = "AI 回答超时,请重试";
|
|
"keyboard.ai.error.requestFailed" = "AI 回答失败,请重试";
|
|
"keyboard.ai.error.clipboardUnavailable" = "剪贴板建议已过期,请重新复制文本";
|
|
"keyboard.ai.skill.reply" = "回复";
|
|
"keyboard.ai.skill.summarize" = "总结";
|
|
"keyboard.ai.skill.translate" = "翻译";
|
|
"keyboard.ai.skill.extractTodos" = "待办";
|
|
"keyboard.ai.skill.extractEvents" = "日程";
|
|
"keyboard.ai.skill.saveToNotes" = "备忘录";
|
|
"keyboard.ai.skill.navigate" = "导航";
|
|
"keyboard.ai.skill.previewPolish" = "润色";
|
|
"keyboard.ai.skill.previewIdeas" = "点子";
|
|
"keyboard.ai.skill.previewTone" = "语气";
|
|
"keyboard.ai.skill.noTodos" = "剪贴板内容没有待办事项";
|
|
"keyboard.ai.skill.noEvents" = "剪贴板内容没有日期或时间";
|
|
"keyboard.ai.skill.noAddress" = "剪贴板内容没有可导航的地址";
|
|
"keyboard.ai.skill.noNote" = "剪贴板没有可保存的内容";
|
|
"keyboard.ai.skill.noExportItems" = "没有可发给捷径的内容";
|
|
"keyboard.ai.skill.extracting" = "正在提取待办…";
|
|
"keyboard.ai.skill.extractingEvents" = "正在提取日程…";
|
|
"keyboard.ai.skill.extractingAddress" = "正在识别地址…";
|
|
"keyboard.ai.skill.namingNote" = "正在生成标题…";
|
|
"keyboard.ai.skill.runningShortcut" = "正在运行捷径…";
|
|
"keyboard.ai.skill.openingMaps" = "正在打开地图…";
|
|
"keyboard.ai.skill.shortcutMissing" = "找不到配套捷径,请在技能页重新安装";
|
|
"keyboard.ai.skill.handoffFailed" = "无法打开 App 运行捷径";
|