- 新增 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 无请求级热词参数(在讯飞控制台配置),语种默认中文普通话。
1390 lines
68 KiB
TypeScript
1390 lines
68 KiB
TypeScript
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: '不釋放(始終保留)',
|
||
},
|
||
};
|