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>
1250 lines
57 KiB
TypeScript
1250 lines
57 KiB
TypeScript
// 简体中文资源 — 与产品当前文案保持一致。
|
||
// 添加新 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: '不释放(始终保留)',
|
||
},
|
||
};
|