Files
openless/openless-all/app/src/i18n/zh-CN.ts
T
HKLHaoBinandCursor 00fd21d78e Add system/light/dark theme switching in settings.
Apply theme before first paint via main.tsx, persist preference locally, and expose a segmented control in General settings with aura-skin contract coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 22:10:53 +08:00

1250 lines
57 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 简体中文资源 — 与产品当前文案保持一致。
// 添加新 key 时,必须同步更新 en.ts,否则首次切换到 English 会回落到中文残留。
export const zhCN = {
app: {
name: 'OpenLess',
tagline: '自然说话,完美书写',
},
common: {
loading: '加载中…',
retry: '重试',
settingsLoadFailed: '设置加载失败',
refresh: '刷新',
clear: '清空',
copy: '复制',
delete: '删除',
later: '稍后',
cancel: '取消',
close: '关闭',
show: '显示',
hide: '隐藏',
saved: '已保存',
saving: '保存中',
copied: '已复制',
operationFailed: '操作失败',
add: '添加',
durationSeconds: '{{value}} 秒',
durationMinutes: '{{value}} 分钟',
},
capsule: {
thinking: 'thinking',
using: 'using',
cancelled: '已取消',
error: '出错了',
inserted: '已插入 {{count}}',
translating: '正在翻译',
},
qa: {
thinking: '思考中…',
error: '出错了,请稍后再试。',
errorRetry: '重试',
errorRetryHint: '再按 {{recordHotkey}} 重新提问。',
pinTooltip: '固定(不自动关闭)',
unpinTooltip: '取消固定',
closeTooltip: '关闭',
selectionPreview: '基于选中文本:',
emptyTitle: '按 {{recordHotkey}} 开始提问',
emptyDesc: '在任意 app 选中一段文字后,按一次 {{recordHotkey}} 开始录音,再按一次结束并提交。回答会显示在这里,可以连续多轮追问。',
recordingHint: '录音中…再按一次 {{recordHotkey}} 结束并提问',
mobileRecordLabel: '录音按钮',
mobileRecordStart: '开始录音',
mobileRecordStop: '结束并提交',
composerPlaceholder: '输入问题,Enter 发送,Shift+Enter 换行',
composerSend: '发送',
statusIdle: '按 {{recordHotkey}} 提问',
statusRecording: '录音中',
statusThinking: '思考中',
statusError: '出错了',
},
lessComputer: {
you: '你',
working: '正在操控电脑…',
tool: '调用了 {{name}}',
done: '完成',
cost: '${{cost}}',
error: '失败,请重试。',
closeTooltip: '关闭',
approvalTitle: '执行被拦截的命令?',
approvalRerunWarning: '注意:批准后将在已被修改的工作区上重新运行,可能对不可重入操作产生副作用',
approve: '允许',
deny: '拒绝',
approved: '已允许',
denied: '已拒绝',
},
nav: {
overview: '概览',
history: '历史',
vocab: '词汇表',
style: '风格',
marketplace: '风格市场',
translation: '翻译',
selectionAsk: '划词追问',
localAsr: '模型设置',
},
marketplace: {
kicker: 'MARKETPLACE',
title: '风格包市场',
desc: '浏览、安装和分享社区风格包。',
searchPlaceholder: '搜索名称 / 描述 / 标签…',
sortPopular: '按热度',
sortNew: '最新',
uploadBtn: '上传',
uploadDisabledHint: '请先在 设置 → 风格市场 配置 GitHub 用户名',
refreshBtn: '刷新',
empty: '还没有风格包',
emptyHint: '换个搜索词,或自己上传一个分享给社区',
loadFailed: '加载失败:{{err}}',
noDescription: '(暂无描述)',
installBtn: '安装到本地',
likeBtn: '点赞',
installed: '已安装「{{name}}」到本地风格包',
uploaded: '上传成功,等待审核',
uploadTitle: '选择要上传的风格包',
uploadHint: '上传以 {{login}} 身份登录。包内容会发到云端审核队列。',
uploadNoLocal: '本地没有可上传的风格包',
errors: {
detail: '加载详情失败:{{err}}',
install: '安装失败:{{err}}',
like: '点赞失败:{{err}}',
upload: '上传失败:{{err}}',
loadLocal: '加载本地风格包失败:{{err}}',
},
sortLiked: '我赞过的',
likedEmpty: '你还没有赞过任何风格包',
likedEmptyHint: '点开任一风格包,红色星星点亮后会出现在这里',
derivativeBadge: '衍生自 @{{login}}',
detail: {
withdrawBtn: '撤回发布',
withdrawConfirm: '确认从风格市场撤回「{{name}}」?本地副本不会被删除。',
withdrawSuccess: '已从风格市场撤回',
withdrawFailed: '撤回失败:{{err}}',
},
myPacks: {
buttonLabel: '我的发布',
buttonTitle: '查看 {{login}} 的发布',
buttonTitleEmpty: '先在 Settings → 风格市场 填写发布身份',
searchPlaceholder: '搜索名称、标签',
notLoggedIn: '请先在 Settings → 风格市场 填写发布身份',
emptyTitle: '你还没有发布过风格包',
emptyHint: '在「风格」页面编辑后点「发布到风格市场」,或点击右上角上传本地风格包。',
noMatch: '没有匹配的风格包',
summary: '已发布 {{count}} 个风格包',
summaryPending: '已发布 {{count}} 个风格包 · {{pending}} 个审核中',
versionDate: 'v{{version}} · {{date}}',
stats: '★ {{likes}} · ↓ {{downloads}}',
actions: {
update: '更新',
withdraw: '下架',
},
loadFailed: '我的发布加载失败:{{err}}',
loadingTitle: '正在拉取,请稍后…',
loadingHint: '从风格市场获取你最新发布的风格包。',
loadErrorTitle: '加载失败',
loadErrorRetry: '重试',
},
upload: {
confirmBtn: '确定上传',
updateTitle: '更新「{{name}}」',
updateHint: '选中要上传的本地新版本风格包,下方点「确定上传」。同名包默认预选。',
recommendedBadge: '建议更新',
},
state: {
pending: '审核中',
approved: '已上架',
rejected: '未通过',
withdrawn: '已下架',
superseded: '已被新版替换',
unknown: '未知',
},
oauth: {
title: '用 GitHub 登录',
generating: '正在生成设备验证码…',
browserHint: '在浏览器中打开 {{uri}} 并输入下方代码:',
copyBtn: '复制',
copied: '已复制设备码',
copyFailed: '复制失败:{{err}}',
openBrowserBtn: '打开浏览器',
cancelBtn: '取消',
waiting: '等待你在浏览器中授权…',
successAs: '已登录为 @{{login}}',
retryBtn: '重试',
closeBtn: '关闭',
loginBtn: '登录',
loginTooltip: '点击用 GitHub 登录',
reloginTooltip: '点击重新登录 / 切换账号(当前 @{{login}})',
},
modal: {
loggedIn: '当前登录身份 —— 在 Settings → 录音 → 风格市场 修改',
notLoggedIn: '未登录 —— 去 Settings → 录音 → 风格市场 填一个发布者名',
notLoggedInLabel: '未登录',
},
},
shell: {
shortcutLabel: '录音快捷键',
shortcutHint: '开始 / 停止',
betaTag: 'BETA',
betaNote: '所有数据都只保存在本机。',
footer: {
account: '账户',
feedback: '反馈',
settings: '设置',
help: '帮助',
version: '版本 {{version}}',
helpPopover: {
tagline: '本地驱动的语音输入层',
releaseNotes: '查看发布日志 ↗',
docs: '帮助中心 ↗',
},
},
providerPrompt: {
title: '设置语音提供商',
body: '还没有配置 ASR 或 LLM 提供商,语音输入和润色暂时无法正常工作。',
later: '稍后',
openSettings: '去设置',
},
hotkeyModePrompt: {
title: '检查录音方式',
body: '默认已改为切换式。如果之前改过触发方式,请到录音设置确认一次。',
later: '稍后提醒',
openSettings: '去录音设置',
},
},
onboarding: {
welcome: '欢迎使用 OpenLess',
intro: '本地说出,本地落字。开始前需要两个系统权限。',
accessibilityTitle: '辅助功能',
hotkeyTitle: '全局快捷键',
accessibilityDesc: '用于监听全局快捷键(默认 {{trigger}})并把识别结果写入光标位置。',
hotkeyDesc: '用于确认全局快捷键监听可用。',
micTitle: '麦克风',
micDesc: '用于捕获你的语音输入。',
actionNotApplicable: '无需授权',
actionGranted: '已授权',
actionOpenSystem: '打开系统设置',
actionGrant: '授权',
actionRequestMic: '弹出授权',
accessibilityHint: '授权后必须**完全退出 OpenLess** 再重新打开(macOS TCC 规则)。',
footerHint: '授权全部完成后此引导自动关闭。如果一直不消失,从菜单栏 OpenLess → 退出,重新打开 App。',
androidContinue: '先进入应用',
androidFooterHint: '听写需要麦克风权限。可点击上方「弹出授权」,或先进入应用后在概览页继续授权。',
androidTitle: '配置 OpenLess',
androidIntro: '按步骤完成移动端权限和服务配置。',
androidStepCounter: '第 {{current}} / {{total}} 项',
androidBack: '上一步',
androidNext: '下一步',
androidFinish: '完成并进入',
androidSteps: {
microphoneTitle: '麦克风权限',
microphoneDesc: '调用 Android 系统授权卡片,允许 OpenLess 录制语音。',
accessibilityTitle: '无障碍服务',
accessibilityDesc: '用于把识别结果粘贴回当前输入框,并辅助检测输入环境。',
overlayPermissionTitle: '悬浮窗权限',
overlayPermissionDesc: '允许 OpenLess 在其他应用上显示录音控制按钮。',
overlayConfigTitle: '悬浮窗配置',
overlayConfigDesc: '设置悬浮窗显示时机、触发方式、滑动动作和按钮大小。',
asrTitle: 'ASR 云服务',
asrDesc: '配置语音转文字服务的供应商、密钥、接口地址和模型。',
llmTitle: 'LLM 服务',
llmDesc: '配置文本润色、翻译和问答使用的语言模型服务。',
},
},
overview: {
kicker: 'DASHBOARD',
title: '今日概览',
desc: '今日口述统计与系统状态。',
pressPrefix: '按',
pressSuffix: '开始录音',
asrKind: 'ASR 语音',
llmKind: 'LLM 模型',
asrName: '火山引擎',
asrSubname: 'bigmodel',
llmName: 'OpenAI 兼容',
llmConfigured: '已配置 active LLM',
llmNotConfigured: '未配置',
statusConfigured: '已配置',
statusNotConfigured: '未配置',
statusUnknown: '无法读取',
credentialsLoadError: '无法读取凭据状态',
metricChars: '今日字数',
metricSegments: '{{count}} 段',
metricDuration: '今日总时长',
metricAvg: '平均段落',
metricAvgTrend: '今日均值',
metricNoData: '暂无数据',
historyLoadError: '历史读取失败',
metricTotal: '累计记录',
metricTotalTrend: '本机存档 (上限 200)',
weekTitle: '近 7 天',
weekUnit: '条数 / 天',
recentTitle: '最近识别',
recentAll: '全部记录 →',
recentEmpty: '还没有记录。按 {{trigger}} 开始第一次录音。',
recentLoadFailed: '无法读取最近识别,请重试。',
historyRetry: '重试',
weekDays: ['日', '一', '二', '三', '四', '五', '六'],
inAppDictation: {
title: '应用内录音',
start: '开始录音',
stop: '停止录音',
idle: '点击开始录音',
recording: '录音中…',
processing: '处理中…',
},
androidMicBanner: {
title: '需要麦克风权限',
desc: '授权麦克风后可使用应用内录音与语音输入。',
grant: '弹出授权',
openSettings: '打开系统设置',
},
},
history: {
kicker: 'HISTORY',
title: '历史记录',
desc: '本机保存的识别记录。',
filterAll: '全部',
summary: '共 {{total}} 条 · 显示 {{shown}}',
searchPlaceholder: '搜索转写内容…({{shortcut}})',
searchNoMatch: '没有匹配「{{query}}」的记录。',
empty: '还没有历史记录。按 {{trigger}} 录一段试试。',
loadFailed: '加载历史失败:{{err}}',
retry: '重试',
clearFailed: '清空失败:{{err}}',
deleteFailed: '删除失败:{{err}}',
copyFailed: '复制失败:{{err}}',
playRecording: '播放录音',
audioLoading: '加载中…',
exportRecording: '导出录音',
exportFailed: '导出失败:{{err}}',
retranscribe: '重新转录',
retranscribing: '转录中…',
retranscribeFailed: '重新转录失败:{{err}}',
rawLabel: '原文',
rawEmpty: '(空)',
selectHint: '左侧选一条查看详情。',
insertedTo: '插入到',
chars: '{{count}} 字',
vocabHits: '{{count}} 个热词',
inserted: '已插入',
pasteSent: '已尝试粘贴',
copiedFallback: '已复制(需 {{shortcut}})',
insertFailed: '插入失败',
confirmClear: '确定清空全部 {{count}} 条记录?此操作不可恢复。',
},
vocab: {
kicker: 'VOCABULARY',
title: '词汇表',
desc: '添加生词或专业术语,提高识别准确率。',
sectionTitle: '词条',
placeholder: '输入词语,按 Enter 或点添加…',
tip: '支持中英混合 · 数字开头按字面识别 · 命中次数自动计数',
loadFailed: '加载失败:{{err}}',
empty: '还没有词条。在上面输入一个生词或专业术语,让模型在听写时优先匹配。',
tipDisabled: '点击禁用此词条',
tipEnabled: '点击启用此词条',
removeAria: '删除',
corrections: {
title: '纠正规则',
tip: '修正常见 ASR 误识别,支持 {num} 数字通配。',
patternPlaceholder: '误识别写法,如 {num}粒',
replacementPlaceholder: '目标写法,如 {num}例',
empty: '还没有纠正规则。',
invalid: '仅支持字面替换,或一个 {num} 通配数字的规则,例如 {num}粒 → {num}例。',
tipDisabled: '点击禁用此规则',
tipEnabled: '点击启用此规则',
removeAria: '删除纠正规则',
},
presets: {
title: '场景预设',
tip: '可多选批量启用,支持编辑和新建。',
create: '新建预设',
apply: '启用所选',
save: '保存预设',
edit: '编辑 {{name}}',
newPreset: '新预设',
namePlaceholder: '预设名称',
wordsPlaceholder: '词条(用逗号或换行分隔)',
},
},
style: {
kicker: 'STYLE',
title: '输出风格',
desc: '选择录音的默认输出风格。',
masterToggle: '整体启用',
currentDefault: '当前默认',
ariaSetDefault: '设为默认',
saveFailed: '保存失败:{{error}}',
customPromptTitle: '自定义提示词',
customPromptPlaceholder: '可选,追加到这个风格的内置 system prompt 末尾。',
customPromptHint: '留空则保持当前行为不变。保存后会在该风格的润色和 repolish 中生效;按 Ctrl/Cmd+Enter 也可保存。',
customPromptSave: '保存提示词',
customPromptDirty: '未保存',
systemPromptMovedHint: '完整 System Prompt 已移到 设置 -> Providers 页面统一编辑。这里现在只负责风格启停和默认风格。',
modes: {
raw: { name: '原文', desc: '只补标点和必要分句,不改写不扩写。', sample: '保留原始口语;嗯、那个等口癖会被去除,但不会重组语句。' },
light: { name: '轻度润色', desc: '去口癖、补标点,整理为可发送的自然文字。', sample: '让转写听起来不像念稿——保留语气和表达习惯,但行文流畅。' },
structured: { name: '清晰结构', desc: '多个主题或步骤时,自动组织为分点列表。', sample: '1. 主题一\na. 要点\nb. 要点\n2. 主题二\na. 要点\nb. 要点' },
formal: { name: '正式表达', desc: '工作沟通和邮件场景,更专业更完整。', sample: '邮件场景自动识别问候 / 落款;不引入空泛客套。' },
},
pack: {
kicker: 'STYLE PACKS',
title: '风格包',
desc: '管理本地风格包。',
marketplaceBtn: '风格市场',
loadFailed: '加载风格包失败:{{err}}',
importZip: '导入 ZIP',
exportZip: '导出 ZIP',
exportShort: '导出',
publishMarketplace: '发布到风格市场',
updateMarketplace: '更新到风格市场新版本',
publishDisabledHint: '请先在 设置 → 风格市场 配置 GitHub 用户名',
publishSuccess: '发布成功,等待 marketplace 审核',
publishFailed: '发布失败:{{err}}',
publishBuiltinRejected: '内置风格包不能直接发布,请先编辑生成一份导入版。',
builtin: '内置',
imported: '导入',
active: '当前',
activate: '激活',
edit: '编辑',
closeEditor: '关闭',
unsaved: '未保存',
listTitle: '本地风格包',
listDesc: '浏览和切换风格包。',
listCount: '{{count}} 个风格包',
addPackTileTitle: '新建风格包',
addPackTileHint: '从空白模板开始。',
createSuccess: '已创建新风格包',
createFailed: '创建风格包失败:{{err}}',
save: '保存',
revert: '撤销',
saveSuccess: '风格包已保存',
saveFailed: '保存风格包失败:{{err}}',
activateSuccess: '已将"{{name}}"设为当前风格',
activateFailed: '设为当前风格失败:{{err}}',
importSuccess: '已导入"{{name}}"',
importFailed: '导入 ZIP 失败:{{err}}',
exportSuccess: '已导出到 {{path}}',
exportFailed: '导出 ZIP 失败:{{err}}',
exportDirtyFirst: '请先保存当前风格包,再导出 ZIP。',
resetBuiltin: '重置',
resetSuccess: '已重置"{{name}}"',
resetFailed: '重置风格包失败:{{err}}',
deleteImported: '删除',
deleteConfirm: '确定删除"{{name}}"吗?删除后无法恢复。',
deleteSuccess: '已删除"{{name}}"',
deleteFailed: '删除风格包失败:{{err}}',
summaryCurrentEmpty: '还没有选中风格包',
editorTitle: '编辑风格',
editorDesc: '编辑当前风格包。',
metaTitle: '安装信息',
metaSource: '来源',
metaBaseMode: '基础模式',
metaUpdatedAt: '更新时间',
fieldName: '名称',
fieldAuthor: '作者',
fieldAuthorPlaceholder: '可选,方便标注来源',
fieldVersion: '版本',
fieldTags: '标签',
fieldTagsPlaceholder: '用英文逗号分隔,例如 community, voiceover, formal',
fieldDescription: '描述',
fieldModel: '推荐模型(仅元数据)',
fieldModelPlaceholder: '可选,例如 gpt-4.1 / deepseek-v3',
fieldModelHint: '仅作说明,不会切换实际模型。',
fieldCompatibility: '兼容版本',
fieldCompatibilityPlaceholder: '可选,例如 >=1.3.0',
fullPromptTitle: 'System Prompt',
fullPromptHint: '这就是这套风格包自己的 Prompt。',
promptChars: '{{count}} 字符',
runtimeTitle: 'OpenLess 运行时附加指令',
runtimeDesc: '只读的运行时辅助项。',
runtimeContextTitle: '上下文前提',
runtimeContextDesc: '来自语言与应用上下文',
runtimeContextEmpty: '当前不会附加',
runtimeHotwordTitle: '热词提示段',
runtimeHotwordDesc: '来自已启用热词',
runtimeHotwordEmpty: '当前不会附加',
runtimeHistoryTitle: '多轮历史保护段',
runtimeHistoryDesc: '仅用于实时多轮 polish',
runtimeHistoryEmpty: '只有存在 prior turns 时才会附加',
runtimeActive: '当前生效',
runtimeInactive: '当前未生效',
runtimePreviewFailed: '生成运行时预览失败:{{err}}',
runtimePreviewOmittedFrontApp: '预览已省略前台 app 标签。',
examplesTitle: '效果示例',
examplesDesc: '会随风格包一起导出。',
addExample: '新增示例',
examplesEmpty: '还没有示例。',
exampleTitlePlaceholder: '示例 {{index}} 标题',
exampleInput: '输入',
exampleOutput: '输出',
examplesCount: '{{count}} 个示例',
discardCloseConfirm: '关闭编辑面板前要放弃未保存修改吗?',
discardSwitchConfirm: '要放弃当前未保存修改,并切换到"{{name}}"吗?',
derivativeBadge: '衍生自 @{{login}}',
},
},
translation: {
kicker: 'TRANSLATION',
title: '翻译',
desc: '录音后自动翻译为目标语言再插入。',
statusEnabled: '已启用',
statusDisabled: '未启用',
working: {
title: '工作语言',
desc: '勾选日常使用的语言,影响润色与翻译效果。',
},
target: {
title: '翻译目标语言',
desc: '录音时按 Shift 触发翻译。选「不启用」则 Shift 无效。',
disabled: '不启用(Shift 按下不触发翻译)',
},
save: {
workingFailed: '工作语言保存失败,请重试。',
targetFailed: '翻译目标语言保存失败,请重试。',
hotkeyRegisterFailed: '翻译快捷键注册失败,未继续保存。',
hotkeySaveFailed: '翻译快捷键保存失败,请重试。',
},
howto: {
title: '使用方法',
step1: '在任意输入框聚焦光标。',
step2: '按 {{trigger}} 开始录音。',
step3: '录音中按一下 Shift 激活翻译。',
step4: '再按 {{trigger}} 停止录音。',
step5: '翻译结果自动插入到光标位置。',
indicatorTitle: '翻译模式指示',
indicatorDesc: '按 Shift 后屏幕底部会显示蓝色「正在翻译」标识。',
fallbackTitle: '安全兜底',
fallbackDesc: '翻译失败时回退为插入原始转写,不会丢字。',
},
},
selectionAsk: {
kicker: 'SELECTION ASK',
title: '划词追问',
desc: '选中文字后语音提问,支持多轮追问。',
statusEnabled: '已启用',
statusDisabled: '未启用',
hotkey: {
title: '弹出浮窗的快捷键',
desc: '控制浮窗开关。浮窗内录音用 {{recordHotkey}}。',
optionDisabled: '不启用',
chordWarning: '',
},
save: {
hotkeyRegisterFailed: '划词追问快捷键注册失败,未继续保存。',
hotkeySaveFailed: '划词追问快捷键保存失败,请重试。',
historySaveFailed: 'Q&A 历史保存设置保存失败,请重试。',
},
history: {
title: '保存历史',
desc: '开启后在本地保存问答记录,默认关闭。',
},
howto: {
title: '使用方法',
step1: '按 {{hotkey}} 打开浮窗。',
step2: '在任意 app 选中文字。',
step3: '按 {{recordHotkey}} 录音,再按一次提交。',
step4: '可继续按 {{recordHotkey}} 多轮追问。',
step5: '按 Esc 关闭浮窗并清空历史。',
windowTitle: '浮窗操作',
windowDesc: '浮窗可拖动,位置自动记忆。钉住可保持窗口不关。',
privacyTitle: '隐私',
privacyDesc: '选中文本仅存于内存,关闭浮窗即销毁。超 4000 字符自动截断。',
},
},
settings: {
kicker: 'SETTINGS',
title: '设置',
desc: '录音、提供商、快捷键与权限配置。',
dataStorage: {
title: '数据存储',
desc: '本机保留的历史会话与对话上下文。',
},
codingConsole: {
title: 'Claude 控制台',
desc: '检测本机 Claude Code 与 MCP(computer use)状态,并护栏化地无头跑一次 Claude、流式查看输出与用量。',
guardNote: '默认放行可恢复操作;rm -rf / sudo / 强制推送等高风险命令被拦截;若工作目录是 git 仓库,运行前自动生成快照可回滚。',
status: '状态',
detect: '检测',
detecting: '检测中…',
installed: '已检测到 Claude',
notInstalled: '未检测到 claude',
notInstalledHint: '请先安装 Claude Code(参见 docs.anthropic.com/claude-code),或在下方填写其可执行文件完整路径。',
mcpServers: '已配置 {{count}} 个 MCP 服务',
computerUsePresent: '已配置桌面控制(computer use)MCP',
computerUseAbsent: '未配置桌面控制 MCP(复制/粘贴等轻动作用 Bash 即可,无需此项)',
exePath: '可执行文件',
workdir: '工作目录',
workdirDesc: '可选。Claude 在此目录内运行;填写 git 仓库可启用运行前快照回滚。',
workdirPlaceholder: '留空则在临时目录运行',
permissionMode: '权限模式',
mode: {
acceptEdits: '放行(可恢复操作)',
plan: '只读 / 计划',
default: '默认(逐项确认)',
bypassPermissions: '完全放行(高风险)',
},
promptPlaceholder: '让 Claude 做点什么,例如:把当前目录的文件名列出来',
run: '运行',
running: '运行中…',
cancel: '取消',
clear: '清空',
riskWarn: '检测到高风险意图:{{reason}}。护栏会在执行层拦截高风险命令。',
toolUse: '调用工具 {{name}}',
done: '完成',
doneCost: '完成 · 用量 ${{cost}}',
cancelled: '已取消',
outputPlaceholder: '输出会流式显示在这里…',
},
codingAgent: {
title: 'Less Computer',
desc: '按住一个键说话,Claude 帮你操作电脑。仅 macOS。',
enable: '启用 Less Computer',
comingSoonNote: '配置即时保存;热键触发与执行链路随后续版本生效。',
hotkeyHint: '开启后,按住下方快捷键说话,松开后 Claude 处理并把结果显示在胶囊里。',
voiceHotkey: '按住说话键',
voiceHotkeyDesc: '按住说话、松开执行。支持 Ctrl/Option/Fn 等单键。',
provider: 'Agent 后端',
providerOpenCodeSoon: 'OpenCode(即将支持)',
panelHotkey: '面板键(语音 Agent)',
panelHotkeyDesc: '录音 → ASR → Claude → 结果流式进面板。默认 Cmd/Ctrl+Shift+Enter。',
quickHotkey: '快取用键',
quickHotkeyDesc: '拿当前选中文本 → Claude → 结果回插光标处。不开面板、更快。',
model: '模型',
modelPlaceholder: '默认 sonnet',
modelDefault: '默认(自动 sonnet)',
modelHint: 'Haiku 最快 · Sonnet 均衡 · Opus 最强',
},
debug: {
title: '调试工具',
desc: '排查识别问题时使用,平时无需开启。',
},
marketplace: {
title: '扩展市场',
desc: '风格市场的上传身份。浏览与安装风格在「风格」页内完成。',
github: {
signIn: '用 GitHub 账号登录',
signedIn: '已通过 GitHub 登录',
signedOut: '登录后即可上传风格、给风格点赞。',
signOut: '退出登录',
starting: '正在发起登录…',
codeHint: '在打开的 GitHub 页面输入这个验证码:',
openGithub: '打开 GitHub',
waiting: '已打开 GitHub,完成授权后会自动登录…',
failed: '登录失败,请重试',
},
},
recording: {
title: '录音与输入',
desc: '全局录音的快捷键与触发方式。',
hotkeyLabel: '录音快捷键',
hotkeyDescAcc: '按下开始捕获语音,全局生效(需辅助功能权限)。',
hotkeyDescNoAcc: '按下开始捕获语音,全局生效。',
modeLabel: '录音方式',
modeDesc: '切换式按一次开始、再按一次结束;按住说话按下保持、松开结束。',
modeToggle: '切换式',
modeHold: '按住说话',
migrationNoticeTitle: '默认已改为切换式说话',
migrationNoticeDesc: '本次更新调整了默认值,如果习惯按住说话,请在此处切回。',
microphoneLabel: '首选麦克风',
microphoneDesc: '选择优先输入设备。设备断开时自动切到系统默认。',
microphoneDefault: '系统默认麦克风',
microphoneDefaultDesc: '使用系统默认输入设备',
microphoneSystemDefault: '系统默认',
microphoneUnavailable: '不可用',
microphoneLoadError: '麦克风列表读取失败:{{message}}',
microphoneDialogTitle: '麦克风',
microphoneDialogDesc: '选择能捕捉到您声音的麦克风。',
microphoneMonitorError: '输入电平监听失败:{{message}}',
capsuleLabel: '录音胶囊',
capsuleDesc: '录音 / 转写时显示屏幕底部胶囊。',
muteDuringRecordingLabel: '录音时静音',
muteDuringRecordingDesc: '录音期间临时静音系统输出,避免扬声器回音。',
audioCueLabel: '录音提示音',
audioCueDesc: '按下热键开始录音时播放一段合成提示音,提醒已开始录音。胶囊隐藏时也会响。',
audioCuePreview: '试听',
insertGroupTitle: '插入与剪贴板',
restoreClipboardLabel: '插入后恢复剪贴板',
restoreClipboardDesc: '粘贴成功后恢复你原来的剪贴板内容(仅 Windows / Linux)。',
pasteShortcutLabel: '模拟粘贴快捷键',
pasteShortcutDesc: '插入时模拟按下的粘贴键,部分终端类应用需要 Ctrl+Shift+V(仅 Windows / Linux)。',
pasteShortcutCtrlV: 'Ctrl+V(默认 / 多数应用)',
pasteShortcutCtrlShiftV: 'Ctrl+Shift+V(kitty / alacritty / wezterm / 多数终端)',
pasteShortcutShiftInsert: 'Shift+Insert(xterm / urxvt)',
comboRecordLabel: '录制快捷键',
comboRecordDesc: '点击后按下想要的快捷键组合(如 ⌘⇧D)。',
comboRecordBtn: '录制快捷键',
comboRecordHint: '请按下快捷键组合…',
comboNeedKey: '请配组合键(如 ⌘⇧J),不支持单独的修饰键',
comboRecorded: '已录制',
comboClear: '清除',
comboConflict: '该快捷键组合不可用',
allowNonTsfFallbackLabel: '允许非 TSF 兜底',
allowNonTsfFallbackDesc: 'Windows:TSF 失败时使用分批 Unicode SendInput;如果仍失败,再复制到剪贴板。',
historyGroupTitle: '历史与上下文',
historyRetentionLabel: '历史保留天数',
historyRetentionDesc: '超过保留天数的历史在写入新条目时被清理;0 = 不按时间清理。',
historyMaxEntriesLabel: '历史条数上限',
historyMaxEntriesDesc: '本地保留会话上限,留空 = 200。范围 5–200。',
polishContextWindowLabel: '对话上下文窗口(分钟)',
polishContextWindowDesc: '把最近 N 分钟内已润色的转写作为多轮上下文,0 = 关闭。',
recordAudioForDebugLabel: '保留原始录音(调试)',
recordAudioForDebugDesc: '保存原始麦克风音频为 wav,便于排查识别问题。',
audioRecordingMaxEntriesLabel: '原始录音保留条数',
audioRecordingMaxEntriesDesc: '本地保留 wav 文件数上限,留空 = 200。',
startupGroupTitle: '启动',
startMinimizedLabel: '启动时静默运行',
startMinimizedDesc: '所有启动路径都不弹主窗口,仅菜单栏 / 托盘运行。',
autoUpdateCheckLabel: '自动检查更新',
autoUpdateCheckDesc: '启动时及每 60 分钟自动检查更新。',
marketplaceGroupTitle: '风格市场',
marketplaceBaseUrlLabel: '云端服务地址',
marketplaceBaseUrlDesc: '风格市场后端 URL,留空使用默认值。',
marketplaceDevLoginLabel: 'GitHub 用户名(上传身份)',
marketplaceDevLoginDesc: '标识上传者身份,为空时无法上传或点赞。',
startupAtBoot: '开机自启',
startupAtBootDesc: '登录系统时自动启动 OpenLess。',
startupAtBootError: '开机自启切换失败:{{message}}',
},
providers: {
llmTitle: 'LLM 模型(润色)',
llmDesc: 'OpenAI 兼容协议,支持多家供应商切换。',
providerLabel: '供应商',
llmProviderDesc: '选择后将自动填入 Base URL 默认值。',
credentialStorageNotice: '凭据保存在系统凭据库中。',
codexOAuthNotice: 'Codex OAuth 使用本机 Codex 登录状态(~/.codex/auth.json),无需在 OpenLess 中保存 API Key 或 Base URL。',
asrProviderDesc: '切换后将自动选用对应凭据。',
asrTitle: 'ASR 语音(转写)',
asrDesc: '用于将口述实时转写为文本。',
presets: {
ark: 'ARK(火山方舟)',
deepseek: 'DeepSeek',
siliconflow: '硅基流动',
openai: 'OpenAI',
gemini: 'Google Gemini',
codexOAuth: 'Codex OAuth',
mimo: '小米 MiMo',
cometapi: 'CometAPI',
openrouterFree: 'OpenRouter(免费模型)',
alibabaCoding: '阿里云 Coding Plan',
codingPlanX: 'CodingPlanX',
minimax: 'MiniMax(M3)',
custom: '自定义',
asrVolcengine: '火山引擎 bigasr',
asrBailian: '阿里云百炼实时 ASR',
asrSiliconflow: '硅基流动 SenseVoice',
asrZhipu: '智谱 GLM-ASR',
asrGroq: 'Groq Whisper-large-v3',
asrWhisper: 'OpenAI Whisper(兼容)',
asrOpenrouter: 'OpenRouter Whisper',
asrXiaomiMimo: '小米 MiMo ASR',
asrSherpaOnnxLocal: '本地 sherpa-onnx(实验性)',
asrFoundryLocalWhisper: '本地 Whisper(Foundry Local)',
asrLocalQwen3: '本地 Qwen3-ASR',
asrAppleSpeech: 'Apple 语音 (macOS)',
},
volcengineAppKeyLabel: 'APP ID',
volcengineAccessKeyLabel: 'Access Token',
volcengineResourceIdLabel: 'Resource ID',
volcengineMappingNote: 'Secret Key 当前无需填写。Resource ID 默认使用 volc.seedasr.sauc.duration。',
localAsrActiveNotice: '当前已启用「{{name}}」,可在「高级」中切换或禁用。',
localAsrTakeoverHint: '启动「{{name}}」后,ASR 提供商将被接管。',
asrProviderTakenOver: 'ASR 提供商已被接管',
localAsrHint: '在本机运行,无需 API Key。从 HuggingFace 下载模型即可使用。',
foundryLocalAsrHint: '在本机运行,无需 ASR API Key。首次使用需下载运行组件和模型。',
localAsrPerformanceWarning: '本地推理比云端慢,中文准确率可能更低。适合离线或隐私敏感场景。',
localAsrReady: '{{model}} 已下载',
localAsrNotReady: '{{model}} 未下载',
localAsrGoDownload: '前往模型设置下载',
localAsrManage: '前往模型设置',
localAsrDownloadedTitle: '已下载模型',
localAsrDelete: '删除',
fillDefault: '填入默认值',
readFailed: '读取失败',
apiKeyLabel: 'API 密钥',
baseUrlLabel: '接口地址',
modelLabel: '模型',
thinkingModeLabel: '思考',
thinkingModeOn: '开启',
thinkingModeOff: '关闭',
thinkingModeHint: '关闭时按渠道级官方参数关闭或压低思考;开启时按渠道默认启用思考。不注入 prompt,也不做单模型适配。',
bailianVocabularyIdLabel: '热词 Vocabulary ID(可选)',
bailianVocabularyIdNote: '如已在百炼创建热词表,可填写 vocab-...;留空则不下发热词。',
appIdLabel: 'App ID(应用 ID)',
accessKeyLabel: 'Access Key',
resourceIdLabel: '资源 ID',
toolsLabel: '连接检查',
toolsDesc: '先保存上方配置,再验证当前模型连通性或拉取模型;失败时仍可手动填写模型 ID。',
validate: '验证',
validating: '验证中…',
fetchModels: '拉取模型',
loadingModels: '拉取模型中…',
modelMissing: '未配置模型,请先填写模型 ID。',
modelsEmpty: '鉴权成功,但没有返回可用模型。',
modelsLoaded: '已拉取 {{count}} 个模型。',
selectModel: '选择一个模型写入上方字段',
modelSaved: '已保存模型 {{model}}。',
validateSuccess: '连接检查通过。',
validateFailed: '连接检查未通过。',
providerHttpStatus: '供应商接口返回 {{status}},请检查 API Key 权限或 Endpoint。',
endpointMustUseHttps: '允许使用 HTTP Endpoint,但请注意:API Key 和音频内容可能在传输中泄漏。',
endpointInvalid: 'Endpoint 格式不合法。',
responseTooLarge: '供应商响应过大,已停止验证以保证安全。',
asrInvalidJson: 'ASR 响应不是有效 JSON。',
asrMissingTextField: 'ASR 响应缺少 text 字段。',
apiKeyMissing: 'API Key 为空。',
endpointMissing: 'Endpoint 为空。',
requestTimeout: '请求超时,请稍后重试。',
},
shortcuts: {
title: '快捷键速查',
descAcc: '所有快捷键全局生效,需要在权限设置中开启辅助功能。',
descNoAcc: '所有快捷键全局生效。若无响应,请在权限页查看全局快捷键监听状态。',
startStop: '开始 / 停止录音',
cancel: '取消本次录音',
confirm: '胶囊确认插入',
switchStyle: '切换到上一个风格',
openApp: '打开 OpenLess',
agentPolish: '选中文本润色',
agentPolishDesc: '选中文本 → 按键 → Claude 润色 → 替换选区。',
agentVoice: 'Less Computer',
agentVoiceDesc: '按住自定义按键 → 说话 → Claude 执行任务 → 结果弹胶囊显示。',
agentVoiceHint: '在「高级 → Less Computer」里设置按住说话键。',
agentVoiceTrigger: 'Less Computer 按住说话键',
enable: '启用',
disable: '停用',
confirmHint: '点击右侧 ✓',
notSupported: '暂未支持',
androidReadOnly: 'Android 不支持全局快捷键,请在概览页使用录音按钮。',
},
permissions: {
title: '权限',
descAcc: 'OpenLess 需要以下系统权限。授权后通常要完全退出 App 重启一次才生效。',
descNoAcc: '麦克风必需;全局快捷键状态用来检测 native hook 是否运行。',
micLabel: '麦克风',
micDesc: '用于捕获你的语音输入。',
accLabel: '辅助功能',
accDesc: '监听全局快捷键并把识别结果写入光标。',
hotkeyLabel: '全局快捷键',
hotkeyDescWithAdapter: '适配器:{{adapter}}。',
hotkeyDescPlain: '判断快捷键监听是否已安装。',
networkLabel: '网络',
networkDesc: '云端 ASR / LLM 必需,本地模式可关。',
networkOk: '可用',
networkOffline: '不可用',
checking: '检查中…',
granted: '已授权',
notApplicable: '无需授权',
denied: '未授权',
indeterminate: '未确定',
openSystem: '打开系统设置',
grant: '授权',
rerunAndroidSetup: '重新运行设置向导',
hotkeyInstalled: '已安装',
hotkeyStarting: '安装中…',
hotkeyFailed: '监听失败',
windowsImeLabel: 'Windows 输入法后端',
windowsImeDesc: '语音输入时临时切到 OpenLess TSF,绕过剪贴板限制。',
windowsImeInstalled: '已安装',
windowsImeUnavailable: '不可用',
androidImeLabel: '输入法 (IME)',
androidImeSelected: '已选中',
androidImeEnabled: '已启用',
androidImeDisabled: '未启用',
androidOverlayLabel: '悬浮窗',
androidAccessibilityLabel: '无障碍服务',
androidAccessibilityImpact: '开启后可在不切换键盘的情况下把结果输出到当前输入框;不开启时仍会复制到剪贴板,需要手动粘贴。',
androidInsertStrategyLabel: '文本插入策略',
androidOverlayTriggerLabel: '悬浮窗显示时机',
androidOverlayActivationModeLabel: '悬浮窗激活方式',
androidOverlayLeftSwipeActionLabel: '左滑动作',
androidOverlayCancelSwipeDirectionLabel: '取消录音滑向',
androidOverlaySizeLabel: '悬浮窗大小',
androidOverlaySizeHint: '调整悬浮按钮直径,保存后在当前悬浮窗上生效并保留位置。',
androidInsertStrategy: {
accessibility: '自动输出到输入框',
clipboard: '仅剪贴板',
},
androidInsertStrategyHint: {
accessibility: '需要开启无障碍服务;不可用时会复制到剪贴板。',
clipboard: '不需要无障碍权限,结果只复制到剪贴板,由你手动粘贴。',
},
androidOverlayTrigger: {
background: '应用退到后台',
keyboard: '弹出键盘时',
always: '始终显示',
},
androidOverlayTriggerHint: {
background: '省电、实现简单;其他 App 输入时不会自动出现。',
keyboard: '该模式已暂缓,历史配置会自动改为“应用退到后台”。',
always: '入口始终可见,但会一直占屏。',
},
androidOverlayTriggerDisabled: {
keyboard: '“弹出键盘时”暂缓开放,后续将以悬浮窗手势替代键盘检测。',
},
androidOverlayActivationMode: {
tap: '点按激活',
long_press: '长按激活',
},
androidOverlayActivationModeHint: {
tap: '第一次点按进入激活态,第二次点按开始普通听写。',
long_press: '按住进入激活态;松开时结束当前录音或问答轮次。',
},
androidOverlayLeftSwipeAction: {
translation: '翻译听写',
style_pack: '切换风格包',
},
androidOverlayLeftSwipeActionHint: {
translation: '激活态左滑后按翻译模式录音。',
style_pack: '激活态左滑后切换到上一个风格包。',
},
androidOverlayCancelSwipeDirection: {
up: '向上滑',
down: '向下滑',
},
androidOverlayCancelSwipeDirectionHint: {
up: '录音中向上滑取消本次听写,不转写、不插入。',
down: '录音中向下滑取消本次听写,不转写、不插入。',
},
windowsIme: {
installed: '已安装,按需切到 OpenLess 输入法。',
notInstalled: '未安装,走剪贴板 / WM_PASTE 兜底。',
registrationBroken: '注册损坏,请重装 OpenLess 输入法。',
notWindows: '仅 Windows 可用。',
},
},
advanced: {
streamingInsertTitle: '流式输入',
streamingInsertTitleLinux: '流式输入(实验)',
streamingInsertDesc:
'逐字实时插入,降低感知延迟。不满足条件时回落到一次性粘贴。',
streamingInsertLabel: '流式输入',
streamingInsertHintMac:
'临时切到 ABC 输入源,避免 CJK IME 拦截,会话结束后自动切回。',
streamingInsertHintWindows:
'SendInput Unicode 直接送字符,绕过 TSF / IME,不切输入法。',
streamingInsertHintLinux:
'通过 fcitx5 插件提交文字;流式输入使用 enigo + XTest 合成按键。',
streamingInsertSaveClipboardLabel: '同步到剪贴板',
streamingInsertSaveClipboardHint: '插入成功后把最终文本写入剪贴板,方便 Cmd+V 再次粘贴;关闭后流式过程不动剪贴板。',
localAsrTitle: '本地 ASR 模型(实验性)',
localAsrDesc: '把转写从云端切到本机推理。仅推荐离线 / 隐私敏感场景。',
localAsrWarningShort: '本地推理较慢,配置不足时可能吞字。',
qwen3Desc: '启动之后,ASR 提供商将被接管。',
sherpaDesc: '启动之后,ASR 提供商将被接管。',
foundryDesc: '启动之后,ASR 提供商将被接管。',
notSupportedHere: '本平台暂不支持,未集成推理模块。',
enable: '启用',
alreadyActive: '已启用',
disableLocalLabel: '禁用本地 ASR',
disableLocalDesc: '切回云端 ASR(默认火山引擎 bigasr)。',
disable: '禁用',
platformNotSupported: '该平台暂未支持本地 ASR 模型集成。',
confirmEnableLocalTitle: '启用本地 ASR?',
confirmEnableLocalBody: '启用后转写会比云端慢,准确率可能更低。',
confirm: '确认启用',
},
language: {
title: '界面语言',
desc: '切换 UI 显示语言。当前会话即时生效,下次启动自动沿用。',
label: '语言',
labelDesc: '选择「跟随系统」时按操作系统当前语言显示。',
followSystem: '跟随系统',
zh: '简体中文',
zhTW: '繁體中文',
en: 'English',
ja: '日本語 (Beta)',
ko: '한국어 (Beta)',
restartHint: '部分原生菜单(系统托盘等)可能需要重启 App 才会切换。',
},
appearance: {
title: '外观',
desc: '选择浅色或深色模式,或跟随系统设置。',
label: '主题',
followSystem: '跟随系统',
light: '浅色',
dark: '深色',
},
remoteInput: {
title: '远程输入',
enableLabel: '启用远程输入',
enableDesc: '手机/平板浏览器连到电脑录音,语音实时落到电脑光标处(需 HTTPS,首次访问要信任证书)',
portLabel: '监听端口',
defaultModeLabel: '默认录音方式',
modeToggle: '点击切换',
modeHold: '按住说话',
urlLabel: '访问网址',
pinLabel: '配对码',
regeneratePin: '重新生成',
portInUse: '端口 {{port}} 被占用,请更换',
startError: '远程输入服务启动失败:{{reason}}',
securityHint: '仅同一局域网可访问,需输入配对码;不用时建议关闭。',
certHint: '首次访问浏览器会提示证书不受信任,按提示选择"继续访问"。',
certTrustWarning:
'该证书仅用于本机远程输入服务(不能签发其他证书),请勿信任来源不明的证书;不再使用时可在手机系统设置中移除。',
},
about: {
tagline: '自然说话,完美书写',
checkUpdate: '检查更新',
checkUpdateBtn: '检查',
checkingUpdate: '检查中…',
upToDate: '当前已是最新版本。',
updateError: '检查或更新失败,请稍后重试。',
retryBtn: '重试',
openReleases: '打开 Releases',
source: '源码',
docs: '文档',
feedback: '反馈',
qq: '社区 QQ 群',
qqDesc: '使用 QQ 搜索群号加入,或扫码进群。',
copyQq: '复制群号',
privacy: '隐私',
privacyDesc: '所有数据仅保存在本机,云端 API 不保留录音。',
localFirst: '本地优先',
linksTitle: '文档链接',
betaChannelLabel: '加入 Beta 渠道',
betaChannelDesc: '抢先体验新功能',
betaChannelFetching: '正在获取最新 Beta 版本…',
betaChannelFetchBtn: '查询最新 Beta',
betaChannelLatestPrefix: '最新 Beta:',
betaChannelDownloadBtn: '前往下载',
betaChannelRefresh: '重新查询',
betaChannelNoBeta: '暂无已发布的 Beta 版。',
betaChannelFetchError: '获取 Beta 版本信息失败,请稍后重试。',
betaChannelUpToDate: '已是最新',
betaChannelUpdateNow: '立即更新',
betaChannelUpdateNowTitle: '检查并下载最新 Beta,然后弹出更新对话框',
betaChannelChecking: '检查中…',
updateDialog: {
available: {
title: '发现新版本',
desc: '发现 OpenLess {{version}},是否现在更新?',
},
downloading: {
title: '正在下载更新',
desc: '正在下载 OpenLess {{version}},请保持应用打开。',
},
downloaded: {
title: '更新已准备好',
desc: 'OpenLess {{version}} 已安装完成。是否现在自动重启以应用更新?',
},
installing: {
title: '正在安装更新',
desc: '正在安装 OpenLess {{version}},请保持应用打开。',
},
install: '现在更新',
downloadingLabel: '下载中…',
installingLabel: '安装中…',
later: '稍后手动重启',
restartNow: '现在重启',
progress: '{{progress}}% · {{downloaded}} / {{total}}',
progressUnknown: '已下载 {{downloaded}}',
},
},
},
modal: {
sections: {
general: '通用',
services: '服务',
privacy: '隐私',
advanced: '高级',
personalize: '个性化',
about: '关于',
helpCenter: '帮助中心',
releaseNotes: '发布日志',
},
personalize: {
font: '字体大小',
fontDesc: '整体缩放界面字号,立即生效。',
fontSmall: '小',
fontMedium: '中',
fontLarge: '大',
blur: '毛玻璃强度',
blurDesc: '影响窗口内层 backdrop-filter 强度(macOS 系统磨砂层无法运行时调)。',
},
about: {
tagline: '自然说话,完美书写',
checkUpdate: '检查更新',
checkUpdateBtn: '检查',
docs: '文档',
docsBtn: 'openless.app/docs ↗',
feedback: '反馈渠道',
feedbackBtn: 'GitHub Issues ↗',
source: '源码',
qq: '社区 QQ 群',
qqDesc: '使用 QQ 搜索群号加入,或扫码进群。',
copyQq: '复制群号',
exportErrorLog: '导出错误日志',
exportErrorLogDesc: '把当前会话的运行日志保存到本地,便于排查问题或反馈给我们。',
exportErrorLogBtn: '导出',
exporting: '导出中…',
exportSuccess: '已保存',
exportFailed: '导出失败',
privacy: '隐私',
privacyDesc: '所有识别结果只保存在本机,云端 API 仅用于实时调用。',
localFirst: '本地优先',
},
},
windowChrome: {
minimize: '最小化',
maximize: '最大化',
close: '关闭',
},
hotkey: {
triggers: {
rightOption: '右 Option',
leftOption: '左 Option',
rightControl: '右 Control',
leftControl: '左 Control',
rightCommand: '右 Command',
fn: 'Fn (地球键)',
rightAlt: '右 Alt',
mediaPlayPause: '⏯ 媒体播放/暂停',
custom: '自定义组合键…',
},
fallback: '全局快捷键',
modeHoldSuffix: '(按住说话)',
modeToggleSuffix: '(开始 / 停止)',
usageHold: '按住 {{trigger}} 说话,松开结束。',
usageToggle: '按 {{trigger}} 开始录音,再按一次结束。',
adapter: {
macEventTap: 'macOS Event Tap',
windowsLowLevel: 'Windows 低层键盘 hook',
fcitx5: 'fcitx5 输入法插件',
unavailable: '不可用',
},
},
localAsr: {
kicker: '本地 ASR',
title: '模型设置',
desc: '管理本机语音识别模型。',
storageTitle: '模型存储位置',
storageBaseDir: '选择的父目录',
storageModelsRoot: '实际模型目录',
storageDefault: '系统默认目录',
storageChoose: '更改目录',
storageReset: '恢复默认',
storageReveal: '打开模型总目录',
storageDesc: '自定义目录会在所选位置下创建 OpenLess/models,并自动迁移现有模型;迁移前会取消下载和释放已加载模型。',
storageChooseTitle: '选择本地模型存储父目录',
storageChangeConfirm: '将把现有本地模型迁移到 {{path}}/OpenLess/models。迁移前会自动取消下载并释放已加载模型。是否继续?',
storageResetConfirm: '将把现有本地模型迁回系统默认目录。当前目录:{{path}}。是否继续?',
modelDir: '模型目录',
revealDir: '打开目录',
deleteConfirm: '确定删除 {{name}} 的本地模型文件吗?此操作无法撤销。',
appleSpeechTitle: 'Apple 语音识别(macOS)',
appleSpeechDesc: '使用 macOS 系统自带的语音识别在本地把语音转成文字:无需下载模型、无需 API Key、无需联网。云端 ASR 网络不稳时的零凭据本地兜底。首次使用会弹出系统语音识别授权。',
appleSpeechUse: '使用 Apple 语音',
qwenTitle: 'Qwen3-ASR 模型管理',
qwenExperimentalBadge: '实验性',
engineUnavailable: '当前平台暂未集成 Qwen3-ASR 推理引擎。可下载模型,但暂时无法启用 Qwen3-ASR。',
qwenUnavailableOnWindows: 'Windows 暂不支持 Qwen3-ASR,请使用上方 Foundry Local Whisper。',
foundryTitle: 'Windows Foundry Local Whisper',
foundryDesc: '在本机识别语音,无需 ASR API Key。首次使用需下载运行组件和模型。',
foundryAvailable: 'Windows 可用',
foundryUnavailable: '仅 Windows 可用',
foundryRuntimeReady: '运行组件已下载',
foundryRuntimeMissing: '运行组件未下载',
foundryRuntimeSourceLabel: '运行组件下载源',
foundryRuntimeSourceAuto: '自动(NuGet 优先)',
foundryRuntimeSourceNuget: 'NuGet 官方源',
foundryRuntimeSourceOrtNightly: 'Microsoft ORT-Nightly 源',
foundryRuntimeSourceDesc: '首次使用前需下载运行组件。',
foundrySelectedModel: '选择模型',
foundryActiveModel: '当前默认 alias',
foundryLoadedModel: '已加载模型',
foundryNotLoaded: '未加载',
foundryError: 'Foundry 状态',
foundrySetDefault: '设为默认 / 启用 Windows 本地 ASR',
foundryEnabling: '正在启用…',
foundryPrepare: '准备 / 下载 / 加载',
foundryPreparing: '正在准备…',
foundryReleasing: '正在释放…',
foundryRetryPrepare: '继续准备 / 重试',
foundryCancelPrepare: '取消准备',
foundryCancelRequested: '已请求取消',
foundryCancelling: '正在取消…',
foundryCancelBestEffort: '已请求取消,会在当前步骤完成后停止。可稍后重试。',
foundryPrepareRuntime: '准备运行时组件',
foundryPrepareModel: '下载模型',
foundryPrepareLoad: '加载模型',
foundryPrepareModelSkipped: '模型已下载,跳过下载阶段',
foundryPrepareDone: '已完成',
foundryPrepareWaiting: '等待中',
foundryApproxSizeMb: '约 {{mb}} MB',
foundryLanguageLabel: '识别语言',
foundryLanguageAuto: '自动',
foundryLanguageZh: '中文 zh',
foundryLanguageEn: '英文 en',
foundryLanguageDesc: '中文听写选中文,中英混用选自动。',
foundryModelSmall: 'Whisper Small(默认 / 平衡)',
foundryModelSmallDesc: '默认平衡选项,兼顾质量与资源占用。',
foundryModelMedium: 'Whisper Medium(更高质量)',
foundryModelMediumDesc: '更高准确率,适合性能更强、可接受更大下载和更慢推理的设备。',
foundryModelLarge: 'Whisper Large V3 Turbo(最高质量)',
foundryModelLargeDesc: '更高质量的大模型选项,适合高配设备和质量优先场景。',
foundryModelBase: 'Whisper Base(更快 / 更省资源)',
foundryModelBaseDesc: '更快、资源占用更低,适合日常轻量使用。',
foundryModelTiny: 'Whisper Tiny(最快 / 冒烟测试)',
foundryModelTinyDesc: '最快的检查选项,适合确认 Foundry 路径可用。',
sherpaTitle: 'Windows sherpa-onnx Local(实验性)',
sherpaDesc: 'Windows 使用 sherpa-onnx 在本机离线批量识别,无需 ASR API Key。',
sherpaRuntimeReady: '模型已加载',
sherpaRuntimeMissing: '模型未加载',
sherpaSetDefault: '设为默认 / 启用 sherpa-onnx',
sherpaPrepare: '检查本地文件 / 加载',
sherpaPreparing: '加载中…',
sherpaPrepareLocalFiles: '检查本地模型文件',
sherpaModelDir: '模型目录',
sherpaRevealDir: '打开模型目录',
sherpaError: 'sherpa-onnx 状态',
sherpaLanguageJa: '日语 ja',
sherpaLanguageKo: '韩语 ko',
sherpaLanguageYue: '粤语 yue',
sherpaModelSenseVoice: 'SenseVoice Small(默认 / 中文优先)',
sherpaModelSenseVoiceDesc: '默认实验模型,适合中文与中英混合听写。',
sherpaModelParaformer: 'Paraformer 中文',
sherpaModelParaformerDesc: '面向中文的实验模型。',
sherpaModelWhisper: 'Whisper Small 多语言',
sherpaModelWhisperDesc: '与 Whisper 系列行为一致的多语言实验兜底模型。',
sherpaModelQwen3: 'Qwen3-ASR 0.6B INT8',
sherpaModelQwen3Desc: '转换后的 sherpa-onnx Qwen3-ASR 模型,支持多语言识别与更强的长上下文能力。',
mirrorLabel: '下载镜像源',
mirrorDesc: '官方源在国外网络更稳;hf-mirror.com 是国内社区维护的镜像。',
mirrorHuggingface: 'HuggingFace 官方 (huggingface.co)',
mirrorHfMirror: '国内镜像 (hf-mirror.com)',
activeBadge: '当前使用',
downloadedBadge: '已下载',
notDownloadedBadge: '未下载',
download: '下载',
resume: '继续下载',
cancel: '取消',
delete: '删除',
setActive: '设为默认',
failed: '失败',
cancelled: '已取消',
files: '文件',
sizeLoading: '正在查询尺寸…',
sizeUnknown: '尺寸未知',
performanceWarning: '本地 ASR 适合离线或隐私敏感场景,首次使用需下载模型。',
test: '加载并测试',
testRunning: '测试中…',
testHeading: '内置音频测试',
testExpected: '原文',
testActual: '识别',
testStats: '音频时长 {{audio}}s · 加载 {{load}}s · 推理 {{transcribe}}s · 后端 {{backend}}',
testFailed: '测试失败',
engineStatusLabel: '内存中的引擎',
engineLoaded: '已加载:{{model}}',
engineUnloaded: '未加载(首次听写需先加载模型)',
loadNow: '立即加载',
releaseNow: '立即释放',
keepLoadedLabel: '保持加载多久',
keepLoadedDesc: '决定 Qwen3-ASR 用完后多久从内存释放,避免长期占用内存。',
keepImmediate: '说完话立即释放',
keep1min: '上次使用后 1 分钟',
keep5min: '上次使用后 5 分钟(默认)',
keep30min: '上次使用后 30 分钟',
keepForever: '不释放(始终保留)',
},
};