From befb2e527f47e8803e2e419faa5d70ab88dd7383 Mon Sep 17 00:00:00 2001 From: leonoxo Date: Sun, 13 Sep 2026 23:22:07 +0800 Subject: [PATCH] =?UTF-8?q?i18n:=20zh-TW=20full=20audit=20=E2=80=94=20?= =?UTF-8?q?=E5=85=A8=E9=9D=A2=E7=B9=81=E9=AB=94=E5=8C=96=E8=A1=93=E8=AA=9E?= =?UTF-8?q?=E3=80=81=E6=B6=88=E9=99=A4=E7=B0=A1=E9=AB=94=E6=AE=98=E7=95=99?= =?UTF-8?q?=EF=BC=88selection-polish/ASR=20=E7=AD=89=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E9=9B=B6=E6=AE=98=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openless-all/app/src-tauri/src/lib.rs | 4 +- openless-all/app/src/i18n/zh-TW.ts | 1158 +++++++++---------------- 2 files changed, 411 insertions(+), 751 deletions(-) diff --git a/openless-all/app/src-tauri/src/lib.rs b/openless-all/app/src-tauri/src/lib.rs index 6a843854..0c7ee957 100644 --- a/openless-all/app/src-tauri/src/lib.rs +++ b/openless-all/app/src-tauri/src/lib.rs @@ -2824,7 +2824,7 @@ fn ensure_selection_polish_preview_window( "selection-polish-preview", WebviewUrl::App("index.html?window=selection-polish-preview".into()), ) - .title("OpenLess 选区润色预览") + .title("OpenLess 選區潤色預覽") .inner_size(640.0, 440.0) .min_inner_size(480.0, 320.0) .resizable(true) @@ -2879,7 +2879,7 @@ fn ensure_selection_voice_intent_prompt_window( "selection-voice-intent", WebviewUrl::App("index.html?window=selection-voice-intent".into()), ) - .title("OpenLess 选区语音") + .title("OpenLess 選區語音") .inner_size(420.0, 280.0) .min_inner_size(360.0, 240.0) .resizable(true) diff --git a/openless-all/app/src/i18n/zh-TW.ts b/openless-all/app/src/i18n/zh-TW.ts index a3712e30..9516eb69 100644 --- a/openless-all/app/src/i18n/zh-TW.ts +++ b/openless-all/app/src/i18n/zh-TW.ts @@ -4,54 +4,19 @@ import type { zhCN } from './zh-CN'; // 新增 key 時,必須同步更新 en.ts,避免切換到 English 後出現中文殘留。 export const zhTW: typeof zhCN = { - cloudSync: { - title: '雲端同步', - description: '使用 GitHub 帳號,在裝置之間同步詞典、風格與個人偏好。', - signIn: '使用 GitHub 登入', - account: '同步帳號', - refresh: '重新整理狀態', - loading: '正在讀取雲端狀態…', - noBackup: '雲端尚無備份', - available: '雲端備份已就緒', - summary: '{{dictionary}} 個詞條 · {{corrections}} 條修正规則 · {{stylePacks}} 個風格', - updated: '更新於 {{time}}', - upload: '備份至雲端', - restore: '從雲端還原', - delete: '刪除雲端備份', - working: '正在同步…', - uploadSuccess: '已備份至雲端', - restoreSuccess: '已還原雲端設定', - deleteSuccess: '已刪除雲端備份', - failed: '同步失敗:{{error}}', - conflict: '雲端已有更新。請重新整理狀態後,再決定備份或還原。', - unavailable: '官方同步服務暫時無法使用,請稍後重試。', - signInRequired: '請先登入 GitHub。', - restoreTitle: '還原雲端備份?', - restoreDescription: - '雲端的詞典、修正规則、風格和同步偏好將覆蓋本機對應內容。API 金鑰、裝置目錄與權限維持本機設定。', - deleteTitle: '刪除雲端備份?', - deleteDescription: '僅刪除此 GitHub 帳號的雲端備份,本機資料會保留。', - confirmRestore: '還原並取代', - confirmDelete: '刪除備份', - scope: '同步詞典、修正规則、風格圖示與常用偏好。API 金鑰、登入憑據與裝置專屬設定保留在本機。', - }, - macDictationKey: { - Changed: '儲存期間快捷鍵已變更,請重試。', - label: 'Mac 聽寫鍵', - description: '用麥克風圖示鍵替換目前的聽寫快捷鍵。結束 OpenLess 後,此鍵交回 macOS。', - Permission: '請在 macOS「隱私權與安全性 → 輔助使用」中允許 OpenLess 後重試。', - Busy: '請先結束目前的聽寫,再變更快捷鍵。', - Unavailable: '無法啟用此快捷鍵,已儲存的綁定未變更。請重試或選擇其他鍵。', - }, app: { name: 'OpenLess', tagline: '自然說話,完美書寫', }, + coreGate: { + checking: '正在檢查 OpenLess Core 兼容性…', + incompatible: 'OpenLess Core 無法啟動或版本不相容。', + }, common: { - loading: '加載中…', + loading: '載入中…', retry: '重試', - settingsLoadFailed: '設置加載失敗', - refresh: '刷新', + settingsLoadFailed: '設定載入失敗', + refresh: '重新整理', clear: '清空', copy: '複製', delete: '刪除', @@ -60,12 +25,11 @@ export const zhTW: typeof zhCN = { close: '關閉', show: '顯示', hide: '隱藏', - saved: '已保存', - saving: '保存中', - experimental: '實驗性', + saved: '已儲存', + saving: '儲存中', copied: '已複製', operationFailed: '操作失敗', - add: '添加', + add: '新增', durationSeconds: '{{value}} 秒', durationMillis: '{{value}} 毫秒', durationMinutes: '{{value}} 分鐘', @@ -82,11 +46,26 @@ export const zhTW: typeof zhCN = { replaced: '已替換', noSelection: '未選中內容', failed: '潤色失敗,請重試', + previewOpen: '已開啟預覽,等待確認', + copiedPaste: '已複製結果,請手動貼上', + targetUnavailable: '目標輸入框不可用,請重新選擇', + selectionChanged: '選取範圍已變更,未取代', + busy: '選取範圍潤色進行中', + }, + styleSwitched: '已切換:{{name}}', + dictation: { + inserted: '已輸入', + pasteSent: '已送出貼上,請確認', + copiedPaste: '已複製,請手動貼上', + done: '處理完成', + }, + voice: { + preparing: '正在準備語音…', }, }, selectionPolishPreview: { title: '選區潤色預覽', - subtitle: '可直接編輯;點擊確認後才會替換原選區。', + subtitle: '可直接編輯;點選確認後才會替換原選區。', cancel: '取消', resultLabel: '潤色結果', sourcePrefix: '原文:', @@ -115,15 +94,15 @@ export const zhTW: typeof zhCN = { closeTooltip: '關閉', micLabel: '語音提問', micStop: '結束錄音', - selectionPreview: '基於選中文本:', + selectionPreview: '基於選中文字:', emptyTitle: '有什麼可以幫你?', - emptyDesc: '選中任意文字後開始追問,或直接在下方輸入問題。回答會顯示在這裏,可以連續多輪。', + emptyDesc: '選中任意文字後開始追問,或直接在下方輸入問題。回答會顯示在這裡,可以連續多輪。', recordingHint: '錄音中…再按一次 {{recordHotkey}} 結束並提問', mobileRecordLabel: '錄音按鈕', mobileRecordStart: '開始錄音', mobileRecordStop: '結束並提交', - composerPlaceholder: '輸入問題,Enter 發送', - composerSend: '發送', + composerPlaceholder: '輸入問題,Enter 傳送', + composerSend: '傳送', statusIdle: '按 {{recordHotkey}} 提問', statusRecording: '錄音中', statusThinking: '思考中', @@ -149,8 +128,7 @@ export const zhTW: typeof zhCN = { inputPlaceholder: '輸入指令,Enter 傳送', send: '傳送', approvalTitle: '執行被攔截的指令?', - approvalRerunWarning: - '注意:批准後將在已被修改的工作區上重新執行,可能對不可重入操作產生副作用', + approvalRerunWarning: '注意:批准後將在已被修改的工作區上重新執行,可能對不可重入操作產生副作用', approve: '允許', deny: '拒絕', approved: '已允許', @@ -159,24 +137,23 @@ export const zhTW: typeof zhCN = { nav: { overview: '概覽', history: '歷史', - vocab: '詞典', + vocab: '詞彙表', style: '風格', marketplace: '風格市場', translation: '翻譯', selectionAsk: '劃詞追問', - corrections: '糾正規則', polishMode: '潤色模式', group: { style: '風格', tools: '工具', }, - localAsr: '模型設置', + localAsr: '模型設定', more: '更多', }, marketplace: { - kicker: '風格市場', + kicker: 'MARKETPLACE', title: '風格包市場', - desc: '瀏覽、安裝和分享社區風格包。', + desc: '瀏覽、安裝和分享社群風格包。', searchPlaceholder: '搜尋名稱 / 描述 / 標籤…', sortPopular: '按熱度', sortNew: '最新', @@ -197,7 +174,7 @@ export const zhTW: typeof zhCN = { downloaded: '已下載「{{name}}」ZIP', uploaded: '上傳成功,等待審核', uploadTitle: '選擇要上傳的風格包', - uploadHint: '以 {{login}} 身份上傳。包內容會發送到雲端審核佇列。', + uploadHint: '以 {{login}} 身份上傳。包內容會傳送到雲端審核佇列。', uploadNoLocal: '本機沒有可上傳的風格包', errors: { detail: '載入詳情失敗:{{err}}', @@ -219,12 +196,12 @@ export const zhTW: typeof zhCN = { }, myPacks: { buttonLabel: '我的發布', - buttonTitle: '查看 {{login}} 的發布', + buttonTitle: '檢視 {{login}} 的發布', buttonTitleEmpty: '先在 Settings → 風格市場 填寫發布身份', searchPlaceholder: '搜尋名稱、標籤', notLoggedIn: '請先在 Settings → 風格市場 填寫發布身份', emptyTitle: '你還沒有發布過風格包', - emptyHint: '在「風格」頁面編輯後點「發布到風格市場」,或點擊右上角上傳本機風格包。', + emptyHint: '在「風格」頁面編輯後點「發布到風格市場」,或點選右上角上傳本機風格包。', noMatch: '沒有符合的風格包', summary: '已發布 {{count}} 個風格包', summaryPending: '已發布 {{count}} 個風格包 · {{pending}} 個審核中', @@ -249,7 +226,7 @@ export const zhTW: typeof zhCN = { state: { pending: '審核中', approved: '已上架', - rejected: '未通過', + rejected: '未透過', withdrawn: '已下架', superseded: '已被新版替換', unknown: '未知', @@ -257,7 +234,7 @@ export const zhTW: typeof zhCN = { oauth: { title: '用 GitHub 登入', generating: '正在產生裝置驗證碼…', - browserHint: '在瀏覽器中開啟 {{uri}} 並輸入下方代碼:', + browserHint: '在瀏覽器中開啟 {{uri}} 並輸入下方程式碼:', copyBtn: '複製', copied: '已複製裝置碼', copyFailed: '複製失敗:{{err}}', @@ -268,8 +245,8 @@ export const zhTW: typeof zhCN = { retryBtn: '重試', closeBtn: '關閉', loginBtn: '登入', - loginTooltip: '點擊用 GitHub 登入', - reloginTooltip: '點擊重新登入 / 切換帳號(目前 @{{login}})', + loginTooltip: '點選用 GitHub 登入', + reloginTooltip: '點選重新登入 / 切換帳號(目前 @{{login}})', }, modal: { loggedIn: '目前登入身份 —— 在 Settings → 錄音 → 風格市場 修改', @@ -281,64 +258,62 @@ export const zhTW: typeof zhCN = { shortcutLabel: '錄音快捷鍵', shortcutHint: '開始 / 停止', betaTag: 'BETA', - betaNote: '本機儲存,可選雲端備份', + betaNote: '所有資料都只儲存在本機。', navHint: { overview: '狀態總覽:用量統計、提供商與權限健康檢查', history: '聽寫歷史:搜尋、回放與複製過往轉寫', - vocab: '詞典:自訂熱詞,提升專有名詞辨識率', + vocab: '詞彙表:自訂熱詞,提升專有名詞辨識率', style: '潤色風格:管理輸出風格與自訂提示詞', translation: '翻譯:按住 Shift 說話,譯成目標語言插入', selectionAsk: '劃詞追問:選取文字後語音提問', settings: '偏好設定:快捷鍵、提供商、隱私與更新', }, footer: { - account: '賬戶', + account: '帳號', feedback: '反饋', - settings: '設置', + settings: '設定', help: '幫助', version: '版本 {{version}}', helpPopover: { tagline: '本地驅動的語音輸入層', - releaseNotes: '查看發佈日誌 ↗', + releaseNotes: '檢視釋出日誌 ↗', docs: '幫助中心 ↗', }, }, providerPrompt: { - title: '設置語音提供商', + title: '設定語音提供商', body: '還沒有配置 ASR 或 LLM 提供商,語音輸入和潤色暫時無法正常工作。', later: '稍後', - openSettings: '去設置', + openSettings: '去設定', }, hotkeyModePrompt: { title: '檢查錄音方式', body: '預設已改為切換式。如果之前改過觸發方式,請到錄音設定確認一次。', later: '稍後提醒', - openSettings: '去錄音設置', + openSettings: '去錄音設定', }, }, onboarding: { welcome: '歡迎使用 OpenLess', intro: '本地說出,本地落字。開始前需要兩個系統權限。', accessibilityTitle: '輔助功能', - hotkeyTitle: '全局快捷鍵', - accessibilityDesc: '用於監聽全局快捷鍵(默認 {{trigger}})並把識別結果寫入光標位置。', - hotkeyDesc: '用於確認全局快捷鍵監聽可用。', + hotkeyTitle: '全域快捷鍵', + accessibilityDesc: '用於監聽全域快捷鍵(預設 {{trigger}})並把識別結果寫入游標位置。', + hotkeyDesc: '用於確認全域快捷鍵監聽可用。', micTitle: '麥克風', micDesc: '用於捕獲你的語音輸入。', actionNotApplicable: '無需授權', actionGranted: '已授權', - actionOpenSystem: '打開系統設置', + actionOpenSystem: '開啟系統設定', actionRestart: '重置授權並重新啟動 OpenLess', actionGrant: '授權', actionRequestMic: '彈出授權', - micNoDeviceHint: '未偵測到麥克風,請連接並啟用麥克風後重試。', - accessibilityHint: '授權後必須**完全退出 OpenLess** 再重新打開(macOS TCC 規則)。', - footerHint: - '授權全部完成後此引導自動關閉。如果一直不消失,從菜單欄 OpenLess → 退出,重新打開 App。', + micNoDeviceHint: '未偵測到麥克風,請連線並啟用麥克風後重試。', + accessibilityHint: '授權後必須**完全退出 OpenLess** 再重新開啟(macOS TCC 規則)。', + footerHint: '授權全部完成後此引導自動關閉。如果一直不消失,從選單欄 OpenLess → 退出,重新開啟 App。', continueToSettings: '僅進入設定(語音與全域快速鍵暫不可用)', androidContinue: '先進入應用', - androidFooterHint: - '聽寫需要麥克風權限。可點擊上方「彈出授權」,或先進入應用後在概覽頁繼續授權。', + androidFooterHint: '聽寫需要麥克風權限。可點選上方「彈出授權」,或先進入應用後在概覽頁繼續授權。', androidTitle: '配置 OpenLess', androidIntro: '按步驟完成移動端權限和服務配置。', androidStepCounter: '第 {{current}} / {{total}} 項', @@ -347,70 +322,30 @@ export const zhTW: typeof zhCN = { androidFinish: '完成並進入', androidSteps: { microphoneTitle: '麥克風權限', - microphoneDesc: '調用 Android 系統授權卡片,允許 OpenLess 錄製語音。', + microphoneDesc: '呼叫 Android 系統授權卡片,允許 OpenLess 錄製語音。', accessibilityTitle: '無障礙服務', accessibilityDesc: '用於把識別結果貼回當前輸入框,並輔助檢測輸入環境。', overlayPermissionTitle: '懸浮窗權限', overlayPermissionDesc: '允許 OpenLess 在其他應用上顯示錄音控制按鈕。', overlayConfigTitle: '懸浮窗配置', - overlayConfigDesc: '設置懸浮窗顯示時機、觸發方式、滑動動作和按鈕大小。', + overlayConfigDesc: '設定懸浮窗顯示時機、觸發方式、滑動動作和按鈕大小。', asrTitle: 'ASR 雲服務', - asrDesc: '配置語音轉文字服務的供應商、密鑰、接口地址和模型。', + asrDesc: '配置語音轉文字服務的供應商、金鑰、介面地址和模型。', llmTitle: 'LLM 服務', - llmDesc: '配置文本潤色、翻譯和問答使用的語言模型服務。', + llmDesc: '配置文字潤色、翻譯和問答使用的語言模型服務。', }, }, overview: { - refresh: '重新整理狀態', - servicesTitle: '目前的語音服務', - statsTitle: '使用紀錄', - omniKind: '多模態語音', - omniName: '目前的 Omni 模型', - statusLoading: '正在讀取服務設定…', - configureProvider: '前往設定', - manageProvider: '管理服務', - recentEmptyHint: '還沒有聽寫紀錄。依照上方引導試一次,結果就會顯示在這裡。', - providerHelp: { - asr: '將語音轉成文字。', - llm: '依照你的風格整理和潤飾文字。', - omni: '由一個模型完成語音辨識和文字處理。', - }, - actions: { - refresh: '重新讀取', - services: 'AI 服務與模型', - general: '錄音與輸入', - shortcuts: '快捷鍵', - privacy: '權限與資料', - }, - guide: { - nextStep: '下一步', - loadingTitle: '正在讀取你的設定', - loadingDesc: '請稍候,馬上顯示目前的服務和下一步操作。', - unavailableTitle: '暫時無法讀取服務狀態', - unavailableDesc: '重新讀取,或前往 AI 服務檢查設定。', - servicesTitle: '先設定語音服務', - servicesDesc: - '建議從這裡開始:選擇語音辨識和文字處理服務;使用 Omni 時,只需設定目前的多模態模型。', - permissionsTitle: '先檢查快捷鍵狀態', - permissionsDesc: '目前無法使用快捷鍵介面。請開啟權限與資料,查看狀態和可用的處理方式。', - shortcutsTitle: '設定一個錄音快捷鍵', - shortcutsDesc: '選擇順手的快捷鍵,之後就能在輸入時開始聽寫。', - recordingTitle: '確認你的錄音方式', - recordingDesc: '服務設定已儲存。開啟錄音設定,選擇麥克風和適合你的錄音方式。', - tryDictationTitle: '試一次聽寫', - tryDictationDesc: '將游標放到要輸入的位置。{{shortcut}}', - permissionsHint: '錄音或快捷鍵沒有反應?在「權限與資料」中查看權限、麥克風和快捷鍵狀態。', - }, - kicker: '概覽', + kicker: 'DASHBOARD', title: '今日概覽', desc: '今日口述統計與系統狀態。', pressPrefix: '按', pressSuffix: '開始錄音', - asrKind: '語音辨識', - llmKind: '文字處理', + asrKind: 'ASR 語音', + llmKind: 'LLM 模型', asrName: '火山引擎', asrSubname: 'bigmodel', - llmName: 'OpenAI 兼容', + llmName: 'OpenAI 相容', llmConfigured: '已配置 active LLM', llmNotConfigured: '未配置', statusConfigured: '已配置', @@ -422,13 +357,13 @@ export const zhTW: typeof zhCN = { metricDuration: '今日總時長', metricAvg: '平均段落', metricAvgTrend: '今日均值', - metricNoData: '暫無數據', + metricNoData: '暫無資料', historyLoadError: '歷史讀取失敗', metricTotal: '累計記錄', metricTotalTrend: '本機存檔 (上限 200)', activityTitle: '年度活動', activityCount: '{{count}} 次聽寫', - activityLoadError: '活動數據讀取失敗', + activityLoadError: '活動資料讀取失敗', period: { ariaLabel: '統計週期', last7Days: '近 7 天', @@ -453,7 +388,7 @@ export const zhTW: typeof zhCN = { title: '應用內錄音', start: '開始錄音', stop: '停止錄音', - idle: '點擊開始錄音', + idle: '點選開始錄音', recording: '錄音中…', processing: '處理中…', }, @@ -461,20 +396,20 @@ export const zhTW: typeof zhCN = { title: '需要麥克風權限', desc: '授權麥克風後可使用應用內錄音與語音輸入。', grant: '彈出授權', - openSettings: '打開系統設置', + openSettings: '開啟系統設定', }, }, history: { exportError: '匯出錄音失敗,請重試。', - kicker: '歷史記錄', + kicker: 'HISTORY', title: '歷史記錄', - desc: '本機保存的識別記錄。', + desc: '本機儲存的識別記錄。', filterAll: '全部', summary: '共 {{total}} 條 · 顯示 {{shown}}', searchPlaceholder: '搜尋轉寫內容…({{shortcut}})', searchNoMatch: '沒有符合「{{query}}」的記錄。', empty: '還沒有歷史記錄。按 {{trigger}} 錄一段試試。', - loadFailed: '加載歷史失敗:{{err}}', + loadFailed: '載入歷史失敗:{{err}}', retry: '重試', clearFailed: '清空失敗:{{err}}', deleteFailed: '刪除失敗:{{err}}', @@ -489,7 +424,7 @@ export const zhTW: typeof zhCN = { retranscribeFailed: '重新轉錄失敗:{{err}}', rawLabel: '原文', rawEmpty: '(空)', - selectHint: '左側選一條查看詳情。', + selectHint: '左側選一條檢視詳情。', recorded: '錄音 {{duration}}', stepAsr: '辨識', multimodalPipeline: '多模態', @@ -499,14 +434,14 @@ export const zhTW: typeof zhCN = { chars: '{{count}} 字', vocabHits: '{{count}} 個熱詞', inserted: '已插入', - pasteSent: '已嘗試粘貼', + pasteSent: '已嘗試貼上', copiedFallback: '已複製(需 {{shortcut}})', insertFailed: '插入失敗', - confirmClear: '確定清空全部 {{count}} 條記錄?此操作不可恢復。', + confirmClear: '確定清空全部 {{count}} 條記錄?此操作不可還原。', backToList: '返回列表', repolish: { title: '重新潤色', - hint: '基於上面的原文再跑一次潤色。結果只在本次查看時顯示,不寫回這條記錄。原風格包已刪除或舊記錄時,重試將使用當前風格。', + hint: '基於上面的原文再跑一次潤色。結果只在本次檢視時顯示,不寫回這條記錄。原風格包已刪除或舊記錄時,重試將使用當前風格。', retry: '用原風格重試', retrying: '重試中…', apply: '套用', @@ -515,8 +450,7 @@ export const zhTW: typeof zhCN = { noPacks: '沒有可用的風格包。', packsLoadFailed: '讀取風格包失敗:{{err}}', failed: '重新潤色失敗:{{err}}', - timeout: - '當前 LLM 提供商 30 秒內沒有返回結果。換個更快的提供商,或稍後重試 —— 免費模型池經常排隊。', + timeout: '當前 LLM 提供商 30 秒內沒有返回結果。換個更快的提供商,或稍後重試 —— 免費模型池經常排隊。', resultTitle: '{{name}} 的結果', retryResultTitle: '重試結果', empty: '(模型返回了空結果)', @@ -535,37 +469,17 @@ export const zhTW: typeof zhCN = { dismiss: '關閉', }, vocab: { - selectAllVisible: '選取目前結果', - selectedCount: '已選取 {{count}} 個詞', - selectWord: '選取「{{phrase}}」', - deleteSelected: '刪除已選({{count}})', - batchDeleteFailed: '{{count}} 個詞條刪除失敗,已保留選取,可重試。', - - kicker: '詞典', - title: '詞典', - desc: '添加生詞或專業術語,提高識別準確率。', + kicker: 'VOCABULARY', + title: '詞彙表', + desc: '新增生詞或專業術語,提高識別準確率。', sectionTitle: '詞條', - placeholder: '輸入詞語,按 Enter 或點添加…', - tip: '支持中英混合 · 數字開頭按字面識別 · 命中次數自動計數', - loadFailed: '加載失敗:{{err}}', + placeholder: '輸入詞語,按 Enter 或點新增…', + tip: '支援中英混合 · 數字開頭按字面識別 · 命中次數自動計數', + loadFailed: '載入失敗:{{err}}', empty: '還沒有詞條。在上面輸入一個生詞或專業術語,讓模型在聽寫時優先匹配。', - tipDisabled: '點擊禁用此詞條', - tipEnabled: '點擊啓用此詞條', + tipDisabled: '點選禁用此詞條', + tipEnabled: '點選啟用此詞條', removeAria: '刪除', - edit: '編輯', - editTitle: '編輯詞彙', - editSave: '儲存', - editEmpty: '詞條不能為空。', - filter: { all: '所有', auto: '自動新增', manual: '手動新增' }, - searchPlaceholder: '搜尋', - searchEmpty: '沒有符合的詞條。', - newWord: '新詞', - newWordTitle: '新增新詞', - newWordDesc: '直接輸入新詞,或從預設範本批次匯入。', - newWordInputPlaceholder: '輸入詞語,按 Enter 新增…', - newWordTemplates: '預設範本', - newWordTemplateCount: '{{count}} 詞', - newWordAddSelected: '新增所選', learnedSection: '自動收集({{count}})', removeAllLearned: '全部刪除', corrections: { @@ -575,8 +489,8 @@ export const zhTW: typeof zhCN = { replacementPlaceholder: '目標寫法,如 {num}例', empty: '還沒有糾正規則。', invalid: '僅支援字面替換,或一個 {num} 通配數字的規則,例如 {num}粒 → {num}例。', - tipDisabled: '點擊停用此規則', - tipEnabled: '點擊啟用此規則', + tipDisabled: '點選停用此規則', + tipEnabled: '點選啟用此規則', removeAria: '刪除糾正規則', learnedBadge: '自動', learnedTip: '從你的手動修改中自動收集。可以隨時刪掉。', @@ -588,10 +502,10 @@ export const zhTW: typeof zhCN = { }, presets: { title: '場景預設', - tip: '可多選批量啟用,支援編輯和新建。', + tip: '可多選批次啟用,支援編輯和新建。', create: '新建預設', - apply: '啓用所選', - save: '保存預設', + apply: '啟用所選', + save: '儲存預設', edit: '編輯 {{name}}', newPreset: '新預設', namePlaceholder: '預設名稱', @@ -599,84 +513,44 @@ export const zhTW: typeof zhCN = { }, }, style: { - kicker: '風格', + kicker: 'STYLE', title: '輸出風格', desc: '選擇錄音的預設輸出風格。', - masterToggle: '整體啓用', - currentDefault: '當前默認', - ariaSetDefault: '設爲默認', - saveFailed: '保存失敗:{{error}}', + masterToggle: '整體啟用', + currentDefault: '當前預設', + ariaSetDefault: '設為預設', + saveFailed: '儲存失敗:{{error}}', customPromptTitle: '自定義提示詞', customPromptPlaceholder: '可選,追加到這個風格的內建 system prompt 末尾。', - customPromptHint: - '留空則保持當前行為不變。保存後會在該風格的潤色和 repolish 中生效;按 Ctrl/Cmd+Enter 也可保存。', - customPromptSave: '保存提示詞', - customPromptDirty: '未保存', - systemPromptMovedHint: - '完整 System Prompt 已移到 設定 -> Providers 頁面統一編輯。這裡現在只負責風格啟停和預設風格。', + 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: '郵件場景自動識別問候 / 落款;不引入空泛客套。', - }, + raw: { name: '原文', desc: '只補標點和必要分句,不改寫不擴寫。', sample: '保留原始口語;嗯、那個等口癖會被去除,但不會重組語句。' }, + light: { name: '輕度潤色', desc: '去口癖、補標點,整理為可傳送的自然文字。', sample: '讓轉寫聽起來不像念稿——保留語氣和表達習慣,但行文流暢。' }, + structured: { name: '清晰結構', desc: '多個主題或步驟時,自動組織為分點列表。', sample: '1. 主題一\na. 要點\nb. 要點\n2. 主題二\na. 要點\nb. 要點' }, + formal: { name: '正式表達', desc: '工作溝通和郵件場景,更專業更完整。', sample: '郵件場景自動識別問候 / 落款;不引入空泛客套。' }, }, pack: { - builtinTags: { - minimalEdits: '最小改寫', - strongCorrection: '強糾錯', - communication: '溝通', - natural: '自然', - organized: '條理', - workplaceCommunication: '工作溝通', - aiCoding: 'AI 程式開發', - technicalStructure: '技術結構化', - }, - newName: '未命名風格', - newDescription: '簡短描述這個風格的使用情境。', - uploadIcon: '為「{{name}}」上傳 SVG 圖示', - resetIcon: '還原預設圖示', - iconSaved: '圖示已儲存', - iconInvalid: '請選擇不含外部資源的有效 SVG 圖示(最大 256 KB)。', - iconSaveFailed: '圖示儲存失敗,請再試一次。', - selectionListTitle: '選區書面潤色風格', - selectionListDesc: - '用於無需 ASR 的已選文字:單純語法、清晰度和格式潤色。可為它單獨選擇風格與 Prompt。', + selectionListDesc: '用於無需 ASR 的已選文字:單純語法、清晰度和格式潤色。可為它單獨選擇風格與 Prompt。', dictationTab: '錄音 / ASR 風格', selectionTab: '選區潤色', current: '目前', useForSelection: '用於選區', writtenPolish: '書面潤色', selectionPromptTitle: '選區潤色 Prompt(無 ASR)', - selectionPromptHint: - '用於使用者主動選中的書面文字;不經過 ASR,不把內容當成轉寫,也不回答其中的問題。', - selectionPromptEditorDesc: - '目前編輯選區潤色 Prompt;輸入對象是使用者主動選中的書面文字,不經過 ASR。', - dictationPromptEditorDesc: '目前編輯錄音 / ASR 風格 Prompt;輸入對象是語音辨識後的轉寫文本。', + selectionPromptHint: '用於使用者主動選中的書面文字;不經過 ASR,不把內容當成轉寫,也不回答其中的問題。', + selectionPromptEditorDesc: '目前編輯選區潤色 Prompt;輸入物件是使用者主動選中的書面文字,不經過 ASR。', + dictationPromptEditorDesc: '目前編輯錄音 / ASR 風格 Prompt;輸入物件是語音辨識後的轉寫文字。', dictationPromptTitle: '錄音 / ASR Prompt', - dictationPromptHint: - '用於錄音轉寫後的 ASR 文本;這裡可以寫口語整理、ASR 錯字糾正和專有名詞還原規則。', + dictationPromptHint: '用於錄音轉寫後的 ASR 文字;這裡可以寫口語整理、ASR 錯字糾正和專有名詞還原規則。', selectionPromptFallback: '尚未配置書面潤色 Prompt;將使用安全預設規則。', selectionActivated: '已將「{{name}}」用於選區潤色', selectionActivateFailed: '選區潤色風格切換失敗:{{err}}', selectionChars: '{{count}} 字元', - kicker: '風格包', + kicker: 'STYLE PACKS', title: '風格包', desc: '管理本機風格包。', marketplaceBtn: '風格市場', @@ -758,7 +632,7 @@ export const zhTW: typeof zhCN = { runtimeActive: '目前生效', runtimeInactive: '目前未生效', runtimePreviewFailed: '產生執行時預覽失敗:{{err}}', - runtimePreviewOmittedFrontApp: '預覽已省略前台 app 標籤。', + runtimePreviewOmittedFrontApp: '預覽已省略前臺 app 標籤。', examplesTitle: '效果範例', examplesDesc: '會隨風格包一起匯出。', addExample: '新增範例', @@ -773,16 +647,11 @@ export const zhTW: typeof zhCN = { }, }, translation: { - searchLanguages: '搜尋語言…', - noMatchingLanguages: '沒有符合的語言', - selectedLanguages: '已選擇 {{count}} 種語言', - - languageSupportHint: '語音服務支援的語種可能不同;翻譯目標不受介面語言限制。', - kicker: '翻譯', + kicker: 'TRANSLATION', title: '翻譯', desc: '錄音後自動翻譯為目標語言再插入。', - statusEnabled: '已啓用', - statusDisabled: '未啓用', + statusEnabled: '已啟用', + statusDisabled: '未啟用', working: { title: '工作語言', desc: '勾選日常使用的語言,影響潤色與翻譯效果。', @@ -790,28 +659,27 @@ export const zhTW: typeof zhCN = { target: { title: '翻譯目標語言', desc: '錄音時按 Shift 觸發翻譯。選「不啟用」則 Shift 無效。', - disabled: '不啓用(Shift 按下不觸發翻譯)', - sameAsWorking: - '目標語言與你唯一的工作語言相同,翻譯不會生效:按 Shift 仍按普通潤色處理。換一個目標語言,或在上方多勾選一個工作語言。', + disabled: '不啟用(Shift 按下不觸發翻譯)', + sameAsWorking: '目標語言與你唯一的工作語言相同,翻譯不會生效:按 Shift 仍按普通潤色處理。換一個目標語言,或在上方多勾選一個工作語言。', }, style: { title: '翻譯風格', - desc: '自動沿用「風格」頁目前啓用的風格包。', + desc: '自動沿用「風格」頁目前啟用的風格包。', unavailable: '暫時無法取得', }, save: { - workingFailed: '工作語言保存失敗,請重試。', - targetFailed: '翻譯目標語言保存失敗,請重試。', - hotkeyRegisterFailed: '翻譯快捷鍵註冊失敗,未繼續保存。', - hotkeySaveFailed: '翻譯快捷鍵保存失敗,請重試。', + workingFailed: '工作語言儲存失敗,請重試。', + targetFailed: '翻譯目標語言儲存失敗,請重試。', + hotkeyRegisterFailed: '翻譯快捷鍵註冊失敗,未繼續儲存。', + hotkeySaveFailed: '翻譯快捷鍵儲存失敗,請重試。', }, howto: { title: '使用方法', - step1: '在任意輸入框聚焦游標。', + step1: '在任意輸入框聚焦遊標。', step2: '按 {{trigger}} 開始錄音。', - step3: '錄音中按一下 {{shortcut}} 啟動翻譯。', + step3: '錄音中按一下 Shift 啟動翻譯。', step4: '再按 {{trigger}} 停止錄音。', - step5: '翻譯結果自動插入到游標位置。', + step5: '翻譯結果自動插入到遊標位置。', indicatorTitle: '怎麼知道翻譯模式生效了', indicatorDesc: '按 Shift 後螢幕底部會顯示藍色「正在翻譯」標識。', fallbackTitle: '安全兜底', @@ -819,32 +687,37 @@ export const zhTW: typeof zhCN = { }, }, selectionAsk: { + kicker: 'SELECTION ASK', title: '劃詞追問', desc: '選中文字後語音提問,支援多輪追問。', - shortcutSettings: '快捷鍵設定', - guide: { - openTitle: '開啟追問浮窗', - openDesc: '按 {{hotkey}},開始一輪對話。', - unsetDesc: '先到快捷鍵設定中,為劃詞追問設定快捷鍵。', - selectTitle: '選取想了解的內容', - askTitle: '開口說出問題', - askDesc: '按 {{recordHotkey}} 錄音,再按一次提交。', - followup: '繼續使用錄音快捷鍵,即可多輪追問。', - dismiss: '關閉浮窗,結束本次對話', - }, + statusEnabled: '已啟用', + statusDisabled: '未啟用', hotkey: { title: '彈出浮窗的快捷鍵', + desc: '控制浮窗開關。浮窗內錄音用 {{recordHotkey}}。', + optionDisabled: '不啟用', + chordWarning: '', }, save: { - historySaveFailed: 'Q&A 歷史保存設置保存失敗,請重試。', + hotkeyRegisterFailed: '劃詞追問快捷鍵註冊失敗,未繼續儲存。', + hotkeySaveFailed: '劃詞追問快捷鍵儲存失敗,請重試。', + historySaveFailed: 'Q&A 歷史儲存設定儲存失敗,請重試。', }, history: { - title: '保存歷史', - desc: '開啟後在本地保存問答記錄,預設關閉。', + title: '儲存歷史', + desc: '開啟後在本地儲存問答記錄,預設關閉。', }, howto: { title: '使用方法', + step1: '按 {{hotkey}} 開啟浮窗。', step2: '在任意 app 選中文字。', + step3: '按 {{recordHotkey}} 錄音,再按一次提交。', + step4: '可繼續按 {{recordHotkey}} 多輪追問。', + step5: '按 Esc 關閉浮窗並清空歷史。', + windowTitle: '浮窗位置 + 拖動 + 釘住', + windowDesc: '浮窗可拖動,位置自動記憶。釘住可保持視窗不關。', + privacyTitle: '隱私契約', + privacyDesc: '選中文字僅存於記憶體,關閉浮窗即銷毀。超 4000 字元自動截斷。', }, }, settings: { @@ -852,15 +725,13 @@ export const zhTW: typeof zhCN = { title: '選區助手', hint: '選中文字後按同一快捷鍵:關閉語音編輯時直接潤色;開啟後口述指令,說完再選擇「提問」或「編輯選區」。', polishHotkey: '選區助手快捷鍵', - polishHotkeyDesc: - '關閉語音編輯時直接潤色;開啟語音編輯時按住口述指令(錄音方式跟隨全域設定)。', + polishHotkeyDesc: '關閉語音編輯時直接潤色;開啟語音編輯時按住口述指令(錄音方式跟隨全域設定)。', polishDelivery: '結果處理', voiceDeliveryDesc: '語音編輯完成後:直接替換選區,或在華詞面板中預覽後再確認。', voiceEnable: '語音編輯', voiceEnableDesc: '與上方同一快捷鍵;錄音方式跟隨全域設定(目前:{{recordingLabel}})。', autoIntent: '自動判斷意圖', - autoIntentDesc: - '開啟後預設用服務配置的模型判斷問句 vs 編輯;模型不可用或解析失敗時回退到問句啟發式。', + autoIntentDesc: '開啟後預設用服務配置的模型判斷問句 vs 編輯;模型不可用或解析失敗時回退到問句啟發式。', editKeywords: '額外問句線索', editKeywordsDesc: '關閉自動判斷時生效;每行一個,指令含則視為提問,否則仍按問句啟發式判定。', }, @@ -875,34 +746,31 @@ export const zhTW: typeof zhCN = { previewConfirm: '預覽確認', previewConfirmHint: '在可編輯彈窗中核對結果,再確認覆蓋原選區。', }, - kicker: '設定', - title: '設置', + kicker: 'SETTINGS', + title: '設定', desc: '錄音、提供商、快捷鍵與權限配置。', network: { title: '網路', useSystemProxyLabel: '使用系統代理', - useSystemProxyDesc: - '開啟時請求跟隨系統代理;關閉後所有網路請求直連(國內服務延遲通常更低),GitHub 登入、更新等境外服務可能連不上。即時語音串流與 Less Computer 不受此開關影響。', + useSystemProxyDesc: '開啟時請求跟隨系統代理;關閉後所有網路請求直連(國內服務延遲通常更低),GitHub 登入、更新等境外服務可能連不上。即時語音串流與 Less Computer 不受此開關影響。', }, dataStorage: { title: '資料儲存', desc: '本機保留的歷史會話與對話上下文。', - cursorContextLabel: '游標上下文(實驗)', + cursorContextLabel: '遊標上下文(實驗)', cursorContextDesc: - '潤稿時讀取你正在寫的那篇文件中游標附近的原文,幫模型判斷同音詞、專有名詞與代詞該怎麼寫。開啟後這段文字會隨請求送給你設定的 LLM 服務商;關閉時一個字都不讀。密碼輸入框、Secure Input、密碼管理器與終端機始終不讀。僅 macOS。', + '潤稿時讀取你正在寫的那篇檔案中游標附近的原文,幫模型判斷同音詞、專有名詞與代詞該怎麼寫。開啟後這段文字會隨請求送給你設定的 LLM 服務商;關閉時一個字都不讀。密碼輸入框、Secure Input、密碼管理器與終端機始終不讀。僅 macOS。', }, codingConsole: { - title: 'Claude 主控台', + title: 'Claude 主控臺', desc: '偵測本機 Claude Code 與 MCP(computer use)狀態,並以護欄方式無頭執行一次 Claude、串流檢視輸出與用量。', - guardNote: - '預設放行可復原操作;rm -rf / sudo / 強制推送等高風險指令會被攔截;若工作目錄為 git 儲存庫,執行前自動建立快照可回滾。', + guardNote: '預設放行可復原操作;rm -rf / sudo / 強制推送等高風險指令會被攔截;若工作目錄為 git 儲存庫,執行前自動建立快照可回滾。', status: '狀態', detect: '偵測', detecting: '偵測中…', installed: '已偵測到 Claude', notInstalled: '未偵測到 claude', - notInstalledHint: - '請先安裝 Claude Code(參見 docs.anthropic.com/claude-code),或在下方填入其執行檔完整路徑。', + notInstalledHint: '請先安裝 Claude Code(參見 docs.anthropic.com/claude-code),或在下方填入其執行檔完整路徑。', mcpServers: '已設定 {{count}} 個 MCP 服務', computerUsePresent: '已設定桌面控制(computer use)MCP', computerUseAbsent: '未設定桌面控制 MCP(複製/貼上等輕動作用 Bash 即可,無需此項)', @@ -936,16 +804,13 @@ export const zhTW: typeof zhCN = { comingSoonNote: '設定即時儲存;熱鍵觸發與執行鏈路隨後續版本生效。', hotkeyHint: '開啟後,按住快捷鍵說話,放開後由所選 Agent 處理並把結果顯示在膠囊裡。', voiceHotkey: '按住說話鍵', - voiceHotkeyDesc: - '按住說話、放開執行。支援 Ctrl/Option/Fn 等單鍵。功能說明參見「進階」設定頁。', + voiceHotkeyDesc: '按住說話、放開執行。支援 Ctrl/Option/Fn 等單鍵。功能說明參見「進階」設定頁。', provider: 'Agent 後端', opencodeReady: '已偵測到 OpenCode v{{version}}。', - opencodeMissing: - '未偵測到 opencode 指令。請先安裝(npm i -g opencode-ai)並用 opencode auth login 登入後再使用。', + opencodeMissing: '未偵測到 opencode 指令。請先安裝(npm i -g opencode-ai)並用 opencode auth login 登入後再使用。', cliReady: '已偵測到 {{name}} v{{version}}。', cliMissing: '未偵測到 {{name}} 指令。請先安裝並登入,或在下方「執行檔」欄填它的絕對路徑。', - sandboxGuardHint: - '此後端只有粗粒度沙箱層級,沒有逐指令的高風險清單:碰到限制時會直接據實回報錯誤,不會跳出「核准這條指令」的卡片。', + sandboxGuardHint: '此後端只有粗粒度沙箱層級,沒有逐指令的高風險清單:碰到限制時會直接據實回報錯誤,不會跳出「核准這條指令」的卡片。', codexModelHint: '填 Codex 的模型名稱(如 gpt-5);留空則使用 ~/.codex/config.toml 的設定。', codexBudgetHint: 'Codex 沒有單次美元預算上限;費用取決於你設定的服務商。', codexMode: { @@ -953,12 +818,11 @@ export const zhTW: typeof zhCN = { workspaceWrite: '允許工作目錄寫入', }, codexModelPlaceholder: '留空 = 使用 Codex 自己的預設', - dshModelHint: - 'dsh 的 headless 設定沒有模型開關:模型由 dsh 自己的 profile 決定,這裡改不了。', + dshModelHint: 'dsh 的 headless 設定沒有模型開關:模型由 dsh 自己的 profile 決定,這裡改不了。', panelHotkey: '面板鍵(語音 Agent)', panelHotkeyDesc: '錄音 → ASR → Claude → 結果串流進面板。預設 Cmd/Ctrl+Shift+Enter。', quickHotkey: '快取用鍵', - quickHotkeyDesc: '取目前選取文字 → Claude → 結果回插游標處。不開面板、更快。', + quickHotkeyDesc: '取目前選取文字 → Claude → 結果回插遊標處。不開面板、更快。', model: '模型', modelPlaceholder: '預設 sonnet', modelDefault: '預設(自動 sonnet)', @@ -976,12 +840,10 @@ export const zhTW: typeof zhCN = { openPanelAction: '開啟 Less Computer', }, debug: { - cursorLabel: '游標', title: '除錯工具', desc: '排查辨識問題時使用,平時無需開啟。', - cursorProbeLabel: '游標上下文探針', - cursorProbeDesc: - '點一下,然後在倒數內切到目標 app 並點進輸入框——探針會讀那裡的游標附近原文,用來確認哪些 app 讀得到、哪些被安全閘門擋住。只讀一次,不送給任何服務商。', + cursorProbeLabel: '遊標上下文探針', + cursorProbeDesc: '點一下,然後在倒數內切到目標 app 並點進輸入框——探針會讀那裡的遊標附近原文,用來確認哪些 app 讀得到、哪些被安全閘門擋住。只讀一次,不送給任何服務商。', cursorProbeBtn: '探測(5 秒後)', cursorProbeCountdown: '{{n}} 秒後讀取…', }, @@ -1002,106 +864,95 @@ export const zhTW: typeof zhCN = { }, recording: { title: '錄音與輸入', - desc: '定義全局錄音的快捷鍵與觸發方式。', + desc: '定義全域錄音的快捷鍵與觸發方式。', hotkeyLabel: '錄音快捷鍵', - hotkeyDescAcc: '按下即開始捕獲語音,全局生效。需要授予輔助功能權限。', - hotkeyDescNoAcc: '按下即開始捕獲語音,全局生效。無需額外輔助功能授權。', + hotkeyDescAcc: '按下即開始捕獲語音,全域生效。需要授予輔助功能權限。', + hotkeyDescNoAcc: '按下即開始捕獲語音,全域生效。無需額外輔助功能授權。', modeLabel: '錄音方式', modeDesc: '切換式 = 按一次開始、再按一次結束;按住說話 = 按住開始、鬆開結束。', modeToggle: '切換式', modeHold: '按住說話', modeAuto: '自動', silenceAutoStopLabel: '靜音後自動停止', - silenceAutoStopDesc: - '僅切換模式生效。偵測到語音後,連續靜音達到所選時長即自動結束並提交;一直沒說話則 10 秒後取消。預設關閉;第二次按鍵停止和 Esc 取消仍然有效。', + silenceAutoStopDesc: '僅切換模式生效。偵測到語音後,連續靜音達到所選時長即自動結束並提交;一直沒說話則 10 秒後取消。預設關閉;第二次按鍵停止和 Esc 取消仍然有效。', silenceAutoStopSecondsLabel: '靜音時長', silenceAutoStopSecondsValue: '{{value}} 秒', - migrationNoticeTitle: '默認已改爲切換式說話', - migrationNoticeDesc: - '如果你之前改過快捷鍵觸發方式,請在這裏手動確認一次。本次更新調整了快捷鍵方式的默認值與讀取邏輯;如果你更習慣按住說話,可以重新切回“按住說話”。', + migrationNoticeTitle: '預設已改為切換式說話', + migrationNoticeDesc: '如果你之前改過快捷鍵觸發方式,請在這裡手動確認一次。本次更新調整了快捷鍵方式的預設值與讀取邏輯;如果你更習慣按住說話,可以重新切回“按住說話”。', comboRecordLabel: '錄製快捷鍵', - comboRecordDesc: '點擊後按下你想要的快捷鍵組合(如 ⌘⇧D),支援 Toggle 與 Hold 模式。', + comboRecordDesc: '點選後按下你想要的快捷鍵組合(如 ⌘⇧D),支援 Toggle 與 Hold 模式。', comboRecordBtn: '錄製快捷鍵', comboResetBtn: '重置', comboMenuToggle: '更多操作', - comboDisableHint: '核心快捷鍵不可停用,錄音必須綁定一個快捷鍵', + comboDisableHint: '核心快捷鍵不可停用,錄音必須繫結一個快捷鍵', comboRecordHint: '請按下快捷鍵組合…', comboNeedKey: '請設定組合鍵(如 ⌘⇧J),不支援單獨的修飾鍵', comboRecorded: '已錄製', comboClear: '清除', comboConflict: '此快捷鍵組合不可用', microphoneLabel: '首選麥克風', - microphoneDesc: - '選擇優先使用的輸入設備。設備暫時不可用時會使用系統默認麥克風,重新連接後自動切回首選設備。', - microphoneDefault: '系統默認麥克風', - microphoneDefaultDesc: '使用系統默認輸入設備', - microphoneSystemDefault: '系統默認', + microphoneDesc: '選擇優先使用的輸入裝置。裝置暫時不可用時會使用系統預設麥克風,重新連線後自動切回首選裝置。', + microphoneDefault: '系統預設麥克風', + microphoneDefaultDesc: '使用系統預設輸入裝置', + microphoneSystemDefault: '系統預設', microphoneUnavailable: '不可用', microphoneLoadError: '麥克風列表讀取失敗:{{message}}', microphoneDialogTitle: '麥克風', microphoneDialogDesc: '選擇能捕捉到您聲音的麥克風。如果指示條沒有移動,請嘗試其他麥克風。', microphoneMonitorError: '輸入電平監聽失敗:{{message}}', capsuleLabel: '錄音膠囊', - capsuleDesc: '錄音 / 轉寫時在屏幕底部顯示半透明膠囊。', - capsuleStyleTypeless: 'Typeless 傳統風格', + capsuleDesc: '錄音 / 轉寫時在螢幕底部顯示半透明膠囊。', capsuleStyleLabel: '膠囊樣式', capsuleStyleSiri: '流光 Siri 風格', capsuleStyleClassic: 'Openless 預設風格', muteDuringRecordingLabel: '錄音時靜音', - muteDuringRecordingDesc: '錄音期間臨時靜音系統輸出,避免揚聲器回音。', + muteDuringRecordingDesc: '錄音期間臨時靜音系統輸出,避免揚聲器迴音。', audioCueLabel: '錄音提示音', audioCueDesc: '按下熱鍵開始錄音時播放一段合成提示音,提醒已開始錄音。膠囊隱藏時也會響。', audioCuePreview: '試聽', - insertGroupTitle: '插入與剪貼板', - restoreClipboardLabel: '插入後恢復剪貼板', - restoreClipboardDesc: '粘貼成功後恢復你原來的剪貼板內容(僅 Windows / Linux)。', - pasteShortcutLabel: '模擬粘貼快捷鍵', - pasteShortcutDesc: - '插入時模擬按下的粘貼鍵,部分終端類應用需要 Ctrl+Shift+V(僅 Windows / Linux)。', - pasteShortcutCtrlV: 'Ctrl+V(默認 / 多數應用)', + 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;如果仍失敗,再複製到剪貼簿。', + allowNonTsfFallbackDesc: 'Windows:TSF 失敗時使用分批 Unicode SendInput;如果仍失敗,再複製到剪貼簿。', windowsInsertionModeLabel: 'Windows 插入方式', - windowsInsertionModeDesc: - '聽寫結果如何插入到目前游標位置。剪貼簿貼上模式使用上方「模擬粘貼快捷鍵」,可完整保留換行。', + windowsInsertionModeDesc: '聽寫結果如何插入到目前遊標位置。剪貼簿貼上模式使用上方「模擬貼上快捷鍵」,可完整保留換行。', windowsInsertionModeTsf: 'TSF 輸入法(預設)', windowsInsertionModeSendInput: 'SendInput 逐字模擬', windowsInsertionModePaste: '剪貼簿貼上(Ctrl+V 等)', macosNewlineModeLabel: '換行怎麼落', - macosNewlineModeDesc: - '自動會在已知終端應用中使用 Line Feed(U+000A / Ctrl+J),其他應用使用 Shift+Return;Return 會直接發送。', + macosNewlineModeDesc: '自動會在已知終端應用中使用 Line Feed(U+000A / Ctrl+J),其他應用使用 Shift+Return;Return 會直接傳送。', macosNewlineModeAuto: '自動(終端使用 Line Feed)', macosNewlineModeShiftReturn: 'Shift+Return(聊天框換行)', macosNewlineModeLineFeed: 'Line Feed(終端 CLI / Ctrl+J)', macosNewlineModeReturn: 'Return(拆成多條訊息)', windowsSendInputNewlineModeLabel: 'SendInput 換行模擬', - windowsSendInputNewlineModeDesc: - 'SendInput 模式下如何把換行符模擬成按鍵。聊天框通常選 Shift+Enter;記事本 / VS Code 等選 Enter。', + 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 語言設定檔。', + windowsShowOpenlessInKeyboardListDesc: '關閉後 Win+Space 切換輸入法時不會出現 OpenLess;SendInput 與剪貼簿貼上插入不受影響。重新開啟本項可還原顯示。', + windowsShowOpenlessInKeyboardListError: '無法更新鍵盤列表:系統拒絕更改 OpenLess 語言設定檔。', historyGroupTitle: '歷史與上下文', historyRetentionLabel: '歷史保留天數', historyRetentionDesc: '超過保留天數的歷史在寫入新條目時被清理;0 = 不按時間清理。', historyMaxEntriesLabel: '歷史條數上限', historyMaxEntriesDesc: '本地保留會話上限,留空 = 200。範圍 5–200。', - polishContextWindowLabel: '對話上下文窗口(分鐘)', + polishContextWindowLabel: '對話上下文視窗(分鐘)', polishContextWindowDesc: '把最近 N 分鐘內已潤色的轉寫作為多輪上下文,0 = 關閉。', recordAudioForDebugLabel: '保留原始錄音(除錯)', - recordAudioForDebugDesc: '保存原始麥克風音訊為 wav,便於排查識別問題。', + recordAudioForDebugDesc: '儲存原始麥克風音訊為 wav,便於排查識別問題。', audioRecordingMaxEntriesLabel: '原始錄音保留條數', audioRecordingMaxEntriesDesc: '本地保留 wav 檔案數上限,留空 = 200。', startupGroupTitle: '啟動', - startMinimizedLabel: '啓動時靜默運行', - startMinimizedDesc: '所有啓動路徑都不彈主窗口,僅選單欄 / 托盤運行。', + startMinimizedLabel: '啟動時靜默執行', + startMinimizedDesc: '所有啟動路徑都不彈主視窗,僅選單欄 / 託盤執行。', autoUpdateCheckLabel: '自動檢查更新', autoUpdateCheckDesc: '啟動時及每 60 分鐘自動檢查更新。', marketplaceGroupTitle: '風格市場', @@ -1109,39 +960,11 @@ export const zhTW: typeof zhCN = { marketplaceBaseUrlDesc: '風格市場後端 URL,留空使用預設值。', marketplaceDevLoginLabel: 'GitHub 使用者名稱(上傳身份)', marketplaceDevLoginDesc: '標識上傳者身分,為空時無法上傳或按讚。', - startupAtBoot: '開機自啓', - startupAtBootDesc: '登錄系統時自動啓動 OpenLess。', - startupAtBootError: '開機自啓切換失敗:{{message}}', + startupAtBoot: '開機自啟', + startupAtBootDesc: '登入系統時自動啟動 OpenLess。', + startupAtBootError: '開機自啟切換失敗:{{message}}', }, channels: { - backToList: '返回渠道列表', - done: '完成', - llmTitle: '文字處理渠道', - asrTitle: '語音辨識渠道', - current: '目前使用', - enabled: '啟用', - disabled: '已停用', - enabledFor: '啟用 {{name}}', - modelNotSet: '未單獨設定模型', - localModelManaged: '模型由系統或「本地模型」頁管理', - lastCheck: '上次驗證', - verifying: '正在驗證…', - notVerified: '尚未驗證', - verificationUnavailable: '此渠道暫不支援驗證', - passed: '驗證通過', - failed: '驗證失敗 · {{reason}}', - elapsed: '耗時 {{ms}} ms', - staleResult: '結果已超過 24 小時', - connectionTitle: '服務連線', - modelTitle: '模型設定', - modelHint: '直接輸入模型名稱,或取得並選擇供應商的可用模型。', - availableModels: '可用模型', - validationTitle: '連線驗證', - validationHint: - '手動發出一次實際請求,檢查目前設定;可能消耗服務額度。儲存設定不會自動驗證。', - autoSaveHint: '修改欄位後會自動儲存;完成設定後,可手動驗證連線。', - nameHint: '名稱僅用於區分同一供應商的多個渠道,不影響模型或連線。', - errModel: '模型', verify: '驗證', verifyHint: '點一下會真實呼叫一次介面,確認這張卡現在可用', errTimeout: '逾時', @@ -1149,14 +972,14 @@ export const zhTW: typeof zhCN = { errEndpoint: '網址', errGeneric: '失敗', dragHint: '按住拖曳可調整優先順序', - orderHint: '請求會使用列表中第一個啟用的渠道。拖曳可調整順序;停用的渠道會移到末尾。', - empty: '還沒有渠道。點選「新增渠道」,連接你的第一個服務。', + orderHint: '拖曳排序,最上面的優先使用;關掉的渠道會自動排到末尾。', + empty: '還沒有渠道。點下面的「新增渠道」建立一個。', add: '新增渠道', edit: '編輯', createTitle: '新增渠道', editTitle: '編輯渠道', providerLabel: '供應商', - nameLabel: '渠道名稱(選填)', + nameLabel: '名稱', namePlaceholder: '例如:矽基流動-主帳號', create: '建立', delete: '刪除渠道', @@ -1166,23 +989,21 @@ export const zhTW: typeof zhCN = { minutesAgo: '{{count}} 分鐘前', hoursAgo: '{{count}} 小時前', daysAgo: '{{count}} 天前', - localEngineModelHint: '可在「AI 服務與模型 → 本地模型」中下載和切換本地模型。', + localEngineModelHint: '本機引擎的模型下載與切換在「進階 → 本機模型」裡。', }, providers: { localEngineNoCredentials: '本機引擎不需要 API Key 與網址。', localModelLabel: '本地模型', localModelEmpty: '尚未下載本地模型', appleSpeechLocalNote: 'Apple 語音辨識使用系統內建引擎,無需選擇模型。', - localEngineNote: - '已下載的本地模型在上方下拉中直接選擇;更多模型在「本地模型」看板下載與管理。', + localEngineNote: '已下載的本地模型在上方下拉中直接選擇;更多模型在「本地模型」看板下載與管理。', localTag: '本地', llmTitle: 'LLM 模型(潤色)', - llmDesc: 'OpenAI 兼容協議,支持多家供應商切換。', + llmDesc: 'OpenAI 相容協議,支援多家供應商切換。', providerLabel: '供應商', - llmProviderDesc: '選擇後將自動填入 Base URL 默認值。', - credentialStorageNotice: '憑據保存在系統憑據庫中。', - codexOAuthNotice: - 'Codex OAuth 使用本機 Codex 登入狀態(~/.codex/auth.json),無需在 OpenLess 中保存 API Key 或 Base URL。', + llmProviderDesc: '選擇後將自動填入 Base URL 預設值。', + credentialStorageNotice: '憑據儲存在系統憑據庫中。', + codexOAuthNotice: 'Codex OAuth 使用本機 Codex 登入狀態(~/.codex/auth.json),無需在 OpenLess 中儲存 API Key 或 Base URL。', asrProviderDesc: '切換後將自動選用對應憑據。', asrTitle: 'ASR 語音(轉寫)', asrDesc: '用於將錄製的語音轉寫為文字。', @@ -1192,13 +1013,11 @@ export const zhTW: typeof zhCN = { pipelineModeHint: '傳統 = ASR 轉寫 + LLM 潤色兩段式;多模態 = 單一多模態模型一次完成。', pipelineModeTraditional: '傳統模式', pipelineModeMultimodal: '多模態模式', - pipelineIsolationNotice: - '兩種模式使用完全獨立的憑證設定。切換模式不會刪除另一套設定,只是暫時停用;切回即恢復。', + pipelineIsolationNotice: '兩種模式使用完全獨立的憑證設定。切換模式不會刪除另一套設定,只是暫時停用;切回即還原。', presets: { - lmstudio: 'LM Studio', ark: 'ARK(火山方舟)', deepseek: 'DeepSeek', - siliconflow: '硅基流動', + siliconflow: '矽基流動', atlascloud: 'Atlas Cloud', openai: 'OpenAI', gemini: 'Google Gemini', @@ -1212,26 +1031,24 @@ export const zhTW: typeof zhCN = { minimax: 'MiniMax(M3)', stepfun: 'StepFun(階躍星辰)', opencode: 'OpenCode Zen', - tencentTokenHub: '騰訊雲 TokenHub', - customChatCompletions: '自訂 · Chat Completions', - customResponses: '自訂 · Responses', - customMessages: '自訂 · Messages', + customChatCompletions: "自訂 · Chat Completions", + customResponses: "自訂 · Responses", + customMessages: "自訂 · Messages", custom: '自定義', asrVolcengine: '火山引擎 bigasr', asrBailian: '阿里雲百煉即時 ASR', asrBailianQwen3: '阿里雲百煉 Qwen3 即時 ASR', asrBailianFunAsrFlash: '阿里雲百煉 Fun-ASR-Flash(錄音檔)', - asrSiliconflow: '硅基流動 SenseVoice', + asrSiliconflow: '矽基流動 SenseVoice', asrStepfun: '階躍星辰 StepAudio', asrZhipu: '智譜 GLM-ASR', asrGroq: 'Groq Whisper-large-v3', - asrWhisper: 'OpenAI Whisper(兼容)', + asrWhisper: 'OpenAI Whisper(相容)', asrOpenrouter: 'OpenRouter Whisper', asrZenmux: 'ZenMux', asrOpenAiCompatible: '自訂 OpenAI 相容', asrXiaomiMimo: '小米 MiMo ASR', asrIflytek: '訊飛即時語音轉寫', - asrTencentCloud: '騰訊雲混元即時 ASR', asrElevenLabs: 'ElevenLabs Scribe', asrSherpaOnnxLocal: '本地 sherpa-onnx(實驗性)', asrFoundryLocalWhisper: '本地 Whisper(Foundry Local)', @@ -1245,100 +1062,73 @@ export const zhTW: typeof zhCN = { omniDashscope: '阿里雲百煉 Omni', }, elevenLabsUploadNotice: 'ElevenLabs 會將錄音上傳至已設定的端點進行批次轉寫。', - zenmuxVocabularyNote: - 'ZenMux 走 JSON 轉寫協定,不傳送詞典熱詞(prompt/hotwords);詞典仍會進入潤色鏈路,但不會參與語音辨識偏置。', - asrAdvancedNote: - '以下進階選項僅影響「自訂 OpenAI 相容」與「ZenMux」預設;其餘具名廠商預設維持內建行為。', + zenmuxVocabularyNote: 'ZenMux 走 JSON 轉寫協定,不傳送詞典熱詞(prompt/hotwords);詞典仍會進入潤色鏈路,但不會參與語音辨識偏置。', + asrAdvancedNote: '以下進階選項僅影響「自訂 OpenAI 相容」與「ZenMux」預設;其餘具名廠商預設維持內建行為。', asrAdvancedVerboseJsonLabel: '分段指標 (verbose_json)', - asrAdvancedVerboseJsonHint: - '服務端支援時回傳 segments 指標,用於幻聽過濾;自建服務若不支援請保持關閉。', + asrAdvancedVerboseJsonHint: '服務端支援時回傳 segments 指標,用於幻聽過濾;自建服務若不支援請保持關閉。', asrAdvancedChunkLabel: '分片時長 (ms)', - asrAdvancedChunkHint: - '0 = 不分片,整段傳送;按片段多次請求,適合長錄音或服務端單次請求時長受限。', + asrAdvancedChunkHint: '0 = 不分片,整段傳送;按片段多次請求,適合長錄音或服務端單次請求時長受限。', asrAdvancedEnableItnLabel: '數字正規化 (enable_itn)', - asrAdvancedEnableItnHint: - '把口語數字/單位正規化為阿拉伯數字(如「二零二六年」→「2026年」)。關閉後保留原始文字。', + asrAdvancedEnableItnHint: '把口語數字/單位正規化為阿拉伯數字(如「二零二六年」→「2026年」)。關閉後保留原始文字。', volcengineAppKeyLabel: 'APP ID', volcengineAccessKeyLabel: 'Access Token', volcengineApiKeyLabel: 'API Key', volcengineResourceIdLabel: 'Resource ID', - volcengineServiceLabel: '服務', - volcengineServiceStandard: '一般服務', - volcengineAgentPlanNote: - '使用 Agent Plan 專屬 API Key;僅支援豆包串流 ASR。預設 Resource ID 為 volc.seedasr.sauc.duration。一般服務與套餐密鑰不同,建議分別建立渠道。', - volcengineServiceInvalid: '服務設定無效,請重新選擇一般服務或 Agent Plan。', volcengineAuthModeLabel: '鑑權模式', volcengineAuthModeAppIdToken: '舊版應用(APP ID + Access Token)', - volcengineAuthModeApiKey: '新版控制台 API Key', - volcengineMappingNote: - 'Secret Key 當前無需填寫。Resource ID 默認使用 volc.seedasr.sauc.duration。', - volcengineApiKeyNote: - '使用新版語音控制台建立的 API Key 鑑權,無需 APP ID。API Key 可在語音控制台「API Key 管理」建立:console.volcengine.com/speech/new/setting/apikeys。Resource ID 預設使用 volc.seedasr.sauc.duration。', + volcengineAuthModeApiKey: '新版控制檯 API Key', + volcengineMappingNote: 'Secret Key 當前無需填寫。Resource ID 預設使用 volc.seedasr.sauc.duration。', + volcengineApiKeyNote: '使用新版語音控制檯建立的 API Key 鑑權,無需 APP ID。API Key 可在語音控制檯「API Key 管理」建立:console.volcengine.com/speech/new/setting/apikeys。Resource ID 預設使用 volc.seedasr.sauc.duration。', xfyunAppIdLabel: 'AppID', xfyunApiKeyLabel: 'API Key', - xfyunNote: - '在訊飛開放平台「即時語音轉寫」服務頁取得 AppID 與 API Key。音訊為 16kHz/16bit/單聲道 PCM;標準版介面暫不支援熱詞參數(可在訊飛控制台設定個人化熱詞),語種預設中文普通話。', - tencentCloudAppIdLabel: '騰訊雲 AppID', - tencentCloudSecretIdLabel: 'SecretID', - tencentCloudSecretKeyLabel: 'SecretKey', - tencentCloudNote: - '使用騰訊雲「語音辨識」服務的 API 金鑰。預設 Hy-ASR-3.0-preview 支援中英與 20 種方言;Preview 僅支援 60 秒內的 16kHz 單聲道 PCM,暫不支援上下文或熱詞增強。', - tencentTokenHubNote: - '僅顯示目前在線的語言模型。部分模型始終啟用思考;關閉思考開關時將沿用該模型的固定行為。', - localAsrActiveNotice: '當前已啓用「{{name}}」,可在「高級」中切換或停用。', - localAsrTakeoverHint: '啓動「{{name}}」後,ASR 提供商將被接管。', - asrProviderTakenOver: - '目前使用的是本地引擎,在上方下拉直接選其他供應商即可切換(本地引擎會自動停用);本地模型在「服務 → 本地模型」裡管理。', - localAsrHint: '在本機運行,無需 API Key。從 HuggingFace 下載模型即可使用。', - foundryLocalAsrHint: '在本機運行,無需 ASR API Key。首次使用需下載運行元件和模型。', + xfyunNote: '在訊飛開放平臺「即時語音轉寫」服務頁取得 AppID 與 API Key。音訊為 16kHz/16bit/單聲道 PCM;標準版介面暫不支援熱詞引數(可在訊飛控制檯設定個人化熱詞),語種預設中文普通話。', + localAsrActiveNotice: '當前已啟用「{{name}}」,可在「高階」中切換或停用。', + localAsrTakeoverHint: '啟動「{{name}}」後,ASR 提供商將被接管。', + asrProviderTakenOver: '目前使用的是本地引擎,在上方下拉直接選其他供應商即可切換(本地引擎會自動停用);本地模型在「服務 → 本地模型」裡管理。', + localAsrHint: '在本機執行,無需 API Key。從 HuggingFace 下載模型即可使用。', + foundryLocalAsrHint: '在本機執行,無需 ASR API Key。首次使用需下載執行元件和模型。', localAsrPerformanceWarning: '本地推理比雲端慢,中文準確率可能更低。適合離線或隱私敏感場景。', localAsrReady: '{{model}} 已下載', localAsrNotReady: '{{model}} 未下載', - localAsrGoDownload: '前往模型設置下載', - localAsrManage: '前往模型設置', + localAsrGoDownload: '前往模型設定下載', + localAsrManage: '前往模型設定', localAsrDownloadedTitle: '已下載模型', localAsrDelete: '刪除', - fillDefault: '填入默認值', + fillDefault: '填入預設值', readFailed: '讀取失敗', - apiKeyLabel: 'API 密鑰', - apiKeyOptionalLabel: 'API 密鑰(選填)', - baseUrlLabel: '接口地址', + apiKeyLabel: 'API 金鑰', + baseUrlLabel: '介面地址', modelLabel: '模型', customModelLabel: '自訂模型…', presetListLabel: '返回預設清單', searchModels: '搜尋模型…', noMatchingModels: '沒有符合的模型', - orcarouterCatalogHint: - '模型來自 OrcaRouter /models;此供應商只允許從目錄中選擇,不支援手動填寫模型 ID。', - orcarouterAsrCatalogHint: - '模型來自 OrcaRouter /models,並僅顯示相容音訊輸入的 Gemini;不支援手動填寫模型 ID。', + orcarouterCatalogHint: '模型來自 OrcaRouter /models;此供應商只允許從目錄中選擇,不支援手動填寫模型 ID。', + orcarouterAsrCatalogHint: '模型來自 OrcaRouter /models,並僅顯示相容音訊輸入的 Gemini;不支援手動填寫模型 ID。', temperatureLabel: 'Temperature', - temperaturePlaceholder: '留空則不發送;範圍 0~2(含邊界),例如 0.3', + temperaturePlaceholder: '留空則不傳送;範圍 0~2(含邊界),例如 0.3', extraHeadersLabel: '額外 Headers', extraHeadersPlaceholder: '{"custom-head":"..."}', thinkingModeLabel: '思考', thinkingModeOn: '開啟', thinkingModeOff: '關閉', - requestFormatLabel: '請求格式', - messagesThinkingLabel: '思考方式', - thinkingAdaptive: '自適應', - thinkingBudget: '固定預算', - maxTokensLabel: '最大輸出 tokens', - thinkingBudgetLabel: '思考預算 tokens', - responsesThinkingHint: '部分模型只能降低思考,無法完全關閉。推理請求不傳送溫度參數。', - messagesThinkingHint: - '舊模型或相容閘道可能需要固定預算;思考預算必須小於最大輸出。開啟思考時不傳送溫度參數。', - llmRequestFormatInvalid: '請求格式無效,請重新選擇。', - llmThinkingModeInvalid: '思考方式無效,請重新選擇。', - llmTokenLimitInvalid: 'Token 上限必須為正整數。', - llmThinkingBudgetInvalid: '思考預算至少為 1024,且固定預算必須小於最大輸出。', - llmResponseIncomplete: '回應未完整結束或達到輸出上限;已輸出正文會保留。', - llmProtocolHeaderConflict: - 'Messages 已自動設定驗證與版本標頭,請移除額外 Headers 中的 x-api-key 與 anthropic-version。', - llmStreamError: '伺服器回傳串流錯誤,請檢查模型和請求參數。', - saveProtocol: '儲存協定設定', - thinkingModeHint: - '依所選請求格式與模型支援的參數啟用、關閉或降低思考,不在提示詞注入控制指令。', + requestFormatLabel: "請求格式", + messagesThinkingLabel: "思考方式", + thinkingAdaptive: "自適應", + thinkingBudget: "固定預算", + maxTokensLabel: "最大輸出 tokens", + thinkingBudgetLabel: "思考預算 tokens", + responsesThinkingHint: "部分模型只能降低思考,無法完全關閉。推理請求不傳送溫度引數。", + messagesThinkingHint: "舊模型或相容閘道可能需要固定預算;思考預算必須小於最大輸出。開啟思考時不傳送溫度引數。", + llmRequestFormatInvalid: "請求格式無效,請重新選擇。", + llmThinkingModeInvalid: "思考方式無效,請重新選擇。", + llmTokenLimitInvalid: "Token 上限必須為正整數。", + llmThinkingBudgetInvalid: "思考預算至少為 1024,且固定預算必須小於最大輸出。", + llmResponseIncomplete: "回應未完整結束或達到輸出上限;已輸出正文會保留。", + llmProtocolHeaderConflict: "Messages 已自動設定驗證與版本標頭,請移除額外 Headers 中的 x-api-key 與 anthropic-version。", + llmStreamError: "伺服器回傳串流錯誤,請檢查模型和請求引數。", + saveProtocol: "儲存協定設定", + thinkingModeHint: "依所選請求格式與模型支援的引數啟用、關閉或降低思考,不在提示詞注入控制指令。", bailianVocabularyIdLabel: '熱詞 Vocabulary ID(可選)', bailianVocabularyIdNote: '如已在百煉建立熱詞表,可填寫 vocab-...;留空則不下發熱詞。', bailianModelRealtimeHint: '即時模型 · 邊說邊出字。', @@ -1347,48 +1137,43 @@ export const zhTW: typeof zhCN = { appIdLabel: 'App ID(應用 ID)', accessKeyLabel: 'Access Key', resourceIdLabel: '資源 ID', - toolsLabel: '連接檢查', - toolsDesc: '先保存上方配置,再驗證當前模型連通性或拉取模型;失敗時仍可手動填寫模型 ID。', + toolsLabel: '連線檢查', + toolsDesc: '先儲存上方配置,再驗證當前模型連通性或拉取模型;失敗時仍可手動填寫模型 ID。', validate: '驗證', validating: '驗證中…', - planModelsHint: '開啟方案控制台,複製支援的文字模型 ID 並填入模型欄位。', - viewModels: '查看支援的模型', fetchModels: '拉取模型', loadingModels: '拉取模型中…', modelMissing: '未配置模型,請先填寫模型 ID。', modelsEmpty: '鑑權成功,但沒有返回可用模型。', modelsLoaded: '已拉取 {{count}} 個模型。', - selectModel: '選擇一個模型寫入上方字段', - modelSaved: '已保存模型 {{model}}。', - validateSuccess: '連接檢查通過。', - validateFailed: '連接檢查未通過。', - providerHttpStatus: '供應商接口返回 {{status}},請檢查 API Key 權限或 Endpoint。', - endpointMustUseHttps: - '允許使用 HTTP Endpoint,但請注意:API Key 和音訊內容可能在傳輸中外洩。', + selectModel: '選擇一個模型寫入上方欄位', + modelSaved: '已儲存模型 {{model}}。', + validateSuccess: '連線檢查透過。', + validateFailed: '連線檢查未透過。', + providerHttpStatus: '供應商介面返回 {{status}},請檢查 API Key 權限或 Endpoint。', + endpointMustUseHttps: '允許使用 HTTP Endpoint,但請注意:API Key 和音訊內容可能在傳輸中外洩。', endpointHttpWarning: '允許使用 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:// 地址在此不可用。', + 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 爲空。', - volcengineAppIdMissing: 'APP ID 爲空。', - volcengineAccessTokenMissing: 'Access Token 爲空。', + asrMissingTextField: 'ASR 響應缺少 text 欄位。', + apiKeyMissing: 'API Key 為空。', + endpointMissing: 'Endpoint 為空。', + volcengineAppIdMissing: 'APP ID 為空。', + volcengineAccessTokenMissing: 'Access Token 為空。', requestTimeout: '請求超時,請稍後重試。', }, shortcuts: { title: '快捷鍵設定', - descAcc: '所有快捷鍵全局生效,需要在權限設置中開啓輔助功能。', - descNoAcc: '所有快捷鍵全局生效。若無響應,請在權限頁查看全局快捷鍵監聽狀態。', + descAcc: '所有快捷鍵全域生效,需要在權限設定中開啟輔助功能。', + descNoAcc: '所有快捷鍵全域生效。若無響應,請在權限頁檢視全域快捷鍵監聽狀態。', startStop: '開始 / 停止錄音', cancel: '取消本次錄音', confirm: '膠囊確認插入', switchStyle: '切換到上一個風格', - openApp: '打開 OpenLess', + openApp: '開啟 OpenLess', stylePackTitle: '風格直達快捷鍵', stylePackDesc: '為常用風格包各配一個快捷鍵,按下直接切換;停用中的包會自動啟用。', stylePackAdd: '新增風格快捷鍵', @@ -1403,23 +1188,23 @@ export const zhTW: typeof zhCN = { agentVoiceTrigger: 'Less Computer 按住說話鍵', enable: '啟用', disable: '停用', - confirmHint: '點擊右側 ✓', - notSupported: '暫未支持', + confirmHint: '點選右側 ✓', + notSupported: '暫未支援', androidReadOnly: 'Android 不支援全域快捷鍵,請在概覽頁使用錄音按鈕。', }, permissions: { title: '權限', - descAcc: 'OpenLess 需要以下系統權限才能正常工作。授權後通常需要完全退出 App 重啓一次才生效。', - descNoAcc: 'OpenLess 需要麥克風可用,並依賴全局快捷鍵監聽狀態判斷 native hook 是否正常工作。', + descAcc: 'OpenLess 需要以下系統權限才能正常工作。授權後通常需要完全退出 App 重啟一次才生效。', + descNoAcc: 'OpenLess 需要麥克風可用,並依賴全域快捷鍵監聽狀態判斷 native hook 是否正常工作。', micLabel: '麥克風', micDesc: '用於捕獲你的語音輸入。', accLabel: '輔助功能', - accDesc: '用於監聽全局快捷鍵並將識別結果寫入光標位置。', - hotkeyLabel: '全局快捷鍵', - hotkeyDescWithAdapter: '當前適配器:{{adapter}}。用於判斷快捷鍵監聽是否已經安裝。', + accDesc: '用於監聽全域快捷鍵並將識別結果寫入游標位置。', + hotkeyLabel: '全域快捷鍵', + hotkeyDescWithAdapter: '當前介面卡:{{adapter}}。用於判斷快捷鍵監聽是否已經安裝。', hotkeyDescPlain: '用於判斷快捷鍵監聽是否已經安裝。', - networkLabel: '網絡', - networkDesc: '雲端 ASR / LLM 調用所必需。本地模式可關閉。', + networkLabel: '網路', + networkDesc: '雲端 ASR / LLM 呼叫所必需。本地模式可關閉。', networkOk: '可用', networkOffline: '不可用', checking: '檢查中…', @@ -1428,7 +1213,7 @@ export const zhTW: typeof zhCN = { denied: '未授權', indeterminate: '未確定', micNoDevice: '未偵測到麥克風', - openSystem: '打開系統設置', + openSystem: '開啟系統設定', restart: '重置授權並重新啟動', grant: '授權', rerunAndroidSetup: '重新執行設定向導', @@ -1436,7 +1221,7 @@ export const zhTW: typeof zhCN = { hotkeyStarting: '安裝中…', hotkeyFailed: '監聽失敗', windowsImeLabel: 'Windows 輸入法後端', - windowsImeDesc: '用於在語音會話期間臨時切換到 OpenLess TSF 輸入法,避免剪貼板插入限制。', + windowsImeDesc: '用於在語音會話期間臨時切換到 OpenLess TSF 輸入法,避免剪貼簿插入限制。', windowsImeInstalled: '已安裝', windowsImeUnavailable: '不可用', androidImeLabel: '輸入法 (IME)', @@ -1445,8 +1230,7 @@ export const zhTW: typeof zhCN = { androidImeDisabled: '未啟用', androidOverlayLabel: '懸浮窗', androidAccessibilityLabel: '無障礙服務', - androidAccessibilityImpact: - '開啟後可在不切換鍵盤的情況下把結果輸出到目前輸入框;未開啟時仍會複製到剪貼簿,需要手動貼上。', + androidAccessibilityImpact: '開啟後可在不切換鍵盤的情況下把結果輸出到目前輸入框;未開啟時仍會複製到剪貼簿,需要手動貼上。', androidAccessibilityGrantedStale: '已授權,未連線', androidAccessibilityMessages: { not_android: '無障礙狀態僅在 Android 上可用。', @@ -1456,13 +1240,11 @@ export const zhTW: typeof zhCN = { status_read_failed: '無法讀取無障礙狀態。', }, androidShizukuLabel: 'Shizuku 增強模式', - androidShizukuHint: - '可選功能,在部分機型無法手動開啟無障礙時盡力恢復;無法完全消除跨應用競態。裝置重啟後可能需要重新啟動 Shizuku。', + androidShizukuHint: '可選功能,在部分機型無法手動開啟無障礙時盡力還原;無法完全消除跨應用競態。裝置重啟後可能需要重新啟動 Shizuku。', androidShizukuOpenApp: '開啟 Shizuku', androidShizukuRequestPermission: '請求授權', - androidShizukuRecover: '恢復無障礙服務', - androidShizukuRecoverConfirm: - '是否透過 Shizuku 嘗試重新啟用 OpenLess 無障礙服務?寫入時會合併當時已啟用的服務。若全域開關為關閉,啟用後可能同時啟動清單中已登記的其他無障礙服務。', + androidShizukuRecover: '還原無障礙服務', + androidShizukuRecoverConfirm: '是否透過 Shizuku 嘗試重新啟用 OpenLess 無障礙服務?寫入時會合併當時已啟用的服務。若全域開關為關閉,啟用後可能同時啟動清單中已登記的其他無障礙服務。', androidShizukuYes: '是', androidShizukuNo: '否', androidShizukuAccessibilityOperational: '無障礙服務已註冊且正在執行。', @@ -1484,7 +1266,7 @@ export const zhTW: typeof zhCN = { binder_dead: 'Shizuku 連線已中斷,請重新啟動 Shizuku。', authorized_operational: 'Shizuku 已授權,無障礙服務執行正常。', authorized_registered_stale: 'Shizuku 已授權,無障礙服務已註冊但未執行。', - authorized_can_recover: 'Shizuku 已授權,可嘗試恢復無障礙服務。', + authorized_can_recover: 'Shizuku 已授權,可嘗試還原無障礙服務。', operational: '無障礙服務已註冊且正在執行。', registered_stale: '無障礙服務已註冊,但服務目前無法使用。', not_registered: '無障礙服務未在系統設定中啟用。', @@ -1499,14 +1281,14 @@ export const zhTW: typeof zhCN = { open_shizuku: '已開啟 Shizuku 管理器。', jni_error: '無法連線 Android Shizuku 後端。', status_parse_failed: '無法解析 Shizuku 狀態。', - user_not_confirmed: '需要使用者確認後才能恢復無障礙服務。', + user_not_confirmed: '需要使用者確認後才能還原無障礙服務。', shizuku_unavailable: 'Shizuku 未授權或不可用。', invalid_component: '無效的無障礙服務元件 ID。', service_connect_failed: '無法連線 Shizuku 特權服務。', - recovery_in_progress: '已有恢復操作正在進行,請稍後再試。', - parse_failed: '無法解析恢復結果。', + recovery_in_progress: '已有還原操作正在進行,請稍後再試。', + parse_failed: '無法解析還原結果。', service_not_bound: '設定已寫入,但無障礙服務尚未執行。', - success: '無障礙服務已恢復。', + success: '無障礙服務已還原。', read_failed: '無法讀取無障礙服務設定。', read_enabled_failed: '無法讀取無障礙總開關。', merge_failed: '無法合併無障礙服務清單。', @@ -1514,12 +1296,11 @@ export const zhTW: typeof zhCN = { write_enabled_failed: '無法啟用無障礙總開關。', readback_failed: '寫入後無法驗證無障礙設定。', oem_rollback: '廠商系統回滾了無障礙寫入。', - concurrent_change: '恢復過程中無障礙設定被其他應用修改。', - partial_rollback: '恢復失敗,且設定只能部分回滾。請檢查系統無障礙設定。', - manual_required: - '全域開關關閉且清單中已有其他無障礙服務時,無法安全自動恢復。請前往系統設定手動操作。', - max_retries: '多次嘗試後恢復失敗。', - internal_error: '恢復因內部錯誤失敗。', + concurrent_change: '還原過程中無障礙設定被其他應用修改。', + partial_rollback: '還原失敗,且設定只能部分回滾。請檢查系統無障礙設定。', + manual_required: '全域開關關閉且清單中已有其他無障礙服務時,無法安全自動還原。請前往系統設定手動操作。', + max_retries: '多次嘗試後還原失敗。', + internal_error: '還原因內部錯誤失敗。', unknown: '未知 Shizuku 狀態。', }, androidInsertStrategyLabel: '文字插入策略', @@ -1530,104 +1311,82 @@ export const zhTW: typeof zhCN = { androidOverlaySizeLabel: '懸浮窗大小', androidOverlaySizeHint: '調整懸浮按鈕直徑,儲存後在目前懸浮窗上生效並保留位置。', androidInsertStrategy: { accessibility: '自動輸出到輸入框', clipboard: '僅剪貼簿' }, - androidInsertStrategyHint: { - accessibility: '需要開啟無障礙服務;不可用時會複製到剪貼簿。', - clipboard: '不需要無障礙權限,只複製到剪貼簿,由你手動貼上。', - }, + androidInsertStrategyHint: { accessibility: '需要開啟無障礙服務;不可用時會複製到剪貼簿。', clipboard: '不需要無障礙權限,只複製到剪貼簿,由你手動貼上。' }, androidOverlayTrigger: { background: '退到背景', keyboard: '鍵盤彈出時', always: '常駐' }, - androidOverlayTriggerHint: { - background: '省電', - keyboard: '此模式已暫緩,既有設定會改回退到背景。', - always: '一直佔屏', - }, - androidOverlayTriggerDisabled: { - keyboard: '「鍵盤彈出時」暫緩開放,後續將以懸浮窗手勢取代鍵盤偵測。', - }, + androidOverlayTriggerHint: { background: '省電', keyboard: '此模式已暫緩,既有設定會改回退到背景。', always: '一直佔屏' }, + androidOverlayTriggerDisabled: { keyboard: '「鍵盤彈出時」暫緩開放,後續將以懸浮窗手勢取代鍵盤偵測。' }, androidOverlayActivationMode: { tap: '點按啟用', long_press: '長按啟用' }, - androidOverlayActivationModeHint: { - tap: '第一次點按進入啟用狀態,第二次點按開始普通聽寫。', - long_press: '按住進入啟用狀態;放開時結束目前錄音或問答輪次。', - }, + androidOverlayActivationModeHint: { tap: '第一次點按進入啟用狀態,第二次點按開始普通聽寫。', long_press: '按住進入啟用狀態;放開時結束目前錄音或問答輪次。' }, androidOverlayLeftSwipeAction: { translation: '翻譯聽寫', style_pack: '切換風格包' }, - androidOverlayLeftSwipeActionHint: { - translation: '啟用狀態左滑後按翻譯模式錄音。', - style_pack: '啟用狀態左滑後切換到上一個風格包。', - }, + androidOverlayLeftSwipeActionHint: { translation: '啟用狀態左滑後按翻譯模式錄音。', style_pack: '啟用狀態左滑後切換到上一個風格包。' }, androidOverlayCancelSwipeDirection: { up: '向上滑', down: '向下滑' }, - androidOverlayCancelSwipeDirectionHint: { - up: '錄音中向上滑取消本次聽寫,不轉寫、不插入。', - down: '錄音中向下滑取消本次聽寫,不轉寫、不插入。', - }, + androidOverlayCancelSwipeDirectionHint: { up: '錄音中向上滑取消本次聽寫,不轉寫、不插入。', down: '錄音中向下滑取消本次聽寫,不轉寫、不插入。' }, windowsIme: { installed: '已安裝。語音輸入時會臨時切換到 OpenLess 輸入法。', - notInstalled: '未安裝。OpenLess 正在使用剪貼板 / WM_PASTE 兜底。', + notInstalled: '未安裝。OpenLess 正在使用剪貼簿 / WM_PASTE 兜底。', registrationBroken: '註冊已損壞。請重新安裝 OpenLess 輸入法。', notWindows: '僅 Windows 可用。', }, }, advanced: { - multimodalPipelineTitle: '多模態辨識管線', - multimodalPipelineTitleHint: - '用單一多模態模型一步完成語音辨識;與傳統 ASR + LLM 設定完全隔離。', + multimodalPipelineTitle: '多模態辨識管線(實驗性)', + multimodalPipelineTitleHint: '用單一多模態模型一步完成語音辨識;與傳統 ASR + LLM 設定完全隔離。', multimodalPipelineLabel: '啟用多模態辨識管線', - multimodalPipelineHint: - '開啟後,「服務 → AI 提供者」頁出現「傳統模式 / 多模態模式」切換。傳統 = ASR + LLM;多模態 = 單一支援音訊的模型。兩套設定分開儲存、絕不共用憑證。', + multimodalPipelineHint: '開啟後,「服務 → AI 提供者」頁出現「傳統模式 / 多模態模式」切換。傳統 = ASR + LLM;多模態 = 單一支援音訊的模型。兩套設定分開儲存、絕不共用憑證。', streamingInsertTitle: '流式輸入', - streamingInsertTitleLinux: '流式輸入(實驗性)', - streamingInsertDesc: '逐字即時插入,降低感知延遲。不滿足條件時回落到一次性貼上。', + streamingInsertTitleLinux: '流式輸入(實驗)', + streamingInsertDesc: + '逐字即時插入,降低感知延遲。不滿足條件時回落到一次性貼上。', streamingInsertLabel: '流式輸入', - streamingInsertHintMac: '臨時切到 ABC 輸入源,避免 CJK IME 攔截,會話結束後自動切回。', - streamingInsertHintWindows: 'SendInput Unicode 直接送字元,繞過 TSF / IME,不切輸入法。', - streamingInsertHintLinux: '通過 fcitx5 插件提交文字;串流輸入使用 enigo + XTest 合成按鍵。', + streamingInsertHintMac: + '臨時切到 ABC 輸入源,避免 CJK IME 攔截,會話結束後自動切回。', + streamingInsertHintWindows: + 'SendInput Unicode 直接送字元,繞過 TSF / IME,不切輸入法。', + streamingInsertHintLinux: + '透過 fcitx5 外掛提交文字;串流輸入使用 enigo + XTest 合成按鍵。', streamingInsertSaveClipboardLabel: '同步到剪貼簿', - streamingInsertSaveClipboardHint: - '插入成功後把最終文字寫入剪貼簿,方便 Cmd+V 再次貼上;關閉後流式過程不動剪貼簿。', - localAsrTitle: '本地 ASR 模型', + streamingInsertSaveClipboardHint: '插入成功後把最終文字寫入剪貼簿,方便 Cmd+V 再次貼上;關閉後流式過程不動剪貼簿。', + localAsrTitle: '本地 ASR 模型(實驗性)', localAsrDesc: '把轉寫從雲端切到本機推理。僅推薦離線 / 隱私敏感場景。', localAsrWarningShort: '本地推理較慢,配置不足時可能吞字。', - qwen3Desc: '啓動之後,ASR 提供商將被接管。', + qwen3Desc: '啟動之後,ASR 提供商將被接管。', sherpaDesc: '啟用後,ASR 提供商將被接管。', - foundryDesc: '啓動之後,ASR 提供商將被接管。', - notSupportedHere: '本平臺暫不支持,未集成推理模塊。', - enable: '啓用', - alreadyActive: '已啓用', + foundryDesc: '啟動之後,ASR 提供商將被接管。', + notSupportedHere: '本平臺暫不支援,未整合推理模組。', + enable: '啟用', + alreadyActive: '已啟用', disableLocalLabel: '停用本地 ASR', - disableLocalDesc: '切回雲端 ASR(默認火山引擎 bigasr)。', + disableLocalDesc: '切回雲端 ASR(預設火山引擎 bigasr)。', disable: '停用', - platformNotSupported: '該平臺暫未支持本地 ASR 模型集成。', - confirmEnableLocalTitle: '啓用本地 ASR?', + platformNotSupported: '該平臺暫未支援本地 ASR 模型整合。', + confirmEnableLocalTitle: '啟用本地 ASR?', confirmEnableLocalBody: '啟用後轉寫會比雲端慢,準確率可能更低。', - confirm: '確認啓用', + confirm: '確認啟用', }, language: { - es: 'Español', - fr: 'Français', - de: 'Deutsch', - title: '界面語言', - desc: '切換 UI 顯示語言。當前會話即時生效,下次啓動自動沿用。', + title: '介面語言', + desc: '切換 UI 顯示語言。當前會話即時生效,下次啟動自動沿用。', label: '語言', - labelDesc: '選擇「跟隨系統」時按操作系統當前語言顯示。', + labelDesc: '選擇「跟隨系統」時按作業系統當前語言顯示。', followSystem: '跟隨系統', zh: '簡體中文', zhTW: '繁體中文', en: 'English', ja: '日本語 (Beta)', ko: '한국어 (Beta)', - restartHint: '部分原生菜單(系統托盤等)可能需要重啓 App 纔會切換。', + restartHint: '部分原生選單(系統託盤等)可能需要重啟 App 才會切換。', }, layout: { - title: '布局', + title: '佈局', }, theme: { title: '外觀', label: '主題', activityHeatmapLabel: '概覽頁顯示年度活動熱力圖', - stackedRowLayoutLabel: '易讀布局(防溢出換行)', - stackedRowLayoutDesc: - '小螢幕或大字時,同一行放不下的按鈕和選項會自動換到下一行,避免橫向擠出螢幕或文字被壓扁。', + stackedRowLayoutLabel: '易讀佈局(防溢出換行)', + stackedRowLayoutDesc: '小螢幕或大字時,同一行放不下的按鈕和選項會自動換到下一行,避免橫向擠出螢幕或文字被壓扁。', conservativeLayoutLabel: '保守排版', - conservativeLayoutDesc: - '除首頁、頂欄與底欄外,設定與功能頁改為單列滿寬,最大程度避免橫向溢出。', + conservativeLayoutDesc: '除首頁、頂欄與底欄外,設定與功能頁改為單列滿寬,最大程度避免橫向溢出。', system: '跟隨系統', light: '淺色', dark: '深色', @@ -1635,31 +1394,21 @@ export const zhTW: typeof zhCN = { remoteInput: { title: '遠端輸入', enableLabel: '啟用遠端輸入', - enableDesc: - '手機/平板瀏覽器連到電腦錄音,語音即時落到電腦游標處(需 HTTPS,首次存取要信任憑證)', - portLabel: '監聽連接埠', + enableDesc: '手機/平板瀏覽器連到電腦錄音,語音即時落到電腦遊標處(需 HTTPS,首次存取要信任憑證)', + portLabel: '監聽連線埠', defaultModeLabel: '預設錄音方式', - modeToggle: '點擊切換', + modeToggle: '點選切換', modeHold: '按住說話', urlLabel: '存取網址', pinLabel: '配對碼', regeneratePin: '重新產生', - portInUse: '連接埠 {{port}} 被佔用,請更換', + portInUse: '連線埠 {{port}} 被佔用,請更換', startError: '遠端輸入服務啟動失敗:{{reason}}', securityHint: '僅同一區域網路可存取,需輸入配對碼;不用時建議關閉。', - certHint: - '首次連線需核對根憑證指紋後再信任。升級舊版需設定一次;之後重新啟動和更換 IP 會保留信任。', - certFingerprintLabel: '本機根憑證 SHA-256', - certFingerprintCopy: '複製完整指紋', - certFingerprintCopied: '已複製指紋', - certFingerprintUnavailable: '完整指紋無法取得。請勿安裝或信任下載的憑證。', - certVerifyHint: - '在手機系統的憑證詳細資訊中找到 SHA-256,與此處全部 64 個字元逐一核對(忽略空格和冒號)。必須在開啟完全信任前完成。網頁、描述檔名稱與識別碼不能證明憑證身分;若不一致或無法查看完整指紋,請停止並移除已下載或安裝的描述檔。', - certProfileHint: '描述檔應只包含一張根憑證。若有其他憑證、VPN 或裝置管理設定,請勿安裝。', + certHint: '首次存取瀏覽器會提示憑證不受信任,按提示選擇「繼續存取」。', certTrustWarning: - '首次憑證下載無法驗證電腦身分,惡意區域網路裝置可能透過中間人攻擊替換根憑證。僅在可信任的家庭或私人網路中安裝,請勿在公共或共享網路操作。根憑證能簽發憑證,私密金鑰保存在這台電腦;不再使用時請從手機移除。', - certSetupLink: '複製 iPhone 憑證連結', - waitingStart: '服務尚未啟動。請關閉開關再打開一次,不要重啟軟體。', + '該憑證僅用於本機遠端輸入服務(無法簽發其他憑證),請勿信任來源不明的憑證;不再使用時可在手機系統設定中移除。', + waitingStart: '服務尚未啟動。請關閉開關再開啟一次,不要重啟軟體。', starting: '正在啟動遠端輸入服務…', urlsStale: '這些地址來自上次執行,可能已經過期。', }, @@ -1673,35 +1422,33 @@ export const zhTW: typeof zhCN = { upToDate: '當前已是最新版本。', updateError: '檢查或更新失敗,請稍後重試。', retryBtn: '重試', - openReleases: '打開 Releases', - source: '源碼', - docs: '文檔', + openReleases: '開啟 Releases', + source: '原始碼', + docs: '檔案', feedback: '反饋', - qq: '社區 QQ 羣', - qqDesc: '使用 QQ 搜索羣號加入,或掃碼進羣。', - copyQq: '複製羣號', + qq: '社群 QQ 群', + qqDesc: '使用 QQ 搜尋群號加入,或掃碼進群。', + copyQq: '複製群號', privacy: '隱私', privacyDesc: '錄音可能會傳送至你設定的雲端服務商進行轉寫。', localFirst: '本地優先', - linksTitle: '文件連結', + linksTitle: '檔案連結', betaChannelLabel: '加入 Beta 渠道', betaChannelToggleLabel: '啟用 Beta 渠道', - betaChannelDesc: - '開啟後,背景自動更新將跟隨 Beta 渠道;關閉則回到正式版。下方按鈕可隨時手動檢查 Beta 更新。', + betaChannelDesc: '開啟後,背景自動更新將跟隨 Beta 渠道;關閉則回到正式版。下方按鈕可隨時手動檢查 Beta 更新。', autoUpdateSectionTitle: '自動更新', autoUpdateCheckLabelAndroid: '自動檢查並下載更新', - autoUpdateCheckDescAndroid: - '啟動後及每 60 分鐘自動檢查更新;發現新版本後自動下載並開啟系統安裝器。渠道跟隨上方 Beta 開關。', + autoUpdateCheckDescAndroid: '啟動後及每 60 分鐘自動檢查更新;發現新版本後自動下載並開啟系統安裝器。渠道跟隨上方 Beta 開關。', betaChannelFetching: '正在獲取最新 Beta 版本…', betaChannelFetchBtn: '查詢最新 Beta', betaChannelLatestPrefix: '最新 Beta:', betaChannelDownloadBtn: '前往下載', betaChannelRefresh: '重新查詢', - betaChannelNoBeta: '尚未發佈過 Beta 版。', + betaChannelNoBeta: '尚未釋出過 Beta 版。', betaChannelFetchError: '獲取 Beta 版本資訊失敗,請稍後重試。', betaChannelUpToDate: '已是最新', betaChannelUpdateNow: '立即更新', - betaChannelUpdateNowTitle: '檢查並下載最新 Beta,然後彈出更新對話框', + betaChannelUpdateNowTitle: '檢查並下載最新 Beta,然後彈出更新對話方塊', betaChannelChecking: '檢查中…', updateDialog: { available: { @@ -1714,15 +1461,15 @@ export const zhTW: typeof zhCN = { }, downloading: { title: '正在下載更新', - desc: '正在下載 OpenLess {{version}},請保持應用打開。', + desc: '正在下載 OpenLess {{version}},請保持應用開啟。', }, downloaded: { title: '更新已準備好', - desc: 'OpenLess {{version}} 已安裝完成。是否現在自動重啓以應用更新?', + desc: 'OpenLess {{version}} 已安裝完成。是否現在自動重啟以應用更新?', }, installing: { title: '正在安裝更新', - desc: '正在安裝 OpenLess {{version}},請保持應用打開。', + desc: '正在安裝 OpenLess {{version}},請保持應用開啟。', }, install: '現在更新', androidInstall: '下載並開啟安裝器', @@ -1732,8 +1479,8 @@ export const zhTW: typeof zhCN = { }, downloadingLabel: '下載中…', installingLabel: '安裝中…', - later: '稍後手動重啓', - restartNow: '現在重啓', + later: '稍後手動重啟', + restartNow: '現在重啟', progress: '{{progress}}% · {{downloaded}} / {{total}}', progressUnknown: '已下載 {{downloaded}}', installError: { @@ -1744,85 +1491,31 @@ export const zhTW: typeof zhCN = { }, }, }, - startup: { - loading: '正在啟動 OpenLess…', - loadingDesc: '正在連接本機服務並檢查相容性。', - failed: 'OpenLess 暫時無法啟動', - recovery: - '請重新檢查。如果仍然失敗,請完全結束後重開應用程式;升級後出現此問題時,確認已安裝完整的同一版本。', - retry: '重新檢查', - details: '查看錯誤詳情', - }, modal: { - serviceViews: { - label: '服務設定分類', - llm: '語言模型', - asr: '語音辨識', - omni: '多模態模型', - models: '本機模型', - connections: '連線與擴充', - statusConfigured: '已設定', - statusMissing: '未設定', - }, - searchPlaceholder: '尋找設定分類…', - clearSearch: '清除搜尋', - categoriesLabel: '設定分類', - searchResults: '搜尋結果', - searchCount: '找到 {{count}} 個相關分類', - noResults: '找不到相關分類。試試「麥克風」「模型」或「主題」。', - autoSaveHint: '修改後自動儲存', - backToAdvanced: '返回實驗與擴充', - advancedPages: { - lessComputer: '選擇 Agent,設定模型、權限與工作目錄。', - claudeConsole: '偵測 Claude Code,並查看測試工作的執行輸出。', - multimodal: '管理多模態辨識的實驗性開關。', - debug: '保留偵錯錄音、探測游標上下文與匯出日誌。', - }, - descriptions: { - general: '選擇麥克風、設定錄音方式與文字輸入,也可連接手機輸入。', - shortcuts: '設定各功能的觸發方式,以及選取文字後的操作。', - services: '選擇語音辨識與文字處理服務,管理管道、本機模型和網路連線。', - appearance: '調整主題、頁面排版和介面語言,讓閱讀更舒服。', - privacy: '檢查系統權限與連線狀態,管理歷史、錄音和本機資料。', - advanced: '按需設定 Less Computer、多模態與除錯功能。', - about: '查看目前版本、更新管道與自動更新設定。', - }, - searchKeywords: { - general: '麥克風 錄音 輸入 手機 遠端 區域網路 PIN 膠囊 靜音 開機', - shortcuts: '快捷鍵 熱鍵 組合鍵 選取 潤飾 語音編輯', - services: 'ASR LLM API 管道 模型 雲端 本機 網路 代理 市場', - appearance: '主題 深色 淺色 暗色 語言 字體 排版 版面 熱圖', - privacy: '權限 麥克風 輔助功能 歷史 錄音 儲存 隱私 匯出', - advanced: 'Less Computer Claude Agent 多模態 Omni 除錯 日誌 實驗', - about: '版本 Beta 穩定 更新 升級', - }, - sections: { - appearance: '外觀與語言', - shortcuts: '快捷鍵與選取文字', - general: '錄音與輸入', - services: 'AI 服務與模型', - privacy: '權限與資料', - advanced: '實驗與擴充', + general: '通用', + services: '服務', + privacy: '隱私', + advanced: '高階', personalize: '個性化', - about: '關於與更新', + about: '關於', helpCenter: '幫助中心', - releaseNotes: '發佈日誌', + releaseNotes: '釋出日誌', }, personalize: { - font: '字體大小', - fontDesc: '整體縮放界面字號,立即生效。', + font: '字型大小', + fontDesc: '整體縮放介面字號,立即生效。', fontSmall: '小', fontMedium: '中', fontLarge: '大', blur: '毛玻璃強度', - blurDesc: '影響窗口內層 backdrop-filter 強度(macOS 系統磨砂層無法運行時調)。', + blurDesc: '影響視窗內層 backdrop-filter 強度(macOS 系統磨砂層無法執行時調)。', }, about: { tagline: '自然說話,完美書寫', checkUpdate: '檢查更新', checkUpdateBtn: '檢查', - docs: '文檔', + docs: '檔案', docsBtn: 'openless.app/docs ↗', feedback: '反饋渠道', feedbackBtn: 'GitHub Issues ↗', @@ -1837,12 +1530,11 @@ export const zhTW: typeof zhCN = { exportSuccess: '已儲存', exportFailed: '匯出失敗', privacy: '隱私', - privacyDesc: '識別結果保存在本機;已設定的雲端服務商可能接收錄音以完成轉寫。', + privacyDesc: '識別結果儲存在本機;已設定的雲端服務商可能接收錄音以完成轉寫。', localFirst: '本地優先', }, }, windowChrome: { - restore: '還原', minimize: '最小化', maximize: '最大化', close: '關閉', @@ -1862,7 +1554,7 @@ export const zhTW: typeof zhCN = { mediaPlayPause: '⏯ 媒體播放/暫停', custom: '自訂組合…', }, - fallback: '全局快捷鍵', + fallback: '全域快捷鍵', modeHoldSuffix: '(按住說話)', modeToggleSuffix: '(開始 / 停止)', modeAutoSuffix: '(自動識別)', @@ -1872,58 +1564,54 @@ export const zhTW: typeof zhCN = { adapter: { macEventTap: 'macOS Event Tap', windowsLowLevel: 'Windows 低層鍵盤 hook', - fcitx5: 'fcitx5 輸入法插件', + fcitx5: 'fcitx5 輸入法外掛', unavailable: '不可用', }, }, localAsr: { kicker: '本地 ASR', - title: '模型設置', + title: '模型設定', desc: '管理本機語音識別模型。', storageTitle: '模型儲存位置', storageBaseDir: '選擇的父目錄', storageModelsRoot: '實際模型目錄', storageDefault: '系統預設目錄', storageChoose: '更改目錄', - storageReset: '恢復預設', + storageReset: '還原預設', storageReveal: '開啟模型總目錄', - storageDesc: - '自訂目錄會在所選位置下建立 OpenLess/models,並自動遷移現有模型;遷移前會取消下載和釋放已載入模型。', + storageDesc: '自訂目錄會在所選位置下建立 OpenLess/models,並自動遷移現有模型;遷移前會取消下載和釋放已載入模型。', storageChooseTitle: '選擇本地模型儲存父目錄', - storageChangeConfirm: - '將把現有本地模型遷移到 {{path}}/OpenLess/models。遷移前會自動取消下載並釋放已載入模型。是否繼續?', + storageChangeConfirm: '將把現有本地模型遷移到 {{path}}/OpenLess/models。遷移前會自動取消下載並釋放已載入模型。是否繼續?', storageResetConfirm: '將把現有本地模型遷回系統預設目錄。當前目錄:{{path}}。是否繼續?', modelDir: '模型目錄', revealDir: '開啟目錄', deleteConfirm: '確定刪除 {{name}} 的本地模型檔案嗎?此操作無法復原。', appleSpeechTitle: 'Apple 語音辨識(macOS)', - appleSpeechDesc: - 'macOS 系統內建的語音辨識,在本機把語音轉成文字:不用下載模型、不用填 API Key,主流語言可完全離線、音訊不出本機。適合作雲端 ASR 網路不穩時的本地後備;首次使用會跳出系統語音辨識授權。', + appleSpeechDesc: 'macOS 系統內建的語音辨識,在本機把語音轉成文字:不用下載模型、不用填 API Key,主流語言可完全離線、音訊不出本機。適合作雲端 ASR 網路不穩時的本地後備;首次使用會跳出系統語音辨識授權。', appleSpeechUse: '使用 Apple 語音', qwenTitle: 'Qwen3-ASR 模型管理', qwenExperimentalBadge: '實驗性', - engineUnavailable: - '當前平臺暫未集成 Qwen3-ASR 推理引擎。可下載模型,但暫時無法啟用 Qwen3-ASR。', + engineUnavailable: '當前平臺暫未整合 Qwen3-ASR 推理引擎。可下載模型,但暫時無法啟用 Qwen3-ASR。', qwenUnavailableOnWindows: 'Windows 暫不支援 Qwen3-ASR,請使用上方的 Foundry Local Whisper。', foundryTitle: 'Windows Foundry Local Whisper', - foundryDesc: '在本機識別語音,無需 ASR API Key。首次使用需下載運行元件和模型。', + foundryDesc: '在本機識別語音,無需 ASR API Key。首次使用需下載執行元件和模型。', foundryAvailable: 'Windows 可用', foundryUnavailable: '僅 Windows 可用', - foundryRuntimeReady: '運行組件已下載', - foundryRuntimeMissing: '運行組件未下載', - foundryRuntimeSourceLabel: '運行組件下載源', + foundryRuntimeReady: '執行元件已下載', + foundryRuntimeMissing: '執行元件未下載', + foundryRuntimeSourceLabel: '執行元件下載源', foundryRuntimeSourceAuto: '自動(NuGet 優先)', foundryRuntimeSourceNuget: 'NuGet 官方源', foundryRuntimeSourceOrtNightly: 'Microsoft ORT-Nightly 源', - foundryRuntimeSourceDesc: '首次使用前需下載運行元件。', + foundryRuntimeSourceDesc: '首次使用前需下載執行元件。', foundrySelectedModel: '選擇模型', - foundryActiveModel: '當前默認 alias', - foundryLoadedModel: '已加載模型', - foundryNotLoaded: '未加載', + foundryActiveModel: '當前預設 alias', + foundryLoadedModel: '已載入模型', + foundryNotLoaded: '未載入', foundryError: 'Foundry 狀態', - foundrySetDefault: '設為默認 / 啟用 Windows 本地 ASR', + foundrySetDefault: '設為預設 / 啟用 Windows 本地 ASR', foundryEnabling: '正在啟用…', - foundryPrepare: '準備 / 下載 / 加載', + foundryPrepare: '準備 / 下載 / 載入', foundryPreparing: '正在準備…', foundryReleasing: '正在釋放…', foundryRetryPrepare: '繼續準備 / 重試', @@ -1931,9 +1619,9 @@ export const zhTW: typeof zhCN = { foundryCancelRequested: '已請求取消', foundryCancelling: '正在取消…', foundryCancelBestEffort: '已請求取消,會在當前步驟完成後停止。可稍後重試。', - foundryPrepareRuntime: '準備運行時組件', + foundryPrepareRuntime: '準備執行時元件', foundryPrepareModel: '下載模型', - foundryPrepareLoad: '加載模型', + foundryPrepareLoad: '載入模型', foundryPrepareModelSkipped: '模型已下載,跳過下載階段', foundryPrepareDone: '已完成', foundryPrepareWaiting: '等待中', @@ -1943,12 +1631,12 @@ export const zhTW: typeof zhCN = { foundryLanguageZh: '中文 zh', foundryLanguageEn: '英文 en', foundryLanguageDesc: '中文聽寫選中文,中英混用選自動。', - foundryModelSmall: 'Whisper Small(默認 / 平衡)', - foundryModelSmallDesc: '默認平衡選項,兼顧質量與資源佔用。', + foundryModelSmall: 'Whisper Small(預設 / 平衡)', + foundryModelSmallDesc: '預設平衡選項,兼顧質量與資源佔用。', foundryModelMedium: 'Whisper Medium(更高質量)', - foundryModelMediumDesc: '更高準確率,適合性能更強、可接受更大下載和更慢推理的設備。', + foundryModelMediumDesc: '更高準確率,適合效能更強、可接受更大下載和更慢推理的裝置。', foundryModelLarge: 'Whisper Large V3 Turbo(最高質量)', - foundryModelLargeDesc: '更高質量的大模型選項,適合高配設備和質量優先場景。', + foundryModelLargeDesc: '更高質量的大模型選項,適合高配裝置和質量優先場景。', foundryModelBase: 'Whisper Base(更快 / 更省資源)', foundryModelBaseDesc: '更快、資源佔用更低,適合日常輕量使用。', foundryModelTiny: 'Whisper Tiny(最快 / 冒煙測試)', @@ -1968,27 +1656,23 @@ export const zhTW: typeof zhCN = { sherpaLanguageKo: '韓語 ko', sherpaLanguageYue: '粵語 yue', sherpaModelSenseVoice: 'SenseVoice Small(預設 / 中文優先)', - sherpaModelSenseVoiceDesc: '預設實驗模型,適合中文與中英混合聽寫。', + sherpaModelSenseVoiceDesc: '預設實驗模型,適閤中文與中英混合聽寫。', sherpaModelParaformer: 'Paraformer 中文', sherpaModelParaformerDesc: '面向中文的實驗模型。', sherpaModelWhisper: 'Whisper Small 多語言', sherpaModelWhisperDesc: '與 Whisper 系列行為一致的多語言實驗兜底模型。', sherpaModelWhisperLargeV3: 'Whisper Large V3(多語)', - sherpaModelWhisperLargeV3Desc: - '開源多語通用中效果最好的 Whisper 檔,品質高、體積大,適合高品質轉寫。', - sherpaModelZipformer: 'Zipformer 串流(中英)', - sherpaModelZipformerDesc: '邊說邊出的串流中英模型,延遲最低,適合即時聽寫。', + sherpaModelWhisperLargeV3Desc: '開源多語通用中效果最好的 Whisper 檔,品質高、體積大,適合高品質轉寫。', sherpaModelQwen3: 'Qwen3-ASR 0.6B INT8', - sherpaModelQwen3Desc: - '轉換後的 sherpa-onnx Qwen3-ASR 模型,支援多語言識別與更強的長上下文能力。', - modelSelectTitle: '本機模型', - modelSelectDesc: '查看下載狀態、管理檔案,或載入模型進行測試。', + sherpaModelQwen3Desc: '轉換後的 sherpa-onnx Qwen3-ASR 模型,支援多語言識別與更強的長上下文能力。', + modelSelectTitle: '模型下載與管理', + modelSelectDesc: '下載的模型會自動出現在上方「ASR 語音轉寫」的本地供應商裡,選擇即可使用;點選「+ 下載新模型」取得更多模型。', modelSelectPlaceholder: '選擇已下載的模型…', modelSelectEmpty: '還沒有已下載的模型,先到「下載與管理」下載一個。', groupDownload: '下載與管理', groupOther: '其他', mirrorLabel: '下載鏡像源', - mirrorDesc: '官方源在國外網絡更穩;hf-mirror.com 是國內社區維護的鏡像。', + mirrorDesc: '官方源在國外網路更穩;hf-mirror.com 是國內社群維護的鏡像。', mirrorHuggingface: 'HuggingFace 官方 (huggingface.co)', mirrorHfMirror: '國內鏡像 (hf-mirror.com)', activeBadge: '當前使用', @@ -1998,51 +1682,41 @@ export const zhTW: typeof zhCN = { resume: '繼續下載', cancel: '取消', delete: '刪除', - setActive: '設為默認', + setActive: '設為預設', failed: '失敗', cancelled: '已取消', - files: '文件', + files: '檔案', sizeLoading: '正在查詢尺寸…', sizeUnknown: '尺寸未知', performanceWarning: '本地 ASR 適合離線或隱私敏感場景,首次使用需下載模型。', - test: '加載並測試', + test: '載入並測試', testRunning: '測試中…', - testHeading: '內置音頻測試', + testHeading: '內建音訊測試', testExpected: '原文', testActual: '識別', - testStats: '音頻時長 {{audio}}s · 加載 {{load}}s · 推理 {{transcribe}}s · 後端 {{backend}}', + testStats: '音訊時長 {{audio}}s · 載入 {{load}}s · 推理 {{transcribe}}s · 後端 {{backend}}', testFailed: '測試失敗', - engineStatusLabel: '內存中的引擎', - engineLoaded: '已加載:{{model}}', - engineUnloaded: '未加載(首次聽寫需先加載模型)', - loadNow: '立即加載', + engineStatusLabel: '記憶體中的引擎', + engineLoaded: '已載入:{{model}}', + engineUnloaded: '未載入(首次聽寫需先載入模型)', + loadNow: '立即載入', releaseNow: '立即釋放', - keepLoadedLabel: '保持加載多久', - keepLoadedDesc: - '決定目前本地 ASR 引擎在下次轉寫後保持載入多久;「不釋放」會持續駐留至手動釋放或退出。', + keepLoadedLabel: '保持載入多久', + keepLoadedDesc: '決定 Qwen3-ASR 用完後多久從記憶體釋放,避免長期佔用記憶體。', keepImmediate: '說完話立即釋放', keep1min: '上次使用後 1 分鐘', - keep5min: '上次使用後 5 分鐘(默認)', + keep5min: '上次使用後 5 分鐘(預設)', keep30min: '上次使用後 30 分鐘', keepForever: '不釋放(始終保留)', - sidebarTitle: '已下載與下載中', + sidebarTitle: '模型列表', activePill: '目前使用', setDefault: '設為預設', downloading: '下載中', startDownload: '開始下載', downloadNewModel: '下載新模型', - activeModelLabel: '使用中的模型', - pickerNoModelDownloaded: '尚無已下載的模型,請先在本機模型頁下載。', - partialDownloadsLabel: '未完成下載', - partialDownloadsDesc: '存在中斷下載的暫存殘留,可一鍵清理,不影響已安裝模型。', - cleanupIncomplete: '清理未完成下載', - languagesLabel: '語言', - partialBytesLabel: '殘留檔案', downloadDialogTitle: '下載模型', - downloadDialogAlreadyHave: - '模型檔案已下載。可返回模型頁載入並測試,或在「ASR 語音轉寫」中選擇對應供應商。', - downloadDialogDesc: - '查看模型大小與簡介,選擇後開始下載。下載完成後,在「語音辨識」中選擇對應的本機服務。', + downloadDialogAlreadyHave: '該模型已下載,可直接使用', + downloadDialogDesc: '選擇左側模型後點選「開始下載」。下載完成後,到「服務 → AI 提供商 → ASR 語音轉寫」選擇本地模型供應商即可使用。', detailRepo: '模型倉庫', hfDownloads: '下載量', hfLikes: '收藏數', @@ -2052,26 +1726,12 @@ export const zhTW: typeof zhCN = { detailFiles: '個檔案', detailDownloaded: '已下載', - detailEmpty: '選擇一個模型查看詳情', + detailEmpty: '從左側選擇模型檢視詳情', foundryLanguage: '語言', foundryRuntimeSource: '執行時來源', mirrorGithubRelease: 'GitHub Releases', keep: '保持載入', downloadSettingsTitle: '下載與儲存設定', downloadSettingsDesc: '鏡像源 · 模型儲存位置 · 記憶體引擎', - libraryEmptyTitle: '還沒有本機模型', - libraryEmptyDesc: - '下載一個語音辨識模型,讓音訊在本機處理。已有模型卻未顯示時,可重新讀取目錄。', - catalogTitle: '模型目錄', - catalogEmpty: '目前沒有可顯示的模型。請重新讀取目錄後再試。', - reloadCatalog: '重新讀取', - engineLabel: '辨識引擎', - sizeLabel: '模型大小', - allEngines: '全部', - backToCatalog: '返回模型目錄', - detailsTitle: '模型詳情', - testActivateHint: '「載入並測試」會將此模型設為目前使用,再執行內建音訊測試。', - downloadProgressHint: '開始後返回模型頁查看進度,也可隨時取消下載。', - errorDetails: '錯誤詳情', }, };