diff --git a/dashboard/src/i18n/composables.ts b/dashboard/src/i18n/composables.ts index c67d749034..30a7f9748e 100644 --- a/dashboard/src/i18n/composables.ts +++ b/dashboard/src/i18n/composables.ts @@ -103,7 +103,7 @@ export function useI18n() { const locale = computed(() => currentLocale.value); // 获取可用语言列表 - const availableLocales: Locale[] = ['zh-CN', 'en-US', 'ru-RU']; + const availableLocales: Locale[] = ['zh-CN', 'zh-HK', 'zh-TW', 'en-US', 'ru-RU']; // 检查是否已加载 const isLoaded = computed(() => Object.keys(translations.value).length > 0); @@ -158,6 +158,8 @@ export function useLanguageSwitcher() { const languageOptions = computed(() => [ { value: 'zh-CN', label: '简体中文', flag: '🇨🇳' }, + { value: 'zh-HK', label: '繁體中文(香港)', flag: '🇭🇰' }, + { value: 'zh-TW', label: '繁體中文(台灣)', flag: '🇹🇼' }, { value: 'en-US', label: 'English', flag: '🇺🇸' }, { value: 'ru-RU', label: 'Русский', flag: '🇷🇺' } ]); @@ -221,7 +223,7 @@ function deepMerge(target: Record, source: Record) { export async function setupI18n() { // 从localStorage获取保存的语言设置 const savedLocale = localStorage.getItem('astrbot-locale') as Locale; - const initialLocale = savedLocale && ['zh-CN', 'en-US', 'ru-RU'].includes(savedLocale) + const initialLocale = savedLocale && ['zh-CN', 'zh-HK', 'zh-TW', 'en-US', 'ru-RU'].includes(savedLocale) ? savedLocale : 'zh-CN'; diff --git a/dashboard/src/i18n/locales/zh-HK/core/actions.json b/dashboard/src/i18n/locales/zh-HK/core/actions.json new file mode 100644 index 0000000000..fff26f6d42 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/core/actions.json @@ -0,0 +1,24 @@ +{ + "create": "建立", + "read": "讀取", + "update": "更新", + "delete": "刪除", + "search": "搜尋", + "filter": "篩選", + "sort": "排序", + "export": "匯出", + "import": "匯入", + "backup": "備份", + "restore": "還原", + "copy": "複製", + "paste": "貼上", + "cut": "剪下", + "undo": "復原", + "redo": "重做", + "refresh": "重新整理", + "submit": "提交", + "reset": "重設", + "clear": "清除", + "save": "儲存", + "close": "關閉" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/core/common.json b/dashboard/src/i18n/locales/zh-HK/core/common.json new file mode 100644 index 0000000000..3930c73264 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/core/common.json @@ -0,0 +1,133 @@ +{ + "save": "儲存", + "cancel": "取消", + "close": "關閉", + "copy": "複製", + "copied": "已複製", + "copyFailed": "複製失敗", + "delete": "刪除", + "edit": "編輯", + "add": "新增", + "confirm": "確認", + "loading": "載入中...", + "success": "成功", + "error": "錯誤", + "warning": "警告", + "info": "資訊", + "name": "名稱", + "description": "描述", + "author": "作者", + "status": "狀態", + "actions": "操作", + "enable": "啟用", + "disable": "停用", + "enabled": "已啟用", + "disabled": "已停用", + "reload": "重新載入", + "configure": "設定", + "install": "安裝", + "uninstall": "解除安裝", + "update": "更新", + "language": "語言", + "settings": "設定", + "locale": "zh-HK", + "type": "輸入", + "press": "點擊", + "longPress": "長按", + "yes": "是", + "no": "否", + "imagePreview": "圖片預覽", + "autoDetect": "自動偵測", + "dialog": { + "confirmTitle": "確認操作", + "confirmMessage": "你確定要執行此操作?", + "confirmButton": "確定", + "cancelButton": "取消" + }, + "restart": { + "waiting": "正在等待 AstrBot 重新啟動...", + "maxRetriesReached": "輪詢狀態已達上限,請手動檢查。" + }, + "readme": { + "title": "插件說明文件", + "buttons": { + "viewOnGithub": "在 GitHub 查看 Repo", + "refresh": "重新整理文件" + }, + "loading": "正在載入 README 文件...", + "errors": { + "fetchFailed": "取得 README 失敗", + "fetchError": "取得 README 時發生錯誤" + }, + "empty": { + "title": "此插件未提供文件連結或 GitHub Repo 網址。", + "subtitle": "請前往插件市場查看或向插件作者索取更多資訊。" + } + }, + "changelog": { + "title": "更新日誌", + "loading": "正在載入更新日誌...", + "empty": { + "title": "此插件未提供更新日誌", + "subtitle": "開發者可以在插件目錄中加入 CHANGELOG.md 來提供更新日誌" + } + }, + "editor": { + "fullscreen": "全螢幕編輯", + "editingTitle": "編輯內容" + }, + "templateList": { + "addEntry": "新增項目", + "empty": "暫無項目,請選擇模板以新增", + "missingTemplate": "找不到對應的模板,請刪除後重新新增。", + "unknownTemplate": "未指定模板" + }, + "list": { + "addItemPlaceholder": "新增項目,按 Enter 確認", + "addButton": "新增", + "addMore": "載入更多", + "batchImport": "批次匯入", + "batchImportTitle": "批次匯入", + "batchImportLabel": "每行一個項目", + "batchImportPlaceholder": "例如:\n項目 1\n項目 2\n項目 3", + "batchImportHint": "每一行將視為一個獨立的項目,空白行會自動略過", + "batchImportButton": "匯入 {count} 項", + "noItems": "暫無項目", + "noItemsHint": "暫無項目,在上方輸入文字後按 Enter 新增", + "inputPlaceholder": "輸入完成後按 Enter 新增", + "editTitle": "編輯列表項目", + "modifyButton": "修改" + }, + "itemCard": { + "enabled": "已啟用", + "disabled": "已停用", + "delete": "刪除", + "edit": "編輯", + "copy": "複製", + "noData": "暫無資料" + }, + "objectEditor": { + "dialogTitle": "編輯鍵值 (Key-Value)", + "noItems": "暫無項目", + "noParams": "暫無參數", + "presets": "預設", + "newKeyLabel": "新鍵名", + "valueTypeLabel": "值類型", + "keyExists": "鍵名已存在", + "invalidJson": "JSON 格式錯誤", + "placeholders": { + "keyName": "鍵名", + "stringValue": "字串值", + "numberValue": "數值", + "jsonValue": "JSON" + } + }, + "firstNotice": { + "title": "首次提示", + "loading": "正在載入首次提示...", + "empty": { + "title": "暫無首次提示內容", + "subtitle": "找不到 FIRST_NOTICE.md 或者是空白檔案。" + } + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/core/header.json b/dashboard/src/i18n/locales/zh-HK/core/header.json new file mode 100644 index 0000000000..7fb4a63e59 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/core/header.json @@ -0,0 +1,108 @@ +{ + "logoTitle": "AstrBot 儀表板", + "version": { + "hasNewVersion": "AstrBot 有新版本!", + "dashboardHasNewVersion": "WebUI 有新版本!" + }, + "buttons": { + "update": "更新", + "account": "帳戶", + "theme": { + "light": "淺色模式", + "dark": "深色模式" + } + }, + "updateDialog": { + "title": "更新 AstrBot", + "currentVersion": "目前版本", + "status": { + "checking": "正在檢查更新...", + "switching": "正在切換版本...", + "updating": "正在更新..." + }, + "tabs": { + "release": "😊 正式版" + }, + "updateToLatest": "更新至最新版本", + "preRelease": "Pre-release", + "preReleaseWarning": { + "title": "Pre-release 版本提醒", + "description": "標有 Pre-release 的版本可能存在未知問題或 Bug,不建議在正式環境中使用。如發現問題,請提交至 ", + "issueLink": "GitHub Issues" + }, + "tip": "💡 提示: ", + "tipContinue": "預設在切換版本時會下載對應版本的 WebUI 檔案。WebUI 的原始碼位於專案的 dashboard 目錄中,你可以使用 npm 自行建置。", + "dockerTip": "切換版本時,會同時嘗試更新機械人主程式與管理面板。如果你使用 Docker 部署,也可以重新拉取 (Pull) 映像檔或使用 ", + "dockerTipLink": "watchtower", + "dockerTipContinue": "自動監控並更新。", + "table": { + "tag": "標籤", + "publishDate": "發佈時間", + "content": "內容", + "sourceUrl": "原始網址", + "actions": "操作", + "view": "查看", + "switch": "切換" + }, + "releaseNotes": { + "title": "版本說明 (Release Notes)" + }, + "redirectConfirm": { + "title": "即將跳轉", + "message": "將跳轉至 GitHub Releases 頁面,是否繼續?", + "latestLabel": "最新版本", + "targetVersion": "目標版本:", + "currentVersion": "目前版本:", + "guideTitle": "跳轉後建議:", + "guideStep1": "根據你的系統架構下載對應的安裝檔。", + "guideStep2": "安裝完成後重新啟動 AstrBot。", + "guideStep3": "如果你使用 Docker,請優先使用更新映像檔 (Image) 的方式。" + }, + "desktopApp": { + "title": "更新桌面版 App", + "message": "將檢查並升級 AstrBot 桌面版 App。", + "currentVersion": "目前版本:", + "latestVersion": "最新版本:", + "checking": "正在檢查桌面版更新...", + "hasNewVersion": "發現新版本,可點擊確認進行升級。", + "isLatest": "已是最新版本", + "installing": "正在下載並安裝更新,完成後將自動重啟 App...", + "checkFailed": "檢查更新失敗,請稍後再試。", + "installFailed": "升級失敗,請稍後再試。" + }, + "dashboardUpdate": { + "title": "單獨更新管理面板至最新版本", + "currentVersion": "目前版本", + "hasNewVersion": "有新版本!", + "isLatest": "已經是最新版本。", + "downloadAndUpdate": "下載並更新" + } + }, + "accountDialog": { + "title": "修改帳戶", + "securityWarning": "安全提醒:請修改預設密碼以確保帳戶安全", + "form": { + "currentPassword": "目前密碼", + "newPassword": "新密碼", + "confirmPassword": "確認新密碼", + "newUsername": "新使用者名稱 (選填)", + "passwordHint": "密碼最少需要 8 個字元", + "confirmPasswordHint": "請再次輸入新密碼以作確認", + "usernameHint": "留空代表不修改使用者名稱", + "defaultCredentials": "預設使用者名稱與密碼皆為 astrbot" + }, + "validation": { + "passwordRequired": "請輸入密碼", + "passwordMinLength": "密碼最少需要 8 個字元", + "passwordMatch": "兩次輸入的密碼不一致", + "usernameMinLength": "使用者名稱最少需要 3 個字元" + }, + "actions": { + "save": "儲存變更", + "cancel": "取消" + }, + "messages": { + "updateFailed": "修改失敗,請再試一次" + } + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/core/navigation.json b/dashboard/src/i18n/locales/zh-HK/core/navigation.json new file mode 100644 index 0000000000..6aca80d0fa --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/core/navigation.json @@ -0,0 +1,49 @@ +{ + "welcome": "歡迎", + "dashboard": "數據統計", + "platforms": "機械人", + "providers": "模型供應商", + "commands": "指令管理", + "persona": "人格設定", + "subagent": "SubAgent 編排", + "toolUse": "MCP", + "extension": "插件", + "extensionTabs": { + "installed": "AstrBot 插件", + "market": "插件市場", + "mcp": "MCP", + "skills": "Skills", + "components": "管理行為" + }, + "config": "設定檔", + "chat": "聊天", + "cron": "未來任務", + "conversation": "對話數據", + "sessionManagement": "自訂規則", + "console": "平台日誌", + "trace": "追蹤", + "alkaid": "Alkaid", + "knowledgeBase": "知識庫", + "about": "關於", + "settings": "設定", + "changelog": "更新日誌", + "documentation": "官方文件", + "faq": "FAQ", + "github": "GitHub", + "drag": "拖曳", + "groups": { + "more": "更多功能" + }, + "changelogDialog": { + "title": "更新日誌", + "loading": "載入中...", + "error": "載入失敗", + "notFound": "找不到此版本的更新日誌", + "selectVersion": "選擇版本", + "current": "目前" + }, + "configTabs": { + "normal": "一般設定", + "system": "系統設定" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/core/shared.json b/dashboard/src/i18n/locales/zh-HK/core/shared.json new file mode 100644 index 0000000000..063a1df6ba --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/core/shared.json @@ -0,0 +1,111 @@ +{ + "knowledgeBaseSelector": { + "notSelected": "未選擇", + "buttonText": "選擇知識庫...", + "dialogTitle": "選擇知識庫", + "loading": "載入中...", + "noKnowledgeBases": "暫無知識庫", + "createKnowledgeBase": "建立知識庫", + "selectedCount": "已選擇 {count} 個知識庫", + "confirmSelection": "確認選擇", + "cancelSelection": "取消", + "noDescription": "無描述", + "documentCount": "{count} 個文件", + "chunkCount": "{count} 個區塊" + }, + "pluginSetSelector": { + "notSelected": "未啟用任何插件", + "allPlugins": "啟用所有插件 (*)", + "selectedCount": "已選擇 {count} 個插件", + "buttonText": "選擇插件集合...", + "dialogTitle": "選擇插件集合", + "loading": "載入中...", + "enableAll": "啟用所有插件", + "enableNone": "不啟用任何插件", + "customSelect": "自訂選擇", + "noPlugins": "暫無可用插件", + "confirmSelection": "確認選擇", + "cancelSelection": "取消", + "noDescription": "無描述", + "notActivated": "未啟用", + "note": "*不顯示系統插件以及已在插件頁面中停用的插件。", + "selectedPluginsLabel": "已選擇的插件:", + "allPluginsLabel": "所有插件" + }, + "providerSelector": { + "notSelected": "未選擇", + "buttonText": "選擇供應商...", + "dialogTitle": "選擇供應商", + "loading": "載入中...", + "noProviders": "暫無可用的供應商", + "confirmSelection": "確認選擇", + "cancelSelection": "取消", + "clearSelection": "清除選擇", + "clearSelectionSubtitle": "清除目前的選擇", + "unknownType": "未知類型", + "createProvider": "建立供應商", + "manageProviders": "供應商管理", + "selectProviderPool": "選擇供應商池...", + "selectedCount": "已選擇 {count} 個供應商" + }, + "personaSelector": { + "notSelected": "未選擇", + "defaultPersona": "預設人格", + "buttonText": "選擇人格...", + "dialogTitle": "選擇人格", + "noDescription": "無描述", + "noPersonas": "暫無可用的人格", + "createPersona": "建立新人格", + "cancelSelection": "取消", + "confirmSelection": "確認選擇", + "selectPersonaPool": "選擇人格池...", + "rootFolder": "全部人格", + "emptyFolder": "此資料夾是空的" + }, + "personaQuickPreview": { + "title": "快速預覽", + "loading": "載入中...", + "noPersonaSelected": "未選擇人格", + "personaNotFound": "找不到此人格的詳細資訊", + "systemPromptLabel": "系統提示詞", + "toolsLabel": "工具", + "skillsLabel": "技能(Skills)", + "originLabel": "來源", + "originNameLabel": "來源名稱", + "toolInactive": "已停用", + "toolInactiveTooltip": "此工具已停用。你可以在 插件->管理行為->函數 Tools 中重新啟用。", + "allTools": "可使用所有工具", + "allToolsWithCount": "可使用所有工具({count})", + "noTools": "未設定工具", + "allSkills": "全部 Skills 可用", + "allSkillsWithCount": "全部 Skills 可用({count})", + "noSkills": "未設定 Skills" + }, + "t2iTemplateEditor": { + "buttonText": "自訂 T2I 模板", + "dialogTitle": "自訂文字轉圖片 HTML 模板", + "newTemplateNameLabel": "輸入新模板名稱", + "nameRequired": "名稱不能留空", + "selectTemplateLabel": "選擇模板", + "applied": "已套用", + "apply": "套用", + "templateEditor": "模板編輯器", + "new": "新增", + "resetBase": "重設基礎模板", + "delete": "刪除", + "save": "儲存", + "livePreview": "即時預覽(可能會有少許差異)", + "refreshPreview": "重新整理預覽", + "previewText": "這是一段範例文字,用來預覽模板的效果。\n\n這裡可以包含多行文字,支援換行與各種格式。", + "syntaxHint": "支援 jinja2 語法。可使用的變數有:text | safe(需要渲染的文字), version(AstrBot 版本)", + "saveAndApply": "儲存並套用目前編輯中的模板", + "confirmReset": "確認重設", + "confirmResetMessage": "確定要將 'base' 模板還原為預設內容?目前編輯器內任何未儲存的更改都會遺失。此動作無法復原。", + "confirmResetButton": "確認重設", + "confirmDelete": "確認刪除", + "confirmDeleteMessage": "確定要刪除模板 '{name}'?此動作無法復原。", + "confirmDeleteButton": "確認刪除", + "confirmAction": "確認操作", + "confirmApplyMessage": "確定要儲存對 '{name}' 的修改,並將其設為新的作用中模板嗎?" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/core/status.json b/dashboard/src/i18n/locales/zh-HK/core/status.json new file mode 100644 index 0000000000..336d48edb2 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/core/status.json @@ -0,0 +1,22 @@ +{ + "loading": "載入中", + "success": "成功", + "error": "錯誤", + "warning": "警告", + "info": "資訊", + "pending": "等待中", + "processing": "處理中", + "completed": "已完成", + "failed": "已失敗", + "cancelled": "已取消", + "timeout": "逾時", + "connecting": "連線中", + "connected": "已連線", + "disconnected": "已斷線", + "online": "上線", + "offline": "離線", + "active": "啟用中", + "inactive": "未啟用", + "ready": "準備就緒", + "busy": "忙碌中" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/about.json b/dashboard/src/i18n/locales/zh-HK/features/about.json new file mode 100644 index 0000000000..fe82114588 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/about.json @@ -0,0 +1,17 @@ +{ + "hero": { + "title": "AstrBot", + "subtitle": "A project out of interests and loves ❤️", + "starButton": "畀粒 Star 呢個 Project! 🌟", + "issueButton": "提交 Issue" + }, + "contributors": { + "title": "貢獻者", + "description": "這個 Project 由開源社群的許多開發者共同維護。感謝每一位 Contributor 的幫忙!", + "viewLink": "查看 AstrBot 的貢獻者" + }, + "stats": { + "title": "全球部署", + "license": "AstrBot 使用 AGPL v3 授權條款開源" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/alkaid/index.json b/dashboard/src/i18n/locales/zh-HK/features/alkaid/index.json new file mode 100644 index 0000000000..13680a390e --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/alkaid/index.json @@ -0,0 +1,44 @@ +{ + "title": "Alkaid 實驗室", + "subtitle": "探索最前線 AI 功能", + "comingSoon": "前方的世界,稍後再來探索吧!", + "page": { + "title": "The Alkaid Project.", + "subtitle": "AstrBot Alpha Project", + "navigation": { + "knowledgeBase": "知識庫 (Plugin)", + "longTermMemory": "長期記憶 (Long Term Memory) 層", + "other": "..." + } + }, + "features": { + "knowledgeBase": "知識庫 (Knowledge Base)", + "longTermMemory": "長期記憶 (Long Term Memory)", + "advancedChat": "進階對話 (Advanced Chat)", + "multiModal": "多模態 (Multi-modal) 互動" + }, + "status": { + "experimental": "實驗性 (Experimental)", + "beta": "Beta 版", + "stable": "穩定版 (Stable)", + "deprecated": "已棄用 (Deprecated)" + }, + "sigma": { + "subtitle": "AstrBot Experimental Project", + "visualization": "視覺化 (Visualization)", + "filterUserId": "篩選 User ID", + "filter": "篩選", + "resetFilter": "重設篩選", + "refreshGraph": "重新整理圖表", + "nodeDetails": "節點 (Node) 詳情", + "id": "ID", + "type": "類型", + "name": "名稱", + "userId": "User ID", + "timestamp": "時間戳記 (Timestamp)", + "graphStats": "圖表統計", + "nodeCount": "節點數量", + "edgeCount": "邊緣 (Edge) 數量", + "inDevelopment": "功能開發中" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/alkaid/knowledge-base.json b/dashboard/src/i18n/locales/zh-HK/features/alkaid/knowledge-base.json new file mode 100644 index 0000000000..65482004e3 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/alkaid/knowledge-base.json @@ -0,0 +1,155 @@ +{ + "title": "知識庫", + "subtitle": "管理與搜尋知識庫內容", + "documents": { + "title": "文件列表", + "name": "文件名稱", + "size": "檔案大小", + "uploadTime": "上載時間", + "status": "狀態", + "actions": "操作" + }, + "management": { + "delete": "刪除", + "preview": "預覽", + "download": "下載", + "reindex": "重新建立索引 (Reindex)" + }, + "notInstalled": { + "title": "尚未安裝知識庫插件", + "install": "立即安裝" + }, + "empty": { + "title": "暫無知識庫,請立即建立一個!🙂", + "create": "建立知識庫" + }, + "list": { + "title": "知識庫列表", + "create": "建立知識庫", + "config": "設定", + "checkUpdate": "檢查插件更新", + "updatePlugin": "更新插件至 {version}", + "knowledgeCount": "條知識", + "tips": "提示: 可以在聊天頁面使用 /kb 指令查看使用方法!" + }, + "createDialog": { + "title": "建立新知識庫", + "nameLabel": "知識庫名稱", + "descriptionLabel": "描述", + "descriptionPlaceholder": "知識庫的簡單描述...", + "embeddingModelLabel": "Embedding 模型", + "rerankModelLabel": "Rerank 模型", + "providerInfo": "Provider ID: {id} | Embedding 模型維度: {dimensions}", + "rerankProviderInfo": "Provider ID: {id}", + "tips": "提示: 選擇了知識庫的 Embedding 模型後,請勿再修改該供應商的模型或向量維度資訊,否則會嚴重影響召回率 (Recall Rate) 甚至產生錯誤。", + "cancel": "取消", + "create": "建立" + }, + "emojiPicker": { + "title": "選擇 Emoji", + "close": "關閉", + "categories": { + "emotions": "笑臉與情感", + "animals": "動物與大自然", + "food": "食物與飲品", + "activities": "活動與物件", + "travel": "旅遊與地點", + "symbols": "符號與旗幟" + } + }, + "contentDialog": { + "title": "知識庫管理", + "embeddingModel": "Embedding 模型", + "vectorDimension": "向量維度", + "usage": "使用方法: 在聊天頁面輸入 \"/kb use {name}\"", + "tabs": { + "upload": "上載檔案", + "search": "搜尋內容", + "fromURL": "由 URL 匯入" + } + }, + "upload": { + "title": "上載檔案至知識庫", + "subtitle": "支援 txt、pdf、word、excel 等多種格式", + "dropzone": "將檔案拖曳至此處或點擊上載", + "chunkSettings": { + "title": "分塊 (Chunking) 設定", + "tooltip": "Chunk Size 決定每塊文字的大小,Overlap 決定相鄰文字之間的重疊量。\n較小的 Chunk 準確度較高但數量較多,適當的 Overlap 可以提高搜尋準確度。", + "chunkSizeLabel": "Chunk Size", + "chunkSizeHint": "控制每塊文字的大小,留空則使用預設值", + "overlapLabel": "Overlap Length", + "overlapHint": "控制相鄰文字的重疊量,留空則使用預設值" + }, + "upload": "上載檔案", + "uploading": "正在上載..." + }, + "search": { + "queryLabel": "搜尋知識庫內容", + "queryPlaceholder": "輸入關鍵字搜尋知識庫...", + "resultCountLabel": "結果數量", + "searching": "正在搜尋...", + "resultsTitle": "搜尋結果", + "relevance": "相關度", + "noResults": "找不到符合的內容" + }, + "deleteDialog": { + "title": "確認刪除", + "confirmText": "確定要刪除知識庫 {name}?", + "warning": "此操作無法復原,所有知識庫內容將被永久刪除。", + "cancel": "取消", + "delete": "刪除" + }, + "messages": { + "pluginNotAvailable": "插件未安裝或無法使用", + "pluginNotActivated": "astrbot_plugin_knowledge_base 插件未啟用,請前往插件管理頁面啟用,然後重新啟動 AstrBot。", + "checkPluginFailed": "檢查插件失敗", + "installFailed": "安裝失敗", + "installPluginFailed": "安裝插件失敗", + "getKnowledgeBaseListFailed": "獲取知識庫列表失敗", + "knowledgeBaseCreated": "知識庫建立成功", + "createFailed": "建立失敗", + "createKnowledgeBaseFailed": "建立知識庫失敗", + "pleaseEnterKnowledgeBaseName": "請輸入知識庫名稱", + "pleaseSelectFile": "請先選擇檔案", + "operationSuccess": "操作成功: {message}", + "uploadFailed": "上載失敗", + "fileUploadFailed": "檔案上載失敗", + "pleaseEnterSearchContent": "請輸入搜尋內容", + "noMatchingContent": "找不到符合的內容", + "searchFailed": "搜尋失敗", + "searchKnowledgeBaseFailed": "搜尋知識庫失敗", + "deleteTargetNotExists": "刪除目標不存在", + "knowledgeBaseDeleted": "知識庫刪除成功", + "deleteFailed": "刪除失敗", + "deleteKnowledgeBaseFailed": "刪除知識庫失敗", + "getEmbeddingModelListFailed": "獲取 Embedding 模型列表失敗", + "updateAvailable": "發現新版本: {current} -> {latest}", + "pluginUpToDate": "插件已是最新版本", + "pluginNotFoundInMarket": "在插件市場找不到此插件", + "checkUpdateFailed": "檢查更新失敗", + "updateSuccess": "插件更新成功", + "updateFailed": "更新失敗", + "updatePluginFailed": "更新插件失敗" + }, + "importFromUrl": { + "title": "由 URL 匯入", + "urlLabel": "網頁 URL", + "urlPlaceholder": "請輸入要提取知識的網頁地址", + "optionsTitle": "匯入選項", + "tooltip": "這些選項控制如何從 URL 內容提取與處理文字。\n留空將使用插件的預設設定。\n啟用 LLM 文本修復與摘要後可能需要較長處理時間。", + "useLlmRepairLabel": "啟用 LLM 文本修復", + "useClusteringSummaryLabel": "啟用 Clustering Summary", + "repairLlmProviderIdLabel": "文本修復模型", + "summarizeLlmProviderIdLabel": "摘要模型", + "embeddingProviderIdLabel": "Embedding 模型", + "chunkSizeLabel": "Chunk Size", + "chunkOverlapLabel": "Overlap Length", + "startImport": "開始匯入", + "importing": "正在匯入...", + "importSuccess": "匯入成功", + "importFailed": "匯入失敗", + "uploadingChunks": "內容提取成功,正在上載 Chunk...", + "preRequisite": "提示:請先前往插件市場安裝 astrbot_plugin_url_2_knowledge_base,並跟隨插件文件中的指示完成 playwright 安裝後才能使用此功能。", + "allChunksUploaded": "所有 Chunk 上載成功" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/alkaid/memory.json b/dashboard/src/i18n/locales/zh-HK/features/alkaid/memory.json new file mode 100644 index 0000000000..96ba6c2faf --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/alkaid/memory.json @@ -0,0 +1,97 @@ +{ + "title": "長期記憶 (Long Term Memory)", + "subtitle": "AI 助手的長期記憶管理", + "memories": { + "title": "記憶列表", + "content": "記憶內容", + "importance": "重要程度", + "createTime": "建立時間", + "lastAccess": "最後存取", + "category": "類別" + }, + "categories": { + "personal": "個人資訊", + "preferences": "偏好設定", + "conversations": "對話紀錄", + "facts": "事實資訊", + "skills": "技能知識" + }, + "importance": { + "high": "高", + "medium": "中", + "low": "低" + }, + "actions": { + "view": "查看詳情", + "edit": "編輯", + "delete": "刪除", + "pin": "釘選", + "unpin": "取消釘選" + }, + "filters": { + "all": "全部", + "category": "按類別", + "importance": "按重要程度", + "dateRange": "按時間範圍", + "title": "篩選", + "userIdLabel": "篩選 User ID", + "filterButton": "篩選", + "resetButton": "重設篩選", + "refreshButton": "重新整理圖表" + }, + "search": { + "title": "搜尋記憶", + "userIdLabel": "User ID", + "queryLabel": "輸入關鍵字", + "searchButton": "搜尋", + "resultsTitle": "搜尋結果", + "noResults": "找不到相關記憶內容", + "similarity": "相似度 (Similarity)", + "noTextContent": "無文字內容" + }, + "addMemory": { + "title": "新增記憶資料", + "textLabel": "輸入文字內容", + "userIdLabel": "User ID", + "summarizeLabel": "需要摘要", + "addButton": "新增資料" + }, + "nodeDetails": { + "title": "節點 (Node) 詳情", + "id": "ID", + "type": "類型", + "name": "名稱", + "userId": "User ID", + "timestamp": "時間戳記" + }, + "graphStats": { + "title": "圖表統計", + "nodeCount": "節點數量", + "edgeCount": "邊緣數量" + }, + "factDialog": { + "title": "記憶事實 (Memory Fact)", + "id": "ID", + "docId": "文件 ID", + "createdAt": "建立時間", + "updatedAt": "更新時間", + "metadata": "Metadata", + "metadataKey": "鍵值 (Key)", + "metadataValue": "內容 (Value)", + "loading": "正在載入...", + "close": "關閉", + "noValue": "無", + "unknown": "未知" + }, + "messages": { + "searchQueryRequired": "請輸入搜尋關鍵字", + "searchSuccess": "找到 {count} 條相關記憶", + "searchNoResults": "找不到相關記憶內容", + "searchError": "搜尋失敗", + "addSuccess": "記憶資料新增成功!", + "addError": "新增記憶資料失敗", + "factDetailsError": "獲取記憶詳情失敗", + "metadataParseError": "無法解析 Metadata", + "relationNoMemoryData": "此關聯沒有相關的記憶資料" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/auth.json b/dashboard/src/i18n/locales/zh-HK/features/auth.json new file mode 100644 index 0000000000..0223e9be79 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/auth.json @@ -0,0 +1,14 @@ +{ + "login": "登入", + "username": "使用者名稱", + "password": "密碼", + "defaultHint": "預設使用者名稱與密碼皆為:astrbot", + "logo": { + "title": "AstrBot WebUI", + "subtitle": "歡迎使用" + }, + "theme": { + "switchToDark": "切換至深色主題", + "switchToLight": "切換至淺色主題" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/chart.json b/dashboard/src/i18n/locales/zh-HK/features/chart.json new file mode 100644 index 0000000000..413475e074 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/chart.json @@ -0,0 +1,4 @@ +{ + "messageCount": "訊息數量", + "time": "時間" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/chat.json b/dashboard/src/i18n/locales/zh-HK/features/chat.json new file mode 100644 index 0000000000..e5d9776258 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/chat.json @@ -0,0 +1,161 @@ +{ + "title": "傾偈啦!", + "subtitle": "與 AI 助手對話", + "input": { + "placeholder": "開始輸入...", + "send": "傳送", + "clear": "清除", + "upload": "上載檔案", + "voice": "語音輸入", + "recordingPrompt": "正在錄音,請說話...", + "chatPrompt": "開始聊天!", + "dropToUpload": "放開滑鼠以上載檔案", + "stopGenerating": "停止生成" + }, + "message": { + "user": "用戶", + "assistant": "AI 助手", + "system": "系統", + "error": "錯誤訊息", + "loading": "思考中..." + }, + "voice": { + "start": "開始錄音", + "stop": "停止錄音", + "recording": "新錄音", + "processing": "處理中...", + "error": "錄音失敗", + "listening": "等待說話中...", + "speaking": "說話中", + "startRecording": "開始語音輸入", + "liveMode": "即時對話" + }, + "welcome": { + "title": "歡迎使用 AstrBot", + "subtitle": "你的 AI 助手", + "quickActions": "快速操作", + "examples": "範例問題" + }, + "actions": { + "copy": "複製", + "regenerate": "重新生成", + "like": "讚好", + "dislike": "倒讚", + "share": "分享", + "newChat": "建立對話", + "deleteChat": "刪除此對話", + "editTitle": "編輯標題", + "fullscreen": "全螢幕", + "exitFullscreen": "離開全螢幕", + "reply": "引用回覆", + "providerConfig": "AI 設定", + "toolsUsed": "已使用的工具", + "toolCallUsed": "使用了 {name} 工具", + "pythonCodeAnalysis": "使用了 Python 程式碼分析" + }, + "ipython": { + "output": "輸出" + }, + "conversation": { + "newConversation": "新增對話", + "noHistory": "暫無對話紀錄", + "systemStatus": "系統狀態", + "llmService": "LLM 服務", + "speechToText": "語音轉文字", + "editDisplayName": "編輯工作階段名稱", + "displayName": "工作階段名稱", + "displayNameUpdated": "工作階段名稱已更新", + "displayNameUpdateFailed": "更新工作階段名稱失敗", + "confirmDelete": "確定要刪除 '{name}'?此操作無法復原。" + }, + "modes": { + "darkMode": "切換深色模式", + "lightMode": "切換淺色模式" + }, + "shortcuts": { + "help": "說明", + "voiceRecord": "錄音", + "pasteImage": "貼上圖片", + "sendKey": { + "title": "傳送捷徑", + "enterToSend": "按 Enter 傳送", + "shiftEnterToSend": "按 Shift+Enter 傳送" + } + }, + "streaming": { + "enabled": "已啟用串流回應", + "disabled": "已停用串流回應", + "on": "串流", + "off": "一般" + }, + "transport": { + "title": "傳輸模式", + "sse": "SSE", + "websocket": "WebSocket" + }, + "config": { + "title": "設定檔" + }, + "reasoning": { + "thinking": "思考過程" + }, + "reply": { + "replyTo": "引用", + "notFound": "找不到訊息" + }, + "project": { + "title": "專案", + "create": "建立專案", + "edit": "編輯專案", + "name": "專案名稱", + "emoji": "圖示 (Emoji)", + "description": "專案描述 (選填)", + "noSessions": "此專案暫無對話", + "confirmDelete": "確定要刪除專案 \"{title}\"?專案內的對話不會被刪除。" + }, + "time": { + "today": "今天", + "yesterday": "昨天" + }, + "stats": { + "tokens": "Token", + "inputTokens": "輸入 Token", + "outputTokens": "輸出 Token", + "cachedTokens": "快取 Token", + "duration": "耗時", + "ttft": "首字延遲 (TTFT)" + }, + "refs": { + "title": "參考資料", + "sources": "來源" + }, + "connection": { + "title": "連線狀態提醒", + "message": "系統偵測到對話連線需要重新連接。", + "reasons": "可能是因為:", + "reasonWindowResize": "調整了聊天視窗大小 (正常現象)", + "reasonMultipleTabs": "在其他分頁開啟了聊天頁面", + "reasonNetworkIssue": "網絡曾短暫中斷", + "notice": "注意:為了確保能正常接收訊息,系統僅容許同時保持一個對話連線。如果你開啟了多個分頁進行對話,建議只保留一個。", + "understand": "我知道了", + "status": { + "reconnecting": "重新連線中...", + "reconnected": "對話連線已恢復", + "failed": "連線失敗,請重新整理頁面再試" + } + }, + "errors": { + "sendMessageFailed": "傳送訊息失敗,請再試", + "createSessionFailed": "建立工作階段失敗,請重新整理頁面再試" + }, + "batch": { + "selected": "已選擇 {count} 個", + "confirmDelete": "確定要刪除 {count} 個對話?此操作無法復原。", + "selectAll": "全選", + "deselectAll": "取消全選", + "delete": "刪除", + "exit": "離開", + "partialFailure": "{total} 個對話中有 {failed} 個刪除失敗", + "requestFailed": "刪除對話失敗,請再試。" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/command.json b/dashboard/src/i18n/locales/zh-HK/features/command.json new file mode 100644 index 0000000000..85720da18a --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/command.json @@ -0,0 +1,95 @@ +{ + "title": "指令管理", + "summary": { + "total": "顯示的指令數", + "disabled": "已停用", + "conflicts": "發生衝突" + }, + "conflictAlert": { + "title": "偵測到指令衝突", + "description": "目前有 {count} 對指令發生衝突,衝突的指令會同時觸發多個插件回應,可能會導致非預期的行為。", + "hint": "請點擊「重新命名」按鈕修改衝突指令的名稱來解決衝突。" + }, + "table": { + "headers": { + "command": "指令", + "type": "類型", + "plugin": "所屬插件", + "description": "描述", + "permission": "權限", + "status": "狀態", + "actions": "操作" + } + }, + "type": { + "command": "指令", + "group": "指令群組", + "subCommand": "子指令" + }, + "status": { + "enabled": "已啟用", + "disabled": "已停用", + "conflict": "發生衝突" + }, + "permission": { + "everyone": "所有人", + "admin": "管理員" + }, + "tooltips": { + "enable": "啟用指令", + "disable": "停用指令", + "rename": "重新命名指令", + "viewDetails": "查看詳情" + }, + "dialogs": { + "rename": { + "title": "重新命名指令", + "newName": "新指令名稱", + "aliases": "管理別名", + "addAlias": "新增別名", + "cancel": "取消", + "confirm": "確認" + }, + "details": { + "title": "指令詳情", + "type": "指令類型", + "handler": "處理常式 (Handler)", + "module": "模組路徑", + "originalCommand": "原始指令", + "effectiveCommand": "生效指令", + "parentGroup": "所屬指令群組", + "subCommands": "子指令列表", + "aliases": "別名", + "permission": "權限要求", + "conflictStatus": "衝突狀態" + } + }, + "messages": { + "toggleSuccess": "指令狀態已更新", + "toggleFailed": "更新指令狀態失敗", + "renameSuccess": "指令已重新命名", + "renameFailed": "重新命名失敗", + "loadFailed": "載入指令列表失敗", + "updateSuccess": "更新成功", + "updateFailed": "更新失敗" + }, + "search": { + "placeholder": "搜尋指令..." + }, + "empty": { + "noCommands": "暫無指令", + "noCommandsDesc": "目前篩選條件下找不到任何指令" + }, + "filters": { + "all": "全部", + "enabled": "已啟用", + "disabled": "已停用", + "conflict": "發生衝突", + "byPlugin": "按插件篩選", + "byType": "按類型篩選", + "byPermission": "按權限篩選", + "byStatus": "按狀態篩選", + "showSystemPlugins": "顯示系統插件指令", + "systemPluginConflictHint": "有涉及系統插件的衝突,需要先解決才能隱藏" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/config-metadata.json b/dashboard/src/i18n/locales/zh-HK/features/config-metadata.json new file mode 100644 index 0000000000..3378dac7da --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/config-metadata.json @@ -0,0 +1,1599 @@ +{ + "ai_group": { + "name": "AI 設定", + "agent_runner": { + "description": "Agent 執行方式", + "hint": "選擇 AI 對話的執行器,預設為 AstrBot 內置 Agent 執行器,可以使用 AstrBot 內的知識庫 (Knowledge Base)、人格與 Tool calling 功能。如果不打算連接 Dify、Coze、DeerFlow 等第三方 Agent 執行器,則無須修改此部分。", + "provider_settings": { + "enable": { + "description": "啟用", + "hint": "AI 對話總開關" + }, + "agent_runner_type": { + "description": "執行器", + "labels":[ + "內置 Agent", + "Dify", + "Coze", + "阿里雲百鍊 App", + "DeerFlow" + ] + }, + "coze_agent_runner_provider_id": { + "description": "Coze Agent 執行器 Provider ID" + }, + "dify_agent_runner_provider_id": { + "description": "Dify Agent 執行器 Provider ID" + }, + "dashscope_agent_runner_provider_id": { + "description": "阿里雲百鍊 App Agent 執行器 Provider ID" + }, + "deerflow_agent_runner_provider_id": { + "description": "DeerFlow Agent 執行器 Provider ID" + } + } + }, + "ai": { + "description": "模型", + "hint": "當使用非內置 Agent 執行器時,預設對話模型與預設圖片轉述模型可能會失效,但部分插件會依賴此設定來呼叫 AI 能力。", + "provider_settings": { + "default_provider_id": { + "description": "預設對話模型", + "hint": "留空將使用第一個模型" + }, + "fallback_chat_models": { + "description": "備用對話模型列表", + "hint": "主要對話模型請求失敗時,會按順序切換至這些對話模型。" + }, + "default_image_caption_provider_id": { + "description": "預設圖片轉述模型", + "hint": "留空代表不使用,可用於非多模態 (Multi-modal) 的模型上" + }, + "image_caption_prompt": { + "description": "圖片轉述提示詞 (Prompt)" + } + }, + "provider_stt_settings": { + "enable": { + "description": "啟用語音轉文字", + "hint": "STT 總開關" + }, + "provider_id": { + "description": "預設語音轉文字模型", + "hint": "用戶也可以使用 /provider 指令單獨為該工作階段 (Session) 選擇 STT 模型。" + } + }, + "provider_tts_settings": { + "enable": { + "description": "啟用文字轉語音", + "hint": "TTS 總開關" + }, + "provider_id": { + "description": "預設文字轉語音模型" + }, + "trigger_probability": { + "description": "TTS 觸發機率" + } + } + }, + "persona": { + "description": "人格", + "hint": "賦予 AstrBot 人格。", + "provider_settings": { + "default_personality": { + "description": "預設使用的人格" + } + } + }, + "knowledgebase": { + "description": "知識庫", + "hint": "AstrBot 的「外置大腦」。", + "kb_names": { + "description": "知識庫列表", + "hint": "支援多選" + }, + "kb_fusion_top_k": { + "description": "Fusion 檢索結果數量", + "hint": "多個知識庫檢索結果融合 (Fusion) 後回傳的結果數量" + }, + "kb_final_top_k": { + "description": "最終回傳結果數量", + "hint": "在知識庫中檢索到的結果數量,數值越大可能取得越多相關資訊,但也可能引入雜訊 (Noise)。建議根據實際需求調整" + }, + "kb_agentic_mode": { + "description": "Agentic 知識庫檢索", + "hint": "啟用後,知識庫檢索會作為 LLM 工具,由模型自行決定何時呼叫知識庫進行搜尋。需要模型支援函數呼叫 (Function calling) 能力。" + } + }, + "websearch": { + "description": "網頁搜尋", + "hint": "讓 AstrBot 可以連接網絡,獲取更多時事資訊。", + "provider_settings": { + "web_search": { + "description": "啟用網頁搜尋" + }, + "websearch_provider": { + "description": "網頁搜尋供應商" + }, + "websearch_tavily_key": { + "description": "Tavily API Key", + "hint": "可以加入多個 Key 以進行輪詢 (Polling)。" + }, + "websearch_bocha_key": { + "description": "BoCha API Key", + "hint": "可以加入多個 Key 以進行輪詢 (Polling)。" + }, + "websearch_baidu_app_builder_key": { + "description": "百度千帆智能雲 APP Builder API Key", + "hint": "參考:[https://console.bce.baidu.com/iam/#/iam/apikey/list](https://console.bce.baidu.com/iam/#/iam/apikey/list)" + }, + "web_search_link": { + "description": "顯示來源引用" + } + } + }, + "file_extract": { + "description": "文件解析能力", + "provider_settings": { + "file_extract": { + "enable": { + "description": "啟用文件解析能力" + }, + "provider": { + "description": "文件解析供應商" + }, + "moonshotai_api_key": { + "description": "Moonshot AI API Key" + } + } + } + }, + "agent_computer_use": { + "description": "使用電腦能力", + "hint": "讓 AstrBot 存取並使用你的電腦或獨立的沙盒 (Sandbox) 環境,來執行較複雜的任務。詳情請參閱:[沙盒模式](https://docs.astrbot.app/use/astrbot-agent-sandbox.html)、[Skills](https://docs.astrbot.app/use/skills.html)。", + "provider_settings": { + "computer_use_runtime": { + "description": "運行環境", + "hint": "sandbox 代表在沙盒環境中執行,local 代表在本機環境中執行,none 代表不啟用。如果上載了Skills,選擇 none 會導致 Agent 無法使用它們。" + }, + "computer_use_require_admin": { + "description": "需要 AstrBot 管理員權限", + "hint": "啟用後,需要擁有 AstrBot 管理員權限才能呼叫使用電腦的能力。可在平台設定->管理員中新增管理員。使用 /sid 指令可查看管理員 ID。" + }, + "sandbox": { + "booter": { + "description": "沙盒環境啟動器" + }, + "shipyard_neo_endpoint": { + "description": "Shipyard Neo API Endpoint", + "hint": "Shipyard Neo (Bay) 服務的 API 地址,預設為 http://127.0.0.1:8114。" + }, + "shipyard_neo_access_token": { + "description": "Shipyard Neo Access Token", + "hint": "Bay 的 API Key(sk-bay-...)。留空時會自動從 credentials.json 中讀取。" + }, + "shipyard_neo_profile": { + "description": "Shipyard Neo Profile", + "hint": "Shipyard Neo 沙盒 Profile,例如 python-default。" + }, + "shipyard_neo_ttl": { + "description": "Shipyard Neo 沙盒存活時間 (秒)", + "hint": "Shipyard Neo 沙盒的生存時間 (秒)。" + }, + "shipyard_endpoint": { + "description": "Shipyard API Endpoint", + "hint": "Shipyard 服務的 API 存取地址。" + }, + "shipyard_access_token": { + "description": "Shipyard Access Token", + "hint": "用於存取 Shipyard 服務的 Access Token。" + }, + "shipyard_ttl": { + "description": "Shipyard Ship 存活時間 (秒)", + "hint": "Shipyard 工作階段 (Session) 的生存時間 (秒)。" + }, + "shipyard_max_sessions": { + "description": "Shipyard Ship 工作階段重用上限", + "hint": "決定了一個實例 (Instance) 所能承載的最大工作階段數量。" + } + } + } + }, + "proactive_capability": { + "description": "主動型能力", + "hint": "讓 AstrBot 能夠在特定時間自動喚醒 (Wake up),協助你完成任務。詳情請參閱:[主動型 Agent](https://docs.astrbot.app/use/proactive-agent.html)。", + "provider_settings": { + "proactive_capability": { + "add_cron_tools": { + "description": "啟用", + "hint": "啟用後,會將相關工具提供給 Agent 以實現主動型 Agent。你可以告訴 AstrBot 在未來某個時間要完成甚麼工作,它會定時觸發執行,完成後將結果傳送給你。" + } + } + } + }, + "truncate_and_compress": { + "hint": "AstrBot 如何管理工作記憶。詳情請參閱:[上下文管理策略](https://docs.astrbot.app/use/context-compress.html)。", + "description": "上下文管理策略", + "provider_settings": { + "max_context_length": { + "description": "最多保留的對話輪數", + "hint": "超出此數量時會捨棄最舊的部分,一輪對話計為 1 條,-1 代表不限制" + }, + "dequeue_context_length": { + "description": "捨棄的對話輪數", + "hint": "超出最多保留的對話輪數時,每次捨棄的對話輪數" + }, + "context_limit_reached_strategy": { + "description": "超出模型上下文視窗時的處理方式", + "labels":[ + "按對話輪數截斷", + "由 LLM 壓縮上下文" + ], + "hint": "當按對話輪數截斷時,會根據上方\"捨棄的對話輪數\"的設定,捨棄最舊的 N 輪對話。當由 LLM 壓縮上下文時,會使用指定的模型進行上下文壓縮。" + }, + "llm_compress_instruction": { + "description": "上下文壓縮提示詞", + "hint": "留空則使用預設提示詞。" + }, + "llm_compress_keep_recent": { + "description": "壓縮時保留最近的對話輪數", + "hint": "永遠保留最近的 N 輪對話。" + }, + "llm_compress_provider_id": { + "description": "用於壓縮上下文的模型供應商 ID", + "hint": "留空時將退回使用「按對話輪數截斷」的策略。" + } + } + }, + "others": { + "description": "其他設定", + "provider_settings": { + "display_reasoning_text": { + "description": "顯示思考內容" + }, + "llm_safety_mode": { + "description": "健康模式", + "hint": "引導模型提供健康、安全、正面的內容,避開有害或敏感話題。" + }, + "safety_mode_strategy": { + "description": "健康模式策略", + "hint": "選擇健康模式的實作方式。" + }, + "identifier": { + "description": "用戶識別", + "hint": "啟用後,在提示詞前方會包含用戶的 ID 資訊。" + }, + "group_name_display": { + "description": "顯示群組名稱", + "hint": "啟用後,在支援的平台 (如 OneBot v11) 上,提示詞前方會包含群組名稱。" + }, + "datetime_system_prompt": { + "description": "現實時間感知", + "hint": "啟用後,會在系統提示詞中包含目前的時間資訊。" + }, + "show_tool_use_status": { + "description": "顯示 Function Calling 狀態" + }, + "show_tool_call_result": { + "description": "顯示 Function Calling 回傳結果", + "hint": "僅在啟用「顯示 Function Calling 狀態」時生效,最多顯示 70 個字元。" + }, + "sanitize_context_by_modalities": { + "description": "按模型能力清理歷史上下文", + "hint": "啟用後,每次請求 LLM 前會根據目前選擇的模型能力,刪除對話中不支援的圖片或 Tool calling 結構(會改變模型讀取到的歷史紀錄)" + }, + "max_quoted_fallback_images": { + "description": "轉發訊息中提取圖片的上限", + "hint": "轉發訊息中解析到的圖片最多注入的數量,多餘的將被忽略。" + }, + "quoted_message_parser": { + "max_component_chain_depth": { + "description": "轉發訊息富文本解析深度", + "hint": "解析轉發訊息中的富文本組件鏈時容許的最大遞迴深度。" + }, + "max_forward_node_depth": { + "description": "轉發訊息嵌套解析深度", + "hint": "解析嵌套的轉發節點時容許的最大遞迴深度。" + }, + "max_forward_fetch": { + "description": "轉發訊息遞迴提取上限", + "hint": "遞迴呼叫 get_forward_msg 提取轉發內容的最大次數。" + }, + "warn_on_action_failure": { + "description": "轉發訊息解析失敗警告", + "hint": "啟用後,當 get_msg/get_forward_msg 全部嘗試失敗時會輸出警告日誌 (Warning log)。" + } + }, + "max_agent_step": { + "description": "Tool Calling 輪數上限" + }, + "tool_call_timeout": { + "description": "Tool Calling 逾時時間 (秒)" + }, + "tool_schema_mode": { + "description": "Tool Calling 模式", + "hint": "skills-like 會先傳送工具名稱與描述,再傳送參數;full 則會一次過傳送完整參數。", + "labels":[ + "Skills-like(兩階段)", + "Full(完整參數)" + ] + }, + "streaming_response": { + "description": "串流輸出" + }, + "unsupported_streaming_strategy": { + "description": "不支援串流的平台處理方式", + "hint": "選擇在不支援串流的平台上如何處理。即時分段回覆會在系統收到串流回應時,偵測到如標點符號等分段點,即時發送已收到的內容", + "labels":[ + "即時分段回覆", + "關閉串流回覆" + ] + }, + "wake_prefix": { + "description": "LLM 聊天額外喚醒前綴", + "hint": "如果喚醒前綴是 /,額外聊天喚醒前綴是 chat,則需要輸入 /chat 才會觸發 LLM 請求" + }, + "prompt_prefix": { + "description": "用戶提示詞 (Prompt)", + "hint": "可以使用 {{prompt}} 作為用戶輸入的佔位符 (Placeholder)。如果不填寫佔位符,則代表會加在用戶輸入的前方。" + }, + "image_compress_enabled": { + "description": "啟用圖片壓縮", + "hint": "啟用後,發送給多模態 (Multi-modal) 模型前會先壓縮本機的大型圖片。" + }, + "image_compress_options": { + "description": "圖片壓縮設定", + "hint": "用於控制圖片壓縮的尺寸、品質與觸發門檻。", + "max_size": { + "description": "最大邊長", + "hint": "壓縮後圖片最長的一邊,單位為像素 (Pixel)。超過此尺寸會按比例縮放。" + }, + "quality": { + "description": "JPEG 品質", + "hint": "JPEG 輸出品質,範圍為 1-100。數值越大畫質越好,檔案也越大。" + } + }, + "reachability_check": { + "description": "供應商連通性檢測", + "hint": "使用 /provider 指令列出模型時並發檢查連通性。啟用後會主動呼叫模型測試連通性,可能會產生額外的 Token 消耗。" + } + }, + "provider_tts_settings": { + "dual_output": { + "description": "開啟 TTS 時同時輸出語音與文字" + } + } + } + }, + "platform_group": { + "name": "平台設定", + "platform": { + "description": "訊息平台 Adapter", + "active_send_mode": { + "description": "是否轉用主動發送接口" + }, + "appid": { + "description": "appid", + "hint": "必填項目。QQ 官方機械人平台的 appid。獲取方法請參考官方文件。" + }, + "callback_server_host": { + "description": "Callback Server Host", + "hint": "Callback Server Host。留空則不啟用 Callback Server。" + }, + "card_template_id": { + "description": "卡片 Template ID", + "hint": "選填。釘釘互動卡片 Template ID。啟用後將使用互動卡片進行串流回覆。" + }, + "discord_activity_name": { + "description": "Discord Activity 名稱", + "hint": "選填的 Discord Activity 名稱。留空則不設定。" + }, + "discord_command_register": { + "description": "註冊 Discord 指令", + "hint": "啟用後,會自動將插件指令註冊為 Discord Slash 指令" + }, + "discord_proxy": { + "description": "Discord Proxy 地址", + "hint": "選填的 Proxy 地址:http://ip:port" + }, + "discord_token": { + "description": "Discord Bot Token", + "hint": "請在此處輸入你的 Discord Bot Token" + }, + "enable": { + "description": "啟用", + "hint": "是否啟用此 Adapter。未啟用的 Adapter 對應的訊息平台將無法接收訊息。" + }, + "enable_group_c2c": { + "description": "啟用訊息列表私訊", + "hint": "啟用後,機械人可以接收到 QQ 訊息列表中的私訊。你可能需要在 QQ 機械人平台掃描 QR Code 新增機械人為好友。詳情請參閱官方文件。" + }, + "enable_guild_direct_message": { + "description": "啟用頻道私訊", + "hint": "啟用後,機械人可以接收到頻道的私訊。" + }, + "id": { + "description": "機械人名稱", + "hint": "機械人名稱" + }, + "is_sandbox": { + "description": "沙盒模式 (Sandbox Mode)" + }, + "kf_name": { + "description": "WeChat 客服帳戶名稱", + "hint": "如果在這邊填寫,代表你使用的是企業微信客服,而非企業微信應用程式。可以在 https://kf.weixin.qq.com/kf/frame#/accounts 獲取。" + }, + "lark_bot_name": { + "description": "飛書機械人名稱", + "hint": "請務必填寫正確,否則 @ 機械人時無法喚醒,只能依靠前綴喚醒。" + }, + "lark_connection_mode": { + "description": "訂閱方式", + "labels":[ + "長連線模式 (Long Connection)", + "推播至伺服器模式 (Push to Server)" + ] + }, + "lark_encrypt_key": { + "description": "Encrypt Key", + "hint": "用於解密飛書回呼數據的 Encrypt Key" + }, + "lark_verification_token": { + "description": "Verification Token", + "hint": "用於驗證飛書回呼請求的 Token" + }, + "misskey_allow_insecure_downloads": { + "description": "容許不安全下載 (停用 SSL 驗證)", + "hint": "當遠端伺服器憑證出現問題導致無法下載時,自動停用 SSL 驗證作為備用方案 (Fallback)。適用於部分圖床的憑證設定問題。啟用此功能存在安全風險,請僅在必要時使用。" + }, + "misskey_default_visibility": { + "description": "預設發文可見度", + "hint": "機械人發文時的預設可見度。public:公開,home:首頁時間軸,followers:僅限追蹤者。" + }, + "misskey_download_chunk_size": { + "description": "串流下載區塊大小 (Bytes)", + "hint": "串流下載與計算 MD5 時每次讀取的位元組數,太小會增加效能消耗,太大會佔用記憶體。" + }, + "misskey_download_timeout": { + "description": "遠端下載逾時時間 (秒)", + "hint": "下載遠端檔案時的逾時時間 (秒),用於處理非同步上載失敗時退回本機上載的情境。" + }, + "misskey_enable_chat": { + "description": "啟用聊天訊息回應", + "hint": "啟用後,機械人將會監聽並回應私訊聊天訊息" + }, + "misskey_enable_file_upload": { + "description": "啟用檔案上載至 Misskey", + "hint": "啟用後,Adapter 會嘗試將訊息鏈中的檔案上載至 Misskey。URL 檔案會先嘗試伺服器端上載,非同步上載失敗時會改為下載後再於本機上載。" + }, + "misskey_instance_url": { + "description": "Misskey 實例 URL", + "hint": "例如 https://misskey.example,填寫 Bot 帳戶所在的 Misskey 實例地址" + }, + "misskey_local_only": { + "description": "僅限本站 (不參與聯邦傳輸)", + "hint": "啟用後,機械人發佈的內容僅能在目前實例中查看,不會傳輸至其他實例" + }, + "misskey_max_download_bytes": { + "description": "最大容許下載位元組數 (超過即中止)", + "hint": "如果希望限制下載檔案的最大尺寸以防止記憶體不足 (OOM),請填寫最大位元組數;留空或 null 代表不限制。" + }, + "misskey_token": { + "description": "Misskey Access Token", + "hint": "連接服務設定所生成的 API Access token" + }, + "misskey_upload_concurrency": { + "description": "並行上載上限", + "hint": "同時執行的檔案上載任務上限 (整數,預設為 3)。" + }, + "misskey_upload_folder": { + "description": "上載至雲端硬碟的目標資料夾 ID", + "hint": "選填:填寫 Misskey 雲端硬碟中目標資料夾的 ID,上載的檔案會存放在該資料夾中。留空則使用帳戶雲端硬碟根目錄。" + }, + "port": { + "description": "Callback Server Port", + "hint": "Callback Server Port。留空則不啟用 Callback Server。" + }, + "satori_api_base_url": { + "description": "Satori API Endpoint", + "hint": "Satori API 的 Base URL。" + }, + "satori_auto_reconnect": { + "description": "啟用自動重新連線", + "hint": "斷線時是否自動重新連線 WebSocket。" + }, + "satori_endpoint": { + "description": "Satori WebSocket Endpoint", + "hint": "Satori Event 的 WebSocket Endpoint。" + }, + "satori_heartbeat_interval": { + "description": "Satori 心跳間隔", + "hint": "發送心跳訊息的間隔 (秒)。" + }, + "satori_reconnect_delay": { + "description": "Satori 重新連線延遲", + "hint": "嘗試重新連線前的延遲時間 (秒)。" + }, + "satori_token": { + "description": "Satori Token", + "hint": "用於進行 Satori API 授權的 Token。" + }, + "secret": { + "description": "secret", + "hint": "必填項目。" + }, + "slack_connection_mode": { + "description": "Slack 連線模式", + "hint": "Slack 的連線模式。`webhook` 將使用 Webhook server,`socket` 將使用 Slack 的 Socket 模式。" + }, + "slack_webhook_host": { + "description": "Slack Webhook Host", + "hint": "僅在 Slack 連線模式為 `webhook` 時生效。" + }, + "slack_webhook_path": { + "description": "Slack Webhook Path", + "hint": "僅在 Slack 連線模式為 `webhook` 時生效。" + }, + "slack_webhook_port": { + "description": "Slack Webhook Port", + "hint": "僅在 Slack 連線模式為 `webhook` 時生效。" + }, + "telegram_command_auto_refresh": { + "description": "Telegram 指令自動重整", + "hint": "啟用後,AstrBot 會在運行時自動重整 Telegram 指令。(單獨設定此項無效)" + }, + "telegram_command_register": { + "description": "Telegram 指令註冊", + "hint": "啟用後,AstrBot 會自動註冊 Telegram 指令。" + }, + "telegram_command_register_interval": { + "description": "Telegram 指令自動重整間隔", + "hint": "Telegram 指令自動重整的間隔時間,單位為秒。" + }, + "telegram_polling_restart_delay": { + "description": "Telegram 輪詢重啟延遲", + "hint": "當輪詢異常結束時,嘗試自動重啟的延遲時間,單位為秒。預設為 5 秒。" + }, + "telegram_token": { + "description": "Bot Token", + "hint": "如果你的網絡環境在中國大陸,請在 `其他設定` 中設定 Proxy 或修改 api_base。" + }, + "type": { + "description": "Adapter 類型" + }, + "unified_webhook_mode": { + "description": "統一 Webhook 模式", + "hint": "Webhook 模式下使用 AstrBot 統一 Webhook 入口,無須單獨開啟 Port。回呼地址為 /api/platform/webhook/{webhook_uuid}。" + }, + "webhook_uuid": { + "description": "Webhook UUID", + "hint": "統一 Webhook 模式下的唯一識別碼,建立平台時會自動生成。" + }, + "wecom_ai_bot_name": { + "description": "WeCom AI Bot 名稱", + "hint": "請務必填寫正確,否則部分指令將無法使用。" + }, + "wecom_ai_bot_connection_mode": { + "description": "WeCom AI Bot 連線模式", + "hint": "Webhook Callback 模式需設定 Token/EncodingAESKey;長連線模式需設定 BotID/Secret。" + }, + "wecomaibot_friend_message_welcome_text": { + "description": "WeCom AI Bot 私訊歡迎語", + "hint": "選填。當用戶當日進入 AI Bot 私訊工作階段時,回覆的歡迎語,例如「💭 思考中...」。留空則不回覆。" + }, + "wecomaibot_init_respond_text": { + "description": "WeCom AI Bot 初始回應文字", + "hint": "選填。當機械人收到訊息時,第一時間回覆的文字。留空則不設定。" + }, + "wecomaibot_token": { + "description": "WeCom AI Bot Token", + "hint": "用於進行 Webhook Callback 模式的驗證。" + }, + "wecomaibot_encoding_aes_key": { + "description": "WeCom AI Bot EncodingAESKey", + "hint": "用於進行 Webhook Callback 模式的訊息加密/解密。" + }, + "wecomaibot_ws_bot_id": { + "description": "長連線 BotID", + "hint": "WeCom AI Bot 長連線模式憑證 BotID。" + }, + "wecomaibot_ws_secret": { + "description": "長連線 Secret", + "hint": "WeCom AI Bot 長連線模式憑證 Secret。" + }, + "wecomaibot_ws_url": { + "description": "長連線 WebSocket URL", + "hint": "預設為 wss://openws.work.weixin.qq.com,一般情況下無須修改。" + }, + "wecomaibot_heartbeat_interval": { + "description": "長連線心跳間隔", + "hint": "長連線模式心跳間隔 (秒),建議設定為 30 秒。" + }, + "wpp_active_message_poll": { + "description": "是否啟用主動訊息輪詢", + "hint": "只有當你發現 WeChat 訊息沒有準時同步至 AstrBot 時,才需要啟用此功能,預設不啟用。" + }, + "wpp_active_message_poll_interval": { + "description": "主動訊息輪詢間隔", + "hint": "主動訊息輪詢間隔,單位為秒,預設 3 秒,最大不建議超過 60 秒,否則可能會被當作舊訊息。" + }, + "ws_reverse_host": { + "description": "反向 Websocket Host", + "hint": "AstrBot 將作為伺服器端。" + }, + "ws_reverse_port": { + "description": "反向 Websocket Port" + }, + "ws_reverse_token": { + "description": "反向 Websocket Token", + "hint": "反向 Websocket Token。未設定則不啟用 Token 驗證。" + }, + "msg_push_webhook_url": { + "description": "WeCom 訊息推播 Webhook URL", + "hint": "選填。用於主動推播訊息,請在企業微信群組->訊息推播中獲取 URL。建議設定此項以獲得更好的訊息發送體驗。" + }, + "only_use_webhook_url_to_send": { + "description": "僅使用 Webhook 發送訊息", + "hint": "選填。啟用後,WeCom AI Bot 的所有回覆都會改為經由訊息推播 Webhook 發送。訊息推播 Webhook 支援更多訊息類型(例如圖片、檔案等)。如果不需要打字機效果 (Typewriter Effect),強烈建議使用此選項。" + }, + "weixin_oc_base_url": { + "description": "Base URL 地址", + "hint": "預設: https://ilinkai.weixin.qq.com" + }, + "weixin_oc_bot_type": { + "description": "掃描 QR Code 參數 bot_type", + "hint": "預設: 3" + }, + "weixin_oc_qr_poll_interval": { + "description": "QR Code 狀態輪詢間隔 (秒)", + "hint": "每隔多少秒輪詢一次 QR Code 狀態。" + }, + "weixin_oc_long_poll_timeout_ms": { + "description": "getUpdates 長輪詢逾時時間 (ms)", + "hint": "工作階段訊息拉取接口的逾時參數。" + }, + "weixin_oc_api_timeout_ms": { + "description": "HTTP 請求逾時時間 (ms)", + "hint": "通用的 API 請求逾時參數。" + }, + "weixin_oc_token": { + "description": "登入後的 token (可留空)", + "hint": "掃描 QR Code 登入成功後會自動寫入;在進階情境下可手動填寫。" + }, + "kook_bot_token": { + "description": "機械人 Token", + "type": "string", + "hint": "必填項目。在 KOOK 開發者平台獲取的機械人 Token" + }, + "kook_reconnect_delay": { + "description": "重新連線延遲", + "type": "int", + "hint": "重新連線的延遲時間 (秒),採用指數退避 (Exponential Backoff) 策略" + }, + "kook_max_reconnect_delay": { + "description": "最大重新連線延遲", + "type": "int", + "hint": "重新連線延遲的最大值 (秒)" + }, + "kook_max_retry_delay": { + "description": "最大重試延遲", + "type": "int", + "hint": "重試的最大延遲時間 (秒)" + }, + "kook_heartbeat_interval": { + "description": "心跳間隔", + "type": "int", + "hint": "心跳檢測的間隔時間 (秒)" + }, + "kook_heartbeat_timeout": { + "description": "心跳逾時時間", + "type": "int", + "hint": "心跳檢測的逾時時間 (秒)" + }, + "kook_max_heartbeat_failures": { + "description": "最大心跳失敗次數", + "type": "int", + "hint": "容許的最大心跳失敗次數,超過後將中斷連線" + }, + "kook_max_consecutive_failures": { + "description": "最大連續失敗次數", + "type": "int", + "hint": "容許的最大連續失敗次數,超過後將停止重試" + } + }, + "general": { + "description": "基本設定", + "admins_id": { + "description": "管理員 ID" + }, + "platform_settings": { + "unique_session": { + "description": "隔離工作階段", + "hint": "啟用後,群組成員的上下文將會各自獨立。" + }, + "friend_message_needs_wake_prefix": { + "description": "私訊需要喚醒前綴" + }, + "reply_prefix": { + "description": "回覆時的文字前綴" + }, + "reply_with_mention": { + "description": "回覆時 @ 發送者" + }, + "reply_with_quote": { + "description": "回覆時引用發送者的訊息" + }, + "forward_threshold": { + "description": "轉發訊息的字數門檻" + }, + "empty_mention_waiting": { + "description": "只有 @ 機械人時是否觸發等待" + } + }, + "wake_prefix": { + "description": "喚醒前綴" + }, + "disable_builtin_commands": { + "description": "停用內建指令", + "hint": "停用所有 AstrBot 內建指令,例如 help, provider, model 等" + } + }, + "whitelist": { + "description": "白名單", + "platform_settings": { + "enable_id_white_list": { + "description": "啟用 ID 白名單", + "hint": "啟用後,只有在白名單內的工作階段 (Session) 才會回應,白名單留空代表不啟用白名單(所有 ID 皆可通過)。" + }, + "id_whitelist": { + "description": "白名單 ID 列表", + "hint": "使用 /sid 獲取 ID。列表為空時代表不啟用(即所有 ID 皆在白名單內)。" + }, + "id_whitelist_log": { + "description": "輸出日誌", + "hint": "啟用後,當一則訊息無法通過白名單時,會輸出 INFO 級別的日誌 (Log)。" + }, + "wl_ignore_admin_on_group": { + "description": "管理員群組訊息無視 ID 白名單" + }, + "wl_ignore_admin_on_friend": { + "description": "管理員私訊無視 ID 白名單" + } + } + }, + "rate_limit": { + "description": "頻率限制", + "platform_settings": { + "rate_limit": { + "time": { + "description": "訊息頻率限制時間 (秒)" + }, + "count": { + "description": "訊息頻率限制次數" + }, + "strategy": { + "description": "頻率限制策略" + } + } + } + }, + "content_safety": { + "description": "內容安全", + "content_safety": { + "also_use_in_response": { + "description": "同時檢查模型的輸出內容" + }, + "baidu_aip": { + "enable": { + "description": "使用百度內容安全審核", + "hint": "你需要手動安裝 baidu-aip 函式庫。" + }, + "app_id": { + "description": "App ID" + }, + "api_key": { + "description": "API Key" + }, + "secret_key": { + "description": "Secret Key" + } + }, + "internal_keywords": { + "enable": { + "description": "關鍵字檢查" + }, + "extra_keywords": { + "description": "額外關鍵字", + "hint": "額外的封鎖關鍵字列表,支援正規表示式 (Regular Expression)。" + } + } + } + }, + "t2i": { + "description": "文字轉圖片", + "t2i": { + "description": "文字轉圖片輸出" + }, + "t2i_word_threshold": { + "description": "文字轉圖片字數門檻" + } + }, + "others": { + "description": "其他設定", + "platform_settings": { + "ignore_bot_self_message": { + "description": "是否忽略機械人自身的訊息" + }, + "ignore_at_all": { + "description": "是否忽略 @All 標記" + }, + "no_permission_reply": { + "description": "用戶無權限時是否回覆" + } + }, + "platform_specific": { + "lark": { + "pre_ack_emoji": { + "enable": { + "description": "[飛書] 啟用確認前 Emoji 回應" + }, + "emojis": { + "description": "Emoji 列表 (飛書 Emoji 枚舉名稱)", + "hint": "Emoji 枚舉名稱請參考:[https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce](https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce)" + } + } + }, + "telegram": { + "pre_ack_emoji": { + "enable": { + "description": "[Telegram] 啟用確認前 Emoji 回應" + }, + "emojis": { + "description": "Emoji 列表 (Unicode)", + "hint": "Telegram 僅支援固定的 Reaction 集合,請參考:[https://gist.github.com/Soulter/3f22c8e5f9c7e152e967e8bc28c97fc9](https://gist.github.com/Soulter/3f22c8e5f9c7e152e967e8bc28c97fc9)" + } + } + }, + "discord": { + "pre_ack_emoji": { + "enable": { + "description": "[Discord] 啟用確認前 Emoji 回應" + }, + "emojis": { + "description": "Emoji 列表 (Unicode 或自訂 Emoji 名稱)", + "hint": "請填寫 Unicode Emoji,例如:👍、🤔、⏳" + } + } + } + } + } + }, + "plugin_group": { + "name": "插件設定", + "plugin": { + "description": "插件", + "plugin_set": { + "description": "可用插件", + "hint": "預設啟用所有未停用的插件。如果插件在插件管理頁面中被停用,在此處選擇也不會生效。" + } + } + }, + "ext_group": { + "name": "擴充功能", + "segmented_reply": { + "description": "分段回覆", + "platform_settings": { + "segmented_reply": { + "enable": { + "description": "啟用分段回覆" + }, + "only_llm_result": { + "description": "僅對 LLM 結果分段" + }, + "interval_method": { + "description": "間隔方式", + "hint": "random 為隨機時間,log 則根據訊息長度計算,$y=log_(x)$,x 為字數,y 的單位為秒。" + }, + "interval": { + "description": "隨機間隔時間", + "hint": "格式:Min,Max (例如:1.5,3.5)" + }, + "log_base": { + "description": "對數底數 (Log Base)", + "hint": "Log 間隔的底數,預設為 2.6。範圍為 1.0-10.0。" + }, + "words_count_threshold": { + "description": "分段回覆字數門檻", + "hint": "分段回覆的字數上限。只有字數小於此數值的訊息才會被分段,超過此數值的長文會直接發送(不分段),預設為 150。" + }, + "split_mode": { + "description": "分段模式", + "hint": "用於拆分一段訊息。預設情況下會根據句號、問號等標點符號拆分。例如填寫 `[。?!]` 會移除所有的句號、問號與感嘆號。re.findall(r'', text)", + "labels":[ + "正規表示式", + "分段詞列表" + ] + }, + "regex": { + "description": "分段正規表示式", + "hint": "用於依據 Regex 規則識別分段點。建議使用能夠配對到分隔符號的表達式。" + }, + "split_words": { + "description": "分段詞列表", + "hint": "偵測到列表中任何一個詞彙即進行分段" + }, + "content_cleanup_rule": { + "description": "內容過濾正規表示式", + "hint": "移除分段後內容中指定的部分。例如填寫 `[。?!]` 會移除所有的句號、問號與感嘆號。" + } + } + } + }, + "ltm": { + "description": "群聊上下文感知 (原對話記憶增強)", + "provider_ltm_settings": { + "group_icl_enable": { + "description": "啟用群聊上下文感知" + }, + "group_message_max_cnt": { + "description": "最大訊息數量" + }, + "image_caption": { + "description": "自動理解圖片", + "hint": "需要設定群聊圖片轉述模型。" + }, + "image_caption_provider_id": { + "description": "群聊圖片轉述模型", + "hint": "用於提供給群聊上下文感知功能進行圖片理解,與預設圖片轉述模型分開設定。" + }, + "active_reply": { + "enable": { + "description": "主動回覆" + }, + "method": { + "description": "主動回覆方式" + }, + "possibility_reply": { + "description": "回覆機率", + "hint": "介於 0.0-1.0 之間的數值" + }, + "whitelist": { + "description": "主動回覆白名單", + "hint": "留空則不啟用白名單過濾。使用 /sid 獲取 ID。" + } + } + } + } + }, + "system_group": { + "name": "系統設定", + "system": { + "description": "系統設定", + "t2i_strategy": { + "description": "文字轉圖片策略", + "hint": "文字轉圖片策略。`remote` 為使用遠端基於 HTML 的渲染服務,`local` 為使用 PIL 本機渲染。當使用 local 時,將 ttf 字體重新命名為 'font.ttf' 並放置於 data/ 目錄中即可自訂字體。" + }, + "t2i_endpoint": { + "description": "文字轉圖片服務 API 地址", + "hint": "留空時將使用 AstrBot API 服務" + }, + "t2i_template": { + "description": "文字轉圖片自訂模板", + "hint": "啟用後可自訂用於文字轉圖片渲染的 HTML 模板。" + }, + "t2i_active_template": { + "description": "目前套用中的文字轉圖片渲染模板", + "hint": "此處的數值由文字轉圖片模板管理頁面負責維護。" + }, + "log_level": { + "description": "終端機日誌級別", + "hint": "終端機 (Console) 輸出日誌的級別。" + }, + "log_file_enable": { + "description": "啟用檔案日誌", + "hint": "在終端機輸出日誌的同時,將日誌寫入檔案中。" + }, + "log_file_path": { + "description": "日誌檔案路徑", + "hint": "相對路徑以 data 目錄為基準,例如 logs/astrbot.log;支援絕對路徑。" + }, + "log_file_max_mb": { + "description": "日誌檔案大小上限 (MB)", + "hint": "超過大小限制會自動輪替 (Rotate),預設為 20MB。" + }, + "temp_dir_max_size": { + "description": "暫存目錄大小上限 (MB)", + "hint": "用於限制 data/temp 目錄總大小,單位為 MB。系統每 10 分鐘檢查一次,超過限制會依檔案修改時間由舊到新刪除,釋放約 30% 目前大小。" + }, + "trace_log_enable": { + "description": "啟用 Trace 檔案日誌", + "hint": "將 Trace Event 寫入獨立檔案中(不影響終端機輸出)。" + }, + "trace_log_path": { + "description": "Trace 日誌檔案路徑", + "hint": "相對路徑以 data 目錄為基準,例如 logs/astrbot.trace.log;支援絕對路徑。" + }, + "trace_log_max_mb": { + "description": "Trace 日誌大小上限 (MB)", + "hint": "超過大小限制會自動輪替 (Rotate),預設為 20MB。" + }, + "pip_install_arg": { + "description": "pip 安裝額外參數", + "hint": "安裝插件依賴項 (Dependency) 時,會使用 Python 的 pip 工具。此處可以填寫額外參數,例如 `--break-system-package` 等。" + }, + "pypi_index_url": { + "description": "PyPI 套件庫地址", + "hint": "安裝 Python 依賴項時請求的 PyPI 套件庫地址。預設為 [https://mirrors.aliyun.com/pypi/simple/](https://mirrors.aliyun.com/pypi/simple/)" + }, + "callback_api_base": { + "description": "對外可達的 Callback API 地址", + "hint": "外部服務可能會透過 AstrBot 產生的 Callback 連結 (例如檔案下載連結) 存取 AstrBot 後端。由於 AstrBot 無法自動判斷部署環境中對外可達的主機地址,因此需要透過此設定明確指定外部服務如何存取 AstrBot。例如 [http://localhost:6185](http://localhost:6185),[https://example.com](https://example.com) 等。" + }, + "dashboard": { + "ssl": { + "enable": { + "description": "啟用 WebUI HTTPS", + "hint": "啟用後,WebUI 會直接以 HTTPS 提供服務。" + }, + "cert_file": { + "description": "SSL 憑證檔案路徑", + "hint": "憑證檔案路徑 (PEM)。支援絕對路徑與相對路徑(相對於目前工作目錄)。" + }, + "key_file": { + "description": "SSL 私密金鑰檔案路徑", + "hint": "私密金鑰檔案路徑 (PEM)。支援絕對路徑與相對路徑(相對於目前工作目錄)。" + }, + "ca_certs": { + "description": "SSL CA 憑證檔案路徑", + "hint": "選填。用於指定 CA 憑證檔案路徑。" + } + } + }, + "timezone": { + "description": "時區", + "hint": "時區設定。請填寫 IANA 時區名稱,例如 Asia/Hong_Kong,留空時將使用系統預設時區。所有時區請參閱:[https://data.iana.org/time-zones/tzdb-2021a/zone1970.tab](https://data.iana.org/time-zones/tzdb-2021a/zone1970.tab)" + }, + "http_proxy": { + "description": "HTTP Proxy", + "hint": "啟用後,會以加入環境變數的方式設定 Proxy。格式為 `http://ip:port`" + }, + "no_proxy": { + "description": "直連地址列表" + } + } + }, + "provider_group": { + "provider": { + "genie_onnx_model_dir": { + "description": "ONNX 模型目錄", + "hint": "The directory path containing the ONNX model files" + }, + "genie_language": { + "description": "語言" + }, + "xai_native_search": { + "description": "啟用原生搜尋功能", + "hint": "啟用後,會透過 xAI 的 Chat Completions Native Live Search 進行上網搜尋(按量收費)。僅對 xAI 供應商生效。" + }, + "rerank_api_base": { + "description": "Rerank 模型 API Base URL", + "hint": "AstrBot 會在請求時於結尾加上 /v1/rerank。" + }, + "rerank_api_key": { + "description": "API Key", + "hint": "如果不需使用 API Key,請留空。" + }, + "rerank_model": { + "description": "Rerank 模型名稱" + }, + "return_documents": { + "description": "是否在排序結果中回傳文件原文", + "hint": "預設為 False,以減少網絡傳輸負載 (Overhead)。" + }, + "instruct": { + "description": "自訂排序任務類型說明", + "hint": "僅在使用 qwen3-rerank 模型時生效。建議以英文填寫。" + }, + "launch_model_if_not_running": { + "description": "模型未運行時自動啟動", + "hint": "如果模型目前未在 Xinference 服務中運行,是否嘗試自動啟動它。在正式 (Production) 環境中建議關閉此選項。" + }, + "modalities": { + "description": "模型能力", + "hint": "模型支援的模態 (Modality)。如果填寫的模型不支援圖像,請取消勾選圖像。", + "labels": [ + "文本 (Text)", + "圖像 (Image)", + "Tool Calling" + ] + }, + "custom_headers": { + "description": "自訂加入 Request Header", + "hint": "此處加入的 Key-value 對會合併至 OpenAI SDK 的 default_headers,用於自訂 HTTP Request Header。Value 必須為字串 (String)。" + }, + "ollama_disable_thinking": { + "description": "關閉思考模式", + "hint": "關閉 Ollama 思考模式。" + }, + "custom_extra_body": { + "description": "自訂 Request Body 參數", + "hint": "用於在請求時加入額外參數,例如 temperature、top_p、max_tokens 等。", + "template_schema": { + "temperature": { + "description": "溫度 (Temperature)", + "hint": "控制輸出的隨機性,範圍通常為 0-2。數值越大越隨機。", + "name": "Temperature" + }, + "top_p": { + "description": "Top-p 採樣", + "hint": "核採樣參數 (Nucleus Sampling Parameter),範圍通常為 0-1。控制模型考慮的機率質量 (Probability Mass)。", + "name": "Top-p" + }, + "max_tokens": { + "description": "最大 Token 數", + "hint": "生成的最大 Token 數量。", + "name": "Max Tokens" + } + } + }, + "gpt_weights_path": { + "description": "GPT 模型檔案路徑", + "hint": "即「.ckpt」後綴的檔案,請使用絕對路徑,路徑兩邊不要加上雙引號,留空則預設使用 GPT_SoVITS 內建的 SoVITS 模型 (建議直接在 GPT_SoVITS 中修改預設模型)" + }, + "sovits_weights_path": { + "description": "SoVITS 模型檔案路徑", + "hint": "即「.pth」後綴的檔案,請使用絕對路徑,路徑兩邊不要加上雙引號,留空則預設使用 GPT_SoVITS 內建的 SoVITS 模型 (建議直接在 GPT_SoVITS 中修改預設模型)" + }, + "gsv_default_parms": { + "description": "GPT_SoVITS 預設參數", + "hint": "參考音訊檔案路徑、參考音訊文字為必填,其他參數請依個人需求填寫", + "gsv_ref_audio_path": { + "description": "參考音訊檔案路徑", + "hint": "必填!請使用絕對路徑!路徑兩邊不要加上雙引號!" + }, + "gsv_prompt_text": { + "description": "參考音訊文字", + "hint": "必填!請填寫參考音訊中所講的文字" + }, + "gsv_prompt_lang": { + "description": "參考音訊文字語言", + "hint": "請填寫參考音訊文字的語言,預設為中文" + }, + "gsv_aux_ref_audio_paths": { + "description": "輔助參考音訊檔案路徑", + "hint": "輔助參考音訊檔案,可不填" + }, + "gsv_text_lang": { + "description": "文字語言", + "hint": "預設為中文" + }, + "gsv_top_k": { + "description": "生成語音的多樣性", + "hint": "" + }, + "gsv_top_p": { + "description": "核採樣閾值 (Nucleus Sampling Threshold)", + "hint": "" + }, + "gsv_temperature": { + "description": "生成語音的隨機性", + "hint": "" + }, + "gsv_text_split_method": { + "description": "文字切割方式", + "hint": "可選值: `cut0`:不切割 `cut1`:四句一切割 `cut2`:50 字一切割 `cut3`:按中文句號切割 `cut4`:按英文句號切割 `cut5`:按標點符號切割" + }, + "gsv_batch_size": { + "description": "Batch Size", + "hint": "" + }, + "gsv_batch_threshold": { + "description": "Batch Threshold", + "hint": "" + }, + "gsv_split_bucket": { + "description": "將文字分塊 (Bucket) 以利於平行處理", + "hint": "" + }, + "gsv_speed_factor": { + "description": "語音播放速度", + "hint": "1 為原速" + }, + "gsv_fragment_interval": { + "description": "語音片段之間的間隔時間", + "hint": "" + }, + "gsv_streaming_mode": { + "description": "啟用串流模式", + "hint": "" + }, + "gsv_seed": { + "description": "隨機種子", + "hint": "用於確保結果可重現" + }, + "gsv_parallel_infer": { + "description": "平行執行推論", + "hint": "" + }, + "gsv_repetition_penalty": { + "description": "重複懲罰系數", + "hint": "" + }, + "gsv_media_type": { + "description": "輸出媒體格式", + "hint": "建議使用 wav" + } + }, + "embedding_dimensions": { + "description": "Embedding 維度", + "hint": "Embedding 向量的維度。根據不同模型可能需要調整,請參閱具體模型的文件。此設定請務必填寫正確,否則將導致向量資料庫無法使用。" + }, + "embedding_model": { + "description": "Embedding 模型", + "hint": "Embedding 模型名稱。" + }, + "embedding_api_key": { + "description": "API Key" + }, + "embedding_api_base": { + "description": "API Base URL" + }, + "openai_embedding": { + "hint": "如果測試不通過,可以嘗試在結尾加上 /v1 以兼容部分 OpenAI API 版本。" + }, + "gemini_embedding": { + "hint": "Gemini Embedding 無須手動加上 /v1beta。" + }, + "volcengine_cluster": { + "description": "Volcengine Cluster", + "hint": "如果使用 Voice Clone 大模型,可選 volcano_icl 或 volcano_icl_concurr,預設使用 volcano_tts" + }, + "volcengine_voice_type": { + "description": "Volcengine Voice Type", + "hint": "輸入聲音 ID (Voice_type)" + }, + "volcengine_speed_ratio": { + "description": "語速設定", + "hint": "語速設定,範圍 0.2 到 3.0,預設為 1.0" + }, + "volcengine_volume_ratio": { + "description": "音量設定", + "hint": "音量設定,範圍 0.0 到 2.0,預設為 1.0" + }, + "azure_tts_voice": { + "description": "語音類型設定", + "hint": "API 語音類型" + }, + "azure_tts_style": { + "description": "風格設定", + "hint": "聲音特定的說話風格。可以表達 Happy、Sympathy 與 Calm 等情緒。" + }, + "azure_tts_role": { + "description": "角色扮演設定 (選填)", + "hint": "說話角色扮演。聲音可以模仿不同年紀與性別,但語音名稱不會改變。例如男性聲音可以提高音調與改變語調來模仿女性聲音,但語音名稱不會改變。如果角色不存在或不支援,則會被忽略。" + }, + "azure_tts_rate": { + "description": "語速設定", + "hint": "指示文字發音的語速。可以在單字或句子層面套用。語速變化應為原音訊的 0.5 到 2 倍。" + }, + "azure_tts_volume": { + "description": "語音音量設定", + "hint": "指示語音的音量級別。可以在句子層面套用。以 0.0 到 100.0 (最靜到最大聲,例如 75) 的數字表示。預設為 100.0。" + }, + "azure_tts_region": { + "description": "API 區域", + "hint": "Azure_TTS 處理數據的區域,詳情請參閱 https://learn.microsoft.com/zh-cn/azure/ai-services/speech-service/regions" + }, + "azure_tts_subscription_key": { + "description": "服務訂閱密鑰", + "hint": "Azure_TTS 服務的訂閱密鑰 (注意不是 Token)" + }, + "dashscope_tts_voice": { + "description": "語音類型" + }, + "gm_resp_image_modal": { + "description": "啟用圖像模態", + "hint": "啟用後,將支援回傳圖片內容。需要模型支援,否則會報錯。具體支援的模型請參閱 Google Gemini 官網。溫馨提示,如果你需要生成圖片,請關閉 `啟用群組成員識別` 設定以獲得更好的效果。" + }, + "gm_native_search": { + "description": "啟用原生搜尋功能", + "hint": "啟用後所有 Function Tool 將會失效,免費次數限制請參閱官方文件" + }, + "gm_native_coderunner": { + "description": "啟用原生 Code Runner", + "hint": "啟用後所有 Function Tool 將會失效" + }, + "gm_url_context": { + "description": "啟用 URL 內容感知", + "hint": "啟用後所有 Function Tool 將會失效" + }, + "gm_safety_settings": { + "description": "安全過濾器", + "hint": "設定模型輸入內容的安全性過濾等級。過濾等級分為 NONE(不封鎖)、HIGH(高風險封鎖)、MEDIUM_AND_ABOVE(中等風險及以上封鎖)、LOW_AND_ABOVE(低風險及以上封鎖),具體請參閱 Gemini API 文件。", + "harassment": { + "description": "騷擾內容", + "hint": "負面或有害的評論" + }, + "hate_speech": { + "description": "仇恨言論", + "hint": "粗魯、無禮或褻瀆性質的內容" + }, + "sexually_explicit": { + "description": "色情內容", + "hint": "包含性行為或其他淫穢內容的提及" + }, + "dangerous_content": { + "description": "危險內容", + "hint": "宣揚、助長或鼓勵有害行為的資訊" + } + }, + "gm_thinking_config": { + "description": "思考配置", + "budget": { + "description": "思考預算", + "hint": "用於指定模型推論時使用的 Thinking Token 數量上限。參閱:https://ai.google.dev/gemini-api/docs/thinking#set-budget" + }, + "level": { + "description": "思考級別", + "hint": "推薦用於 Gemini 3 及以上模型,可以控制推論行為。參閱:https://ai.google.dev/gemini-api/docs/thinking#thinking-levels" + } + }, + "anth_thinking_config": { + "description": "思考配置", + "type": { + "description": "思考類型", + "hint": "設定為 'adaptive' 以使用適應性思考 (推薦 Opus 4.6+ / Sonnet 4.6+)。留空則使用手動預算模式。參閱:https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking" + }, + "budget": { + "description": "思考預算", + "hint": "Anthropic thinking.budget_tokens 參數。必須 >= 1024。僅在思考類型留空時生效。Opus 4.6 / Sonnet 4.6 已經棄用此項目。參閱:https://platform.claude.com/docs/en/build-with-claude/extended-thinking" + }, + "effort": { + "description": "思考強度", + "hint": "當思考類型為 'adaptive' 時控制思考深度。'high' 為預設值。'max' 僅適用於 Opus 4.6。參閱:https://platform.claude.com/docs/en/build-with-claude/effort" + } + }, + "minimax-group-id": { + "description": "用戶群組", + "hint": "可在帳戶管理->基本資訊中查看" + }, + "minimax-langboost": { + "description": "指定語言/方言", + "hint": "增強對指定少數語言與方言的識別能力,設定後可提升在指定語言/方言場景的語音表現" + }, + "minimax-voice-speed": { + "description": "語速", + "hint": "生成聲音的語速,數值 [0.5, 2],預設為 1.0,數值越大越快" + }, + "minimax-voice-vol": { + "description": "音量", + "hint": "生成聲音的音量,數值 (0, 10],預設為 1.0,數值越大越大聲" + }, + "minimax-voice-pitch": { + "description": "語調", + "hint": "生成聲音的語調,數值 [-12, 12],預設為 0" + }, + "minimax-is-timber-weight": { + "description": "啟用混合音色", + "hint": "啟用混合音色,支援自訂權重混合最多四種音色,啟用後會自動忽略單一音色設定" + }, + "minimax-timber-weight": { + "description": "混合音色", + "hint": "混合音色及其權重,最多支援四種音色,權重為整數,數值範圍 [1, 100]。可前往官網 API 語音 Debug 預覽程式碼獲取預設與模板,必須嚴格依照 JSON 字串格式填寫,可查看 Console 判斷是否解析成功。具體結構參考預設值與官網程式碼預覽。" + }, + "minimax-voice-id": { + "description": "單一音色", + "hint": "單一音色 ID,詳情請參閱官網文件" + }, + "minimax-voice-emotion": { + "description": "情緒", + "hint": "控制合成語音的情緒。如果是 auto,會根據文字內容自動選擇情緒。" + }, + "minimax-voice-latex": { + "description": "支援朗讀 LaTeX 公式", + "hint": "朗讀 LaTeX 公式,但須確保輸入的文字符合官網要求的格式" + }, + "minimax-voice-english-normalization": { + "description": "支援英文文字標準化 (Text Normalization)", + "hint": "可以提升數字閱讀場景的表現,但會稍微增加延遲" + }, + "rag_options": { + "description": "RAG 選項", + "hint": "檢索知識庫設定,選填。僅限 Agent App 類型支援 (Agent App,包括 RAG App)。阿里雲百鍊 App 開啟此項將無法進行多輪對話 (Multi-turn Chat)。", + "pipeline_ids": { + "description": "知識庫 ID 列表", + "hint": "對指定知識庫內所有文件進行檢索,前往 https://bailian.console.aliyun.com/ 數據應用->知識索引 建立並獲取 ID。" + }, + "file_ids": { + "description": "非結構化文件 ID,傳送此參數會對指定的非結構化文件進行檢索。", + "hint": "對指定的非結構化文件進行檢索。前往 https://bailian.console.aliyun.com/ 數據管理 建立並獲取 ID。" + }, + "output_reference": { + "description": "是否輸出知識庫/文件的引用來源", + "hint": "每次回答後附上引用來源。預設為 False。" + } + }, + "sensevoice_hint": { + "description": "部署 SenseVoice", + "hint": "啟用前請 pip Install funasr、funasr_onnx、torchaudio、torch、modelscope、jieba 函式庫 (預設使用 CPU,大約下載 1 GB),以及安裝 ffmpeg。否則無法轉換文字。" + }, + "is_emotion": { + "description": "情緒識別", + "hint": "是否開啟情緒識別。happy|sad|angry|neutral|fearful|disgusted|surprised|unknown" + }, + "stt_model": { + "description": "模型名稱", + "hint": "modelscope 的模型名稱。預設:iic/SenseVoiceSmall。" + }, + "variables": { + "description": "Workflow 固定的輸入變數", + "hint": "選填。Workflow 固定的輸入變數 (Input Variable),將作為 Workflow 的輸入。也可以在聊天時使用 /set 指令動態設定變數。如果變數名稱重複,會優先使用動態設定的變數。" + }, + "dashscope_app_type": { + "description": "應用程式類型", + "hint": "百鍊 App 的應用程式類型。" + }, + "timeout": { + "description": "逾時時間", + "hint": "逾時時間,單位為秒。" + }, + "mimo-stt-system-prompt": { + "description": "系統提示詞 (System Prompt)", + "hint": "引導 MiMo STT 轉錄行為的系統提示詞。" + }, + "mimo-stt-user-prompt": { + "description": "用戶提示詞 (User Prompt)", + "hint": "附加給 MiMo STT 的用戶提示詞,用於限制回傳結果的格式。" + }, + "openai-tts-voice": { + "description": "聲音", + "hint": "OpenAI TTS 的聲音。OpenAI 預設支援: 'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'" + }, + "mimo-tts-voice": { + "description": "語音類型", + "hint": "MiMo TTS 的音色名稱。可選值包括 'mimo_default'、'default_en'、'default_zh'。" + }, + "mimo-tts-format": { + "description": "輸出格式", + "hint": "MiMo TTS 生成音訊的格式。支援 'wav'、'mp3'、'pcm'。" + }, + "mimo-tts-style-prompt": { + "description": "風格提示詞", + "hint": "將使用 標籤加在文字開頭,用於控制語速、情緒、角色或風格,例如 開心、變快、孫悟空、悄悄話。可以留空。" + }, + "mimo-tts-dialect": { + "description": "方言", + "hint": "會與風格提示詞一起寫入開頭的 標籤,例如 東北話、四川話、河南話、粵語。可以留空。" + }, + "mimo-tts-seed-text": { + "description": "種子文字 (Seed Text)", + "hint": "作為選填的 user message 發送,用於輔助調整語氣與風格,不會拼接至合成的文字中。" + }, + "fishaudio-tts-character": { + "description": "角色", + "hint": "fishaudio TTS 的角色。預設為可莉。更多角色請前往:https://fish.audio/zh-CN/discovery" + }, + "fishaudio-tts-reference-id": { + "description": "reference_id", + "hint": "fishaudio TTS 的參考模型 ID (選填)。如果填寫此欄位,會直接使用模型 ID 而不依賴角色名稱查詢。例如:626bb6d3f3364c9cbc3aa6a67300a664。更多模型請前往:https://fish.audio/zh-CN/discovery,進入模型詳情頁面可以複製模型 ID" + }, + "whisper_hint": { + "description": "本地部署 Whisper 模型須知", + "hint": "啟用前請 pip install openai-whisper 函式庫 (NVIDIA 顯示卡用戶大約需下載 2GB,主要是 torch 與 cuda,CPU 用戶大約 1 GB),以及安裝 ffmpeg。否則無法轉換文字。" + }, + "id": { + "description": "ID" + }, + "type": { + "description": "模型供應商種類" + }, + "provider_type": { + "description": "模型供應商能力種類" + }, + "enable": { + "description": "啟用" + }, + "key": { + "description": "API Key" + }, + "api_base": { + "description": "API Base URL" + }, + "proxy": { + "description": "Proxy 地址", + "hint": "HTTP/HTTPS Proxy 地址,格式例如 http://127.0.0.1:7890。僅對此供應商的 API 請求生效,不影響 Docker 內網通訊。" + }, + "model": { + "description": "模型 ID", + "hint": "模型名稱,例如 gpt-4o-mini, deepseek-chat。" + }, + "max_context_tokens": { + "description": "模型上下文視窗大小", + "hint": "模型最大上下文 Token 大小。如果是 0,會自動填入模型 Metadata(如果有),也可以手動修改。" + }, + "dify_api_key": { + "description": "API Key", + "hint": "Dify API Key。此項必填。" + }, + "dify_api_base": { + "description": "API Base URL", + "hint": "Dify API Base URL。預設為 https://api.dify.ai/v1" + }, + "dify_api_type": { + "description": "Dify 應用程式類型", + "hint": "Dify API 類型。根據 Dify 官網,目前支援 chat, chatflow, agent, workflow 四種應用程式類型。" + }, + "dify_workflow_output_key": { + "description": "Dify Workflow 輸出變數名稱", + "hint": "Dify Workflow 輸出變數名稱。僅當應用程式類型為 workflow 時使用。預設為 astrbot_wf_output。" + }, + "dify_query_input_key": { + "description": "提示詞輸入變數名稱", + "hint": "發送出去的訊息文字內容對應的輸入變數名稱。預設為 astrbot_text_query。" + }, + "coze_api_key": { + "description": "Coze API Key", + "hint": "Coze API Key,用於存取 Coze 服務。" + }, + "bot_id": { + "description": "Bot ID", + "hint": "Coze 機械人的 ID,在 Coze 平台建立後可獲取。" + }, + "coze_api_base": { + "description": "API Base URL", + "hint": "Coze API 的 Base URL,預設為 https://api.coze.cn" + }, + "deerflow_api_base": { + "description": "API Base URL", + "hint": "DeerFlow API Gateway 地址,預設為 http://127.0.0.1:2026" + }, + "deerflow_api_key": { + "description": "DeerFlow API Key", + "hint": "選填。如果 DeerFlow Gateway 設定了 Bearer Auth,請在此處填寫。" + }, + "deerflow_auth_header": { + "description": "Authorization Header", + "hint": "選填。自訂 Authorization Request Header,優先級高於 DeerFlow API Key。" + }, + "deerflow_assistant_id": { + "description": "Assistant ID", + "hint": "LangGraph assistant_id,預設為 lead_agent。" + }, + "deerflow_model_name": { + "description": "覆寫模型名稱", + "hint": "選填。覆寫 DeerFlow 預設模型(對應 runtime context 的 model_name)。" + }, + "deerflow_thinking_enabled": { + "description": "啟用思考模式" + }, + "deerflow_plan_mode": { + "description": "啟用計劃模式", + "hint": "對應 DeerFlow 的 is_plan_mode。" + }, + "deerflow_subagent_enabled": { + "description": "啟用 SubAgent", + "hint": "對應 DeerFlow 的 subagent_enabled。" + }, + "deerflow_max_concurrent_subagents": { + "description": "SubAgent 最大並行數", + "hint": "對應 DeerFlow 的 max_concurrent_subagents。僅在啟用 SubAgent 時生效,預設為 3。" + }, + "deerflow_recursion_limit": { + "description": "遞迴深度上限", + "hint": "對應 LangGraph 的 recursion_limit。" + }, + "auto_save_history": { + "description": "由 Coze 管理對話歷史", + "hint": "啟用後,將由 Coze 進行對話歷史紀錄管理,此時 AstrBot 本機儲存的上下文將不會生效 (僅供檢視),對 AstrBot 上下文的操作也不會生效。如果停用,則使用 AstrBot 管理上下文。" + } + } + }, + "help": { + "documentation": "官方文件", + "support": "加入社群發問", + "helpText": "不清楚如何配置設定?請參考 {documentation} 或 {support}。", + "helpPrefix": "不清楚如何配置設定?請參考", + "helpMiddle": "或", + "helpSuffix": "。" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/config.json b/dashboard/src/i18n/locales/zh-HK/features/config.json new file mode 100644 index 0000000000..176feac6a7 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/config.json @@ -0,0 +1,129 @@ +{ + "title": "設定檔", + "subtitle": "管理系統設定與配置", + "editor": { + "visual": "視覺化編輯", + "code": "原始碼編輯", + "revertCode": "還原至修改前的原始碼", + "applyConfig": "套用此設定", + "applyTip": "「套用此設定」會將設定暫存並套用至介面。要實際儲存的話,需要點擊右下角的儲存按鈕。" + }, + "actions": { + "save": "儲存設定", + "delete": "刪除此項", + "add": "新增", + "reset": "重設為預設值", + "export": "匯出設定", + "import": "匯入設定", + "validate": "驗證設定" + }, + "help": { + "documentation": "官方文件", + "support": "加入社群發問", + "helpText": "不清楚如何配置設定?請參考 {documentation} 或 {support}。", + "helpPrefix": "不清楚如何配置設定?請參考", + "helpMiddle": "或", + "helpSuffix": "。" + }, + "messages": { + "configApplied": "設定套用成功。如需儲存,請點擊右下角的儲存按鈕。", + "configApplyError": "設定無法套用,JSON 格式錯誤。", + "unsavedChangesNotice": "目前設定有未儲存的修改。請點擊右下角的儲存按鈕以生效。", + "saveSuccess": "設定儲存成功", + "saveError": "設定儲存失敗", + "loadError": "設定載入失敗", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗", + "updateSuccess": "更新成功", + "updateError": "更新失敗" + }, + "sections": { + "general": "一般設定", + "advanced": "進階設定", + "security": "安全性設定", + "appearance": "外觀設定", + "notification": "通知設定" + }, + "general": { + "botName": "機械人名稱", + "language": "介面語言", + "timezone": "時區", + "autoSave": "自動儲存", + "debugMode": "除錯模式" + }, + "advanced": { + "logLevel": "日誌級別 (Log Level)", + "maxConnections": "最大連線數", + "timeout": "逾時時間", + "retryAttempts": "重試次數", + "cacheSize": "快取大小" + }, + "security": { + "apiKey": "API 密鑰", + "allowedHosts": "允許的網域", + "rateLimit": "頻率限制", + "encryption": "加密設定" + }, + "configSelection": { + "selectConfig": "選擇設定檔", + "normalConfig": "一般", + "systemConfig": "系統" + }, + "search": { + "placeholder": "搜尋設定項目 (欄位名/描述/提示)", + "noResult": "找不到符合的設定項目" + }, + "configManagement": { + "title": "設定檔管理", + "description": "AstrBot 支援為不同的機械人分別配置設定檔。預設會使用 `default` 設定檔。", + "newConfig": "新增設定檔", + "editConfig": "編輯設定檔", + "manageConfigs": "管理設定檔...", + "configName": "名稱", + "fillConfigName": "輸入設定檔名稱", + "confirmDelete": "確定要刪除設定檔 \"{name}\"?此操作無法復原。", + "pleaseEnterName": "請輸入設定檔名稱", + "createFailed": "建立新設定檔失敗", + "deleteFailed": "刪除設定檔失敗", + "updateFailed": "更新設定檔失敗" + }, + "buttons": { + "cancel": "取消", + "create": "建立", + "update": "更新" + }, + "codeEditor": { + "title": "編輯設定檔" + }, + "fileUpload": { + "button": "管理檔案", + "dialogTitle": "已上載的檔案", + "dropzone": "上載新檔案", + "allowedTypes": "允許的類型:{types}", + "empty": "暫無已上載的檔案", + "statusMissing": "檔案遺失", + "statusUnconfigured": "未加入設定", + "uploadSuccess": "成功上載了 {count} 個檔案", + "uploadFailed": "上載失敗", + "loadFailed": "取得檔案列表失敗", + "fileTooLarge": "檔案過大(限制 {max} MB):{name}", + "deleteSuccess": "已刪除檔案", + "deleteFailed": "刪除失敗", + "addToConfig": "已加入至設定", + "fileCount": "檔案數量:{count}", + "done": "完成" + }, + "unsavedChangesWarning": { + "dialogTitle": "未儲存的修改", + "leavePage": "目前設定有未儲存的修改,切換前是否需要儲存?", + "switchConfig": "切換設定檔將遺失所有未儲存的修改,是否先儲存?", + "options": { + "save": "儲存", + "saveAndSwitch": "儲存並切換", + "discardAndSwitch": "捨棄修改並切換", + "closeCard": "關閉", + "confirm": "確認", + "cancel": "取消" + } + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/console.json b/dashboard/src/i18n/locales/zh-HK/features/console.json new file mode 100644 index 0000000000..45382f0d5d --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/console.json @@ -0,0 +1,18 @@ +{ + "title": "平台日誌", + "autoScroll": { + "enabled": "自動捲動:開", + "disabled": "自動捲動:關" + }, + "pipInstall": { + "button": "安裝 pip 套件", + "dialogTitle": "安裝 pip 套件", + "packageLabel": "*套件名稱,例如 llmtuner", + "mirrorLabel": "強制指定 PyPI 套件庫連結(選填)", + "mirrorHint": "強制指定 PyPI 套件庫連結 > 設定 `PyPI 套件庫地址`", + "installButton": "安裝" + }, + "debugHint": { + "text": "Debug Log 需在「設定檔 → 系統設定 → 終端機日誌級別」中開啟" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/conversation.json b/dashboard/src/i18n/locales/zh-HK/features/conversation.json new file mode 100644 index 0000000000..bf31c49279 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/conversation.json @@ -0,0 +1,102 @@ +{ + "title": "對話管理", + "subtitle": "管理與查看用戶對話紀錄", + "filters": { + "title": "篩選", + "platform": "機械人 ID", + "type": "類型", + "search": "搜尋關鍵字", + "reset": "重設" + }, + "history": { + "title": "對話紀錄", + "refresh": "重新整理" + }, + "batch": { + "deleteSelected": "刪除已選項目 ({count})", + "exportSelected": "匯出已選項目 ({count})" + }, + "pagination": { + "itemsPerPage": "每頁", + "showingItems": "顯示 {start}-{end} 項,共 {total} 項" + }, + "table": { + "headers": { + "title": "對話標題", + "platform": "機械人 ID", + "type": "訊息類型", + "cid": "對話 ID", + "umo": "訊息工作階段來源", + "sessionId": "Session ID", + "createdAt": "建立時間", + "updatedAt": "更新時間", + "actions": "操作" + } + }, + "actions": { + "view": "查看", + "edit": "編輯", + "delete": "刪除" + }, + "messageTypes": { + "group": "群組聊天", + "friend": "私訊", + "unknown": "未知" + }, + "status": { + "noTitle": "無標題對話", + "unknown": "未知", + "noData": "暫無對話紀錄", + "emptyContent": "對話內容為空", + "audioNotSupported": "你的瀏覽器不支援播放音訊。" + }, + "dialogs": { + "view": { + "title": "對話詳情", + "editMode": "編輯對話", + "previewMode": "預覽模式", + "saveChanges": "儲存修改", + "close": "關閉", + "confirmClose": "你有未儲存的修改,確定要關閉?" + }, + "edit": { + "title": "編輯對話資訊", + "titleLabel": "對話標題", + "titlePlaceholder": "輸入對話標題", + "cancel": "取消", + "save": "儲存" + }, + "delete": { + "title": "確認刪除", + "message": "確定要刪除對話 {title}?此操作無法復原。", + "cancel": "取消", + "confirm": "刪除" + }, + "batchDelete": { + "title": "確認批次刪除", + "message": "確定要刪除已選的 {count} 個對話?此操作無法復原,請謹慎操作!", + "andMore": "等 {count} 個", + "cancel": "取消", + "confirm": "批次刪除", + "warning": "警告:此操作無法復原!" + } + }, + "messages": { + "fetchError": "獲取對話列表失敗", + "saveSuccess": "儲存成功", + "saveError": "儲存失敗", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗", + "historyError": "獲取對話紀錄失敗", + "historySaveSuccess": "對話紀錄儲存成功", + "historySaveError": "對話紀錄儲存失敗", + "invalidJson": "JSON 格式無效", + "noItemSelected": "請先選擇要刪除的對話", + "batchDeleteSuccess": "成功刪除了 {count} 個對話", + "batchDeleteError": "批次刪除失敗", + "batchDeletePartial": "刪除完成:成功 {deleted} 個,失敗 {failed} 個", + "exportSuccess": "匯出成功", + "exportError": "匯出失敗", + "noItemSelectedForExport": "請先選擇要匯出的對話" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/cron.json b/dashboard/src/i18n/locales/zh-HK/features/cron.json new file mode 100644 index 0000000000..e7f48988ae --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/cron.json @@ -0,0 +1,66 @@ +{ + "page": { + "title": "未來任務管理", + "beta": "實驗性", + "subtitle": "查看為 AstrBot 設定的未來任務。AstrBot 會自動喚醒執行任務,完成後會通知設定該任務的用戶。需要先在設定檔中啟用「主動型能力」。", + "proactive": { + "supported": "主動傳送結果僅支援以下你已設定的平台:{platforms}", + "unsupported": "暫無支援主動發送訊息的平台,請在平台設定中開啟。" + } + }, + "actions": { + "create": "建立任務", + "refresh": "重新整理", + "delete": "刪除", + "cancel": "取消", + "submit": "建立" + }, + "table": { + "title": "已註冊的任務", + "empty": "暫無任務。", + "headers": { + "name": "名稱", + "type": "類型", + "cron": "Cron", + "session": "Session ID", + "nextRun": "下一次執行", + "lastRun": "最近一次執行", + "note": "說明", + "actions": "操作" + }, + "type": { + "once": "一次性", + "recurring": "循環", + "activeAgent": "Active Agent", + "workflow": "Workflow", + "unknown": "{type}" + }, + "timezoneLocal": "本機時區", + "notAvailable": "—" + }, + "form": { + "title": "建立任務", + "chatHint": "可以直接與 AstrBot 聊天並要求建立未來任務,無須在此新增。", + "runOnce": "一次性任務", + "name": "任務名稱", + "note": "任務說明", + "cron": "Cron 表示式", + "cronPlaceholder": "0 9 * * *", + "runAt": "執行時間", + "session": "目標工作階段 (platform_id:message_type:session_id)", + "timezone": "時區(選填,例如 Asia/Hong_Kong)", + "enabled": "啟用" + }, + "messages": { + "loadFailed": "獲取任務失敗", + "updateFailed": "更新失敗", + "deleteSuccess": "已刪除", + "deleteFailed": "刪除失敗", + "sessionRequired": "請填寫工作階段 (Session)", + "noteRequired": "請填寫說明", + "cronRequired": "請填寫 Cron 表示式", + "runAtRequired": "請選擇執行時間", + "createSuccess": "建立成功", + "createFailed": "建立失敗" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/dashboard.json b/dashboard/src/i18n/locales/zh-HK/features/dashboard.json new file mode 100644 index 0000000000..acb029378b --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/dashboard.json @@ -0,0 +1,65 @@ +{ + "title": "平台日誌", + "subtitle": "即時監控與數據統計", + "lastUpdate": "最後更新", + "status": { + "loading": "載入中...", + "dataError": "獲取數據失敗", + "noticeError": "獲取公告失敗", + "online": "上線", + "uptime": "運行時間", + "memoryUsage": "記憶體佔用" + }, + "stats": { + "totalMessage": { + "title": "訊息總數", + "subtitle": "所有平台發送的訊息總計" + }, + "onlinePlatform": { + "title": "訊息平台", + "subtitle": "已連線的訊息平台數量" + }, + "runningTime": { + "title": "運行時間", + "subtitle": "系統已運行時長", + "format": "{hours} 小時 {minutes} 分鐘 {seconds} 秒" + }, + "memoryUsage": { + "title": "記憶體佔用", + "subtitle": "系統記憶體使用量", + "cpuLoad": "CPU 負載", + "status": { + "good": "良好", + "normal": "正常", + "high": "偏高" + } + } + }, + "charts": { + "messageTrend": { + "title": "訊息趨勢分析", + "subtitle": "追蹤訊息數量隨時間的變化", + "totalMessages": "總訊息數", + "dailyAverage": "每日平均", + "growthRate": "增長率", + "timeLabel": "時間", + "messageCount": "訊息數量", + "timeRanges": { + "1day": "過去 1 天", + "3days": "過去 3 天", + "1week": "過去 7 天", + "1month": "過去 30 天" + } + }, + "platformStat": { + "title": "平台訊息統計", + "subtitle": "各平台訊息數量分佈", + "total": "總計", + "noData": "暫無平台數據", + "messageUnit": "條", + "platformCount": "平台數量", + "mostActive": "最活躍", + "totalPercentage": "總訊息佔比" + } + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/extension.json b/dashboard/src/i18n/locales/zh-HK/features/extension.json new file mode 100644 index 0000000000..25d9861d77 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/extension.json @@ -0,0 +1,371 @@ +{ + "title": "插件管理", + "subtitle": "管理與設定系統插件", + "tabs": { + "installedPlugins": "AstrBot 插件", + "market": "AstrBot 插件市場", + "installedMcpServers": "MCP", + "skills": "Skills", + "handlersOperation": "管理行為 (Handler)" + }, + "titles": { + "installedAstrBotPlugins": "已安裝的 AstrBot 插件", + "pinnedPlugins": "已釘選的插件" + }, + "failedPlugins": { + "title": "載入失敗的插件({count})", + "hint": "這些插件無法載入,可以嘗試重新載入或直接解除安裝。", + "columns": { + "plugin": "插件", + "error": "錯誤" + } + }, + "search": { + "placeholder": "搜尋插件...", + "marketPlaceholder": "搜尋市場插件..." + }, + "filters": { + "all": "全部" + }, + "views": { + "card": "卡片檢視", + "list": "列表檢視" + }, + "buttons": { + "showSystemPlugins": "顯示系統插件", + "hideSystemPlugins": "隱藏系統插件", + "install": "安裝", + "uninstall": "解除安裝", + "update": "更新", + "reload": "重新載入", + "enable": "啟用", + "disable": "停用", + "configure": "設定", + "viewInfo": "Handler", + "viewDocs": "文件", + "viewRepo": "Repo", + "close": "關閉", + "save": "儲存", + "saveAndClose": "儲存並關閉", + "cancel": "取消", + "actions": "操作", + "back": "返回", + "selectFile": "選擇檔案", + "refresh": "重新整理", + "updateAll": "更新所有插件", + "deleteSource": "刪除來源", + "pin": "釘選", + "unpin": "取消釘選", + "reshuffle": "隨機抽取" + }, + "status": { + "enabled": "已啟用", + "disabled": "已停用", + "system": "系統", + "loading": "載入中...", + "installed": "已安裝", + "unknown": "未知" + }, + "tooltips": { + "enable": "點擊以啟用", + "disable": "點擊以停用", + "reload": "重新載入", + "configure": "設定", + "viewInfo": "Handler", + "viewDocs": "文件", + "update": "更新", + "uninstall": "解除安裝" + }, + "table": { + "headers": { + "name": "名稱", + "description": "描述", + "version": "版本", + "author": "作者", + "status": "狀態", + "actions": "操作", + "stars": "Star 數量", + "lastUpdate": "最近更新", + "tags": "標籤", + "eventType": "Handler 類型", + "specificType": "具體類型", + "trigger": "觸發方式" + } + }, + "empty": { + "noPlugins": "暫無插件", + "noPluginsDesc": "請嘗試安裝插件或顯示系統插件" + }, + "market": { + "recommended": "🥳 推薦", + "allPlugins": "📦 全部插件", + "category": "分類", + "categories": { + "all": "全部", + "ai_tools": "AI 增強", + "entertainment": "娛樂", + "productivity": "生產力", + "integrations": "外部整合", + "utilities": "生活實用", + "other": "其他" + }, + "showFullName": "全名", + "devDocs": "插件開發文件", + "submitRepo": "提交插件 Repo", + "customSource": "自訂插件來源", + "source": "插件來源", + "availableSources": "可用來源", + "sourceManagement": "插件來源管理", + "addSource": "新增插件來源", + "sourceName": "來源名稱", + "sourceUrl": "來源 URL", + "defaultSource": "預設插件來源", + "removeSource": "刪除插件來源", + "confirmRemoveSource": "確定要刪除此插件來源?", + "sourceAdded": "已新增插件來源", + "sourceRemoved": "已刪除插件來源", + "sourceError": "操作失敗", + "selectSource": "選擇插件來源", + "currentSource": "目前插件來源", + "editSource": "編輯插件來源", + "sourceUpdated": "插件來源更新成功", + "defaultOfficialSource": "預設官方來源", + "sourceExists": "此插件來源已經存在", + "installPlugin": "安裝插件", + "randomPlugins": "🎲 隨機插件", + "showRandomPlugins": "顯示隨機插件", + "hideRandomPlugins": "隱藏隨機插件", + "sourceSafetyWarning": "即使是預設插件來源,我們也無法完全保證插件的穩定性與安全性,使用前請謹慎檢查。" + }, + "sort": { + "by": "排序方式", + "default": "預設排序", + "installTime": "最後修改時間", + "name": "名稱", + "stars": "Star 數量", + "author": "作者名稱", + "updated": "更新時間", + "updateStatus": "更新狀態", + "ascending": "遞增", + "descending": "遞減" + }, + "tags": { + "danger": "危險" + }, + "dialogs": { + "error": { + "title": "錯誤訊息", + "checkConsole": "詳情請查看平台日誌" + }, + "config": { + "title": "插件設定", + "noConfig": "此插件無設定選項" + }, + "loading": { + "title": "載入中...", + "logs": "日誌" + }, + "uninstall": { + "title": "確認刪除", + "message": "確定要刪除目前的插件?", + "deleteConfig": "同時刪除插件設定檔", + "deleteData": "同時刪除插件持久化資料", + "configHint": "設定檔位於 data/config 目錄", + "dataHint": "刪除 data/plugin_data 與 data/plugins_data 目錄內的資料" + }, + "install": { + "title": "安裝插件", + "fromFile": "由檔案安裝", + "fromUrl": "由連結安裝", + "supportPlatformsCount": "支援 {count} 個平台" + }, + "danger_warning": { + "title": "警告", + "message": "此插件可能包含不安全的程式碼或功能,可能會導致系統崩潰或資料遺失。確定要繼續安裝?", + "confirm": "繼續", + "cancel": "取消" + }, + "versionCompatibility": { + "title": "版本相容性警告", + "message": "此插件宣告的 AstrBot 版本範圍與目前版本不符。你可以無視警告繼續安裝,但可能無法正常運行。", + "confirm": "無視警告,繼續安裝", + "cancel": "取消安裝" + }, + "forceUpdate": { + "title": "未偵測到新版本", + "message": "目前插件未偵測到新版本,是否強制重新安裝?這將會從遠端 Repo 拉取最新的程式碼。", + "confirm": "強制更新" + }, + "updateAllConfirm": { + "title": "確認更新全部插件", + "message": "確定要更新全部 {count} 個插件?此操作可能需要一些時間。", + "confirm": "確認更新" + } + }, + "messages": { + "uninstalling": "正在解除安裝", + "refreshing": "正在重新整理插件列表...", + "refreshSuccess": "插件列表已重新整理!", + "refreshFailed": "重新整理插件列表時發生錯誤", + "operationFailed": "操作失敗", + "reloadSuccess": "重新載入成功", + "reloadFailed": "重新載入失敗", + "updateSuccess": "更新成功!", + "addSuccess": "新增成功!", + "saveSuccess": "儲存成功!", + "deleteSuccess": "刪除成功!", + "installing": "正在由檔案安裝插件", + "installingFromUrl": "正在由連結安裝插件...", + "installFailed": "安裝插件失敗:", + "getMarketDataFailed": "獲取插件市場資料失敗:", + "hasUpdate": "有新版本:", + "confirmDelete": "確定要刪除插件?", + "fillUrlOrFile": "請填寫插件連結或上載插件檔案", + "dontFillBoth": "請勿同時填寫插件連結與上載檔案", + "supportedFormats": "支援 .zip 格式的插件檔案", + "updateAllSuccess": "所有可更新的插件已更新完畢!", + "updateAllFailed": "有 {failed}/{total} 個插件更新失敗:", + "fillSourceNameAndUrl": "請填妥插件來源名稱與 URL", + "invalidUrl": "請輸入有效的 URL", + "enterJsonUrl": "請輸入會回傳插件列表 JSON 資料的 URL" + }, + "upload": { + "fromFile": "由檔案安裝", + "fromUrl": "由連結安裝", + "selectFile": "選擇檔案", + "enterUrl": "輸入插件 Repo 連結" + }, + "skills": { + "modeLocal": "Local Skills", + "modeNeo": "Neo Skills", + "actions": "操作", + "upload": "上載 Skills", + "refresh": "重新整理", + "empty": "暫無 Skills", + "emptyHint": "請上載 Skills 的 Zip 檔案", + "uploadDialogTitle": "上載 Skills", + "uploadHint": "支援批次上載 zip 技能包,亦支援拖曳批次上載。系統會自動驗證目錄結構,並顯示個別檔案的結果。", + "structureRequirement": "支援 Zip 檔案內包含多個 skills 資料夾。", + "abilityMultiple": "支援一次上載多個 zip 檔案", + "abilityValidate": "自動驗證 `SKILL.md`", + "abilitySkip": "自動略過重複檔案", + "selectFile": "選擇檔案", + "selectFiles": "選擇檔案(可多選)", + "dropzoneTitle": "將多個 zip 檔案拖曳至此處", + "dropzoneAction": "或點擊後從資料夾中選擇多個檔案", + "dropzoneHint": "支援批次上載,系統會自動驗證目錄結構", + "fileListTitle": "等待處理的檔案", + "fileListEmpty": "選擇檔案後將在此顯示驗證結果與上載狀態", + "uploading": "正在上載...", + "batchResultTitle": "批次上載結果", + "batchResultSummary": "合共 {total} 個檔案,成功 {success} 個", + "batchSuccessList": "上載成功", + "batchFailedList": "上載失敗", + "confirm": "確認", + "confirmUpload": "開始上載", + "cancel": "取消", + "statusWaiting": "等待上載", + "statusUploading": "正在上載", + "statusSuccess": "已上載", + "statusError": "驗證失敗", + "statusSkipped": "已略過", + "summaryTotal": "合共 {count} 個檔案", + "summaryReady": "等待處理 {count}", + "summarySuccess": "成功 {count}", + "summaryFailed": "失敗 {count}", + "summarySkipped": "已略過 {count}", + "validationReady": "等待上載,上載時會自動驗證目錄結構", + "validationZipOnly": "僅支援 zip 技能包", + "validationDuplicate": "同名檔案已在列表中,已略過", + "validationUploading": "正在驗證與上載...", + "validationUploadFailed": "上載失敗,請重試", + "validationUploadedAs": "已安裝為 {name}", + "validationNoResult": "無法取得驗證結果,請檢查平台日誌", + "noDescription": "無描述", + "path": "路徑", + "uploadSuccess": "上載成功", + "uploadFailed": "上載失敗", + "download": "下載", + "downloadSuccess": "下載成功", + "downloadFailed": "下載失敗", + "loadFailed": "載入 Skills 失敗", + "updateSuccess": "更新成功", + "updateFailed": "更新失敗", + "deleteTitle": "確認刪除", + "deleteMessage": "確定要刪除此 Skill?", + "deleteSuccess": "刪除成功", + "deleteFailed": "刪除失敗", + "neoSkillKey": "skill_key 篩選", + "neoStatus": "候選狀態 (Candidate Status)", + "neoStage": "發佈階段 (Release Stage)", + "neoFilterHint": "篩選候選與發佈紀錄", + "neoAll": "全部", + "neoCandidates": "Neo Candidates", + "neoReleases": "Neo Releases", + "neoLoadFailed": "載入 Neo Skills 資料失敗", + "neoPass": "通過", + "neoReject": "拒絕", + "neoEvaluateSuccess": "評估更新成功", + "neoEvaluateFailed": "評估更新失敗", + "neoPromoteSuccess": "發佈成功", + "neoPromoteFailed": "發佈失敗", + "neoRollback": "復原", + "neoRollbackSuccess": "復原成功", + "neoRollbackFailed": "復原失敗", + "neoDeactivate": "停用", + "neoDeactivateSuccess": "停用成功", + "neoDeactivateFailed": "停用失敗", + "neoSync": "同步", + "neoSyncSuccess": "同步成功", + "neoSyncFailed": "同步失敗", + "neoDelete": "刪除", + "neoDeleteSuccess": "刪除成功", + "neoDeleteFailed": "刪除失敗", + "neoPayloadTitle": "Neo Payload 詳情", + "neoPayloadFailed": "讀取 Payload 失敗", + "runtimeNoneWarning": "Computer Use 的執行環境未設定,Skills 可能無法讓 Agent 正常運行,因為未啟用 Runtime。", + "runtimeHint": "需要在設定檔的「使用電腦能力」中將運行環境設定為「local」或「sandbox」,才能讓 AstrBot 正常使用你提供的Skills。", + "neoRuntimeRequired": "Neo Skills 僅在運行環境為 sandbox 且 Sandbox Driver 為 shipyard_neo 時才可使用。", + "sourceLocalOnly": "本機 Skill", + "sourceSandboxOnly": "Sandbox 預置 Skill", + "sourceBoth": "本機 + Sandbox", + "sandboxDiscoveryPending": "尚未發現 Sandbox 預設 Skill。請最少啟動一次 Sandbox 工作階段後再查看。", + "sandboxPresetReadonly": "Sandbox 預設 Skill 在此為唯讀狀態,無法於本機 Skills 頁面中刪除或啟用/停用。" + }, + "card": { + "actions": { + "pluginConfig": "插件設定", + "uninstallPlugin": "解除安裝插件", + "reloadPlugin": "重新載入插件", + "togglePlugin": "插件", + "viewHandlers": "查看 Handler", + "updateTo": "更新至", + "reinstall": "重新安裝" + }, + "status": { + "hasUpdate": "有新版本可更新", + "disabled": "此插件已停用", + "handlersCount": "個 Handler", + "supportPlatform": "支援平台", + "supportPlatformsCount": "支援 {count} 個平台", + "astrbotVersion": "AstrBot 版本要求" + }, + "alt": { + "logo": "logo", + "extensionIcon": "Extension Icon" + }, + "errors": { + "confirmNotRegistered": "$confirm 未正確註冊" + } + }, + "conflicts": { + "title": "偵測到指令衝突", + "message": "這會導致部分指令運作不正常,建議前往【指令管理】面板進行處理。", + "pairs": "對衝突指令", + "goToManage": "前往處理", + "later": "稍後處理" + }, + "pluginChangelog": { + "menuTitle": "查看更新日誌" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/detail.json b/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/detail.json new file mode 100644 index 0000000000..529610c9c7 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/detail.json @@ -0,0 +1,118 @@ +{ + "title": "知識庫詳情", + "backToList": "返回列表", + "tabs": { + "overview": "總覽", + "documents": "文件管理", + "retrieval": "知識庫檢索", + "sessions": "使用工作階段", + "settings": "設定" + }, + "overview": { + "title": "基本資訊", + "name": "名稱", + "description": "描述", + "emoji": "圖示", + "createdAt": "建立時間", + "updatedAt": "更新時間", + "stats": "統計資訊", + "docCount": "文件數量", + "chunkCount": "Chunk 數量", + "embeddingModel": "Embedding 模型", + "rerankModel": "Rerank 模型", + "notSet": "未設定" + }, + "documents": { + "title": "文件列表", + "upload": "上載文件", + "empty": "暫無文件", + "name": "文件名稱", + "type": "類型", + "size": "大小", + "chunks": "Chunk 數", + "createdAt": "上載時間", + "actions": "操作", + "view": "查看", + "delete": "刪除", + "deleteConfirm": "確定要刪除文件「{name}」?", + "deleteWarning": "此操作將刪除文件與所有 Chunk,無法復原。", + "uploading": "正在上載...", + "uploadSuccess": "文件上載成功", + "uploadFailed": "文件上載失敗", + "deleteSuccess": "文件刪除成功", + "deleteFailed": "文件刪除失敗" + }, + "upload": { + "title": "上載文件", + "selectFile": "選擇檔案", + "dropzone": "將檔案拖曳至此處或點擊選擇", + "supportedFormats": "支援的格式:", + "maxSize": "最大檔案大小:128MB", + "chunkSettings": "Chunk 設定", + "batchSettings": "批次處理設定", + "cleaningSettings": "清洗設定", + "enableCleaning": "啟用內容清洗", + "cleaningProvider": "清洗服務供應商", + "cleaningProviderHint": "選擇一個 LLM 供應商以對提取的網頁內容進行清洗與摘要", + "chunkSize": "Chunk Size", + "chunkSizeHint": "每個 Chunk 的字數 (預設:512)", + "chunkOverlap": "Chunk Overlap", + "chunkOverlapHint": "相鄰 Chunk 之間重疊的字數 (預設:50)", + "batchSize": "Batch Size", + "batchSizeHint": "每批次處理的 Chunk 數量 (預設:32)", + "tasksLimit": "併發任務限制 (Concurrent Task Limit)", + "tasksLimitHint": "最大併發上載任務數 (預設:3)", + "maxRetries": "最大重試次數", + "maxRetriesHint": "上載失敗任務的重試次數 (預設:3)", + "cancel": "取消", + "submit": "上載", + "fileRequired": "請選擇要上載的檔案", + "fileUpload": "檔案上載", + "fromUrl": "從 URL", + "urlPlaceholder": "請輸入要提取內容的網頁 URL", + "urlRequired": "請輸入 URL", + "urlHint": "將自動從目標 URL 提取主要內容作為文件。目前支援 {supported} 頁面,請確保目標網頁容許網絡爬蟲 (Crawler) 存取。", + "beta": "Beta 版" + }, + "retrieval": { + "title": "知識庫檢索", + "subtitle": "使用 Dense Retrieval 與 Sparse Retrieval 測試知識庫內容", + "query": "搜尋查詢 (Query)", + "queryPlaceholder": "輸入你要搜尋的內容...", + "search": "搜尋", + "searching": "正在搜尋...", + "results": "搜尋結果", + "noResults": "找不到相關內容", + "tryDifferentQuery": "請嘗試使用不同的關鍵字", + "settings": "搜尋設定", + "topK": "回傳結果數量", + "topKHint": "最多回傳多少條搜尋結果", + "enableRerank": "啟用 Rerank", + "enableRerankHint": "使用 Rerank 模型提升搜尋質素", + "score": "相關度分數", + "document": "所屬文件", + "chunk": "Chunk #{index}", + "content": "內容", + "charCount": "{count} 個字", + "searchSuccess": "搜尋完成,找到 {count} 條結果", + "searchFailed": "搜尋失敗", + "queryRequired": "請輸入搜尋查詢 (Query)" + }, + "settings": { + "title": "知識庫設定", + "basic": "基本設定", + "retrieval": "搜尋設定", + "chunkSize": "Chunk Size", + "chunkOverlap": "Chunk Overlap", + "topKDense": "Dense Retrieval 數量", + "topKSparse": "Sparse Retrieval 數量", + "topMFinal": "最終回傳數量", + "enableRerank": "啟用 Rerank", + "embeddingProvider": "Embedding 模型供應商", + "rerankProvider": "Rerank 模型供應商", + "save": "儲存設定", + "saveSuccess": "設定儲存成功", + "saveFailed": "設定儲存失敗", + "tips": "提示:修改搜尋設定後,將會影響日後知識庫的搜尋效果。" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/document.json b/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/document.json new file mode 100644 index 0000000000..4414049046 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/document.json @@ -0,0 +1,55 @@ +{ + "title": "文件詳情", + "backToKB": "返回知識庫", + "info": { + "title": "文件資訊", + "name": "文件名稱", + "type": "文件類型", + "size": "檔案大小", + "chunkCount": "Chunk 數量", + "createdAt": "上載時間" + }, + "chunks": { + "title": "Chunk 列表", + "empty": "暫無 Chunk", + "index": "索引", + "content": "內容", + "charCount": "字數", + "actions": "操作", + "view": "查看", + "edit": "編輯", + "delete": "刪除", + "preview": "預覽", + "search": "搜尋 Chunk", + "searchPlaceholder": "輸入關鍵字搜尋 Chunk 內容...", + "showing": "顯示中", + "deleteConfirm": "確定要刪除此 Chunk?", + "deleteSuccess": "刪除 Chunk 成功", + "deleteFailed": "刪除 Chunk 失敗" + }, + "edit": { + "title": "編輯 Chunk", + "content": "Chunk 內容", + "cancel": "取消", + "save": "儲存", + "saveSuccess": "儲存 Chunk 成功", + "saveFailed": "儲存 Chunk 失敗" + }, + "delete": { + "title": "刪除 Chunk", + "confirmText": "確定要刪除此 Chunk?", + "warning": "刪除後無法復原,可能會影響知識庫的搜尋效果。", + "cancel": "取消", + "confirm": "刪除", + "deleteSuccess": "刪除 Chunk 成功", + "deleteFailed": "刪除 Chunk 失敗" + }, + "view": { + "title": "Chunk 詳情", + "index": "索引", + "content": "內容", + "charCount": "字數", + "vecDocId": "向量 ID", + "close": "關閉" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/index.json b/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/index.json new file mode 100644 index 0000000000..85e2e13cea --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/knowledge-base/index.json @@ -0,0 +1,67 @@ +{ + "title": "知識庫管理", + "subtitle": "統一管理與搜尋知識庫內容", + "list": { + "title": "我的知識庫", + "subtitle": "管理你所有的知識庫集合", + "create": "建立知識庫", + "refresh": "重新整理列表", + "empty": "暫無知識庫", + "loading": "載入中...", + "documents": "文件", + "chunks": "Chunk", + "sessionConfig": "工作階段設定" + }, + "card": { + "edit": "編輯", + "delete": "刪除", + "open": "開啟", + "docCount": "{count} 個文件", + "chunkCount": "{count} 個 Chunk" + }, + "create": { + "title": "建立知識庫", + "nameLabel": "知識庫名稱", + "namePlaceholder": "為知識庫命名", + "descriptionLabel": "描述", + "descriptionPlaceholder": "簡單描述此知識庫的用途...", + "emojiLabel": "圖示", + "embeddingModelLabel": "Embedding 模型", + "rerankModelLabel": "Rerank 模型 (選填)", + "providerInfo": "供應商: {id} | 維度: {dimensions}", + "rerankProviderInfo": "供應商: {id}", + "cancel": "取消", + "submit": "建立", + "nameRequired": "請輸入知識庫名稱" + }, + "edit": { + "title": "編輯知識庫", + "submit": "儲存" + }, + "delete": { + "title": "刪除知識庫", + "confirmText": "確定要刪除知識庫「{name}」?", + "warning": "此操作無法復原,所有文件、Chunk 與相關設定將被永久刪除。", + "cancel": "取消", + "confirm": "刪除" + }, + "emoji": { + "title": "選擇圖示", + "close": "關閉", + "categories": { + "books": "書籍與文件", + "emotions": "表情與情感", + "objects": "物件與工具", + "symbols": "符號與標誌" + } + }, + "messages": { + "createSuccess": "知識庫建立成功", + "createFailed": "建立失敗", + "updateSuccess": "知識庫更新成功", + "updateFailed": "更新失敗", + "deleteSuccess": "知識庫刪除成功", + "deleteFailed": "刪除失敗", + "loadError": "載入知識庫列表失敗" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/migration.json b/dashboard/src/i18n/locales/zh-HK/features/migration.json new file mode 100644 index 0000000000..dee6013f3e --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/migration.json @@ -0,0 +1,18 @@ +{ + "dialog": { + "title": "Data Migration 助手", + "warning": "👋 歡迎 Upgrade 去 v4.0.0。我哋喺新版本 Optimize 咗 Data Format,Detect 到需要行 Database Migrate。", + "loading": "Load 緊平台 List...", + "loadError": "Load 平台 List 失敗,請 Retry", + "noPlatforms": "搵唔到可用嘅平台 Config", + "retry": "Retry", + "startMigration": "開始 Migrate", + "migrating": "Migrate 緊...", + "migratingSubtitle": "畀少少耐性,Migrate 嗰陣唔好 Close 呢個 Window", + "migrationError": "Migrate 失敗", + "success": "Migrate 搞掂!", + "completed": "Migrate 已經搞掂", + "restartRecommended": "建議 Restart App 等啲改動生效。", + "restartNow": "即刻 Restart" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/persona.json b/dashboard/src/i18n/locales/zh-HK/features/persona.json new file mode 100644 index 0000000000..48f5ac2af8 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/persona.json @@ -0,0 +1,146 @@ +{ + "page": { + "description": "管理人格角色設定" + }, + "buttons": { + "create": "建立人格", + "createFirst": "建立第一個人格", + "edit": "編輯", + "delete": "刪除", + "cancel": "取消", + "save": "儲存", + "move": "移動", + "addDialogPair": "新增對話組合" + }, + "labels": { + "presetDialogs": "預設對話 ({count} 組)", + "createdAt": "建立時間", + "updatedAt": "更新時間" + }, + "form": { + "personaId": "人格 ID", + "systemPrompt": "System Prompt", + "customErrorMessage": "自訂錯誤回覆訊息 (選填)", + "customErrorMessageHelp": "當此人格的 LLM 請求失敗(例如連線失敗)時,會優先發送此錯誤訊息;留空則會發送預設錯誤訊息。", + "presetDialogs": "預設對話", + "presetDialogsHelp": "加入一些預設對話,以協助機械人理解角色設定。", + "userMessage": "用戶訊息 (User Message)", + "assistantMessage": "AI 回覆 (Assistant Message)", + "tools": "工具 / MCP 工具選擇", + "toolsHelp": "為此人格選擇可使用的外部工具。外部工具賦予了 AI 接觸外部環境的能力,例如搜尋、計算、獲取資訊等。", + "toolsSelection": "工具選擇操作", + "selectAllTools": "全選工具", + "clearAllTools": "清除選擇", + "allSelected": "全選", + "mcpServersQuickSelect": "MCP Server 快速選擇", + "searchTools": "搜尋工具", + "selectedTools": "已選工具", + "noToolsAvailable": "暫無可用工具", + "noToolsFound": "找不到符合的工具", + "loadingTools": "正在載入工具...", + "allToolsAvailable": "使用所有可用工具", + "noToolsSelected": "未選擇任何工具", + "skills": "Skills 選擇", + "skillsHelp": "為此人格選擇可使用的Skills。Skills 會為 AI 提供可重複使用的流程與規格。", + "skillsAllAvailable": "預設使用所有 Skills", + "skillsSelectSpecific": "選擇指定 Skills", + "searchSkills": "搜尋 Skills", + "selectedSkills": "已選 Skills", + "noSkillsAvailable": "暫無可用 Skills", + "noSkillsFound": "找不到符合的 Skills", + "loadingSkills": "正在載入 Skills...", + "allSkillsAvailable": "使用所有可用 Skills", + "noSkillsSelected": "未選擇任何 Skills", + "skillsRuntimeNoneWarning": "Computer Use 的運行環境未設定,Skills 可能無法讓 Agent 正常運行,因為未啟用運行環境。", + "createInFolder": "將會在「{folder}」中建立", + "rootFolder": "全部人格" + }, + "dialog": { + "create": { + "title": "建立新人格" + }, + "edit": { + "title": "編輯人格" + } + }, + "empty": { + "title": "暫無人格設定", + "description": "請立即建立一個!", + "folderEmpty": "此資料夾是空的", + "folderEmptyDescription": "建立新人格或資料夾以開始" + }, + "validation": { + "required": "此欄位為必填", + "minLength": "最少需要 {min} 個字元", + "alphanumeric": "僅容許字母、數字、底線與破折號", + "dialogRequired": "欄位 {type} 不能為空", + "personaIdExists": "此人格名稱已經存在" + }, + "messages": { + "loadError": "載入人格列表失敗", + "saveSuccess": "儲存成功", + "saveError": "儲存失敗", + "deleteConfirm": "確定要刪除人格 \"{id}\"?此操作無法復原。", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗" + }, + "persona": { + "personasTitle": "人格", + "toolsCount": "個工具", + "skillsCount": "個 Skills", + "contextMenu": { + "moveTo": "移動至..." + }, + "messages": { + "moveSuccess": "人格移動成功", + "moveError": "移動人格失敗" + } + }, + "folder": { + "sidebarTitle": "資料夾", + "rootFolder": "根目錄", + "foldersTitle": "資料夾", + "noFolders": "暫無資料夾", + "createButton": "建立資料夾", + "searchPlaceholder": "搜尋資料夾...", + "form": { + "name": "資料夾名稱", + "description": "描述 (選填)" + }, + "validation": { + "nameRequired": "資料夾名稱不能為空" + }, + "contextMenu": { + "open": "開啟", + "rename": "重新命名", + "moveTo": "移動至...", + "delete": "刪除" + }, + "createDialog": { + "title": "建立新資料夾", + "createButton": "建立" + }, + "renameDialog": { + "title": "重新命名資料夾" + }, + "deleteDialog": { + "title": "刪除資料夾", + "message": "確定要刪除資料夾 \"{name}\"?", + "warning": "資料夾內的所有人格將會移至根目錄。" + }, + "messages": { + "createSuccess": "資料夾建立成功", + "createError": "建立資料夾失敗", + "renameSuccess": "資料夾重新命名成功", + "renameError": "重新命名資料夾失敗", + "deleteSuccess": "資料夾刪除成功", + "deleteError": "刪除資料夾失敗" + } + }, + "moveDialog": { + "title": "移動至資料夾", + "description": "為 \"{name}\" 選擇目標資料夾", + "success": "移動成功", + "error": "移動失敗" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/platform.json b/dashboard/src/i18n/locales/zh-HK/features/platform.json new file mode 100644 index 0000000000..facc6749a1 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/platform.json @@ -0,0 +1,142 @@ +{ + "title": "機械人", + "subtitle": "管理平台 Adapter 實例,連線至不同的訊息平台", + "adapters": "平台 Adapter", + "addAdapter": "建立機械人", + "emptyText": "暫無平台 Adapter,點擊 建立機械人 新增", + "viewWebhook": "查看 Webhook 連結", + "webhookCopied": "Webhook URL 已經複製至剪貼簿", + "webhookCopyFailed": "複製失敗,請手動複製", + "webhookDialog": { + "title": "Webhook Callback 地址", + "description": "Callback 地址如下,請確保網絡環境可以公開存取。也可以在日誌中查看 Callback 地址資訊。建議填寫設定檔 -> 系統設定中的「對外可達的 Callback API 地址」設定項。", + "close": "關閉" + }, + "details": { + "adapterType": "Adapter 類型", + "token": "Token", + "description": "描述" + }, + "logs": { + "title": "平台日誌", + "expand": "展開", + "collapse": "摺疊" + }, + "dialog": { + "add": "新增", + "edit": "編輯", + "adapter": "機械人", + "refresh": "重新整理", + "cancel": "取消", + "save": "儲存", + "addPlatform": "建立機械人", + "connectTitle": "連線 {name}", + "viewTutorial": "查看連線教學", + "noTemplates": "暫無平台模板", + "idConflict": { + "title": "ID 衝突警告", + "message": "偵測到 ID \"{id}\" 已重複。請使用新的 ID。", + "confirm": "明白" + }, + "securityWarning": { + "title": "安全提醒", + "aiocqhttpTokenMissing": "為了增強連線安全性,強烈建議你設定 ws_reverse_token。未設定 Token 可能會有安全風險。", + "learnMore": "了解更多" + }, + "invalidPlatformId": "平台 ID 不能包含 ':' 或 '!'。" + }, + "createDialog": { + "step1Title": "選擇訊息平台類別", + "step1Hint": "想將機械人連線至哪裡?例如 QQ、企業微信、飛書、Discord、Telegram 等。", + "platformTypeLabel": "訊息平台類別", + "configFileTitle": "設定檔", + "optional": "選填", + "configHint": "想如何配置機械人?設定檔包含了對話模型、人格、知識庫、插件範圍等豐富的機械人設定項。", + "configDefaultHint": "預設使用設定檔 \"default\"。你也可以稍後再作設定。", + "useExistingConfig": "使用現有設定檔", + "selectConfigLabel": "選擇設定檔", + "createNewConfig": "建立新設定檔", + "newConfigNameLabel": "新設定檔名稱", + "newConfigTitle": "使用新的設定檔", + "newConfigLoadFailed": "無法載入預設設定檔模板", + "addRouteRule": "新增路由規則", + "viewMode": "預覽", + "editMode": "編輯", + "noRouteRules": "此平台暫無路由規則,將使用預設設定檔", + "sessionIdPlaceholder": "Session ID 或 *", + "allSessions": "全部工作階段", + "configMissing": "設定檔不存在", + "routeHint": "*當發送訊息時,會根據工作階段來源順序,由上至下配對第一個符合條件的設定檔。使用 * 代表配對全部。使用 /sid 指令獲取 Session ID。如果全部不符合,則會使用預設設定檔。", + "warningContinue": "無視警告繼續建立", + "warningEditAgain": "重新修改", + "configDrawerTitle": "設定檔管理", + "configDrawerIdLabel": "ID", + "configTableHeaders": { + "configId": "與此實例關聯的設定檔 ID", + "scope": "在此實例的套用範圍" + }, + "routeTableHeaders": { + "source": "訊息工作階段來源 (訊息類型:Session ID)", + "config": "使用設定檔", + "actions": "操作" + }, + "messageTypeOptions": { + "all": "全部訊息", + "group": "群組訊息 (GroupMessage)", + "friend": "私訊 (FriendMessage)" + }, + "messageTypeLabels": { + "all": "全部訊息", + "group": "群組訊息", + "friend": "私訊" + } + }, + "messages": { + "updateSuccess": "更新成功!", + "addSuccess": "新增成功!", + "deleteSuccess": "刪除成功!", + "statusUpdateSuccess": "狀態更新成功!", + "deleteConfirm": "確定要刪除平台 Adapter?", + "configNotFoundOpenConfig": "目標設定檔不存在,已為你開啟設定頁面檢查。", + "updateMissingPlatformId": "更新失敗,遺失了平台 ID。", + "platformUpdateFailed": "平台更新失敗。", + "addSuccessWithConfig": "平台新增成功,設定檔已更新", + "configIdMissing": "無法獲取設定檔 ID。", + "routingUpdateFailed": "更新路由表失敗: {message}", + "createConfigFailed": "建立新設定檔失敗: {message}", + "platformIdMissing": "無法獲取平台 ID。", + "routingSaveFailed": "儲存路由表失敗: {message}" + }, + "status": { + "enabled": "已啟用", + "disabled": "已停用", + "connecting": "連線中", + "connected": "已連線", + "disconnected": "已斷線", + "error": "錯誤" + }, + "runtimeStatus": { + "running": "運行中", + "error": "有錯誤", + "pending": "等待啟動中", + "stopped": "已停止", + "unknown": "未知", + "errors": "個錯誤" + }, + "platformQr": { + "title": "QR Code 登入", + "show": "查看 QR Code", + "status": "QR Code 狀態", + "waiting": "等待 QR Code 中", + "close": "關閉" + }, + "errorDialog": { + "title": "錯誤詳情", + "platformId": "平台 ID", + "errorCount": "錯誤數量", + "lastError": "最近錯誤", + "occurredAt": "發生時間", + "traceback": "錯誤 Stack Trace", + "close": "關閉" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/provider.json b/dashboard/src/i18n/locales/zh-HK/features/provider.json new file mode 100644 index 0000000000..25d91a348c --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/provider.json @@ -0,0 +1,153 @@ +{ + "title": "模型供應商", + "subtitle": "可以在「對話」中設定對話模型。此外,「Agent 執行器」包含 Dify、Coze、阿里雲百鍊 App 等第三方服務的整合。", + "providers": { + "title": "模型供應商", + "settings": "設定", + "addProvider": "新增模型供應商", + "providerType": "供應商類型", + "tabs": { + "all": "全部", + "chatCompletion": "對話", + "agentRunner": "Agent 執行器", + "speechToText": "語音轉文字", + "textToSpeech": "文字轉語音", + "embedding": "Embedding", + "rerank": "Rerank" + }, + "empty": { + "all": "暫無模型供應商,點擊 新增模型供應商 加入", + "typed": "暫無 {type} 類型的模型供應商,點擊 新增模型供應商 加入" + }, + "description": { + "openai": "亦支援所有相容於 OpenAI API 的模型供應商。", + "kimi_code": "Kimi 的 CodingPlan / Kimi Code 專屬存取介面,使用特殊的 Anthropic API 相容 Adapter。", + "vllm_rerank": "亦支援 Jina AI, Cohere, PPIO 等供應商。", + "default": "" + } + }, + "availability": { + "title": "模型供應商可用性", + "subtitle": "透過測試模型對話可用性來判斷,可能會產生 API 費用", + "refresh": "更新狀態", + "noData": "點擊「更新狀態」按鈕以獲取模型供應商可用性", + "available": "可用", + "unavailable": "無法使用", + "pending": "正在檢查...", + "errorMessage": "錯誤訊息", + "test": "測試" + }, + "logs": { + "title": "服務日誌", + "expand": "展開", + "collapse": "摺疊" + }, + "dialogs": { + "addProvider": { + "title": "模型供應商", + "tabs": { + "basic": "對話", + "agentRunner": "Agent 執行器", + "speechToText": "語音轉文字", + "textToSpeech": "文字轉語音", + "embedding": "Embedding", + "rerank": "Rerank" + }, + "noTemplates": "暫無此類型的供應商模板" + }, + "config": { + "addTitle": "新增", + "editTitle": "編輯", + "provider": "模型供應商", + "cancel": "取消", + "save": "儲存" + }, + "settings": { + "title": "模型供應商設定", + "sessionSeparation": { + "title": "啟用供應商工作階段隔離", + "description": "不同的工作階段可以獨立選擇 Text Generation、TTS、STT 等模型供應商。" + }, + "close": "關閉" + } + }, + "messages": { + "success": { + "update": "更新成功!", + "add": "新增成功!", + "delete": "刪除成功!", + "statusUpdate": "狀態更新成功!", + "sessionSeparation": "工作階段隔離設定已更新" + }, + "error": { + "sessionSeparation": "獲取工作階段隔離設定失敗", + "fetchStatus": "獲取模型供應商狀態失敗", + "testError": "測試 {id} 失敗: {error}" + }, + "confirm": { + "delete": "確定要刪除模型供應商 {id}?" + } + }, + "providerTypes": { + "title": "供應商類型" + }, + "providerSources": { + "title": "供應商來源", + "add": "新增", + "empty": "暫無供應商來源", + "selectHint": "請選擇一個供應商來源", + "selectCreated": "選擇已建立的供應商來源", + "save": "儲存設定", + "saveAndFetchModels": "儲存並獲取模型", + "fetchModels": "獲取模型列表", + "saveSuccess": "供應商來源儲存成功", + "saveError": "供應商來源儲存失敗", + "deleteConfirm": "確定要刪除供應商來源 {id}?這樣會連同所有關聯的模型設定一併刪除。", + "deleteSuccess": "供應商來源刪除成功", + "deleteError": "供應商來源刪除失敗", + "enabled": "已啟用", + "disabled": "已停用", + "advancedConfig": "進階設定...", + "fields": { + "name": "名稱", + "apiKey": "API Key", + "baseUrl": "Base URL" + }, + "hints": { + "id": "供應商來源唯一 ID(非 Provider ID)", + "key": "API Key", + "apiBase": "自訂 API Endpoint URL", + "proxy": "HTTP/HTTPS Proxy 地址,格式例如 http://127.0.0.1:7890。僅對此供應商的 API 請求生效,不影響 Docker 內網通訊。" + }, + "labels": { + "proxy": "Proxy 地址" + } + }, + "models": { + "available": "可用模型", + "configured": "已設定模型", + "empty": "暫無已設定的模型,點擊上方的「獲取模型列表」新增", + "noModelsFound": "找不到可用模型", + "fetchError": "獲取模型列表失敗", + "addSuccess": "模型 {model} 新增成功", + "deleteConfirm": "確定要刪除模型 {id}?", + "deleteSuccess": "模型刪除成功", + "deleteError": "模型刪除失敗", + "testSuccess": "模型 {id} 測試通過", + "testSuccessWithLatency": "模型 {id} 測試通過,延遲 {latency} ms", + "testError": "模型測試失敗", + "searchPlaceholder": "搜尋模型或 ID", + "manualAddButton": "自訂模型", + "manualDialogTitle": "新增自訂模型", + "manualDialogModelLabel": "模型 ID(例如 gpt-4o-mini)", + "manualDialogPreviewLabel": "顯示 ID(自動生成)", + "manualDialogPreviewHint": "生成規則:來源 ID/模型 ID", + "manualModelRequired": "請輸入模型 ID", + "manualModelExists": "此模型已經存在", + "configure": "設定", + "tooltips": { + "providerId": "Provider ID", + "modelId": "模型 ID" + } + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/session-management.json b/dashboard/src/i18n/locales/zh-HK/features/session-management.json new file mode 100644 index 0000000000..fd51f43995 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/session-management.json @@ -0,0 +1,158 @@ +{ + "title": "自訂規則", + "subtitle": "為特定工作階段設定自訂規則,優先級高於全域設定", + "buttons": { + "refresh": "重新整理", + "edit": "編輯", + "editRule": "編輯規則", + "deleteAllRules": "刪除所有規則", + "addRule": "新增規則", + "save": "儲存", + "cancel": "取消", + "delete": "刪除", + "clear": "清除", + "next": "下一步", + "editCustomName": "編輯備註", + "batchDelete": "批次刪除" + }, + "customRules": { + "title": "自訂規則", + "rulesCount": "條規則", + "hasRules": "已設定", + "noRules": "暫無自訂規則", + "noRulesDesc": "點擊「新增規則」為特定工作階段配置自訂規則", + "serviceConfig": "服務設定", + "pluginConfig": "插件設定", + "kbConfig": "知識庫設定", + "providerConfig": "模型設定", + "configured": "已設定", + "noCustomName": "未設定備註" + }, + "quickEditName": { + "title": "編輯備註名稱" + }, + "search": { + "placeholder": "搜尋工作階段..." + }, + "table": { + "headers": { + "umoInfo": "訊息工作階段來源", + "rulesOverview": "規則概覽", + "actions": "操作" + } + }, + "persona": { + "none": "跟隨設定檔" + }, + "provider": { + "followConfig": "跟隨設定檔" + }, + "addRule": { + "title": "新增自訂規則", + "description": "選擇一個訊息工作階段來源 (UMO) 來配置自訂規則。自訂規則的優先級高於該來源所屬設定檔中的全域規則。可以使用 /sid 指令獲取該來源的 UMO 資訊。", + "selectUmo": "選擇工作階段", + "noUmos": "暫無可用工作階段" + }, + "ruleEditor": { + "title": "編輯自訂規則", + "description": "為此工作階段配置自訂規則,這些規則將會覆寫全域設定。", + "serviceConfig": { + "title": "服務設定", + "sessionEnabled": "啟用此訊息工作階段來源的訊息處理", + "llmEnabled": "啟用 LLM", + "ttsEnabled": "啟用 TTS", + "customName": "訊息工作階段來源備註名稱" + }, + "providerConfig": { + "title": "模型設定", + "chatProvider": "對話模型", + "sttProvider": "STT 模型", + "ttsProvider": "TTS 模型" + }, + "personaConfig": { + "title": "人格設定", + "selectPersona": "選擇人格", + "hint": "套用人格設定後,會強制此來源的所有對話使用該人格。" + }, + "pluginConfig": { + "title": "插件設定", + "disabledPlugins": "已停用的插件", + "hint": "選擇要在這個工作階段停用的插件。未選擇的插件將保持啟用。" + }, + "kbConfig": { + "title": "知識庫設定", + "selectKbs": "選擇知識庫", + "topK": "回傳結果數量 (Top K)", + "enableRerank": "啟用 Rerank" + } + }, + "deleteConfirm": { + "title": "確認刪除", + "message": "確定要刪除此工作階段的所有自訂規則?刪除後將恢復使用全域設定。" + }, + "batchDeleteConfirm": { + "title": "確認批次刪除", + "message": "確定要刪除已選的 {count} 條規則?刪除後將恢復使用全域設定。" + }, + "batchOperations": { + "title": "批次操作", + "hint": "快速批次修改工作階段設定", + "scope": "套用範圍", + "scopeSelected": "已選的工作階段", + "scopeAll": "所有工作階段", + "scopeGroup": "所有群組聊天", + "scopePrivate": "所有私訊", + "llmStatus": "LLM 狀態", + "ttsStatus": "TTS 狀態", + "chatProvider": "對話模型", + "ttsProvider": "TTS 模型", + "apply": "套用更改" + }, + "groups": { + "title": "群組管理", + "count": "{count} 個群組", + "addToGroup": "加入至群組", + "create": "建立群組", + "edit": "編輯群組", + "name": "群組名稱", + "sessionsCount": "{count} 個工作階段", + "empty": "暫無群組,點擊「建立群組」新增", + "availableSessions": "可選工作階段 ({count})", + "selectedSessions": "已選工作階段 ({count})", + "searchPlaceholder": "搜尋...", + "noMatch": "找不到符合項目", + "noMembers": "暫無成員", + "customGroupDivider": "── 自訂群組 ──", + "customGroupOption": "📁 {name} ({count})", + "groupOption": "{name} ({count} 個工作階段)", + "deleteConfirm": "確定要刪除群組 \"{name}\"?" + }, + "status": { + "enabled": "啟用", + "disabled": "停用" + }, + "messages": { + "refreshSuccess": "資料已重新整理", + "loadError": "載入資料失敗", + "saveSuccess": "儲存成功", + "saveError": "儲存失敗", + "clearSuccess": "已清除", + "clearError": "清除失敗", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗", + "noChanges": "沒有需要儲存的更改", + "batchDeleteSuccess": "批次刪除成功", + "batchDeleteError": "批次刪除失敗", + "selectSessionsFirst": "請先選擇要操作的工作階段", + "selectAtLeastOneConfig": "請最少選擇一項要修改的設定", + "batchUpdateSuccess": "批次更新成功", + "partialUpdateFailed": "部分更新失敗", + "batchUpdateError": "批次更新失敗", + "groupNameRequired": "群組名稱不能為空", + "saveGroupError": "儲存群組失敗", + "deleteGroupError": "刪除群組失敗", + "selectSessionsToAddFirst": "請先選擇要加入的工作階段", + "addToGroupSuccess": "已將 {count} 個工作階段加入群組", + "addToGroupError": "加入失敗" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/settings.json b/dashboard/src/i18n/locales/zh-HK/features/settings.json new file mode 100644 index 0000000000..ccd4331c00 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/settings.json @@ -0,0 +1,214 @@ +{ + "network": { + "title": "網絡", + "githubProxy": { + "title": "GitHub 加速網址", + "subtitle": "設定下載插件或更新 AstrBot 時使用的 GitHub 加速網址。這在中國大陸網絡環境較為有用。可以自訂,輸入後即時生效。所有網址皆不保證穩定性,如果更新插件/專案時發生錯誤,請先檢查加速網址是否可用。", + "label": "選擇 GitHub 加速網址" + }, + "proxySelector": { + "title": "GitHub 加速", + "noProxy": "不使用 GitHub 加速", + "useProxy": "使用 GitHub 加速", + "testConnection": "測試 Proxy 連線", + "available": "可用", + "unavailable": "無法使用", + "custom": "自訂" + } + }, + "theme": { + "title": "主題", + "subtitle": "自訂主題主色與輔助色。更改後即時生效,並且會儲存在瀏覽器的 Local Storage 中。", + "customize": { + "title": "主題顏色", + "primary": "主色", + "secondary": "輔助色", + "reset": "重設為預設" + } + }, + "system": { + "title": "系統", + "restart": { + "title": "重新啟動", + "subtitle": "重新啟動 AstrBot", + "button": "重新啟動" + }, + "migration": { + "title": "資料遷移至 v4.0.0 格式", + "subtitle": "如果你遇到資料相容性問題,可以手動啟動資料庫遷移助手", + "button": "啟動遷移助手" + }, + "backup": { + "title": "資料備份與還原", + "subtitle": "匯出或匯入 AstrBot 的所有資料,方便遷移至新伺服器", + "button": "備份管理" + }, + "cleanup": { + "title": "日誌與快取清除", + "subtitle": "查看目前日誌與快取佔用的空間,可以一鍵清除。", + "refresh": "重新整理大小", + "cleanAll": "全部清除", + "panel": { + "title": "清除詳情", + "subtitle": "目前佔用 {size}" + }, + "fileCount": "{count} 個檔案", + "confirm": "確定要清除 {target}?", + "targetNames": { + "cache": "快取", + "logs": "日誌", + "all": "日誌與快取" + }, + "targets": { + "cache": { + "title": "快取", + "subtitle": "清除暫存檔案、插件市場快取與技能快取。", + "button": "清除快取" + }, + "logs": { + "title": "日誌", + "subtitle": "清除歷史日誌,並清空目前寫入中的日誌檔案內容。", + "button": "清除日誌" + } + }, + "messages": { + "statusFailed": "取得儲存空間大小失敗", + "cleanupSuccess": "已清除 {count} 個檔案,釋放了 {size} 空間", + "cleanupFailed": "清除失敗" + } + } + }, + "sidebar": { + "title": "側邊欄", + "customize": { + "title": "自訂側邊欄", + "subtitle": "拖曳以更改模組順序,或者將模組拉出/拉入「更多功能」群組。設定僅儲存於瀏覽器的 Local Storage 中。", + "reset": "重設為預設", + "mainItems": "主要模組", + "moreItems": "更多功能" + } + }, + "backup": { + "dialog": { + "title": "備份管理" + }, + "tabs": { + "export": "匯出備份", + "import": "匯入備份", + "list": "備份列表" + }, + "export": { + "title": "建立備份", + "description": "將所有資料匯出為 ZIP 備份檔,包含資料庫、知識庫、設定檔與附件。", + "includes": "備份包含:主資料庫、知識庫(Metadata + 向量索引 + 文件)、設定檔、附件檔案", + "button": "開始匯出", + "processing": "正在匯出...", + "wait": "請稍候,正在壓縮資料...", + "completed": "匯出完成!", + "download": "下載備份", + "another": "建立新備份", + "failed": "匯出失敗", + "retry": "重試" + }, + "import": { + "title": "匯入備份", + "warning": "⚠️ 匯入將會清空並覆寫現有資料!請確保已備份目前的資料。", + "selectFile": "選擇備份檔 (.zip)", + "uploadAndCheck": "上載並檢查", + "uploading": "正在上載...", + "uploadWait": "請稍候,正在上載備份檔...", + "uploadInit": "正在初始化上載...", + "uploadingChunks": "正在上載分塊...", + "uploadComplete": "上載完成,正在合併檔案...", + "checking": "正在檢查備份檔...", + "invalidBackup": "無效的備份檔", + "backupContents": "備份內容", + "tables": "個資料表", + "knowledgeBases": "知識庫", + "configFiles": "設定檔", + "confirmImport": "確認匯入", + "button": "開始匯入", + "processing": "正在匯入...", + "wait": "請稍候,正在還原資料...", + "completed": "匯入完成!", + "restartRequired": "資料已經匯入成功。建議立即重新啟動 AstrBot 以使變更生效。", + "restartNow": "立即重新啟動", + "failed": "匯入失敗", + "retry": "重試", + "version": { + "backupVersion": "備份版本", + "currentVersion": "目前版本", + "backupTime": "備份時間", + "matchTitle": "✅ 版本相符", + "matchMessage": "匯入將會清空並覆寫現有所有資料,包含:\n• 主資料庫(對話紀錄、設定等)\n• 知識庫資料\n• 插件與插件資料\n• 設定檔\n\n此操作無法復原!確定要繼續嗎?", + "minorDiffTitle": "⚠️ 版本差異警告", + "minorDiffMessage": "次要版本差異通常是相容的,但可能會有少許資料結構變動。\n匯入將會清空並覆寫現有所有資料!\n\n確定要繼續匯入嗎?", + "majorDiffTitle": "⛔ 無法匯入", + "majorDiffMessage": "主要版本不同,跨主要版本匯入可能會導致資料損毀。\n請使用相同主要版本的 AstrBot 進行匯入。" + } + }, + "list": { + "empty": "暫無備份檔", + "refresh": "重新整理列表", + "confirmDelete": "確定要刪除此備份檔?此操作無法復原。", + "uploaded": "已上載", + "restore": "還原此備份", + "rename": "重新命名", + "renameTitle": "重新命名備份檔", + "newName": "新檔案名稱", + "renameHint": "檔案名稱僅容許字母、數字、底線、破折號與小數點", + "renameRequired": "請輸入檔案名稱", + "renameInvalidChars": "檔案名稱包含不合法字元", + "renameFailed": "重新命名失敗", + "ftpHint": "對於較大的備份檔,也可以透過 FTP/SFTP 等方式直接上載至 data/backups 目錄" + } + }, + "apiKey": { + "title": "API Key", + "manageTitle": "開發者 Access Key", + "subtitle": "為外部開發者建立 API Key,用於呼叫 Open HTTP API。", + "name": "金鑰名稱", + "expiresInDays": "過期時間", + "expiryOptions": { + "day1": "1 天", + "day7": "7 天", + "day30": "30 天", + "day90": "90 天", + "permanent": "永久" + }, + "permanentWarning": "永久的 API Key 風險較高,請妥善儲存並建議僅在必要場景使用。", + "scopes": "權限範圍", + "create": "建立 API Key", + "revoke": "撤銷", + "delete": "刪除", + "copy": "複製", + "docsLink": "查看文件", + "plaintextHint": "請即時儲存此金鑰,關閉視窗後將無法再次查看明文。", + "empty": "暫無 API Key", + "status": { + "active": "啟用中", + "inactive": "未啟用" + }, + "table": { + "name": "名稱", + "prefix": "前綴", + "scopes": "權限", + "status": "狀態", + "lastUsed": "最後使用", + "createdAt": "建立時間", + "actions": "操作" + }, + "messages": { + "loadFailed": "載入 API Key 失敗", + "scopeRequired": "請最少選擇一個權限", + "createSuccess": "API Key 建立成功", + "createFailed": "建立 API Key 失敗", + "revokeSuccess": "API Key 已撤銷", + "revokeFailed": "撤銷 API Key 失敗", + "deleteSuccess": "API Key 已刪除", + "deleteFailed": "刪除 API Key 失敗", + "copySuccess": "已複製 API Key", + "copyFailed": "複製 API Key 失敗" + } + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/subagent.json b/dashboard/src/i18n/locales/zh-HK/features/subagent.json new file mode 100644 index 0000000000..9332fc815f --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/subagent.json @@ -0,0 +1,66 @@ +{ + "page": { + "title": "SubAgent 編排", + "beta": "實驗性", + "subtitle": "Main LLM 可以直接使用自己的工具,也可以透過 handoff 分派給各個 SubAgent。" + }, + "actions": { + "refresh": "重新整理", + "save": "儲存", + "add": "新增 SubAgent", + "delete": "刪除", + "close": "關閉" + }, + "switches": { + "enable": "啟用 SubAgent 編排", + "enableHint": "啟用 SubAgent 功能", + "dedupe": "Main LLM 移除重複工具(與 SubAgent 重疊的工具將會被隱藏)", + "dedupeHint": "在 Main Agent 中移除重複工具" + }, + "description": { + "disabled": "不啟用:SubAgent 已關閉;Main LLM 會按人格規則掛載工具(預設為全部),然後直接呼叫。", + "enabled": "啟用:Main LLM 會保留自己的工具,並掛載 transfer_to_* 委派工具。如果啟用了「移除重複工具」,與 SubAgent 指定的工具重疊的部分將會從 Main LLM 工具集中移除。" + }, + "section": { + "title": "SubAgents 設定", + "globalSettings": "全域設定" + }, + "cards": { + "statusEnabled": "已啟用", + "statusDisabled": "已停用", + "unnamed": "未命名 SubAgent", + "transferPrefix": "transfer_to_{name}", + "switchLabel": "啟用", + "previewTitle": "預覽:Main LLM 會看到的 handoff 工具", + "personaChip": "人格: {id}", + "noDescription": "暫無描述" + }, + "form": { + "nameLabel": "Agent 名稱(提供給 transfer_to_{name} 使用)", + "nameHint": "建議使用英文小寫加上底線,並且必須是全域唯一 (Global Unique)", + "providerLabel": "Chat Provider (選填)", + "providerHint": "留空代表跟隨全域預設 Provider。", + "personaLabel": "選擇人格設定", + "personaHint": "SubAgent 會直接繼承所選人格的系統設定與工具。請在人格設定頁面管理與建立人格。", + "personaPreview": "人格預覽", + "descriptionLabel": "提供給 Main LLM 的描述(用於決定是否進行 Handoff)", + "descriptionHint": "這段文字會作為 transfer_to_* 工具的描述提供給 Main LLM,建議保持精簡清晰。" + }, + "messages": { + "loadConfigFailed": "獲取設定失敗", + "loadPersonaFailed": "獲取人格列表失敗", + "nameMissing": "有未填寫名稱的 SubAgent", + "nameInvalid": "SubAgent 名稱無效:僅容許英文小寫、數字及底線,並且必須以字母開頭", + "nameDuplicate": "SubAgent 名稱重複:{name}", + "personaMissing": "SubAgent {name} 未選擇人格", + "saveSuccess": "儲存成功", + "saveFailed": "儲存失敗", + "nameRequired": "名稱為必填", + "namePattern": "僅支援小寫字母、數字與底線" + }, + "empty": { + "title": "未設定 SubAgent", + "subtitle": "新增一個新的 SubAgent 開始", + "action": "建立第一個 Agent" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/tool-use.json b/dashboard/src/i18n/locales/zh-HK/features/tool-use.json new file mode 100644 index 0000000000..aa58c17710 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/tool-use.json @@ -0,0 +1,159 @@ +{ + "title": "函數工具 (Function Tool) 管理", + "subtitle": "管理 MCP Server 並查看有哪些可用的 Function Tool", + "tooltip": { + "info": "什麼是 Function Calling 與 MCP?", + "marketplace": "瀏覽並安裝來自社群的 MCP Server", + "serverConfig": "MCP Server (stdio) 設定支援以下欄位:\ncommand: 指令名稱 (例如 python 或 uv)\nargs: 指令參數陣列 (例如 [\"run\", \"server.py\"])\nenv: 環境變數物件 (例如 {\"api_key\": \"abc\"})\ncwd: 工作目錄路徑 (例如 /path/to/server)\nencoding: 輸出編碼 (預設為 utf-8)\nencoding_error_handler: 文字編碼錯誤處理器。預設為 strict。\n其他欄位請參閱 MCP 官方文件\n⚠️ 如果你使用 Docker 部署 AstrBot,請務必將 MCP Server 安裝在 AstrBot 掛載好的 data 目錄中" + }, + "tabs": { + "local": "本機 Server", + "marketplace": "MCP 市場" + }, + "mcpServers": { + "title": "MCP Server", + "buttons": { + "refresh": "重新整理", + "add": "新增 Server", + "useTemplateStdio": "Stdio 模板", + "useTemplateStreamableHttp": "Streamable HTTP 模板", + "useTemplateSse": "SSE 模板", + "sync": "同步 Server" + }, + "empty": "暫無 MCP Server,點擊 新增 Server 加入", + "status": { + "noTools": "暫無可用工具", + "availableTools": "可用工具", + "configSummary": "設定: {keys}", + "noConfig": "未設定" + } + }, + "functionTools": { + "title": "Function Tool", + "buttons": { + "view": "查看工具" + }, + "search": "搜尋 Function Tool", + "empty": "無可用 Function Tool", + "description": "功能描述", + "parameters": "參數列表", + "noParameters": "此工具沒有參數", + "table": { + "paramName": "參數名稱", + "type": "類型", + "description": "描述", + "required": "必填", + "origin": "來源", + "originName": "來源名稱", + "actions": "操作" + } + }, + "marketplace": { + "title": "MCP Server 市場", + "search": "搜尋 Server", + "buttons": { + "refresh": "重新整理", + "detail": "詳情", + "import": "匯入" + }, + "loading": "正在載入 MCP Server 市場...", + "empty": "暫無可用的 MCP Server", + "status": { + "availableTools": "可用工具 ({count})", + "noToolsInfo": "無可用工具資訊" + } + }, + "dialogs": { + "addServer": { + "title": "新增 MCP Server", + "editTitle": "編輯 MCP Server", + "fields": { + "name": "Server 名稱", + "nameRequired": "名稱為必填", + "enable": "啟用 Server", + "config": "Server 設定" + }, + "errors": { + "configEmpty": "設定不能為空", + "jsonFormat": "JSON 格式錯誤: {error}", + "jsonParse": "JSON 解析錯誤: {error}" + }, + "buttons": { + "cancel": "取消", + "save": "儲存", + "testConnection": "測試連線", + "sync": "同步" + }, + "tips": { + "timeoutConfig": "Tool Calling 的逾時時間請至設定頁面單獨配置" + } + }, + "serverDetail": { + "title": "Server 詳情", + "installConfig": "安裝設定", + "availableTools": "可用工具", + "buttons": { + "close": "關閉", + "importConfig": "匯入設定" + } + }, + "confirmDelete": "確定要刪除 Server {name}?", + "syncProvider": { + "title": "同步 MCP Server", + "subtitle": "從 Provider 同步 MCP Server 設定至本機", + "steps": { + "selectProvider": "第一步: 選擇 Provider", + "configureAuth": "第二步: 設定授權", + "syncServers": "第三步: 同步 Server" + }, + "providers": { + "modelscope": "ModelScope", + "description": "ModelScope 是一個開源模型社群,提供各種機器學習 (ML) 與 AI 服務的 MCP Server" + }, + "fields": { + "provider": "選擇 Provider", + "accessToken": "Access Token", + "tokenRequired": "Access Token 為必填", + "tokenHint": "請輸入你的 ModelScope Access Token" + }, + "buttons": { + "cancel": "取消", + "previous": "上一步", + "next": "下一步", + "sync": "開始同步", + "getToken": "獲取 Token" + }, + "status": { + "selectProvider": "請選擇一個 MCP Server Provider", + "enterToken": "請輸入 Access Token 以繼續", + "readyToSync": "準備同步 Server 設定" + }, + "messages": { + "syncSuccess": "MCP Server 同步成功!", + "syncError": "同步失敗: {error}", + "tokenHelp": "如何獲取 ModelScope Access Token?點擊右方按鈕查看說明" + } + } + }, + "messages": { + "getServersError": "獲取 MCP Server 列表失敗: {error}", + "getToolsError": "獲取 Function Tool 列表失敗: {error}", + "saveSuccess": "儲存成功!", + "saveError": "儲存失敗: {error}", + "deleteSuccess": "刪除成功!", + "deleteError": "刪除失敗: {error}", + "updateSuccess": "更新成功!", + "updateError": "更新失敗: {error}", + "getMarketError": "獲取 MCP 市場 Server 列表失敗: {error}", + "importError": { + "noConfig": "此 Server 無可用設定", + "invalidFormat": "Server 設定格式不正確", + "failed": "匯入設定失敗: {error}" + }, + "configParseError": "設定解析錯誤: {error}", + "noAvailableConfig": "無可用設定", + "toggleToolSuccess": "工具狀態切換成功!", + "toggleToolError": "工具狀態切換失敗: {error}", + "testError": "測試連線失敗: {error}" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/trace.json b/dashboard/src/i18n/locales/zh-HK/features/trace.json new file mode 100644 index 0000000000..1b3256cc83 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/trace.json @@ -0,0 +1,10 @@ +{ + "title": "追蹤日誌 (Trace)", + "autoScroll": { + "enabled": "自動捲動:開", + "disabled": "自動捲動:關" + }, + "hint": "目前僅記錄部分 AstrBot Main Agent 的模型呼叫路徑,後續會繼續完善。", + "recording": "記錄中", + "paused": "已暫停" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/features/welcome.json b/dashboard/src/i18n/locales/zh-HK/features/welcome.json new file mode 100644 index 0000000000..c7eadc5619 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/features/welcome.json @@ -0,0 +1,37 @@ +{ + "greeting": { + "morning": "早晨,歡迎使用 AstrBot", + "afternoon": "午安,歡迎使用 AstrBot", + "evening": "晚安,歡迎使用 AstrBot", + "newYear": "新年快樂!" + }, + "subtitle": "可以先完成快速入門指南,平台與對話供應商都支援稍後再作設定。", + "announcement": { + "title": "系統公告" + }, + "onboard": { + "title": "快速入門指南", + "subtitle": "歡迎頁面可以一鍵完成初始化設定。", + "step1Title": "設定平台機械人", + "step1Desc": "將 AstrBot 連線至 QQ、飛書、企業微信、Telegram 等通訊平台。", + "step2Title": "配置 AI 模型", + "step2Desc": "為 AstrBot 配置 AI 模型。", + "configure": "前往設定", + "skip": "略過", + "pending": "等待中", + "completed": "已完成", + "skipped": "已略過", + "platformLoadFailed": "載入平台設定失敗", + "providerLoadFailed": "載入供應商設定失敗", + "providerUpdateFailed": "更新 default 設定檔的預設對話供應商失敗", + "providerDefaultUpdated": "已經將 default 設定檔的預設對話供應商設為 {id}" + }, + "resources": { + "title": "相關資源", + "githubDesc": "為 AstrBot 給一顆 Star 吧!", + "docsTitle": "官方文件", + "docsDesc": "查看 AstrBot 的官方文件。", + "afdianTitle": "愛發電", + "afdianDesc": "透過愛發電支持 AstrBot 團隊。" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/messages/errors.json b/dashboard/src/i18n/locales/zh-HK/messages/errors.json new file mode 100644 index 0000000000..fd7c54b2d4 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/messages/errors.json @@ -0,0 +1,39 @@ +{ + "network": { + "timeout": "網絡請求逾時,請稍後再試", + "connection": "無法連線至網絡,請檢查網絡設定", + "server": "伺服器錯誤,請聯絡技術支援", + "unavailable": "服務暫時無法使用", + "forbidden": "存取被拒" + }, + "validation": { + "required": "此欄位為必填", + "invalid": "輸入格式錯誤", + "tooLong": "輸入內容過長", + "tooShort": "輸入內容過短", + "email": "請輸入有效的電郵地址", + "url": "請輸入有效的網址 (URL)", + "number": "請輸入有效的數字" + }, + "auth": { + "unauthorized": "未授權存取,請重新登入", + "forbidden": "權限不足,無法執行此操作", + "tokenExpired": "登入已過期,請重新登入", + "invalidCredentials": "使用者名稱或密碼錯誤" + }, + "file": { + "uploadFailed": "檔案上載失敗", + "invalidFormat": "不支援此檔案格式", + "tooLarge": "檔案大小超過限制", + "notFound": "找不到檔案" + }, + "operation": { + "failed": "操作失敗", + "cancelled": "操作已取消", + "notSupported": "不支援此操作", + "conflict": "操作發生衝突,請稍後再試" + }, + "browser": { + "audioNotSupported": "你的瀏覽器不支援播放音訊。" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/messages/success.json b/dashboard/src/i18n/locales/zh-HK/messages/success.json new file mode 100644 index 0000000000..29f9fb0c1b --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/messages/success.json @@ -0,0 +1,23 @@ +{ + "operation": { + "saved": "儲存成功", + "created": "建立成功", + "updated": "更新成功", + "deleted": "刪除成功", + "uploaded": "上載成功", + "downloaded": "下載成功", + "imported": "匯入成功", + "exported": "匯出成功", + "copied": "複製成功", + "sent": "傳送成功" + }, + "connection": { + "connected": "連線成功", + "authenticated": "登入成功", + "synchronized": "同步成功" + }, + "validation": { + "valid": "驗證通過", + "completed": "操作完成" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-HK/messages/validation.json b/dashboard/src/i18n/locales/zh-HK/messages/validation.json new file mode 100644 index 0000000000..2aa3d55498 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-HK/messages/validation.json @@ -0,0 +1,25 @@ +{ + "required": "此欄位為必填", + "email": "請輸入有效的電郵地址", + "url": "請輸入有效的網址 (URL)", + "number": "請輸入有效的數字", + "min": "最小值為 {min}", + "max": "最大值為 {max}", + "minLength": "最少需要 {length} 個字元", + "maxLength": "最多只能輸入 {length} 個字元", + "pattern": "格式錯誤", + "unique": "此值已經存在", + "confirm": "兩次輸入的內容不一致", + "fileSize": "檔案大小不能超過 {size}MB", + "fileType": "不支援此檔案類型", + "required_field": "請填寫所有必填欄位", + "invalid_format": "格式無效", + "password_too_short": "密碼最少需要 8 個字元", + "password_too_weak": "密碼強度太弱", + "invalid_phone": "請輸入有效的電話號碼", + "invalid_date": "請輸入有效的日期", + "date_range": "日期範圍無效", + "upload_failed": "檔案上載失敗", + "network_error": "網絡錯誤,請再試一次", + "operation_cannot_be_undone": "⚠️ 此操作無法復原,請確認!" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/core/actions.json b/dashboard/src/i18n/locales/zh-TW/core/actions.json new file mode 100644 index 0000000000..991596502a --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/core/actions.json @@ -0,0 +1,24 @@ +{ + "create": "建立", + "read": "讀取", + "update": "更新", + "delete": "刪除", + "search": "搜尋", + "filter": "篩選", + "sort": "排序", + "export": "匯出", + "import": "匯入", + "backup": "備份", + "restore": "還原", + "copy": "複製", + "paste": "貼上", + "cut": "剪下", + "undo": "復原", + "redo": "重做", + "refresh": "重新整理", + "submit": "提交", + "reset": "重設", + "clear": "清空", + "save": "儲存", + "close": "關閉" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/core/common.json b/dashboard/src/i18n/locales/zh-TW/core/common.json new file mode 100644 index 0000000000..2bf93ab67b --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/core/common.json @@ -0,0 +1,133 @@ +{ + "save": "儲存", + "cancel": "取消", + "close": "關閉", + "copy": "複製", + "copied": "已複製", + "copyFailed": "複製失敗", + "delete": "刪除", + "edit": "編輯", + "add": "新增", + "confirm": "確認", + "loading": "載入中...", + "success": "成功", + "error": "錯誤", + "warning": "警告", + "info": "資訊", + "name": "名稱", + "description": "描述", + "author": "作者", + "status": "狀態", + "actions": "操作", + "enable": "啟用", + "disable": "停用", + "enabled": "已啟用", + "disabled": "已停用", + "reload": "重新載入", + "configure": "設定", + "install": "安裝", + "uninstall": "移除", + "update": "更新", + "language": "語言", + "settings": "設定", + "locale": "zh-TW", + "type": "輸入", + "press": "按", + "longPress": "長按", + "yes": "是", + "no": "否", + "imagePreview": "圖片預覽", + "autoDetect": "自動偵測", + "dialog": { + "confirmTitle": "確認操作", + "confirmMessage": "您確定要執行此操作嗎?", + "confirmButton": "確定", + "cancelButton": "取消" + }, + "restart": { + "waiting": "正在等待 AstrBot 重新啟動...", + "maxRetriesReached": "拉取狀態達到最大次數,請手動檢查。" + }, + "readme": { + "title": "擴充套件說明文件", + "buttons": { + "viewOnGithub": "在 GitHub 中查看儲存庫", + "refresh": "重新整理文件" + }, + "loading": "正在載入 README 文件...", + "errors": { + "fetchFailed": "取得 README 失敗", + "fetchError": "取得 README 時發生錯誤" + }, + "empty": { + "title": "該擴充套件未提供文件連結或 GitHub 儲存庫地址。", + "subtitle": "請查看擴充套件市場或聯絡擴充套件作者取得更多資訊。" + } + }, + "changelog": { + "title": "更新日誌", + "loading": "正在載入更新日誌...", + "empty": { + "title": "該擴充套件未提供更新日誌", + "subtitle": "開發者可在擴充套件目錄下新增 CHANGELOG.md 檔案來提供更新日誌" + } + }, + "editor": { + "fullscreen": "全螢幕編輯", + "editingTitle": "編輯內容" + }, + "templateList": { + "addEntry": "新增項目", + "empty": "暫無項目,請選擇範本新增", + "missingTemplate": "找不到對應範本,請刪除後重新新增。", + "unknownTemplate": "未指定範本" + }, + "list": { + "addItemPlaceholder": "新增項目,按 Enter 確認新增", + "addButton": "新增", + "addMore": "新增更多", + "batchImport": "批次匯入", + "batchImportTitle": "批次匯入", + "batchImportLabel": "每行一個項目", + "batchImportPlaceholder": "例如:\n項目1\n項目2\n項目3\n項目4", + "batchImportHint": "每行將作為一個單獨的項目,空白行會被自動忽略", + "batchImportButton": "匯入 {count} 項", + "noItems": "暫無項目", + "noItemsHint": "暫無項目,在上方輸入框輸入後按 Enter 新增", + "inputPlaceholder": "輸入後按 Enter 新增", + "editTitle": "修改列表項目", + "modifyButton": "修改" + }, + "itemCard": { + "enabled": "已啟用", + "disabled": "已停用", + "delete": "刪除", + "edit": "編輯", + "copy": "複製", + "noData": "暫無資料" + }, + "objectEditor": { + "dialogTitle": "修改鍵值對", + "noItems": "暫無項目", + "noParams": "暫無參數", + "presets": "預設", + "newKeyLabel": "新鍵名", + "valueTypeLabel": "值類型", + "keyExists": "鍵名已存在", + "invalidJson": "JSON 格式錯誤", + "placeholders": { + "keyName": "鍵名", + "stringValue": "字串值", + "numberValue": "數值", + "jsonValue": "JSON" + } + }, + "firstNotice": { + "title": "首次提示", + "loading": "正在載入首次提示...", + "empty": { + "title": "暫無首次提示內容", + "subtitle": "未找到 FIRST_NOTICE.md 或檔案為空。" + } + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/core/header.json b/dashboard/src/i18n/locales/zh-TW/core/header.json new file mode 100644 index 0000000000..5b71d2acc9 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/core/header.json @@ -0,0 +1,108 @@ +{ + "logoTitle": "AstrBot 儀表板", + "version": { + "hasNewVersion": "AstrBot 有新版本!", + "dashboardHasNewVersion": "WebUI 有新版本!" + }, + "buttons": { + "update": "更新", + "account": "帳號", + "theme": { + "light": "淺色模式", + "dark": "深色模式" + } + }, + "updateDialog": { + "title": "更新 AstrBot", + "currentVersion": "目前版本", + "status": { + "checking": "正在檢查更新...", + "switching": "正在切換版本...", + "updating": "正在更新..." + }, + "tabs": { + "release": "😊 正式版" + }, + "updateToLatest": "更新到最新版本", + "preRelease": "預發布", + "preReleaseWarning": { + "title": "預發布版本提醒", + "description": "標有預發布標籤的版本可能存在未知問題或 Bug,不建議在正式環境使用。如發現問題,請提交至 ", + "issueLink": "GitHub Issues" + }, + "tip": "💡 提示:", + "tipContinue": "預設在切換版本時會下載對應版本的 WebUI 檔案。WebUI 程式碼位於專案的 dashboard 目錄,您可使用 npm 自行建置。", + "dockerTip": "切換版本時,會同時嘗試更新機器人主程式和管理面板。如果您正在使用 Docker 部署,也可以重新拉取映像檔或者使用", + "dockerTipLink": "watchtower", + "dockerTipContinue": "來自動監控拉取。", + "table": { + "tag": "標籤", + "publishDate": "發布時間", + "content": "內容", + "sourceUrl": "原始碼位址", + "actions": "操作", + "view": "查看", + "switch": "切換" + }, + "releaseNotes": { + "title": "更新日誌" + }, + "redirectConfirm": { + "title": "即將跳轉", + "message": "將跳轉到 GitHub Releases 頁面,是否繼續?", + "latestLabel": "最新版本", + "targetVersion": "目標版本:", + "currentVersion": "目前版本:", + "guideTitle": "跳轉後建議:", + "guideStep1": "根據您的系統架構下載對應安裝檔。", + "guideStep2": "完成安裝後重新啟動 AstrBot。", + "guideStep3": "如果您使用 Docker,請優先使用映像檔更新方式。" + }, + "desktopApp": { + "title": "更新桌面應用程式", + "message": "將檢查並升級 AstrBot 桌面端程式。", + "currentVersion": "目前版本:", + "latestVersion": "最新版本:", + "checking": "正在檢查桌面應用程式更新...", + "hasNewVersion": "發現新版本,可點擊確認升級。", + "isLatest": "已經是最新版本", + "installing": "正在下載並安裝更新,完成後將自動重新啟動應用程式...", + "checkFailed": "檢查更新失敗,請稍後重試。", + "installFailed": "升級失敗,請稍後重試。" + }, + "dashboardUpdate": { + "title": "單獨更新管理面板到最新版本", + "currentVersion": "目前版本", + "hasNewVersion": "有新版本!", + "isLatest": "已經是最新版本了。", + "downloadAndUpdate": "下載並更新" + } + }, + "accountDialog": { + "title": "修改帳號", + "securityWarning": "安全提醒:請修改預設密碼以確保帳號安全", + "form": { + "currentPassword": "目前密碼", + "newPassword": "新密碼", + "confirmPassword": "確認新密碼", + "newUsername": "新使用者名稱 (選填)", + "passwordHint": "密碼長度至少 8 位", + "confirmPasswordHint": "請再次輸入新密碼以確認", + "usernameHint": "留空表示不修改使用者名稱", + "defaultCredentials": "預設使用者名稱和密碼均為 astrbot" + }, + "validation": { + "passwordRequired": "請輸入密碼", + "passwordMinLength": "密碼長度至少 8 位", + "passwordMatch": "兩次輸入的密碼不一致", + "usernameMinLength": "使用者名稱長度至少 3 位" + }, + "actions": { + "save": "儲存修改", + "cancel": "取消" + }, + "messages": { + "updateFailed": "修改失敗,請重試" + } + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/core/navigation.json b/dashboard/src/i18n/locales/zh-TW/core/navigation.json new file mode 100644 index 0000000000..4aec1ba7aa --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/core/navigation.json @@ -0,0 +1,49 @@ +{ + "welcome": "歡迎", + "dashboard": "數據統計", + "platforms": "機器人", + "providers": "模型供應商", + "commands": "指令管理", + "persona": "人格設定", + "subagent": "SubAgent 編排", + "toolUse": "MCP", + "extension": "擴充套件", + "extensionTabs": { + "installed": "AstrBot 擴充套件", + "market": "擴充套件市場", + "mcp": "MCP", + "skills": "Skills", + "components": "管理行為" + }, + "config": "設定檔", + "chat": "聊天", + "cron": "未來任務", + "conversation": "對話數據", + "sessionManagement": "自訂規則", + "console": "平台日誌", + "trace": "追蹤", + "alkaid": "Alkaid", + "knowledgeBase": "知識庫", + "about": "關於", + "settings": "設定", + "changelog": "更新日誌", + "documentation": "官方文件", + "faq": "FAQ", + "github": "GitHub", + "drag": "拖曳", + "groups": { + "more": "更多功能" + }, + "changelogDialog": { + "title": "更新日誌", + "loading": "載入中...", + "error": "載入失敗", + "notFound": "未找到該版本的更新日誌", + "selectVersion": "選擇版本", + "current": "目前" + }, + "configTabs": { + "normal": "一般設定", + "system": "系統設定" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/core/shared.json b/dashboard/src/i18n/locales/zh-TW/core/shared.json new file mode 100644 index 0000000000..1dec1dad2b --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/core/shared.json @@ -0,0 +1,111 @@ +{ + "knowledgeBaseSelector": { + "notSelected": "未選擇", + "buttonText": "選擇知識庫...", + "dialogTitle": "選擇知識庫", + "loading": "載入中...", + "noKnowledgeBases": "暫無知識庫", + "createKnowledgeBase": "建立知識庫", + "selectedCount": "已選擇 {count} 個知識庫", + "confirmSelection": "確認選擇", + "cancelSelection": "取消", + "noDescription": "無描述", + "documentCount": "{count} 個文件", + "chunkCount": "{count} 個區塊" + }, + "pluginSetSelector": { + "notSelected": "未啟用任何擴充套件", + "allPlugins": "啟用所有擴充套件 (*)", + "selectedCount": "已選擇 {count} 個擴充套件", + "buttonText": "選擇擴充套件集合...", + "dialogTitle": "選擇擴充套件集合", + "loading": "載入中...", + "enableAll": "啟用所有擴充套件", + "enableNone": "不啟用任何擴充套件", + "customSelect": "自訂選擇", + "noPlugins": "暫無可用的擴充套件", + "confirmSelection": "確認選擇", + "cancelSelection": "取消", + "noDescription": "無描述", + "notActivated": "未啟動", + "note": "*不顯示系統擴充套件和已經在擴充套件頁面停用的擴充套件。", + "selectedPluginsLabel": "已選擇的擴充套件:", + "allPluginsLabel": "所有擴充套件" + }, + "providerSelector": { + "notSelected": "未選擇", + "buttonText": "選擇供應商...", + "dialogTitle": "選擇供應商", + "loading": "載入中...", + "noProviders": "暫無可用的供應商", + "confirmSelection": "確認選擇", + "cancelSelection": "取消", + "clearSelection": "不選擇", + "clearSelectionSubtitle": "清除目前選擇", + "unknownType": "未知類型", + "createProvider": "建立供應商", + "manageProviders": "供應商管理", + "selectProviderPool": "選擇供應商池...", + "selectedCount": "已選擇 {count} 個供應商" + }, + "personaSelector": { + "notSelected": "未選擇", + "defaultPersona": "預設人格", + "buttonText": "選擇人格...", + "dialogTitle": "選擇人格", + "noDescription": "無描述", + "noPersonas": "暫無可用的人格", + "createPersona": "建立新人格", + "cancelSelection": "取消", + "confirmSelection": "確認選擇", + "selectPersonaPool": "選擇人格池...", + "rootFolder": "全部人格", + "emptyFolder": "此資料夾為空" + }, + "personaQuickPreview": { + "title": "快速預覽", + "loading": "載入中...", + "noPersonaSelected": "未選擇人格", + "personaNotFound": "未找到該人格的詳情", + "systemPromptLabel": "系統提示詞", + "toolsLabel": "工具", + "skillsLabel": "技能(Skills)", + "originLabel": "來源", + "originNameLabel": "來源名稱", + "toolInactive": "已停用", + "toolInactiveTooltip": "該工具已被停用。在擴充套件->管理行為->函數工具中重新啟用。", + "allTools": "全部工具可用", + "allToolsWithCount": "全部工具可用({count})", + "noTools": "未設定工具", + "allSkills": "全部 Skills 可用", + "allSkillsWithCount": "全部 Skills 可用({count})", + "noSkills": "未設定 Skills" + }, + "t2iTemplateEditor": { + "buttonText": "自訂 T2I 範本", + "dialogTitle": "自訂文字轉圖片 HTML 範本", + "newTemplateNameLabel": "輸入新範本名稱", + "nameRequired": "名稱不能為空", + "selectTemplateLabel": "選擇範本", + "applied": "已套用", + "apply": "套用", + "templateEditor": "範本編輯器", + "new": "新增", + "resetBase": "重設 Base", + "delete": "刪除", + "save": "儲存", + "livePreview": "即時預覽(可能會有差異)", + "refreshPreview": "重新整理預覽", + "previewText": "這是一個範例文字,用於預覽範本效果。\n\n這裡可以包含多行文字,支援換行和各種格式。", + "syntaxHint": "支援 jinja2 語法。可用變數:text | safe(要渲染的文字), version(AstrBot 版本)", + "saveAndApply": "儲存並套用目前編輯的範本", + "confirmReset": "確認重設", + "confirmResetMessage": "確定要將 'base' 範本還原為預設內容嗎?目前編輯器中的任何未儲存變更將會遺失。此操作無法復原。", + "confirmResetButton": "確認重設", + "confirmDelete": "確認刪除", + "confirmDeleteMessage": "確定要刪除範本 '{name}' 嗎?此操作無法復原。", + "confirmDeleteButton": "確認刪除", + "confirmAction": "確認操作", + "confirmApplyMessage": "確定要儲存對 '{name}' 的修改,並將其設為新的使用中範本嗎?" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/core/status.json b/dashboard/src/i18n/locales/zh-TW/core/status.json new file mode 100644 index 0000000000..cc98c38a8c --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/core/status.json @@ -0,0 +1,22 @@ +{ + "loading": "載入中", + "success": "成功", + "error": "錯誤", + "warning": "警告", + "info": "資訊", + "pending": "等待中", + "processing": "處理中", + "completed": "已完成", + "failed": "失敗", + "cancelled": "已取消", + "timeout": "逾時", + "connecting": "連線中", + "connected": "已連線", + "disconnected": "已斷線", + "online": "在線", + "offline": "離線", + "active": "活躍", + "inactive": "非活躍", + "ready": "就緒", + "busy": "忙碌" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/about.json b/dashboard/src/i18n/locales/zh-TW/features/about.json new file mode 100644 index 0000000000..abf1d88bfc --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/about.json @@ -0,0 +1,17 @@ +{ + "hero": { + "title": "AstrBot", + "subtitle": "A project out of interests and loves ❤️", + "starButton": "Star 這個專案!🌟", + "issueButton": "提交 Issue" + }, + "contributors": { + "title": "貢獻者", + "description": "本專案由眾多開源社群成員共同維護。感謝每一位貢獻者的付出!", + "viewLink": "查看 AstrBot 貢獻者" + }, + "stats": { + "title": "全球部署", + "license": "AstrBot 採用 AGPL v3 協議開源" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/alkaid/index.json b/dashboard/src/i18n/locales/zh-TW/features/alkaid/index.json new file mode 100644 index 0000000000..8ac2e51b8f --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/alkaid/index.json @@ -0,0 +1,44 @@ +{ + "title": "Alkaid 實驗室", + "subtitle": "探索前沿 AI 功能", + "comingSoon": "前面的世界,以後再來探索吧!", + "page": { + "title": "The Alkaid Project.", + "subtitle": "AstrBot Alpha 專案", + "navigation": { + "knowledgeBase": "知識庫 (擴充套件)", + "longTermMemory": "長期記憶層", + "other": "..." + } + }, + "features": { + "knowledgeBase": "知識庫", + "longTermMemory": "長期記憶", + "advancedChat": "進階對話", + "multiModal": "多模態互動" + }, + "status": { + "experimental": "實驗性", + "beta": "測試版", + "stable": "穩定版", + "deprecated": "已棄用" + }, + "sigma": { + "subtitle": "AstrBot 實驗性專案", + "visualization": "視覺化", + "filterUserId": "篩選使用者 ID", + "filter": "篩選", + "resetFilter": "重設篩選", + "refreshGraph": "重新整理圖形", + "nodeDetails": "節點詳情", + "id": "ID", + "type": "類型", + "name": "名稱", + "userId": "使用者 ID", + "timestamp": "時間戳記", + "graphStats": "圖形統計", + "nodeCount": "節點數", + "edgeCount": "邊數", + "inDevelopment": "功能開發中" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/alkaid/knowledge-base.json b/dashboard/src/i18n/locales/zh-TW/features/alkaid/knowledge-base.json new file mode 100644 index 0000000000..12588dff31 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/alkaid/knowledge-base.json @@ -0,0 +1,155 @@ +{ + "title": "知識庫", + "subtitle": "管理和查詢知識庫內容", + "documents": { + "title": "文件列表", + "name": "文件名稱", + "size": "大小", + "uploadTime": "上傳時間", + "status": "狀態", + "actions": "操作" + }, + "management": { + "delete": "刪除", + "preview": "預覽", + "download": "下載", + "reindex": "重新索引" + }, + "notInstalled": { + "title": "還沒有安裝知識庫擴充套件", + "install": "立即安裝" + }, + "empty": { + "title": "還沒有知識庫,快建立一個吧!🙂", + "create": "建立知識庫" + }, + "list": { + "title": "知識庫列表", + "create": "建立知識庫", + "config": "設定", + "checkUpdate": "檢查擴充套件更新", + "updatePlugin": "更新擴充套件到 {version}", + "knowledgeCount": "條知識", + "tips": "Tips: 在聊天頁面透過 /kb 指令了解如何使用!" + }, + "createDialog": { + "title": "建立新知識庫", + "nameLabel": "知識庫名稱", + "descriptionLabel": "描述", + "descriptionPlaceholder": "知識庫的簡短描述...", + "embeddingModelLabel": "嵌入模型(Embedding Model)", + "rerankModelLabel": "重排序模型(Rerank Model)", + "providerInfo": "供應商 ID: {id} | 嵌入模型維度: {dimensions}", + "rerankProviderInfo": "供應商 ID: {id}", + "tips": "Tips: 一旦選擇了一個知識庫的嵌入模型,請不要再修改該供應商的模型或者向量維度資訊,否則將嚴重影響該知識庫的召回率甚至報錯。", + "cancel": "取消", + "create": "建立" + }, + "emojiPicker": { + "title": "選擇表情", + "close": "關閉", + "categories": { + "emotions": "笑臉和情感", + "animals": "動物和自然", + "food": "食物和飲料", + "activities": "活動和物品", + "travel": "旅行和地點", + "symbols": "符號和旗幟" + } + }, + "contentDialog": { + "title": "知識庫管理", + "embeddingModel": "嵌入模型", + "vectorDimension": "向量維度", + "usage": "使用方式: 在聊天頁中輸入 \"/kb use {name}\"", + "tabs": { + "upload": "上傳檔案", + "search": "搜尋內容", + "fromURL": "從 URL 匯入" + } + }, + "upload": { + "title": "上傳檔案到知識庫", + "subtitle": "支援 txt、pdf、word、excel 等多種格式", + "dropzone": "拖放檔案到這裡或點擊上傳", + "chunkSettings": { + "title": "區塊設定", + "tooltip": "區塊長度決定每塊文字的大小,重疊長度決定相鄰文字區塊之間的重疊程度。\n較小的區塊更精確但會增加數量,適當的重疊可提高檢索準確性。", + "chunkSizeLabel": "區塊長度", + "chunkSizeHint": "控制每個文字區塊大小,留空使用預設值", + "overlapLabel": "重疊長度", + "overlapHint": "控制相鄰文字區塊重疊度,留空使用預設值" + }, + "upload": "上傳檔案", + "uploading": "正在上傳..." + }, + "search": { + "queryLabel": "搜尋知識庫內容", + "queryPlaceholder": "輸入關鍵字搜尋知識庫內容...", + "resultCountLabel": "結果數量", + "searching": "正在搜尋...", + "resultsTitle": "搜尋結果", + "relevance": "相關度", + "noResults": "沒有找到符合的內容" + }, + "deleteDialog": { + "title": "確認刪除", + "confirmText": "您確定要刪除知識庫 {name} 嗎?", + "warning": "此操作不可復原,所有知識庫內容將被永久刪除。", + "cancel": "取消", + "delete": "刪除" + }, + "messages": { + "pluginNotAvailable": "擴充套件未安裝或不可用", + "pluginNotActivated": "astrbot_plugin_knowledge_base 擴充套件未啟用,請前往擴充套件管理頁面啟用,然後重新啟動 AstrBot。", + "checkPluginFailed": "檢查擴充套件失敗", + "installFailed": "安裝失敗", + "installPluginFailed": "安裝擴充套件失敗", + "getKnowledgeBaseListFailed": "取得知識庫列表失敗", + "knowledgeBaseCreated": "知識庫建立成功", + "createFailed": "建立失敗", + "createKnowledgeBaseFailed": "建立知識庫失敗", + "pleaseEnterKnowledgeBaseName": "請輸入知識庫名稱", + "pleaseSelectFile": "請先選擇檔案", + "operationSuccess": "操作成功:{message}", + "uploadFailed": "上傳失敗", + "fileUploadFailed": "檔案上傳失敗", + "pleaseEnterSearchContent": "請輸入搜尋內容", + "noMatchingContent": "沒有找到符合的內容", + "searchFailed": "搜尋失敗", + "searchKnowledgeBaseFailed": "搜尋知識庫失敗", + "deleteTargetNotExists": "刪除目標不存在", + "knowledgeBaseDeleted": "知識庫刪除成功", + "deleteFailed": "刪除失敗", + "deleteKnowledgeBaseFailed": "刪除知識庫失敗", + "getEmbeddingModelListFailed": "取得嵌入模型列表失敗", + "updateAvailable": "發現新版本:{current} -> {latest}", + "pluginUpToDate": "擴充套件已是最新版本", + "pluginNotFoundInMarket": "在擴充套件市場中未找到該擴充套件", + "checkUpdateFailed": "檢查更新失敗", + "updateSuccess": "擴充套件更新成功", + "updateFailed": "更新失敗", + "updatePluginFailed": "更新擴充套件失敗" + }, + "importFromUrl": { + "title": "從 URL 匯入", + "urlLabel": "網頁 URL", + "urlPlaceholder": "請輸入要提取知識的網頁位址", + "optionsTitle": "匯入選項", + "tooltip": "這些選項控制如何從 URL 內容中提取和處理文字。\n留空將使用擴充套件的預設設定。\n啟用 LLM 文字修復和摘要後可能花費時間較長。", + "useLlmRepairLabel": "啟用 LLM 文字修復", + "useClusteringSummaryLabel": "啟用聚類摘要", + "repairLlmProviderIdLabel": "文字修復模型", + "summarizeLlmProviderIdLabel": "摘要模型", + "embeddingProviderIdLabel": "嵌入模型", + "chunkSizeLabel": "區塊長度", + "chunkOverlapLabel": "重疊長度", + "startImport": "開始匯入", + "importing": "正在匯入...", + "importSuccess": "匯入成功", + "importFailed": "匯入失敗", + "uploadingChunks": "內容提取成功,正在上傳區塊...", + "preRequisite": "提示:請先前往擴充套件市場安裝 astrbot_plugin_url_2_knowledge_base 並根據擴充套件文件內的指示完成 playwright 安裝後才可使用本功能", + "allChunksUploaded": "所有區塊上傳成功" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/alkaid/memory.json b/dashboard/src/i18n/locales/zh-TW/features/alkaid/memory.json new file mode 100644 index 0000000000..6f8fbb1f90 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/alkaid/memory.json @@ -0,0 +1,97 @@ +{ + "title": "長期記憶", + "subtitle": "AI 助手的長期記憶管理", + "memories": { + "title": "記憶列表", + "content": "記憶內容", + "importance": "重要程度", + "createTime": "建立時間", + "lastAccess": "最後存取", + "category": "分類" + }, + "categories": { + "personal": "個人資訊", + "preferences": "偏好設定", + "conversations": "對話歷史", + "facts": "事實資訊", + "skills": "技能知識" + }, + "importance": { + "high": "高", + "medium": "中", + "low": "低" + }, + "actions": { + "view": "查看詳情", + "edit": "編輯", + "delete": "刪除", + "pin": "置頂", + "unpin": "取消置頂" + }, + "filters": { + "all": "全部", + "category": "按分類", + "importance": "按重要程度", + "dateRange": "按時間範圍", + "title": "篩選", + "userIdLabel": "篩選使用者 ID", + "filterButton": "篩選", + "resetButton": "重設篩選", + "refreshButton": "重新整理圖形" + }, + "search": { + "title": "搜尋記憶", + "userIdLabel": "使用者 ID", + "queryLabel": "輸入關鍵字", + "searchButton": "搜尋", + "resultsTitle": "搜尋結果", + "noResults": "未找到相關記憶內容", + "similarity": "相關度", + "noTextContent": "無文字內容" + }, + "addMemory": { + "title": "新增記憶資料", + "textLabel": "輸入文字內容", + "userIdLabel": "使用者 ID", + "summarizeLabel": "需要摘要", + "addButton": "新增資料" + }, + "nodeDetails": { + "title": "節點詳情", + "id": "ID", + "type": "類型", + "name": "名稱", + "userId": "使用者 ID", + "timestamp": "時間戳記" + }, + "graphStats": { + "title": "圖形統計", + "nodeCount": "節點數", + "edgeCount": "邊數" + }, + "factDialog": { + "title": "記憶事實", + "id": "ID", + "docId": "文件 ID", + "createdAt": "建立時間", + "updatedAt": "更新時間", + "metadata": "中繼資料", + "metadataKey": "鍵", + "metadataValue": "值", + "loading": "載入中...", + "close": "關閉", + "noValue": "無", + "unknown": "未知" + }, + "messages": { + "searchQueryRequired": "請輸入搜尋關鍵字", + "searchSuccess": "找到 {count} 條相關記憶", + "searchNoResults": "未找到相關記憶內容", + "searchError": "搜尋失敗", + "addSuccess": "記憶資料新增成功!", + "addError": "新增記憶資料失敗", + "factDetailsError": "取得記憶詳情失敗", + "metadataParseError": "無法解析中繼資料", + "relationNoMemoryData": "該關係沒有關聯的記憶資料" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/auth.json b/dashboard/src/i18n/locales/zh-TW/features/auth.json new file mode 100644 index 0000000000..3e583191d8 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/auth.json @@ -0,0 +1,14 @@ +{ + "login": "登入", + "username": "使用者名稱", + "password": "密碼", + "defaultHint": "預設帳號和密碼均為:astrbot", + "logo": { + "title": "AstrBot WebUI", + "subtitle": "歡迎使用" + }, + "theme": { + "switchToDark": "切換到深色主題", + "switchToLight": "切換到淺色主題" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/chart.json b/dashboard/src/i18n/locales/zh-TW/features/chart.json new file mode 100644 index 0000000000..0868e05a59 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/chart.json @@ -0,0 +1,4 @@ +{ + "messageCount": "訊息條數", + "time": "時間" +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/chat.json b/dashboard/src/i18n/locales/zh-TW/features/chat.json new file mode 100644 index 0000000000..0245945907 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/chat.json @@ -0,0 +1,161 @@ +{ + "title": "聊天吧!", + "subtitle": "與 AI 助手進行對話", + "input": { + "placeholder": "開始輸入...", + "send": "發送", + "clear": "清空", + "upload": "上傳檔案", + "voice": "語音輸入", + "recordingPrompt": "錄音中,請說話...", + "chatPrompt": "聊天吧!", + "dropToUpload": "鬆開滑鼠上傳檔案", + "stopGenerating": "停止生成" + }, + "message": { + "user": "使用者", + "assistant": "助手", + "system": "系統", + "error": "錯誤訊息", + "loading": "思考中..." + }, + "voice": { + "start": "開始錄音", + "stop": "停止錄音", + "recording": "新錄音", + "processing": "處理中...", + "error": "錄音失敗", + "listening": "等待語音...", + "speaking": "正在說話", + "startRecording": "開始語音輸入", + "liveMode": "即時對話" + }, + "welcome": { + "title": "歡迎使用 AstrBot", + "subtitle": "您的智能對話助手", + "quickActions": "快速操作", + "examples": "範例問題" + }, + "actions": { + "copy": "複製", + "regenerate": "重新生成", + "like": "按讚", + "dislike": "倒讚", + "share": "分享", + "newChat": "建立對話", + "deleteChat": "刪除此對話", + "editTitle": "編輯標題", + "fullscreen": "全螢幕模式", + "exitFullscreen": "退出全螢幕", + "reply": "引用回覆", + "providerConfig": "AI 設定", + "toolsUsed": "已使用工具", + "toolCallUsed": "已使用 {name} 工具", + "pythonCodeAnalysis": "已使用 Python 程式碼分析" + }, + "ipython": { + "output": "輸出" + }, + "conversation": { + "newConversation": "新的聊天", + "noHistory": "暫無對話歷史", + "systemStatus": "系統狀態", + "llmService": "LLM 服務", + "speechToText": "語音轉文字", + "editDisplayName": "編輯會話名稱", + "displayName": "會話名稱", + "displayNameUpdated": "會話名稱已更新", + "displayNameUpdateFailed": "更新會話名稱失敗", + "confirmDelete": "確定要刪除「{name}」嗎?此操作無法復原。" + }, + "modes": { + "darkMode": "切換到深色模式", + "lightMode": "切換到淺色模式" + }, + "shortcuts": { + "help": "取得幫助", + "voiceRecord": "錄製語音", + "pasteImage": "貼上圖片", + "sendKey": { + "title": "發送快捷鍵", + "enterToSend": "Enter 發送", + "shiftEnterToSend": "Shift+Enter 發送" + } + }, + "streaming": { + "enabled": "流式回應已開啟", + "disabled": "流式回應已關閉", + "on": "流式", + "off": "一般" + }, + "transport": { + "title": "通訊傳輸模式", + "sse": "SSE", + "websocket": "WebSocket" + }, + "config": { + "title": "設定檔" + }, + "reasoning": { + "thinking": "思考過程" + }, + "reply": { + "replyTo": "引用", + "notFound": "無法定位訊息" + }, + "project": { + "title": "專案", + "create": "建立專案", + "edit": "編輯專案", + "name": "專案名稱", + "emoji": "圖示 (Emoji)", + "description": "專案描述(選填)", + "noSessions": "該專案暫無對話", + "confirmDelete": "確定要刪除專案 \"{title}\" 嗎?專案中的對話不會被刪除。" + }, + "time": { + "today": "今天", + "yesterday": "昨天" + }, + "stats": { + "tokens": "Token", + "inputTokens": "輸入 Token", + "outputTokens": "輸出 Token", + "cachedTokens": "快取 Token", + "duration": "耗時", + "ttft": "首字時間" + }, + "refs": { + "title": "引用", + "sources": "來源" + }, + "connection": { + "title": "連線狀態提醒", + "message": "系統偵測到聊天連線需要重新建立。", + "reasons": "這可能是因為:", + "reasonWindowResize": "切換了聊天視窗大小(正常現象)", + "reasonMultipleTabs": "在其他標籤頁中打開了聊天頁面", + "reasonNetworkIssue": "網路連線臨時中斷", + "notice": "注意:為了確保訊息正確接收,系統只允許同時保持一個聊天連線。如果您在多個標籤頁中使用聊天功能,建議只保留一個頁面。", + "understand": "我知道了", + "status": { + "reconnecting": "正在重新連線...", + "reconnected": "聊天連線已重新建立", + "failed": "連線失敗,請重新整理頁面重試" + } + }, + "errors": { + "sendMessageFailed": "發送訊息失敗,請重試", + "createSessionFailed": "建立會話失敗,請重新整理頁面重試" + }, + "batch": { + "selected": "已選擇 {count} 個", + "confirmDelete": "確定要刪除 {count} 個對話嗎?此操作無法復原。", + "selectAll": "全選", + "deselectAll": "取消全選", + "delete": "刪除", + "exit": "退出", + "partialFailure": "{total} 個對話中有 {failed} 個刪除失敗", + "requestFailed": "刪除對話失敗,請重試。" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/command.json b/dashboard/src/i18n/locales/zh-TW/features/command.json new file mode 100644 index 0000000000..bb00177bfe --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/command.json @@ -0,0 +1,95 @@ +{ + "title": "指令管理", + "summary": { + "total": "展示的指令數", + "disabled": "已停用", + "conflicts": "有衝突" + }, + "conflictAlert": { + "title": "偵測到指令衝突", + "description": "目前有 {count} 對指令存在衝突,衝突的指令會同時觸發多個擴充套件回應,可能導致意外行為。", + "hint": "請點擊「重新命名」按鈕修改衝突指令的名稱以解決衝突。" + }, + "table": { + "headers": { + "command": "指令", + "type": "類型", + "plugin": "所屬擴充套件", + "description": "描述", + "permission": "權限", + "status": "狀態", + "actions": "操作" + } + }, + "type": { + "command": "指令", + "group": "指令組", + "subCommand": "子指令" + }, + "status": { + "enabled": "已啟用", + "disabled": "已停用", + "conflict": "有衝突" + }, + "permission": { + "everyone": "所有人", + "admin": "管理員" + }, + "tooltips": { + "enable": "啟用指令", + "disable": "停用指令", + "rename": "重新命名指令", + "viewDetails": "查看詳情" + }, + "dialogs": { + "rename": { + "title": "重新命名指令", + "newName": "新指令名", + "aliases": "管理別名", + "addAlias": "新增別名", + "cancel": "取消", + "confirm": "確認" + }, + "details": { + "title": "指令詳情", + "type": "指令類型", + "handler": "處理函數", + "module": "模組路徑", + "originalCommand": "原始指令", + "effectiveCommand": "生效指令", + "parentGroup": "所屬指令組", + "subCommands": "子指令列表", + "aliases": "別名", + "permission": "權限要求", + "conflictStatus": "衝突狀態" + } + }, + "messages": { + "toggleSuccess": "指令狀態已更新", + "toggleFailed": "更新指令狀態失敗", + "renameSuccess": "指令已重新命名", + "renameFailed": "重新命名失敗", + "loadFailed": "載入指令列表失敗", + "updateSuccess": "更新成功", + "updateFailed": "更新失敗" + }, + "search": { + "placeholder": "搜尋指令..." + }, + "empty": { + "noCommands": "暫無指令", + "noCommandsDesc": "目前篩選條件下沒有找到任何指令" + }, + "filters": { + "all": "全部", + "enabled": "已啟用", + "disabled": "已停用", + "conflict": "有衝突", + "byPlugin": "按擴充套件篩選", + "byType": "按類型篩選", + "byPermission": "按權限篩選", + "byStatus": "按狀態篩選", + "showSystemPlugins": "顯示系統擴充套件指令", + "systemPluginConflictHint": "存在涉及系統擴充套件的衝突,需解決衝突後才能隱藏" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/config-metadata.json b/dashboard/src/i18n/locales/zh-TW/features/config-metadata.json new file mode 100644 index 0000000000..bf695a6bb0 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/config-metadata.json @@ -0,0 +1,1599 @@ +{ + "ai_group": { + "name": "AI 設定", + "agent_runner": { + "description": "Agent 執行方式", + "hint": "選擇 AI 對話的執行器,預設為 AstrBot 內建 Agent 執行器,可使用 AstrBot 內的知識庫、人格、工具呼叫功能。如果不打算接入 Dify、Coze、DeerFlow 等第三方 Agent 執行器,不需要修改此節。", + "provider_settings": { + "enable": { + "description": "啟用", + "hint": "AI 對話總開關" + }, + "agent_runner_type": { + "description": "執行器", + "labels":[ + "內建 Agent", + "Dify", + "Coze", + "阿里雲百鍊應用", + "DeerFlow" + ] + }, + "coze_agent_runner_provider_id": { + "description": "Coze Agent 執行器供應商 ID" + }, + "dify_agent_runner_provider_id": { + "description": "Dify Agent 執行器供應商 ID" + }, + "dashscope_agent_runner_provider_id": { + "description": "阿里雲百鍊應用 Agent 執行器供應商 ID" + }, + "deerflow_agent_runner_provider_id": { + "description": "DeerFlow Agent 執行器供應商 ID" + } + } + }, + "ai": { + "description": "模型", + "hint": "當使用非內建 Agent 執行器時,預設對話模型和預設圖片轉述模型可能會無效,但某些擴充套件會依賴此設定項來呼叫 AI 能力。", + "provider_settings": { + "default_provider_id": { + "description": "預設對話模型", + "hint": "留空時使用第一個模型" + }, + "fallback_chat_models": { + "description": "回退對話模型列表", + "hint": "主對話模型請求失敗時,按順序切換到這些對話模型。" + }, + "default_image_caption_provider_id": { + "description": "預設圖片轉述模型", + "hint": "留空代表不使用,可用於非多模態模型" + }, + "image_caption_prompt": { + "description": "圖片轉述提示詞" + } + }, + "provider_stt_settings": { + "enable": { + "description": "啟用語音轉文字", + "hint": "STT 總開關" + }, + "provider_id": { + "description": "預設語音轉文字模型", + "hint": "使用者也可使用 /provider 指令單獨選擇會話的 STT 模型。" + } + }, + "provider_tts_settings": { + "enable": { + "description": "啟用文字轉語音", + "hint": "TTS 總開關" + }, + "provider_id": { + "description": "預設文字轉語音模型" + }, + "trigger_probability": { + "description": "TTS 觸發概率" + } + } + }, + "persona": { + "description": "人格", + "hint": "賦予 AstrBot 人格。", + "provider_settings": { + "default_personality": { + "description": "預設採用的人格" + } + } + }, + "knowledgebase": { + "description": "知識庫", + "hint": "AstrBot 的「外置大腦」。", + "kb_names": { + "description": "知識庫列表", + "hint": "支援多選" + }, + "kb_fusion_top_k": { + "description": "融合檢索結果數", + "hint": "多個知識庫檢索結果融合後的回傳結果數量" + }, + "kb_final_top_k": { + "description": "最終回傳結果數", + "hint": "從知識庫中檢索到的結果數量,越大可能獲得越多相關資訊,但也可能引入噪音。建議根據實際需求調整" + }, + "kb_agentic_mode": { + "description": "Agentic 知識庫檢索", + "hint": "啟用後,知識庫檢索將作為 LLM Tool,由模型自主決定何時呼叫知識庫進行查詢。需要模型支援函數呼叫能力。" + } + }, + "websearch": { + "description": "網頁搜尋", + "hint": "讓 AstrBot 能夠存取網際網路,獲悉時事。", + "provider_settings": { + "web_search": { + "description": "啟用網頁搜尋" + }, + "websearch_provider": { + "description": "網頁搜尋供應商" + }, + "websearch_tavily_key": { + "description": "Tavily API Key", + "hint": "可新增多個 Key 進行輪詢。" + }, + "websearch_bocha_key": { + "description": "BoCha API Key", + "hint": "可新增多個 Key 進行輪詢。" + }, + "websearch_baidu_app_builder_key": { + "description": "百度千帆智能雲 APP Builder API Key", + "hint": "參考:[https://console.bce.baidu.com/iam/#/iam/apikey/list](https://console.bce.baidu.com/iam/#/iam/apikey/list)" + }, + "web_search_link": { + "description": "顯示來源引用" + } + } + }, + "file_extract": { + "description": "文件解析能力", + "provider_settings": { + "file_extract": { + "enable": { + "description": "啟用文件解析能力" + }, + "provider": { + "description": "文件解析供應商" + }, + "moonshotai_api_key": { + "description": "Moonshot AI API Key" + } + } + } + }, + "agent_computer_use": { + "description": "使用電腦能力", + "hint": "讓 AstrBot 存取和使用你的電腦或者隔離的沙箱環境,以執行更複雜的任務。詳見: [沙箱模式](https://docs.astrbot.app/use/astrbot-agent-sandbox.html), [Skills](https://docs.astrbot.app/use/skills.html)。", + "provider_settings": { + "computer_use_runtime": { + "description": "運行環境", + "hint": "sandbox 代表在沙箱環境中運行,local 代表在本機環境中運行,none 代表不啟用。如果上傳了 skills,選擇 none 會導致其無法被 Agent 正常使用。" + }, + "computer_use_require_admin": { + "description": "需要 AstrBot 管理員權限", + "hint": "開啟後,需要 AstrBot 管理員權限才能呼叫使用電腦能力。在平台設定->管理員中可新增管理員。使用 /sid 指令查看管理員 ID。" + }, + "sandbox": { + "booter": { + "description": "沙箱環境驅動器" + }, + "shipyard_neo_endpoint": { + "description": "Shipyard Neo API Endpoint", + "hint": "Shipyard Neo(Bay) 服務的 API 位址,預設 http://127.0.0.1:8114。" + }, + "shipyard_neo_access_token": { + "description": "Shipyard Neo 存取權杖", + "hint": "Bay 的 API Key(sk-bay-...)。留空時自動從 credentials.json 發現。" + }, + "shipyard_neo_profile": { + "description": "Shipyard Neo Profile", + "hint": "Shipyard Neo 沙箱 profile,例如 python-default。" + }, + "shipyard_neo_ttl": { + "description": "Shipyard Neo Sandbox 存活時間(秒)", + "hint": "Shipyard Neo 沙箱的生存時間(秒)。" + }, + "shipyard_endpoint": { + "description": "Shipyard API Endpoint", + "hint": "Shipyard 服務的 API 存取位址。" + }, + "shipyard_access_token": { + "description": "Shipyard 存取權杖", + "hint": "用於存取 Shipyard 服務的存取權杖。" + }, + "shipyard_ttl": { + "description": "Shipyard Ship 存活時間(秒)", + "hint": "Shipyard 會話的生存時間(秒)。" + }, + "shipyard_max_sessions": { + "description": "Shipyard Ship 會話重複使用上限", + "hint": "決定了一個實例承載的最大會話數量。" + } + } + } + }, + "proactive_capability": { + "description": "主動型能力", + "hint": "讓 AstrBot 能夠在某一時刻自動喚醒,幫你完成任務。詳見: [主動型 Agent](https://docs.astrbot.app/use/proactive-agent.html)。", + "provider_settings": { + "proactive_capability": { + "add_cron_tools": { + "description": "啟用", + "hint": "啟用後,將會傳遞給 Agent 相關工具來實現主動型 Agent。你可以告訴 AstrBot 未來某個時間要做的事情,它將被定時觸發然後執行任務,然後將結果發送給你。" + } + } + } + }, + "truncate_and_compress": { + "hint": "AstrBot 如何管理工作記憶。詳見: [上下文管理策略](https://docs.astrbot.app/use/context-compress.html)。", + "description": "上下文管理策略", + "provider_settings": { + "max_context_length": { + "description": "最多攜帶對話輪數", + "hint": "超出這個數量時丟棄最舊的部分,一輪聊天記為 1 條,-1 為不限制" + }, + "dequeue_context_length": { + "description": "丟棄對話輪數", + "hint": "超出最多攜帶對話輪數時,一次丟棄的聊天輪數" + }, + "context_limit_reached_strategy": { + "description": "超出模型上下文視窗時的處理方式", + "labels":[ + "按對話輪數截斷", + "由 LLM 壓縮上下文" + ], + "hint": "當按對話輪數截斷時,會根據上面\"丟棄對話輪數\"的設定丟棄最舊的 N 輪對話。當由 LLM 壓縮上下文時,會使用指定的模型進行上下文壓縮。" + }, + "llm_compress_instruction": { + "description": "上下文壓縮提示詞", + "hint": "如果為空則使用預設提示詞。" + }, + "llm_compress_keep_recent": { + "description": "壓縮時保留最近對話輪數", + "hint": "始終保留的最近 N 輪對話。" + }, + "llm_compress_provider_id": { + "description": "用於上下文壓縮的模型供應商 ID", + "hint": "留空時將降級為\"按對話輪數截斷\"的策略。" + } + } + }, + "others": { + "description": "其他設定", + "provider_settings": { + "display_reasoning_text": { + "description": "顯示思考內容" + }, + "llm_safety_mode": { + "description": "健康模式", + "hint": "引導模型輸出健康、安全、積極的內容,避免有害或敏感話題。" + }, + "safety_mode_strategy": { + "description": "健康模式策略", + "hint": "選擇健康模式的實現方式。" + }, + "identifier": { + "description": "使用者識別", + "hint": "啟用後,會在提示詞前包含使用者 ID 資訊。" + }, + "group_name_display": { + "description": "顯示群名稱", + "hint": "啟用後,在支援的平台(OneBot v11)上會在提示詞前包含群名稱資訊。" + }, + "datetime_system_prompt": { + "description": "現實世界時間感知", + "hint": "啟用後,會在系統提示詞中附帶目前時間資訊。" + }, + "show_tool_use_status": { + "description": "輸出函數呼叫狀態" + }, + "show_tool_call_result": { + "description": "輸出函數呼叫回傳結果", + "hint": "僅在啟用「輸出函數呼叫狀態」時生效,且最多展示 70 個字元。" + }, + "sanitize_context_by_modalities": { + "description": "按模型能力清理歷史上下文", + "hint": "開啟後,在每次請求 LLM 前會按目前模型供應商中所選擇的模型能力刪除對話中不支援的圖片/工具呼叫結構(會改變模型看到的歷史)" + }, + "max_quoted_fallback_images": { + "description": "轉發訊息中圖片取得上限", + "hint": "轉發訊息解析到的圖片最多注入數量,超出部分會截斷。" + }, + "quoted_message_parser": { + "max_component_chain_depth": { + "description": "轉發訊息富文本解析深度", + "hint": "解析轉發訊息中的富文本組件鏈時允許的最大遞迴深度。" + }, + "max_forward_node_depth": { + "description": "轉發訊息嵌套解析深度", + "hint": "解析嵌套轉發節點時允許的最大遞迴深度。" + }, + "max_forward_fetch": { + "description": "轉發訊息遞迴拉取上限", + "hint": "遞迴呼叫 get_forward_msg 拉取轉發內容的最大次數。" + }, + "warn_on_action_failure": { + "description": "轉發訊息解析失敗告警", + "hint": "開啟後,get_msg/get_forward_msg 全部嘗試失敗時輸出 warning 日誌。" + } + }, + "max_agent_step": { + "description": "工具呼叫輪數上限" + }, + "tool_call_timeout": { + "description": "工具呼叫逾時時間(秒)" + }, + "tool_schema_mode": { + "description": "工具呼叫模式", + "hint": "skills-like 先下發工具名稱與描述,再下發參數;full 一次性下發完整參數。", + "labels":[ + "Skills-like(兩階段)", + "Full(完整參數)" + ] + }, + "streaming_response": { + "description": "流式輸出" + }, + "unsupported_streaming_strategy": { + "description": "不支援流式回覆的平台", + "hint": "選擇在不支援流式回覆的平台上的處理方式。即時分段回覆會在系統接收流式回應偵測到諸如標點符號等分段點時,立即發送目前已接收的內容", + "labels":[ + "即時分段回覆", + "關閉流式回覆" + ] + }, + "wake_prefix": { + "description": "LLM 聊天額外喚醒前綴", + "hint": "如果喚醒前綴為 /,額外聊天喚醒前綴為 chat,則需要 /chat 才會觸發 LLM 請求" + }, + "prompt_prefix": { + "description": "使用者提示詞", + "hint": "可使用 {{prompt}} 作為使用者輸入的佔位符。如果不輸入佔位符則代表新增在使用者輸入的前面。" + }, + "image_compress_enabled": { + "description": "啟用圖片壓縮", + "hint": "啟用後,發送給多模態模型前會先壓縮本機大圖片。" + }, + "image_compress_options": { + "description": "圖片壓縮設定", + "hint": "用於控制圖片壓縮的尺寸、品質和觸發閾值。", + "max_size": { + "description": "最大邊長", + "hint": "壓縮後圖片的最長邊,單位為像素。超過該尺寸時會按比例縮放。" + }, + "quality": { + "description": "JPEG 品質", + "hint": "JPEG 輸出品質,範圍為 1-100。值越高,畫質越好,檔案也越大。" + } + }, + "reachability_check": { + "description": "供應商可達性檢測", + "hint": "/provider 命令列出模型時併發檢測連通性。開啟後會主動呼叫模型測試連通性,可能產生額外 token 消耗。" + } + }, + "provider_tts_settings": { + "dual_output": { + "description": "開啟 TTS 時同時輸出語音和文字內容" + } + } + } + }, + "platform_group": { + "name": "平台設定", + "platform": { + "description": "訊息平台適配器", + "active_send_mode": { + "description": "是否換用主動發送介面" + }, + "appid": { + "description": "appid", + "hint": "必填項。QQ 官方機器人平台的 appid。如何取得請參考文件。" + }, + "callback_server_host": { + "description": "回呼伺服器主機", + "hint": "回呼伺服器主機。留空則不啟用回呼伺服器。" + }, + "card_template_id": { + "description": "卡片範本 ID", + "hint": "選填。釘釘互動卡片範本 ID。啟用後將使用互動卡片進行流式回覆。" + }, + "discord_activity_name": { + "description": "Discord 活動名稱", + "hint": "選填的 Discord 活動名稱。留空則不設定活動。" + }, + "discord_command_register": { + "description": "註冊 Discord 指令", + "hint": "啟用後,自動將擴充套件指令註冊為 Discord 斜線指令" + }, + "discord_proxy": { + "description": "Discord 代理位址", + "hint": "選填的代理位址:http://ip:port" + }, + "discord_token": { + "description": "Discord Bot Token", + "hint": "在此處填入你的 Discord Bot Token" + }, + "enable": { + "description": "啟用", + "hint": "是否啟用該適配器。未啟用的適配器對應的訊息平台將不會接收到訊息。" + }, + "enable_group_c2c": { + "description": "啟用訊息列表私聊", + "hint": "啟用後,機器人可以接收到 QQ 訊息列表中的私聊訊息。你可能需要在 QQ 機器人平台上透過掃描二維碼的方式新增機器人為你的好友。詳見文件。" + }, + "enable_guild_direct_message": { + "description": "啟用頻道私聊", + "hint": "啟用後,機器人可以接收到頻道的私聊訊息。" + }, + "id": { + "description": "機器人名稱", + "hint": "機器人名稱" + }, + "is_sandbox": { + "description": "沙箱模式" + }, + "kf_name": { + "description": "微信客服帳號名", + "hint": "如果填寫此項,即代表你將使用企業微信客服,而不是企業微信應用。可在 https://kf.weixin.qq.com/kf/frame#/accounts 取得。" + }, + "lark_bot_name": { + "description": "飛書機器人的名字", + "hint": "請務必填寫正確,否則 @ 機器人將無法喚醒,只能透過前綴喚醒。" + }, + "lark_connection_mode": { + "description": "訂閱方式", + "labels":[ + "長連線模式", + "推播至伺服器模式" + ] + }, + "lark_encrypt_key": { + "description": "Encrypt Key", + "hint": "用於解密飛書回呼資料的加密密鑰" + }, + "lark_verification_token": { + "description": "Verification Token", + "hint": "用於驗證飛書回呼請求的權杖" + }, + "misskey_allow_insecure_downloads": { + "description": "允許不安全下載(停用 SSL 驗證)", + "hint": "當遠端伺服器存在憑證問題導致無法正常下載時,自動停用 SSL 驗證作為回退方案。適用於某些圖床的憑證設定問題。啟用有安全風險,僅在必要時使用。" + }, + "misskey_default_visibility": { + "description": "預設貼文可見性", + "hint": "機器人發文時的預設可見性設定。public:公開,home:主頁時間線,followers:僅關注者。" + }, + "misskey_download_chunk_size": { + "description": "流式下載分塊大小(位元組)", + "hint": "流式下載和計算 MD5 時使用的每次讀取位元組數,過小會增加開銷,過大會佔用記憶體。" + }, + "misskey_download_timeout": { + "description": "遠端下載逾時時間(秒)", + "hint": "下載遠端檔案時的逾時時間(秒),用於非同步上傳回退到本機上傳的場景。" + }, + "misskey_enable_chat": { + "description": "啟用聊天訊息回應", + "hint": "啟用後,機器人將會監聽和回應私信聊天訊息" + }, + "misskey_enable_file_upload": { + "description": "啟用檔案上傳到 Misskey", + "hint": "啟用後,適配器會嘗試將訊息鏈中的檔案上傳到 Misskey。URL 檔案會先嘗試伺服器端上傳,非同步上傳失敗時會回退到下載後本機上傳。" + }, + "misskey_instance_url": { + "description": "Misskey 實例 URL", + "hint": "例如 https://misskey.example,填寫 Bot 帳號所在的 Misskey 實例位址" + }, + "misskey_local_only": { + "description": "僅限本站(不參與聯合)", + "hint": "啟用後,機器人發出的貼文將僅在本實例可見,不會聯合到其他實例" + }, + "misskey_max_download_bytes": { + "description": "最大允許下載位元組數(超出則中止)", + "hint": "如果希望限制下載檔案的最大大小以防止 OOM,請填寫最大位元組數;留空或 null 表示不限制。" + }, + "misskey_token": { + "description": "Misskey Access Token", + "hint": "連接服務設定生成的 API 鑑權存取權杖(Access token)" + }, + "misskey_upload_concurrency": { + "description": "併發上傳限制", + "hint": "同時進行的檔案上傳任務上限(整數,預設 3)。" + }, + "misskey_upload_folder": { + "description": "上傳到網盤的目標資料夾 ID", + "hint": "選填:填寫 Misskey 網盤中目標資料夾的 ID,上傳的檔案將放置到該資料夾內。留空則使用帳號網盤根目錄。" + }, + "port": { + "description": "回呼伺服器連接埠", + "hint": "回呼伺服器連接埠。留空則不啟用回呼伺服器。" + }, + "satori_api_base_url": { + "description": "Satori API 終端點", + "hint": "Satori API 的基礎位址。" + }, + "satori_auto_reconnect": { + "description": "啟用自動重連", + "hint": "斷線時是否自動重新連線 WebSocket。" + }, + "satori_endpoint": { + "description": "Satori WebSocket 終端點", + "hint": "Satori 事件的 WebSocket 端點。" + }, + "satori_heartbeat_interval": { + "description": "Satori 心跳間隔", + "hint": "發送心跳訊息的間隔(秒)。" + }, + "satori_reconnect_delay": { + "description": "Satori 重連延遲", + "hint": "嘗試重新連線前的延遲時間(秒)。" + }, + "satori_token": { + "description": "Satori 權杖", + "hint": "用於 Satori API 身份驗證的權杖。" + }, + "secret": { + "description": "secret", + "hint": "必填項。" + }, + "slack_connection_mode": { + "description": "Slack Connection Mode", + "hint": "The connection mode for Slack. `webhook` uses a webhook server, `socket` uses Slack's Socket Mode." + }, + "slack_webhook_host": { + "description": "Slack Webhook Host", + "hint": "Only valid when Slack connection mode is `webhook`." + }, + "slack_webhook_path": { + "description": "Slack Webhook Path", + "hint": "Only valid when Slack connection mode is `webhook`." + }, + "slack_webhook_port": { + "description": "Slack Webhook Port", + "hint": "Only valid when Slack connection mode is `webhook`." + }, + "telegram_command_auto_refresh": { + "description": "Telegram 命令自動重新整理", + "hint": "啟用後,AstrBot 將會在運行時自動重新整理 Telegram 命令。(單獨設定此項無效)" + }, + "telegram_command_register": { + "description": "Telegram 命令註冊", + "hint": "啟用後,AstrBot 將會自動註冊 Telegram 命令。" + }, + "telegram_command_register_interval": { + "description": "Telegram 命令自動重新整理間隔", + "hint": "Telegram 命令自動重新整理間隔,單位為秒。" + }, + "telegram_polling_restart_delay": { + "description": "Telegram 輪詢重新啟動延遲", + "hint": "當輪詢意外結束嘗試自動重新啟動時的延遲時間,單位為秒。預設為 5s。" + }, + "telegram_token": { + "description": "Bot Token", + "hint": "如果你的網路環境為中國大陸,請在 `其他設定` 處設定代理或更改 api_base。" + }, + "type": { + "description": "適配器類型" + }, + "unified_webhook_mode": { + "description": "統一 Webhook 模式", + "hint": "Webhook 模式下使用 AstrBot 統一 Webhook 入口,無需單獨開啟連接埠。回呼位址為 /api/platform/webhook/{webhook_uuid}。" + }, + "webhook_uuid": { + "description": "Webhook UUID", + "hint": "統一 Webhook 模式下的唯一識別碼,建立平台時自動生成。" + }, + "wecom_ai_bot_name": { + "description": "企業微信智能機器人的名字", + "hint": "請務必填寫正確,否則無法使用一些指令。" + }, + "wecom_ai_bot_connection_mode": { + "description": "企業微信智能機器人連線模式", + "hint": "Webhook 回呼模式需要設定 Token/EncodingAESKey;長連線模式需要設定 BotID/Secret。" + }, + "wecomaibot_friend_message_welcome_text": { + "description": "企業微信智能機器人私聊歡迎語", + "hint": "選填。當使用者當天進入智能機器人單聊會話,回覆歡迎語,如「💭 思考中...」。留空則不回覆。" + }, + "wecomaibot_init_respond_text": { + "description": "企業微信智能機器人初始回應文字", + "hint": "選填。當機器人收到訊息時,首先回覆的文字內容。留空則不設定。" + }, + "wecomaibot_token": { + "description": "企業微信智能機器人 Token", + "hint": "用於 Webhook 回呼模式的身份驗證。" + }, + "wecomaibot_encoding_aes_key": { + "description": "企業微信智能機器人 EncodingAESKey", + "hint": "用於 Webhook 回呼模式的訊息加密解密。" + }, + "wecomaibot_ws_bot_id": { + "description": "長連線 BotID", + "hint": "企業微信智能機器人長連線模式憑證 BotID。" + }, + "wecomaibot_ws_secret": { + "description": "長連線 Secret", + "hint": "企業微信智能機器人長連線模式憑證 Secret。" + }, + "wecomaibot_ws_url": { + "description": "長連線 WebSocket 位址", + "hint": "預設值為 wss://openws.work.weixin.qq.com,一般無需修改。" + }, + "wecomaibot_heartbeat_interval": { + "description": "長連線心跳間隔", + "hint": "長連線模式心跳間隔(秒),建議 30 秒。" + }, + "wpp_active_message_poll": { + "description": "是否啟用主動訊息輪詢", + "hint": "只有當你發現微信訊息沒有按時同步到 AstrBot 時,才需要啟用這個功能,預設不啟用。" + }, + "wpp_active_message_poll_interval": { + "description": "主動訊息輪詢間隔", + "hint": "主動訊息輪詢間隔,單位為秒,預設 3 秒,最大不要超過 60 秒,否則可能被認為是舊訊息。" + }, + "ws_reverse_host": { + "description": "反向 Websocket 主機", + "hint": "AstrBot 將作為伺服器端。" + }, + "ws_reverse_port": { + "description": "反向 Websocket 連接埠" + }, + "ws_reverse_token": { + "description": "反向 Websocket Token", + "hint": "反向 Websocket Token。未設定則不啟用 Token 驗證。" + }, + "msg_push_webhook_url": { + "description": "企業微信訊息推播 Webhook URL", + "hint": "選填。用於主動訊息推播,請在企微群->訊息推播得到 URL。建議設定此項以帶來更好的訊息發送體驗。" + }, + "only_use_webhook_url_to_send": { + "description": "僅使用 Webhook 發送訊息", + "hint": "選填。啟用後,企業微信智能機器人的所有回覆都改為透過訊息推播 Webhook 發送。訊息推播 Webhook 支援更多的訊息類型(如圖片、檔案等)。如果不需要打字機效果,強烈建議使用此選項。" + }, + "weixin_oc_base_url": { + "description": "Base URL 位址", + "hint": "預設值: https://ilinkai.weixin.qq.com" + }, + "weixin_oc_bot_type": { + "description": "掃碼參數 bot_type", + "hint": "預設值: 3" + }, + "weixin_oc_qr_poll_interval": { + "description": "二維碼狀態輪詢間隔(秒)", + "hint": "每隔多少秒輪詢一次二維碼狀態。" + }, + "weixin_oc_long_poll_timeout_ms": { + "description": "getUpdates 長輪詢逾時時間(毫秒)", + "hint": "會話訊息拉取介面逾時參數。" + }, + "weixin_oc_api_timeout_ms": { + "description": "HTTP 請求逾時(毫秒)", + "hint": "通用 API 請求逾時參數。" + }, + "weixin_oc_token": { + "description": "登入後 token(可留空)", + "hint": "掃碼登入成功後會自動寫入;進階場景可手動填寫。" + }, + "kook_bot_token": { + "description": "機器人 Token", + "type": "string", + "hint": "必填項。從 KOOK 開發者平台取得的機器人 Token" + }, + "kook_reconnect_delay": { + "description": "重連延遲", + "type": "int", + "hint": "重連延遲時間(秒),使用指數退避策略" + }, + "kook_max_reconnect_delay": { + "description": "最大重連延遲", + "type": "int", + "hint": "重連延遲的最大值(秒)" + }, + "kook_max_retry_delay": { + "description": "最大重試延遲", + "type": "int", + "hint": "重試的最大延遲時間(秒)" + }, + "kook_heartbeat_interval": { + "description": "心跳間隔", + "type": "int", + "hint": "心跳檢測間隔時間(秒)" + }, + "kook_heartbeat_timeout": { + "description": "心跳逾時時間", + "type": "int", + "hint": "心跳檢測逾時時間(秒)" + }, + "kook_max_heartbeat_failures": { + "description": "最大心跳失敗次數", + "type": "int", + "hint": "允許的最大心跳失敗次數,超過後斷開連線" + }, + "kook_max_consecutive_failures": { + "description": "最大連續失敗次數", + "type": "int", + "hint": "允許的最大連續失敗次數,超過後停止重試" + } + }, + "general": { + "description": "基本", + "admins_id": { + "description": "管理員 ID" + }, + "platform_settings": { + "unique_session": { + "description": "隔離會話", + "hint": "啟用後,群成員的上下文獨立。" + }, + "friend_message_needs_wake_prefix": { + "description": "私聊訊息需要喚醒詞" + }, + "reply_prefix": { + "description": "回覆時的文字前綴" + }, + "reply_with_mention": { + "description": "回覆時 @ 發送人" + }, + "reply_with_quote": { + "description": "回覆時引用發送人訊息" + }, + "forward_threshold": { + "description": "轉發訊息的字數閾值" + }, + "empty_mention_waiting": { + "description": "只 @ 機器人是否觸發等待" + } + }, + "wake_prefix": { + "description": "喚醒詞" + }, + "disable_builtin_commands": { + "description": "停用自帶指令", + "hint": "停用所有 AstrBot 自帶指令,如 help, provider, model 等" + } + }, + "whitelist": { + "description": "白名單", + "platform_settings": { + "enable_id_white_list": { + "description": "啟用白名單", + "hint": "啟用後,只有在白名單內的會話會被回應,白名單列表為空時代表不停用白名單(所有 ID 都會被放行)。" + }, + "id_whitelist": { + "description": "白名單 ID 列表", + "hint": "使用 /sid 取得 ID。列表為空時表示該白名單不啟用(即所有 ID 都在白名單內)。" + }, + "id_whitelist_log": { + "description": "輸出日誌", + "hint": "啟用後,當一條訊息沒通過白名單時,會輸出 INFO 級別的日誌。" + }, + "wl_ignore_admin_on_group": { + "description": "管理員群組訊息無視 ID 白名單" + }, + "wl_ignore_admin_on_friend": { + "description": "管理員私聊訊息無視 ID 白名單" + } + } + }, + "rate_limit": { + "description": "速率限制", + "platform_settings": { + "rate_limit": { + "time": { + "description": "訊息速率限制時間(秒)" + }, + "count": { + "description": "訊息速率限制計數" + }, + "strategy": { + "description": "速率限制策略" + } + } + } + }, + "content_safety": { + "description": "內容安全", + "content_safety": { + "also_use_in_response": { + "description": "同時檢查模型的回應內容" + }, + "baidu_aip": { + "enable": { + "description": "使用百度內容安全審核", + "hint": "您需要手動安裝 baidu-aip 庫。" + }, + "app_id": { + "description": "App ID" + }, + "api_key": { + "description": "API Key" + }, + "secret_key": { + "description": "Secret Key" + } + }, + "internal_keywords": { + "enable": { + "description": "關鍵詞檢查" + }, + "extra_keywords": { + "description": "額外關鍵詞", + "hint": "額外的屏蔽關鍵詞列表,支援正規表示式。" + } + } + } + }, + "t2i": { + "description": "文字轉圖像", + "t2i": { + "description": "文字轉圖像輸出" + }, + "t2i_word_threshold": { + "description": "文字轉圖像字數閾值" + } + }, + "others": { + "description": "其他設定", + "platform_settings": { + "ignore_bot_self_message": { + "description": "是否忽略機器人自身的訊息" + }, + "ignore_at_all": { + "description": "是否忽略 @ 全體成員事件" + }, + "no_permission_reply": { + "description": "使用者權限不足時是否回覆" + } + }, + "platform_specific": { + "lark": { + "pre_ack_emoji": { + "enable": { + "description": "[飛書] 啟用預回應表情" + }, + "emojis": { + "description": "表情列表(飛書表情枚舉名)", + "hint": "表情枚舉名參考:[https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce](https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce)" + } + } + }, + "telegram": { + "pre_ack_emoji": { + "enable": { + "description": "[Telegram] 啟用預回應表情" + }, + "emojis": { + "description": "表情列表(Unicode)", + "hint": "Telegram 僅支援固定反應集合,參考:[https://gist.github.com/Soulter/3f22c8e5f9c7e152e967e8bc28c97fc9](https://gist.github.com/Soulter/3f22c8e5f9c7e152e967e8bc28c97fc9)" + } + } + }, + "discord": { + "pre_ack_emoji": { + "enable": { + "description": "[Discord] 啟用預回應表情" + }, + "emojis": { + "description": "表情列表(Unicode 或自訂表情名)", + "hint": "填寫 Unicode 表情符號,例如:👍、🤔、⏳" + } + } + } + } + } + }, + "plugin_group": { + "name": "擴充套件設定", + "plugin": { + "description": "擴充套件", + "plugin_set": { + "description": "可用擴充套件", + "hint": "預設啟用全部未被停用的擴充套件。若擴充套件在擴充套件頁面被停用,則此處的選擇不會生效。" + } + } + }, + "ext_group": { + "name": "擴充功能", + "segmented_reply": { + "description": "分段回覆", + "platform_settings": { + "segmented_reply": { + "enable": { + "description": "啟用分段回覆" + }, + "only_llm_result": { + "description": "僅對 LLM 結果分段" + }, + "interval_method": { + "description": "間隔方法", + "hint": "random 為隨機時間,log 為根據訊息長度計算,$y=log_(x)$,x為字數,y的單位為秒。" + }, + "interval": { + "description": "隨機間隔時間", + "hint": "格式:最小值,最大值(如:1.5,3.5)" + }, + "log_base": { + "description": "對數底數", + "hint": "對數間隔的底數,預設為 2.6。取值範圍為 1.0-10.0。" + }, + "words_count_threshold": { + "description": "分段回覆字數閾值", + "hint": "分段回覆的字數上限。只有字數小於此值的訊息才會被分段,超過此值的長訊息將直接發送(不分段),預設為 150。" + }, + "split_mode": { + "description": "分段模式", + "hint": "用於分隔一段訊息。預設情況下會根據句號、問號等標點符號分隔。如填寫 `[。?!]` 將移除所有的句號、問號、驚嘆號。re.findall(r'', text)", + "labels": [ + "正規表示式", + "分段詞列表" + ] + }, + "regex": { + "description": "分段正規表示式", + "hint": "用於按正則規則識別分段點。建議使用能配對分隔符的表達式。" + }, + "split_words": { + "description": "分段詞列表", + "hint": "檢測到列表中的任意詞時進行分段" + }, + "content_cleanup_rule": { + "description": "內容過濾正規表示式", + "hint": "移除分段後內容中的指定內容。如填寫 `[。?!]` 將移除所有的句號、問號、驚嘆號。" + } + } + } + }, + "ltm": { + "description": "群聊上下文感知(原聊天記憶增強)", + "provider_ltm_settings": { + "group_icl_enable": { + "description": "啟用群聊上下文感知" + }, + "group_message_max_cnt": { + "description": "最大訊息數量" + }, + "image_caption": { + "description": "自動理解圖片", + "hint": "需要設定群聊圖片轉述模型。" + }, + "image_caption_provider_id": { + "description": "群聊圖片轉述模型", + "hint": "用於群聊上下文感知的圖片理解,與預設圖片轉述模型分開設定。" + }, + "active_reply": { + "enable": { + "description": "主動回覆" + }, + "method": { + "description": "主動回覆方法" + }, + "possibility_reply": { + "description": "回覆概率", + "hint": "0.0-1.0 之間的數值" + }, + "whitelist": { + "description": "主動回覆白名單", + "hint": "為空時不停用白名單過濾。使用 /sid 取得 ID。" + } + } + } + } + }, + "system_group": { + "name": "系統設定", + "system": { + "description": "系統設定", + "t2i_strategy": { + "description": "文字轉圖像策略", + "hint": "文字轉圖像策略。`remote` 為使用遠端基於 HTML 的渲染服務,`local` 為使用 PIL 本機渲染。當使用 local 時,將 ttf 字體命名為 'font.ttf' 放在 data/ 目錄下可自訂字體。" + }, + "t2i_endpoint": { + "description": "文字轉圖像服務 API 位址", + "hint": "為空時使用 AstrBot API 服務" + }, + "t2i_template": { + "description": "文字轉圖像自訂範本", + "hint": "啟用後可自訂 HTML 範本用於文轉圖渲染。" + }, + "t2i_active_template": { + "description": "目前套用的文轉圖渲染範本", + "hint": "此處的值由文轉圖範本管理頁面進行維護。" + }, + "log_level": { + "description": "控制台日誌級別", + "hint": "控制台輸出日誌的級別。" + }, + "log_file_enable": { + "description": "啟用檔案日誌", + "hint": "在控制台輸出的同時,將日誌寫入檔案。" + }, + "log_file_path": { + "description": "日誌檔案路徑", + "hint": "相對路徑以 data 目錄為基準,例如 logs/astrbot.log;支援絕對路徑。" + }, + "log_file_max_mb": { + "description": "日誌檔案大小上限 (MB)", + "hint": "超過大小後自動輪轉,預設 20MB。" + }, + "temp_dir_max_size": { + "description": "暫存目錄大小上限 (MB)", + "hint": "用於限制 data/temp 目錄總大小,單位為 MB。系統每 10 分鐘檢查一次,超限時按檔案修改時間從舊到新刪除,釋放約 30% 目前體積。" + }, + "trace_log_enable": { + "description": "啟用 Trace 檔案日誌", + "hint": "將 Trace 事件寫入獨立檔案(不影響控制台輸出)。" + }, + "trace_log_path": { + "description": "Trace 日誌檔案路徑", + "hint": "相對路徑以 data 目錄為基準,例如 logs/astrbot.trace.log;支援絕對路徑。" + }, + "trace_log_max_mb": { + "description": "Trace 日誌大小上限 (MB)", + "hint": "超過大小後自動輪轉,預設 20MB。" + }, + "pip_install_arg": { + "description": "pip 安裝額外參數", + "hint": "安裝擴充套件依賴時,會使用 Python 的 pip 工具。這裡可以填寫額外的參數,如 `--break-system-package` 等。" + }, + "pypi_index_url": { + "description": "PyPI 軟體庫位址", + "hint": "安裝 Python 依賴時請求的 PyPI 軟體庫位址。預設為 [https://mirrors.aliyun.com/pypi/simple/](https://mirrors.aliyun.com/pypi/simple/)" + }, + "callback_api_base": { + "description": "對外可達的回呼介面位址", + "hint": "外部服務可能會透過 AstrBot 生成的回呼連結(如檔案下載連結)存取 AstrBot 後端。由於 AstrBot 無法自動判斷部署環境中對外可達的主機位址(host),因此需要透過此設定項顯式指定外部服務如何存取 AstrBot 的位址。如[http://localhost:6185](http://localhost:6185),[https://example.com](https://example.com) 等。" + }, + "dashboard": { + "ssl": { + "enable": { + "description": "啟用 WebUI HTTPS", + "hint": "啟用後,WebUI 將直接使用 HTTPS 提供服務。" + }, + "cert_file": { + "description": "SSL 憑證檔案路徑", + "hint": "憑證檔案路徑(PEM)。支援絕對路徑和相對路徑(相對於目前工作目錄)。" + }, + "key_file": { + "description": "SSL 私鑰檔案路徑", + "hint": "私鑰檔案路徑(PEM)。支援絕對路徑和相對路徑(相對於目前工作目錄)。" + }, + "ca_certs": { + "description": "SSL CA 憑證檔案路徑", + "hint": "選填。用於指定 CA 憑證檔案路徑。" + } + } + }, + "timezone": { + "description": "時區", + "hint": "時區設定。請填寫 IANA 時區名稱,如 Asia/Taipei,為空時使用系統預設時區。所有時區請查看:[https://data.iana.org/time-zones/tzdb-2021a/zone1970.tab](https://data.iana.org/time-zones/tzdb-2021a/zone1970.tab)" + }, + "http_proxy": { + "description": "HTTP 代理", + "hint": "啟用後,會以新增環境變數的方式設定代理。格式為 `http://ip:port`" + }, + "no_proxy": { + "description": "直連位址列表" + } + } + }, + "provider_group": { + "provider": { + "genie_onnx_model_dir": { + "description": "ONNX Model Directory", + "hint": "The directory path containing the ONNX model files" + }, + "genie_language": { + "description": "Language" + }, + "xai_native_search": { + "description": "啟用原生搜尋功能", + "hint": "啟用後,將透過 xAI 的 Chat Completions 原生 Live Search 進行聯網檢索(按需計費)。僅對 xAI 供應商生效。" + }, + "rerank_api_base": { + "description": "重排序模型 API Base URL", + "hint": "AstrBot 會在請求時在末尾加上 /v1/rerank。" + }, + "rerank_api_key": { + "description": "API Key", + "hint": "如果不需要 API Key,請留空。" + }, + "rerank_model": { + "description": "重排序模型名稱" + }, + "return_documents": { + "description": "是否在排序結果中回傳文件原文", + "hint": "預設值false,以減少網路傳輸開銷。" + }, + "instruct": { + "description": "自訂排序任務類型說明", + "hint": "僅在使用 qwen3-rerank 模型時生效。建議使用英文撰寫。" + }, + "launch_model_if_not_running": { + "description": "模型未運行時自動啟動", + "hint": "如果模型目前未在 Xinference 服務中運行,是否嘗試自動啟動它。在生產環境中建議關閉。" + }, + "modalities": { + "description": "模型能力", + "hint": "模型支援的模態。如所填寫的模型不支援圖像,請取消勾選圖像。", + "labels":[ + "文字", + "圖像", + "工具使用" + ] + }, + "custom_headers": { + "description": "自訂新增請求頭", + "hint": "此處新增的鍵值對將被合併到 OpenAI SDK 的 default_headers 中,用於自訂 HTTP 請求頭。值必須為字串。" + }, + "ollama_disable_thinking": { + "description": "關閉思考模式", + "hint": "關閉 Ollama 思考模式。" + }, + "custom_extra_body": { + "description": "自訂請求體參數", + "hint": "用於在請求時新增額外的參數,如 temperature、top_p、max_tokens 等。", + "template_schema": { + "temperature": { + "description": "溫度參數", + "hint": "控制輸出的隨機性,範圍通常為 0-2。值越高越隨機。", + "name": "Temperature" + }, + "top_p": { + "description": "Top-p 採樣", + "hint": "核採樣參數,範圍通常為 0-1。控制模型考慮的概率質量。", + "name": "Top-p" + }, + "max_tokens": { + "description": "最大權杖數", + "hint": "生成的最大權杖數。", + "name": "Max Tokens" + } + } + }, + "gpt_weights_path": { + "description": "GPT模型檔案路徑", + "hint": "即「.ckpt」後綴的檔案,請使用絕對路徑,路徑兩端不要帶雙引號,不填則預設用GPT_SoVITS內建的SoVITS模型(建議直接在GPT_SoVITS中改預設模型)" + }, + "sovits_weights_path": { + "description": "SoVITS模型檔案路徑", + "hint": "即「.pth」後綴的檔案,請使用絕對路徑,路徑兩端不要帶雙引號,不填則預設用GPT_SoVITS內建的SoVITS模型(建議直接在GPT_SoVITS中改預設模型)" + }, + "gsv_default_parms": { + "description": "GPT_SoVITS預設參數", + "hint": "參考音訊檔案路徑、參考音訊文字必填,其他參數根據個人愛好自行填寫", + "gsv_ref_audio_path": { + "description": "參考音訊檔案路徑", + "hint": "必填!請使用絕對路徑!路徑兩端不要帶雙引號!" + }, + "gsv_prompt_text": { + "description": "參考音訊文字", + "hint": "必填!請填寫參考音訊講述的文字" + }, + "gsv_prompt_lang": { + "description": "參考音訊文字語言", + "hint": "請填寫參考音訊講述的文字的語言,預設為中文" + }, + "gsv_aux_ref_audio_paths": { + "description": "輔助參考音訊檔案路徑", + "hint": "輔助參考音訊檔案,可不填" + }, + "gsv_text_lang": { + "description": "文字語言", + "hint": "預設為中文" + }, + "gsv_top_k": { + "description": "生成語音的多樣性", + "hint": "" + }, + "gsv_top_p": { + "description": "核採樣的閾值", + "hint": "" + }, + "gsv_temperature": { + "description": "生成語音的隨機性", + "hint": "" + }, + "gsv_text_split_method": { + "description": "切分文字的方法", + "hint": "可選值: `cut0`:不切分 `cut1`:四句一切 `cut2`:50字一切 `cut3`:按中文句號切 `cut4`:按英文句號切 `cut5`:按標點符號切" + }, + "gsv_batch_size": { + "description": "批次處理大小", + "hint": "" + }, + "gsv_batch_threshold": { + "description": "批次處理閾值", + "hint": "" + }, + "gsv_split_bucket": { + "description": "將文字分割成桶以便平行處理", + "hint": "" + }, + "gsv_speed_factor": { + "description": "語音播放速度", + "hint": "1為原始語速" + }, + "gsv_fragment_interval": { + "description": "語音片段之間的間隔時間", + "hint": "" + }, + "gsv_streaming_mode": { + "description": "啟用流模式", + "hint": "" + }, + "gsv_seed": { + "description": "隨機種子", + "hint": "用於結果的可重複性" + }, + "gsv_parallel_infer": { + "description": "平行執行推理", + "hint": "" + }, + "gsv_repetition_penalty": { + "description": "重複懲罰因子", + "hint": "" + }, + "gsv_media_type": { + "description": "輸出媒體的類型", + "hint": "建議用wav" + } + }, + "embedding_dimensions": { + "description": "嵌入維度", + "hint": "嵌入向量的維度。根據模型不同,可能需要調整,請參考具體模型的檔案。此設定項請務必填寫正確,否則將導致向量資料庫無法正常工作。" + }, + "embedding_model": { + "description": "嵌入模型", + "hint": "嵌入模型名稱。" + }, + "embedding_api_key": { + "description": "API Key" + }, + "embedding_api_base": { + "description": "API Base URL" + }, + "openai_embedding": { + "hint": "如果測試不通過,可以嘗試新增 /v1 在末尾以相容部分 OpenAI API 版本。" + }, + "gemini_embedding": { + "hint": "Gemini Embedding 無需手動新增 /v1beta。" + }, + "volcengine_cluster": { + "description": "火山引擎叢集", + "hint": "若使用語音復刻大模型,可選volcano_icl或volcano_icl_concurr,預設使用volcano_tts" + }, + "volcengine_voice_type": { + "description": "火山引擎音色", + "hint": "輸入聲音id(Voice_type)" + }, + "volcengine_speed_ratio": { + "description": "語速設定", + "hint": "語速設定,範圍為 0.2 到 3.0,預設值為 1.0" + }, + "volcengine_volume_ratio": { + "description": "音量設定", + "hint": "音量設定,範圍為 0.0 到 2.0,預設值為 1.0" + }, + "azure_tts_voice": { + "description": "音色設定", + "hint": "API 音色" + }, + "azure_tts_style": { + "description": "風格設定", + "hint": "聲音特定的講話風格。 可以表達快樂、同情和平靜等情緒。" + }, + "azure_tts_role": { + "description": "模仿設定(選填)", + "hint": "講話角色扮演。 聲音可以模仿不同的年齡和性別,但聲音名稱不會更改。 例如,男性語音可以提高音調和改變語調來模擬女性語音,但語音名稱不會更改。 如果角色缺失或不受聲音的支援,則會忽略此屬性。" + }, + "azure_tts_rate": { + "description": "語速設定", + "hint": "指示文字的講出速率。可在字詞或句子層面應用語速。 速率變化應為原始音訊的 0.5 到 2 倍。" + }, + "azure_tts_volume": { + "description": "語音音量設定", + "hint": "指示語音的音量級別。 可在句子層面應用音量的變化。以從 0.0 到 100.0(從最安靜到最大聲,例如 75)的數字表示。 預設值為 100.0。" + }, + "azure_tts_region": { + "description": "API 地區", + "hint": "Azure_TTS 處理資料所在區域,具體參考 https://learn.microsoft.com/zh-cn/azure/ai-services/speech-service/regions" + }, + "azure_tts_subscription_key": { + "description": "服務訂閱密鑰", + "hint": "Azure_TTS 服務的訂閱密鑰(注意不是權杖)" + }, + "dashscope_tts_voice": { + "description": "音色" + }, + "gm_resp_image_modal": { + "description": "啟用圖片模態", + "hint": "啟用後,將支援回傳圖片內容。需要模型支援,否則會報錯。具體支援模型請查看 Google Gemini 官方網站。溫馨提示,如果您需要生成圖片,請關閉 `啟用群員識別` 設定獲得更好的效果。" + }, + "gm_native_search": { + "description": "啟用原生搜尋功能", + "hint": "啟用後所有函數工具將全部失效,免費次數限制請查閱官方文件" + }, + "gm_native_coderunner": { + "description": "啟用原生程式碼執行器", + "hint": "啟用後所有函數工具將全部失效" + }, + "gm_url_context": { + "description": "啟用URL上下文功能", + "hint": "啟用後所有函數工具將全部失效" + }, + "gm_safety_settings": { + "description": "安全過濾器", + "hint": "設定模型輸入的內容安全過濾級別。過濾級別分類為NONE(不屏蔽)、HIGH(高風險時屏蔽)、MEDIUM_AND_ABOVE(中等風險及以上屏蔽)、LOW_AND_ABOVE(低風險及以上時屏蔽),具體參見Gemini API文件。", + "harassment": { + "description": "騷擾內容", + "hint": "負面或有害評論" + }, + "hate_speech": { + "description": "仇恨言論", + "hint": "粗魯、無禮或褻瀆性質內容" + }, + "sexually_explicit": { + "description": "露骨色情內容", + "hint": "包含性行為或其他淫穢內容的引用" + }, + "dangerous_content": { + "description": "危險內容", + "hint": "宣揚、助長或鼓勵有害行為的資訊" + } + }, + "gm_thinking_config": { + "description": "思考設定", + "budget": { + "description": "思考預算", + "hint": "用於指定模型推理時使用的思考 token 數量上限。參見: https://ai.google.dev/gemini-api/docs/thinking#set-budget" + }, + "level": { + "description": "思考級別", + "hint": "推薦用於 Gemini 3 及以上模型,可控制推理行為。參見: https://ai.google.dev/gemini-api/docs/thinking#thinking-levels" + } + }, + "anth_thinking_config": { + "description": "思考設定", + "type": { + "description": "思考類型", + "hint": "設為 'adaptive' 以使用自適應思考(推薦 Opus 4.6+ / Sonnet 4.6+)。留空則使用手動預算模式。參見: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking" + }, + "budget": { + "description": "思考預算", + "hint": "Anthropic thinking.budget_tokens 參數。必須 >= 1024。僅在思考類型為空時生效。Opus 4.6 / Sonnet 4.6 已棄用。參見: https://platform.claude.com/docs/en/build-with-claude/extended-thinking" + }, + "effort": { + "description": "思考深度", + "hint": "當思考類型為 'adaptive' 時控制思考深度。'high' 為預設值。'max' 僅限 Opus 4.6。參見: https://platform.claude.com/docs/en/build-with-claude/effort" + } + }, + "minimax-group-id": { + "description": "使用者組", + "hint": "於帳戶管理->基本資訊中可見" + }, + "minimax-langboost": { + "description": "指定語言/方言", + "hint": "增強對指定的小語種和方言的辨識能力,設定後可以提升在指定小語種/方言場景下的語音表現" + }, + "minimax-voice-speed": { + "description": "語速", + "hint": "生成聲音的語速, 取值[0.5, 2], 預設為1.0, 取值越大,語速越快" + }, + "minimax-voice-vol": { + "description": "音量", + "hint": "生成聲音的音量, 取值(0, 10], 預設為1.0, 取值越大,音量越高" + }, + "minimax-voice-pitch": { + "description": "語調", + "hint": "生成聲音的語調, 取值[-12, 12], 預設為0" + }, + "minimax-is-timber-weight": { + "description": "啟用混合音色", + "hint": "啟用混合音色, 支援以自訂權重混合最多四種音色, 啟用後自動忽略單一音色設定" + }, + "minimax-timber-weight": { + "description": "混合音色", + "hint": "混合音色及其權重, 最多支援四種音色, 權重為整數, 取值[1, 100]. 可在官網API語音調試台預覽程式碼獲得預設以及編寫範本, 需要嚴格按照json字串格式編寫, 可以查看控制台判斷是否解析成功. 具體結構可參照預設值以及官網程式碼預覽." + }, + "minimax-voice-id": { + "description": "單一音色", + "hint": "單一音色編號, 詳見官網文件" + }, + "minimax-voice-emotion": { + "description": "情緒", + "hint": "控制合成語音的情緒。當為 auto 時,將根據文字內容自動選擇情緒。" + }, + "minimax-voice-latex": { + "description": "支援朗讀latex公式", + "hint": "朗讀latex公式, 但是需要確保輸入文字按官網要求格式化" + }, + "minimax-voice-english-normalization": { + "description": "支援英語文字規範化", + "hint": "可提升數字閱讀場景的性能,但會略微增加延遲" + }, + "rag_options": { + "description": "RAG 選項", + "hint": "檢索知識庫設定, 非必填。僅 Agent 應用類型支援(智能體應用, 包括 RAG 應用)。阿里雲百鍊應用開啟此功能後將無法多輪對話。", + "pipeline_ids": { + "description": "知識庫 ID 列表", + "hint": "對指定知識庫內所有文件進行檢索, 前往 https://bailian.console.aliyun.com/ 資料應用->知識索引建立和取得 ID。" + }, + "file_ids": { + "description": "非結構化文件 ID, 傳入該參數將對指定非結構化文件進行檢索。", + "hint": "對指定非結構化文件進行檢索。前往 https://bailian.console.aliyun.com/ 資料管理建立和取得 ID。" + }, + "output_reference": { + "description": "是否輸出知識庫/文件的引用", + "hint": "在每次回答尾部加上引用源。預設為 False。" + } + }, + "sensevoice_hint": { + "description": "部署SenseVoice", + "hint": "啟用前請 pip 安裝 funasr、funasr_onnx、torchaudio、torch、modelscope、jieba 庫(預設使用CPU,大約下載 1 GB),並且安裝 ffmpeg。否則將無法正常轉文字。" + }, + "is_emotion": { + "description": "情緒辨識", + "hint": "是否開啟情緒辨識。happy|sad|angry|neutral|fearful|disgusted|surprised|unknown" + }, + "stt_model": { + "description": "模型名稱", + "hint": "modelscope 上的模型名稱。預設:iic/SenseVoiceSmall。" + }, + "variables": { + "description": "工作流固定輸入變數", + "hint": "選填。工作流固定輸入變數,將會作為工作流的輸入。也可以在對話時使用 /set 指令動態設定變數。如果變數名衝突,優先使用動態設定的變數。" + }, + "dashscope_app_type": { + "description": "應用類型", + "hint": "百鍊應用的應用類型。" + }, + "timeout": { + "description": "逾時時間", + "hint": "逾時時間,單位為秒。" + }, + "mimo-stt-system-prompt": { + "description": "系統提示詞", + "hint": "用於指導 MiMo STT 轉錄行為的 system prompt。" + }, + "mimo-stt-user-prompt": { + "description": "使用者提示詞", + "hint": "附加給 MiMo STT 的使用者提示詞,用於約束回傳結果格式。" + }, + "openai-tts-voice": { + "description": "voice", + "hint": "OpenAI TTS 的聲音。OpenAI 預設支援:'alloy', 'echo', 'fable', 'onyx', 'nova', 'shimmer'" + }, + "mimo-tts-voice": { + "description": "音色", + "hint": "MiMo TTS 的音色名稱。可選值包括 'mimo_default'、'default_en'、'default_zh'。" + }, + "mimo-tts-format": { + "description": "輸出格式", + "hint": "MiMo TTS 生成音訊的格式。支援 'wav'、'mp3'、'pcm'。" + }, + "mimo-tts-style-prompt": { + "description": "風格提示詞", + "hint": "會以 標籤形式新增到待合成文字開頭,用於控制語速、情緒、角色或風格,例如 開心、變快、孫悟空、悄悄話。可留空。" + }, + "mimo-tts-dialect": { + "description": "方言", + "hint": "會與風格提示詞一起寫入開頭的 標籤中,例如 東北話、四川話、河南話、粵語。可留空。" + }, + "mimo-tts-seed-text": { + "description": "種子文字", + "hint": "作為選填的 user 訊息發送,用於輔助調節語氣和風格,不會拼接到待合成文字中。" + }, + "fishaudio-tts-character": { + "description": "character", + "hint": "fishaudio TTS 的角色。預設為可莉。更多角色請造訪:https://fish.audio/zh-CN/discovery" + }, + "fishaudio-tts-reference-id": { + "description": "reference_id", + "hint": "fishaudio TTS 的參考模型ID(選填)。如果填入此欄位,將直接使用模型ID而不透過角色名稱查詢。例如:626bb6d3f3364c9cbc3aa6a67300a664。更多模型請造訪:https://fish.audio/zh-CN/discovery,進入模型詳情介面後可複製模型ID" + }, + "whisper_hint": { + "description": "本機部署 Whisper 模型須知", + "hint": "啟用前請 pip 安裝 openai-whisper 庫(N卡使用者大約下載 2GB,主要是 torch 和 cuda,CPU 使用者大約下載 1 GB),並且安裝 ffmpeg。否則將無法正常轉文字。" + }, + "id": { + "description": "ID" + }, + "type": { + "description": "模型供應商種類" + }, + "provider_type": { + "description": "模型供應商能力種類" + }, + "enable": { + "description": "啟用" + }, + "key": { + "description": "API Key" + }, + "api_base": { + "description": "API Base URL" + }, + "proxy": { + "description": "代理位址", + "hint": "HTTP/HTTPS 代理位址,格式如 http://127.0.0.1:7890。僅對該供應商的 API 請求生效,不影響 Docker 內網通訊。" + }, + "model": { + "description": "模型 ID", + "hint": "模型名稱,如 gpt-4o-mini, deepseek-chat。" + }, + "max_context_tokens": { + "description": "模型上下文視窗大小", + "hint": "模型最大上下文 Token 大小。如果為 0,則會自動從模型中繼資料填充(如有),也可手動修改。" + }, + "dify_api_key": { + "description": "API Key", + "hint": "Dify API Key。此項必填。" + }, + "dify_api_base": { + "description": "API Base URL", + "hint": "Dify API Base URL。預設為 https://api.dify.ai/v1" + }, + "dify_api_type": { + "description": "Dify 應用類型", + "hint": "Dify API 類型。根據 Dify 官網,目前支援 chat, chatflow, agent, workflow 三種應用類型。" + }, + "dify_workflow_output_key": { + "description": "Dify Workflow 輸出變數名", + "hint": "Dify Workflow 輸出變數名。當應用類型為 workflow 時才使用。預設為 astrbot_wf_output。" + }, + "dify_query_input_key": { + "description": "Prompt 輸入變數名", + "hint": "發送的訊息文字內容對應的輸入變數名。預設為 astrbot_text_query。" + }, + "coze_api_key": { + "description": "Coze API Key", + "hint": "Coze API 密鑰,用於存取 Coze 服務。" + }, + "bot_id": { + "description": "Bot ID", + "hint": "Coze 機器人的 ID,在 Coze 平台上建立機器人後取得。" + }, + "coze_api_base": { + "description": "API Base URL", + "hint": "Coze API 的基礎 URL 位址,預設為 https://api.coze.cn" + }, + "deerflow_api_base": { + "description": "API Base URL", + "hint": "DeerFlow API 閘道位址,預設為 http://127.0.0.1:2026" + }, + "deerflow_api_key": { + "description": "DeerFlow API Key", + "hint": "選填。若 DeerFlow 閘道設定了 Bearer 鑑權,則在此填寫。" + }, + "deerflow_auth_header": { + "description": "Authorization Header", + "hint": "選填。自訂 Authorization 請求頭,優先級高於 DeerFlow API Key。" + }, + "deerflow_assistant_id": { + "description": "Assistant ID", + "hint": "LangGraph assistant_id,預設為 lead_agent。" + }, + "deerflow_model_name": { + "description": "模型名稱覆寫", + "hint": "選填。覆寫 DeerFlow 預設模型(對應 runtime context 的 model_name)。" + }, + "deerflow_thinking_enabled": { + "description": "啟用思考模式" + }, + "deerflow_plan_mode": { + "description": "啟用計畫模式", + "hint": "對應 DeerFlow 的 is_plan_mode。" + }, + "deerflow_subagent_enabled": { + "description": "啟用子智能體", + "hint": "對應 DeerFlow 的 subagent_enabled。" + }, + "deerflow_max_concurrent_subagents": { + "description": "子智能體最大併發數", + "hint": "對應 DeerFlow 的 max_concurrent_subagents。僅在啟用子智能體時生效,預設 3。" + }, + "deerflow_recursion_limit": { + "description": "遞迴深度上限", + "hint": "對應 LangGraph recursion_limit。" + }, + "auto_save_history": { + "description": "由 Coze 管理對話紀錄", + "hint": "啟用後,將由 Coze 進行對話歷史紀錄管理,此時 AstrBot 本機儲存的上下文不會生效(僅供瀏覽),對 AstrBot 的上下文進行的操作也不會生效。如果為停用,則使用 AstrBot 管理上下文。" + } + } + }, + "help": { + "documentation": "官方文件", + "support": "加群詢問", + "helpText": "不了解設定?請見 {documentation} 或 {support}。", + "helpPrefix": "不了解設定?請見", + "helpMiddle": "或", + "helpSuffix": "。" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/config.json b/dashboard/src/i18n/locales/zh-TW/features/config.json new file mode 100644 index 0000000000..4665d72ad2 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/config.json @@ -0,0 +1,129 @@ +{ + "title": "設定檔", + "subtitle": "管理系統設定和配置", + "editor": { + "visual": "視覺化編輯", + "code": "程式碼編輯", + "revertCode": "回到變更前的程式碼", + "applyConfig": "套用此設定", + "applyTip": "`套用此設定` 將設定暫存並套用到視覺化介面。如要儲存,需再點擊右下角儲存按鈕。" + }, + "actions": { + "save": "儲存設定", + "delete": "刪除這項", + "add": "新增", + "reset": "重設為預設", + "export": "匯出設定", + "import": "匯入設定", + "validate": "驗證設定" + }, + "help": { + "documentation": "官方文件", + "support": "加群詢問", + "helpText": "不了解設定?請見 {documentation} 或 {support}。", + "helpPrefix": "不了解設定?請見", + "helpMiddle": "或", + "helpSuffix": "。" + }, + "messages": { + "configApplied": "設定成功套用。如要儲存,需再點擊右下角儲存按鈕。", + "configApplyError": "設定未套用,JSON 格式錯誤。", + "unsavedChangesNotice": "目前設定有未儲存的修改。請點擊右下角儲存按鈕以生效。", + "saveSuccess": "設定儲存成功", + "saveError": "設定儲存失敗", + "loadError": "設定載入失敗", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗", + "updateSuccess": "更新成功", + "updateError": "更新失敗" + }, + "sections": { + "general": "一般設定", + "advanced": "進階設定", + "security": "安全設定", + "appearance": "外觀設定", + "notification": "通知設定" + }, + "general": { + "botName": "機器人名稱", + "language": "介面語言", + "timezone": "時區", + "autoSave": "自動儲存", + "debugMode": "偵錯模式" + }, + "advanced": { + "logLevel": "日誌級別", + "maxConnections": "最大連線數", + "timeout": "逾時時間", + "retryAttempts": "重試次數", + "cacheSize": "快取大小" + }, + "security": { + "apiKey": "API 密鑰", + "allowedHosts": "允許的主機", + "rateLimit": "頻率限制", + "encryption": "加密設定" + }, + "configSelection": { + "selectConfig": "選擇設定檔", + "normalConfig": "一般", + "systemConfig": "系統" + }, + "search": { + "placeholder": "搜尋設定項(欄位名/描述/提示)", + "noResult": "未找到符合的設定項" + }, + "configManagement": { + "title": "設定檔管理", + "description": "AstrBot 支援針對不同機器人分別設定設定檔。預設會使用 `default` 設定。", + "newConfig": "新建設定檔", + "editConfig": "編輯設定檔", + "manageConfigs": "管理設定檔...", + "configName": "名稱", + "fillConfigName": "填寫設定檔名稱", + "confirmDelete": "確定要刪除設定檔 \"{name}\" 嗎?此操作不可復原。", + "pleaseEnterName": "請填寫設定名稱", + "createFailed": "新設定檔建立失敗", + "deleteFailed": "刪除設定檔失敗", + "updateFailed": "更新設定檔失敗" + }, + "buttons": { + "cancel": "取消", + "create": "建立", + "update": "更新" + }, + "codeEditor": { + "title": "編輯設定檔" + }, + "fileUpload": { + "button": "管理檔案", + "dialogTitle": "已上傳檔案", + "dropzone": "上傳新檔案", + "allowedTypes": "允許類型:{types}", + "empty": "暫無已上傳檔案", + "statusMissing": "檔案遺失", + "statusUnconfigured": "未加入設定", + "uploadSuccess": "已上傳 {count} 個檔案", + "uploadFailed": "上傳失敗", + "loadFailed": "取得檔案列表失敗", + "fileTooLarge": "檔案過大(上限 {max} MB):{name}", + "deleteSuccess": "已刪除檔案", + "deleteFailed": "刪除失敗", + "addToConfig": "已加入設定", + "fileCount": "檔案:{count}", + "done": "完成" + }, + "unsavedChangesWarning": { + "dialogTitle": "未儲存的變更", + "leavePage": "目前設定有未儲存的變更,切換前是否儲存?", + "switchConfig": "切換設定檔會遺失目前未儲存的變更,是否先儲存?", + "options": { + "save": "儲存", + "saveAndSwitch": "儲存並切換", + "discardAndSwitch": "放棄變更並切換", + "closeCard": "關閉彈出式視窗", + "confirm": "確定", + "cancel": "取消" + } + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/console.json b/dashboard/src/i18n/locales/zh-TW/features/console.json new file mode 100644 index 0000000000..3e8bc4bd15 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/console.json @@ -0,0 +1,18 @@ +{ + "title": "平台日誌", + "autoScroll": { + "enabled": "自動捲動已開啟", + "disabled": "自動捲動已關閉" + }, + "pipInstall": { + "button": "安裝 pip 庫", + "dialogTitle": "安裝 Pip 庫", + "packageLabel": "*庫名,如 llmtuner", + "mirrorLabel": "強制 PyPI 軟體庫連結(選填)", + "mirrorHint": "強制 PyPI 軟體庫連結 > 設定項 `PyPI 軟體庫位址`", + "installButton": "安裝" + }, + "debugHint": { + "text": "Debug 日誌需要在「設定檔 → 系統設定 → 控制台日誌級別」中開啟" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/conversation.json b/dashboard/src/i18n/locales/zh-TW/features/conversation.json new file mode 100644 index 0000000000..90cb21993e --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/conversation.json @@ -0,0 +1,102 @@ +{ + "title": "對話管理", + "subtitle": "管理和查看使用者對話歷史紀錄", + "filters": { + "title": "篩選條件", + "platform": "機器人 ID", + "type": "類型", + "search": "搜尋關鍵字", + "reset": "重設" + }, + "history": { + "title": "對話歷史", + "refresh": "重新整理" + }, + "batch": { + "deleteSelected": "刪除選取 ({count})", + "exportSelected": "匯出選取 ({count})" + }, + "pagination": { + "itemsPerPage": "每頁", + "showingItems": "顯示 {start}-{end} 項,共 {total} 項" + }, + "table": { + "headers": { + "title": "對話標題", + "platform": "機器人 ID", + "type": "訊息類型", + "cid": "對話 ID", + "umo": "訊息會話來源", + "sessionId": "會話 ID", + "createdAt": "建立時間", + "updatedAt": "更新時間", + "actions": "操作" + } + }, + "actions": { + "view": "查看", + "edit": "編輯", + "delete": "刪除" + }, + "messageTypes": { + "group": "群聊", + "friend": "私聊", + "unknown": "未知" + }, + "status": { + "noTitle": "無標題對話", + "unknown": "未知", + "noData": "暫無對話紀錄", + "emptyContent": "對話內容為空", + "audioNotSupported": "您的瀏覽器不支援音訊播放。" + }, + "dialogs": { + "view": { + "title": "對話詳情", + "editMode": "編輯對話", + "previewMode": "預覽模式", + "saveChanges": "儲存修改", + "close": "關閉", + "confirmClose": "您有未儲存的變更,確定要關閉嗎?" + }, + "edit": { + "title": "編輯對話資訊", + "titleLabel": "對話標題", + "titlePlaceholder": "輸入對話標題", + "cancel": "取消", + "save": "儲存" + }, + "delete": { + "title": "確認刪除", + "message": "確定要刪除對話 {title} 嗎?此操作不可復原。", + "cancel": "取消", + "confirm": "刪除" + }, + "batchDelete": { + "title": "批次刪除確認", + "message": "確定要刪除選取的 {count} 個對話嗎?此操作不可復原,請謹慎操作!", + "andMore": "等 {count} 個", + "cancel": "取消", + "confirm": "批次刪除", + "warning": "警告:此操作不可復原!" + } + }, + "messages": { + "fetchError": "取得對話列表失敗", + "saveSuccess": "儲存成功", + "saveError": "儲存失敗", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗", + "historyError": "取得對話歷史失敗", + "historySaveSuccess": "對話歷史儲存成功", + "historySaveError": "對話歷史儲存失敗", + "invalidJson": "JSON 格式無效", + "noItemSelected": "請先選擇要刪除的對話", + "batchDeleteSuccess": "成功刪除 {count} 個對話", + "batchDeleteError": "批次刪除失敗", + "batchDeletePartial": "刪除完成:成功 {deleted} 個,失敗 {failed} 個", + "exportSuccess": "匯出成功", + "exportError": "匯出失敗", + "noItemSelectedForExport": "請先選擇要匯出的對話" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/cron.json b/dashboard/src/i18n/locales/zh-TW/features/cron.json new file mode 100644 index 0000000000..08a92e0009 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/cron.json @@ -0,0 +1,66 @@ +{ + "page": { + "title": "未來任務管理", + "beta": "實驗性", + "subtitle": "查看給 AstrBot 安排的未來任務。AstrBot 將會被自動喚醒、執行任務,然後將結果告知任務安排方。需要先在設定檔中啟用「主動型能力」。", + "proactive": { + "supported": "主動發送結果僅支援以下您已設定的平台:{platforms}", + "unsupported": "暫無支援主動訊息的平台,請在平台設定中開啟。" + } + }, + "actions": { + "create": "新增任務", + "refresh": "重新整理", + "delete": "刪除", + "cancel": "取消", + "submit": "建立" + }, + "table": { + "title": "已註冊任務", + "empty": "暫無任務。", + "headers": { + "name": "名稱", + "type": "類型", + "cron": "Cron", + "session": "會話 ID", + "nextRun": "下一次執行", + "lastRun": "最近執行", + "note": "說明", + "actions": "操作" + }, + "type": { + "once": "一次性", + "recurring": "循環", + "activeAgent": "Active Agent", + "workflow": "Workflow", + "unknown": "{type}" + }, + "timezoneLocal": "本地時區", + "notAvailable": "—" + }, + "form": { + "title": "新增任務", + "chatHint": "您可以直接透過聊天的方式來讓 AstrBot 建立未來任務,而不必在此新增。", + "runOnce": "一次性任務", + "name": "任務名稱", + "note": "任務說明", + "cron": "Cron 表達式", + "cronPlaceholder": "0 9 * * *", + "runAt": "執行時間", + "session": "目標 session (platform_id:message_type:session_id)", + "timezone": "時區(選填,如 Asia/Taipei)", + "enabled": "啟用" + }, + "messages": { + "loadFailed": "取得任務失敗", + "updateFailed": "更新失敗", + "deleteSuccess": "已刪除", + "deleteFailed": "刪除失敗", + "sessionRequired": "請填寫 session", + "noteRequired": "請填寫說明", + "cronRequired": "請填寫 Cron 表達式", + "runAtRequired": "請選擇執行時間", + "createSuccess": "建立成功", + "createFailed": "建立失敗" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/dashboard.json b/dashboard/src/i18n/locales/zh-TW/features/dashboard.json new file mode 100644 index 0000000000..42e352c5e2 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/dashboard.json @@ -0,0 +1,65 @@ +{ + "title": "平台日誌", + "subtitle": "即時監控和統計數據", + "lastUpdate": "最後更新", + "status": { + "loading": "載入中...", + "dataError": "取得資料失敗", + "noticeError": "取得公告失敗", + "online": "在線", + "uptime": "運行時間", + "memoryUsage": "記憶體使用量" + }, + "stats": { + "totalMessage": { + "title": "訊息總數", + "subtitle": "所有平台發送的訊息總計" + }, + "onlinePlatform": { + "title": "訊息平台", + "subtitle": "已連線的訊息平台數量" + }, + "runningTime": { + "title": "運行時間", + "subtitle": "系統已運行時長", + "format": "{hours}小時{minutes}分{seconds}秒" + }, + "memoryUsage": { + "title": "記憶體佔用", + "subtitle": "系統記憶體使用情況", + "cpuLoad": "CPU 負載", + "status": { + "good": "良好", + "normal": "正常", + "high": "偏高" + } + } + }, + "charts": { + "messageTrend": { + "title": "訊息趨勢分析", + "subtitle": "追蹤訊息數量隨時間的變化", + "totalMessages": "總訊息數", + "dailyAverage": "平均每天", + "growthRate": "成長率", + "timeLabel": "時間", + "messageCount": "訊息條數", + "timeRanges": { + "1day": "過去 1 天", + "3days": "過去 3 天", + "1week": "過去 7 天", + "1month": "過去 30 天" + } + }, + "platformStat": { + "title": "平台訊息統計", + "subtitle": "各平台訊息數量分佈", + "total": "總計", + "noData": "暫無平台資料", + "messageUnit": "條", + "platformCount": "平台數", + "mostActive": "最活躍", + "totalPercentage": "總訊息佔比" + } + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/extension.json b/dashboard/src/i18n/locales/zh-TW/features/extension.json new file mode 100644 index 0000000000..4829d2083f --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/extension.json @@ -0,0 +1,371 @@ +{ + "title": "擴充套件管理", + "subtitle": "管理和設定系統擴充套件", + "tabs": { + "installedPlugins": "AstrBot 擴充套件", + "market": "AstrBot 擴充套件市場", + "installedMcpServers": "MCP", + "skills": "Skills", + "handlersOperation": "管理行為" + }, + "titles": { + "installedAstrBotPlugins": "已安裝的 AstrBot 擴充套件", + "pinnedPlugins": "置頂擴充套件" + }, + "failedPlugins": { + "title": "載入失敗的擴充套件({count})", + "hint": "這些擴充套件載入失敗,仍可嘗試重新載入或直接移除。", + "columns": { + "plugin": "擴充套件", + "error": "錯誤" + } + }, + "search": { + "placeholder": "搜尋擴充套件...", + "marketPlaceholder": "搜尋市場擴充套件..." + }, + "filters": { + "all": "全部" + }, + "views": { + "card": "卡片檢視", + "list": "列表檢視" + }, + "buttons": { + "showSystemPlugins": "顯示系統擴充套件", + "hideSystemPlugins": "隱藏系統擴充套件", + "install": "安裝", + "uninstall": "移除", + "update": "更新", + "reload": "重新載入", + "enable": "啟用", + "disable": "停用", + "configure": "設定", + "viewInfo": "行為", + "viewDocs": "文件", + "viewRepo": "儲存庫", + "close": "關閉", + "save": "儲存", + "saveAndClose": "儲存並關閉", + "cancel": "取消", + "actions": "操作", + "back": "返回", + "selectFile": "選擇檔案", + "refresh": "重新整理", + "updateAll": "更新全部擴充套件", + "deleteSource": "刪除來源", + "pin": "置頂", + "unpin": "取消置頂", + "reshuffle": "隨機一發" + }, + "status": { + "enabled": "啟用", + "disabled": "停用", + "system": "系統", + "loading": "載入中...", + "installed": "已安裝", + "unknown": "未知" + }, + "tooltips": { + "enable": "點擊啟用", + "disable": "點擊停用", + "reload": "重新載入", + "configure": "設定", + "viewInfo": "行為", + "viewDocs": "文件", + "update": "更新", + "uninstall": "移除" + }, + "table": { + "headers": { + "name": "名稱", + "description": "描述", + "version": "版本", + "author": "作者", + "status": "狀態", + "actions": "操作", + "stars": "Star 數", + "lastUpdate": "最近更新", + "tags": "標籤", + "eventType": "行為類型", + "specificType": "具體類型", + "trigger": "觸發方式" + } + }, + "empty": { + "noPlugins": "暫無擴充套件", + "noPluginsDesc": "嘗試安裝擴充套件或者顯示系統擴充套件" + }, + "market": { + "recommended": "🥳 推薦", + "allPlugins": "📦 全部擴充套件", + "category": "分類", + "categories": { + "all": "全部", + "ai_tools": "AI 增強", + "entertainment": "娛樂", + "productivity": "效率", + "integrations": "外部整合", + "utilities": "生活實用", + "other": "其他" + }, + "showFullName": "完整名稱", + "devDocs": "擴充套件開發文件", + "submitRepo": "提交擴充套件儲存庫", + "customSource": "自訂擴充套件來源", + "source": "擴充套件來源", + "availableSources": "可用來源", + "sourceManagement": "擴充套件來源管理", + "addSource": "新增擴充套件來源", + "sourceName": "來源名稱", + "sourceUrl": "來源位址", + "defaultSource": "預設擴充套件來源", + "removeSource": "刪除擴充套件來源", + "confirmRemoveSource": "確定要刪除此擴充套件來源嗎?", + "sourceAdded": "擴充套件來源新增成功", + "sourceRemoved": "擴充套件來源刪除成功", + "sourceError": "操作失敗", + "selectSource": "選擇擴充套件來源", + "currentSource": "目前擴充套件來源", + "editSource": "編輯擴充套件來源", + "sourceUpdated": "擴充套件來源更新成功", + "defaultOfficialSource": "預設官方來源", + "sourceExists": "該擴充套件來源已存在", + "installPlugin": "安裝擴充套件", + "randomPlugins": "🎲 隨機擴充套件", + "showRandomPlugins": "顯示隨機擴充套件", + "hideRandomPlugins": "隱藏隨機擴充套件", + "sourceSafetyWarning": "即使是預設擴充套件來源,我們也不能完全保證擴充套件的穩定性和安全性,使用前請謹慎核查。" + }, + "sort": { + "by": "排序方式", + "default": "預設排序", + "installTime": "最後修改時間", + "name": "名稱", + "stars": "Star 數", + "author": "作者名", + "updated": "更新時間", + "updateStatus": "更新狀態", + "ascending": "升冪", + "descending": "降冪" + }, + "tags": { + "danger": "危險" + }, + "dialogs": { + "error": { + "title": "錯誤訊息", + "checkConsole": "詳情請檢查平台日誌" + }, + "config": { + "title": "擴充套件設定", + "noConfig": "這個擴充套件沒有設定" + }, + "loading": { + "title": "載入中...", + "logs": "日誌" + }, + "uninstall": { + "title": "刪除確認", + "message": "您確定要刪除目前擴充套件嗎?", + "deleteConfig": "同時刪除擴充套件設定檔", + "deleteData": "同時刪除擴充套件持久化資料", + "configHint": "設定檔位於 data/config 目錄", + "dataHint": "刪除 data/plugin_data 和 data/plugins_data 目錄下的資料" + }, + "install": { + "title": "安裝擴充套件", + "fromFile": "從檔案安裝", + "fromUrl": "從連結安裝", + "supportPlatformsCount": "支援 {count} 個平台" + }, + "danger_warning": { + "title": "警告", + "message": "該擴充套件可能包含不安全的程式碼或功能,可能導致系統異常或資料遺失等。請確認是否繼續安裝?", + "confirm": "繼續", + "cancel": "取消" + }, + "versionCompatibility": { + "title": "版本相容性警告", + "message": "該擴充套件宣告的 AstrBot 版本範圍與目前版本不符合。您可以無視警告繼續安裝,但可能無法正常運行。", + "confirm": "無視警告,繼續安裝", + "cancel": "取消安裝" + }, + "forceUpdate": { + "title": "未偵測到新版本", + "message": "目前擴充套件未偵測到新版本,是否強制重新安裝?這將從遠端儲存庫拉取最新程式碼。", + "confirm": "強制更新" + }, + "updateAllConfirm": { + "title": "確認更新全部擴充套件", + "message": "確定要更新全部 {count} 個擴充套件嗎?此操作可能需要一些時間。", + "confirm": "確認更新" + } + }, + "messages": { + "uninstalling": "正在移除", + "refreshing": "正在重新整理擴充套件列表...", + "refreshSuccess": "擴充套件列表已重新整理!", + "refreshFailed": "重新整理擴充套件列表時發生錯誤", + "operationFailed": "操作失敗", + "reloadSuccess": "重新載入成功", + "reloadFailed": "重新載入失敗", + "updateSuccess": "更新成功!", + "addSuccess": "新增成功!", + "saveSuccess": "儲存成功!", + "deleteSuccess": "刪除成功!", + "installing": "正在從檔案安裝擴充套件", + "installingFromUrl": "正在從連結安裝擴充套件...", + "installFailed": "安裝擴充套件失敗:", + "getMarketDataFailed": "取得擴充套件市場資料失敗:", + "hasUpdate": "有新版本:", + "confirmDelete": "確定要刪除擴充套件嗎?", + "fillUrlOrFile": "請填寫擴充套件連結或上傳擴充套件檔案", + "dontFillBoth": "請不要同時填寫擴充套件連結和上傳檔案", + "supportedFormats": "支援 .zip 格式的擴充套件檔案", + "updateAllSuccess": "所有可更新的擴充套件都已更新!", + "updateAllFailed": "有 {failed}/{total} 個擴充套件更新失敗:", + "fillSourceNameAndUrl": "請填寫完整的擴充套件來源名稱和位址", + "invalidUrl": "請輸入有效的 URL 位址", + "enterJsonUrl": "請輸入回傳擴充套件列表 JSON 資料的 URL 位址" + }, + "upload": { + "fromFile": "從檔案安裝", + "fromUrl": "從連結安裝", + "selectFile": "選擇檔案", + "enterUrl": "輸入擴充套件儲存庫連結" + }, + "skills": { + "modeLocal": "本機 Skills", + "modeNeo": "Neo Skills", + "actions": "操作", + "upload": "上傳 Skills", + "refresh": "重新整理", + "empty": "暫無 Skills", + "emptyHint": "請上傳 Skills 壓縮檔", + "uploadDialogTitle": "上傳 Skills", + "uploadHint": "支援批次上傳 zip 技能包,也支援拖曳批次上傳 zip 技能包。系統會自動校驗目錄結構,並給出逐個檔案的結果。", + "structureRequirement": "支援壓縮檔內含多個 skills 資料夾。", + "abilityMultiple": "支援一次上傳多個 zip 檔案", + "abilityValidate": "自動校驗 `SKILL.md`", + "abilitySkip": "自動跳過重複檔案", + "selectFile": "選擇檔案", + "selectFiles": "選擇檔案(可多選)", + "dropzoneTitle": "拖曳多個 zip 檔案到這裡", + "dropzoneAction": "或者點擊之後在資料夾中選擇多個檔案", + "dropzoneHint": "支援批次上傳,系統會自動校驗目錄結構", + "fileListTitle": "待處理檔案", + "fileListEmpty": "選擇檔案後會在這裡顯示校驗結果與上傳狀態", + "uploading": "正在上傳...", + "batchResultTitle": "批次上傳結果", + "batchResultSummary": "共 {total} 個檔案,成功 {success} 個", + "batchSuccessList": "上傳成功", + "batchFailedList": "上傳失敗", + "confirm": "確定", + "confirmUpload": "開始上傳", + "cancel": "取消", + "statusWaiting": "待上傳", + "statusUploading": "上傳中", + "statusSuccess": "已上傳", + "statusError": "校驗失敗", + "statusSkipped": "已跳過", + "summaryTotal": "共 {count} 個檔案", + "summaryReady": "待處理 {count}", + "summarySuccess": "成功 {count}", + "summaryFailed": "失敗 {count}", + "summarySkipped": "跳過 {count}", + "validationReady": "等待上傳,上傳時會自動校驗目錄結構", + "validationZipOnly": "僅支援 zip 技能包", + "validationDuplicate": "同名檔案已在列表中,已跳過", + "validationUploading": "正在校驗並上傳...", + "validationUploadFailed": "上傳失敗,請重試", + "validationUploadedAs": "已安裝為 {name}", + "validationNoResult": "未收到校驗結果,請檢查平台日誌", + "noDescription": "無描述", + "path": "路徑", + "uploadSuccess": "上傳成功", + "uploadFailed": "上傳失敗", + "download": "下載", + "downloadSuccess": "下載成功", + "downloadFailed": "下載失敗", + "loadFailed": "載入 Skills 失敗", + "updateSuccess": "更新成功", + "updateFailed": "更新失敗", + "deleteTitle": "刪除確認", + "deleteMessage": "確定要刪除該 Skill 嗎?", + "deleteSuccess": "刪除成功", + "deleteFailed": "刪除失敗", + "neoSkillKey": "skill_key 過濾", + "neoStatus": "候選狀態", + "neoStage": "發布階段", + "neoFilterHint": "篩選候選與發布紀錄", + "neoAll": "全部", + "neoCandidates": "Neo Candidates", + "neoReleases": "Neo Releases", + "neoLoadFailed": "載入 Neo Skills 資料失敗", + "neoPass": "通過", + "neoReject": "拒絕", + "neoEvaluateSuccess": "評測更新成功", + "neoEvaluateFailed": "評測更新失敗", + "neoPromoteSuccess": "發布成功", + "neoPromoteFailed": "發布失敗", + "neoRollback": "復原", + "neoRollbackSuccess": "復原成功", + "neoRollbackFailed": "復原失敗", + "neoDeactivate": "停用", + "neoDeactivateSuccess": "停用成功", + "neoDeactivateFailed": "停用失敗", + "neoSync": "同步", + "neoSyncSuccess": "同步成功", + "neoSyncFailed": "同步失敗", + "neoDelete": "刪除", + "neoDeleteSuccess": "刪除成功", + "neoDeleteFailed": "刪除失敗", + "neoPayloadTitle": "Neo Payload 詳情", + "neoPayloadFailed": "讀取 Payload 失敗", + "runtimeNoneWarning": "Computer Use 執行環境為無,Skills 可能無法正確被 Agent 執行,因為沒有啟用執行環境。", + "runtimeHint": "需要在設定的「使用電腦能力」中將執行環境設定為「local」或「sandbox」才能讓 AstrBot 正常使用您提供的 Skills。", + "neoRuntimeRequired": "Neo Skills 僅在執行環境為 sandbox 且沙箱驅動為 shipyard_neo 時可用。", + "sourceLocalOnly": "本機 Skill", + "sourceSandboxOnly": "Sandbox 預置 Skill", + "sourceBoth": "本機 + Sandbox", + "sandboxDiscoveryPending": "尚未發現 Sandbox 預置 Skill。請至少啟動一次 Sandbox 會話後再查看。", + "sandboxPresetReadonly": "Sandbox 預置 Skill 在此處為唯讀,無法在本機 Skills 頁面刪除或啟用/停用。" + }, + "card": { + "actions": { + "pluginConfig": "擴充套件設定", + "uninstallPlugin": "移除擴充套件", + "reloadPlugin": "重新載入擴充套件", + "togglePlugin": "擴充套件", + "viewHandlers": "查看行為", + "updateTo": "更新到", + "reinstall": "重新安裝" + }, + "status": { + "hasUpdate": "有新版本可用", + "disabled": "該擴充套件已經被停用", + "handlersCount": "個行為", + "supportPlatform": "支援平台", + "supportPlatformsCount": "支援 {count} 個平台", + "astrbotVersion": "AstrBot 版本要求" + }, + "alt": { + "logo": "logo", + "extensionIcon": "擴充套件圖示" + }, + "errors": { + "confirmNotRegistered": "$confirm 未正確註冊" + } + }, + "conflicts": { + "title": "偵測到指令衝突", + "message": "這會導致部分指令運作異常,建議前往【指令管理】面板進行處理。", + "pairs": "對指令衝突", + "goToManage": "前往處理", + "later": "稍後處理" + }, + "pluginChangelog": { + "menuTitle": "查看更新日誌" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/detail.json b/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/detail.json new file mode 100644 index 0000000000..0a4a8e4e46 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/detail.json @@ -0,0 +1,118 @@ +{ + "title": "知識庫詳情", + "backToList": "返回列表", + "tabs": { + "overview": "概覽", + "documents": "文件管理", + "retrieval": "知識庫檢索", + "sessions": "使用會話", + "settings": "設定" + }, + "overview": { + "title": "基本資訊", + "name": "名稱", + "description": "描述", + "emoji": "圖示", + "createdAt": "建立時間", + "updatedAt": "更新時間", + "stats": "統計資訊", + "docCount": "文件數量", + "chunkCount": "區塊數量", + "embeddingModel": "嵌入模型", + "rerankModel": "重排序模型", + "notSet": "未設定" + }, + "documents": { + "title": "文件列表", + "upload": "上傳文件", + "empty": "暫無文件", + "name": "文件名稱", + "type": "類型", + "size": "大小", + "chunks": "區塊數", + "createdAt": "上傳時間", + "actions": "操作", + "view": "查看", + "delete": "刪除", + "deleteConfirm": "確定要刪除文件「{name}」嗎?", + "deleteWarning": "此操作將刪除文件及其所有區塊,不可復原。", + "uploading": "正在上傳...", + "uploadSuccess": "文件上傳成功", + "uploadFailed": "文件上傳失敗", + "deleteSuccess": "文件刪除成功", + "deleteFailed": "文件刪除失敗" + }, + "upload": { + "title": "上傳文件", + "selectFile": "選擇檔案", + "dropzone": "拖放檔案到這裡或點擊選擇", + "supportedFormats": "支援的格式: ", + "maxSize": "最大檔案大小:128MB", + "chunkSettings": "區塊設定", + "batchSettings": "批次處理設定", + "cleaningSettings": "清洗設定", + "enableCleaning": "啟用內容清洗", + "cleaningProvider": "清洗服務供應商", + "cleaningProviderHint": "選擇一個 LLM 服務商來對提取的網頁內容進行清洗和總結", + "chunkSize": "區塊大小", + "chunkSizeHint": "每個文字區塊的字元數(預設:512)", + "chunkOverlap": "區塊重疊", + "chunkOverlapHint": "相鄰文字區塊之間的重疊字元數(預設:50)", + "batchSize": "批次處理大小", + "batchSizeHint": "每批處理的文字區塊數量(預設:32)", + "tasksLimit": "併發任務限制", + "tasksLimitHint": "最大併發上傳任務數(預設:3)", + "maxRetries": "最大重試次數", + "maxRetriesHint": "上傳失敗任務的重試次數(預設:3)", + "cancel": "取消", + "submit": "上傳", + "fileRequired": "請選擇要上傳的檔案", + "fileUpload": "檔案上傳", + "fromUrl": "從 URL", + "urlPlaceholder": "請輸入要提取內容的網頁 URL", + "urlRequired": "請輸入 URL", + "urlHint": "將自動從目標 URL 提取主要內容作為文件。目前支援 {supported} 頁面,請確保目標網頁允許爬蟲存取。", + "beta": "測試版" + }, + "retrieval": { + "title": "知識庫檢索", + "subtitle": "使用稠密檢索和稀疏檢索測試知識庫內容", + "query": "檢索查詢", + "queryPlaceholder": "輸入要檢索的內容...", + "search": "檢索", + "searching": "檢索中...", + "results": "檢索結果", + "noResults": "沒有找到相關內容", + "tryDifferentQuery": "嘗試使用不同的查詢詞", + "settings": "檢索設定", + "topK": "回傳結果數量", + "topKHint": "最多回傳多少條檢索結果", + "enableRerank": "啟用重排序", + "enableRerankHint": "使用重排序模型提高檢索品質", + "score": "相關度分數", + "document": "所屬文件", + "chunk": "文字區塊 #{index}", + "content": "內容", + "charCount": "{count} 字元", + "searchSuccess": "檢索完成,找到 {count} 條結果", + "searchFailed": "檢索失敗", + "queryRequired": "請輸入檢索查詢" + }, + "settings": { + "title": "知識庫設定", + "basic": "基本設定", + "retrieval": "檢索設定", + "chunkSize": "區塊大小", + "chunkOverlap": "區塊重疊", + "topKDense": "稠密檢索數量", + "topKSparse": "稀疏檢索數量", + "topMFinal": "最終回傳數量", + "enableRerank": "啟用重排序", + "embeddingProvider": "嵌入模型供應商", + "rerankProvider": "重排序模型供應商", + "save": "儲存設定", + "saveSuccess": "設定儲存成功", + "saveFailed": "設定儲存失敗", + "tips": "提示:修改檢索設定後,將影響後續的知識庫查詢效果。" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/document.json b/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/document.json new file mode 100644 index 0000000000..4cf1061b2a --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/document.json @@ -0,0 +1,55 @@ +{ + "title": "文件詳情", + "backToKB": "返回知識庫", + "info": { + "title": "文件資訊", + "name": "文件名稱", + "type": "檔案類型", + "size": "檔案大小", + "chunkCount": "區塊數量", + "createdAt": "上傳時間" + }, + "chunks": { + "title": "區塊列表", + "empty": "暫無區塊", + "index": "序號", + "content": "內容", + "charCount": "字元數", + "actions": "操作", + "view": "查看", + "edit": "編輯", + "delete": "刪除", + "preview": "預覽", + "search": "搜尋區塊", + "searchPlaceholder": "輸入關鍵字搜尋區塊內容...", + "showing": "顯示", + "deleteConfirm": "確定要刪除該區塊嗎?", + "deleteSuccess": "區塊刪除成功", + "deleteFailed": "區塊刪除失敗" + }, + "edit": { + "title": "編輯區塊", + "content": "區塊內容", + "cancel": "取消", + "save": "儲存", + "saveSuccess": "區塊儲存成功", + "saveFailed": "區塊儲存失敗" + }, + "delete": { + "title": "刪除區塊", + "confirmText": "確定要刪除此區塊嗎?", + "warning": "刪除後將無法復原,可能影響知識庫檢索效果。", + "cancel": "取消", + "confirm": "刪除", + "deleteSuccess": "區塊刪除成功", + "deleteFailed": "區塊刪除失敗" + }, + "view": { + "title": "區塊詳情", + "index": "序號", + "content": "內容", + "charCount": "字元數", + "vecDocId": "向量 ID", + "close": "關閉" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/index.json b/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/index.json new file mode 100644 index 0000000000..fd9d9dc754 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/knowledge-base/index.json @@ -0,0 +1,67 @@ +{ + "title": "知識庫管理", + "subtitle": "統一管理和查詢知識庫內容", + "list": { + "title": "我的知識庫", + "subtitle": "管理您的所有知識庫集合", + "create": "建立知識庫", + "refresh": "重新整理列表", + "empty": "暫無知識庫", + "loading": "正在載入...", + "documents": "文件", + "chunks": "區塊", + "sessionConfig": "會話設定" + }, + "card": { + "edit": "編輯", + "delete": "刪除", + "open": "打開", + "docCount": "{count} 個文件", + "chunkCount": "{count} 個區塊" + }, + "create": { + "title": "建立知識庫", + "nameLabel": "知識庫名稱", + "namePlaceholder": "為知識庫取個名字", + "descriptionLabel": "描述", + "descriptionPlaceholder": "簡單描述這個知識庫的用途...", + "emojiLabel": "圖示", + "embeddingModelLabel": "嵌入模型 (Embedding Model)", + "rerankModelLabel": "重排序模型 (Rerank Model,選填)", + "providerInfo": "供應商:{id} | 維度:{dimensions}", + "rerankProviderInfo": "供應商:{id}", + "cancel": "取消", + "submit": "建立", + "nameRequired": "請輸入知識庫名稱" + }, + "edit": { + "title": "編輯知識庫", + "submit": "儲存" + }, + "delete": { + "title": "刪除知識庫", + "confirmText": "確定要刪除知識庫「{name}」嗎?", + "warning": "此操作不可復原,所有文件、區塊和關聯設定都將被永久刪除。", + "cancel": "取消", + "confirm": "刪除" + }, + "emoji": { + "title": "選擇圖示", + "close": "關閉", + "categories": { + "books": "書籍與文件", + "emotions": "表情與情感", + "objects": "物品與工具", + "symbols": "符號與標誌" + } + }, + "messages": { + "createSuccess": "知識庫建立成功", + "createFailed": "建立失敗", + "updateSuccess": "知識庫更新成功", + "updateFailed": "更新失敗", + "deleteSuccess": "知識庫刪除成功", + "deleteFailed": "刪除失敗", + "loadError": "載入知識庫列表失敗" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/migration.json b/dashboard/src/i18n/locales/zh-TW/features/migration.json new file mode 100644 index 0000000000..3e299b33f5 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/migration.json @@ -0,0 +1,18 @@ +{ + "dialog": { + "title": "資料遷移助手", + "warning": "👋 歡迎升級到 v4.0.0。我們在新版本對資料格式進行了最佳化,偵測到需要進行資料庫遷移。", + "loading": "正在載入平台列表...", + "loadError": "載入平台列表失敗,請重試", + "noPlatforms": "未找到可用的平台設定", + "retry": "重試", + "startMigration": "開始遷移", + "migrating": "正在遷移中...", + "migratingSubtitle": "請耐心等待,遷移過程中請勿關閉此視窗", + "migrationError": "遷移失敗", + "success": "遷移成功完成!", + "completed": "遷移已完成", + "restartRecommended": "建議重新啟動應用程式以使所有變更生效。", + "restartNow": "立即重新啟動" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/persona.json b/dashboard/src/i18n/locales/zh-TW/features/persona.json new file mode 100644 index 0000000000..85863f9c47 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/persona.json @@ -0,0 +1,146 @@ +{ + "page": { + "description": "管理人格角色設定" + }, + "buttons": { + "create": "建立人格", + "createFirst": "建立第一個人格", + "edit": "編輯", + "delete": "刪除", + "cancel": "取消", + "save": "儲存", + "move": "移動", + "addDialogPair": "新增對話對" + }, + "labels": { + "presetDialogs": "預設對話 ({count} 對)", + "createdAt": "建立時間", + "updatedAt": "更新時間" + }, + "form": { + "personaId": "人格 ID", + "systemPrompt": "系統提示詞", + "customErrorMessage": "自訂錯誤回覆訊息(選填)", + "customErrorMessageHelp": "當該人格的 LLM 請求失敗(例如連線失敗)時,優先發送這條錯誤回覆;留空則發送預設錯誤訊息。", + "presetDialogs": "預設對話", + "presetDialogsHelp": "新增一些預設的對話來幫助機器人更好地理解角色設定。", + "userMessage": "使用者訊息", + "assistantMessage": "AI 回答", + "tools": "工具 / MCP 工具選擇", + "toolsHelp": "為這個人格選擇可用的外部工具。外部工具給了 AI 接觸外部環境的能力,如搜尋、計算、取得資訊等。", + "toolsSelection": "工具選擇操作", + "selectAllTools": "選擇所有工具", + "clearAllTools": "清空選擇", + "allSelected": "全選", + "mcpServersQuickSelect": "MCP 伺服器快速選擇", + "searchTools": "搜尋工具", + "selectedTools": "已選擇的工具", + "noToolsAvailable": "暫無可用工具", + "noToolsFound": "未找到符合的工具", + "loadingTools": "正在載入工具...", + "allToolsAvailable": "使用所有可用工具", + "noToolsSelected": "未選擇任何工具", + "skills": "Skills 選擇", + "skillsHelp": "為這個人格選擇可用的 Skills。Skills 會給 AI 提供可重複使用的流程與規範。", + "skillsAllAvailable": "預設使用全部 Skills", + "skillsSelectSpecific": "選擇指定 Skills", + "searchSkills": "搜尋 Skills", + "selectedSkills": "已選擇的 Skills", + "noSkillsAvailable": "暫無可用 Skills", + "noSkillsFound": "未找到符合的 Skills", + "loadingSkills": "正在載入 Skills...", + "allSkillsAvailable": "使用所有可用 Skills", + "noSkillsSelected": "未選擇任何 Skills", + "skillsRuntimeNoneWarning": "Computer Use 執行環境為無,Skills 可能無法正確被 Agent 執行,因為沒有啟用執行環境。", + "createInFolder": "將在「{folder}」中建立", + "rootFolder": "全部人格" + }, + "dialog": { + "create": { + "title": "建立新人格" + }, + "edit": { + "title": "編輯人格" + } + }, + "empty": { + "title": "暫無人格設定", + "description": "來建立一個吧!", + "folderEmpty": "此資料夾為空", + "folderEmptyDescription": "建立新的人格或資料夾開始使用" + }, + "validation": { + "required": "此欄位為必填項", + "minLength": "最少需要 {min} 個字元", + "alphanumeric": "只能包含字母、數字、底線和連字號", + "dialogRequired": "{type}不能為空", + "personaIdExists": "該人格名稱已存在" + }, + "messages": { + "loadError": "載入人格列表失敗", + "saveSuccess": "儲存成功", + "saveError": "儲存失敗", + "deleteConfirm": "確定要刪除人格 \"{id}\" 嗎?此操作不可復原。", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗" + }, + "persona": { + "personasTitle": "人格", + "toolsCount": "個工具", + "skillsCount": "個 Skills", + "contextMenu": { + "moveTo": "移動到..." + }, + "messages": { + "moveSuccess": "人格移動成功", + "moveError": "移動人格失敗" + } + }, + "folder": { + "sidebarTitle": "資料夾", + "rootFolder": "根目錄", + "foldersTitle": "資料夾", + "noFolders": "暫無資料夾", + "createButton": "新建資料夾", + "searchPlaceholder": "搜尋資料夾...", + "form": { + "name": "資料夾名稱", + "description": "描述(選填)" + }, + "validation": { + "nameRequired": "資料夾名稱不能為空" + }, + "contextMenu": { + "open": "打開", + "rename": "重新命名", + "moveTo": "移動到...", + "delete": "刪除" + }, + "createDialog": { + "title": "建立新資料夾", + "createButton": "建立" + }, + "renameDialog": { + "title": "重新命名資料夾" + }, + "deleteDialog": { + "title": "刪除資料夾", + "message": "確定要刪除資料夾 \"{name}\" 嗎?", + "warning": "資料夾內的所有人格將被移動到根目錄。" + }, + "messages": { + "createSuccess": "資料夾建立成功", + "createError": "建立資料夾失敗", + "renameSuccess": "資料夾重新命名成功", + "renameError": "重新命名資料夾失敗", + "deleteSuccess": "資料夾刪除成功", + "deleteError": "刪除資料夾失敗" + } + }, + "moveDialog": { + "title": "移動到資料夾", + "description": "為 \"{name}\" 選擇目標資料夾", + "success": "移動成功", + "error": "移動失敗" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/platform.json b/dashboard/src/i18n/locales/zh-TW/features/platform.json new file mode 100644 index 0000000000..b5ed3c39db --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/platform.json @@ -0,0 +1,142 @@ +{ + "title": "機器人", + "subtitle": "管理平台適配器實例,連線到不同的訊息平台", + "adapters": "平台適配器", + "addAdapter": "建立機器人", + "emptyText": "暫無平台適配器,點擊 建立機器人 新增", + "viewWebhook": "查看 Webhook 連結", + "webhookCopied": "Webhook URL 已複製到剪貼簿", + "webhookCopyFailed": "複製失敗,請手動複製", + "webhookDialog": { + "title": "Webhook 回呼位址", + "description": "回呼位址如下,請確保網路環境可以公網存取。也可以在日誌中查看回呼位址資訊。建議填寫 設定檔 -> 系統 中的「對外可達的回呼介面位址」設定項。", + "close": "關閉" + }, + "details": { + "adapterType": "適配器類型", + "token": "Token", + "description": "描述" + }, + "logs": { + "title": "平台日誌", + "expand": "展開", + "collapse": "收合" + }, + "dialog": { + "add": "新增", + "edit": "編輯", + "adapter": "機器人", + "refresh": "重新整理", + "cancel": "取消", + "save": "儲存", + "addPlatform": "建立機器人", + "connectTitle": "接入 {name}", + "viewTutorial": "查看接入教學", + "noTemplates": "暫無平台範本", + "idConflict": { + "title": "ID 衝突警告", + "message": "偵測到 ID \"{id}\" 重複。請使用一個新的 ID。", + "confirm": "好的" + }, + "securityWarning": { + "title": "安全提醒", + "aiocqhttpTokenMissing": "為了增強連線安全性,強烈建議您設定 ws_reverse_token。未設定 Token 可能導致安全風險。", + "learnMore": "了解更多" + }, + "invalidPlatformId": "平台 ID 不能包含 ':' 或 '!'。" + }, + "createDialog": { + "step1Title": "選擇訊息平台類別", + "step1Hint": "想把機器人接入到哪裡?如 QQ、企業微信、飛書、Discord、Telegram 等。", + "platformTypeLabel": "訊息平台類別", + "configFileTitle": "設定檔", + "optional": "選填", + "configHint": "想如何設定機器人?設定檔包含了聊天模型、人格、知識庫、擴充套件範圍等豐富的機器人設定項。", + "configDefaultHint": "預設使用預設設定檔「default」。您也可以稍後設定。", + "useExistingConfig": "使用現有設定檔", + "selectConfigLabel": "選擇設定檔", + "createNewConfig": "建立新設定檔", + "newConfigNameLabel": "新設定檔名稱", + "newConfigTitle": "使用新的設定檔", + "newConfigLoadFailed": "無法載入預設設定範本", + "addRouteRule": "新增路由規則", + "viewMode": "查看", + "editMode": "編輯", + "noRouteRules": "該平台暫無路由規則,將使用預設設定檔", + "sessionIdPlaceholder": "會話ID或*", + "allSessions": "全部會話", + "configMissing": "設定檔不存在", + "routeHint": "*訊息下發時,根據會話來源按順序從上到下配對首個符合條件的設定檔。使用 * 表示配對所有。使用 /sid 指令取得會話 ID。全部不符合時將使用預設設定檔。", + "warningContinue": "無視警告並繼續建立", + "warningEditAgain": "重新修改", + "configDrawerTitle": "設定檔管理", + "configDrawerIdLabel": "ID", + "configTableHeaders": { + "configId": "與此實例關聯的設定檔 ID", + "scope": "在此實例下的套用範圍" + }, + "routeTableHeaders": { + "source": "訊息會話來源(訊息類型:會話 ID)", + "config": "使用設定檔", + "actions": "操作" + }, + "messageTypeOptions": { + "all": "全部訊息", + "group": "群組訊息(GroupMessage)", + "friend": "私聊訊息(FriendMessage)" + }, + "messageTypeLabels": { + "all": "全部訊息", + "group": "群組訊息", + "friend": "私聊訊息" + } + }, + "messages": { + "updateSuccess": "更新成功!", + "addSuccess": "新增成功!", + "deleteSuccess": "刪除成功!", + "statusUpdateSuccess": "狀態更新成功!", + "deleteConfirm": "確定要刪除平台適配器", + "configNotFoundOpenConfig": "目標設定檔不存在,已打開設定頁面以便檢查。", + "updateMissingPlatformId": "更新失敗,缺少平台 ID。", + "platformUpdateFailed": "平台更新失敗。", + "addSuccessWithConfig": "平台新增成功,設定檔已更新", + "configIdMissing": "無法取得設定檔 ID。", + "routingUpdateFailed": "更新路由表失敗: {message}", + "createConfigFailed": "建立新設定檔失敗: {message}", + "platformIdMissing": "無法取得平台 ID。", + "routingSaveFailed": "儲存路由表失敗: {message}" + }, + "status": { + "enabled": "已啟用", + "disabled": "已停用", + "connecting": "連線中", + "connected": "已連線", + "disconnected": "已斷線", + "error": "錯誤" + }, + "runtimeStatus": { + "running": "運行中", + "error": "發生錯誤", + "pending": "等待啟動", + "stopped": "已停止", + "unknown": "未知", + "errors": "個錯誤" + }, + "platformQr": { + "title": "二維碼登入", + "show": "查看二維碼", + "status": "二維碼狀態", + "waiting": "等待二維碼", + "close": "關閉" + }, + "errorDialog": { + "title": "錯誤詳情", + "platformId": "平台 ID", + "errorCount": "錯誤數量", + "lastError": "最近錯誤", + "occurredAt": "發生時間", + "traceback": "錯誤堆疊", + "close": "關閉" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/provider.json b/dashboard/src/i18n/locales/zh-TW/features/provider.json new file mode 100644 index 0000000000..1b0f2ae863 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/provider.json @@ -0,0 +1,153 @@ +{ + "title": "模型供應商", + "subtitle": "可以在「對話」中設定對話模型。此外,「Agent 執行器」包含了 Dify、Coze、阿里雲百鍊應用等第三方服務的整合。", + "providers": { + "title": "模型供應商", + "settings": "設定", + "addProvider": "新增模型供應商", + "providerType": "供應商類型", + "tabs": { + "all": "全部", + "chatCompletion": "對話", + "agentRunner": "Agent 執行器", + "speechToText": "語音轉文字", + "textToSpeech": "文字轉語音", + "embedding": "嵌入(Embedding)", + "rerank": "重排序(Rerank)" + }, + "empty": { + "all": "暫無模型供應商,點擊 新增模型供應商 新增", + "typed": "暫無{type}類型的模型供應商,點擊 新增模型供應商 新增" + }, + "description": { + "openai": "也支援所有相容 OpenAI API 的模型供應商。", + "kimi_code": "Kimi 的 CodingPlan / Kimi Code 專用接入,使用特殊的 Anthropic API 相容適配。", + "vllm_rerank": "也支援 Jina AI, Cohere, PPIO 等供應商。", + "default": "" + } + }, + "availability": { + "title": "模型供應商可用性", + "subtitle": "透過測試模型對話可用性判斷,可能產生 API 費用", + "refresh": "重新整理狀態", + "noData": "點擊「重新整理狀態」按鈕取得模型供應商可用性", + "available": "可用", + "unavailable": "不可用", + "pending": "檢查中...", + "errorMessage": "錯誤訊息", + "test": "測試" + }, + "logs": { + "title": "服務日誌", + "expand": "展開", + "collapse": "收合" + }, + "dialogs": { + "addProvider": { + "title": "模型供應商", + "tabs": { + "basic": "對話", + "agentRunner": "Agent 執行器", + "speechToText": "語音轉文字", + "textToSpeech": "文字轉語音", + "embedding": "嵌入(Embedding)", + "rerank": "重排序(Rerank)" + }, + "noTemplates": "暫無該類型的供應商範本" + }, + "config": { + "addTitle": "新增", + "editTitle": "編輯", + "provider": "模型供應商", + "cancel": "取消", + "save": "儲存" + }, + "settings": { + "title": "模型供應商設定", + "sessionSeparation": { + "title": "啟用供應商會話隔離", + "description": "不同會話將可獨立選擇文字生成、TTS、STT 等模型供應商。" + }, + "close": "關閉" + } + }, + "messages": { + "success": { + "update": "更新成功!", + "add": "新增成功!", + "delete": "刪除成功!", + "statusUpdate": "狀態更新成功!", + "sessionSeparation": "會話隔離設定已更新" + }, + "error": { + "sessionSeparation": "取得會話隔離設定失敗", + "fetchStatus": "取得模型供應商狀態失敗", + "testError": "測試 {id} 失敗: {error}" + }, + "confirm": { + "delete": "確定要刪除模型供應商 {id} 嗎?" + } + }, + "providerTypes": { + "title": "供應商類型" + }, + "providerSources": { + "title": "供應商來源", + "add": "新增", + "empty": "暫無供應商來源", + "selectHint": "請選擇一個供應商來源", + "selectCreated": "選擇已建立的供應商來源", + "save": "儲存設定", + "saveAndFetchModels": "儲存並取得模型", + "fetchModels": "取得模型列表", + "saveSuccess": "供應商來源儲存成功", + "saveError": "供應商來源儲存失敗", + "deleteConfirm": "確定要刪除供應商來源 {id} 嗎?這將同時刪除關聯的所有模型設定。", + "deleteSuccess": "供應商來源刪除成功", + "deleteError": "供應商來源刪除失敗", + "enabled": "已啟用", + "disabled": "已停用", + "advancedConfig": "進階設定...", + "fields": { + "name": "名稱", + "apiKey": "API Key", + "baseUrl": "Base URL" + }, + "hints": { + "id": "供應商來源唯一 ID(不是供應商 ID)", + "key": "API 密鑰", + "apiBase": "自訂 API 端點 URL", + "proxy": "HTTP/HTTPS 代理位址,格式如 http://127.0.0.1:7890。僅對該供應商的 API 請求生效,不影響 Docker 內網通訊。" + }, + "labels": { + "proxy": "代理位址" + } + }, + "models": { + "available": "可用模型", + "configured": "已設定的模型", + "empty": "暫無已設定的模型,點擊上方的「取得模型列表」新增", + "noModelsFound": "未找到可用模型", + "fetchError": "取得模型列表失敗", + "addSuccess": "模型 {model} 新增成功", + "deleteConfirm": "確定要刪除模型 {id} 嗎?", + "deleteSuccess": "模型刪除成功", + "deleteError": "模型刪除失敗", + "testSuccess": "模型 {id} 測試通過", + "testSuccessWithLatency": "模型 {id} 測試通過,延遲 {latency} ms", + "testError": "模型測試失敗", + "searchPlaceholder": "搜尋模型或 ID", + "manualAddButton": "自訂模型", + "manualDialogTitle": "新增自訂模型", + "manualDialogModelLabel": "模型 ID(如 gpt-4.1-mini)", + "manualDialogPreviewLabel": "顯示 ID(自動生成)", + "manualDialogPreviewHint": "生成規則:來源ID/模型ID", + "manualModelRequired": "請輸入模型 ID", + "manualModelExists": "該模型已存在", + "configure": "設定", + "tooltips": { + "providerId": "供應商 ID", + "modelId": "模型 ID" + } + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/session-management.json b/dashboard/src/i18n/locales/zh-TW/features/session-management.json new file mode 100644 index 0000000000..941a9db906 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/session-management.json @@ -0,0 +1,158 @@ +{ + "title": "自訂規則", + "subtitle": "為特定會話設定自訂規則,優先級高於全域設定", + "buttons": { + "refresh": "重新整理", + "edit": "編輯", + "editRule": "編輯規則", + "deleteAllRules": "刪除所有規則", + "addRule": "新增規則", + "save": "儲存", + "cancel": "取消", + "delete": "刪除", + "clear": "清除", + "next": "下一步", + "editCustomName": "編輯備註", + "batchDelete": "批次刪除" + }, + "customRules": { + "title": "自訂規則", + "rulesCount": "條規則", + "hasRules": "已設定", + "noRules": "暫無自訂規則", + "noRulesDesc": "點擊「新增規則」為特定會話設定自訂規則", + "serviceConfig": "服務設定", + "pluginConfig": "擴充套件設定", + "kbConfig": "知識庫設定", + "providerConfig": "模型設定", + "configured": "已設定", + "noCustomName": "未設定備註" + }, + "quickEditName": { + "title": "編輯備註名稱" + }, + "search": { + "placeholder": "搜尋會話..." + }, + "table": { + "headers": { + "umoInfo": "訊息會話來源", + "rulesOverview": "規則概覽", + "actions": "操作" + } + }, + "persona": { + "none": "跟隨設定檔" + }, + "provider": { + "followConfig": "跟隨設定檔" + }, + "addRule": { + "title": "新增自訂規則", + "description": "選擇一個訊息會話來源 (UMO) 來設定自訂規則。自訂規則的優先級高於該來源所屬的設定檔中的全域規則。可以使用 /sid 指令取得該來源的 UMO 資訊。", + "selectUmo": "選擇會話", + "noUmos": "暫無可用會話" + }, + "ruleEditor": { + "title": "編輯自訂規則", + "description": "為此會話設定自訂規則,這些規則將優先於全域設定生效。", + "serviceConfig": { + "title": "服務設定", + "sessionEnabled": "啟用該訊息會話來源的訊息處理", + "llmEnabled": "啟用 LLM", + "ttsEnabled": "啟用 TTS", + "customName": "訊息會話來源備註名稱" + }, + "providerConfig": { + "title": "模型設定", + "chatProvider": "聊天模型", + "sttProvider": "語音辨識模型", + "ttsProvider": "語音合成模型" + }, + "personaConfig": { + "title": "人格設定", + "selectPersona": "選擇人格", + "hint": "套用人格設定後,將會強制該來源的所有對話使用該人格。" + }, + "pluginConfig": { + "title": "擴充套件設定", + "disabledPlugins": "停用的擴充套件", + "hint": "選擇要在此會話中停用的擴充套件。未選擇的擴充套件將保持啟用狀態。" + }, + "kbConfig": { + "title": "知識庫設定", + "selectKbs": "選擇知識庫", + "topK": "回傳結果數量 (Top K)", + "enableRerank": "啟用重排序" + } + }, + "deleteConfirm": { + "title": "確認刪除", + "message": "確定要刪除此會話的所有自訂規則嗎?刪除後將恢復使用全域設定。" + }, + "batchDeleteConfirm": { + "title": "確認批次刪除", + "message": "確定要刪除選取的 {count} 條規則嗎?刪除後將恢復使用全域設定。" + }, + "batchOperations": { + "title": "批次操作", + "hint": "快速批次修改會話設定", + "scope": "套用範圍", + "scopeSelected": "選取的會話", + "scopeAll": "所有會話", + "scopeGroup": "所有群聊", + "scopePrivate": "所有私聊", + "llmStatus": "LLM 狀態", + "ttsStatus": "TTS 狀態", + "chatProvider": "聊天模型", + "ttsProvider": "TTS 模型", + "apply": "套用變更" + }, + "groups": { + "title": "分組管理", + "count": "{count} 個分組", + "addToGroup": "加入到分組", + "create": "建立分組", + "edit": "編輯分組", + "name": "分組名稱", + "sessionsCount": "{count} 個會話", + "empty": "暫無分組,點擊「建立分組」建立", + "availableSessions": "可選會話 ({count})", + "selectedSessions": "已選會話 ({count})", + "searchPlaceholder": "搜尋...", + "noMatch": "無符合項目", + "noMembers": "暫無成員", + "customGroupDivider": "── 自訂分組 ──", + "customGroupOption": "📁 {name} ({count})", + "groupOption": "{name} ({count} 個會話)", + "deleteConfirm": "確定要刪除分組 \"{name}\" 嗎?" + }, + "status": { + "enabled": "啟用", + "disabled": "停用" + }, + "messages": { + "refreshSuccess": "資料已重新整理", + "loadError": "載入資料失敗", + "saveSuccess": "儲存成功", + "saveError": "儲存失敗", + "clearSuccess": "已清除", + "clearError": "清除失敗", + "deleteSuccess": "刪除成功", + "deleteError": "刪除失敗", + "noChanges": "沒有需要儲存的變更", + "batchDeleteSuccess": "批次刪除成功", + "batchDeleteError": "批次刪除失敗", + "selectSessionsFirst": "請先選擇要操作的會話", + "selectAtLeastOneConfig": "請至少選擇一項要修改的設定", + "batchUpdateSuccess": "批次更新成功", + "partialUpdateFailed": "部分更新失敗", + "batchUpdateError": "批次更新失敗", + "groupNameRequired": "分組名稱不能為空", + "saveGroupError": "儲存分組失敗", + "deleteGroupError": "刪除分組失敗", + "selectSessionsToAddFirst": "請先選擇要加入的會話", + "addToGroupSuccess": "已加入 {count} 個會話到分組", + "addToGroupError": "加入失敗" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/settings.json b/dashboard/src/i18n/locales/zh-TW/features/settings.json new file mode 100644 index 0000000000..274827a179 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/settings.json @@ -0,0 +1,214 @@ +{ + "network": { + "title": "網路", + "githubProxy": { + "title": "GitHub 加速位址", + "subtitle": "設定下載擴充套件或者更新 AstrBot 時所用的 GitHub 加速位址。這在中國大陸的網路環境有效。可以自訂,輸入結果即時生效。所有位址均不保證穩定性,如果在更新擴充套件/專案時出現報錯,請首先檢查加速位址是否能正常使用。", + "label": "選擇 GitHub 加速位址" + }, + "proxySelector": { + "title": "GitHub 加速", + "noProxy": "不使用 GitHub 加速", + "useProxy": "使用 GitHub 加速", + "testConnection": "測試代理連線", + "available": "可用", + "unavailable": "不可用", + "custom": "自訂" + } + }, + "theme": { + "title": "主題", + "subtitle": "自訂主題主色與輔助色。修改後立即生效,並保存在瀏覽器本機。", + "customize": { + "title": "主題顏色", + "primary": "主色", + "secondary": "輔助色", + "reset": "恢復預設" + } + }, + "system": { + "title": "系統", + "restart": { + "title": "重新啟動", + "subtitle": "重新啟動 AstrBot", + "button": "重新啟動" + }, + "migration": { + "title": "資料遷移到 v4.0.0 格式", + "subtitle": "如果您遇到資料相容性問題,可以手動啟動資料庫遷移助手", + "button": "啟動遷移助手" + }, + "backup": { + "title": "資料備份與還原", + "subtitle": "匯出或匯入 AstrBot 的所有資料,方便遷移到新伺服器", + "button": "備份管理" + }, + "cleanup": { + "title": "日誌與快取清理", + "subtitle": "查看目前日誌和快取佔用,並一鍵清理。", + "refresh": "重新整理佔用", + "cleanAll": "全部清理", + "panel": { + "title": "清理詳情", + "subtitle": "目前佔用 {size}" + }, + "fileCount": "{count} 個檔案", + "confirm": "確定要清理 {target} 嗎?", + "targetNames": { + "cache": "快取", + "logs": "日誌", + "all": "日誌和快取" + }, + "targets": { + "cache": { + "title": "快取", + "subtitle": "清理暫存檔案、擴充套件市場快取和技能快取。", + "button": "清理快取" + }, + "logs": { + "title": "日誌", + "subtitle": "清理歷史日誌,並清空目前正在寫入的日誌檔案內容。", + "button": "清理日誌" + } + }, + "messages": { + "statusFailed": "載入儲存佔用失敗", + "cleanupSuccess": "已清理 {count} 個檔案,釋放 {size}", + "cleanupFailed": "清理失敗" + } + } + }, + "sidebar": { + "title": "側邊欄", + "customize": { + "title": "自訂側邊欄", + "subtitle": "拖曳以調整模組順序,或者將模組移入/移出「更多功能」分組。設定僅保存在瀏覽器本機。", + "reset": "恢復預設", + "mainItems": "主要模組", + "moreItems": "更多功能" + } + }, + "backup": { + "dialog": { + "title": "備份管理" + }, + "tabs": { + "export": "匯出備份", + "import": "匯入備份", + "list": "備份列表" + }, + "export": { + "title": "建立備份", + "description": "將所有資料匯出為 ZIP 備份檔案,包括資料庫、知識庫、設定和附件。", + "includes": "備份包含:主資料庫、知識庫(中繼資料+向量索引+文件)、設定檔、附件檔案", + "button": "開始匯出", + "processing": "正在匯出...", + "wait": "請稍候,正在打包資料...", + "completed": "匯出完成!", + "download": "下載備份", + "another": "建立新備份", + "failed": "匯出失敗", + "retry": "重試" + }, + "import": { + "title": "匯入備份", + "warning": "⚠️ 匯入將會清空並覆寫現有資料!請確保已備份目前資料。", + "selectFile": "選擇備份檔案 (.zip)", + "uploadAndCheck": "上傳並檢查", + "uploading": "正在上傳...", + "uploadWait": "請稍候,正在上傳備份檔案...", + "uploadInit": "正在初始化上傳...", + "uploadingChunks": "正在上傳分片...", + "uploadComplete": "上傳完成,正在合併檔案...", + "checking": "正在檢查備份檔案...", + "invalidBackup": "無效的備份檔案", + "backupContents": "備份內容", + "tables": "個資料表", + "knowledgeBases": "知識庫", + "configFiles": "設定檔", + "confirmImport": "確認匯入", + "button": "開始匯入", + "processing": "正在匯入...", + "wait": "請稍候,正在還原資料...", + "completed": "匯入完成!", + "restartRequired": "資料已成功匯入。建議立即重新啟動 AstrBot 以使所有變更生效。", + "restartNow": "立即重新啟動", + "failed": "匯入失敗", + "retry": "重試", + "version": { + "backupVersion": "備份版本", + "currentVersion": "目前版本", + "backupTime": "備份時間", + "matchTitle": "✅ 版本相符", + "matchMessage": "匯入將會清空並覆寫現有的所有資料,包括:\n• 主資料庫(對話紀錄、設定等)\n• 知識庫資料\n• 擴充套件及擴充套件資料\n• 設定檔\n\n此操作不可復原!是否確認繼續?", + "minorDiffTitle": "⚠️ 版本差異警告", + "minorDiffMessage": "小版本差異通常是相容的,但可能存在少量資料結構變化。\n匯入將會清空並覆寫現有的所有資料!\n\n是否確認繼續匯入?", + "majorDiffTitle": "⛔ 無法匯入", + "majorDiffMessage": "主版本號不同,跨主版本匯入可能導致資料損壞。\n請使用相同主版本的 AstrBot 進行匯入。" + } + }, + "list": { + "empty": "暫無備份檔案", + "refresh": "重新整理列表", + "confirmDelete": "確定要刪除這個備份檔案嗎?此操作不可復原。", + "uploaded": "已上傳", + "restore": "還原此備份", + "rename": "重新命名", + "renameTitle": "重新命名備份檔案", + "newName": "新檔案名稱", + "renameHint": "檔案名稱只能包含字母、數字、底線、連字號和點", + "renameRequired": "請輸入檔案名稱", + "renameInvalidChars": "檔案名稱包含非法字元", + "renameFailed": "重新命名失敗", + "ftpHint": "對於較大的備份檔案,也可以透過 FTP/SFTP 等方式直接上傳到 data/backups 目錄" + } + }, + "apiKey": { + "title": "API Key", + "manageTitle": "開發者存取密鑰", + "subtitle": "為外部開發者建立 API Key,用於呼叫開放 HTTP API。", + "name": "Key 名稱", + "expiresInDays": "有效期限", + "expiryOptions": { + "day1": "1 天", + "day7": "7 天", + "day30": "30 天", + "day90": "90 天", + "permanent": "永久" + }, + "permanentWarning": "永久有效的 API Key 風險較高,請妥善保存並建議僅在必要場景使用。", + "scopes": "權限範圍", + "create": "建立 API Key", + "revoke": "撤銷", + "delete": "刪除", + "copy": "複製", + "docsLink": "查看文件", + "plaintextHint": "請立即保存該 Key,關閉後將無法再次查看明文。", + "empty": "暫無 API Key", + "status": { + "active": "有效", + "inactive": "無效" + }, + "table": { + "name": "名稱", + "prefix": "前綴", + "scopes": "權限", + "status": "狀態", + "lastUsed": "最近使用", + "createdAt": "建立時間", + "actions": "操作" + }, + "messages": { + "loadFailed": "載入 API Key 失敗", + "scopeRequired": "請至少選擇一個權限", + "createSuccess": "API Key 建立成功", + "createFailed": "建立 API Key 失敗", + "revokeSuccess": "API Key 已撤銷", + "revokeFailed": "撤銷 API Key 失敗", + "deleteSuccess": "API Key 已刪除", + "deleteFailed": "刪除 API Key 失敗", + "copySuccess": "已複製 API Key", + "copyFailed": "複製 API Key 失敗" + } + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/subagent.json b/dashboard/src/i18n/locales/zh-TW/features/subagent.json new file mode 100644 index 0000000000..5e621a6ef4 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/subagent.json @@ -0,0 +1,66 @@ +{ + "page": { + "title": "SubAgent 編排", + "beta": "實驗性", + "subtitle": "主 LLM 可直接使用自身工具,也可透過 handoff 分派給各個 SubAgent。" + }, + "actions": { + "refresh": "重新整理", + "save": "儲存", + "add": "新增 SubAgent", + "delete": "刪除", + "close": "關閉" + }, + "switches": { + "enable": "啟用 SubAgent 編排", + "enableHint": "啟用子代理功能", + "dedupe": "主 LLM 去除重複工具(與 SubAgent 重疊的工具將被隱藏)", + "dedupeHint": "從主代理中移除重複工具" + }, + "description": { + "disabled": "不啟動:SubAgent 關閉;主 LLM 按 persona 規則掛載工具(預設全部),並直接呼叫。", + "enabled": "啟動:主 LLM 會保留自身工具並掛載 transfer_to_* 委派工具。若開啟「去除重複工具」,與 SubAgent 指定的工具重疊部分會從主 LLM 工具集中移除。" + }, + "section": { + "title": "SubAgents 設定", + "globalSettings": "全域設定" + }, + "cards": { + "statusEnabled": "啟用", + "statusDisabled": "停用", + "unnamed": "未命名 SubAgent", + "transferPrefix": "transfer_to_{name}", + "switchLabel": "啟用", + "previewTitle": "預覽:主 LLM 將看到的 handoff 工具", + "personaChip": "Persona: {id}", + "noDescription": "暫無描述" + }, + "form": { + "nameLabel": "Agent 名稱(用於 transfer_to_{name})", + "nameHint": "建議使用英文小寫+底線,且全域唯一", + "providerLabel": "Chat Provider(選填)", + "providerHint": "留空表示跟隨全域預設 provider。", + "personaLabel": "選擇人格設定", + "personaHint": "SubAgent 將直接繼承所選 Persona 的系統設定與工具。在人格設定頁管理和新建人格。", + "personaPreview": "人格預覽", + "descriptionLabel": "對主 LLM 的描述(用於決定是否 handoff)", + "descriptionHint": "這段會作為 transfer_to_* 工具的描述給主 LLM 看,建議簡短明確。" + }, + "messages": { + "loadConfigFailed": "取得設定失敗", + "loadPersonaFailed": "取得 Persona 列表失敗", + "nameMissing": "存在未填寫名稱的 SubAgent", + "nameInvalid": "SubAgent 名稱不合法:僅允許英文小寫字母/數字/底線,且需以字母開頭", + "nameDuplicate": "SubAgent 名稱重複:{name}", + "personaMissing": "SubAgent {name} 未選擇 Persona", + "saveSuccess": "儲存成功", + "saveFailed": "儲存失敗", + "nameRequired": "名稱必填", + "namePattern": "僅支援小寫字母、數字和底線" + }, + "empty": { + "title": "未設定 SubAgent", + "subtitle": "新增一個新的子代理以開始", + "action": "建立第一個 Agent" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/tool-use.json b/dashboard/src/i18n/locales/zh-TW/features/tool-use.json new file mode 100644 index 0000000000..8c347d0bee --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/tool-use.json @@ -0,0 +1,159 @@ +{ + "title": "函數工具管理", + "subtitle": "管理 MCP 伺服器和查看可用的函數工具", + "tooltip": { + "info": "函數呼叫和 MCP 是什麼?", + "marketplace": "瀏覽和安裝來自社群的 MCP 伺服器", + "serverConfig": "MCP 伺服器 (stdio) 設定支援以下欄位:\ncommand: 命令名稱 (例如 python 或 uv)\nargs: 命令參數陣列 (例如 [\"run\", \"server.py\"])\nenv: 環境變數物件 (例如 {\"api_key\": \"abc\"})\ncwd: 工作目錄路徑 (例如 /path/to/server)\nencoding: 輸出編碼 (預設 utf-8)\nencoding_error_handler: 文字編碼錯誤處理程序。預設為 strict。\n其他欄位請參考 MCP 文件\n⚠️ 如果您使用 Docker 部署 AstrBot, 請務必將 MCP 伺服器裝在 AstrBot 掛載好的 data 目錄下" + }, + "tabs": { + "local": "本機伺服器", + "marketplace": "MCP 市場" + }, + "mcpServers": { + "title": "MCP 伺服器", + "buttons": { + "refresh": "重新整理", + "add": "新增伺服器", + "useTemplateStdio": "Stdio 範本", + "useTemplateStreamableHttp": "Streamable HTTP 範本", + "useTemplateSse": "SSE 範本", + "sync": "同步伺服器" + }, + "empty": "暫無 MCP 伺服器,點擊 新增伺服器 新增", + "status": { + "noTools": "無可用工具", + "availableTools": "可用工具", + "configSummary": "設定: {keys}", + "noConfig": "未設定" + } + }, + "functionTools": { + "title": "函數工具", + "buttons": { + "view": "查看工具" + }, + "search": "搜尋函數工具", + "empty": "沒有可用的函數工具", + "description": "功能描述", + "parameters": "參數列表", + "noParameters": "此工具沒有參數", + "table": { + "paramName": "參數名", + "type": "類型", + "description": "描述", + "required": "必填", + "origin": "來源", + "originName": "來源名稱", + "actions": "操作" + } + }, + "marketplace": { + "title": "MCP 伺服器市場", + "search": "搜尋伺服器", + "buttons": { + "refresh": "重新整理", + "detail": "詳情", + "import": "匯入" + }, + "loading": "正在載入 MCP 伺服器市場...", + "empty": "暫無可用的 MCP 伺服器", + "status": { + "availableTools": "可用工具 ({count})", + "noToolsInfo": "無可用工具資訊" + } + }, + "dialogs": { + "addServer": { + "title": "新增 MCP 伺服器", + "editTitle": "編輯 MCP 伺服器", + "fields": { + "name": "伺服器名稱", + "nameRequired": "名稱為必填項", + "enable": "啟用伺服器", + "config": "伺服器設定" + }, + "errors": { + "configEmpty": "設定不能為空", + "jsonFormat": "JSON 格式錯誤: {error}", + "jsonParse": "JSON 解析錯誤: {error}" + }, + "buttons": { + "cancel": "取消", + "save": "儲存", + "testConnection": "測試連線", + "sync": "同步" + }, + "tips": { + "timeoutConfig": "工具呼叫的逾時時間請前往設定頁面單獨設定" + } + }, + "serverDetail": { + "title": "伺服器詳情", + "installConfig": "安裝設定", + "availableTools": "可用工具", + "buttons": { + "close": "關閉", + "importConfig": "匯入設定" + } + }, + "confirmDelete": "確定要刪除伺服器 {name} 嗎?", + "syncProvider": { + "title": "同步 MCP 伺服器", + "subtitle": "從供應商同步 MCP 伺服器設定到本機", + "steps": { + "selectProvider": "步驟 1: 選擇供應商", + "configureAuth": "步驟 2: 設定認證", + "syncServers": "步驟 3: 同步伺服器" + }, + "providers": { + "modelscope": "ModelScope", + "description": "ModelScope 是一個開源的模型社群,提供各種機器學習和 AI 服務的 MCP 伺服器" + }, + "fields": { + "provider": "選擇供應商", + "accessToken": "存取權杖", + "tokenRequired": "存取權杖為必填項", + "tokenHint": "請輸入您的 ModelScope 存取權杖" + }, + "buttons": { + "cancel": "取消", + "previous": "上一步", + "next": "下一步", + "sync": "開始同步", + "getToken": "取得權杖" + }, + "status": { + "selectProvider": "請選擇一個 MCP 伺服器供應商", + "enterToken": "請輸入存取權杖以繼續", + "readyToSync": "準備同步伺服器設定" + }, + "messages": { + "syncSuccess": "MCP 伺服器同步成功!", + "syncError": "同步失敗: {error}", + "tokenHelp": "如何取得 ModelScope 存取權杖?點擊右側按鈕查看說明" + } + } + }, + "messages": { + "getServersError": "取得 MCP 伺服器列表失敗: {error}", + "getToolsError": "取得函數工具列表失敗: {error}", + "saveSuccess": "儲存成功!", + "saveError": "儲存失敗: {error}", + "deleteSuccess": "刪除成功!", + "deleteError": "刪除失敗: {error}", + "updateSuccess": "更新成功!", + "updateError": "更新失敗: {error}", + "getMarketError": "取得 MCP 市場伺服器列表失敗: {error}", + "importError": { + "noConfig": "此伺服器沒有可用設定", + "invalidFormat": "伺服器設定格式不正確", + "failed": "匯入設定失敗: {error}" + }, + "configParseError": "設定解析錯誤: {error}", + "noAvailableConfig": "無可用設定", + "toggleToolSuccess": "工具狀態切換成功!", + "toggleToolError": "工具狀態切換失敗: {error}", + "testError": "測試連線失敗: {error}" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/features/trace.json b/dashboard/src/i18n/locales/zh-TW/features/trace.json new file mode 100644 index 0000000000..80d471e0ee --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/trace.json @@ -0,0 +1,10 @@ +{ + "title": "追蹤", + "autoScroll": { + "enabled": "自動捲動:開", + "disabled": "自動捲動:關" + }, + "hint": "目前僅記錄部分 AstrBot 主 Agent 的模型呼叫路徑,後續會不斷完善。", + "recording": "記錄中", + "paused": "已暫停" +} diff --git a/dashboard/src/i18n/locales/zh-TW/features/welcome.json b/dashboard/src/i18n/locales/zh-TW/features/welcome.json new file mode 100644 index 0000000000..22adce2d96 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/features/welcome.json @@ -0,0 +1,37 @@ +{ + "greeting": { + "morning": "早安,歡迎使用 AstrBot", + "afternoon": "午安,歡迎使用 AstrBot", + "evening": "晚安,歡迎使用 AstrBot", + "newYear": "新年快樂!" + }, + "subtitle": "可以先完成基礎引導,平台和對話供應商都支援稍後再設定。", + "announcement": { + "title": "公告" + }, + "onboard": { + "title": "快速引導", + "subtitle": "歡迎頁可直接完成初始化。", + "step1Title": "設定平台機器人", + "step1Desc": "將 AstrBot 連接到 QQ、飛書、企業微信、Telegram 等 IM 平台。", + "step2Title": "設定 AI 模型", + "step2Desc": "為 AstrBot 設定 AI 模型。", + "configure": "去設定", + "skip": "跳過", + "pending": "待處理", + "completed": "已完成", + "skipped": "已跳過", + "platformLoadFailed": "載入平台設定失敗", + "providerLoadFailed": "載入供應商設定失敗", + "providerUpdateFailed": "更新 default 設定檔預設對話供應商失敗", + "providerDefaultUpdated": "已將 default 設定檔的預設對話供應商設定為 {id}" + }, + "resources": { + "title": "相關資源", + "githubDesc": "給 AstrBot 點個 Star 吧!", + "docsTitle": "文件", + "docsDesc": "查閱 AstrBot 的官方文件。", + "afdianTitle": "愛發電", + "afdianDesc": "透過愛發電支持 AstrBot 團隊。" + } +} diff --git a/dashboard/src/i18n/locales/zh-TW/messages/errors.json b/dashboard/src/i18n/locales/zh-TW/messages/errors.json new file mode 100644 index 0000000000..9069c41a17 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/messages/errors.json @@ -0,0 +1,39 @@ +{ + "network": { + "timeout": "網路請求逾時,請稍後重試", + "connection": "網路連線失敗,請檢查網路狀態", + "server": "伺服器錯誤,請聯絡技術支援", + "unavailable": "服務暫不可用", + "forbidden": "存取被拒絕" + }, + "validation": { + "required": "此欄位為必填項", + "invalid": "輸入格式不正確", + "tooLong": "輸入內容過長", + "tooShort": "輸入內容過短", + "email": "請輸入有效的電子郵件地址", + "url": "請輸入有效的 URL 地址", + "number": "請輸入有效的數字" + }, + "auth": { + "unauthorized": "未授權存取,請重新登入", + "forbidden": "權限不足,無法執行此操作", + "tokenExpired": "登入已過期,請重新登入", + "invalidCredentials": "使用者名稱或密碼錯誤" + }, + "file": { + "uploadFailed": "檔案上傳失敗", + "invalidFormat": "不支援的檔案格式", + "tooLarge": "檔案大小超出限制", + "notFound": "找不到檔案" + }, + "operation": { + "failed": "操作失敗", + "cancelled": "操作已取消", + "notSupported": "不支援此操作", + "conflict": "操作衝突,請稍後重試" + }, + "browser": { + "audioNotSupported": "您的瀏覽器不支援音訊播放。" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/messages/success.json b/dashboard/src/i18n/locales/zh-TW/messages/success.json new file mode 100644 index 0000000000..21d9982792 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/messages/success.json @@ -0,0 +1,23 @@ +{ + "operation": { + "saved": "儲存成功", + "created": "建立成功", + "updated": "更新成功", + "deleted": "刪除成功", + "uploaded": "上傳成功", + "downloaded": "下載成功", + "imported": "匯入成功", + "exported": "匯出成功", + "copied": "複製成功", + "sent": "發送成功" + }, + "connection": { + "connected": "連線成功", + "authenticated": "登入成功", + "synchronized": "同步成功" + }, + "validation": { + "valid": "驗證通過", + "completed": "操作完成" + } +} \ No newline at end of file diff --git a/dashboard/src/i18n/locales/zh-TW/messages/validation.json b/dashboard/src/i18n/locales/zh-TW/messages/validation.json new file mode 100644 index 0000000000..a0cd51b9a9 --- /dev/null +++ b/dashboard/src/i18n/locales/zh-TW/messages/validation.json @@ -0,0 +1,25 @@ +{ + "required": "此欄位為必填項", + "email": "請輸入有效的電子郵件地址", + "url": "請輸入有效的 URL 地址", + "number": "請輸入有效的數字", + "min": "最小值為 {min}", + "max": "最大值為 {max}", + "minLength": "至少需要 {length} 個字元", + "maxLength": "最多允許 {length} 個字元", + "pattern": "格式不正確", + "unique": "該值已存在", + "confirm": "兩次輸入不一致", + "fileSize": "檔案大小不能超過 {size}MB", + "fileType": "不支援的檔案類型", + "required_field": "請填寫必填欄位", + "invalid_format": "格式無效", + "password_too_short": "密碼至少需要 8 個字元", + "password_too_weak": "密碼強度太弱", + "invalid_phone": "請輸入有效的手機號碼", + "invalid_date": "請輸入有效的日期", + "date_range": "日期範圍無效", + "upload_failed": "檔案上傳失敗", + "network_error": "網路連線錯誤,請重試", + "operation_cannot_be_undone": "⚠️ 此操作無法復原,請謹慎選擇!" +} \ No newline at end of file diff --git a/dashboard/src/i18n/translations.ts b/dashboard/src/i18n/translations.ts index fa15e619ff..28d1f7182b 100644 --- a/dashboard/src/i18n/translations.ts +++ b/dashboard/src/i18n/translations.ts @@ -42,6 +42,88 @@ import zhCNErrors from './locales/zh-CN/messages/errors.json'; import zhCNSuccess from './locales/zh-CN/messages/success.json'; import zhCNValidation from './locales/zh-CN/messages/validation.json'; +// Traditional Chinese translation (Hong Kong) +import zhHKCommon from './locales/zh-HK/core/common.json'; +import zhHKActions from './locales/zh-HK/core/actions.json'; +import zhHKStatus from './locales/zh-HK/core/status.json'; +import zhHKNavigation from './locales/zh-HK/core/navigation.json'; +import zhHKHeader from './locales/zh-HK/core/header.json'; +import zhHKShared from './locales/zh-HK/core/shared.json'; + +import zhHKChat from './locales/zh-HK/features/chat.json'; +import zhHKExtension from './locales/zh-HK/features/extension.json'; +import zhHKConversation from './locales/zh-HK/features/conversation.json'; +import zhHKSessionManagement from './locales/zh-HK/features/session-management.json'; +import zhHKToolUse from './locales/zh-HK/features/tool-use.json'; +import zhHKProvider from './locales/zh-HK/features/provider.json'; +import zhHKPlatform from './locales/zh-HK/features/platform.json'; +import zhHKConfig from './locales/zh-HK/features/config.json'; +import zhHKConfigMetadata from './locales/zh-HK/features/config-metadata.json'; +import zhHKConsole from './locales/zh-HK/features/console.json'; +import zhHKTrace from './locales/zh-HK/features/trace.json'; +import zhHKAbout from './locales/zh-HK/features/about.json'; +import zhHKSettings from './locales/zh-HK/features/settings.json'; +import zhHKAuth from './locales/zh-HK/features/auth.json'; +import zhHKChart from './locales/zh-HK/features/chart.json'; +import zhHKDashboard from './locales/zh-HK/features/dashboard.json'; +import zhHKCron from './locales/zh-HK/features/cron.json'; +import zhHKAlkaidIndex from './locales/zh-HK/features/alkaid/index.json'; +import zhHKAlkaidKnowledgeBase from './locales/zh-HK/features/alkaid/knowledge-base.json'; +import zhHKAlkaidMemory from './locales/zh-HK/features/alkaid/memory.json'; +import zhHKKnowledgeBaseIndex from './locales/zh-HK/features/knowledge-base/index.json'; +import zhHKKnowledgeBaseDetail from './locales/zh-HK/features/knowledge-base/detail.json'; +import zhHKKnowledgeBaseDocument from './locales/zh-HK/features/knowledge-base/document.json'; +import zhHKPersona from './locales/zh-HK/features/persona.json'; +import zhHKMigration from './locales/zh-HK/features/migration.json'; +import zhHKCommand from './locales/zh-HK/features/command.json'; +import zhHKSubagent from './locales/zh-HK/features/subagent.json'; +import zhHKWelcome from './locales/zh-HK/features/welcome.json'; + +import zhHKErrors from './locales/zh-HK/messages/errors.json'; +import zhHKSuccess from './locales/zh-HK/messages/success.json'; +import zhHKValidation from './locales/zh-HK/messages/validation.json'; + +// Traditional Chinese translation (Taiwan) +import zhTWCommon from './locales/zh-TW/core/common.json'; +import zhTWActions from './locales/zh-TW/core/actions.json'; +import zhTWStatus from './locales/zh-TW/core/status.json'; +import zhTWNavigation from './locales/zh-TW/core/navigation.json'; +import zhTWHeader from './locales/zh-TW/core/header.json'; +import zhTWShared from './locales/zh-TW/core/shared.json'; + +import zhTWChat from './locales/zh-TW/features/chat.json'; +import zhTWExtension from './locales/zh-TW/features/extension.json'; +import zhTWConversation from './locales/zh-TW/features/conversation.json'; +import zhTWSessionManagement from './locales/zh-TW/features/session-management.json'; +import zhTWToolUse from './locales/zh-TW/features/tool-use.json'; +import zhTWProvider from './locales/zh-TW/features/provider.json'; +import zhTWPlatform from './locales/zh-TW/features/platform.json'; +import zhTWConfig from './locales/zh-TW/features/config.json'; +import zhTWConfigMetadata from './locales/zh-TW/features/config-metadata.json'; +import zhTWConsole from './locales/zh-TW/features/console.json'; +import zhTWTrace from './locales/zh-TW/features/trace.json'; +import zhTWAbout from './locales/zh-TW/features/about.json'; +import zhTWSettings from './locales/zh-TW/features/settings.json'; +import zhTWAuth from './locales/zh-TW/features/auth.json'; +import zhTWChart from './locales/zh-TW/features/chart.json'; +import zhTWDashboard from './locales/zh-TW/features/dashboard.json'; +import zhTWCron from './locales/zh-TW/features/cron.json'; +import zhTWAlkaidIndex from './locales/zh-TW/features/alkaid/index.json'; +import zhTWAlkaidKnowledgeBase from './locales/zh-TW/features/alkaid/knowledge-base.json'; +import zhTWAlkaidMemory from './locales/zh-TW/features/alkaid/memory.json'; +import zhTWKnowledgeBaseIndex from './locales/zh-TW/features/knowledge-base/index.json'; +import zhTWKnowledgeBaseDetail from './locales/zh-TW/features/knowledge-base/detail.json'; +import zhTWKnowledgeBaseDocument from './locales/zh-TW/features/knowledge-base/document.json'; +import zhTWPersona from './locales/zh-TW/features/persona.json'; +import zhTWMigration from './locales/zh-TW/features/migration.json'; +import zhTWCommand from './locales/zh-TW/features/command.json'; +import zhTWSubagent from './locales/zh-TW/features/subagent.json'; +import zhTWWelcome from './locales/zh-TW/features/welcome.json'; + +import zhTWErrors from './locales/zh-TW/messages/errors.json'; +import zhTWSuccess from './locales/zh-TW/messages/success.json'; +import zhTWValidation from './locales/zh-TW/messages/validation.json'; + // English translation import enUSCommon from './locales/en-US/core/common.json'; import enUSActions from './locales/en-US/core/actions.json'; @@ -175,6 +257,104 @@ export const translations = { validation: zhCNValidation } }, + 'zh-HK': { + core: { + common: zhHKCommon, + actions: zhHKActions, + status: zhHKStatus, + navigation: zhHKNavigation, + header: zhHKHeader, + shared: zhHKShared + }, + features: { + chat: zhHKChat, + extension: zhHKExtension, + conversation: zhHKConversation, + 'session-management': zhHKSessionManagement, + tooluse: zhHKToolUse, + provider: zhHKProvider, + platform: zhHKPlatform, + config: zhHKConfig, + 'config-metadata': zhHKConfigMetadata, + console: zhHKConsole, + trace: zhHKTrace, + about: zhHKAbout, + settings: zhHKSettings, + auth: zhHKAuth, + chart: zhHKChart, + dashboard: zhHKDashboard, + cron: zhHKCron, + alkaid: { + index: zhHKAlkaidIndex, + 'knowledge-base': zhHKAlkaidKnowledgeBase, + memory: zhHKAlkaidMemory + }, + 'knowledge-base': { + index: zhHKKnowledgeBaseIndex, + detail: zhHKKnowledgeBaseDetail, + document: zhHKKnowledgeBaseDocument + }, + persona: zhHKPersona, + migration: zhHKMigration, + command: zhHKCommand, + subagent: zhHKSubagent, + welcome: zhHKWelcome + }, + messages: { + errors: zhHKErrors, + success: zhHKSuccess, + validation: zhHKValidation + } + }, + 'zh-TW': { + core: { + common: zhTWCommon, + actions: zhTWActions, + status: zhTWStatus, + navigation: zhTWNavigation, + header: zhTWHeader, + shared: zhTWShared + }, + features: { + chat: zhTWChat, + extension: zhTWExtension, + conversation: zhTWConversation, + 'session-management': zhTWSessionManagement, + tooluse: zhTWToolUse, + provider: zhTWProvider, + platform: zhTWPlatform, + config: zhTWConfig, + 'config-metadata': zhTWConfigMetadata, + console: zhTWConsole, + trace: zhTWTrace, + about: zhTWAbout, + settings: zhTWSettings, + auth: zhTWAuth, + chart: zhTWChart, + dashboard: zhTWDashboard, + cron: zhTWCron, + alkaid: { + index: zhTWAlkaidIndex, + 'knowledge-base': zhTWAlkaidKnowledgeBase, + memory: zhTWAlkaidMemory + }, + 'knowledge-base': { + index: zhTWKnowledgeBaseIndex, + detail: zhTWKnowledgeBaseDetail, + document: zhTWKnowledgeBaseDocument + }, + persona: zhTWPersona, + migration: zhTWMigration, + command: zhTWCommand, + subagent: zhTWSubagent, + welcome: zhTWWelcome + }, + messages: { + errors: zhTWErrors, + success: zhTWSuccess, + validation: zhTWValidation + } + }, 'en-US': { core: { common: enUSCommon,