Files
openless/openless-all/app/src/i18n/zh-TW.ts
T
Chris233 5be28b1dbd feat(asr): 支持讯飞实时语音转写(RTASR)提供商(#842) (#894)
- 新增 asr/xfyun.rs RTASR 流式客户端:signa = Base64(HmacSHA1(MD5(appid+ts), apiKey))
  鉴权,1280B/40ms 分块发送,{"end": true} 收尾,seg_id 去重拼接,断连 partial 兜底,
  鉴权/限流/超时错误分类可读。
- 全链路接入:dictation 主流程、QA 面板、重新转录、取消、设置页凭据预检与
  "验证"探活;凭据 xfyun.app_id / xfyun.api_key 存系统凭据库,不落日志。
- 设置页新增「讯飞实时语音转写」选项(AppID + API Key),5 种语言 i18n。
- 文档:docs/xfyun-asr.md + README/README.zh/USAGE 同步。

已知限制:标准版 RTASR 无请求级热词参数(在讯飞控制台配置),语种默认中文普通话。
2026-08-03 21:37:10 +08:00

1390 lines
68 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.
import type { zhCN } from './zh-CN';
// 繁體中文資源 — 與產品當前文案保持一致。
// 新增 key 時,必須同步更新 en.ts,避免切換到 English 後出現中文殘留。
export const zhTW: typeof 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}} 秒',
durationMillis: '{{value}} 毫秒',
durationMinutes: '{{value}} 分鐘',
},
capsule: {
thinking: 'thinking',
using: 'using',
cancelled: '已取消',
error: '出錯了',
inserted: '已插入 {{count}}',
translating: '正在翻譯',
selectionPolish: {
polishing: '正在潤色...',
replaced: '已替換',
noSelection: '未選中內容',
failed: '潤色失敗,請重試',
},
},
selectionPolishPreview: {
title: '選區潤色預覽',
subtitle: '可直接編輯;點擊確認後才會替換原選區。',
cancel: '取消',
resultLabel: '潤色結果',
sourcePrefix: '原文:',
applyError: '未能應用:',
confirmReplace: '確認並替換',
},
qa: {
title: '劃詞追問',
headerHint: '隨時提問',
thinking: '思考中…',
error: '出錯了,請稍後再試。',
errorRetry: '重試',
errorRetryHint: '請再試一次。',
pinTooltip: '固定(不自動關閉)',
unpinTooltip: '取消固定',
closeTooltip: '關閉',
micLabel: '語音提問',
micStop: '結束錄音',
selectionPreview: '基於選中文本:',
linuxSelectionToolsMissing: '無法讀取 Linux 選區。請安裝 wl-paste、xclip 或 xsel 後重試。',
emptyTitle: '有什麼可以幫你?',
emptyDesc: '選中任意文字後開始追問,或直接在下方輸入問題。回答會顯示在這裏,可以連續多輪。',
recordingHint: '錄音中…再按一次 {{recordHotkey}} 結束並提問',
mobileRecordLabel: '錄音按鈕',
mobileRecordStart: '開始錄音',
mobileRecordStop: '結束並提交',
composerPlaceholder: '輸入問題,Enter 發送',
composerSend: '發送',
statusIdle: '按 {{recordHotkey}} 提問',
statusRecording: '錄音中',
statusThinking: '思考中',
statusError: '出錯了',
jumpToLatest: '跳到最新',
},
lessComputer: {
title: 'Less Computer',
subtitle: '想讓電腦做什麼?',
you: '你',
working: '正在操控電腦…',
tool: '呼叫了 {{name}}',
compaction: '上下文已壓縮',
done: '完成',
cost: '${{cost}}',
error: '失敗,請重試。',
closeTooltip: '關閉',
jumpToLatest: '跳到最新',
inputPlaceholder: '輸入指令,Enter 傳送',
send: '傳送',
approvalTitle: '執行被攔截的指令?',
approvalRerunWarning: '注意:批准後將在已被修改的工作區上重新執行,可能對不可重入操作產生副作用',
approve: '允許',
deny: '拒絕',
approved: '已允許',
denied: '已拒絕',
},
nav: {
overview: '概覽',
history: '歷史',
vocab: '詞彙表',
style: '風格',
marketplace: '風格市場',
translation: '翻譯',
selectionAsk: '劃詞追問',
polishMode: '潤色模式',
group: {
style: '風格',
tools: '工具',
},
localAsr: '模型設置',
more: '更多',
},
marketplace: {
kicker: 'MARKETPLACE',
title: '風格包市場',
desc: '瀏覽、安裝和分享社區風格包。',
searchPlaceholder: '搜尋名稱 / 描述 / 標籤…',
sortPopular: '按熱度',
sortNew: '最新',
uploadBtn: '上傳',
uploadDisabledHint: '請先在 設定 → 風格市場 配置 GitHub 使用者名稱',
refreshBtn: '重新整理',
empty: '還沒有風格包',
emptyHint: '換個搜尋詞,或自己上傳一個分享給社群',
loadFailed: '載入失敗:{{err}}',
noDescription: '(暫無描述)',
installBtn: '安裝到本機',
installingBtn: '安裝中…',
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: '所有數據都只保存在本機。',
navHint: {
overview: '狀態總覽:用量統計、提供商與權限健康檢查',
history: '聽寫歷史:搜尋、回放與複製過往轉寫',
vocab: '詞彙表:自訂熱詞,提升專有名詞辨識率',
style: '潤色風格:管理輸出風格與自訂提示詞',
translation: '翻譯:按住 Shift 說話,譯成目標語言插入',
selectionAsk: '劃詞追問:選取文字後語音提問',
settings: '偏好設定:快捷鍵、提供商、隱私與更新',
},
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: '打開系統設置',
actionRestart: '重置授權並重新啟動 OpenLess',
actionGrant: '授權',
actionRequestMic: '彈出授權',
accessibilityHint: '授權後必須**完全退出 OpenLess** 再重新打開(macOS TCC 規則)。',
footerHint: '授權全部完成後此引導自動關閉。如果一直不消失,從菜單欄 OpenLess → 退出,重新打開 App。',
continueToSettings: '僅進入設定(語音與全域快速鍵暫不可用)',
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 天',
activityTitle: '年度活動',
activityCount: '{{count}} 次聽寫',
weekUnit: '條數 / 天',
recentTitle: '最近識別',
recentAll: '全部記錄 →',
recentEmpty: '還沒有記錄。按 {{trigger}} 開始第一次錄音。',
recentLoadFailed: '無法讀取最近識別,請重試。',
historyRetry: '重試',
weekDays: ['日', '一', '二', '三', '四', '五', '六'],
inAppDictation: {
title: '應用內錄音',
start: '開始錄音',
stop: '停止錄音',
idle: '點擊開始錄音',
recording: '錄音中…',
processing: '處理中…',
},
androidMicBanner: {
title: '需要麥克風權限',
desc: '授權麥克風後可使用應用內錄音與語音輸入。',
grant: '彈出授權',
openSettings: '打開系統設置',
},
},
history: {
exportError: '匯出錄音失敗,請重試。',
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: '載入中…',
audioDecodeFailed: '音訊解碼失敗:{{err}}',
exportRecording: '匯出錄音',
exportFailed: '匯出失敗:{{err}}',
retranscribe: '重新轉錄',
retranscribing: '轉錄中…',
retranscribeFailed: '重新轉錄失敗:{{err}}',
rawLabel: '原文',
rawEmpty: '(空)',
selectHint: '左側選一條查看詳情。',
recorded: '錄音 {{duration}}',
stepAsr: '辨識',
stepAsrHint: '放開按鍵後等待辨識結果的耗時。串流辨識邊錄邊轉,此值通常遠小於錄音時長。',
stepPolish: '潤飾',
stepInsert: '插入',
chars: '{{count}} 字',
vocabHits: '{{count}} 個熱詞',
inserted: '已插入',
pasteSent: '已嘗試粘貼',
copiedFallback: '已複製(需 {{shortcut}})',
insertFailed: '插入失敗',
confirmClear: '確定清空全部 {{count}} 條記錄?此操作不可恢復。',
backToList: '返回列表',
},
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: {
selectionListTitle: '選區書面潤色風格',
selectionListDesc: '用於無需 ASR 的已選文字:單純語法、清晰度和格式潤色。可為它單獨選擇風格與 Prompt。',
dictationTab: '錄音 / ASR 風格',
selectionTab: '選區潤色',
current: '目前',
useForSelection: '用於選區',
writtenPolish: '書面潤色',
selectionPromptTitle: '選區潤色 Prompt(無 ASR)',
selectionPromptHint: '用於使用者主動選中的書面文字;不經過 ASR,不把內容當成轉寫,也不回答其中的問題。',
selectionPromptEditorDesc: '目前編輯選區潤色 Prompt;輸入對象是使用者主動選中的書面文字,不經過 ASR。',
dictationPromptEditorDesc: '目前編輯錄音 / ASR 風格 Prompt;輸入對象是語音辨識後的轉寫文本。',
dictationPromptTitle: '錄音 / ASR Prompt',
dictationPromptHint: '用於錄音轉寫後的 ASR 文本;這裡可以寫口語整理、ASR 錯字糾正和專有名詞還原規則。',
selectionPromptFallback: '尚未配置書面潤色 Prompt;將使用安全預設規則。',
selectionActivated: '已將「{{name}}」用於選區潤色',
selectionActivateFailed: '選區潤色風格切換失敗:{{err}}',
selectionChars: '{{count}} 字元',
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: {
selectionPolish: {
title: '選區潤色',
hotkey: '觸發快捷鍵',
hotkeyDesc: '錄製後立即生效;與錄音、追問等全域快捷鍵衝突時會被拒絕。',
delivery: '結果處理方式',
hint: '選取任意文字後觸發。它不依賴麥克風或 ASR,使用目前風格包與獨立的選區 Prompt。',
directReplace: '直接覆蓋',
directReplaceHint: '模型完成後安全替換原選區。',
previewConfirm: '預覽確認',
previewConfirmHint: '在可編輯彈窗中核對結果,再確認覆蓋原選區。',
},
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: '按住一個鍵說話,由所選 Agent 幫你操作電腦。僅 macOS。',
enable: '啟用 Less Computer',
comingSoonNote: '設定即時儲存;熱鍵觸發與執行鏈路隨後續版本生效。',
hotkeyHint: '開啟後,按住快捷鍵說話,放開後由所選 Agent 處理並把結果顯示在膠囊裡。',
voiceHotkey: '按住說話鍵',
voiceHotkeyDesc: '按住說話、放開執行。支援 Ctrl/Option/Fn 等單鍵。功能說明參見「進階」設定頁。',
provider: 'Agent 後端',
opencodeReady: '已偵測到 OpenCode v{{version}}。',
opencodeMissing: '未偵測到 opencode 指令。請先安裝(npm i -g opencode-ai)並用 opencode auth login 登入後再使用。',
panelHotkey: '面板鍵(語音 Agent)',
panelHotkeyDesc: '錄音 → ASR → Claude → 結果串流進面板。預設 Cmd/Ctrl+Shift+Enter。',
quickHotkey: '快取用鍵',
quickHotkeyDesc: '取目前選取文字 → Claude → 結果回插游標處。不開面板、更快。',
model: '模型',
modelPlaceholder: '預設 sonnet',
modelDefault: '預設(自動 sonnet)',
modelHint: 'Haiku 最快 · Sonnet 均衡 · Opus 最強',
opencodeModelDefault: '使用 OpenCode 預設模型',
opencodeModelHint: '自動拉取 OpenCode 目前帳號可用的 provider/model;選取後立即儲存。',
opencodeModelsRefresh: '重新拉取模型',
opencodeModelsRefreshing: '正在拉取 OpenCode 模型…',
opencodeModelsLoaded: '已拉取 {{count}} 個模型。',
opencodeModelsEmpty: '沒有回傳可用模型,請先完成 OpenCode 登入或設定模型提供商。',
opencodeModelsError: '拉取模型失敗:{{message}}',
exe: '可執行檔路徑',
openPanel: '文字測試',
openPanelHint: '直接開啟 Less Computer 浮窗,以文字驗證目前的 Agent 與模型設定。',
openPanelAction: '開啟 Less Computer',
},
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: '按住說話',
modeAuto: '自動',
migrationNoticeTitle: '默認已改爲切換式說話',
migrationNoticeDesc: '如果你之前改過快捷鍵觸發方式,請在這裏手動確認一次。本次更新調整了快捷鍵方式的默認值與讀取邏輯;如果你更習慣按住說話,可以重新切回“按住說話”。',
comboRecordLabel: '錄製快捷鍵',
comboRecordDesc: '點擊後按下你想要的快捷鍵組合(如 ⌘⇧D),支援 Toggle 與 Hold 模式。',
comboRecordBtn: '錄製快捷鍵',
comboResetBtn: '重置',
comboMenuToggle: '更多操作',
comboDisableHint: '核心快捷鍵不可停用,錄音必須綁定一個快捷鍵',
comboRecordHint: '請按下快捷鍵組合…',
comboNeedKey: '請設定組合鍵(如 ⌘⇧J),不支援單獨的修飾鍵',
comboRecorded: '已錄製',
comboClear: '清除',
comboConflict: '此快捷鍵組合不可用',
microphoneLabel: '首選麥克風',
microphoneDesc: '選擇優先使用的輸入設備。設備暫時不可用時會使用系統默認麥克風,重新連接後自動切回首選設備。',
microphoneDefault: '系統默認麥克風',
microphoneDefaultDesc: '使用系統默認輸入設備',
microphoneSystemDefault: '系統默認',
microphoneUnavailable: '不可用',
microphoneLoadError: '麥克風列表讀取失敗:{{message}}',
microphoneDialogTitle: '麥克風',
microphoneDialogDesc: '選擇能捕捉到您聲音的麥克風。如果指示條沒有移動,請嘗試其他麥克風。',
microphoneMonitorError: '輸入電平監聽失敗:{{message}}',
capsuleLabel: '錄音膠囊',
capsuleDesc: '錄音 / 轉寫時在屏幕底部顯示半透明膠囊。',
capsuleStyleLabel: '膠囊樣式',
capsuleStyleSiri: '流光 Siri 風格',
capsuleStyleClassic: 'Openless 預設風格',
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)',
allowNonTsfFallbackLabel: '允許非 TSF 兜底',
allowNonTsfFallbackDesc: 'Windows:TSF 失敗時使用分批 Unicode SendInput;如果仍失敗,再複製到剪貼簿。',
windowsInsertionModeLabel: 'Windows 插入方式',
windowsInsertionModeDesc: '聽寫結果如何插入到目前游標位置。剪貼簿貼上模式使用上方「模擬粘貼快捷鍵」,可完整保留換行。',
windowsInsertionModeTsf: 'TSF 輸入法(預設)',
windowsInsertionModeSendInput: 'SendInput 逐字模擬',
windowsInsertionModePaste: '剪貼簿貼上(Ctrl+V 等)',
windowsSendInputNewlineModeLabel: 'SendInput 換行模擬',
windowsSendInputNewlineModeDesc: 'SendInput 模式下如何把換行符模擬成按鍵。聊天框通常選 Shift+Enter;記事本 / VS Code 等選 Enter。',
windowsSendInputNewlineModeEnter: 'Enter(多數編輯器)',
windowsSendInputNewlineModeShiftEnter: 'Shift+Enter(聊天輸入框)',
windowsSendInputNewlineModeCrLf: 'CR+LF Unicode',
windowsShowOpenlessInKeyboardListLabel: '在鍵盤列表中顯示 OpenLess',
windowsShowOpenlessInKeyboardListDesc: '關閉後 Win+Space 切換輸入法時不會出現 OpenLess;SendInput 插入不受影響。重新開啟本項可恢復顯示。',
windowsShowOpenlessInKeyboardListError: '無法更新鍵盤列表:OpenLess TSF 輸入法未安裝或系統拒絕操作。',
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: '硅基流動',
atlascloud: 'Atlas Cloud',
openai: 'OpenAI',
gemini: 'Google Gemini',
codexOAuth: 'Codex OAuth',
mimo: '小米 MiMo',
cometapi: 'CometAPI',
openrouterFree: 'OpenRouter(免費模型)',
alibabaCoding: '阿里雲 Coding Plan',
codingPlanX: 'CodingPlanX',
minimax: 'MiniMax(M3)',
stepfun: 'StepFun(階躍星辰)',
custom: '自定義',
asrVolcengine: '火山引擎 bigasr',
asrBailian: '阿里雲百煉即時 ASR',
asrBailianQwen3: '阿里雲百煉 Qwen3 即時 ASR',
asrBailianFunAsrFlash: '阿里雲百煉 Fun-ASR-Flash(錄音檔)',
asrSiliconflow: '硅基流動 SenseVoice',
asrStepfun: '階躍星辰 StepAudio',
asrZhipu: '智譜 GLM-ASR',
asrGroq: 'Groq Whisper-large-v3',
asrWhisper: 'OpenAI Whisper(兼容)',
asrOpenrouter: 'OpenRouter Whisper',
asrXiaomiMimo: '小米 MiMo ASR',
asrIflytek: '訊飛即時語音轉寫',
asrElevenLabs: 'ElevenLabs Scribe',
asrSherpaOnnxLocal: '本地 sherpa-onnx(實驗性)',
asrFoundryLocalWhisper: '本地 Whisper(Foundry Local)',
asrLocalQwen3: '本地 Qwen3-ASR',
asrAppleSpeech: 'Apple 語音(macOS)',
},
elevenLabsUploadNotice: 'ElevenLabs 會將錄音上傳至已設定的端點進行批次轉寫。',
volcengineAppKeyLabel: 'APP ID',
volcengineAccessKeyLabel: 'Access Token',
volcengineApiKeyLabel: 'API Key',
volcengineResourceIdLabel: 'Resource ID',
volcengineAuthModeLabel: '鑑權模式',
volcengineAuthModeAppIdToken: '舊版應用(APP ID + Access Token)',
volcengineAuthModeApiKey: '方舟 API Key',
volcengineMappingNote: 'Secret Key 當前無需填寫。Resource ID 默認使用 volc.seedasr.sauc.duration。',
volcengineApiKeyNote: '使用火山方舟語音模型的 API Key 鑑權,無需 APP ID。Resource ID 預設使用 volc.seedasr.sauc.duration。',
xfyunAppIdLabel: 'AppID',
xfyunApiKeyLabel: 'API Key',
xfyunNote: '在訊飛開放平台「即時語音轉寫」服務頁取得 AppID 與 API Key。音訊為 16kHz/16bit/單聲道 PCM;標準版介面暫不支援熱詞參數(可在訊飛控制台設定個人化熱詞),語種預設中文普通話。',
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: '模型',
customModelLabel: '自訂模型…',
presetListLabel: '返回預設清單',
temperatureLabel: 'Temperature',
temperaturePlaceholder: '留空則不發送;範圍 0~2(含邊界),例如 0.3',
extraHeadersLabel: '額外 Headers',
extraHeadersPlaceholder: '{"custom-head":"..."}',
thinkingModeLabel: '思考',
thinkingModeOn: '開啟',
thinkingModeOff: '關閉',
thinkingModeHint: '關閉時按渠道級官方參數關閉或降低思考;開啟時按渠道預設啟用思考。不注入 prompt,也不做單模型適配。',
bailianVocabularyIdLabel: '熱詞 Vocabulary ID(可選)',
bailianVocabularyIdNote: '如已在百煉建立熱詞表,可填寫 vocab-...;留空則不下發熱詞。',
bailianModelRealtimeHint: '即時模型 · 邊說邊出字。',
bailianModelSyncFileHint: '同步錄音模型 · 說完後整段轉寫(單條 ≤ 5 分鐘)。',
bailianModelAsyncFileHint: '非同步檔案模型 · 錄音上傳後等待轉寫工作完成。',
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 格式不合法。',
bailianEndpointSchemeInvalid: '百煉即時 ASR 走 DashScope WebSocket 閘道,接口地址必須以 wss:// 開頭(預設 wss://dashscope.aliyuncs.com/api-ws/v1/inference/);https:// 的相容模式地址在此不可用。',
qwen3EndpointSchemeInvalid: 'Qwen3 即時 ASR 走 DashScope Realtime WebSocket 閘道,接口地址必須以 wss:// 開頭(預設 wss://dashscope.aliyuncs.com/api-ws/v1/realtime);https:// 地址在此不可用。',
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: 'OpenLess 需要麥克風可用,並依賴全局快捷鍵監聽狀態判斷 native hook 是否正常工作。',
micLabel: '麥克風',
micDesc: '用於捕獲你的語音輸入。',
accLabel: '輔助功能',
accDesc: '用於監聽全局快捷鍵並將識別結果寫入光標位置。',
hotkeyLabel: '全局快捷鍵',
hotkeyDescWithAdapter: '當前適配器:{{adapter}}。用於判斷快捷鍵監聽是否已經安裝。',
hotkeyDescPlain: '用於判斷快捷鍵監聽是否已經安裝。',
networkLabel: '網絡',
networkDesc: '雲端 ASR / LLM 調用所必需。本地模式可關閉。',
networkOk: '可用',
networkOffline: '不可用',
checking: '檢查中…',
granted: '已授權',
notApplicable: '無需授權',
denied: '未授權',
indeterminate: '未確定',
openSystem: '打開系統設置',
restart: '重置授權並重新啟動',
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: '省電', 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: '未安裝。OpenLess 正在使用剪貼板 / 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 纔會切換。',
},
theme: {
title: '外觀',
label: '主題',
activityHeatmapLabel: '概覽頁顯示年度活動熱力圖',
system: '跟隨系統',
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: '檢查',
checkStableUpdateBtn: '檢查正式版更新',
checkBetaUpdateBtn: '檢查 Beta 更新',
checkingUpdate: '檢查中…',
upToDate: '當前已是最新版本。',
updateError: '檢查或更新失敗,請稍後重試。',
retryBtn: '重試',
openReleases: '打開 Releases',
source: '源碼',
docs: '文檔',
feedback: '反饋',
qq: '社區 QQ 羣',
qqDesc: '使用 QQ 搜索羣號加入,或掃碼進羣。',
copyQq: '複製羣號',
privacy: '隱私',
privacyDesc: '錄音可能會傳送至你設定的雲端服務商進行轉寫。',
localFirst: '本地優先',
linksTitle: '文件連結',
betaChannelLabel: '加入 Beta 渠道',
betaChannelToggleLabel: '啟用 Beta 渠道',
betaChannelDesc: '開啟後,背景自動更新將跟隨 Beta 渠道;關閉則回到正式版。下方按鈕可隨時手動檢查 Beta 更新。',
autoUpdateSectionTitle: '自動更新',
autoUpdateCheckLabelAndroid: '自動檢查並下載更新',
autoUpdateCheckDescAndroid: '啟動後及每 60 分鐘自動檢查更新;發現新版本後自動下載並開啟系統安裝器。渠道跟隨上方 Beta 開關。',
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: '現在更新',
androidInstall: '下載並開啟安裝器',
androidInstalled: {
title: '系統安裝器已開啟',
desc: '請依系統提示完成安裝。安裝後重新開啟 OpenLess 即可使用 {{version}}。',
},
downloadingLabel: '下載中…',
installingLabel: '安裝中…',
later: '稍後手動重啓',
restartNow: '現在重啓',
progress: '{{progress}}% · {{downloaded}} / {{total}}',
progressUnknown: '已下載 {{downloaded}}',
installError: {
title: '更新失敗',
desc: '自動更新未能完成:{{error}}。你可以前往下載頁手動下載安裝最新版本。',
},
manualDownload: '手動下載',
},
},
},
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: '識別結果保存在本機;已設定的雲端服務商可能接收錄音以完成轉寫。',
localFirst: '本地優先',
},
},
windowChrome: {
minimize: '最小化',
maximize: '最大化',
close: '關閉',
},
hotkey: {
triggers: {
rightOption: '右 Option',
leftOption: '左 Option',
rightControl: '右 Control',
leftControl: '左 Control',
rightCommand: '右 Command',
leftCommand: '左 Command',
leftShift: '左 Shift',
rightShift: '右 Shift',
fn: 'Fn (地球鍵)',
rightAlt: '右 Alt',
mediaPlayPause: '⏯ 媒體播放/暫停',
custom: '自訂組合…',
},
fallback: '全局快捷鍵',
modeHoldSuffix: '(按住說話)',
modeToggleSuffix: '(開始 / 停止)',
modeAutoSuffix: '(自動識別)',
usageHold: '按住 {{trigger}} 說話,鬆開結束。',
usageToggle: '按 {{trigger}} 開始錄音,再按一次結束。',
usageAuto: '短按 {{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 系列行為一致的多語言實驗兜底模型。',
sherpaModelWhisperLargeV3: 'Whisper Large V3(多語)',
sherpaModelWhisperLargeV3Desc: '開源多語通用中效果最好的 Whisper 檔,品質高、體積大,適合高品質轉寫。',
sherpaModelQwen3: 'Qwen3-ASR 0.6B INT8',
sherpaModelQwen3Desc: '轉換後的 sherpa-onnx Qwen3-ASR 模型,支援多語言識別與更強的長上下文能力。',
modelSelectTitle: '模型選擇',
modelSelectDesc: '從已下載的模型裡選一個作為目前辨識模型;更多模型在下方「下載與管理」取得。',
modelSelectPlaceholder: '選擇已下載的模型…',
modelSelectEmpty: '還沒有已下載的模型,先到「下載與管理」下載一個。',
groupDownload: '下載與管理',
groupOther: '其他',
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: '不釋放(始終保留)',
},
};