From 61075282becc8c077c742125b04505934aadeeab Mon Sep 17 00:00:00 2001 From: leonoxo Date: Fri, 14 Aug 2026 13:32:51 +0800 Subject: [PATCH 1/7] feat(i18n): add Traditional Chinese (zh-TW) locale support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add zh-TW.ts locale bundle with full Traditional Chinese (Taiwan) translations - Register zh-TW in i18n index, locale audit, and default locale resolver - Add zh-TW to TDesign component locale mapping in App.vue - Add zh-TW language option in Login, General Settings, and Embed Channel panels - Add zh-TW/zh-Hant detection in embed locale normalizer - Align terminology with Taiwan usage (帳號, 伺服器, 佇列, 閘道器, 權杖, etc.) --- frontend/src/App.vue | 2 + .../src/components/AgentEmbedChannelPanel.vue | 1 + frontend/src/i18n/embed.ts | 3 +- frontend/src/i18n/index.ts | 2 + frontend/src/i18n/localeKeyAudit.ts | 4 +- frontend/src/i18n/locales/zh-TW.ts | 6358 +++++++++++++++++ frontend/src/i18n/resolveDefaultLocale.ts | 2 +- frontend/src/views/auth/Login.vue | 1 + .../src/views/settings/GeneralSettings.vue | 1 + 9 files changed, 6371 insertions(+), 3 deletions(-) create mode 100755 frontend/src/i18n/locales/zh-TW.ts diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 75dcc68b7b..dbbe56d804 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -16,6 +16,7 @@ import { renderWorkspaceNotifyContent } from '@/utils/workspaceNotifyContent' // TDesign locale configs import enUSConfig from 'tdesign-vue-next/esm/locale/en_US' import zhCNConfig from 'tdesign-vue-next/esm/locale/zh_CN' +import zhTWConfig from 'tdesign-vue-next/esm/locale/zh_TW' import koKRConfig from 'tdesign-vue-next/esm/locale/ko_KR' import ruRUConfig from 'tdesign-vue-next/esm/locale/ru_RU' @@ -28,6 +29,7 @@ const settingsStore = useSettingsStore() const tdLocaleMap: Record = { 'en-US': enUSConfig, 'zh-CN': zhCNConfig, + 'zh-TW': zhTWConfig, 'ko-KR': koKRConfig, 'ru-RU': ruRUConfig, } diff --git a/frontend/src/components/AgentEmbedChannelPanel.vue b/frontend/src/components/AgentEmbedChannelPanel.vue index a3e1ab013b..37cc1beb44 100644 --- a/frontend/src/components/AgentEmbedChannelPanel.vue +++ b/frontend/src/components/AgentEmbedChannelPanel.vue @@ -536,6 +536,7 @@ const headerTitleModeOptions = computed(() => ([ const defaultLocaleOptions = computed(() => ([ { label: t('embedPublish.defaultLocaleBrowser'), value: '' }, { label: '简体中文', value: 'zh-CN' }, + { label: '繁體中文', value: 'zh-TW' }, { label: 'English', value: 'en-US' }, { label: '한국어', value: 'ko-KR' }, { label: 'Русский', value: 'ru-RU' }, diff --git a/frontend/src/i18n/embed.ts b/frontend/src/i18n/embed.ts index a0162bf983..bbf7e7eea3 100644 --- a/frontend/src/i18n/embed.ts +++ b/frontend/src/i18n/embed.ts @@ -1202,7 +1202,7 @@ const ruEmbedPublish = { }, } as const -const SUPPORTED_LOCALES = ['zh-CN', 'en-US', 'ko-KR', 'ru-RU'] as const +const SUPPORTED_LOCALES = ['zh-CN', 'zh-TW', 'en-US', 'ko-KR', 'ru-RU'] as const export type EmbedLocale = (typeof SUPPORTED_LOCALES)[number] /** Isolated from the main app `locale` key so embed preview never hijacks admin UI language. */ @@ -1214,6 +1214,7 @@ export function normalizeEmbedLocale(raw: string): EmbedLocale { if (s.startsWith('en')) return 'en-US' if (s.startsWith('ko')) return 'ko-KR' if (s.startsWith('ru')) return 'ru-RU' + if (s === 'zh-tw' || s === 'zh-hant') return 'zh-TW' if (s.startsWith('zh')) return 'zh-CN' const exact = SUPPORTED_LOCALES.find((l) => l.toLowerCase() === s) return exact || 'zh-CN' diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts index f7820402ea..8889461817 100755 --- a/frontend/src/i18n/index.ts +++ b/frontend/src/i18n/index.ts @@ -1,5 +1,6 @@ import { createI18n } from 'vue-i18n' import zhCN from './locales/zh-CN.ts' +import zhTW from './locales/zh-TW.ts' import ruRU from './locales/ru-RU.ts' import enUS from './locales/en-US.ts' import koKR from './locales/ko-KR.ts' @@ -7,6 +8,7 @@ import { BUILT_IN_DEFAULT, resolveDefaultLocale } from './resolveDefaultLocale.t const messages = { 'zh-CN': zhCN, + 'zh-TW': zhTW, 'en-US': enUS, 'ru-RU': ruRU, 'ko-KR': koKR diff --git a/frontend/src/i18n/localeKeyAudit.ts b/frontend/src/i18n/localeKeyAudit.ts index 0cb915f389..60ed715652 100644 --- a/frontend/src/i18n/localeKeyAudit.ts +++ b/frontend/src/i18n/localeKeyAudit.ts @@ -20,10 +20,12 @@ import enUS from './locales/en-US.ts' import koKR from './locales/ko-KR.ts' import ruRU from './locales/ru-RU.ts' import zhCN from './locales/zh-CN.ts' +import zhTW from './locales/zh-TW.ts' export const LOCALE_BUNDLES = { 'en-US': enUS, 'zh-CN': zhCN, + 'zh-TW': zhTW, 'ko-KR': koKR, 'ru-RU': ruRU, } as const @@ -512,7 +514,7 @@ export function findAllLocaleMessageCompileErrors( type LocaleTree = Record -const LOCALE_ORDER: LocaleName[] = ['en-US', 'zh-CN', 'ko-KR', 'ru-RU'] +const LOCALE_ORDER: LocaleName[] = ['en-US', 'zh-CN', 'zh-TW', 'ko-KR', 'ru-RU'] const LOCALES_DIR = join(dirname(fileURLToPath(import.meta.url)), 'locales') function getLocaleValueAtPathParts(current: unknown, parts: string[]): unknown { diff --git a/frontend/src/i18n/locales/zh-TW.ts b/frontend/src/i18n/locales/zh-TW.ts new file mode 100755 index 0000000000..96b5cd2064 --- /dev/null +++ b/frontend/src/i18n/locales/zh-TW.ts @@ -0,0 +1,6358 @@ +export default { + platformApiKeys: { + title: '平台 API Key', + description: '爲跨空間自動化建立平台級憑證;調用空間接口時通過 X-Tenant-ID 指定目標空間。', + securityNotice: '平台 API Key 默認可選擇任意空間。請只授予必要能力;金鑰明文僅在建立時顯示一次。', + create: '建立平台 API Key', + createDescription: '平台 Key 不綁定空間,所有操作仍受能力範圍限制。', + loading: '正在加載…', + empty: '暫無平台 API Key', + name: '名稱', + namePlaceholder: '例如:集中運維自動化', + key: '金鑰', + capability: '能力授權', + capabilityMore: '+{count}', + viewAllCapabilities: '查看全部能力授權', + capabilityHint: '空間能力對任意 X-Tenant-ID 生效;系統能力用於平台控制面接口。', + lastUsed: '最後使用', + createdAt: '建立時間', + actions: '操作', + never: '從未使用', + systemCapabilityGroup: '平台控制面', + createdTitle: '平台 API Key 已建立', + createdDescription: '請立即複製並安全保存。關閉後將不再顯示完整金鑰。', + copy: '複製金鑰', + copySuccess: '金鑰已複製', + deleteConfirm: '確定刪除“{name}”嗎?使用該 Key 的自動化將立即失效。', + deleteSuccess: '平台 API Key 已刪除', + deleteFailed: '刪除平台 API Key 失敗', + nameRequired: '請輸入名稱', + capabilityRequired: '請至少選擇一項能力', + loadFailed: '加載平台 API Key 失敗', + createFailed: '建立平台 API Key 失敗', + capabilityHints: { + tenantsRead: '列出、搜尋和查看所有空間。', + tenantsManage: '建立、更新、刪除空間及應用全局空間配置。', + settingsRead: '讀取平台級運行設置。', + settingsManage: '更新和重置平台級運行設置。', + runtimeRead: '查看任務佇列和任務詳情。', + runtimeManage: '重試、立即執行、取消或刪除運行時任務。', + auditRead: '讀取平台級審計日誌。' + }, + capabilities: { + tenantsRead: '查看空間', + tenantsManage: '管理空間', + settingsRead: '查看系統設置', + settingsManage: '管理系統設置', + runtimeRead: '查看運行時', + runtimeManage: '管理運行時', + auditRead: '查看系統審計' + } + }, + tenantInvitation: { + inboxTooltip: '查看待接受的邀請', + pendingSectionTitle: '待接受的邀請', + pendingSectionDesc: '發出後等待對方在站內確認。{days} 天未響應將自動過期。', + pendingEmpty: '暫無待接受的邀請。', + inviteSubmit: '發送邀請', + inviteSuccess: '邀請已發出,等待對方接受。', + confirmInviteTitle: '確認發送邀請?', + confirmInviteBody: '將向 {email} 發出加入邀請(角色:{role})。TA 在站內接受後纔會成爲成員。', + confirmSend: '發送', + copyLink: '複製邀請鏈接', + copied: '已複製到剪貼板', + copyFailed: '複製失敗,請手動選中文本', + errors: { + pendingExists: '已經向該用戶發出過一條待接受的邀請。', + alreadyMember: '該用戶已是當前空間的成員。', + notPending: '邀請已不在待處理狀態。', + forbidden: '只有被邀請人本人可以接受或拒絕該邀請。', + notFound: '邀請不存在或已被撤銷。', + generic: '操作失敗,請稍後重試。' + }, + myInbox: { + title: '我的邀請', + description: '其他空間發給您的加入邀請。接受後您將以對應角色加入對方空間。', + empty: '沒有待處理的邀請。', + acceptButton: '接受', + declineButton: '拒絕', + acceptSuccess: '已加入 "{tenant}"。', + declineSuccess: '已拒絕邀請。', + from: '邀請人', + tenantLabel: '空間', + expiresIn: '到期:{date}', + messageLabel: '留言' + }, + status: { + pending: '待接受', + shareLinkActive: '生效中', + accepted: '已接受', + declined: '已拒絕', + revoked: '已撤銷', + expired: '已過期' + }, + columns: { + invitee: '被邀請人', + role: '角色', + inviter: '邀請人', + expiresAt: '到期時間', + status: '狀態', + operations: '操作' + }, + revoke: { + button: '撤銷', + confirmBody: '撤銷後,{email} 將無法再接受此邀請;如需再邀請請重新發出。', + confirm: '撤銷', + success: '邀請已撤銷。' + }, + shareLink: { + button: '生成共享鏈接', + cellTitle: '通過鏈接邀請', + cellAccepted: '已加入 {count} 人', + cellEmpty: '尚無成員加入', + dialogTitle: '生成共享邀請鏈接', + description: '生成一條多人可用的註冊鏈接,發到群裡就行;誰打開都能用自己的信箱註冊並加入當前空間。鏈接 {days} 天后過期,或隨時可在列表中撤銷。', + generate: '生成鏈接', + resultTitle: '邀請鏈接已生成', + resultBody: '複製下方鏈接,通過任意私密渠道發給被邀請人。鏈接也會保存在下方列表中,隨時可以重新複製或撤銷。', + revokeConfirm: '撤銷後,所有還未註冊的人都無法再使用此鏈接;如需重發請生成新鏈接。' + } + }, + tenantMember: { + title: '成員管理', + sectionDescription: '邀請夥伴加入當前空間並分配角色。只有 Owner 可以新增或移除成員。', + learnRbacGuide: '瞭解 RBAC', + listTitle: '空間成員', + loading: '正在加載成員…', + retry: '重試', + empty: '尚未邀請任何成員。點擊右上角邀請夥伴加入。', + emptySearch: '沒有匹配 "{q}" 的成員。', + searchPlaceholder: '按姓名或信箱搜尋', + audit: { + tabLabel: '審計日誌', + description: '記錄當前空間的成員變更與訪問拒絕事件,按時間倒序展示。一分鐘內的重複拒絕會自動去重。', + refresh: '刷新', + end: '已經到底了。', + empty: '暫無審計事件。', + forbidden: '無權查看審計日誌。', + systemActor: '系統', + requiredRole: '需要角色:{role}', + expanded: { + actorId: '操作人 ID', + targetUserId: '目標用戶 ID', + targetType: '目標類型', + targetId: '目標 ID', + details: '原始詳情' + }, + outcome: { + success: '成功', + denied: '拒絕' + }, + action: { + 'rbac.member_added': '新增成員', + 'rbac.member_removed': '移除成員', + 'rbac.member_role_changed': '角色變更', + 'rbac.member_left': '成員退出', + 'rbac.access_denied': '訪問被拒', + 'rbac.invitation_sent': '發出邀請', + 'rbac.invitation_accepted': '接受邀請', + 'rbac.invitation_declined': '拒絕邀請', + 'rbac.invitation_revoked': '撤銷邀請', + 'rbac.invitation_expired': '邀請過期' + }, + columns: { + time: '時間', + actor: '操作人', + action: '事件', + target: '目標', + path: '請求', + outcome: '結果' + } + }, + errors: { + emailRequired: '請輸入信箱', + emailFormat: '信箱格式不正確', + roleRequired: '請選擇角色', + userNotFound: '該信箱尚未註冊,請先邀請對方註冊帳號。', + lastOwner: '無法降級、移除或退出最後一位 Owner,請先把其他成員提升爲 Owner。', + notFound: '未找到對應的成員。', + invalidRole: '角色必須是 owner / admin / contributor / viewer 之一。', + generic: '操作失敗,請稍後重試。' + }, + roleChange: { + success: '角色已更新' + }, + leave: { + confirmTitle: '確認退出當前空間?', + confirmBody: '退出後您將無法訪問當前空間內的所有知識庫和智能體。後續可被再次邀請加入。', + confirm: '退出', + success: '已退出當前空間' + }, + remove: { + button: '移除', + confirmBody: '確定要將 {name} 從當前空間中移除嗎?該用戶會立即失去訪問權限。', + confirm: '移除', + success: '已移除成員' + }, + add: { + button: '邀請成員', + dialogTitle: '邀請成員', + emailLabel: '信箱', + emailPlaceholder: 'invitee{\'@\'}example.com', + roleLabel: '角色' + }, + role: { + owner: '所有者', + admin: '管理員', + contributor: '編輯', + viewer: '訪客' + }, + columns: { + member: '姓名與信箱', + role: '角色', + joinedAt: '加入時間', + operations: '操作' + }, + permissions: { + title: '角色權限說明', + desc: '每個角色在當前空間內能做的事情。服務端強制執行,UI 控件僅作展示。', + iconHint: '懸停查看角色權限說明', + manageMembers: '管理成員', + manageTenantConfig: '修改空間配置', + manageInfra: '配置模型 / 向量庫 / IM 通道', + createOwnKB: '建立並編輯自己的知識庫和智能體', + readAll: '查看空間內容' + } + }, + userProfile: { + title: '用戶信息', + description: '查看您的帳號基礎信息(用戶 ID、用戶名、信箱、註冊時間),並可修改登錄密碼', + changePassword: { + label: '修改密碼', + description: '使用當前密碼驗證後設置新密碼。修改成功後所有設備上的登錄狀態將失效,需要重新登錄。', + currentLabel: '當前密碼', + currentPlaceholder: '請輸入當前密碼', + currentRequired: '請輸入當前密碼', + newLabel: '新密碼', + newPlaceholder: '8-32 個字符,需包含字母和數字', + confirmLabel: '確認新密碼', + confirmPlaceholder: '再次輸入新密碼', + submit: '更新密碼', + success: '密碼已更新,請使用新密碼重新登錄', + failed: '修改密碼失敗,請檢查當前密碼是否正確', + policyFailed: '新密碼須爲 8-32 個字符,且同時包含字母和數字', + sameAsCurrent: '新密碼不能與當前密碼相同', + oidcOnlyDescription: '您的帳號通過 OIDC 登錄開通,尚未設置本地登錄密碼。', + oidcOnlyNotice: '請聯繫系統管理員重置密碼,或繼續使用 OIDC 登錄。自助修改密碼需要先知道當前密碼。', + }, + }, + credential: { + configured: '已配置', + unconfigured: '未配置', + configure: '配置', + update: '更換', + remove: '移除', + inputPlaceholder: '請輸入', + savedToast: '憑證已保存', + saveFailed: '保存憑證失敗', + removedToast: '憑證已移除', + removeFailed: '移除憑證失敗', + confirmRemovePrompt: '確認移除?此操作不可撤銷', + confirmRemove: '確認移除' + }, + integrations: { + title: '發佈集成', + selectAgentPlaceholder: '請選擇智能體', + selectAgentHint: '請先選擇一個智能體', + boundAgent: '綁定智能體', + filterByAgent: '按智能體篩選', + filterByAgentWithName: '按智能體篩選:{name}', + filterAllAgents: '全部智能體', + claw: { + title: 'WeKnora Skill', + subtitle: '通過 WeKnora REST API 導入文檔並執行混合檢索(向量 + 關鍵詞)。適用於上傳文件/URL/Markdown 到知識庫、跨庫檢索與瀏覽知識內容。', + capabilitiesTitle: 'Skill 能力', + stepsTitle: '配置步驟', + openApiSettings: '打開 API 信息', + copy: '複製', + copyEnvSuccess: '已複製環境變數示例', + copyCmdSuccess: '已複製安裝命令', + ecosystemNote: 'Skill 託管於 ClawHub({\'@\'}lyingbug/weknora),完整 API 說明與版本歷史請參見 ClawHub 頁面。', + installCta: '前往 ClawHub', + installCtaHint: '安裝 WeKnora Skill · 將在新標籤頁打開', + hubMeta: 'ClawHub · {\'@\'}lyingbug/weknora · MIT-0', + steps: { + verify: { + title: '驗證連接', + desc: '安裝後讓 Agent 列出知識庫或執行一次檢索,確認 API 憑證與網絡可達。' + }, + install: { + title: '安裝 Skill', + desc: '在已安裝 OpenClaw CLI 的環境中執行下方命令,或前往 ClawHub 頁面按指引安裝。' + }, + env: { + title: '配置環境變數', + desc: '在終端或 ~/.zshrc、~/.bashrc 中設置 WEKNORA_BASE_URL 與 WEKNORA_API_KEY。下方示例已填入當前 API 地址,請將 API Key 替換爲實際值。' + }, + api: { + title: '獲取 API 憑證', + desc: '在「設置 → API 信息」中複製 API Key 與 API 地址。' + } + }, + capabilities: { + browse: { + title: '瀏覽知識庫', + desc: '列出知識庫與條目、查看詳情,管理已導入的知識內容。' + }, + search: { + title: '混合檢索', + desc: '單庫 hybrid-search 與跨庫 knowledge-search,結合向量與關鍵詞召回。' + }, + manual: { + title: '寫入 Markdown', + desc: '以 Markdown 形式建立或編輯知識條目,適合會議記錄與結構化筆記。' + }, + url: { + title: '導入網頁', + desc: '通過 URL 抓取網頁內容並寫入知識庫,支持解析狀態輪詢。' + }, + upload: { + title: '上傳文件', + desc: '將 PDF、Word、Excel 等文檔上傳至知識庫,自動解析與向量化。' + } + } + }, + chrome: { + title: '知識管理助手', + subtitle: '配合 WeKnora 自建服務使用:在任意網頁側邊欄提問、剪藏內容、Markdown 速記,將瀏覽中的知識沉澱到你的知識庫。', + capabilitiesTitle: '核心能力', + stepsTitle: '配置步驟', + openApiSettings: '打開 API 信息', + copy: '複製', + copySuccess: '已複製 API 地址', + installCta: '前往 Chrome 應用商店', + installCtaHint: '官方擴展 · 將在新標籤頁打開', + storeMeta: 'Chrome 應用商店 · v1.0.0', + steps: { + connect: { + title: '在插件中完成連接', + desc: '打開插件設置,選擇「企業/開發者」模式,填入服務 API 地址與 API Key。下方爲當前服務地址。' + }, + install: { + title: '安裝 Chrome 插件', + desc: '前往 Chrome 應用商店安裝「知識管理助手」。' + }, + port: { + title: '桌面版配置固定端口(推薦)', + desc: '使用 WeKnora 桌面版時,在 API 信息中設置固定端口(如 37841),避免每次啓動後地址變化導致插件斷連。' + }, + api: { + title: '獲取 API 憑證', + desc: '在「設置 → API 信息」中複製 API Key 與 API 地址。' + } + }, + scenarios: { + research: '日常資料調研', + learning: '學習筆記整理', + tech: '技術資料收集', + work: '工作知識沉澱' + }, + capabilities: { + shortcuts: { + title: '高效快捷鍵', + desc: '可自定義快捷鍵快速提問、打開側邊欄等操作,提升日常效率。' + }, + notes: { + title: 'Markdown 速記', + desc: '內置 Markdown 編輯器,隨時記錄靈感與筆記,一鍵保存到知識庫。' + }, + clip: { + title: '網頁內容一鍵採集', + desc: '保存頁面 URL、AI 智能剪藏正文,或手動框選區域,精準寫入指定知識庫。' + }, + qa: { + title: '知識庫智能問答', + desc: '側邊欄對話面板,支持多知識庫切換與快速/深度/精確三種回答模式,邊瀏覽邊提問不打斷工作流。' + } + } + }, + agentEditor: { + label: '發佈渠道', + desc: '將智能體發佈到 IM 平台或網站,在集成中心統一管理' + }, + embedOverview: { + title: '網頁嵌入渠道' + }, + imOverview: { + title: '已接入的 IM' + }, + api: { + title: 'API 集成', + subtitle: '通過 REST API 接入服務,並配置請求如何攜帶終端用戶身份。', + loading: '正在加載 API 集成設置...', + retry: '重試', + copy: '複製', + copySuccess: '已複製', + baseUrl: 'API 地址', + baseUrlDesc: '與 REST API 路徑拼接使用。', + apiKeys: 'API Keys', + apiKeysDesc: '爲不同集成建立獨立 Key,並限制操作權限與可訪問知識庫範圍。', + createApiKey: '建立 API Key', + createApiKeyDialogDesc: '選擇該 API Key 可用的能力和知識庫範圍。', + noApiKeys: '暫無 API Key', + apiKeyName: '名稱', + apiKeyValue: 'API Key', + apiKeyNamePlaceholder: '例如:MCP 只讀訪問', + apiKeyNameRequired: '請輸入 API Key 名稱', + apiKeyCapabilitiesRequired: 'Scoped API Key 至少需要選擇一項能力', + apiKeyAccessMode: '授權方式', + apiKeyScopedAccess: '能力授權', + apiKeyAccessType: '訪問類型', + apiKeyAccessTypeHint: '「知識庫」按下方權限級別在知識庫範圍內操作;「空間完全訪問」額外開放模型、資料源等全部空間級接口。', + apiKeyCapabilities: '可用能力', + apiKeyCapabilityGroupKnowledge: '知識庫資料', + apiKeyCapabilityGroupAutomation: '智能體與集成', + apiKeyCapabilityGroupCollaboration: '成員與空間', + apiKeyCapabilityGroupTenant: '空間配置', + apiKeyCapabilitySelectGroup: '全選', + apiKeyCapabilityClearGroup: '清空', + capabilityTenantFull: '空間完全訪問', + capabilityTenantFullHint: '允許調用模型、向量庫、資料源、渠道等全部空間級接口;知識庫範圍不再生效。', + capabilityRetrieve: '檢索知識庫', + capabilityRetrieveHint: '允許讀取、查詢和檢索所選知識庫範圍內的資料;不建立會話,也不修改內容。', + capabilityChat: '對話能力', + capabilityChatHint: '允許該金鑰發起對話並管理自己的會話;不修改知識庫內容。', + capabilityReadAgents: '讀取智能體', + capabilityReadAgentsHint: '允許列出智能體、查看智能體詳情、讀取智能體預設和建議問題;不允許發起對話或修改智能體。', + capabilityIngest: '寫入知識庫內容', + capabilityIngestHint: '允許向授權範圍內的知識庫寫入內容(上傳文檔、編輯分塊/FAQ/標籤/wiki);不能新建知識庫、不能新建智能體、不能清空知識庫,且僅限所選知識庫範圍。', + capabilityManageKbs: '管理知識庫', + capabilityManageKbsHint: '允許管理知識庫全生命週期:新建、複製、修改、刪除知識庫並調整初始化/配置信息。針對已有知識庫的操作(複製/更新/刪除)仍受所選知識庫範圍限制;新建不受限(新知識庫歸本空間)。', + capabilityManageAgents: '管理智能體', + capabilityManageAgentsHint: '允許建立、修改、刪除、複製智能體。智能體配置可能含模型/MCP 等敏感綁定,默認關閉,按需開啓。', + capabilityMessageHistory: '消息歷史', + capabilityMessageHistoryHint: '允許檢索空間聊天曆史並讀取聊天曆史統計;不授予空間配置權限。', + capabilityManageModels: '管理模型', + capabilityManageModelsHint: '允許管理模型配置、模型憑證、模型連通性測試和 WeKnoraCloud 憑證。', + capabilityManageMcpServices: '管理 MCP 服務', + capabilityManageMcpServicesHint: '允許管理 MCP 服務、憑證、工具審批策略和該主體的 OAuth 授權狀態。', + capabilityManageDatasources: '管理資料源', + capabilityManageDatasourcesHint: '允許管理資料源連接器、憑證、資源選擇和同步任務;綁定知識庫時仍受知識庫範圍限制。', + capabilityManageChannels: '管理渠道', + capabilityManageChannelsHint: '允許管理智能體的嵌入渠道、IM 渠道和微信掃碼綁定流程。', + capabilityManageVectorStores: '管理檢索基礎設施', + capabilityManageVectorStoresHint: '允許管理向量庫配置,以及解析器、文檔讀取器和存儲引擎連通性檢查。', + capabilityManageStorageBackends: '管理存儲後端', + capabilityManageStorageBackendsHint: '允許管理對象/文件存儲後端實例(如 S3 兼容或本地文件存儲)的增刪改查、連通性測試及空間默認存儲設置。', + capabilityManageWebSearch: '管理聯網搜尋', + capabilityManageWebSearchHint: '允許管理聯網搜尋供應商配置、憑證和連接測試。', + capabilityRunEvaluations: '運行評測', + capabilityRunEvaluationsHint: '允許運行評測任務並讀取評測結果。', + capabilityManageMembers: '管理成員', + capabilityManageMembersHint: '允許查看和管理空間成員、角色、邀請和邀請鏈接;不包含 API Key 管理、空間刪除或所有權轉移。', + capabilityManageSpaces: '管理空間', + capabilityManageSpacesHint: '允許管理組織空間、加入流程、空間成員、邀請和共享空間可見性;不授予知識庫或智能體分享管理權限。', + capabilityManageTenantSettings: '管理空間設置', + capabilityManageTenantSettingsHint: '允許讀取和更新空間級集成設置,例如 API 終端用戶身份模式、請求頭配置、空間 KV 配置等;不包含 API Key 管理、成員管理、空間刪除或所有權轉移。', + apiKeyKnowledgeScope: '知識庫範圍', + apiKeyKnowledgeScopePlaceholder: '留空表示允許訪問全部知識庫', + allKnowledgeBases: '全部知識庫', + editApiKeyScope: '編輯 API Key', + editApiKeyScopeDesc: '修改 API Key「{name}」的名稱和授權範圍。', + editApiKeyScopeHint: '留空表示允許訪問本空間的全部知識庫。所有修改保存後立即生效。', + updateApiKeyScopeSuccess: 'API Key 已更新', + updateApiKeyScopeFailed: '更新 API Key 失敗', + createdAt: '建立時間', + actions: '操作', + deleteApiKey: '刪除', + deleteApiKeyConfirm: '刪除後該 API Key 會立即失效,已部署的集成將無法繼續使用它。', + deleteApiKeySuccess: 'API Key 已刪除', + deleteApiKeyFailed: '刪除 API Key 失敗', + createApiKeyFailed: '建立 API Key 失敗', + loadApiKeysFailed: '加載 API Key 列表失敗', + apiKeyCreated: 'API Key 已建立', + principalMode: '用戶身份模式', + principalModeDesc: '配置 API 請求如何識別終端用戶。該身份會同時用於區分不同用戶的對話 Session 與 MCP 工具授權。', + principalScope: '終端用戶身份負責隔離 Session 與 MCP OAuth;API Key 自身的操作權限和知識庫範圍由上方 API Keys 管理。', + modeTenant: '僅空間', + modeDirect: '直接傳用戶 ID', + modeSigned: '簽名 Token', + directWarning: '直接傳用戶 ID 會信任調用方請求頭,僅適用於可信服務端到服務端調用。', + directWarningDetail: '任何持有 API Key 的調用方都可以通過修改用戶 ID 請求頭冒充其他外部用戶,從而共用或劫持其 MCP OAuth 授權。請勿用於瀏覽器或不可信客戶端;面向終端用戶請使用「簽名 Token」。', + signedRecommended: '推薦給面向用戶的應用:由你的業務後端爲外部用戶簽發短期 HS256 JWT。', + signedFlowDetail: 'HMAC 金鑰僅保存在 WeKnora 與你的可信後端,切勿放入請求或下發給瀏覽器。請求頭裡傳的是用該金鑰簽出的 JWT 字符串(每次簽發或過期後會變),不是金鑰本身。JWT 須包含 sub(外部用戶 ID)、tenant_id、aud=weknora、exp(有效期不超過 24 小時)。', + directHeader: '用戶 ID 請求頭', + requireDirectHeader: '必須攜帶用戶 ID', + requireDirectHeaderDesc: '開啓後,缺少用戶 ID 請求頭的 API Key 請求將被拒絕;關閉則按整個空間統一處理,不區分具體終端用戶。', + tokenHeader: 'Token 請求頭', + tokenHeaderDesc: '客戶端在該固定請求頭中攜帶後端簽發的 JWT。', + hmacSecret: 'HMAC 金鑰', + hmacSecretDesc: '與 WeKnora 保存的同一份金鑰;僅用於後端簽發 JWT,不要作爲請求頭髮送。', + secretConfigured: '已配置金鑰(不可回看);輸入新值可輪換', + secretSavedCopyHint: '金鑰已保存,請立即複製到後端配置。離開本頁後將無法再次查看。', + generateSecret: '生成金鑰', + hmacSecretResetConfirmTitle: '確認重置 HMAC 金鑰?', + hmacSecretResetConfirmBody: '重置後,舊的 HMAC 金鑰會立即失效,所有使用舊金鑰簽發 JWT 的後端服務必須更換爲新金鑰纔可繼續通過簽名 Token 調用。此操作不可撤銷。', + hmacSecretResetConfirmOk: '確認重置', + hmacSecretResetConfirmCancel: '取消', + tokenSignExample: '後端簽發 JWT 示例(Go)', + signedRequestStep0: '# 0. 在你的後端簽發 JWT(HS256,aud=weknora,sub=用戶 ID,tenant_id={tenantId},exp 不超過 24 小時)', + signedRequestStep0Hint: '# 將 JWT 放入 {headerName} 請求頭,不要傳 HMAC 金鑰', + requestExampleCreateSession: '# 1. 建立會話', + requestExampleAgentChat: '# 2. Agent 對話(SSE;將 替換爲第 1 步返回的 id)', + requestExampleJwtPlaceholder: '<後端簽發的 JWT>', + requestExample: '請求示例', + playgroundTitle: 'API Playground', + playgroundDesc: '用當前 API Key 和身份模式發起真實請求,驗證會話建立、智能體對話和 SSE 返回。', + playgroundOpen: '打開 Playground', + playgroundDrawerDesc: '按真實 API 集成方式調試 Session、Agent Chat 和 SSE 返回', + playgroundSectionRequest: '請求配置', + playgroundSectionPreview: '請求預覽', + playgroundSectionResult: '運行結果', + playgroundAgent: '測試智能體', + playgroundAgentPlaceholder: '選擇要測試的智能體', + playgroundBuiltin: '內置', + playgroundAgentsLoadFailed: '智能體列表加載失敗', + playgroundExternalUser: '外部用戶 ID', + playgroundExternalUserPlaceholder: 'user_123', + playgroundTenantModeHint: '僅空間模式不會發送外部用戶身份,所有 API 會話歸屬同一個空間級主體。', + playgroundDirectModeHint: '將通過 {headerName} 請求頭髮送此用戶 ID。', + playgroundSignedModeHint: '簽名模式由 JWT 的 sub 代表外部用戶;Playground 會用這裡的用戶 ID 自動簽出短期測試 JWT。', + playgroundQuestion: '測試問題', + playgroundQuestionPlaceholder: '輸入要發送給智能體的問題', + playgroundRequestPreview: '請求預覽(已遮蔽金鑰)', + playgroundRun: '運行測試', + playgroundStop: '停止', + playgroundNeedApiKey: '當前空間沒有 API Key。', + playgroundNeedAgent: '請選擇測試智能體。', + playgroundNeedQuestion: '請輸入測試問題。', + playgroundNeedExternalUser: '請輸入外部用戶 ID。', + playgroundMintTokenFailed: '生成短期測試 JWT 失敗。', + playgroundMissingSessionId: '建立會話成功,但響應中沒有 session id。', + playgroundNoStream: '對話接口沒有返回可讀取的 SSE 流。', + playgroundGeneratedToken: '本次生成的測試 Token', + playgroundStepSession: '步驟 1:建立 Session', + playgroundStepChat: '步驟 2:Agent Chat SSE', + playgroundFinalAnswer: '提取出的回答', + playgroundEmptyResult: '運行後將在這裡顯示 Session 響應、SSE 原始輸出和提取出的回答。', + playgroundSuccess: '測試完成({ms}ms)', + playgroundStopped: '測試已停止', + playgroundFailed: 'API Playground 測試失敗', + loadFailed: '加載 API 集成設置失敗', + saveFailed: '保存 API 集成設置失敗', + saveSuccess: 'API 集成設置已保存', + autoSaveNeedSecret: '簽名 Token 模式需要填寫 HMAC 金鑰後才能自動保存。' + }, + tabs: { + im: 'IM 集成', + embed: '網頁嵌入', + api: 'API 集成', + chrome: 'Chrome 插件', + claw: 'Claw Skill' + } + }, + datasource: { + title: '資料源管理', + description: '配置外部資料源,自動同步內容到知識庫', + add: '添加資料源', + empty: '暫無資料源', + edit: '編輯', + delete: '刪除', + deleteConfirm: '確定刪除該資料源?同步的知識不會被刪除。', + deleteSuccess: '資料源已刪除', + deleteFailed: '刪除失敗', + syncNow: '立即同步', + syncTriggered: '同步任務已提交', + syncFailed: '同步觸發失敗', + pause: '暫停', + resume: '還原', + paused: '已暫停', + resumed: '已還原', + pauseFailed: '暫停失敗', + logs: '日誌', + syncModeLabel: '同步模式', + createTitle: '添加資料源', + editTitle: '編輯資料源', + nameLabel: '名稱', + namePlaceholder: '輸入資料源名稱', + sectionBasic: '基本信息', + testConnection: '測試連接', + testSuccess: '連接成功', + testFailed: '連接失敗', + connected: '已連接', + connectionFailed: '連接失敗', + isRequired: '爲必填項', + credentialsLabel: '憑證', + gitlab: { + baseUrl: 'GitLab 地址', + accessToken: '個人訪問權杖', + projects: 'GitLab 項目', + projectsHint: '填寫項目 ID 或命名空間路徑(如 group/project),可選指定分支和目錄。', + project: '項目', projectId: '項目 ID', projectIdPlaceholder: '例如:12345 或 group/project', + ref: '分支', refPlaceholder: '留空時使用默認分支', + paths: '同步目錄', pathsPlaceholder: '每行一個目錄;留空同步整個項目', + addProject: '添加項目', projectRequired: '請至少添加一個 GitLab 項目', + }, + resourceHint: '選擇要同步的內容空間/文件夾', + untitled: '無標題', + resourceLoadFailed: '加載資源列表失敗', + noResources: '未找到可同步的知識庫空間', + noResourcesDesc: '應用需要通過群聊獲得知識庫訪問權限才能拉取內容', + noResourcesDesc_notion: '應用需要獲得 Notion 頁面的訪問權限才能拉取內容', + retryLoadResources: '重新加載', + guideStep1: '在飛書中建立一個群聊,在群設置「群機器人」中添加你的應用', + guideStep2: '打開知識庫「設置」→「成員設置」→ 添加成員,搜尋該群聊名稱並添加', + guideStep3: '確保群聊角色至少爲「可閱讀」,然後回到這裡點重新加載', + guideStep1_notion: '在 Notion 中打開你想要同步的頁面或資料庫', + guideStep2_notion: '點擊右上角的「···」菜單,選擇「Connect to」或「Add connections」', + guideStep3_notion: '搜尋並選擇你的集成應用(Integration),然後回到這裡點重新加載', + permissionDocLink: '查看飛書知識庫權限配置文檔', + syncScheduleLabel: '同步頻率', + conflictLabel: '衝突策略', + syncDeletions: '同步刪除(源端刪除時同步刪除知識庫中的條目)', + createAndSync: '建立並立即同步', + createAndSyncSuccess: '資料源建立成功,同步任務已提交', + createButSyncFailed: '資料源已建立,但觸發同步失敗', + updateSuccessSyncHint: '資料源更新成功;編輯不會自動觸發同步,如需重新導入請點擊“同步”。', + saveFailed: '保存失敗', + syncHistory: '同步歷史', + refreshLogs: '刷新日誌', + noLogs: '暫無同步記錄', + comingSoon: '即將支持', + docHint: '在以下地址獲取憑證:', + openDoc: '打開文檔', + prereqBarText: '首次使用?點擊查看飛書應用配置指引', + prereqBarText_yuque: '首次使用?點擊查看語雀 Token 配置指引', + prereqStep1Brief_yuque: '建立語雀個人 Token', + prereqStep1Desc_yuque: '登錄語雀 → 個人頭像 → 設置 → Token → 新建 Token', + prereqStep2Brief_yuque: '爲 Token 勾選所需權限', + prereqStep2Desc_yuque: '至少勾選 repo:read 和 doc:read(讀取知識庫和文檔內容)', + prereqStep3Brief_yuque: '(可選)企業版填寫 Base URL', + prereqStep3Desc_yuque: '公有雲用戶無需填寫;語雀企業版或私有部署請填寫企業域名', + prereqOpenConsole_yuque: '前往語雀 Token 設置', + prereqBarText_ima: '首次使用?點擊查看騰訊 IMA OpenAPI 授權指引', + prereqStep1Brief_ima: '開通 IMA 智能體接入', + prereqStep1Desc_ima: '登錄 https://ima.qq.com/agent-interface 並申請 OpenAPI 接入', + prereqStep2Brief_ima: '獲取 ClientID 與 APIKey', + prereqStep2Desc_ima: '在智能體接入頁複製 ima-openapi-clientid 與 ima-openapi-apikey 兩個憑證', + prereqStep3Brief_ima: '授權目標知識庫', + prereqStep3Desc_ima: '在 IMA 客戶端爲該憑證授權需要同步的知識庫,未授權的知識庫不會出現在列表中', + prereqOpenConsole_ima: '前往 IMA OpenAPI 控制檯', + prereqStep1Brief_feishu: "建立飛書自建應用", + prereqStep1Desc_feishu: "登錄飛書開放平台 → 建立企業自建應用", + prereqStep2Brief_feishu: "添加機器人能力", + prereqStep2Desc_feishu: "開放平台 → 你的應用 → 添加應用能力 → 機器人", + prereqStep3Brief_feishu: "配置應用權限", + prereqStep3Desc_feishu: "爲應用開通 wiki:wiki:readonly, drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", + prereqStep1Brief_lark: "建立 Lark 自建應用", + prereqStep1Desc_lark: "登錄 Lark 開放平台 → 建立企業自建應用", + prereqStep2Brief_lark: "添加機器人能力", + prereqStep2Desc_lark: "開放平台 → 你的應用 → 添加應用能力 → 機器人", + prereqStep3Brief_lark: "配置應用權限", + prereqStep3Desc_lark: "爲應用開通 wiki:wiki:readonly, drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", + prereqStep1Brief_feishu_drive: "建立飛書自建應用", + prereqStep1Desc_feishu_drive: "登錄飛書開放平台 → 建立企業自建應用", + prereqStep2Brief_feishu_drive: "添加機器人能力", + prereqStep2Desc_feishu_drive: "開放平台 → 你的應用 → 添加應用能力 → 機器人", + prereqStep3Brief_feishu_drive: "配置應用權限", + prereqStep3Desc_feishu_drive: "爲應用開通 drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", + prereqStep1Brief_lark_drive: "建立 Lark 自建應用", + prereqStep1Desc_lark_drive: "登錄 Lark 開放平台 → 建立企業自建應用", + prereqStep2Brief_lark_drive: "添加機器人能力", + prereqStep2Desc_lark_drive: "開放平台 → 你的應用 → 添加應用能力 → 機器人", + prereqStep3Brief_lark_drive: "配置應用權限", + prereqStep3Desc_lark_drive: "爲應用開通 drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", + prereqBotBrief: '爲應用添加「機器人」能力', + prereqBotDesc: '開放平台 → 添加應用能力 → 機器人 → 建立版本併發布', + prereqPermBrief: '開通 API 權限', + prereqOpenConsole: '前往飛書開放平台配置', + prereqMemberBrief: '通過群聊添加爲知識庫成員', + prereqMemberDesc: '建立群聊 → 添加應用爲群機器人 → 將群聊添加爲知識庫成員', + back: '上一步', + next: '下一步', + save: '保存', + schedule30min: '每 30 分鐘', + schedule1h: '每小時', + schedule6h: '每 6 小時', + schedule12h: '每 12 小時', + schedule24h: '每天', + neverSynced: '未同步', + justNow: '剛剛', + minutesAgo: '{n} 分鐘前', + hoursAgo: '{n} 小時前', + daysAgo: '{n} 天前', + resourceType: { + wikiSpace: '知識庫空間', + docCategory: '文檔標籤', + book: '語雀知識庫' + }, + scheduleHuman: { + '30min': '每 30 分鐘', + '1h': '每小時', + '6h': '每 6 小時', + '12h': '每 12 小時', + '24h': '每天' + }, + field: { + appId: 'App ID', + appSecret: 'App Secret', + integrationToken: 'Integration Token', + apiToken: 'API Token', + imaClientId: 'IMA ClientID', + imaApiKey: 'IMA APIKey', + baseUrl: 'Base URL(可選)', + baseUrlHint: '留空將使用默認公有雲地址;如果是私有部署/企業內網部署,或需要通過反向代理訪問,請填寫自定義地址(例如 https://api-proxy.example.com)', + feedUrls: '訂閱源地址', + feedUrlsHint: '每行一個 RSS / Atom 訂閱源地址,支持同時填寫多個', + authHeaders: '自定義請求頭(可選)', + authHeadersHint: '用於訪問私有訂閱源,每行一個,格式爲「名稱: 值」,例如 Authorization: Bearer xxxx' + }, + connectorDesc: { + feishu: '同步飛書知識庫中的文檔、表格、文件', + lark: '同步 Lark 知識庫中的文檔、表格、文件(飛書國際版)', + feishu_drive: "同步飛書雲盤文件夾中的文檔、表格、文件", + lark_drive: "同步 Lark 雲盤文件夾中的文檔、表格、文件(飛書國際版)", + notion: '同步 Notion 中的頁面和資料庫', + yuque: '同步語雀知識庫中的文檔', + ima: '同步騰訊 IMA 知識庫中的文檔、筆記與文件(暫不支持 AI 會話與視頻解析)', + rss: '同步 RSS / Atom 訂閱源中的文章', + gitlab: '同步 GitLab 項目中的文件' + }, + connector: { + feishu: '飛書', + lark: 'Lark(飛書國際版)', + feishu_drive: "飛書雲盤", + lark_drive: "Lark 雲盤", + notion: 'Notion', + yuque: '語雀', + ima: '騰訊 IMA', + rss: 'RSS / Atom 訂閱', + gitlab: 'GitLab' + }, + logDetail: { + startTime: '開始時間', + endTime: '結束時間', + failedItems: '失敗文檔', + failedItemsMore: '還有 {n} 個失敗文檔未顯示', + docsFailedSummary: '{n} 個文檔同步失敗' + }, + logSummary: { + total: '總次數', + success: '成功', + failed: '失敗', + items: '同步條目' + }, + logMetric: { + total: '總計', + skipped: '跳過', + failed: '失敗' + }, + logStatus: { + running: '同步中', + success: '成功', + partial: '部分成功', + failed: '失敗', + canceled: '已取消' + }, + step: { + selectType: '選擇類型', + credentials: '配置憑證', + resources: '選擇範圍', + strategy: '同步策略' + }, + conflict: { + overwrite: '覆蓋更新', + skip: '跳過已存在' + }, + status: { + active: '已連接', + paused: '已暫停', + error: '異常' + }, + syncMode: { + incremental: '增量同步', + full: '全量同步' + }, + drive: { + folderTokenLabel: "雲盤文件夾 Token", + folderTokenPlaceholder: "輸入 folder_token 或飛書雲盤文件夾鏈接", + folderTokenRequired: "請輸入具體文件夾的 folder_token,不支持雲空間根目錄", + rootNotSupportedHint: "根目錄不分頁且不返回快捷方式,請選擇具體文件夾", + load: "加載", + shareHint: "需先將該雲盤文件夾分享給應用所在的群,應用才能訪問", + placeholderTitle: "請先加載雲盤文件夾", + placeholderDesc: "在上方輸入 folder_token(或從飛書雲盤文件夾 URL 複製)並點擊「加載」", + loadForbiddenHint: "應用無權訪問該文件夾。請在飛書雲盤中將該文件夾分享給應用所在的群后再試。", + loadAuthHint: "應用憑證無效或缺少雲盤權限,請檢查 App ID / App Secret 及 drive:drive:readonly 等權限。", + loadNotFoundHint: "folder_token 不存在或已刪除,請確認從飛書雲盤文件夾 URL 複製的 token 正確。", + }, + syncError: { + deletion_lookup_failed: '刪除前查找文檔失敗,請查看伺服器日誌', + deletion_failed: '刪除失敗,請查看伺服器日誌', + ingest_failed: '導入失敗,請查看伺服器日誌' + }, + }, + ollama: { + unknown: '未知', + today: '今天', + yesterday: '昨天', + daysAgo: '{days} 天前' + }, + mermaid: { + diagram: '圖表', + expand: '全屏查看', + zoomIn: '放大', + zoomOut: '縮小', + reset: '重置', + download: '下載圖片', + close: '關閉', + downloading: '下載中...' + }, + faqManager: { + import: { + recentResult: '最近導入結果', + totalData: '導入資料', + success: '成功', + added: '新增', + merged: '合併更新', + partialFailed: '部分失敗', + failed: '失敗', + skipped: '跳過', + progressHint: '正在校驗並導入 FAQ 資料...', + downloadReasons: '下載原因', + appendMode: '追加模式', + replaceMode: '替換模式', + importing: '導入中...', + importDone: '導入完成', + importFailed: '導入失敗', + waiting: '等待中...', + importInProgress: '導入正在進行中,請等待完成後再試', + noFailedRecords: '暫無失敗記錄可下載' + } + }, + agentEditor: { + builtinHint: '這是內置智能體,名稱和描述不可修改,但可以調整配置參數', + fileTypes: { + label: '支持的文件類型', + desc: '限制可選擇的文件類型,留空表示支持所有類型', + allTypes: '全部類型', + pdf: 'PDF 文檔', + word: 'Word 文檔 (.docx/.doc)', + textLabel: '文本', + text: '純文本文件 (.txt)', + markdown: 'Markdown 文檔', + csv: '逗號分隔值文件', + excel: 'Excel 表格 (.xlsx/.xls)', + imageLabel: '圖片', + image: '圖片文件 (.jpg/.jpeg/.png)' + }, + fallback: { + fixed: '固定回覆', + model: '模型生成' + }, + dataAnalysis: { + enableLabel: '啓用表格資料分析', + enableDesc: '命中 CSV/Excel 類文件時,先調用大模型生成 DuckDB SQL 進行統計或篩選,再據此回答。會額外增加一次模型調用與幾秒延遲,僅在確實需要時開啓。' + }, + faq: { + title: 'FAQ 優先策略', + enableLabel: '啓用 FAQ 優先', + enableDesc: 'FAQ 答案將優先於普通文檔被引用,提高回答準確性', + thresholdLabel: '直接回答閾值', + thresholdDesc: '當問題與 FAQ 相似度超過此值時,直接使用 FAQ 答案', + boostLabel: 'FAQ 分數加權', + boostDesc: 'FAQ 結果的相關性分數乘以此係數,使其排序更靠前' + }, + chatParser: { + label: '聊天附件解析策略', + desc: '爲不同文件類型指定解析引擎,僅對當前智能體的聊天附件生效', + waitTimeoutLabel: '附件解析等待超時(秒)', + waitTimeoutDesc: '單輪問答等待附件解析完成的最長時間,超時後未完成的附件會被跳過。大文件 / 掃描件可調大。0 表示使用全局默認。' + }, + audioUpload: { + label: '語音上傳', + desc: '啓用後用戶可在對話中上傳音頻文件,系統將使用 ASR 模型自動轉錄爲文字', + asrModel: 'ASR 模型', + asrModelDesc: '用於音頻轉錄的語音識別模型,未配置時音頻文件將以佔位符形式傳遞', + asrModelPlaceholder: '請選擇 ASR 模型' + }, + imageUpload: { + navLabel: '附件上傳', + sectionTitle: '附件上傳', + sectionDesc: '配置對話中圖片、文檔、音頻等附件的上傳、解析及對應模型', + label: '圖片上傳', + desc: '啓用後用戶可在對話中上傳圖片並由 VLM 理解', + vlmModel: 'VLM 模型', + vlmModelDesc: '用於圖片分析的視覺語言模型', + vlmModelPlaceholder: '請選擇 VLM 模型', + vlmModelRequired: '啓用圖片上傳時必須選擇 VLM 模型', + imageUnderstandingLabel: '附件圖片理解 / 掃描件 OCR', + imageUnderstandingDesc: '對圖片型 PDF/PPT 等掃描件,當解析不出文字時用 VLM 進行 OCR 識別。開啓會增加解析耗時,默認關閉。', + ocrMaxPagesLabel: '掃描件 OCR 最大頁數', + ocrMaxPagesDesc: '掃描件送入 VLM 做 OCR 的最大頁數,越多覆蓋越全但越慢、越貴。0 表示使用全局默認。', + useGlobalDefault: '0 = 全局默認', + storageProvider: '圖片存儲', + storageProviderDesc: '選擇圖片文件的存儲引擎,留空則使用系統默認', + storageProviderPlaceholder: '選擇存儲引擎', + storageDefault: '系統默認', + notConfigured: '未配置', + goStorageSettings: '去存儲設置中配置' + }, + llmCallTimeout: { + label: 'LLM 調用超時', + desc: '單次 LLM 調用的最大等待時間(秒),超過此時間後調用將被中止', + hint: '留空或填 0 表示使用默認值(120 秒)', + placeholder: '輸入秒數,建議範圍 60-1800' + }, + mcp: { + label: 'MCP 服務', + desc: '選擇 Agent 可以調用的 MCP 服務', + selectLabel: '選擇 MCP 服務', + selectDesc: '選擇要啓用的 MCP 服務', + selectPlaceholder: '選擇 MCP 服務', + authWaitTimeout: '授權等待超時(秒)', + authWaitTimeoutDesc: '對話中觸發 OAuth 授權時,等待你完成授權的最長秒數,超時後自動跳過授權提示(僅對使用 OAuth 的 MCP 服務生效)。', + authWaitTimeoutPlaceholder: '默認 600 秒', + unavailableService: '不可用服務' + }, + agentType: { + label: '智能體類型', + desc: '選擇一個預設會自動填充系統提示詞、工具列表和推薦的知識庫範圍。', + defaultNamePattern: '我的{label}', + kbIncompatibleWarn: '已選的 {count} 個知識庫不適用於當前類型,請手動調整', + kbMismatch: { + ragQa: '未啓用 RAG 檢索', + wikiQa: '未啓用 Wiki', + hybridRagWiki: '未啓用任何檢索能力', + dataAnalysis: '需啓用 RAG(不支持 FAQ)', + quickAnswer: '快速問答模式需啓用 RAG 檢索', + generic: '不適用於當前類型' + } + }, + im: { + title: 'IM 集成', + description: '將智能體接入即時通訊平台,支持企業微信、飛書、Slack、Telegram、釘釘、Mattermost、微信、QQBot 和雲之家', + feishu: '飛書', + lark: 'Lark(飛書國際版)', + slack: 'Slack', + telegram: 'Telegram', + dingtalk: '釘釘', + mattermost: 'Mattermost', + wecom: '企業微信', + wechat: '微信', + qqbot: 'QQBot', + yunzhijia: '雲之家', + addChannel: '添加渠道', + channelsTitle: 'IM 渠道', + disabled: '已停用', + editChannel: '編輯渠道', + deleteConfirm: '確定刪除該渠道?刪除後無法還原。', + channelName: '渠道名稱', + channelNamePlaceholder: '輸入渠道名稱,方便辨識', + channelNameDefaultHint: '默認爲平台名稱,可自行修改;留空保存時也會使用平台名稱', + platform: '平台', + mode: '接入模式', + outputMode: '輸出模式', + outputStream: '流式輸出', + outputFull: '完整輸出', + callbackUrl: '回呼地址', + empty: '暫無 IM 渠道', + unnamed: '未命名渠道', + docLink: '查看接入文檔', + wecomConsole: '企業微信管理後臺', + feishuConsole: '飛書開放平台', + larkConsole: 'Lark 開放平台', + slackConsole: 'Slack API 控制檯', + telegramConsole: 'Telegram BotFather', + dingtalkConsole: '釘釘開放平台', + dingtalkCardTemplateId: '卡片模板 ID(可選)', + dingtalkCardTemplateIdHint: '在 open-dev.dingtalk.com/fe/card 建立 AI 卡片模板,啓用後支持打字機效果的流式輸出', + mattermostConsole: 'Mattermost 集成說明', + qqbotConsole: 'QQ 開放平台', + qqbotAPIBaseURLHint: '可選,留空則使用默認正式環境 API 地址。', + qqbotGatewayURLHint: '可選,留空則自動獲取通用 WebSocket 接入點。', + yunzhijiaConsole: '雲之家開放平台', + yunzhijiaRobotDoc: '機器人消息文檔', + yunzhijiaImageDoc: '開發者平台(圖片功能)', + yunzhijiaModeHint: '支持 Webhook 和 WebSocket;WebSocket 模式無需配置公網回呼地址。', + yunzhijiaSendMsgUrl: '發送消息地址', + yunzhijiaSendMsgUrlHint: '用於機器人回覆消息。', + yunzhijiaSecret: '簽名金鑰(可選)', + yunzhijiaSecretPlaceholder: '雲之家機器人設置中的 HmacSHA1 簽名金鑰', + yunzhijiaSecretHint: '配置後,將對傳入的回呼請求進行 HmacSHA1 簽名驗證', + yunzhijiaAppId: '應用 App ID(圖片下載)', + yunzhijiaAppIdPlaceholder: '雲之家開放平台應用 App ID', + yunzhijiaAppSecret: '應用 App Secret(圖片下載)', + yunzhijiaAppSecretPlaceholder: '雲之家開放平台應用 Secret', + yunzhijiaAppCredentialHint: '用於獲取 appAccessToken 並下載用戶發送的圖片文件。', + yunzhijiaTimeout: 'HTTP 超時時間(秒)', + yunzhijiaTimeoutHint: '通過發送消息地址回覆的超時時間,默認 10 秒', + yunzhijiaAllowedHostSuffix: '允許的主機後綴', + yunzhijiaAllowedHostSuffixHint: '限制發送消息地址的目標域名後綴,提升安全性(如 yunzhijia.com)', + yunzhijiaSendMsgUrlRequired: '請填寫雲之家機器人設置中的發送消息地址', + mattermostModeHint: 'Mattermost 僅支持 Webhook(出站 Webhook + Bot Token)。', + mattermostPostToMain: '回覆顯示在頻道主時間線', + mattermostPostToMainHint: '開啓後 Bot 回覆作爲頻道內新帖子;關閉(默認)則作爲原消息的線程回覆,主窗口僅顯示「N 條回覆」。', + modeHint: '推薦使用 WebSocket 方式接入,配置更簡單', + consoleTip: '前往獲取憑證信息', + wecomWSEndpointHint: '可選,私有化部署時填寫自定義 WebSocket 地址,留空則使用默認公有雲地址。內網地址需將域名加入 SSRF_WHITELIST 環境變數', + wecomAPIBaseURLHint: '可選,私有化部署時填寫自定義 API 地址,留空則使用默認公有雲地址。內網地址需將域名加入 SSRF_WHITELIST 環境變數', + feishuAPIBaseURLHint: '可選。若伺服器能直連外網則留空;若需通過代理才能訪問飛書,填寫反向代理地址(如 nginx,http://host:port)。內網地址需將域名加入 SSRF_WHITELIST 環境變數', + fileKnowledgeBase: '文件保存知識庫', + fileKnowledgeBasePlaceholder: '選擇知識庫(可選)', + fileKnowledgeBaseHint: '配置後,用戶發送的文件將自動保存到該知識庫中', + sessionMode: '會話模式', + sessionModeUser: '按用戶(默認)', + sessionModeThread: '按話題', + sessionModeHint: '用戶模式:每個用戶獨立對話,使用 /clear 開始新對話。話題模式:每個消息話題獨立對話,同一話題中多人可協作。', + wechatScanBind: '掃碼綁定微信', + wechatScanning: '請使用微信掃描QR 碼', + wechatBindSuccess: '微信綁定成功', + wechatRebind: '重新綁定', + wechatHint: '需要 iOS 微信 8.0.70+ 版本,僅支持單聊消息', + wechatQRExpired: 'QR 碼已過期,請重新獲取', + wechatBinding: '綁定中...', + sectionChannel: '渠道信息', + sectionConnection: '連接設置', + sectionCredentials: '平台憑證', + selectPlatform: '選擇平台', + selectPlatformDesc: '選擇要接入的即時通訊平台', + enabled: '啓用渠道', + stepBasic: '基本信息', + stepConnection: '連接設置', + stepKnowledge: '文件存儲', + stepCredentials: '平台憑證', + sectionAccess: '接入與輸出', + sectionSession: '會話設置', + sectionCallback: '回呼地址', + sectionKnowledge: '文件存儲', + sectionStatus: '運行狀態' + }, + embed: { + title: '網頁嵌入', + description: '將智能體嵌入到您的網頁,訪客可通過頁面內聊天窗口或右下角浮窗發起對話,知識庫範圍跟隨本智能體配置。' + }, + tools: { + thinking: '思考', + thinkingDesc: '動態和反思性的問題解決思考工具', + todoWrite: '制定計劃', + todoWriteDesc: '建立結構化的研究計劃', + grepChunks: '關鍵詞搜尋', + grepChunksDesc: '快速定位包含特定關鍵詞的文檔和分塊', + knowledgeSearch: '語義搜尋', + knowledgeSearchDesc: '理解問題並查找語義相關內容', + listChunks: '查看文檔分塊', + listChunksDesc: '獲取文檔完整分塊內容', + queryGraph: '查詢知識圖譜', + queryGraphDesc: '從知識圖譜中查詢關係', + getDocInfo: '獲取文檔信息', + getDocInfoDesc: '查看文檔元資料', + dbQuery: '查詢資料庫', + dbQueryDesc: '查詢資料庫中的信息', + dataAnalysis: '資料分析', + dataAnalysisDesc: '理解資料文件並進行資料分析', + dataSchema: '查看資料元信息', + dataSchemaDesc: '獲取表格文件的元信息', + requiresKb: '(需要配置知識庫)', + requiresRagKb: '(需要關聯啓用向量/關鍵詞索引的知識庫)', + requiresWikiKb: '(需要關聯啓用 Wiki 能力的知識庫)', + wikiSearch: '搜尋 Wiki', + wikiSearchDesc: '在 Wiki 知識庫中按關鍵詞/語義搜尋頁面', + wikiReadPage: '閱讀 Wiki 頁面', + wikiReadPageDesc: '讀取指定 Wiki 頁面的完整內容', + wikiReadSourceDoc: '精讀源文檔', + wikiReadSourceDocDesc: '通過知識點深入閱讀 Wiki 頁面背後的原始文檔', + wikiFlagIssue: '標記 Wiki 問題', + wikiFlagIssueDesc: '標記頁面中存在的事實錯誤或合併衝突問題', + wikiWritePage: '建立/覆蓋 Wiki', + wikiWritePageDesc: '建立新頁面或完全覆蓋已有 Wiki 頁面', + wikiReplaceText: '局部替換 Wiki', + wikiReplaceTextDesc: '替換 Wiki 頁面中的特定文本', + wikiRenamePage: '重命名 Wiki', + wikiRenamePageDesc: '重命名 Wiki 頁面並自動更新關聯鏈接', + wikiDeletePage: '刪除 Wiki', + wikiDeletePageDesc: '刪除 Wiki 頁面並自動清理關聯死鏈', + wikiReadIssue: '查看 Wiki 問題', + wikiReadIssueDesc: '查看特定 Wiki 頁面的巡檢問題詳情', + wikiUpdateIssue: '更新 Wiki 問題', + wikiUpdateIssueDesc: '更新 Wiki 頁面問題的處理狀態', + webSearch: '網絡搜尋', + webFetch: '網頁抓取', + groupBase: '基礎', + groupRag: '知識庫檢索(RAG)', + groupWikiRead: 'Wiki 讀取', + groupWikiEdit: 'Wiki 編輯', + groupWikiIssue: 'Wiki 巡檢', + groupData: '資料分析', + writeWarning: '會修改 Wiki 內容', + dangerTag: '可寫', + statusNoKb: '當前未關聯任何知識庫', + kbMetricRag: 'RAG 知識庫', + kbMetricWiki: 'Wiki 知識庫', + statusInactive: '有 {count} 個已勾選工具在當前配置下無法生效', + effectiveLabel: '最終啓用的工具', + effectiveDesc: '根據當前配置計算,這是智能體保存後實際能調用的工具集合', + effectiveEmpty: '當前沒有可用工具,智能體將退化爲純模型問答' + }, + desc: { + name: '爲智能體設置一個易於識別的名稱', + description: '簡要描述智能體的用途和特點', + systemPrompt: '自定義系統提示詞,定義智能體的行爲和角色', + leaveEmptyDefault: '(留空則使用系統默認)', + contextTemplate: '定義如何將檢索到的內容格式化後傳遞給模型', + model: '選擇智能體使用的大語言模型', + temperature: '控制輸出的隨機性,0 最確定,1 最隨機', + maxTokens: '模型生成回覆的最大Token數量', + thinking: '啓用模型的擴展思考能力(需要模型支持)', + conversationSection: '配置多輪對話開關與問題改寫開關(改寫提示詞見「提示詞」)', + multiTurn: '開啓後將保留歷史對話上下文', + historyRounds: '保留最近幾輪對話作爲上下文', + rewrite: '多輪對話時自動改寫用戶問題,消解指代和補全省略', + memoryEnabled: '允許該智能體讀取並補充你的長期記憶。關閉後,與它的對話既不會讀取記憶,也不會新增記憶。空間或個人設置關閉時,這裡開啓也不會生效', + queryUnderstandModel: '用於問題理解(改寫與意圖識別)的模型,留空則複用主對話模型', + rewriteSystemPrompt: '用於問題改寫的系統提示詞(留空使用默認)', + rewriteUserPrompt: '用於問題改寫的用戶提示詞模板(留空使用默認)', + selectTools: '選擇 Agent 可以使用的工具', + maxIterations: 'Agent 執行任務時的最大推理步驟數', + kbScope: '選擇智能體可訪問的知識庫範圍', + webSearch: '啓用後智能體可以搜尋互聯網獲取信息', + webSearchProvider: '爲此智能體指定搜尋引擎,留空則使用默認搜尋引擎', + webSearchMaxResults: '每次搜尋返回的最大結果數量', + webFetchEnabled: 'Rerank 後自動抓取排名靠前的網頁完整內容,提升回答質量', + webFetchTopN: 'Rerank 後最多抓取幾個網頁的完整內容', + retrievalSection: '配置知識庫檢索召回、排序與 FAQ 優先策略(ReRank 模型見「模型配置」)', + queryExpansion: '自動擴展查詢詞以提高召回率', + embeddingTopK: '向量檢索返回的最大結果數量', + keywordThreshold: '關鍵詞檢索的最低相關性分數', + vectorThreshold: '向量檢索的最低相似度分數', + rerankTopK: '重排序後保留的最大結果數量', + rerankThreshold: '重排序的最低相關性分數', + fallbackStrategy: '當無法從知識庫找到相關內容時的處理方式', + fallbackResponse: '當無法回答時返回的固定文本', + fallbackPrompt: '當無法從知識庫找到答案時,引導模型生成回覆的提示詞' + }, + selection: { + all: '全部', + selected: '指定', + disabled: '禁用' + }, + promptNav: { + ariaLabel: '提示詞目錄', + system: '系統提示詞', + context: '上下文模板', + intent: '意圖提示詞', + rewriteSystem: '改寫 · 系統', + rewriteUser: '改寫 · 用戶', + fallback: '檢索兜底' + }, + intentPrompts: { + title: '意圖提示詞', + sectionDesc: '爲不同查詢意圖配置專屬系統提示詞;未自定義時使用系統默認模板', + intentLabel: '意圖', + promptPlaceholder: '輸入自定義系統提示詞...', + customized: '已自定義', + empty: '暫無可用的意圖模板' + }, + placeholders: { + available: '可用變數:', + clickToInsert: '(點擊插入)', + hint: '(點擊插入,或輸入 {\'{{\'} 喚起列表)' + }, + questionSuggestions: { + navLabel: '問題推薦', + title: '對話問題推薦', + description: '統一配置開場問題與回答後的上下文追問;渠道可關閉展示,但不能改寫智能體策略。', + startersTitle: '開場推薦', + followUpsTitle: '回答後推薦', + enableStarters: '展示開場問題', + enableStartersDesc: '在用戶首次提問前展示,可使用運營配置、知識庫或混合來源。', + enableFollowUps: '生成回答後推薦', + enableFollowUpsDesc: '每次完整回答結束後異步生成,不阻塞主回答。啓用後會產生額外模型調用。', + sourceMode: '內容來源', + count: '展示數量', + curatedItems: '運營配置問題', + curatedItemsDesc: '用於開場推薦;混合模式下優先展示。', + addItem: '添加問題', + model: '生成模型', + modelDesc: '留空時使用本輪對話模型。', + advancedSettings: '高級生成設置', + displayRules: '展示與兜底規則', + contextTurns: '上下文輪數', + categories: '問題類型', + instruction: '附加生成要求', + instructionPlaceholder: '例如:優先推薦能幫助用戶落地執行的問題,避免寬泛問題或重複當前回答…', + suppressFallback: '兜底回答後不展示', + suppressQuestion: '回答本身以提問結尾時不展示', + knowledgeFallback: '模型生成失敗時使用知識庫候選', + allowRegenerate: '允許用戶換一批', + modeCurated: '運營配置', + modeKnowledge: '知識庫', + modeGenerated: '模型生成', + modeHybrid: '混合', + categoryClarify: '澄清', + categoryDeepen: '深入', + categoryAction: '下一步' + }, + navGroups: { + basic: '基礎', + knowledge: '知識檢索', + capability: '能力擴展', + integration: '發佈集成' + } + }, + agentStream: { + saveToKb: { + emptyContent: '當前回答爲空,無法保存到知識庫', + editorOpened: '已打開編輯器,請選擇知識庫後保存' + }, + copy: { + emptyContent: '當前回答爲空,無法複製', + success: '已複製到剪貼板', + failed: '複製失敗,請手動複製' + }, + toolStatus: { + calling: '正在調用 {name}...', + searchKb: '檢索知識庫', + searchKbFailed: '檢索知識庫失敗', + searchMixed: '檢索知識庫和網絡', + searchMixedFailed: '檢索失敗', + webSearch: '網絡搜尋', + webSearchFailed: '網絡搜尋失敗', + grepSearch: '搜尋關鍵詞', + grepSearchFailed: '搜尋關鍵詞失敗', + getDocInfo: '獲取文檔信息', + getDocInfoFailed: '獲取文檔信息失敗', + viewDocument: '查看文檔', + thinkingDone: '完成思考', + thinkingFailed: '思考失敗', + updateTodos: '更新任務列表', + updateTodosFailed: '更新任務列表失敗', + imageAnalyzing: '正在查看圖片內容...', + imageAnalysisDone: '已查看圖片內容', + imageAnalysisFailed: '圖片內容查看失敗', + attachmentParsing: '正在解析附件...', + attachmentParsingDone: '已解析附件', + attachmentParsingFailed: '附件解析失敗', + queryUnderstanding: '正在理解問題...', + queryUnderstandDone: '已完成問題理解', + called: '調用 {name}', + calledFailed: '調用 {name} 失敗' + }, + ragPipeline: { + searching: '正在檢索知識庫...', + searchingWithQuery: '正在檢索知識庫:「{query}」', + searchingWeb: '正在檢索網絡...', + searchingWebWithQuery: '正在檢索網絡:「{query}」', + searchingMixed: '正在檢索知識庫和網絡...', + searchingMixedWithQuery: '正在檢索知識庫和網絡:「{query}」', + searchDone: '檢索完成' + }, + attachmentParsing: { + parsedSummary: '已解析 {count} 個附件', + parsedWithSkipped: '已解析 {parsed} 個附件,{skipped} 個未完成已跳過', + noneReady: '沒有可用的已解析附件' + }, + knowledgeChunksList: { + chunkRange: '已加載 {fetched} / {total} 個分塊', + page: '第 {page} 頁,每頁 {pageSize} 個' + }, + grepResults: { + chunkHits: '{count} 片段', + keywordHits: '{count} 次', + titleMatch: '標題匹配', + faqEntry: 'FAQ 條目' + }, + search: { + noResults: '未找到匹配的內容', + candidatesBelowThreshold: '命中 {count} 條候選,相關性不足,未用於回答', + foundResultsFromFiles: '找到 {count} 個結果,來自 {files} 個文件', + foundResults: '找到 {count} 個結果', + foundMixedResults: '找到 {count} 個結果({docCount} 篇文檔,{webCount} 條網頁)', + webResults: '找到 {count} 條網頁', + grepSummary: '找到 {chunks} 個匹配片段,來自 {docs} 個文檔' + }, + plan: { + inProgress: '進行中', + pending: '待處理', + completed: '已完成' + }, + toolSummary: { + getDocument: '獲取文檔:{title}', + document: '文檔', + listChunks: '查看 {title}', + listFaqEntry: '查看 FAQ:{question}', + deepThinking: '深度思考' + }, + citation: { + notFound: '未找到內容', + loadFailed: '加載失敗', + noKbForWiki: '無法識別關聯的知識庫,無法打開 Wiki' + }, + tools: { + searchKnowledge: '知識庫檢索', + grepChunks: '搜尋關鍵詞', + webSearch: '網絡搜尋', + webFetch: '網頁抓取', + getDocumentInfo: '獲取文檔信息', + listKnowledgeChunks: '查看知識分塊', + getRelatedDocuments: '查找相關文檔', + getDocumentContent: '獲取文檔內容', + wikiReadSourceDoc: '精讀源文檔', + todoWrite: '計劃管理', + knowledgeGraphExtract: '知識圖譜抽取', + thinking: '思考', + attachmentParsing: '解析附件', + imageAnalysis: '查看圖片內容', + queryUnderstand: '理解問題', + queryKnowledgeGraph: '知識圖譜查詢', + readSkill: '讀取技能', + executeSkillScript: '執行技能腳本', + dataAnalysis: '資料分析', + dataSchema: '資料結構', + databaseQuery: '資料庫查詢' + }, + mcpOAuth: { + waiting: '等待授權 · {target}', + waitingStatus: '等待授權', + targetWithTool: '{service} › {tool}', + titleWithService: 'OAuth 授權 · {service}', + titleWithTool: 'OAuth 授權 · {service} › {tool}', + desc: '點擊授權將打開新窗口完成登錄,授權成功後會自動繼續本次工具調用。', + authorize: '去授權', + skip: '跳過', + countdownShort: '{seconds}s', + authorizedTag: '已授權', + timedOutTag: '授權超時', + canceledTag: '已取消', + authorizedToast: '授權成功,正在繼續', + startFailed: '發起授權失敗', + resumeFailed: '還原執行失敗,請重試', + skipFailed: '跳過失敗,請重試' + }, + toolApproval: { + waiting: '等待審覈 · {target}', + waitingStatus: '等待審覈', + targetWithTool: '{service} › {tool}', + titleWithTarget: '人工審覈 · {service} › {tool}', + argsLabel: '調用參數', + argsModified: '已修改', + countdownShort: '{seconds}s', + approve: '通過並執行', + reject: '拒絕', + approvedTag: '已通過', + rejectedTag: '已拒絕', + invalidJson: '參數不是合法 JSON', + submitted: '已提交', + submitFailed: '提交失敗', + userRejected: '用戶拒絕' + } + }, + kbSettings: { + parser: { + title: '解析引擎', + description: '爲不同文件類型選擇文檔解析引擎。未配置的文件類型將使用內置解析引擎。', + loading: '加載中...', + noEngineAvailable: '暫無可用解析引擎,或文檔解析服務未配置。', + default: '默認', + goConfig: '前往配置 →', + noEngine: '無可用引擎', + fileTypePdf: 'PDF 文檔', + fileTypeWord: 'Word 文檔', + fileTypePpt: '演示文稿', + fileTypeExcel: 'Excel 表格', + xlsxFirstRowAsHeader: '將首行作爲列標題,並保留在每行上下文中', + fileTypeEbook: '電子書', + fileTypeWebArchive: '網頁歸檔', + fileTypeCsv: 'CSV 文件', + fileTypeText: '純文本', + fileTypeJson: 'JSON 文件', + fileTypeImage: '圖片', + fileTypeAudiovisual: '音頻', + engines: { + opendataloader: { + name: 'OpenDataLoader', + desc: 'OpenDataLoader PDF 解析引擎(版面分析,需 Java 11+ 與 opendataloader-pdf)' + }, + markitdown: { + name: 'MarkItDown', + desc: 'Microsoft MarkItDown 文檔轉換工具(支持 PDF/Office/HTML 等)' + }, + weknoracloud: { + name: 'WeKnora Cloud', + desc: '使用 WeKnora Cloud 進行文檔解析' + }, + paddleocr_vl_cloud: { + name: 'PaddleOCR-VL Cloud', + desc: 'PaddleOCR-VL 雲 API' + }, + paddleocr_vl: { + name: 'PaddleOCR-VL', + desc: 'PaddleOCR-VL 自部署服務' + }, + mineru_cloud: { + name: 'MinerU Cloud', + desc: 'MinerU Cloud API' + }, + mineru: { + name: 'MinerU', + desc: 'MinerU 自部署服務' + }, + simple: { + name: 'Simple', + desc: '簡單格式 & 圖片解析(無需外部服務)' + }, + builtin: { + name: '內置', + desc: 'DocReader 內置解析引擎(docx/pdf/xlsx 等複雜格式)' + } + } + }, + storage: { + title: '存儲引擎', + selectDescription: '選擇此知識庫綁定的具體存儲實例。', + defaultTag: '默認', + instanceLabel: '存儲實例', + instanceDesc: '同一種存儲類型可以配置多個不同 Endpoint、Bucket 或憑證的實例。', + migrateHint: '知識庫中已有文件,需通過存儲遷移流程才能更換實例。', + manageInstances: '管理存儲實例', + localStorage: '本地存儲', + loading: '加載中...' + }, + vectorStore: { + title: '向量存儲', + description: '選擇此知識庫要寫入的向量存儲。綁定不可更改 — 如需將現有 KB 遷移到其他存儲,請建立新 KB 並重新索引。', + loading: '正在加載向量存儲列表...', + engineLabel: '向量存儲', + engineDesc: '從全局向量存儲配置中選擇,或保持系統默認以使用空間的 RETRIEVE_DRIVER 引擎。', + boundLabel: '已綁定的向量存儲', + systemDefault: '系統默認', + immutableHint: '建立後不可更改。如需遷移,請建立一個綁定到目標存儲的新 KB 並重新索引。', + immutableEdit: '向量存儲綁定在建立後無法更改。', + unavailableHint: '綁定的向量存儲當前不可用,請在設置 → 向量存儲中檢查其連接配置。', + goGlobalSettings: '前往向量存儲設置' + } + }, + vectorStoreBadge: { + systemDefault: '系統默認', + sharedFromOrg: '來自其他組織的共享', + unknownStore: '未知存儲', + unavailable: '不可用' + }, + tools: { + multiKbSearch: '跨庫搜尋', + knowledgeSearch: '知識庫搜尋', + grepChunks: '搜尋關鍵詞', + getChunkDetail: '獲取片段詳情', + listKnowledgeChunks: '查看知識分塊', + listKnowledgeBases: '列出知識庫', + getDocumentInfo: '獲取文檔信息', + queryKnowledgeGraph: '查詢知識圖譜', + think: '深度思考', + todoWrite: '制定計劃' + }, + commandPalette: { + placeholder: '搜尋知識庫、文件、對話…', + clearRecent: '清除', + retrieval: '檢索參數', + untitledSession: '未命名對話', + hotkey: { + select: '選擇', + enter: '打開', + cmdNumber: '直接打開', + cmdEnter: '發起對話', + esc: '關閉' + }, + empty: { + noResults: '沒有找到匹配結果', + askAi: '直接向 AI 提問', + adjustRetrieval: '調整檢索參數' + }, + quick: { + newChat: '新建對話', + knowledgeBases: '打開知識庫', + agents: '打開智能體', + organizations: '打開共享空間', + settings: '打開設置', + productTour: '新手引導' + }, + match: { + vector: '向量', + keyword: '關鍵字' + }, + group: { + chunks: '知識庫文件', + messages: '對話消息', + kbs: '知識庫', + agents: '智能體', + sessionsByTitle: '對話(按標題)', + commands: '命令', + recent: '最近搜尋', + quickActions: '快捷操作' + }, + scope: { + placeholder: '在本知識庫中搜尋…', + remove: '移除範圍過濾(Backspace)' + } + }, + preview: { + tab: '預覽', + loading: '正在加載文檔預覽...', + loadFailed: '加載文檔預覽失敗', + retry: '重試', + unsupported: '該文件類型暫不支持在線預覽', + unsupportedHint: '請下載文件後使用本地應用查看', + fullscreen: '全屏預覽', + exitFullscreen: '退出全屏', + audioLoading: '加載音頻中…', + audioNotSupported: '您的瀏覽器不支持音頻播放' + }, + organization: { + title: '共享空間', + subtitle: '建立或加入共享空間,讓多個空間互相協作,共享知識庫與智能體', + createOrg: '建立共享空間', + joinOrg: '加入共享空間', + name: '共享空間名稱', + namePlaceholder: '請輸入共享空間名稱', + nameRequired: '請輸入共享空間名稱', + avatar: '共享空間頭像', + avatarClear: '清除', + avatarPickerHint: '選擇 Emoji 作爲共享空間頭像', + description: '共享空間描述', + descriptionPlaceholder: '請輸入共享空間描述(選填)', + noDescription: '暫無描述', + memberCount: '成員數量', + owner: '建立者', + inviteCode: '邀請碼', + inviteCodePlaceholder: '請輸入邀請碼', + inviteCodeRequired: '請輸入邀請碼', + refreshInviteCode: '刷新邀請碼', + inviteCodeRefreshed: '邀請碼已刷新', + inviteCodeRefreshFailed: '刷新邀請碼失敗', + leave: '退出共享空間', + leaveConfirmTitle: '退出共享空間', + leaveConfirmMessage: '確定要退出共享空間「{name}」嗎?退出後將無法訪問該共享空間共享的知識庫。', + leaveSuccess: '已退出共享空間', + leaveFailed: '退出共享空間失敗', + deleteConfirmTitle: '刪除共享空間', + deleteConfirmMessage: '確定要刪除共享空間「{name}」嗎?刪除後所有成員將被移除,此操作不可撤銷。', + deleteSuccess: '共享空間已刪除', + deleteFailed: '刪除共享空間失敗', + createSuccess: '共享空間建立成功', + createFailed: '建立共享空間失敗', + joinSuccess: '成功加入共享空間', + joinFailed: '加入共享空間失敗', + manageMembers: '成員管理', + noMembers: '暫無成員', + roleUpdated: '角色已更新', + roleUpdateFailed: '更新角色失敗', + memberRemoved: '成員已移除', + memberRemoveFailed: '移除成員失敗', + empty: '您還沒有加入任何共享空間', + emptyDesc: '建立一個共享空間或通過邀請碼加入現有共享空間', + createdByMe: '我建立的', + joinedByMe: '我加入的', + emptyCreated: '您還沒有建立任何共享空間', + emptyCreatedDesc: '點擊「建立共享空間」建立一個新的共享空間', + emptyJoined: '您還沒有加入任何共享空間', + emptyJoinedDesc: '通過邀請碼加入現有共享空間', + share: { + title: '共享到共享空間', + selectOrg: '選擇共享空間', + selectOrgPlaceholder: '請選擇要共享的共享空間', + permission: '權限', + permissionTip: '可編輯權限允許成員修改知識庫內容,只讀權限僅允許檢索和問答', + shareSuccess: '已共享', + shareFailed: '共享失敗', + unshareSuccess: '已取消共享', + unshareFailed: '取消共享失敗', + sharedTo: '已共享到', + noShares: '尚未共享到任何共享空間', + searchPlaceholder: '搜尋共享空間…', + loading: '加載中…', + emptySearch: '未找到匹配「{q}」的共享空間', + addShareDialogTitle: '共享到共享空間', + unshareAction: '取消共享', + sharedKnowledgeBase: '共享知識庫', + agentShareDesc: '將智能體共享到共享空間,共享空間成員可使用該智能體', + sharedFrom: '來自', + permissionReadonly: '只讀', + permissionEditable: '可編輯', + columns: { + space: '共享空間', + permission: '權限', + sharedAt: '共享時間', + operations: '操作' + } + }, + addMember: { + button: '添加成員', + dialogTitle: '添加成員', + tipTenant: '共享空間的成員單位是空間:選定一個空間後,其下全部用戶都將獲得訪問權限。下方搜尋結果按空間去重。', + searchTenant: '選擇空間', + searchTenantPlaceholder: '輸入空間名搜尋...', + searchTenantHint: '輸入至少 2 個字符開始搜尋,按空間去重並自動過濾已加入的空間', + selectRole: '分配角色', + confirmBtn: '添加', + success: '成員添加成功', + failed: '添加失敗' + }, + upgrade: { + requestUpgrade: '申請升級', + pending: '審覈中', + dialogTitle: '申請升級', + dialogDesc: '管理員審覈通過後更新您的角色。', + currentRole: '當前角色', + selectRole: '申請角色', + reason: '申請理由(選填)', + reasonPlaceholder: '請簡要說明申請更高權限的原因...', + submitBtn: '提交申請', + submitSuccess: '權限升級申請已提交,等待管理員審覈', + submitFailed: '提交申請失敗' + }, + editor: { + navBasic: '基本信息', + navPermissions: '權限說明', + navJoin: '加入共享空間', + basicTitle: '基本信息', + basicDesc: '設置共享空間的名稱和描述,便於成員識別', + nameTip: '建議使用團隊或項目名稱,便於成員識別', + descriptionTip: '描述共享空間的用途和目標,幫助成員瞭解共享空間', + permissionsTitle: '成員權限', + permissionsDesc: '瞭解共享空間中不同角色對知識庫與智能體的權限範圍', + permissionFeature: '權限功能', + fullAccess: '完整權限', + editAccess: '編輯權限', + viewAccess: '只讀權限', + adminPerm1: '管理共享空間設置、成員及知識庫與智能體共享', + adminPerm2: '共享和管理知識庫與智能體', + adminPerm3: '編輯共享知識庫內容', + adminPerm4: '查看和檢索知識庫', + useSharedAgentsPerm: '使用共享智能體', + shareKBPerm: '共享知識庫到共享空間', + editorPerm1: '編輯共享知識庫內容', + editorPerm2: '查看和檢索知識庫', + editorPerm3: '管理共享空間設置和成員', + viewerPerm1: '查看和檢索知識庫', + viewerPerm2: '編輯知識庫內容', + viewerPerm3: '管理共享空間設置', + ownerNote: '作爲共享空間建立者,您將自動成爲共享空間的管理員,擁有完整權限。', + joinTitle: '加入共享空間', + joinDesc: '通過邀請碼加入現有共享空間,獲得知識庫與智能體訪問權限', + joinIllustration: '輸入共享空間管理員提供的邀請碼即可加入', + inviteCodeTip: '邀請碼由共享空間管理員生成,請向他們索取', + howToGetCode: '如何獲取邀請碼?', + step1: '聯繫您要加入的共享空間管理員', + step2: '請求他們分享共享空間邀請碼', + step3: '將邀請碼貼上到上方輸入框' + }, + navGroups: { + basic: '基礎', + management: '成員與協作', + resources: '共享資源' + }, + settings: { + editTitle: '共享空間設置', + membersDesc: '查看和管理共享空間成員、調整成員角色。成員的最小單位是空間——加入後該空間下的所有用戶都將獲得訪問權限。', + permissionsIconHint: '查看各角色權限說明', + sharedDesc: '查看共享到此共享空間的所有知識庫', + noSharedKB: '暫無共享的知識庫', + noSharedKBTip: '知識庫擁有者可以在知識庫設置中將其共享到此共享空間', + sharedAgents: '共享智能體', + noSharedAgents: '暫無共享的智能體', + sharedAgentsDesc: '已共享到本共享空間的智能體,成員可在對話中使用', + sharedAgentsKbHint: '智能體綁定的知識庫僅在成員使用該智能體對話時可 {\'@\'} 使用(只讀),不會出現在「知識庫列表」中。若需成員在列表中看到或編輯知識庫,請單獨將知識庫共享到本共享空間。', + sharedAgentsKbHintShort: '智能體綁定知識僅對話內只讀;需在列表看到或編輯請單獨共享知識庫', + noSharedAgentsTip: '管理員可將智能體從智能體設置中共享到本共享空間', + sharePermissionLabel: '共享空間權限', + myPermissionLabel: '生效權限', + permissionCalcFormula: '共享空間權限爲共享時設定;生效權限取共享空間權限與你的共享空間角色中較低值', + permissionCalcTip: '生效權限取共享空間權限與你的共享空間角色中較低值;只讀成員對此庫最多隻讀。', + inviteMembers: '邀請成員', + inviteMembersDesc: '通過邀請碼或鏈接邀請他人加入共享空間', + inviteLink: '邀請鏈接', + inviteLinkValidity: '邀請鏈接有效期', + inviteLinkValidityDesc: '新生成的邀請鏈接的有效期,僅影響之後刷新生成的鏈接', + validity1Day: '1 天', + validity7Days: '7 天', + validity30Days: '30 天', + validityNever: '永不過期', + remainingValidity: '剩餘 {n} 天', + remainingValidityNever: '永不過期', + remainingValidityExpired: '已過期', + removeShareFromOrg: '從共享空間中移除', + removeShareConfirm: '確定將「{name}」從本共享空間中移除?移除後共享空間成員將無法再訪問該知識庫。', + removeAgentShareConfirm: '確定將「{name}」從本共享空間中移除?移除後共享空間成員將無法再訪問該智能體。', + removeShareSuccess: '已從共享空間中移除', + removeShareFailed: '移除失敗,請重試', + requireApproval: '需要審覈', + requireApprovalDesc: '開啓後,新成員加入需要管理員審覈', + searchable: '開放可被搜尋', + searchableDesc: '開啓後,共享空間將出現在「加入共享空間」的搜尋列表中,他人可搜尋並申請加入,無需邀請碼', + memberLimit: '成員數量上限', + memberLimitDesc: '超過上限後無法再添加新成員;設爲 0 表示不限制', + memberLimitPlaceholder: '0 表示不限制', + memberLimitHint: '當前成員數:{count}', + joinRequests: '加入申請', + joinRequestsDesc: '審覈待加入共享空間的申請', + noPendingRequests: '暫無待審覈的申請', + pendingJoinRequestsBadge: '有待審批的加入申請', + pendingReview: '待審批', + assignRole: '分配角色', + approve: '通過', + reject: '拒絕', + approveSuccess: '已通過申請', + rejectSuccess: '已拒絕申請', + reviewFailed: '操作失敗,請重試' + }, + detail: { + removeMemberConfirm: '確定要移除成員「{name}」嗎?', + removeMember: '移除成員' + }, + role: { + admin: '管理員', + editor: '編輯', + viewer: '只讀' + }, + sharedResources: { + kbListTitle: '共享知識庫', + agentListTitle: '共享智能體', + loading: '加載中…', + columns: { + name: '名稱', + sharedBy: '共享者', + sharedAt: '共享時間', + permission: '權限' + } + }, + joinRequests: { + listTitle: '待審覈申請', + searchPlaceholder: '搜尋申請人…', + loading: '加載申請中…', + emptySearch: '未找到匹配「{q}」的申請', + typeJoin: '加入', + typeUpgrade: '升級', + rejectConfirm: '確認拒絕該申請?', + approveTitle: '通過申請', + approveDesc: '爲「{name}」分配加入後的角色', + columns: { + applicant: '申請人', + type: '類型', + requestedRole: '申請角色', + message: '申請說明', + appliedAt: '申請時間' + } + }, + members: { + listTitle: '共享空間成員', + searchPlaceholder: '搜尋成員…', + loading: '加載成員中…', + emptySearch: '未找到匹配「{q}」的成員', + columns: { + member: '成員', + role: '角色', + joinedAt: '加入時間', + operations: '操作' + } + }, + invite: { + loading: '加載中...', + previewTitle: '加入共享空間', + inputDesc: '輸入邀請碼或貼上邀請鏈接中的邀請碼,查看共享空間信息後加入', + previewAction: '查看', + primaryJoin: '加入', + invalidCode: '邀請碼無效或已過期', + previewFailed: '預覽失敗,請稍後重試', + knowledgeBases: '知識庫', + agents: '智能體', + alreadyMember: '您已經是該共享空間的成員', + submitRequest: '申請加入', + requireApprovalTip: '該共享空間需要管理員審覈後才能加入', + approvalLabel: '加入方式', + needApproval: '需要審覈', + noApproval: '無需審覈', + defaultRoleAfterJoin: '加入後默認權限:{role}', + requestRole: '申請角色', + selectRole: '選擇角色', + messagePlaceholder: '選填:申請說明(如自我介紹或加入原因)', + applicationNote: '申請說明(選填)', + joinSuccess: '成功加入共享空間!', + joinFailed: '加入失敗,請稍後重試', + requestSubmitted: '申請已提交,請等待管理員審覈', + requestFailed: '申請提交失敗,請稍後重試', + viewOrganization: '查看共享空間' + }, + join: { + title: '加入共享空間', + joining: '正在加入共享空間...', + success: '成功加入共享空間!', + failed: '加入共享空間失敗', + noCode: '未找到邀請碼', + goToOrganizations: '前往共享空間列表', + confirmTitle: '確認加入共享空間', + confirm: '確認加入', + preview: '預覽並加入', + memberCount: '{count} 個成員', + shareCount: '{count} 個共享知識庫', + agentShareCount: '{count} 個智能體', + alreadyMember: '您已經是該共享空間的成員', + invalidCode: '無效的邀請碼', + byInviteCode: '輸入邀請碼', + searchSpaces: '搜尋共享空間', + searchSpacesDesc: '瀏覽或搜尋已開放可被搜尋的共享空間,無需邀請碼即可加入', + searchSpacesPlaceholder: '按共享空間名稱、描述或 ID 搜尋', + spaceId: '共享空間ID', + noSearchResult: '未找到匹配的共享空間', + noSearchableSpaces: '暫無開放可被搜尋的共享空間,或輸入關鍵詞搜尋', + memberLimitReached: '成員已滿', + backToSearch: '返回搜尋' + }, + rbac: { + needTenantAdminTip: '此操作需要當前空間的 admin 或更高角色,請聯繫空間 Owner 調整權限。', + cannotCreate: '當前空間角色不足,無法建立共享空間', + cannotJoin: '當前空間角色不足,無法加入或申請加入共享空間', + cannotManage: '當前空間角色不足,無法管理共享空間' + } + }, + promptTemplate: { + noTemplates: '暫無模板', + selectTemplate: '選擇模板', + useTemplate: '使用模板', + resetDefault: '還原默認', + default: '默認', + withKnowledgeBase: '知識庫', + withWebSearch: '網絡搜尋' + }, + mcpServiceDialog: { + addTitle: '添加 MCP 服務', + editTitle: '編輯 MCP 服務', + basicSection: '基本信息', + connectionSection: '連接配置', + enableServiceDesc: '關閉後該服務不會被調用', + testAfterSaveHint: '保存後可測試連接', + unitSecond: '秒', + unitTimes: '次', + name: '服務名稱', + namePlaceholder: '請輸入服務名稱', + description: '描述', + descriptionPlaceholder: '請輸入服務描述', + transportType: '傳輸類型', + serviceUrl: '服務 URL', + serviceUrlPlaceholder: 'https://example.com/mcp', + enableService: '啓用服務', + authConfig: '認證配置', + authType: '認證方式', + authTypeNone: '無 / 自定義 Header', + authTypeApiKey: 'API Key / Token', + authTypeOAuth: 'OAuth 2.0(首次連接授權)', + oauthRefreshable: 'Token 已過期,將在下次使用時自動刷新', + oauthAuthorizeHint: '點擊「去授權」會先自動保存當前配置,再發起授權(每個用戶獨立授權)。', + apiKeyHeader: '請求頭名稱', + apiKeyHeaderDesc: '留空默認 X-API-Key。Bearer 方式請填 Authorization,並在下方金鑰值中寫 “Bearer ”;需要裸 token 時填 Authorization 並直接填入 token。', + credentialValue: '金鑰值 / Token', + optional: '可選', + advancedConfig: '高級配置', + timeoutSec: '超時時間(秒)', + retryCount: '重試次數', + retryDelaySec: '重試延遲(秒)', + codeImport: { + toggle: '從代碼導入', + hint: '貼上標準 mcpServers JSON 配置,自動填充表單', + parse: '解析並填充', + editOverwriteHint: '導入會覆蓋當前表單內容(不影響已保存的憑證,需點保存生效)', + toasts: { + filled: '已填充表單,請檢查後保存', + multipleServers: '檢測到多個服務,已導入第一個:{name}' + }, + errors: { + empty: '請先貼上配置內容', + invalidJson: '無法解析,請檢查 JSON 格式', + noServer: '未找到 MCP 服務配置', + missingUrl: '配置缺少 url', + stdioUnsupported: '暫不支持 stdio(command/args)配置,請使用帶 url 的遠程配置' + } + }, + customHeaders: { + label: '自定義請求頭(可選)', + desc: '附加到每次 MCP 請求的 HTTP 請求頭,常用於企業閘道器鑑權、鏈路追蹤等場景。', + add: '添加請求頭', + keyPlaceholder: 'Header 名稱', + valuePlaceholder: 'Header 值' + }, + toasts: { + created: 'MCP 服務已建立', + updated: 'MCP 服務已更新', + createFailed: '建立 MCP 服務失敗', + updateFailed: '更新 MCP 服務失敗', + oauthRequired: '該服務需要 OAuth 授權,已自動切換爲 OAuth 2.0,請保存後點擊「去授權」。' + }, + rules: { + nameRequired: '請輸入服務名稱', + transportRequired: '請選擇傳輸類型', + urlRequired: '請輸入服務 URL', + urlInvalid: '請輸入有效的 URL' + } + }, + ollamaSettings: { + title: 'Ollama 配置', + description: '管理本地 Ollama 服務,查看和下載模型', + toasts: { + connected: '連接成功', + connectFailed: '連接失敗,請檢查 Ollama 是否運行', + listFailed: '獲取模型列表失敗', + downloadFailed: '下載失敗,請稍後重試', + downloadStarted: '已開始下載模型 {name}', + downloadCompleted: '模型 {name} 下載完成', + progressFailed: '查詢下載進度失敗' + }, + installed: { + title: '已下載的模型', + desc: '已安裝在 Ollama 中的模型列表', + empty: '暫無已下載的模型' + }, + download: { + title: '下載新模型', + descPrefix: '輸入模型名稱下載,', + browse: '瀏覽 Ollama 模型庫', + placeholder: '如:qwen2.5:0.5b', + download: '下載', + downloading: '正在下載: {name}' + }, + address: { + label: '服務地址', + desc: '本地 Ollama 服務的 API 地址,由系統自動檢測。如需修改,請在 .env 配置文件中設置', + placeholder: 'http://localhost:11434', + failed: '連接失敗,請檢查 Ollama 是否運行或服務地址是否正確' + }, + status: { + label: 'Ollama 服務狀態', + desc: '自動檢測本地 Ollama 服務是否可用。如果服務未運行或地址配置錯誤,將顯示"不可用"狀態', + testing: '檢測中', + available: '可用', + unavailable: '不可用', + untested: '未檢測', + retest: '重新檢測' + } + }, + modelSettings: { + title: '模型配置', + description: '管理不同類型的 AI 模型,支持 Ollama 本地模型和遠程 API', + copySuffix: ' 副本', + builtinTag: '內置', + confirmDelete: '確定刪除模型「{name}」嗎?', + debug: { + title: '模型測試', + description: '向已配置的模型發送真實請求,查看響應與耗時', + groupModel: '選擇模型', + groupInput: '測試輸入', + groupResult: '運行結果', + modelType: '模型類型', + model: '模型', + modelPlaceholder: '請選擇要測試的模型', + noModelsForType: '當前類型暫無已添加模型', + query: '輸入內容', + queryPlaceholder: '輸入要發送給模型的內容', + embeddingInput: '待向量化文本', + embeddingPlaceholder: '輸入要生成 Embedding 的文本', + vlmPrompt: '圖片提示詞', + vlmPromptPlaceholder: '例如:請詳細描述這張圖片', + documents: '候選文檔', + documentsPlaceholder: '每行輸入一個候選文檔', + documentsHint: '每個非空行會作爲一個獨立文檔發送給 ReRank 模型', + imageFile: '圖片文件', + audioFile: '音頻文件', + chooseFile: '選擇文件', + parameters: '請求參數', + thinking: '思考模式', + thinkingDesc: '僅對支持思考模式的模型生效', + systemPrompt: 'System Prompt', + systemPromptPlaceholder: '可選,輸入系統提示詞', + run: '運行測試', + copyResult: '複製結果', + history: '歷史記錄', + thinkOn: '思考開啓', + thinkOff: '思考關閉', + runLabel: '第 {n} 次運行', + success: '調用成功', + failed: '調用失敗', + rawResponse: '響應內容', + requestPreview: '請求預覽', + requestFailed: '模型測試請求失敗', + metrics: { + dimension: '向量維度', + resultCount: '結果數量', + answerChars: '回答字符數', + reasoningChars: '推理字符數', + reasoningReturned: '返回推理內容', + textChars: '轉寫字符數', + segmentCount: '分段數量' + } + }, + builtinModels: { + title: '內置模型', + description: '內置模型對所有空間可見,敏感信息會被隱藏,且不可編輯或刪除。', + descriptionAdmin: '內置模型對所有空間可見。系統管理員可編輯配置和憑證;刪除仍由部署配置管理。', + viewGuide: '查看內置模型管理指南' + }, + toasts: { + nameRequired: '模型名稱不能爲空', + nameTooLong: '模型名稱不能超過100個字符', + displayNameTooLong: '顯示名稱不能超過100個字符', + baseUrlRequired: 'Remote API 類型必須填寫 Base URL', + baseUrlInvalid: 'Base URL 格式不正確,請輸入有效的 URL', + dimensionInvalid: 'Embedding 模型必須填寫有效的向量維度(128-4096)', + updated: '模型已更新', + added: '模型已添加', + saveFailed: '保存模型失敗', + deleted: '模型已刪除', + deleteFailed: '刪除模型失敗', + builtinCannotEdit: '內置模型不能編輯', + builtinCannotDelete: '內置模型不能刪除', + builtinCannotCopy: '內置模型不能複製', + copied: '模型已複製', + copyFailed: '複製模型失敗' + }, + asr: { + title: 'ASR 語音模型', + desc: '配置用於語音識別和音頻轉錄的語音轉文本模型(如 OpenAI Whisper)', + empty: '暫無 ASR 語音模型' + }, + vllm: { + title: 'VLLM 視覺模型', + desc: '配置用於視覺理解和多模態的視覺語言模型', + empty: '暫無 VLLM 視覺模型' + }, + rerank: { + title: 'ReRank 模型', + desc: '配置用於結果重排序的模型', + empty: '暫無 ReRank 模型' + }, + embedding: { + title: 'Embedding 模型', + desc: '配置用於文本向量化的嵌入模型', + empty: '暫無 Embedding 模型' + }, + chat: { + title: '對話模型', + desc: '配置用於對話的大語言模型', + empty: '暫無對話模型' + }, + source: { + remote: 'Remote', + openaiCompatible: 'OpenAI兼容', + custom: '自定義' + }, + actions: { + addModel: '添加模型', + debugModel: '模型測試' + }, + typeShort: { + chat: '對話', + embedding: 'Embedding', + rerank: 'ReRank', + vllm: '視覺', + asr: '語音' + } + }, + mcpSettings: { + title: 'MCP 服務管理', + description: '管理外部 MCP (Model Context Protocol) 服務,在 Agent 模式下調用外部工具和資源', + enabled: '已啓用', + disabled: '已禁用', + configuredServices: '已配置的服務', + manageAndTest: '管理和測試 MCP 服務連接', + addService: '添加服務', + empty: '暫無 MCP 服務', + deleteConfirmBody: '確定要刪除 MCP 服務"{name}"嗎?此操作無法撤銷。', + unnamed: '未命名', + builtin: '內置', + toasts: { + loadFailed: '加載 MCP 服務列表失敗', + enabled: '已啓用 MCP 服務', + disabled: '已禁用 MCP 服務', + updateStateFailed: '更新 MCP 服務狀態失敗', + testing: '正在測試 {name}...', + noResponse: '測試失敗:未收到伺服器響應', + testFailed: '測試 MCP 服務失敗', + deleted: 'MCP 服務已刪除', + deleteFailed: '刪除 MCP 服務失敗' + }, + actions: { + test: '測試連接' + } + }, + conversationSettings: { + maxTokens: { + desc: '生成回答的最大Token數量' + }, + temperature: { + desc: '控制模型輸出的隨機性,0最確定,1最隨機' + }, + systemPrompt: { + desc: '用於普通模式對話的系統級Prompt' + }, + contextTemplate: { + desc: '用於普通模式下基於檢索結果生成回答的Prompt模板' + }, + rerankModel: { + desc: '用於搜尋結果重排序的模型(可選)' + }, + chatModel: { + desc: '用於總結和摘要的大語言模型' + }, + rewritePrompt: { + desc: '控制問題改寫的系統提示詞' + }, + fallbackPrompt: { + desc: '當選擇模型兜底時使用的提示模板' + }, + fallbackResponse: { + desc: '當兜底策略爲固定回覆時返回的文本' + }, + fallbackStrategy: { + desc: '檢索無結果時採用的處理方式' + }, + enableQueryExpansion: { + desc: '召回不足時調用大模型生成擴展查詢(增加時延與成本)' + }, + enableRewrite: { + desc: '多輪對話自動改寫問題以獲得更優召回' + }, + rerankThreshold: { + desc: '重排序階段的最低得分閾值' + }, + rerankTopK: { + desc: '重排序後進入答案生成的文檔數量' + }, + vectorThreshold: { + desc: '向量召回的最低相似度閾值' + }, + keywordThreshold: { + desc: '關鍵詞檢索的最低得分閾值' + }, + embeddingTopK: { + desc: '向量召回階段保留的文檔數量' + }, + maxRounds: { + desc: '用於多輪上下文和問題改寫的歷史輪數' + }, + models: { + chatGroupLabel: '思考 / 對話模型' + } + }, + agentSettings: { + systemPrompt: { + desc: '配置 Agent 的系統提示詞,支持佔位符模板。佔位符會在運行時自動替換爲實際內容。' + }, + allowedTools: { + desc: '當前 Agent 可使用的工具列表' + }, + temperature: { + desc: '控制模型輸出的隨機性,0 最確定,1 最隨機' + }, + rerankModel: { + desc: '搜尋結果重排序,統一不同來源的相關度分數' + }, + thinkingModel: { + desc: '用於 Agent 推理和規劃的 LLM 模型' + }, + maxIterations: { + desc: 'Agent 執行任務時的最大推理步驟數' + }, + modelRecommendation: { + title: '模型推薦' + } + }, + upload: { + uploadDocument: '上傳文檔', + uploadFolder: '上傳文件夾', + onlineEdit: '在線編輯', + deleteRecord: '刪除記錄' + }, + time: { + today: '今天', + yesterday: '昨天', + last7Days: '近7天', + last30Days: '近30天', + lastYear: '近1年', + earlier: '更早', + pinned: '已置頂' + }, + platform: { + subtitle: '大模型驅動的企業級知識框架', + description: 'RAG 檢索、智能體推理、Wiki 知識庫,讓文檔真正被理解和運用', + rag: 'RAG 增強生成', + agent: 'ReAct 智能體', + wiki: 'Wiki 知識庫', + hybridSearch: '混合檢索', + multimodalParsing: '多模態文檔解析', + hybridSearchEngine: '混合檢索 + 知識圖譜', + ragQandA: 'ReAct 智能體問答', + independentTenant: '獨立空間', + fullApiAccess: '完整 API 訪問', + knowledgeBaseManagement: '知識庫管理', + carousel: { + agenticRagTitle: 'Agentic RAG', + agenticRagDesc: 'ReAct 推理 + 工具調用 + 多步思考', + hybridSearchTitle: '混合檢索策略', + hybridSearchDesc: 'BM25 + 向量 + 知識圖譜', + wikiTitle: 'Wiki 知識庫', + wikiDesc: '文檔蒸餾爲結構化互聯知識', + smartDocRetrievalTitle: '智能文檔檢索', + smartDocRetrievalDesc: 'PDF/Word/圖片多格式解析' + } + }, + font: { + uiFont: '界面字體', + uiFontDescription: '用於菜單、正文、按鈕等界面大部分文字的字體', + monoFont: '代碼字體', + monoFontDescription: '用於代碼塊、終端命令、API 金鑰、文件路徑等技術內容,每個字符等寬顯示,避免 0/O、1/l 混淆', + selectFont: '選擇字體', + sansPreview: '示例 Sample 字體 Font — Aa Gg Oo 0123', + monoPreview: 'const msg = \'Hello\'; // 0O1l', + fontSize: '字體大小', + fontSizeDescription: '整體縮放界面(文字、圖標、間距等),切換後立即生效', + size: { + small: '小', + normal: '正常', + large: '大' + }, + mono: { + system: '系統默認', + menlo: 'Menlo', + monaco: 'Monaco', + consolas: 'Consolas', + cascadia: 'Cascadia Code', + 'dejavu-mono': 'DejaVu Sans Mono', + 'liberation-mono': 'Liberation Mono', + monospace: '通用等寬' + }, + sans: { + system: '系統默認', + pingfang: '蘋方 PingFang SC', + georgia: 'Georgia 襯線', + yahei: '微軟雅黑 Microsoft YaHei', + times: 'Times New Roman 襯線', + 'noto-cjk': 'Noto Sans CJK', + 'dejavu-serif': 'DejaVu Serif 襯線', + 'sans-serif': '通用無襯線' + } + }, + theme: { + theme: '主題模式', + themeDescription: '選擇界面的顯示主題,支持跟隨系統自動切換', + light: '淺色', + dark: '深色', + system: '跟隨系統', + selectTheme: '選擇主題' + }, + general: { + title: '常規設置', + allSettings: '全部設置', + personalSettings: '個人設置', + helpAndDocs: '幫助與文檔', + description: '配置語言、外觀等基礎選項', + settings: '設置', + close: '關閉設置' + }, + language: { + zhCN: '簡體中文', + enUS: 'English', + ruRU: 'Русский', + koKR: '한국어', + selectLanguage: '選擇語言', + language: '語言', + languageDescription: '選擇界面顯示語言', + languageSaved: '語言設置已保存' + }, + model: { + modelName: '模型名稱', + defaultTag: '默認', + addModelInSettings: '前往全局設置添加模型', + loadFailed: '加載模型列表失敗', + selectModelPlaceholder: '請選擇模型', + searchPlaceholder: '搜尋模型...', + builtinTag: '內置', + editor: { + addTitle: '添加模型', + editTitle: '編輯模型', + sectionType: '模型類型', + typeLabel: '模型類型', + sectionSource: '模型來源', + sectionProvider: '接入配置', + sectionAdvanced: '高級選項', + sourceLabel: '模型來源', + sourceLocal: 'Ollama', + sourceRemote: 'API', + baseUrlLabel: 'Base URL', + displayNameLabel: '顯示名稱(可選)', + displayNamePlaceholder: '例如:客服問答模型', + displayNameDesc: '僅用於界面展示,實際調用仍使用上面的模型名稱。', + baseUrlPlaceholder: '例如:https://api.openai.com/v1', + baseUrlPlaceholderVllm: '例如:http://localhost:11434/v1', + baseUrlPlaceholderAsr: '例如:https://api.openai.com/v1', + apiKeyOptional: 'API Key(可選)', + apiKeyPlaceholder: '輸入 API Key', + customHeadersLabel: '自定義請求頭(可選)', + customHeadersDesc: '調用遠程模型 API 時附加的 HTTP 請求頭,常用於企業閘道器鑑權、鏈路追蹤等場景;Authorization、Content-Type 等保留頭會被自動忽略。', + customHeadersAdd: '添加請求頭', + customHeadersKeyPlaceholder: 'Header 名稱', + customHeadersValuePlaceholder: 'Header 值', + testing: '測試中...', + testConnection: '測試連接', + downloadLabel: '下載: {keyword}', + refreshList: '刷新列表', + dimensionLabel: '向量維度', + dimensionPlaceholder: '例如:1536', + checkDimension: '檢測維度', + dimensionDetected: '檢測成功,向量維度:{value}', + dimensionFailed: '檢測失敗,請手動輸入維度', + remoteDimensionDetected: '檢測到向量維度:{value}', + dimensionOverrideLabel: '自定義輸出維度', + dimensionOverrideDesc: '僅在確認該模型支持 dimensions 參數時開啓;默認只使用檢測到的實際維度。', + supportsVisionLabel: '支持視覺/多模態', + supportsVisionDesc: '模型是否支持圖片等多模態輸入', + maxConcurrencyLabel: '後臺併發上限', + maxConcurrencyPlaceholder: '0 表示使用全局默認', + maxConcurrencyDesc: '限制文檔入庫/富化等後臺任務對該模型的併發調用數(按模型全副本共享)。0 或留空表示沿用全局默認;不影響交互式對話。', + thinkingControlLabel: '思考模式參數格式', + thinkingControlDesc: '決定智能體「思考模式」開/關時如何寫入 API。已嘗試按廠商/模型預選,若與實際情況不符請按 API 文檔手動修改;選「不寫入」時,智能體「思考模式」開關不生效。', + dimensionHint: '模型已選擇,點擊"檢測維度"按鈕自動獲取向量維度', + loadModelListFailed: '加載模型列表失敗', + listRefreshed: '列表已刷新', + fillModelAndUrl: '請先填寫模型標識和 Base URL', + remoteBaseUrlRequired: 'Remote API 類型必須填寫 Base URL', + unsupportedModelType: '不支持的模型類型', + connectionSuccess: '連接成功', + connectionFailed: '連接失敗', + connectionConfigError: '連接失敗,請檢查配置', + downloadStarted: '開始下載 {name}', + downloadCompleted: '{name} 下載完成', + downloadFailed: '{name} 下載失敗', + downloadStartFailed: '啓動下載失敗', + ollamaUnavailable: 'Ollama服務不可用,無法選擇本地模型', + ollamaNotSupportRerank: 'Ollama 不支持 ReRank 模型,請使用遠程接口配置', + goToOllamaSettings: '查看設置', + providerLabel: '服務商', + providerPlaceholder: '選擇模型服務商', + providers: { + novita: { + label: 'Novita AI', + description: 'moonshotai/kimi-k2.5, zai-org/glm-5, minimax/minimax-m2.7, qwen/qwen3-embedding-0.6b 等' + }, + nvidia: { + label: 'NVIDIA', + description: 'deepseek-ai-deepseek-v3_1, nv-embed-v1, rerank-qa-mistral-4b, etc.' + }, + lkeap: { + label: '騰訊雲 LKEAP', + description: 'DeepSeek-R1、DeepSeek-V3、lke-reranker-base 等' + }, + longcat: { + label: 'LongCat AI', + description: 'LongCat-Flash-Chat, LongCat-Flash-Thinking, etc.' + }, + qianfan: { + label: '百度千帆 Baidu Cloud', + description: 'ernie-5.0-thinking-preview, embedding-v1, bce-reranker-base, etc.' + }, + moonshot: { + label: '月之暗面 Moonshot', + description: 'kimi-k2-turbo-preview, moonshot-v1-8k-vision-preview, etc.' + }, + qiniu: { + label: '七牛雲 Qiniu', + description: 'deepseek/deepseek-v3.2-251201, z-ai/glm-4.7, etc.' + }, + modelscope: { + label: '魔搭 ModelScope', + description: 'Qwen/Qwen3-8B, Qwen/Qwen3-Embedding-8B, etc.' + }, + gpustack: { + label: 'GPUStack', + description: 'Choose your deployed model on GPUStack' + }, + gemini: { + label: 'Google Gemini', + description: 'gemini-3-flash-preview, gemini-2.5-pro 等' + }, + mimo: { + label: '小米 MiMo', + description: 'mimo-v2-flash' + }, + minimax: { + label: 'MiniMax', + description: 'MiniMax-M3, MiniMax-M2.7, MiniMax-M2.7-highspeed 等' + }, + hunyuan: { + label: '騰訊混元 Hunyuan', + description: 'hunyuan-pro, hunyuan-standard, hunyuan-embedding, etc.' + }, + deepseek: { + label: 'DeepSeek', + description: 'deepseek-chat, deepseek-reasoner 等' + }, + volcengine: { + label: '火山引擎 Volcengine', + description: 'doubao-1-5-pro-32k-250115, doubao-embedding-vision-250615, etc.' + }, + jina: { + label: 'Jina', + description: 'jina-clip-v1, jina-embeddings-v2-base-zh, etc.' + }, + siliconflow: { + label: '硅基流動 SiliconFlow', + description: 'deepseek-ai/DeepSeek-V3.1, etc.' + }, + generic: { + label: '自定義 (OpenAI兼容接口)', + description: 'Generic API endpoint (OpenAI-compatible)' + }, + requesty: { + label: 'Requesty', + description: 'openai/gpt-4o-mini, anthropic/claude-sonnet-4-5, etc.' + }, + openrouter: { + label: 'OpenRouter', + description: 'openai/gpt-5.2-chat, google/gemini-3-flash-preview, etc.' + }, + zhipu: { + label: '智譜 BigModel', + description: 'glm-4.7, embedding-3, rerank, etc.' + }, + aliyun: { + label: '阿里雲 DashScope', + description: 'qwen-plus, tongyi-embedding-vision-plus, qwen3-rerank, etc.' + }, + azure_openai: { + label: 'Azure OpenAI', + description: 'Microsoft Azure 上的 OpenAI 服務' + }, + anthropic: { + label: 'Anthropic', + description: 'Claude models via native Anthropic Messages API' + }, + openai: { + label: 'OpenAI', + description: 'gpt-5.2, gpt-5-mini, etc.' + } + }, + validation: { + modelNameRequired: '請輸入模型名稱', + modelNameEmpty: '模型名稱不能爲空', + modelNameMax: '模型名稱不能超過100個字符', + baseUrlRequired: '請輸入 Base URL', + baseUrlEmpty: 'Base URL 不能爲空', + baseUrlInvalid: 'Base URL 格式不正確,請輸入有效的 URL' + }, + thinkingControl: { + thinkingType: { + label: 'thinking.type', + hint: '火山引擎 Ark;騰訊雲 LKEAP(DeepSeek V3 等,選 LKEAP 時默認此項;R1 請改「不寫入」)' + }, + enableThinking: { + label: 'enable_thinking', + hint: '阿里雲 DashScope:qwen3、qwen-plus、qwen-max、qwen-turbo' + }, + chatTemplateKwargs: { + label: 'chat_template_kwargs', + hint: '自定義 OpenAI 兼容、NVIDIA NIM、vLLM / 本地 Qwen 部署' + }, + none: { + label: '不寫入思考參數', + hint: '智能體「思考模式」開關不生效,不會在請求中寫入思考相關參數' + } + }, + volcengine: { + accessKeyLabel: 'Access Key ID', + accessKeyPlaceholder: '火山引擎訪問金鑰 Access Key ID', + secretKeyLabel: 'Secret Access Key', + secretKeyPlaceholder: '火山引擎訪問金鑰 Secret Access Key', + rerankCredentialHint: 'Rerank 使用 VikingDB AK/SK 簽名(非方舟 API Key),模型建議填寫 doubao-seed-rerank。' + }, + lkeap: { + secretIdLabel: 'SecretId', + secretIdPlaceholder: '騰訊雲 API 金鑰 SecretId', + secretKeyLabel: 'SecretKey', + secretKeyPlaceholder: '騰訊雲 API 金鑰 SecretKey', + regionLabel: '地域', + regionPlaceholder: 'ap-guangzhou', + regionDesc: 'RunRerank 支持 ap-beijing、ap-guangzhou 等,默認 ap-guangzhou', + rerankCredentialHint: 'Rerank 使用騰訊雲 API 簽名(非 OpenAI API Key)。請在雲 API 金鑰控制檯建立 SecretId/SecretKey。' + }, + modelNamePlaceholder: { + local: '例如:llama2:latest', + remote: '例如:gpt-4, claude-3-opus', + localVllm: '例如:llava:latest', + remoteVllm: '例如:gpt-4-vision-preview', + remoteAsr: '例如:whisper-1' + }, + description: { + chat: '配置用於對話的大語言模型', + embedding: '配置用於文本向量化的嵌入模型', + rerank: '配置用於結果重排序的模型', + vllm: '配置用於視覺理解和多模態的視覺語言模型', + asr: '配置用於語音識別和音頻轉錄的語音轉文本模型', + default: '配置模型信息' + } + } + }, + error: { + networkError: '網絡錯誤,請檢查您的網絡連接', + invalidCredentials: '用戶名或密碼錯誤', + tokenRefreshFailed: 'Token刷新失敗', + pleaseRelogin: '請重新登錄', + fileSizeExceeded: '文件大小不能超過 {size}M!', + unsupportedFileType: '不支持的文件類型!', + invalidFileType: '文件類型錯誤!', + invalidImageLink: '無效的圖片鏈接', + missingKbId: '缺少知識庫ID', + tokenNotFound: '未找到登錄權杖,請重新登錄', + streamFailed: '流式連接失敗', + initialization: { + checkFailed: '檢查失敗', + testFailed: '測試失敗' + }, + tenant: { + listFailed: '獲取空間列表失敗', + searchFailed: '搜尋空間失敗', + getApiPrincipalConfigFailed: '獲取 API 用戶身份配置失敗', + updateApiPrincipalConfigFailed: '更新 API 用戶身份配置失敗', + createApiPrincipalTestTokenFailed: '生成 API 測試 Token 失敗', + updateFailed: '更新空間信息失敗', + deleteFailed: '刪除空間失敗' + }, + model: { + createFailed: '建立模型失敗', + getFailed: '獲取模型失敗', + updateFailed: '更新模型失敗', + deleteFailed: '刪除模型失敗' + }, + auth: { + loginFailed: '登錄失敗', + registerFailed: '註冊失敗', + getUserFailed: '獲取用戶信息失敗', + getTenantFailed: '獲取空間信息失敗', + updatePreferencesFailed: '更新個性化設置失敗', + refreshTokenFailed: '刷新Token失敗', + logoutFailed: '登出失敗', + validateTokenFailed: 'Token驗證失敗' + } + }, + mcp: { + testResult: { + title: '測試結果: {name}', + connectionSuccess: '連接成功', + connectionFailed: '連接失敗', + toolsTitle: '可用工具', + resourcesTitle: '可用資源', + descriptionLabel: '描述', + schemaLabel: '參數結構', + emptyDescription: '該服務未提供工具或資源', + requireApproval: '需人工審覈', + requireApprovalTip: '開啓後,Agent 調用該工具前會暫停並等待確認,適用於可能改庫/刪文件等高危操作', + approvalSaveFailed: '保存審覈設置失敗' + } + }, + system: { + title: '系統信息', + sectionDescription: '查看系統版本信息和用戶帳號配置', + loadingInfo: '正在加載信息...', + retry: '重試', + versionLabel: '應用版本', + versionDescription: '當前應用服務(weknora-app)的版本號', + frontendVersionLabel: 'UI 版本', + frontendVersionDescription: '當前 UI 界面(weknora-ui)的構建版本號', + versionMismatch: '與應用版本不一致', + buildTimeLabel: '構建時間', + buildTimeDescription: '系統構建的時間', + goVersionLabel: 'Go 版本', + goVersionDescription: '後端使用的 Go 語言版本', + startedAtLabel: '服務啓動時間', + startedAtDescription: '當前後端進程最近一次啓動的時刻', + uptimeLabel: '運行時長', + uptimeDescription: '自本次啓動以來的連續運行時間', + uptimeDays: '{n} 天', + uptimeHours: '{n} 小時', + uptimeMinutes: '{n} 分鐘', + uptimeSeconds: '{n} 秒', + dbVersionLabel: '資料庫版本', + dbVersionDescription: '當前資料庫遷移版本號', + dbMigrationFailedTag: '遷移失敗', + dbMigrationFailedTitle: '資料庫遷移失敗', + dbMigrationFailedDesc: '啓動時資料庫遷移未成功完成,部分表或索引可能未建立,會導致 Wiki、知識圖譜等功能異常。建議先查看排查文檔自助修復;如仍無法解決,請通過下方鏈接反饋。', + dbMigrationViewDocs: '查看排查文檔', + dbMigrationReportIssue: '無法修復?提交 Issue', + keywordIndexEngineLabel: '關鍵詞索引引擎', + keywordIndexEngineDescription: '當前使用的關鍵詞索引引擎', + vectorStoreEngineLabel: '向量存儲引擎', + vectorStoreEngineDescription: '當前使用的向量存儲引擎', + graphDatabaseEngineLabel: '圖資料庫引擎', + graphDatabaseEngineDescription: '當前使用的圖資料庫引擎', + unknown: '未知', + globalSettings: { + title: '系統設置', + description: '平台級運行時配置,保存後立即對所有空間生效。僅系統管理員可見可改。', + loading: '加載中...', + empty: '暫無可配置的系統設置', + saving: '保存中', + saved: '已保存', + saveAnnouncement: '{label} 已保存', + badgeRequiresRestart: '需重啓', + badgeSecret: '敏感', + badgeHighRisk: '高風險', + badgeOverride: '已覆蓋', + badgeOverrideTooltip: '該值已由管理員保存到資料庫,覆蓋了環境變數與默認值', + modifiedAt: '上次修改:{value}', + tagInputPlaceholder: '回車添加條目,例:example.com / *.foo.com / 10.0.0.0/8', + audit: { + tabLabel: '審計日誌', + description: '記錄平台級操作:系統設置變更、系統管理員授予/回收、配額批量同步等。按時間倒序展示。', + refresh: '刷新', + retry: '重試', + loading: '加載中...', + end: '已經到底了。', + empty: '暫無平台級審計事件。', + forbidden: '無權查看平台審計日誌。', + systemActor: '系統', + drawer: { + sectionSummary: '事件概要', + sectionIdentifiers: '關聯標識', + sectionRequest: '請求信息', + targetChange: '變更內容', + requestMethod: '請求方法' + }, + expanded: { + actorId: '操作人 ID', + targetUserId: '目標用戶 ID', + targetType: '目標類型', + targetId: '目標 ID', + details: '原始詳情' + }, + target: { + bulkQuota: '批量同步:默認存儲配額', + bulkQuotaDiff: '應用到 {count} 個空間({gb} GB)', + promoteIdempotent: '目標已是系統管理員(冪等)', + revokeNoop: '目標本就不是系統管理員(冪等)', + requiredRole: '需要角色:{role}', + valueNull: '(空)' + }, + outcome: { + success: '成功', + denied: '拒絕' + }, + action: { + 'system.setting_changed': '系統設置變更', + 'system.admin_promoted': '授予系統管理員', + 'system.api_key_created': '建立平台 API Key', + 'system.api_key_revoked': '吊銷平台 API Key', + 'system.admin_revoked': '回收系統管理員', + 'system.user_password_reset': '重置用戶密碼', + 'system.queue_task_retried': '重新執行失敗任務', + 'system.queue_task_deleted': '清除失敗任務記錄', + 'system.queue_task_run_now': '立即執行佇列任務', + 'system.queue_task_cancelled': '終止佇列任務', + 'system.queue_archived_purged': '清除全部失敗任務' + }, + columns: { + time: '時間', + actor: '操作人', + action: '事件', + target: '目標', + path: '請求', + outcome: '結果' + }, + actorRole: { + system_admin: '系統管理員' + }, + errors: { + generic: '加載審計日誌失敗' + } + }, + bulkApply: { + label: '應用到所有現有空間', + tooltip: '保存的值默認只對之後新建的空間生效;點擊此按鈕將當前值同步寫入所有現有空間。', + confirmBtn: '確認應用', + confirmBody: '將把所有現有空間的存儲配額覆蓋爲 {value} GB。如有空間被運維單獨調整過的配額,也會一併被覆蓋。是否繼續?', + success: '已將 {count} 個空間的存儲配額更新爲 {gb} GB', + failed: '應用到所有空間失敗' + }, + passwordReset: { + label: '重置用戶密碼', + description: '爲忘記密碼的其他用戶設置新密碼。重置成功後,該用戶當前所有登錄會話都會失效,需要使用新密碼重新登錄。', + action: '重置密碼', + dialogTitle: '重置其他用戶的密碼', + warning: '這是高風險操作。請覈對用戶信箱;出於安全考慮,不能在這裡重置自己的密碼。', + emailLabel: '用戶信箱', + emailPlaceholder: '輸入需要重置密碼的用戶信箱', + newPasswordLabel: '新密碼', + newPasswordPlaceholder: '8-32 個字符,包含字母和數字', + confirmPasswordLabel: '確認新密碼', + confirmPasswordPlaceholder: '再次輸入新密碼', + confirmBtn: '確認重置', + success: '密碼已重置,該用戶的現有會話已失效', + failed: '重置密碼失敗', + validation: { + emailRequired: '請輸入用戶信箱', + emailInvalid: '請輸入有效的信箱地址', + passwordRequired: '請輸入新密碼', + passwordLength: '密碼長度必須爲 8-32 個字符', + passwordLetter: '密碼必須包含字母', + passwordNumber: '密碼必須包含數字', + confirmRequired: '請再次輸入新密碼', + passwordMismatch: '兩次輸入的密碼不一致' + } + }, + admins: { + label: '系統管理員', + description: '擁有平台級權限的用戶。在右側輸入信箱並回車即可提升用戶爲管理員;點擊 × 即爲撤銷其權限。當前你(自己)已是管理員,不在列表中顯示,也無法被自己撤銷。', + placeholder: '輸入用戶信箱並回車', + loadFailed: '加載系統管理員失敗', + saveSuccess: '已更新系統管理員', + saveFailed: '更新系統管理員失敗', + confirm: { + revoke: { + header: '撤銷系統管理員', + body: '確認撤銷 {email} 的系統管理員權限?撤銷後該用戶將無法再訪問任何系統級功能。', + confirmBtn: '確認撤銷' + }, + promote: { + header: '提升爲系統管理員', + body: '確認將 {email} 提升爲系統管理員?該用戶將獲得平台級權限,可訪問所有空間、修改系統設置、管理其他管理員。', + confirmBtn: '確認提升' + } + } + }, + reset: { + label: '重置', + tooltip: '清除當前 UI 覆蓋,還原使用環境變數或內置默認值', + confirmBtn: '確認重置', + confirmBody: '確定要重置「{label}」嗎?該操作會刪除資料庫中的覆蓋值,回退到環境變數或內置默認值。', + success: '已重置爲默認值', + failed: '重置失敗' + }, + messages: { + loadFailed: '加載系統設置失敗', + saveSuccess: '已保存', + saveFailed: '保存失敗' + }, + listConfirm: { + ssrf: { + whitelist: { + remove: { + header: '移除 SSRF 白名單條目', + body: '確認從 SSRF 白名單中移除 {entry}?移除後該條目將重新受 SSRF 防護攔截。', + confirmBtn: '確認移除' + }, + add: { + header: '添加 SSRF 白名單條目', + body: '確認把 {entry} 加入 SSRF 白名單?該條目匹配到的主機 / IP / 網段會繞過 SSRF 防護,可能讓 Agent 訪問內網服務,請僅在確知用途時添加。', + confirmBtn: '確認添加' + } + } + } + }, + confirm: { + confirmBtn: '確認保存', + cancelBtn: '取消', + emptyValue: '(空)', + bodyAuthRegistrationMode: '即將把「{label}」改爲:{value}\n\n如果切到 self_serve,公網任何人都可以註冊帳號 — 務必確認是預期行爲。' + }, + enumLabels: { + auth: { + default_tenant_mode: { + create_personal: '自動建立個人空間', + tenantless: '不自動建立空間' + }, + registration_mode: { + self_serve: '自助註冊(任何人可註冊)', + invite_only: '僅邀請(關閉公網註冊)' + } + } + }, + keyDescriptions: { + model: { + max_concurrency: '後臺任務(文檔入庫/富化)對單個模型的默認併發上限,按模型 ID 全副本共享。每次調用實時讀取,修改後立即生效、無需重啓。0 或負數表示關閉默認限制(各模型仍會尊重自身在模型管理裡配置的上限)。僅影響後臺任務,不影響交互式對話。' + }, + asynq: { + core_concurrency: '文檔解析與手工重解析的每實例保底併發,可額外借用共享彈性池;修改後需重啓。', + postprocess_concurrency: '解析完成後的輕量收尾和富化扇出專用併發;修改後需重啓。', + enrichment_concurrency: '摘要、圖片、圖譜與問題生成的每實例保底併發,可額外借用共享彈性池;修改後需重啓。', + maintenance_concurrency: '資料源同步、批處理和清理任務的每實例併發,與用戶面流水線硬隔離;修改後需重啓。', + shared_concurrency: '核心解析與內容富化共同使用的每實例彈性併發,由有積壓的一側自動借用;修改後需重啓。', + wiki_concurrency: '每個服務實例的 Wiki 專用 Worker 併發數,與上游任務池相互隔離。最小值爲 1;修改後需重啓服務進程方可生效。' + }, + tenant: { + max_owned_per_user: '每個非超管用戶通過自助建立可擁有的最大空間數。每次建立空間時實時讀取,修改後立即生效。0 表示使用內置默認值 10;負數表示完全關閉限制(不建議在公開部署使用)。', + self_service_creation_enabled: '是否允許非超管用戶主動建立空間。關閉後,普通用戶只能通過邀請加入已有空間;跨空間超管仍可建立。修改後立即生效。', + default_storage_quota_gb: '新建空間時默認分配的存儲配額(GB),包含向量、原文、文本、索引等。僅在建立時讀取,修改後只對之後新建的空間生效,不會回寫已存在的空間。0 或負數表示使用內置默認值 10GB。', + auto_create_api_key: '爲新空間自動生成 full_access API Key,並在建立響應中返回明文 token。僅用於兼容依賴舊行爲的集成;默認關閉,建議通過 API Key 管理顯式建立。' + }, + ssrf: { + whitelist: 'SSRF 防護白名單。可填入 example.com / *.foo.com / 10.0.0.0/8 / 2001:db8::1。修改後立即生效。SSRF_WHITELIST_EXTRA 環境變數仍由部署方維護,不在此處覆蓋。' + }, + auth: { + registration_mode: '自助註冊模式。self_serve = 任何人可註冊帳號;invite_only = 關閉公網註冊,僅 Owner/Admin 可邀請。修改後立即生效,但謹慎對待 self_serve(公網會接受 spam)。', + default_tenant_mode: '公開註冊後的空間初始化策略。create_personal 會自動建立個人空間並授予 Owner;tenantless 僅建立帳號,用戶需要接受邀請或主動建立空間。隻影響之後註冊的用戶。' + } + }, + keyLabels: { + model: { + max_concurrency: '模型默認併發上限' + }, + asynq: { + core_concurrency: '核心解析保底併發數', + postprocess_concurrency: '後處理編排併發數', + enrichment_concurrency: '內容富化保底併發數', + maintenance_concurrency: '維護與同步併發數', + shared_concurrency: '共享彈性併發數', + wiki_concurrency: 'Wiki Worker 併發數' + }, + tenant: { + max_owned_per_user: '每用戶最大空間數', + self_service_creation_enabled: '允許用戶自助建立空間', + default_storage_quota_gb: '新空間默認存儲配額 (GB)', + auto_create_api_key: '建立空間時自動生成 API Key' + }, + ssrf: { + whitelist: 'SSRF 防護白名單' + }, + auth: { + registration_mode: '自助註冊模式', + default_tenant_mode: '註冊默認空間策略' + } + }, + runtime: { + title: '任務佇列運行時', + description: '後臺任務佇列的實時負載,以及各獨立 worker 池的每實例併發配置。支持查看任務明細和安全管理,每 5 秒自動刷新。', + refresh: '刷新', + autoRefresh: '自動刷新(每 5 秒)', + loading: '加載中...', + retry: '重試', + unavailableTitle: '任務佇列不可用', + unavailable: '當前部署未啓用 Redis / asynq 佇列(Lite 模式),無佇列可展示。', + empty: '暫無佇列資料', + detailsTitle: '佇列明細', + detailsDescription: '各處理通道的實時負載與等待情況。“最終失敗”表示任務超過重試上限,已停止自動執行。', + poolsTitle: 'Worker 池', + poolsDescription: '各階段擁有保底容量,核心解析與內容富化還可借用共享彈性池。', + perInstance: '卡片主值爲集群運行中/容量', + poolConfigured: '單實例配置 {value}', + poolInstances: '{value} 個實例', + poolUtilization: '利用率 {value}%', + queueCount: '{value} 個佇列', + weightShort: '權重 {value}', + footnote: '卡片主值爲集群運行中/實時容量;單實例配置修改後需重啓。共享彈性池只消費核心解析和內容富化佇列。', + updatedAt: '更新於 {value}', + models: { + title: '模型併發佔用', + description: '觀察後臺任務實際進入模型服務時的併發佔用;上方是任務調度,這裡是模型服務限流,兩者處於不同處理階段。', + scope: '佔用爲集群全局 · 等待爲當前實例', + disabled: '模型後臺併發治理未啓用。可在全局設置中配置模型默認併發上限。', + empty: '暫無模型調用資料;模型首次執行後臺任務後會出現在這裡。', + backgroundOnly: '僅統計後臺任務,不包含交互式對話', + status: { + queued: '限流中', + full: '已滿載' + }, + columns: { + model: '模型 ID', + active: '調用中', + waiting: '限流等待', + usage: '併發用量' + } + }, + tasks: { + title: '任務明細 · {queue}', + description: '查看各狀態任務及其安全管理動作。定時、重試任務按最近執行時間優先,其餘狀態按時間倒序。', + listTitle: '{state}任務', + openAria: '查看{queue}中 {count} 個{state}任務', + unavailable: '當前部署不支持查看任務明細', + empty: '這個佇列當前沒有{state}任務', + loadError: '獲取任務明細失敗', + loadMore: '加載更多', + loadedSummary: '已加載 {count} 條,繼續下滑或點擊加載', + loadedAll: '已全部加載,共 {count} 條', + loadingMore: '正在加載更多…', + attempts: '執行 {current}/{max}', + unknownTarget: '未識別到關聯對象', + knowledgeBaseLabel: '知識庫 ID', + knowledgeLabel: '文檔 ID', + taskIDLabel: '業務任務 ID', + tenantLabel: '空間 ID', + sourceLabel: '來源 ID', + targetLabel: '目標 ID', + sourceKBLabel: '來源知識庫', + targetKBLabel: '目標知識庫', + dataSourceLabel: '資料源 ID', + syncLogLabel: '同步記錄 ID', + knowledgeCountLabel: '文檔數量', + enqueuedAt: '入隊時間', + startedAt: '開始時間', + nextProcessAt: '下次執行', + lastFailedAt: '最後失敗', + completedAt: '完成時間', + deadline: '執行截止', + worker: '執行實例', + health: '運行健康', + orphaned: '執行實例已失聯,等待還原', + cancel: '終止任務', + cancelConfirm: '將通過業務取消流程終止該任務及同一文檔的相關佇列任務。確認終止?', + runNow: '立即執行', + runNowConfirm: '該任務將立即進入待執行佇列,重試次數不會重置。確認繼續?', + deleteRecord: '清除記錄', + deleteConfirm: '僅從當前佇列移除這條失敗記錄,不會執行或完成原任務,歷史日誌仍會保留。確認清除?', + purgeArchived: '清除全部失敗任務', + purgeArchivedConfirm: '將從當前佇列一次性移除全部 {count} 條失敗記錄,僅清理佇列裡的失敗任務,不影響運行中或排隊中的任務,也不會回滾已失敗文檔的業務狀態。確認清除?', + purgeArchivedSuccess: '已清除 {count} 條失敗任務', + purgeArchivedError: '清除失敗任務失敗', + stateFilter: '按任務狀態篩選', + actionError: { + cancel: '終止任務失敗', + run_now: '立即執行任務失敗', + delete: '清除失敗記錄失敗' + }, + actionSuccess: { + cancel: '任務已終止', + run_now: '任務已進入待執行佇列', + delete: '失敗記錄已清除' + }, + guides: { + active: '運行中任務可查看執行實例、開始時間和截止時間。只有具備完整業務取消語義的任務才允許終止。', + pending: '排隊任務尚未被 worker 領取。終止操作會同步更新業務狀態,而不是隻刪除 Redis 記錄。', + scheduled: '定時任務可提前立即執行;支持業務取消的文檔任務也可以安全終止。', + retry: '請結合最後錯誤、重試次數和下次執行時間判斷是否立即執行或終止。', + archived: '請先修復失敗原因再立即執行。清除記錄不會完成原業務任務。', + completed: '這裡只展示設置了結果保留時間的近期完成任務,不提供管理動作。' + }, + states: { + active: '運行中', + pending: '排隊中', + scheduled: '定時執行', + retry: '重試中', + archived: '最終失敗', + completed: '已完成' + }, + taskTypes: { + documentProcess: '文檔解析', + manualProcess: '手工重新處理', + temporaryDocumentProcess: '聊天附件解析', + postProcess: '文檔後處理', + summary: '摘要生成', + tableSummary: '表格摘要生成', + question: '問題生成', + multimodal: '圖片多模態處理', + graph: '知識圖譜抽取', + sync: '資料源同步', + faqImport: 'FAQ 導入', + batchReparse: '批量重新解析', + batchDelete: '批量刪除', + move: '文檔移動', + indexDelete: '索引刪除', + kbClone: '知識庫複製', + kbDelete: '知識庫刪除', + wikiIngest: 'Wiki 內容生成', + wikiFinalize: 'Wiki 收尾處理' + } + }, + failedNotice: { + title: '{count} 個任務待處理', + description: '點擊下方表中紅色「最終失敗」數字查看原因,修復後可手動重試。' + }, + status: { + working: '處理中', + waiting: '等待中', + idle: '空閒', + actionRequired: '需處理', + retrying: '重試中', + paused: '已暫停' + }, + columns: { + queue: '佇列', + active: '運行中', + pending: '排隊', + scheduled: '定時', + retry: '重試', + archived: '最終失敗', + completed: '已完成', + latency: '最早等待', + status: '狀態' + }, + summary: { + title: '運行概覽', + active: '運行中', + pending: '排隊中', + retry: '重試中', + archived: '最終失敗' + }, + pools: { + core: '核心解析', + postprocess: '後處理編排', + enrichment: '內容富化', + maintenance: '維護與同步', + shared: '共享彈性', + wiki: 'Wiki 池' + }, + poolDescriptions: { + core: '文檔解析與手工重解析的保底容量', + postprocess: '解析完成後的收尾與富化扇出', + enrichment: '摘要、圖片、圖譜與問題生成', + maintenance: '資料源同步、批處理與刪除清理', + shared: '由核心解析與內容富化按積壓借用', + wiki: 'Wiki 內容生成與全局收尾' + }, + queueNames: { + default: '文檔解析', + chat_attachment: '對話附件解析', + postprocess: '後處理編排', + summary: '摘要生成', + sync: '資料源同步', + low: '維護與批處理', + multimodal: '多模態處理', + graph: '圖譜抽取', + question: '問題生成', + wiki: 'Wiki 處理' + }, + queueDescriptions: { + default: '文檔解析、手工重解析', + chat_attachment: '會話內上傳附件解析', + postprocess: '解析收尾、富化扇出', + summary: '文檔摘要、表格摘要', + sync: '手動與定時同步', + low: 'FAQ 導入、批量重解析、刪除清理', + multimodal: '圖片 OCR、視覺描述', + graph: '分塊圖譜抽取', + question: '分塊問題生成', + wiki: '內容生成、索引收尾' + }, + errors: { + generic: '獲取佇列狀態失敗' + } + }, + runtimeTable: { + setting: '配置項與用途', + value: '當前值' + }, + sections: { + other: { + tab: '其他 {count}', + title: '其他配置', + description: '當前部署中未歸入標準分組的配置項。' + }, + security: { + tab: '網絡安全 {count}', + title: '網絡安全', + description: '管理可繞過 SSRF 防護的受信主機、IP 與網段。' + }, + runtime: { + tab: '運行與併發 {count}', + title: '運行與併發', + description: '配置後臺任務池與模型服務的併發容量。', + restartHint: 'Worker 配置需重啓生效' + }, + tenant: { + tab: '空間默認值 {count}', + title: '空間默認值', + description: '設置新空間的初始配額與兼容性行爲,不會自動改寫已有空間。' + }, + access: { + tab: '帳號與訪問 {count}', + title: '帳號與訪問', + description: '管理系統管理員、公開註冊與用戶建立空間的規則。' + } + }, + priorityHint: { + disclosure: '配置來源與優先級', + tier1: '在此頁面保存過的項(帶「已覆蓋」徽章)— 始終以這裡的值爲準,環境變數會被忽略。', + tier2: '未在此處保存過的項 — 如果環境變數裡有就用環境變數,否則用程式內置默認值。', + tier3: '若想讓某項重新由環境變數控制,點擊該行的「重置」按鈕即可清除當前 UI 設置。' + } + }, + messages: { + fetchFailed: '獲取系統信息失敗', + networkError: '網絡錯誤,請稍後重試' + } + }, + tenant: { + title: '空間信息', + currentTenant: '當前空間', + switchTenant: '切換空間', + sectionDescription: '查看空間的詳細配置信息', + statusActive: '活躍', + statusInactive: '未激活', + statusSuspended: '已暫停', + statusUnknown: '未知', + loadingInfo: '正在加載信息...', + retry: '重試', + unknown: '未知', + formatError: '格式錯誤', + searchPlaceholder: '搜尋空間名稱或輸入空間 ID...', + noMatch: '未找到匹配的空間', + switchSuccessTitle: '已切換空間', + switchSuccessContent: '你已進入 {name}', + loadTenantsFailed: '加載空間列表失敗', + loading: '加載中...', + loadMore: '加載更多', + api: { + title: 'API 信息', + docLabel: 'API 文檔', + docDescription: '查看完整的 API 調用文檔和示例,', + openDoc: '打開文檔', + userIdLabel: '用戶 ID', + userIdDescription: '您的唯一用戶標識', + usernameLabel: '用戶名', + usernameDescription: '您的登錄用戶名', + emailLabel: '信箱', + emailDescription: '您的註冊信箱地址', + createdAtLabel: '註冊時間', + createdAtDescription: '帳號建立的時間', + desktopPortLabel: '本地 API 端口(桌面版)', + desktopPortDescription: '填寫固定端口(如 37841)後,Chrome 擴展等工具可長期使用同一 API 地址;0 表示每次啓動隨機端口。保存後請重啓應用生效。', + desktopPortSave: '保存', + desktopPortSaved: '已保存,請重啓應用後生效', + desktopPortSaveFailed: '保存失敗', + desktopPortInvalid: '請輸入 0–65535 之間的端口', + desktopBindPublicLabel: '允許局域網訪問 API', + desktopBindPublicDescription: '開啓後內嵌服務監聽 0.0.0.0,同一局域網內其他設備可通過下方地址調用 API。存在資料暴露風險,請在防火牆與路由側自行做好訪問控制;修改後需重啓應用。', + desktopBindPublicSaved: '已保存,請重啓應用後生效', + desktopBindPublicSaveFailed: '保存失敗', + lanUrlLabel: '局域網 API 地址', + lanUrlDescription: '在已開啓「允許局域網訪問」且應用已重啓後顯示;若 IP 不準確,請在本機網絡設置中查看實際 IPv4 後替換主機部分。', + lanUrlCopyTitle: '複製局域網 API 地址', + lanUrlUnavailable: '當前已監聽所有網卡,但未能自動識別本機 IPv4。請在本機網絡設置中查看局域網地址,並手動拼接爲 http://你的IP:端口/api/v1。' + }, + messages: { + fetchFailed: '獲取空間信息失敗', + networkError: '網絡錯誤,請稍後重試' + }, + deleteDangerZone: { + title: '刪除當前空間', + desc: '刪除整個空間及其配置。刪除後,空間成員將無法繼續訪問其中的知識庫、智能體與 API Key。', + button: '刪除空間', + confirmTitle: '刪除當前空間?', + confirmBody: '此操作將刪除空間「{name}」,並使其中的知識庫、智能體、成員與 API Key 不再可用。此操作不可撤銷。', + confirmHint: '請輸入空間名稱「{name}」以確認刪除。', + confirm: '確認刪除', + nameMismatch: '空間名稱不匹配', + success: '空間已刪除', + failed: '刪除空間失敗' + }, + leaveDangerZone: { + title: '退出當前空間', + desc: '終止您在本空間的成員身份。退出後將無法訪問本空間的知識庫與智能體,之後可被再次邀請加入。', + button: '退出空間' + }, + storage: { + quotaLabel: '存儲配額', + quotaDescription: '空間的總存儲空間配額', + usedLabel: '已使用存儲', + usedDescription: '已經使用的存儲空間', + usageLabel: '存儲使用率', + usageDescription: '存儲空間的使用百分比' + }, + details: { + idLabel: '空間 ID', + idDescription: '您所屬空間的唯一標識', + nameLabel: '空間名稱', + nameDescription: '您所屬的空間名稱', + descriptionLabel: '空間描述', + descriptionDescription: '空間的詳細描述信息', + businessLabel: '空間業務', + businessDescription: '空間所屬的業務類型', + statusLabel: '空間狀態', + statusDescription: '空間當前的運行狀態', + createdAtLabel: '空間建立時間', + createdAtDescription: '空間建立的時間', + editName: '修改名稱', + editNamePlaceholder: '請輸入新的空間名稱', + editNameConfirm: '保存', + editNameCancel: '取消', + editNameRequired: '空間名稱不能爲空', + editNameSuccess: '空間名稱已更新', + editNameFailed: '更新空間名稱失敗', + editDescription: '修改描述', + editDescriptionPlaceholder: '請輸入新的空間描述', + editDescriptionSuccess: '空間描述已更新', + editDescriptionFailed: '更新空間描述失敗', + descriptionEmptyPlaceholder: '未填寫' + }, + create: { + action: '建立新空間', + dialogTitle: '建立新空間', + dialogSubtitle: '空間擁有獨立的知識庫與成員,你將自動成爲新空間的所有者。', + nameLabel: '空間名稱', + namePlaceholder: '例如:我的新項目', + nameRequired: '請輸入空間名稱', + descriptionLabel: '描述(可選)', + descriptionPlaceholder: '簡單描述一下這個空間的用途', + submit: '建立', + cancel: '取消', + success: '空間建立成功', + failed: '空間建立失敗', + disabled: '當前系統只允許通過邀請加入空間,不能自行建立空間。' + }, + switcher: { + menuLabel: '切換空間', + currentBadge: '當前', + homeTooltip: '我的空間', + empty: '你目前只屬於這一個空間' + } + }, + chat: { + memoryUsedCount: '本次使用了 {count} 條記憶', + memoryForget: '刪除這條記憶', + memoryForgotten: '已刪除這條記憶', + memoryForgetFailed: '刪除失敗', + memoryHint: '這些是助手在回答時看到的長期記憶,刪除後不會再被使用。', + suggestedQuestions: '你可以這樣問我', + followUpQuestions: '繼續問', + followUpQuestionsLoading: '加載推薦問題', + refreshSuggestedQuestions: '換一批', + thinking: '思考中...', + thinkingAlt: '正在思考', + preparingAnswer: '正在準備回答…', + connectingModelAndGeneratingAnswer: '正在連接模型並生成回答…', + modelStillResponding: '模型響應較慢,仍在等待…', + deepThoughtCompleted: '已深度思考', + deepThoughtAlt: '深度思考完成', + referencesTitle: '參考了{count}個相關內容', + referencesDocCount: '引用了{count}篇文檔', + referencesWebCount: '參考了{count}條網頁', + referencesDocAndWebCount: '引用了{docCount}篇文檔和{webCount}條網頁', + referencesDrawerTitle: '參考來源', + referencesDrawerTitleWeb: '網頁來源', + referencesDrawerTitleDocs: '文檔來源', + referencesDrawerTitleTools: '工具結果', + referencesDrawerTitleMixed: '參考來源', + referencesDrawerWebSection: '網頁', + referencesDrawerDocsSection: '知識庫文檔', + referencesDrawerToolsSection: '工具', + referencesDrawerEmpty: '暫無參考來源', + referenceChunkCount: '{count}個片段', + fallbackHint: '未從知識庫中檢索到相關內容,以上爲模型直接回答', + requestInfoTitle: '請求信息', + requestInfoRequestId: 'Request ID', + requestInfoMessageId: '消息 ID', + requestInfoSessionId: '會話 ID', + requestInfoUrl: '請求', + requestInfoSentAt: '發起時間', + requestInfoEmpty: '暫無請求信息', + channelWeb: '網頁', + channelApi: 'API', + channelIm: 'IM', + chunkLabel: '片段{index}:', + navigateToDocument: '查看文檔詳情', + chunkIdLabel: '片段ID:', + documentIdLabel: '文檔ID:', + faqIdLabel: 'FAQ ID:', + faqContainerIdLabel: '所屬文檔ID:', + faqAnswersLabel: '答案:', + chunkOrdinal: '片段 {index}', + previewContent: '預覽內容', + noPlanSteps: '未提供具體步驟', + chunkIndexLabel: '片段 #{index}', + chunkPositionLabel: '(位置: {position})', + noRelatedChunks: '沒有找到相關片段', + noSearchResults: '沒有找到搜尋結果', + relevanceHigh: '高相關', + relevanceMedium: '中相關', + relevanceLow: '低相關', + relevanceWeak: '弱相關', + webSearchNoResults: '未找到搜尋結果', + otherSource: '其他來源', + webGroupIntro: '以下 {count} 條內容來自', + graphConfigTitle: '圖譜配置', + entityTypesLabel: '實體類型:', + relationTypesLabel: '關係類型:', + graphResultsHeader: '找到 {count} 條相關結果', + graphNoResults: '未找到相關的圖譜信息', + unknownLink: '未知鏈接', + contentLengthLabel: '長度 {value}', + notProvided: '未提供', + promptLabel: '提示詞', + errorMessageLabel: '錯誤信息', + summaryLabel: '總結', + rawTextLabel: '原始文本', + collapseRaw: '收起原文', + expandRaw: '展開原文', + noWebContent: '未獲取到網頁內容', + webFetchStatusSuccess: '抓取成功', + webFetchStatusFailed: '抓取失敗', + webFetchStatusSkipped: '已跳過', + webFetchErrorCode: '錯誤碼', + webFetchRetryable: '可重試', + webFetchSummaryFailed: '摘要失敗', + lengthChars: '{value} 字', + lengthThousands: '{value} 千字', + lengthTenThousands: '{value} 萬字', + noDatabaseRecords: '未找到匹配的記錄', + nullValuePlaceholder: '', + chunkCountValue: '{count} 個片段', + documentDescriptionLabel: '文檔描述:', + documentSourceLabel: '來源:', + documentFileLabel: '文件信息:', + documentMetadataLabel: '元資料', + documentInfoEmpty: '暫無文檔信息', + positionLabel: '位置:', + chunkPositionValue: '第 {index} 個片段', + contentLengthLabelSimple: '內容長度:', + fullContentLabel: '完整內容', + copyContent: '複製內容', + knowledgeBaseCount: '共 {count} 個知識庫', + noKnowledgeBases: '沒有可用的知識庫', + enterDescription: '輸入描述', + rawOutputLabel: '原始輸出', + wikiWritePageTitle: 'Wiki 頁面寫入', + wikiReplaceTextTitle: 'Wiki 文本替換', + wikiRenamePageTitle: 'Wiki 頁面重命名', + wikiDeletePageTitle: 'Wiki 頁面刪除', + wikiActionCreated: '已建立', + wikiActionUpdated: '已更新', + wikiActionRenamed: '已重命名', + wikiActionDeleted: '已刪除', + wikiFieldSlug: '頁面路徑', + wikiFieldTitle: '標題', + wikiFieldPageType: '類型', + wikiFieldSummary: '摘要', + wikiFieldOldText: '原文本', + wikiFieldNewText: '新文本', + wikiFieldOldSlug: '原路徑', + wikiFieldNewSlug: '新路徑', + wikiFieldAffectedPages: '受影響頁面', + wikiAffectedCount: '{count} 個頁面的鏈接已更新', + processError: '處理出錯', + sessionExcerpt: '會話摘錄', + noAnswerContent: '(無回答內容)', + noMatchFound: '未找到匹配的內容', + deleteSessionFailed: '刪除失敗,請稍後再試!', + imageTooMany: '最多上傳5張圖片', + imageTypeSizeError: '僅支持 JPG/PNG/GIF/WEBP 格式,單張不超過 10MB', + imageUploadTooltip: '上傳圖片(支持貼上/拖拽)', + attachmentUploadTooltip: '上傳附件(文檔、音頻等)', + attachmentWithCount: '已上傳 {count} 個附件', + attachmentTooMany: '最多上傳 {max} 個附件', + attachmentTotalTooMany: '圖片和附件合計最多 {max} 個', + attachmentTooLarge: '文件 {name} 超過 {max}MB 限制', + attachmentTypeNotSupported: '不支持的文件類型:{name}', + attachmentUploading: '上傳中 {progress}%', + attachmentParsing: '正在解析', + attachmentReady: '解析完成', + attachmentUploadFailed: '附件上傳失敗', + attachmentParseFailed: '附件解析失敗', + attachmentStillProcessing: '附件 {name} 仍在解析,請稍候' + }, + knowledgeEditor: { + titleCreate: '新建知識庫', + titleEdit: '知識庫設置', + advanced: { + title: '高級設置', + description: '配置問題生成等高級功能', + multimodal: { + label: '多模態功能', + description: '啓用圖片等多模態內容的理解能力', + vllmLabel: 'VLLM 視覺模型', + vllmDescription: '用於多模態理解的視覺語言模型(必選)', + vllmPlaceholder: '請選擇 VLLM 模型(必選)', + descriptionLanguageLabel: '圖片描述語言', + descriptionLanguageDescription: '留空時跟隨文檔語言;不再強制使用中文', + descriptionLanguageAuto: '自動跟隨文檔語言', + customInstructionsLabel: '圖片解析要求', + customInstructionsDescription: '補充需要重點識別的視覺信息,OCR 和 Markdown 格式協議保持不變', + customInstructionsPlaceholder: '例如:重點識別設備銘牌、型號、告警代碼和表格中的單位…' + }, + tableMetadataInstructions: { + label: '表格元資料生成要求', + description: '爲 CSV/Excel 摘要補充業務背景和字段語義,幫助後續檢索理解表格內容', + placeholder: '例如:這是銷售訂單表,金額單位爲元,status 字段使用公司內部狀態碼…' + }, + questionGeneration: { + label: 'AI 問題生成', + description: '解析文檔時調用大模型爲每個分塊生成相關問題,提高檢索召回率。啓用後會增加文檔解析耗時。', + countLabel: '生成問題數量', + countDescription: '每個文檔分塊生成的問題數量(1-10)', + instructionsLabel: '問題生成要求', + instructionsDescription: '指定問題面向的人群、場景和表達方式,系統仍維護穩定輸出格式', + instructionsPlaceholder: '例如:生成客服用戶常問的自然語言問題,避免考試題式表達…' + }, + autoTag: { + label: '自動關聯標籤', + description: '文檔解析完成後,從當前知識庫已有標籤中選擇合適標籤自動關聯。不會建立或刪除標籤,並會增加一次模型調用。', + modelLabel: '分類模型', + modelDescription: '留空時使用知識庫摘要模型。', + modelPlaceholder: '請選擇分類模型', + maxTagsLabel: '單篇文檔最多標籤數', + maxTagsDescription: '每篇文檔最多自動關聯 1-10 個已有標籤。', + skipIfTaggedLabel: '跳過已有標籤的文檔', + skipIfTaggedDescription: '開啓後,上傳時已手動設置標籤的文檔不再自動打標籤,避免覆蓋人工分類意圖。' + } + }, + asr: { + title: '音頻語音識別', + description: '配置語音識別(ASR),啓用後可上傳音頻文件並整段轉寫爲文本(常見格式:mp3、wav、m4a、flac、ogg 等)。暫不支持視頻上傳。', + label: '啓用音頻語音識別', + desc: '啓用後可上傳音頻到知識庫,系統自動將語音轉寫爲文本並參與解析與檢索', + modelLabel: 'ASR 模型', + modelDescription: '用於音頻中語音轉文本的識別模型(如 OpenAI Whisper)', + modelPlaceholder: '請選擇 ASR 模型', + languageLabel: '音頻語言提示', + languageDescription: '可選;指定主要語種可提高部分 ASR 模型的識別穩定性,留空時自動檢測', + languagePlaceholder: '例如 zh、en,留空自動檢測' + }, + multimodal: { + title: '圖像處理配置', + description: '配置圖像內容理解能力,啓用後支持圖片等非文本內容的解析和檢索' + }, + chunking: { + title: '分塊設置', + description: '控制上傳文檔在嵌入前的切分方式。默認值適用於大多數場景,僅在檢索質量異常時調整。', + sizeLabel: '分塊大小', + sizeDescription: '每個分塊的最大字符數(100-4000)。默認 512 ≈ 中文 300 tokens / 英文 100-130 tokens。FAQ 用 200-400,敘述性長文檔用 1000-2000。', + characters: '字符', + overlapLabel: '分塊重疊', + overlapDescription: '相鄰分塊之間共享的字符數(0-500)。默認 80 ≈ 分塊大小的 15%,符合當前研究推薦。FAQ/結構化資料用 0,長篇敘述用 150-200。', + separatorsLabel: '分隔符', + separatorsDescription: '切分時優先使用的字符或字符串。優先級高的分隔符先嚐試;默認順序優先段落 → 句子 → 標點。', + separatorsPlaceholder: '選擇或自定義分隔符', + parentChildLabel: '父子分塊', + parentChildDescription: '兩級分塊:小的子塊用於向量匹配(精準命中),大的父塊返回給 LLM(更豐富上下文)。建議用於長文檔(>10 頁);短 FAQ 可關閉以節省存儲。', + parentChunkSizeLabel: '父塊大小', + parentChunkSizeDescription: '返回給 LLM 的上下文塊大小(512-8192)。默認 4096 ≈ 1000 英文 tokens,適合所有現代 LLM 上下文窗口。', + childChunkSizeLabel: '子塊大小', + childChunkSizeDescription: '用於向量匹配的嵌入塊大小(64-2048)。默認 384 ≈ 80 tokens,是 sentence-transformer / BGE 類嵌入模型的最佳點。', + strategyLabel: '分塊策略', + strategyDescription: '選擇文檔的分塊方式。自動模式會分析每個文檔的結構並選擇最佳策略。', + strategyPlaceholder: '選擇分塊策略(不填則按長度切分)', + overlapWarning: '重疊相對於分塊大小較大——分塊之間會共享大部分內容。', + advancedLabel: '高級選項', + tokenLimitLabel: '每塊 Token 上限', + tokenLimitDescription: '每個分塊的硬性 Token 上限(0-8192)。0 = 關閉(僅按字符數)。當嵌入模型 Token 上限較小時啓用:MiniLM (256 tok) 用 200,BGE/Cohere (512 tok) 用 400。現代嵌入器(OpenAI、Voyage、Jina-v3)支持 >2000 tokens,保持 0 即可。', + languagesLabel: '語言提示', + languagesDescription: '限制啓發式模式只識別選定的語言(DE/EN/ZH)。留空 = 自動檢測。同質化語料庫可顯式設置以避免跨語言誤匹配。', + languagesPlaceholder: '自動檢測', + debug: { + toggle: '測試分塊效果', + toggleHint: '無需重新上傳即可對示例文本運行分塊器', + sampleLabel: '示例文本', + samplePlaceholder: '貼上 Markdown / 純文本片段以查看當前配置的分塊結果…', + presetLabel: '載入示例:', + runButton: '運行預覽', + loading: '正在對示例運行分塊器…', + errorPrefix: '預覽失敗', + selectedTier: '選定策略', + rejected: '被拒絕的層級', + contextHeader: '上下文標題', + fallbackWarning: '策略鏈已窮盡 — 當前設置無法智能分塊此內容', + stats: { + chunks: '塊', + truncated: '已截斷;總數 {total}' + }, + profile: { + lines: '行', + chars: '字符', + headings: 'Markdown 標題', + pageBreaks: '分頁符', + chapterMarkers: '章節標記', + languages: '語言' + }, + samples: { + markdown: 'Markdown 文檔', + faq: 'FAQ 列表', + chapter: 'PDF 章節', + plain: '純文本' + } + }, + languageOptions: { + de: '德語', + en: '英語', + zh: '中文' + }, + strategies: { + legacy: { + label: '按長度切分', + tooltip: '忽略結構,僅按字符數和分隔符遞歸切分——原始行爲。當上述策略對你的內容效果不佳時使用。' + }, + heuristic: { + label: '結構感知', + tooltip: '識別分頁符、編號章節、多語言章節標記(DE/EN/ZH)、全大寫標題等結構信號進行切分。適合沒有 Markdown 標題的 PDF / 掃描件。' + }, + heading: { + label: '按標題切分', + tooltip: '在 Markdown 標題(#、##、###)邊界處切分,每塊自動帶上所在標題路徑。適合結構清晰的 Markdown 文檔。' + }, + auto: { + label: '自動', + tooltip: '文檔分析器根據內容結構自動在「按標題切分」「結構感知」「按長度切分」之間選擇。' + } + }, + separators: { + doubleNewline: '雙換行 (\\n\\n)', + singleNewline: '單換行 (\\n)', + periodCn: '中文句號 (。)', + exclamationCn: '感嘆號 (!)', + questionCn: '問號 (?)', + semicolonCn: '中文分號 (;)', + semicolonEn: '英文分號 (;)', + space: '空格 ( )' + } + }, + models: { + title: '模型配置', + description: '爲知識庫選擇合適的 AI 模型', + llmLabel: 'LLM 大語言模型', + llmDesc: '用於總結和摘要的大語言模型', + llmPlaceholder: '請選擇 LLM 模型(可選)', + embeddingLabel: 'Embedding 嵌入模型', + embeddingDesc: '用於文本向量化的嵌入模型', + embeddingPlaceholder: '請選擇 Embedding 模型', + embeddingLocked: '知識庫中已有文件,無法修改 Embedding 模型', + embeddingOptional: '(可選)', + embeddingWikiOptionalDesc: '可選。配置後用於 Wiki 目錄歸類的相似度匹配,讓新頁面更好地複用已有目錄;不配置則按完整目錄樹歸類。' + }, + faqExport: { + exportButton: '導出', + exportCSV: '導出 CSV', + exportJSON: '導出 JSON', + exportSuccess: '導出成功', + exportFailed: '導出失敗' + }, + faqImport: { + title: '批量導入 FAQ', + modeLabel: '導入模式', + appendMode: '追加導入', + replaceMode: '替換現有條目', + fileLabel: '選擇文件', + fileTip: '支持 JSON / CSV / Excel。CSV/Excel 表頭:標籤(必填)、問題(必填)、相似問題(選填-多個用##分隔)、反例問題(選填-多個用##分隔)、機器人回答(必填-多個用##分隔)、是否全部回覆(選填-默認FALSE)、是否停用(選填-默認FALSE)、是否禁止被推薦(選填-默認False 可被推薦)。也支持舊錶頭「分類」及舊格式:standard_question、answers、similar_questions、negative_questions', + clickToUpload: '點擊上傳文件', + dragDropTip: '或拖拽文件到此處', + importButton: '導入 FAQ', + deleteSuccess: '選中條目已刪除', + previewCount: '共解析 {count} 條記錄', + previewMore: '還有 {count} 條未展示', + importSuccess: '導入成功', + parseFailed: '解析文件失敗', + invalidJSON: 'JSON 文件格式不正確', + unsupportedFormat: '暫不支持該文件格式', + selectFile: '請先選擇需要導入的文件', + downloadExample: '下載示例文件', + downloadExampleJSON: '下載 JSON 示例', + downloadExampleCSV: '下載 CSV 示例', + downloadExampleExcel: '下載 Excel 示例' + }, + faq: { + title: '問答', + subtitle: '結構化問答管理,支持標準問、相似問和反例,精準匹配用戶查詢,提升問答準確率', + description: '設置 FAQ 知識庫的索引策略和問答組織方式', + indexModeLabel: '索引方式', + indexModeDescription: '僅索引問題可提升精度,索引問答可提高召回率', + questionIndexModeLabel: '問題索引方式', + questionIndexModeDescription: '合併索引:標準問和相似問合併索引;分別索引:標準問和每個相似問獨立索引,檢索更精確但需要更多存儲', + entryGuide: 'FAQ 條目由標準問、相似問、反例和多個答案組成,可在知識庫詳情中批量導入、編輯。', + tagDesc: '爲 FAQ 條目選擇標籤', + tagPlaceholder: '請選擇標籤', + standardQuestion: '標準問', + standardQuestionDesc: '設置問題的標準表述,這是用戶最常問的問題形式。', + answers: '答案', + answersDesc: '提供完整準確的答案內容,可添加多個答案以覆蓋不同場景。', + similarQuestions: '相似問', + similarQuestionsDesc: '添加與標準問意思相同但表述不同的問題,幫助系統更好地匹配用戶查詢。', + negativeQuestions: '反例', + negativeQuestionsDesc: '添加不應匹配此答案的問題,用於排除誤匹配的情況。', + editorCreate: '新增 FAQ 條目', + editorEdit: '編輯 FAQ 條目', + answerPlaceholder: '請輸入答案內容,支持多行文本,按 Ctrl+Enter 或點擊按鈕添加', + similarPlaceholder: '輸入相似問題後點擊加號添加', + negativePlaceholder: '輸入反例後點擊加號添加', + answerRequired: '請至少填寫一個答案', + emptyTitle: '暫無 FAQ 條目', + emptyDesc: '點擊上方"新增 FAQ 條目"按鈕開始建立', + searchPlaceholder: '搜尋問題和答案...', + searchTest: '檢索測試', + createGroup: '新建', + searchTestTitle: 'FAQ 檢索測試', + queryLabel: '查詢內容', + queryPlaceholder: '請輸入要檢索的問題', + vectorThresholdDesc: '範圍 0-1,默認 0.7', + matchCountLabel: '結果數量', + matchCountDesc: '範圍 1-50,默認 10', + searchButton: '開始檢索', + searching: '檢索中...', + searchResults: '檢索結果', + noResults: '未找到匹配的 FAQ 條目', + matchedQuestion: '命中問題', + matchTypeEmbedding: '向量匹配', + matchTypeKeywords: '關鍵詞匹配', + similarityThresholdLabel: '相似度閾值', + statusEnabled: '已啓用', + statusDisabled: '已禁用', + statusEnableSuccess: 'FAQ 條目已啓用', + statusDisableSuccess: 'FAQ 條目已禁用', + statusUpdateFailed: '更新狀態失敗', + recommended: '推薦', + recommendedEnabled: '已開啓推薦', + recommendedDisabled: '已關閉推薦', + recommendedDisableSuccess: 'FAQ 條目已關閉推薦', + recommendedUpdateFailed: '更新推薦狀態失敗', + batchUpdateTag: '批量設置標籤', + batchUpdateTagTip: '將爲 {count} 個選中的條目設置標籤', + batchEnable: '批量啓用', + batchDisable: '批量禁用', + batchDelete: '批量刪除', + confirmBatchDelete: '確認刪除選中的 {count} 個 FAQ 條目?刪除後將無法還原。', + batchDeleteSuccess: '已刪除 {count} 個 FAQ 條目', + modes: { + questionOnly: '僅標準問/相似問', + questionAnswer: '標準問 + 答案', + combined: '合併索引', + separate: '分別索引' + } + }, + document: { + title: '文檔', + subtitle: '支持點擊或拖拽上傳,多格式文檔自動解析並智能分塊,快速構建可檢索的知識庫' + }, + messages: { + loadModelsFailed: '加載模型列表失敗', + loadDataFailed: '加載知識庫資料失敗', + notFound: '知識庫不存在', + nameRequired: '請輸入知識庫名稱', + summaryRequired: '請選擇 Summary 模型', + multimodalInvalid: '多模態配置驗證失敗', + createSuccess: '知識庫建立成功', + createFailed: '建立知識庫失敗', + missingId: '缺少知識庫 ID', + buildDataFailed: '資料構建失敗', + updateSuccess: '配置保存成功', + indexModeRequired: '請選擇 FAQ 的索引方式', + storageChangeConfirm: '知識庫中已有文件,更改存儲引擎後舊文件可能無法正常訪問。是否確認更改?' + }, + share: { + description: '將知識庫共享給空間,讓空間成員可以訪問和使用', + hintTitle: '共享說明', + addShare: '共享', + unshareConfirm: '確定要取消對「{name}」的共享嗎?', + tip1: '共享後,空間成員將根據設定的權限訪問此知識庫', + tip2: '可編輯權限允許成員修改知識庫內容,只讀權限僅允許檢索和問答' + }, + buttons: { + create: '建立知識庫', + save: '保存配置', + saveAndClose: '保存並關閉', + }, + postCreateHint: { + title: '建立成功', + footer: '可繼續調整配置,設置共享與資料源,完成後點擊「保存並關閉」。', + followUpDesc: '可在左側配置資料源,或在「共享管理」中發佈到空間', + }, + wikiBrowser: { + editBtn: '編輯', + historyBtn: '歷史', + historyTitle: '版本歷史 · {title}', + deletePageBtn: '刪除', + deletePageConfirm: '確定要刪除頁面“{title}”嗎?刪除後可在回收週期內由管理員還原資料庫記錄,但頁面將從 Wiki 中消失。', + deletePageSuccess: '頁面已刪除', + deletePageFailed: '刪除頁面失敗', + editTitlePlaceholder: '頁面標題', + editSummaryPlaceholder: '一句話摘要(用於索引列表)', + editContentPlaceholder: 'Markdown 正文,支持 [[頁面鏈接]] 語法', + editSaveSuccess: '頁面已保存', + editSaveFailed: '保存失敗', + editConflictHint: '保存衝突:頁面已被他人或系統更新至 v{ver}。你可以放棄本地修改加載最新版本,或覆蓋保存(被覆蓋的版本會保留在歷史中)。', + editConflictReload: '加載最新版本', + editConflictOverwrite: '覆蓋保存', + editSourceUser: '手動編輯', + editSourceAgent: 'AI 修改', + editSourceRevert: '版本回滾', + editSourcePipeline: '自動生成', + newPageBtn: '新建頁面', + newPageTitle: '新建 Wiki 頁面', + newPageTitleLabel: '標題', + newPageTitlePlaceholder: '請輸入頁面標題', + newPageSlugLabel: 'Slug(頁面地址)', + newPageSlugPlaceholder: '例如 concept/my-topic', + newPageSlugHint: '由字母/數字/中劃線組成,可用 / 分層,建立後不可修改', + newPageTypeLabel: '頁面類型', + newPageContentLabel: '正文(可選)', + newPageMissingFields: '請填寫標題和 Slug', + newPageSuccess: '頁面已建立', + newPageFailed: '建立頁面失敗', + revisionCurrent: '當前版本', + revisionCurrentHint: '這是頁面的當前版本,選擇左側的歷史版本可查看差異或回滾。', + revisionSelectHint: '選擇左側的版本查看內容', + revisionEmpty: '暫無歷史版本,頁面內容變化後會自動記錄快照', + revisionDiff: '對比當前', + revisionRaw: '查看原文', + revisionDiffCaption: 'v{from} → v{to}(紅色爲該版本,綠色爲當前)', + revisionDiffIncremental: '版本變更', + revisionDiffCumulative: '對比當前', + revisionDiffBasisLabel: '對比方式', + revisionViewModeLabel: '查看方式', + revisionLatestChangeHint: '上一版到當前版的變更', + revisionIncrementalHint: '產生 v{ver} 的變更', + revisionInitialRange: '初始 → v{ver}', + revisionInitialCreationHint: '初始建立內容', + revisionCumulativeHint: '該版本到當前版的累計變更', + revisionDiffIncrementalCaption: 'v{from} → v{to}(相鄰版本,紅色爲舊、綠色爲新)', + revisionDiffCumulativeCaption: 'v{from} → v{to}(距當前的累計變更)', + revisionFirstVersionHint: '這是首個版本,沒有上一版可對比。', + revisionDiffTitle: '標題', + revisionDiffSummary: '摘要', + revisionDiffContent: '正文', + revisionDiffEmpty: '此版本與當前在標題、摘要和正文上均無差異', + revisionLoadFailed: '加載版本歷史失敗', + revertBtn: '回滾到此版本', + revertConfirm: '確定回滾到 v{ver} 嗎?當前內容會先保存爲歷史版本,回滾操作可再次撤銷。', + revertSuccess: '已回滾到 v{ver}', + revertFailed: '回滾失敗', + viewInGraph: '在圖譜中查看', + editingBadge: '編輯中', + pageActions: '頁面操作', + tabDocuments: '文檔', + tabGraph: '圖譜', + tabGraphTip: 'Wiki 頁面之間的引用關係圖(即頁面鏈接圖譜),與「知識庫設置 → 知識圖譜」中基於 LLM 抽取的實體-關係圖譜不是同一個概念', + searchPlaceholder: '搜尋 Wiki 頁面...', + searchNoResults: '沒有找到匹配的頁面', + viewModeToggle: '切換目錄視圖', + viewTree: '樹形視圖', + viewList: '列表視圖', + newRootFolder: '新建目錄', + newSubfolder: '新建子目錄', + folderActions: '目錄操作', + folderNamePlaceholder: '請輸入目錄名稱', + createFolderSuccess: '目錄已建立', + createFolderFailed: '建立目錄失敗', + movePageSuccess: '頁面已移動', + movePageFailed: '移動頁面失敗', + renameFolder: '重命名目錄', + renameFolderSuccess: '目錄已重命名', + renameFolderFailed: '重命名目錄失敗', + deleteFolder: '刪除目錄', + deleteFolderConfirm: '確定要刪除目錄“{name}”嗎?', + deleteFolderSuccess: '目錄已刪除', + deleteFolderFailed: '刪除目錄失敗', + deleteFolderNotEmpty: '目錄非空,請先移除其中的頁面和子目錄', + moveFolderSuccess: '目錄已移動', + moveFolderFailed: '移動目錄失敗', + moveFolderIntoSelf: '不能將目錄移動到自身或其子目錄中', + moveConfirm: '移動到「{target}」?', + moveConfirmTitle: '確認移動', + rootFolderLabel: '根目錄', + filterSummary: '摘要', + filterKnowledge: '知識', + filterEntity: '實體', + filterConcept: '概念', + filterSynthesis: '綜合', + filterComparison: '對比', + legendFamiliar: '你常用的資料', + emptyTitle: '暫無 Wiki 頁面', + emptyDesc: '上傳文檔並啓用 Wiki 後將自動生成知識頁面', + selectPageHint: '從左側選擇一個頁面查看內容', + version: 'v{ver}', + aliases: '別名', + linkedFrom: '被鏈接', + sources: '來源文檔', + graphEmpty: '加載圖譜中...', + fitView: '適應屏幕', + indexTitle: '索引', + loading: '加載中…', + loadMoreShort: '加載更多', + indexOverviewTag: '分類目錄', + indexEmpty: '暫無 Wiki 頁面,請先上傳文檔', + graphNoData: '暫無圖譜資料,請先上傳文檔(這裡展示的是 Wiki 頁面之間的鏈接關係,與「知識庫設置 → 知識圖譜」中的實體-關係圖譜不同)', + showArrows: '顯示箭頭', + hideArrows: '隱藏箭頭', + expandNeighbors: '展開鄰居', + bloomNeighbors: '疊加鄰居', + growFrontier: '擴張邊緣 ({count})', + growFrontierTitle: '一鍵展開當前所有 {count} 個帶虛線環的節點', + cardEgoTitle: '當前焦點', + cardOverviewTitle: '全庫概覽', + cardOverviewPrimary: '{returned} / {total} 個節點', + cardOverviewHintTruncated: '雙擊任意節點聚焦到該節點的子圖', + cardOverviewHintFull: '已展示知識庫全部節點', + cardRelatedNodes: '{count} 個相關節點', + helpButtonTitle: '操作幫助', + helpTitle: '畫布操作', + helpClickAction: '單擊', + helpClickDesc: '打開節點詳情', + helpDblClickAction: '雙擊', + helpDblClickDesc: '以該節點爲中心聚焦', + helpShiftClickAction: 'Shift + 單擊', + helpShiftClickDesc: '疊加該節點鄰居到畫布', + helpHoverPlusAction: '懸浮 → ⊕', + helpHoverPlusDesc: '同 Shift + 單擊', + helpDragAction: '拖拽節點', + helpDragDesc: '手動調整節點位置', + helpPanAction: '拖拽空白', + helpPanDesc: '平移畫布', + helpZoomAction: '滾輪', + helpZoomDesc: '縮放畫布', + neighborsProgress: '已顯示鄰居 {visible}/{total}(還有 {hidden} 個未加載)', + neighborsAllShown: '全部 {total} 個鄰居已在圖中(可點"展開鄰居"聚焦到該節點子圖)', + neighborsNone: '該節點沒有鏈接鄰居', + neighborsCenterUnreachable: '已顯示鄰居 {visible}/{total}(還有 {hidden} 個無法連通:可能是死鏈、被過濾或已刪除)', + neighborsOverviewHidden: '已顯示鄰居 {visible}/{total}({hidden} 個不在概覽範圍,點"展開鄰居"以此爲中心查看)', + backToOverview: '返回概覽', + queueStatus: 'Wiki 佇列中 {count} 個待處理任務', + issueTitle: '此頁面存在 {count} 個待處理的知識衝突或錯誤', + issueFixBtn: 'AI 一鍵修復', + issueMixed: '信息混雜', + issueConflict: '事實衝突', + issueOutdated: '信息過時', + issueAttention: '需要關注', + issueReportedBy: '由 {reporter} 報告', + issueAiLinter: 'AI 巡檢', + issueIgnore: '忽略誤報', + globalIssuesTitle: '全庫待修復內容問題', + globalIssuesCount: '待修復內容問題: {count} 項', + globalIssuesEmpty: '暫無待處理的內容問題', + issuePagePrefix: '頁面: ', + issueGoFix: '去處理', + fixAssistantTitle: 'Wiki 智能修復助手', + issueFixSuggestions: '內容優化建議 ({count})', + issueFixSingle: '修復', + fixStartError: '啓動修復助手失敗', + issueFixPromptSingle: '請修復頁面 [[{slug}]] 上的問題 (ID: {id})。', + issueFixPromptAutoStart: '請修復頁面 [[{slug}]] 上的以下問題:' + }, + indexing: { + title: '索引策略', + description: '配置文檔上傳後的處理管道,可以獨立開啓或關閉每種索引方式', + searchTitle: 'RAG 檢索', + searchDesc: '對文檔進行分塊、向量化和關鍵詞索引,支持混合檢索', + wikiTitle: 'Wiki 知識庫', + wikiDesc: '自動生成互相關聯的 Wiki 知識頁面,構建結構化知識體系', + graphTitle: '知識圖譜', + graphDesc: '提取實體和關係,構建知識圖譜支持圖譜檢索', + atLeastOne: '至少需要開啓一種索引策略', + embeddingRequired: 'RAG 檢索需要配置 Embedding 模型', + lockedTip: '知識庫已有內容,索引策略暫不支持調整。如需變更,請先清空知識庫。', + rebuildConfirmTitle: '重建索引', + rebuildConfirmBody: '索引策略已變更,是否對已有的 {count} 篇文檔重新處理?這可能需要一些時間。', + rebuildSuccess: '已提交重建任務,共 {count} 篇文檔', + rebuildSkip: '稍後可在資料源中手動觸發重建' + }, + wiki: { + title: 'Wiki 設置', + synthesisModelLabel: 'Wiki 合成模型', + synthesisModelPlaceholder: '選擇用於 Wiki 生成的 LLM 模型', + synthesisModelTip: '不設置時將回退使用摘要模型', + extractionGranularityLabel: '提取粒度', + contentInstructionsLabel: 'Wiki 內容生成要求', + contentInstructionsTip: '控制摘要、頁面和首頁的表達重點;引用、合併與防幻覺規則由系統固定維護。修改後需重新解析才能影響已有內容。', + contentInstructionsPlaceholder: '例如:使用法務審閱口吻,優先展示責任主體、時間線和風險提示…', + extractionInstructionsLabel: 'Wiki 提取重點', + extractionInstructionsTip: '說明應重點識別的領域實體和概念,不會替換系統的 JSON 與引用協議。', + extractionInstructionsPlaceholder: '例如:重點識別產品、版本、組織、負責人和關鍵技術概念…', + extractionGranularityTip: '控制每篇文檔抽取的 Wiki 實體/概念數量。粒度越細,索引越聚焦;粒度越粗,索引越詳盡', + granularityFocused: '聚焦', + granularityStandard: '標準', + granularityExhaustive: '詳盡', + granularityFocusedHint: '只抽取文檔的主角(如簡歷 → 人物和項目)。最乾淨,但可能漏掉次要實體。', + granularityStandardHint: '抽取主角 + 被詳細描述的次要實體/概念。跳過一帶而過的通用名詞。適合大多數場景。', + granularityExhaustiveHint: '抽取所有可識別的命名實體與概念,包括一帶而過的技術棧。適合將知識庫當作術語表使用。' + }, + basic: { + title: '基本信息', + description: '設置知識庫的名稱和描述信息', + kbId: '知識庫 ID', + kbIdDesc: 'API 集成時可使用此 ID 指定知識庫', + typeLabel: '知識庫類型', + typeDocument: '文檔', + typeFAQ: '問答', + typeDescription: 'FAQ 類型適合結構化問答資料;文檔型支持文件解析與分塊;Wiki 類型由 LLM 自動構建互鏈知識頁面。', + nameLabel: '知識庫名稱', + namePlaceholder: '請輸入知識庫名稱', + descriptionLabel: '知識庫描述', + descriptionPlaceholder: '請輸入知識庫描述(可選)' + }, + errors: { + vectorStoreBindingInvalid: '無法使用所選向量存儲。請選擇其他存儲或使用系統默認值。', + vectorStoreUnavailable: '所選向量存儲當前不可用。請在設置 → 向量存儲中檢查其連接配置。' + }, + sidebar: { + basic: '基本信息', + models: '模型配置', + vectorStore: '向量存儲', + chunking: '分塊設置', + storage: '存儲引擎', + advanced: '高級設置', + faq: 'FAQ 設置', + graph: '知識圖譜', + multimodal: '圖像處理', + asr: '音頻處理', + datasource: '資料源', + share: '共享管理', + activity: '活動記錄' + }, + navGroups: { + basic: '基礎', + processing: '索引與解析', + data: '存儲與資料', + integration: '發佈集成', + management: '管理與審計' + }, + activity: { + title: '活動記錄', + description: '查看這個知識庫的重要變更與後臺任務入口,記錄默認遵循審計日誌保留策略。', + allOutcomes: '全部結果', + allActions: '全部操作', + refresh: '刷新', + retry: '重試', + empty: '暫無活動記錄', + emptyFiltered: '沒有匹配的活動記錄', + clearFilters: '清除篩選', + loadingMore: '加載中…', + end: '沒有更早的記錄了', + loadFailed: '活動記錄加載失敗', + systemActor: '系統觸發', + knowledgeBase: '知識庫', + countItems: '共 {count} 項', + titleWithCount: '{title} 等 {count} 項', + importSummary: '成功 {success} / 失敗 {failed} / 跳過 {skipped}', + detailValues: { + user: '用戶發起', + manual: '手動觸發', + schedule: '定時調度', + system: '系統觸發', + pending: '待處理', + completed: '已完成', + partial: '部分完成', + canceled: '已取消', + failed: '失敗', + enqueue: '任務提交', + reuse_vectors: '複用向量', + reparse: '重新解析', + viewer: '只讀', + editor: '可編輯', + admin: '管理', + append: '追加', + replace: '覆蓋' + }, + outcomes: { + accepted: '已受理', + success: '成功', + failed: '失敗', + partial: '部分完成', + canceled: '已取消', + denied: '已拒絕' + }, + actions: { + 'kb.created': '建立知識庫', + 'kb.updated': '更新知識庫', + 'kb.deleted': '刪除知識庫', + 'kb.duplicated': '複製知識庫', + 'kb.clone_started': '開始克隆', + 'kb.clone_completed': '完成克隆', + 'kb.clone_failed': '克隆失敗', + 'knowledge.created': '添加知識', + 'knowledge.updated': '更新知識', + 'knowledge.deleted': '刪除知識', + 'knowledge.batch_deleted': '批量刪除知識', + 'knowledge.reparse_started': '開始重新解析', + 'knowledge.parse_canceled': '取消解析', + 'knowledge.move_started': '開始移動知識', + 'knowledge.move_completed': '完成移動知識', + 'knowledge.move_failed': '移動知識失敗', + 'tag.created': '建立標籤', + 'tag.updated': '更新標籤', + 'tag.deleted': '刪除標籤', + 'datasource.created': '建立資料源', + 'datasource.updated': '更新資料源', + 'datasource.deleted': '刪除資料源', + 'datasource.sync_started': '開始同步資料源', + 'datasource.sync_completed': '資料源同步完成', + 'datasource.sync_failed': '資料源同步失敗', + 'datasource.paused': '暫停資料源', + 'datasource.resumed': '還原資料源', + 'kb.share_added': '添加共享', + 'kb.share_permission_changed': '修改共享權限', + 'kb.share_removed': '移除共享', + 'wiki.content_changed': '更新 Wiki 內容', + 'faq.import_started': '開始導入 FAQ', + 'faq.import_completed': '完成導入 FAQ', + 'faq.import_failed': '導入 FAQ 失敗' + }, + detailFields: { + task_id: '任務 ID', + trigger: '觸發方式', + processing_status: '處理狀態', + source_kb_id: '來源知識庫 ID', + target_kb_id: '目標知識庫 ID', + sync_log_id: '同步記錄 ID', + mode: '執行模式', + attempt: '處理批次', + count: '項目數', + total: '總數', + processed: '已處理', + failed: '失敗數', + skipped: '跳過數', + failure_stage: '失敗階段' + }, + targets: { + knowledge_base: '知識庫', + knowledge: '知識', + faq_entry: 'FAQ 條目', + knowledge_tag: '標籤', + data_source: '資料源', + knowledge_base_share: '共享', + knowledge_move: '知識移動', + wiki: 'Wiki' + }, + drawer: { + sectionSummary: '摘要', + sectionIdentifiers: '標識符', + sectionTask: '任務信息', + targetChange: '變更詳情' + }, + expanded: { + targetType: '對象類型', + targetId: '對象 ID', + actorId: '發起人 ID', + details: '詳情' + }, + columns: { + time: '時間', + action: '操作', + target: '對象', + actor: '發起人', + outcome: '結果' + } + } + }, + embedPublish: { + create: '新建嵌入渠道', + channelsTitle: '嵌入渠道', + disabled: '已停用', + empty: '暫無嵌入渠道', + allowedOrigins: '域名白名單', + embedCode: '嵌入代碼', + widgetCode: '浮窗腳本', + copyCode: '複製代碼', + channelKey: '渠道金鑰', + channelKeyDesc: '用於第三方網站接入的長期金鑰,請妥善保管', + channelKeyHint: '加載渠道金鑰失敗,請關閉後重新打開或刷新頁面重試。', + channelKeyLoadFailed: '加載渠道金鑰失敗', + channelKeyUnavailable: '金鑰不可用', + resetKeyTitle: '重置渠道金鑰', + resetKeyConfirmOk: '確認重置', + resetKeyConfirmBody: '重置後,舊的渠道金鑰會立即失效,所有已部署的嵌入代碼必須更換爲新金鑰才能繼續訪問。此操作不可撤銷。', + resetKeySuccess: '渠道金鑰已重置,新金鑰已顯示在輸入框中', + resetKeyFailed: '重置渠道金鑰失敗', + copyChannelKeyTitle: '複製渠道金鑰', + revealKey: '顯示金鑰', + hideKey: '隱藏金鑰', + createTitle: '新建嵌入渠道', + name: '名稱', + nameDesc: '後臺管理用,用於列表與渠道識別', + namePlaceholder: '例如:官網客服', + nameDefaultHint: '默認爲「智能體名 · 網頁嵌入」,可自行修改;留空保存時也會使用該名稱', + defaultChannelName: '網頁嵌入', + defaultChannelNameWithAgent: '{agent} · 網頁嵌入', + welcomeMessage: '歡迎語', + welcomePlaceholder: '你好,有什麼可以幫您?', + welcomeMessageDesc: '訪客打開嵌入聊天后、尚未發言時展示;留空則不顯示', + showSuggestedQuestions: '推薦問題', + showSuggestedQuestionsDesc: '訪客未發言前展示快捷提問,內容來自智能體配置與關聯知識庫', + originsHint: '每行一個完整來源地址(如 https://shop.example.com),至少填寫一個;支持 *.example.com 子域通配', + originsRequired: '請至少填寫一個域名白名單', + originsInvalid: '域名格式無效:{origin}', + originsWildcardProd: '生產環境不允許使用通配符 *', + originsPlaceholder: 'https://shop.example.com', + rateLimitLabel: '每分鐘請求上限', + rateLimitDesc: '按訪客 IP 統計,每分鐘最多允許的嵌入接口請求次數;超出後暫時拒絕訪問,默認 30。', + rateLimitDayLabel: '每日請求總上限', + rateLimitDayDesc: '整個渠道每天(跨所有訪客 IP)允許的請求總數;用於限制發佈 Token 被複制後被刷量的成本,默認 10000。', + publishTokenWarning: '發佈 Token 會以明文出現在嵌入頁面源碼中,任何訪問該網站的人都能看到,請將其視爲「可公開金鑰」而非機密:切勿把含敏感資料的智能體做成嵌入渠道;務必配置域名白名單與請求上限;Token 泄露時可隨時「重置 Token」作廢舊值。', + primaryColor: '主題色', + pageTitle: '頁面標題', + pageTitleDesc: '訪客聊天頁標題與瀏覽器標籤;優先於名稱展示', + pageTitlePlaceholder: 'AI 客服', + headerTitleMode: '頂欄標題', + headerTitleModeChannel: '固定渠道標題', + headerTitleModeSession: '跟隨會話標題', + headerTitleModeDesc: '固定渠道標題:始終顯示頁面標題;跟隨會話標題:首條消息後按對話內容自動命名,未生成前顯示頁面標題', + tokenHint: '加載渠道金鑰失敗,請關閉後重新打開該渠道。', + createdWithToken: '嵌入渠道已建立,渠道金鑰已顯示在下方', + created: '嵌入渠道已建立', + updated: '嵌入渠道已更新', + saveFailed: '保存失敗', + deleted: '已刪除', + copied: '已複製嵌入代碼', + loadError: '加載失敗', + missingChannel: '缺少嵌入渠道或 Token', + invalidChannel: '無效的嵌入渠道', + sessionFailed: '無法建立對話會話,請稍後重試', + channelDisabled: '嵌入渠道已停用,請在 Agent 編輯器的「網頁嵌入」中重新啓用', + loading: '加載中...', + tabIframe: 'iframe', + tabWidget: '浮窗', + tabSecure: '安全模式', + widgetPosition: '浮窗位置', + widgetPreview: '浮窗預覽', + positionBottomRight: '右下角', + positionBottomLeft: '左下角', + positionTopRight: '右上角', + positionTopLeft: '左上角', + tokenCopied: '渠道金鑰已複製', + awaitingToken: '等待宿主頁面提供 Token…', + preview: '預覽', + previewIframeHint: '模擬第三方網站用 iframe 嵌入的效果(與複製代碼一致)。', + previewWidgetHint: '模擬第三方網站加載浮窗腳本後的效果;真實站點由宿主頁面通過 postMessage 傳遞 Token。', + previewMockPage: '模擬宿主頁面', + previewLoading: '正在加載預覽…', + previewUnavailable: '預覽暫時不可用,請確認渠道已啓用且 Redis 可用', + defaultChatTitle: 'AI 助手', + newChat: '新建對話', + sectionChannel: '渠道信息', + sectionSecurity: '安全與限流', + sectionCapabilities: '對話能力', + allowWebSearch: '顯示聯網搜尋開關', + allowWebSearchDesc: '開啓後,訪客輸入框會顯示聯網搜尋按鈕,可自行打開或關閉;不會默認開啓。僅當綁定的智能體已啓用聯網搜尋時按鈕纔會出現。', + allowFileUpload: '顯示文件上傳', + allowFileUploadDesc: '開啓後,訪客可上傳圖片與文檔附件。僅當綁定的智能體已啓用圖片上傳時纔會生效。', + webhookUrl: 'Webhook 地址', + webhookUrlPlaceholder: 'https://your-server.example.com/weknora/embed-events', + webhookUrlDesc: '可選。訪客發消息與助手回覆完成時,WeKnora 會向該 HTTPS 地址 POST 事件(message_sent / message_received)。', + webhookSecret: 'Webhook 簽名金鑰', + webhookSecretPlaceholder: '用於 HMAC-SHA256 簽名(X-WeKnora-Signature)', + webhookSecretKeep: '留空表示不修改已保存的金鑰', + webhookSecretDesc: '可選。配置後請求體會帶 sha256 簽名頭,便於你的服務端校驗來源。', + agentWebSearchDisabledHint: '當前智能體未啓用聯網搜尋,訪客端不會顯示聯網按鈕。請先在智能體設置中開啓聯網搜尋。', + agentImageUploadDisabledHint: '當前智能體未啓用圖片上傳,訪客端不會顯示上傳按鈕。請先在智能體設置中開啓圖片上傳。', + sectionAppearance: '外觀與展示', + sectionDeploy: '嵌入到網頁', + sectionWebhook: '事件回呼', + stepChannel: '渠道信息', + stepSecurity: '安全限流', + stepCapabilities: '對話能力', + stepAppearance: '外觀展示', + stepWebhook: '事件回呼', + stepDeploy: '網頁嵌入', + deployIntro: '選擇嵌入方式並複製下方代碼到您的網頁;需要鑑權或輪換金鑰時,可在頁面底部的「渠道金鑰」區域操作。', + deployStepEmbed: '複製嵌入代碼', + deployStepEmbedDesc: '選擇嵌入方式,將代碼貼上到第三方頁面即可。', + embedIframeDesc: '適合在頁面固定區域嵌入整頁聊天。', + embedWidgetDesc: '適合右下角浮窗,點擊圖標展開聊天面板。', + embedSecureDesc: '推薦:發佈 Token 只保存在你自己的後端,頁面只拿到短時權杖,瀏覽器永遠看不到長期金鑰。', + deployAfterSaveHint: '保存渠道後,可在此複製渠道金鑰與嵌入代碼。', + widgetTokenNote: '浮窗腳本需包含渠道金鑰;iframe 會在加載時自動完成憑證交換。', + secureTokenNote: '頁面不再包含發佈 Token,而是指向你後端的取權杖接口(data-token-endpoint)。你的後端用發佈 Token 換取 30 分鐘的短時權杖返回給頁面,浮窗會在到期前自動刷新。', + secureServerLabel: '服務端取權杖接口示例(發佈 Token 僅保存在服務端)', + tabServerNode: 'Node.js', + tabServerGo: 'Go', + enabled: '啓用渠道', + deleteConfirm: '確定刪除該嵌入渠道?已部署的網站代碼將失效。', + defaultLocale: '默認語言', + defaultLocaleDesc: '訪客打開聊天時使用的界面語言;留空則跟隨瀏覽器或宿主頁面通過 Widget 設置的 locale。', + defaultLocaleBrowser: '跟隨瀏覽器 / 宿主' + }, + knowledgeList: { + create: '新建知識庫', + subtitle: '管理和組織您的知識庫,支持文檔型和問答型知識庫', + sharedToOrgs: '已共享給 {count} 個空間', + uninitializedBanner: '部分知識庫尚未初始化,需要先在設置中配置模型信息才能添加知識文檔', + uploadProgress: { + uploadingTitle: '正在向「{name}」上傳文件夾中的文檔', + detail: '已完成 {completed}/{total} 個文件', + keepPageOpen: '請保持頁面打開,上傳完成後會自動刷新解析狀態。', + completedTitle: '「{name}」的上傳已完成', + completedDetail: '共上傳 {total} 個文件,正在刷新列表查看解析狀態...', + refreshing: '正在刷新列表並獲取最新解析狀態...', + errorTip: '部分文件上傳失敗,請查看右上角通知詳情。', + unknownKb: '知識庫 {id}' + }, + features: { + knowledgeGraph: '知識圖譜', + multimodal: '多模態', + questionGeneration: '問題生成', + wiki: 'Wiki' + }, + detail: { + title: '共享知識庫', + sourceType: '來源方式', + sourceTypeKbShare: '知識庫直接共享到本空間', + sourceTypeAgent: '智能體可訪問(通過共享智能體可見)', + sourceOrg: '來源空間', + sourceFromAgent: '智能體', + agentKbStrategy: '智能體知識庫策略', + agentKbStrategyAll: '全部知識庫', + agentKbStrategySelected: '指定知識庫', + agentKbStrategyNone: '不使用知識庫', + sharedAt: '共享時間', + myPermission: '我的權限', + goToKb: '進入知識庫' + }, + messages: { + deleted: '已刪除', + deleteFailed: '刪除失敗', + duplicateSuccess: '知識庫副本已建立(不包含知識內容)', + duplicateFailed: '建立知識庫副本失敗' + }, + sections: { + pinned: '置頂', + mine: '我建立的', + tenantOthers: '本空間 · 其他成員', + tenantReadonly: '本空間 · 僅查看', + sharedByMe: '我共享的', + sharedEditable: '共享給我 · 可編輯', + sharedReadonly: '共享給我 · 僅查看' + }, + pin: { + pin: '置頂', + unpin: '取消置頂', + pinSuccess: '已置頂', + unpinSuccess: '已取消置頂', + failed: '操作失敗' + }, + menu: { + viewDetails: '查看詳情', + duplicate: '建立副本' + }, + delete: { + confirmTitle: '刪除確認', + confirmMessage: '確認要刪除知識庫"{name}"?刪除後不可還原', + confirmButton: '確認刪除' + }, + empty: { + title: '暫無知識庫', + description: '點擊左側快捷操作"新建知識庫"按鈕建立第一個知識庫', + sharedTitle: '暫無共享知識庫', + sharedDescription: '您可以加入共享空間或請求他人共享知識庫給您', + favoritesTitle: '暫無收藏', + favoritesDescription: '在知識庫卡片右上角點擊星標即可收藏', + recentsTitle: '暫無最近訪問', + recentsDescription: '最近打開過的知識庫會出現在這裡' + } + }, + createChat: { + title: 'Hi,我是 WeKnora,讓你的知識觸手可及', + newSessionTitle: '新會話', + messages: { + createFailed: '建立會話失敗', + createError: '建立會話失敗,請稍後重試' + } + }, + input: { + addModel: '添加模型', + placeholder: '直接向模型提問', + placeholderWithContext: '輸入問題,將基於上方選中的知識庫/文件回答', + placeholderWebOnly: '輸入問題,將結合網絡搜尋回答', + placeholderKbAndWeb: '輸入問題,將基於知識庫和網絡搜尋回答', + placeholderAgent: '向 {name} 提問', + agentMode: '智能推理', + normalMode: '快速問答', + normalModeDesc: '基於知識庫的 RAG 問答', + agentModeDesc: '多步思考,深度分析', + agentMissingAllowedTools: '允許的工具', + agentMissingSummaryModel: '對話模型', + agentMissingRerankModel: '重排模型', + customAgentMissingSummaryModel: '對話模型', + customAgentMissingRerankModel: '重排模型', + goToAgentEditor: '前往配置 →', + agentNotReadyDetail: '智能體「{agentName}」未就緒,需要配置以下內容:{reasons}', + sharedAgentNotReadyDetail: '共享智能體「{agentName}」尚未就緒(缺少:{reasons}),請聯繫分享方管理員完成配置。', + knowledgeBase: '知識庫', + knowledgeBaseWithCount: '知識庫({count})', + notConfigured: '未配置', + sharedAgentModelLabel: '共享智能體配置的模型', + noModel: '暫無可用模型', + stopGeneration: '停止生成', + send: '發送', + webSearchDisabledByAgent: '當前智能體已禁用網絡搜尋', + kbLockedByAgent: '當前智能體已鎖定知識庫配置', + kbDisabledByAgent: '當前智能體已禁用知識庫功能', + modelLockedByAgent: '當前智能體已鎖定模型配置', + imageUploadDisabledByAgent: '當前智能體未啓用圖片上傳', + goToAgentSettings: '去設置智能體', + messages: { + enterContent: '請先輸入內容!', + replying: '正在回覆中,請稍後再試!', + agentSwitchedOn: '已切換到智能推理', + agentSwitchedOff: '已切換到快速問答', + agentSelected: '已選擇智能體「{name}」', + webSearchNotConfigured: '未配置網絡搜尋引擎,請先在設置中完成搜尋引擎選擇與接口配置。', + webSearchEnabled: '網絡搜尋已開啓', + webSearchDisabled: '網絡搜尋已關閉', + sessionMissing: '會話 ID 不存在', + messageMissing: '無法獲取消息 ID,請刷新頁面後重試', + stopSuccess: '已停止生成', + stopFailed: '停止失敗,請重試' + }, + webSearch: { + toggleOn: '開啓網絡搜尋', + toggleOff: '關閉網絡搜尋', + notConfigured: '未配置網絡搜尋引擎' + } + }, + manualEditor: { + description: '使用 Markdown 編寫知識內容,支持實時預覽', + defaultTitlePrefix: '新建文檔', + noDocumentKnowledgeBases: '暫無可用的文檔型知識庫,請先建立一個文檔型知識庫', + actions: { + cancel: '取消', + saveDraft: '暫存草稿', + publish: '發佈入庫' + }, + loading: { + content: '正在加載內容', + preparing: '正在準備編輯器' + }, + status: { + draftTag: '當前狀態:草稿', + publishedTag: '當前狀態:已發佈', + lastUpdated: '最近更新:{time}' + }, + form: { + knowledgeBaseLabel: '目標知識庫', + knowledgeBasePlaceholder: '請選擇知識庫', + titleLabel: '知識標題', + titlePlaceholder: '請輸入標題', + contentPlaceholder: '支持 Markdown 語法,可使用 # 標題、列表、代碼塊等' + }, + success: { + draftSaved: '草稿已保存', + published: '知識已發佈並開始索引' + }, + warning: { + selectKnowledgeBase: '請選擇目標知識庫', + enterTitle: '請輸入知識標題', + enterContent: '請輸入知識內容', + contentTooShort: '內容過短,建議補充更多信息後再發布' + }, + error: { + fetchDetailFailed: '獲取知識詳情失敗', + saveFailed: '保存失敗,請稍後重試' + }, + labels: { + currentKnowledgeBase: '當前知識庫' + }, + section: { + basic: '基本信息', + content: '知識內容' + }, + title: { + edit: '編輯 Markdown 知識', + create: '在線編輯 Markdown 知識' + }, + preview: { + empty: '暫無內容' + }, + view: { + editLabel: '返回編輯', + previewLabel: '預覽內容' + }, + toolbar: { + bold: '加粗', + italic: '斜體', + strike: '刪除線', + inlineCode: '行內代碼', + heading1: '一級標題', + heading2: '二級標題', + heading3: '三級標題', + bulletList: '無序列表', + orderedList: '有序列表', + taskList: '任務列表', + blockquote: '引用', + codeBlock: '代碼塊', + link: '插入鏈接', + image: '插入圖片', + table: '插入表格', + horizontalRule: '分割線' + }, + table: { + column1: '列1', + column2: '列2', + cell: '內容' + }, + placeholders: { + heading: '標題{level}', + listItem: '列表項', + taskItem: '任務項', + quote: '引用內容', + code: '代碼內容', + linkText: '鏈接文本', + imageAlt: '描述', + bold: '加粗文本', + italic: '斜體文本', + strike: '刪除線', + inlineCode: 'code' + } + }, + file: { + upload: '上傳文件' + }, + mentionDetail: { + readOnlyFromAgent: '僅在此對話中只讀,不顯示在知識庫列表中', + faqCount: '共 {count} 條問答', + kbCount: '共 {count} 個文檔', + belongsToKb: '所屬知識庫:', + belongsToOrg: '所屬空間:', + noCompatibleKbForAgent: '當前智能體的工具與作用域內知識庫的能力不匹配,暫無可引用的知識庫。' + }, + common: { + add: '添加', + me: '我', + confirm: '確認', + cancel: '取消', + save: '保存', + delete: '刪除', + edit: '編輯', + copy: '複製', + copied: '已複製', + default: '默認', + create: '建立', + download: '下載', + refresh: '刷新', + loading: '加載中...', + noData: '暫無資料', + noMoreData: '已加載全部內容', + error: '錯誤', + success: '成功', + failed: '失敗', + info: '信息', + selectAll: '全選', + yes: '是', + no: '否', + close: '關閉', + back: '返回', + next: '下一步', + finish: '完成', + all: '全部', + clear: '清空', + website: '官方網站', + clawhubSkill: 'Claw Skill', + github: 'GitHub', + githubStarTip: '在 GitHub 打開倉庫,若覺得有用歡迎點個 Star', + on: '開啓', + off: '關閉', + confirmDelete: '確認刪除', + deleteSuccess: '刪除成功', + deleteFailed: '刪除失敗', + updateSuccess: '更新成功', + saveSuccess: '保存成功', + saveFailed: '保存失敗', + file: '文件', + knowledgeBase: '知識庫', + noResult: '無結果', + remove: '移除', + defaultUser: '用戶', + copyFailed: '複製失敗', + retry: '重試', + expand: '展開', + collapse: '收起' + }, + authStore: { + errors: { + parseUserFailed: '解析用戶信息失敗', + parseTenantFailed: '解析空間信息失敗', + parseKnowledgeBasesFailed: '解析知識庫列表失敗', + parseCurrentKnowledgeBaseFailed: '解析當前知識庫失敗' + } + }, + auth: { + login: '登錄', + logout: '退出', + oidcLogin: '使用 OIDC 登錄', + oidcLoginWithProvider: '使用 {provider} 登錄', + redirectingToOIDC: '正在跳轉到身份提供商...', + orContinueWith: '或使用以下方式繼續', + oidcLoginFailed: 'OIDC 登錄失敗', + username: '用戶名', + email: '信箱', + password: '密碼', + confirmPassword: '確認密碼', + loginSuccessTitle: '登錄成功', + loginSuccessContent: '歡迎,你已進入 {name}', + loggingIn: '登錄中...', + register: '註冊', + registering: '註冊中...', + createAccount: '建立帳號', + haveAccount: '已有帳號?', + backToLogin: '返回登錄', + loginHint: '登錄以繼續使用;首次使用請在下方建立帳號。', + firstTime: '首次使用 WeKnora?', + registerSuccess: '註冊成功,請登錄', + registerFailed: '註冊失敗', + subtitle: 'RAG 問答、ReAct 智能體與 Wiki 知識庫,大模型驅動的企業級知識框架', + registerSubtitle: '建立帳號並開始使用 WeKnora', + emailPlaceholder: '輸入信箱地址', + passwordPlaceholder: '輸入密碼(8-32個字符,包含字母和數字)', + confirmPasswordPlaceholder: '再次輸入密碼', + usernamePlaceholder: '輸入用戶名', + emailRequired: '請輸入信箱地址', + emailInvalid: '請輸入正確的信箱格式', + passwordRequired: '請輸入密碼', + passwordMinLength: '密碼至少8個字符', + passwordMaxLength: '密碼不能超過32個字符', + passwordMustContainLetter: '密碼必須包含字母', + passwordMustContainNumber: '密碼必須包含數字', + usernameRequired: '請輸入用戶名', + usernameMinLength: '用戶名至少2個字符', + usernameMaxLength: '用戶名不能超過20個字符', + usernameInvalid: '用戶名只能包含字母、數字、下劃線和中文字符', + confirmPasswordRequired: '請確認密碼', + passwordMismatch: '兩次輸入的密碼不一致', + loginError: '登錄錯誤,請檢查信箱或密碼', + loginErrorRetry: '登錄錯誤,請稍後重試', + registerError: '註冊錯誤,請稍後重試', + workspaceOnboarding: { + title: '選擇你的工作空間', + create: '建立空間', + invitations: '查看邀請', + loadingPolicy: '正在確認可用的空間加入方式…', + policyLoadFailed: '暫時無法獲取空間權限,請檢查網絡後重試。', + retry: '重新加載', + inviteOnlyTitle: '等待加入工作空間', + inviteOnlyDescription: '當前系統不開放個人建立空間。你可以查看並接受管理員發來的空間邀請。', + inviteOnlyNotice: '此帳號只能通過邀請加入已有空間', + inviteOnlyHelp: '還沒有邀請?請把你的註冊信箱提供給空間管理員,由管理員向你發送邀請。' + } + }, + inviteRegister: { + bannerTitle: '您被邀請加入「{tenant}」', + bannerHint: '填寫下方信息完成註冊,註冊成功後將自動加入該團隊。', + bannerHintLogin: '登錄後將自動加入該團隊。', + loading: '正在校驗邀請鏈接…', + invalidTitle: '邀請鏈接無效或已撤銷', + invalidBody: '請聯繫邀請人重新發送鏈接,或前往登錄使用現有帳號。', + backToLogin: '返回登錄', + title: '完成註冊', + subtitle: '您被邀請加入「{tenant}」', + email: '信箱', + emailPlaceholder: 'your{\'@\'}example.com', + emailHint: '用您自己的信箱註冊即可。', + emailInvalid: '請輸入有效的信箱地址', + username: '姓名', + usernamePlaceholder: '請輸入您的姓名', + password: '設置密碼', + passwordPlaceholder: '至少 6 位', + confirmPassword: '確認密碼', + submit: '完成註冊', + submitting: '提交中…', + success: '註冊成功,正在進入工作空間…', + joined: '已加入該團隊', + failed: '註冊失敗,請稍後重試', + usernameRequired: '請輸入姓名', + passwordTooShort: '密碼至少 6 位', + passwordMismatch: '兩次輸入的密碼不一致' + }, + initialization: { + skip: '跳過', + next: '下一步' + }, + graphSettings: { + title: '知識圖譜配置', + description: '配置實體-關係提取功能,自動從文本中抽取實體和關係構建知識圖譜(注意:這與 Wiki 知識庫中的「頁面鏈接圖譜」是兩回事——前者是基於 LLM 的實體-關係圖,後者是 Wiki 頁面之間的引用關係圖)', + enableLabel: '啓用實體關係提取', + enableDescription: '開啓後將自動從文本中提取實體和關係', + tagsLabel: '關係類型', + tagsDescription: '定義要提取的關係類型標籤,多個標籤用逗號分隔', + tagsPlaceholder: '輸入關係類型,如:工作於、同事、朋友等', + generateRandomTags: '生成隨機標籤', + sampleTextLabel: '示例文本', + sampleTextDescription: '用於測試實體關係提取的示例文本', + sampleTextPlaceholder: '輸入一段包含實體和關係的文本...', + customInstructionsLabel: '額外提取要求', + customInstructionsDescription: '補充領域範圍、實體篩選和屬性提取要求;系統仍負責結構化輸出協議', + customInstructionsPlaceholder: '例如:重點提取合同主體、金額、履約期限和違約責任…', + generateRandomText: '生成隨機文本', + entityListLabel: '實體列表', + entityListDescription: '從文本中提取的實體及其屬性', + nodeNamePlaceholder: '輸入實體名稱', + attributePlaceholder: '輸入屬性值', + addAttribute: '添加屬性', + manageEntitiesLabel: '管理實體', + manageEntitiesDescription: '添加或刪除實體節點', + addEntity: '添加實體', + relationListLabel: '關係列表', + relationListDescription: '定義實體之間的關係連接', + selectEntity: '選擇實體', + selectRelationType: '選擇關係類型', + manageRelationsLabel: '管理關係', + manageRelationsDescription: '添加或刪除實體間的關係', + addRelation: '添加關係', + extractActionsLabel: '提取操作', + extractActionsDescription: '執行實體關係提取或管理示例資料', + startExtraction: '開始提取', + extracting: '提取中...', + defaultExample: '默認示例', + clearExample: '清除示例', + completeModelConfig: '請先完成模型配置', + tagsGenerated: '標籤生成成功', + tagsGenerateFailed: '標籤生成失敗', + textGenerated: '文本生成成功', + textGenerateFailed: '文本生成失敗', + pleaseInputText: '請先輸入示例文本', + extractSuccess: '實體關係提取成功', + extractFailed: '實體關係提取失敗', + exampleLoaded: '示例已加載', + exampleCleared: '示例已清除', + disabledWarning: '知識圖譜資料庫未啓用,實體關係提取功能將無法使用', + howToEnable: '如何啓用知識圖譜?' + }, + retrievalSettings: { + title: '搜尋設置', + description: '配置知識庫搜尋和消息搜尋的全局檢索參數', + embeddingTopKLabel: '向量檢索數量 (Top K)', + vectorThresholdLabel: '向量相似度閾值', + keywordThresholdLabel: '關鍵詞匹配閾值', + rerankTopKLabel: 'Rerank 數量 (Top K)', + rerankThresholdLabel: 'Rerank 閾值', + rerankModelLabel: 'Rerank 模型', + rerankModelDescription: '選擇用於搜尋結果重排序的模型', + rerankModelRequired: '請選擇 Rerank 模型,搜尋功能需要此模型對結果進行重排序', + toasts: { + saveSuccess: '檢索配置已保存', + saveFailed: '保存配置失敗: {message}' + } + }, + memorySettings: { + title: '我的記憶', + description: '這裡是助手跨會話記住的關於你的內容。你可以隨時查看、修改和刪除,刪除後不會再被使用。', + workspaceDisabled: '當前空間尚未開啓長期記憶,管理員開啓後這裡的開關纔會生效。', + enableLabel: '爲我啓用長期記憶', + enableDescription: '關閉後助手不再讀取或新增你的記憶,已有記憶會保留,重新開啓即可繼續使用。', + agentDisabledHint: '單個智能體也可以單獨關閉長期記憶。被關閉的智能體在對話中既不會讀取你的記憶,也不會新增記憶;換用其他智能體不受影響。', + usage: { + title: '記憶何時會被使用', + iconHint: '查看哪些記憶會在對話裡被使用', + intro: '僅「生效中」會進入對話。', + rows: { + alwaysOn: { + label: '每輪都會帶上', + text: '個人信息、偏好,以及明確說「記住」的內容' + }, + situational: { + label: '相關時才用', + text: '事實、在辦事項' + }, + interest: { + label: '理解常問方向', + text: '長期關注,不一定每輪都引用' + }, + tracking: { + label: '先觀察再記住', + text: '常問方向會先計數,達到次數後才成爲長期關注' + }, + documents: { + label: '常用資料', + text: '反覆用來回答你的文檔,檢索時會稍稍優先' + }, + pending: { + label: '確認後才生效', + text: '待確認的推斷' + }, + inactive: { + label: '不再使用', + text: '已被更新、已歸檔' + } + } + }, + listTitle: '記憶列表', + listCount: '共 {count} 條', + statusActive: '生效中', + statusSuperseded: '已被更新', + statusArchived: '已歸檔', + statusPending: '待確認', + statusTracking: '觀察中', + statusDocuments: '常用資料', + confirmGuess: '是的', + rejectGuess: '不是', + pendingHint: '這些是系統從你的提問裡推斷出來的,確認之前不會被使用。', + trackingHint: '這些是你反覆問到、但還沒達到「長期關注」次數的主題。記下來之前不會進入對話。', + documentsHint: '這些文檔在回答裡反覆出現,檢索會稍微偏向它們。停止跟蹤後不再加權,再被引用兩次會重新出現。', + supersededHint: '這些內容已被更新的記憶替代,不會再進入對話,只作爲變更記錄保留。', + archivedHint: '已歸檔的記憶不會再進入對話。超出每人上限後,較少用到的條目會被自動收起。', + pendingEmptyTitle: '沒有待確認的推斷', + pendingEmptyDescription: '當系統從你的提問裡推斷出關於你的信息時,會先放在這裡等你確認。', + trackingEmptyTitle: '沒有正在觀察的主題', + trackingEmptyDescription: '自動提煉開啓後,系統會先統計你常問的方向,達到次數後再記爲長期關注。', + documentsEmptyTitle: '還沒有常用資料', + documentsEmptyDescription: '同一份文檔被回答引用兩次以上,就會出現在這裡。', + supersededEmptyTitle: '還沒有被更新的記憶', + supersededEmptyDescription: '同一主題被新說法覆蓋時,舊內容會留在這裡。在本頁直接編輯是原地改寫,不會產生這條記錄。', + archivedEmptyTitle: '還沒有歸檔的記憶', + archivedEmptyDescription: '生效中超過上限(默認 200 條)時,較少用到的會自動收起;帶過期時間的事項到期後也會進來。', + documentsHits: '已引用 {hits} 次', + untitledDocument: '未命名文檔', + openDocument: '打開文檔', + openDocumentUnavailable: '無法打開:缺少知識庫信息', + stopTrackingDocument: '停止跟蹤', + stopTrackingDocumentConfirm: '停止用這份文檔做個性化檢索?之後再被引用兩次會重新出現。', + stopTrackingDocumentSuccess: '已停止跟蹤這份資料', + stopTrackingDocumentFailed: '停止跟蹤失敗', + trackingProgress: '已問 {hits} 次,滿 {threshold} 次後記爲長期關注', + trackingReady: '已達到次數,可以記爲長期關注', + trackingAliases: '也問過:{aliases}', + promoteTopic: '記爲關注', + dismissTopic: '不再跟蹤', + dismissTopicConfirm: '停止跟蹤這個主題?之後再問到也不會自動記爲長期關注。', + promoteSuccess: '已記爲長期關注', + promoteFailed: '記爲關注失敗', + dismissSuccess: '已停止跟蹤這個主題', + dismissFailed: '停止跟蹤失敗', + confirmSuccess: '已確認', + confirmFailed: '確認失敗', + rejectSuccess: '已否決,不會再次推斷', + rejectFailed: '否決失敗', + export: '導出', + consolidate: '整理', + consolidateConfirm: '合併意思接近的條目,舊內容會留在「已被更新」。確定整理?', + consolidateSuccess: '整理完成:合併 {merged} 組,到期歸檔 {expired} 條,過期事項降權 {demoted} 條', + consolidateNothing: '沒有發現需要整理的內容', + consolidateTooFewItems: '記憶還太少,暫時沒有整理的必要', + consolidateNoCandidates: '沒有發現意思相近的記憶,無需合併', + consolidateModelDeclined: '模型看過了,這些記憶說的不是同一件事,未做合併', + consolidateTooSoon: '剛整理過,請稍後再試', + consolidateModelUnavailable: '模型不可用,爲避免誤合併,本次沒有改動任何記憶', + consolidateFailed: '整理失敗', + clear: '清空', + clearConfirm: '將永久刪除你的全部記憶、正在觀察的主題和常用資料,此操作不可撤銷。確定繼續嗎?', + deleteConfirm: '永久刪除這條記憶?', + add: '添加', + addPlaceholder: '用一句話寫下你希望助手記住的事', + addTitle: '添加記憶', + addKindLabel: '類型', + addContentLabel: '內容', + emptyTitle: '還沒有記憶', + emptyDescription: '在對話裡說「記住:……」,或者在上面直接添加一條。', + kinds: { + profile: '個人信息', + preference: '偏好', + fact: '事實', + task: '在辦事項', + interest: '長期關注' + }, + kindHints: { + profile: '之後每輪對話都會帶上', + preference: '之後每輪對話都會帶上', + fact: '只在問題相關時纔會用到', + task: '只在問題相關時纔會用到', + interest: '用來理解你常問的方向,不一定每輪都引用' + }, + origins: { + explicit: '你要求記住', + extracted: '自動提煉', + manual: '手動添加' + }, + toasts: { + enabled: '已爲你開啓長期記憶', + disabled: '已關閉長期記憶', + added: '已添加', + updated: '已更新', + deleted: '已刪除', + cleared: '已刪除 {count} 條記憶', + saveFailed: '操作失敗:{message}' + } + }, + memoryWorkspaceSettings: { + title: '長期記憶', + description: '讓助手跨會話記住成員說過的個人信息、偏好、事實與在辦事項。', + introTitle: '默認關閉,需要你顯式開啓', + introDescription: '長期記憶會保留成員在對話中說過的內容,因此默認不開啓。開啓後每位成員的記憶彼此隔離,成員可以在「我的記憶」裡隨時查看、修改、刪除或整體關閉。生效中的個人信息與偏好會進入之後的每一輪對話;事實和在辦事項只在相關問題時召回。', + enableLabel: '在本空間啓用長期記憶', + enableDescription: '關閉後本空間的所有會話都不會讀取或寫入記憶。', + writeModeLabel: '記憶寫入方式', + writeModeDescription: '決定什麼內容會被記住。', + writeModeExplicit: '僅顯式記錄', + writeModeAuto: '自動提煉', + writeModeExplicitHint: '只記錄成員明確說「記住:……」的內容,以及在記憶頁手動添加的條目,不額外調用模型。', + writeModeAutoHint: '在此基礎上,會話結束後在後臺調用一次模型,從成員自己說過的話裡提煉值得長期保留的內容。', + extractModelLabel: '提煉模型', + extractModelDescription: '留空則使用該次會話所用的模型。', + extractDelayLabel: '挖掘延遲', + extractDelayDescription: '一輪對話結束後等待多久再挖掘。等一等可以讓一次模型調用覆蓋用戶連着發的幾條消息。', + extractMinIntervalLabel: '兩次挖掘的最小間隔', + extractMinIntervalDescription: '同一個人兩次挖掘之間至少間隔多久,用來控制成本。間隔內產生的消息不會被丟棄,會順延到下一次挖掘一併處理。', + vectorRecallLabel: '按語義召回記憶', + vectorRecallDescription: '除了字面匹配,再按含義匹配。用戶換個說法之後,原來那條記憶仍然能被找到——而多數記憶遲早會被換說法。每輪問答多一次向量調用,超時會自動退回字面匹配。', + embeddingModelLabel: '記憶 Embedding 模型', + embeddingModelDescription: '語義召回只使用這一個模型,與各知識庫綁定的 Embedding 無關。不選則只按字面匹配。換模型後,新寫入立刻用新模型;舊記憶在補上新向量之前,語義召回找不到它們,只靠字面匹配。', + conditioningLabel: '讓記憶參與檢索', + conditioningDescription: '開啓後,記憶會參與查詢改寫和文檔排序,而不只是附加到回答提示裡。這是記憶在知識庫產品裡真正起作用的地方。', + interestThresholdLabel: '成爲長期關注的次數', + interestThresholdDescription: '同一個主題被問到這麼多次後,纔會作爲長期關注記下來。設爲 1 會把每個一次性問題都記下來,通常太吵。', + instructionsLabel: '自定義挖掘規則', + instructionsDescription: '追加到挖掘提示詞裡的空間規則,用來表達產品猜不到的策略,例如「永遠不要記錄客戶姓名」。', + instructionsPlaceholder: '一行一條規則,例如:永遠不要記錄客戶姓名', + maxItemsLabel: '每人記憶上限', + maxItemsDescription: '超出後按重要度與使用時間歸檔最低的若干條,歸檔的記憶仍可在「我的記憶」裡查看。', + toasts: { + saveSuccess: '長期記憶配置已保存', + saveFailed: '保存失敗:{message}' + } + }, + chatHistorySettings: { + title: '消息管理', + description: '配置聊天曆史知識庫,將對話消息自動向量化索引,實現語義搜尋', + enableLabel: '啓用消息索引', + enableDescription: '開啓後,新的對話消息將自動索引到知識庫,支持向量搜尋', + embeddingModelLabel: 'Embedding 模型', + embeddingModelDescription: '選擇用於消息向量化的 Embedding 模型', + embeddingModelLocked: '已有消息被索引,Embedding 模型不可修改(修改需清空索引資料)', + statsTitle: '索引統計', + statsIndexedMessages: '已索引消息', + statsNotConfigured: '消息索引未配置', + statsNotConfiguredDesc: '啓用並選擇 Embedding 模型後,對話消息將自動向量化索引', + toasts: { + saveSuccess: '消息管理配置已保存', + saveFailed: '保存配置失敗: {message}' + } + }, + vectorStoreSettings: { + title: '向量資料庫引擎', + description: '註冊和管理用於知識庫搜尋的向量資料庫實例。', + basicSection: '基本信息', + storesTitle: '向量資料庫', + addStore: '添加資料庫', + editStore: '編輯資料庫', + deleteConfirm: '確定要刪除此向量資料庫嗎?', + emptyDesc: '尚未配置向量資料庫。點擊"添加資料庫"開始設置。', + engineTypeLabel: '引擎類型', + nameLabel: '名稱', + namePlaceholder: '例如:my-vector-store', + connectionInfo: '連接信息', + advancedIndexConfig: '高級設置', + envTag: 'DEFAULT', + testConnection: '測試連接', + testing: '測試中...', + immutableNotice: '建立後無法更改引擎類型、連接和索引設置。\n如需更改,請刪除後重新建立。', + insecureSkipVerifyWarning: '關閉 TLS 證書校驗會使連接面臨中間人攻擊風險。僅可用於自簽名證書的開發集群,切勿在生產環境使用。', + toasts: { + storeCreated: '向量資料庫已建立', + storeUpdated: '向量資料庫已更新', + storeDeleted: '向量資料庫已刪除', + testSuccess: '連接測試成功', + testFailed: '連接測試失敗', + duplicateName: '同名向量資料庫已存在', + errorGeneric: '發生錯誤,請重試。' + }, + validation: { + nameRequired: '名稱爲必填項', + engineTypeRequired: '引擎類型爲必填項', + fieldRequired: '{field}爲必填項', + indexNamePattern: '必須以字母開頭,僅允許字母、數字、下劃線和連字符(最多128個字符)' + } + }, + webSearchSettings: { + title: '網絡搜尋配置', + description: '配置網絡搜尋功能,在回答問題時可以從互聯網獲取實時信息補充知識庫內容', + basicSection: '基本信息', + credentialsSection: '連接配置', + optionsSection: '選項', + providersTitle: '搜尋引擎配置', + addProvider: '添加搜尋引擎', + editProvider: '編輯搜尋引擎', + deleteConfirm: '確定要刪除此搜尋引擎配置嗎?', + providerNameLabel: '名稱', + providerNamePlaceholder: '例如:生產環境 Bing 搜尋', + providerTypeLabel: '引擎類型', + providerDescLabel: '備註', + providerDescPlaceholder: '可選,如:測試環境用', + engineIdLabel: '搜尋引擎 ID', + setAsDefault: '設爲默認', + testConnection: '測試連接', + testing: '測試中...', + viewDocs: '查看文檔獲取金鑰', + noProvidersDesc: '添加一個網絡搜尋引擎,爲您的智能體提供實時的互聯網信息檢索能力。', + setAsDefaultDesc: '當智能體沒有指定特定的搜尋引擎時,將默認使用此配置', + proxyUrlLabel: 'HTTP 代理', + proxyUrlPlaceholder: '例如 http://proxy.example.com:3128(可選,僅支持 http/https)', + proxyUrlHelp: '若環境訪問搜尋 API 需代理,在此填寫;留空則使用系統環境變數 HTTP(S)_PROXY。', + apiKeyLabel: 'API 金鑰', + apiKeyOptionalLabel: 'API 金鑰(可選)', + baseUrlLabel: '實例地址', + baseUrlPlaceholder: 'https://searxng.example.com', + apiKeyPlaceholder: '請輸入 API 金鑰', + toasts: { + providerCreated: '搜尋引擎配置已建立', + providerUpdated: '搜尋引擎配置已更新', + providerDeleted: '搜尋引擎配置已刪除', + testSuccess: '連接測試成功', + testFailed: '連接測試失敗' + } + }, + settings: { + modelManagement: '模型管理', + webSearchConfig: '網絡搜尋', + autoCheckUpdate: '自動下載更新', + autoCheckUpdateDesc: '開啓後自動檢查並在後臺下載最新版本安裝包。', + vectorStoreEngine: '向量資料庫引擎', + parserEngine: '解析引擎', + storageEngine: '存儲引擎', + sandbox: { + title: '沙箱後端', + description: '管理智能體技能使用的沙箱運行環境,每個智能體可以選擇一份空間後端配置。', + editorDescription: '配置空間運行環境,Docker、本地進程、CubeSandbox 和 E2B 使用同一套管理流程。', + stepConnection: '連接', + stepTemplate: '模板', + stepRuntime: '運行配置', + setupProgress: '沙箱配置進度', + stepDescriptions: { + connection: '先配置後端並驗證連接,通過後再從集群加載模板。', + template: '選擇當前集群返回且已經就緒的運行模板。', + runtime: '配置執行參數和環境變數,然後保存。', + }, + back: '上一步', + connectAndContinue: '連接並繼續', + loading: '加載沙箱配置...', + loadFailed: '加載沙箱配置失敗', + backend: '沙箱後端', + backendType: '沙箱類型', + backendTypePlaceholder: '選擇沙箱類型', + scriptPolicyLabel: '允許在沙箱中執行技能腳本', + scriptPolicyDesc: '關閉後本空間所有智能體只能閱讀技能內容,不再執行腳本;已在運行的遠端沙箱需結束會話後才釋放。', + backendDescriptions: { + cube: '適合私有化或內網部署的自建 MicroVM 集群', + e2b: 'E2B 託管服務或兼容 E2B 的集群', + docker: '每次在當前 WeKnora 主機啓動一個短生命週期容器執行腳本', + local: '直接在 WeKnora 服務進程所在環境執行腳本', + }, + addConfig: '添加沙箱後端', + viewClusterGuide: '集群搭建指南', + configName: '配置名稱', + configNamePlaceholder: '如:生產 E2B', + configNameRequired: '請填寫配置名稱', + configDescription: '描述', + configDescriptionPlaceholder: '選填,用於區分多份同類型配置', + createTitle: '添加沙箱後端', + editTitle: '編輯沙箱後端', + sectionBasic: '基本信息', + sectionConnection: '集群連接', + sectionRuntimeEnvironment: '運行環境', + sectionTemplate: '運行模板', + sectionRuntime: '執行設置', + sectionEnvironment: '環境變數', + noConfigs: '還沒有沙箱後端配置。智能體未選擇空間配置時不會執行技能腳本。', + identityFieldHint: '該配置下有沙箱運行時,以下項無法修改:後端類型、API 端點、API Key、沙箱域名、Proxy 端點。', + viewSandboxes: '查看沙箱佔用', + inventoryTitle: '沙箱佔用', + inventoryDrawerDesc: '該配置當前佔用的沙箱,以及受影響的會話與智能體。', + inventoryFailed: '獲取沙箱佔用失敗', + sandboxCount: '沙箱數量', + sandboxCountUnknown: '未知(無法連接該後端)', + inventoryUnverifiableHint: '無法連接該後端,因此沙箱數量未知——這不代表沒有沙箱。', + sandboxesStillLive: '該配置仍有 {count} 個運行中或已暫停的沙箱,暫時無法修改身份字段。', + blockedHint: '可結束或刪除這些會話(刪除會話會銷燬其沙箱),或新建一份配置並把智能體指過去。', + unverifiableBlocked: '無法連接該後端覈實是否仍有沙箱,因此不能覆蓋現有憑證。', + unverifiableSaveHint: '請先還原該後端的連通性;若已廢棄,可新建一份配置並把智能體指過去。', + affectedSessions: '影響 {count} 個會話。', + affectedAgents: '以下智能體正在使用該配置:{names}', + confirmDelete: '確定刪除沙箱後端「{name}」嗎?', + confirmDeleteWithAgents: '確定刪除沙箱後端「{name}」嗎?{agents}它們將在下次執行技能時報錯。', + deleteFailed: '刪除失敗', + deleted: '已刪除', + forceDeleteTitle: '無法覈實沙箱佔用', + forceDeleteConfirm: '無法連接該後端覈實是否仍有沙箱。若該後端已廢棄,可強制刪除這份配置;若只是暫時不可達,強制刪除會讓殘留沙箱無人回收。仍要強制刪除嗎?', + forceDelete: '強制刪除', + disableScripts: '禁用沙盒執行', + enableScripts: '啓用沙盒執行', + disableScriptsConfirm: + '禁用後,本空間內所有智能體將無法在沙盒中執行技能腳本;仍可閱讀技能內容。已在運行中的遠端沙盒不會自動銷燬,需結束或刪除相關會話後纔會釋放。是否繼續?', + scriptsDisabled: '已禁用本空間沙盒執行', + scriptsEnabled: '已還原本空間沙盒執行', + policySaveFailed: '更新沙盒執行策略失敗', + legacyConfig: '已廢棄', + namedBackendHint: '空間配置是唯一運行時來源;智能體沒有選擇配置時不會執行技能腳本。', + weknoraTemplateTitle: 'WeKnora 標準模板', + weknoraDockerImage: 'WeKnora 標準鏡像', + weknoraDockerImageHint: '每次執行都會基於該鏡像建立一個隔離的短生命週期容器,不保留會話沙箱。', + localRuntimeWarning: '本地進程會直接在 WeKnora 伺服器上執行技能腳本,不具備容器或 MicroVM 隔離。僅建議在可信的開發空間使用。', + weknoraTemplateOverview: 'WeKnora 負責提供標準運行環境。連接集群后會自動發現模板,缺少標準模板時自動建立。', + weknoraTemplateDescription: '包含 WeKnora 技能所需的 Python、Node.js、CLI 工具、工作目錄和非 root 執行用戶。', + recommendedTag: '推薦', + templateNotConfigured: '未配置模板', + cardTemplateConfigured: '模板已配置', + cardCredentialMissing: '缺少 API Key', + cardTimeout: '超時 {sec}s', + cardTtl: '沙箱存活 {sec}s', + cardVolumeMounted: '已掛載卷', + cardEnvVars: '{count} 個環境變數', + cardPrivateEndpoints: '允許訪問私網', + imageNotConfigured: '未配置鏡像', + localRuntimeSummary: 'WeKnora 伺服器本地進程', + templateApplied: '已使用', + refreshTemplates: '刷新模板', + templateSelectHelp: '模板由當前集群實時返回,保存時僅記錄模板 ID,無需手工複製。', + templateSelectPlaceholder: '先連接集群並加載模板', + templateLoadHint: '填寫集群連接後刷新模板;若缺少 WeKnora 標準模板,系統會自動建立。', + templateLoadFailed: '模板列表加載失敗', + standardTemplateProvisioning: '已開始在集群中建立 WeKnora 標準模板,請稍後刷新查看狀態', + templateNotReady: '所選模板尚未構建完成,請刷新並等待狀態就緒', + connectionPassed: '連接驗證通過,以下模板均從當前集群實時加載。', + connectionPassedTitle: '集群連接成功', + templateStepHint: '集群缺少標準模板時,WeKnora 會自動建立;模板就緒後才能繼續。', + loadingTemplates: '正在從集群加載模板…', + templateBuildingHint: '標準模板正在自動構建,列表會自動刷新。', + templateUntaggedHint: '構建已完成,但沒有構建帶 default 標籤,建立沙箱時無法解析。請在 E2B 刪除該模板,刷新後 WeKnora 會重新構建。', + templateFailedReason: '構建失敗:{reason}', + noTemplates: '當前集群未返回可用模板。', + templateReadyHint: '模板「{name}」已就緒並選中。', + templateProvisioningHint: '模板仍在構建中,狀態會自動刷新。', + templateStatuses: { + ready: '已就緒', + building: '構建中', + untagged: '缺少 default 標籤', + failed: '失敗', + unknown: '未知', + }, + allowPrivateEndpoints: '允許訪問私網集群地址', + allowPrivateEndpointsHint: '僅用於自建 Cube 等私網控制面;雲元資料等鏈路本地地址始終禁止訪問。', + howToBuildTemplate: '沙箱集群搭建與模板說明', + noEnvVars: '暫無額外環境變數,僅添加技能確實需要的值。', + fieldRequired: '必填', + cubeApiKeyOptional: '可留空 —— 自建 CubeSandbox 通常無鑑權', + cubeApiKeyWhere: '自建集群如何開啓鑑權', + e2bApiKeyHelp: '在 E2B 控制檯的 API Keys 頁面建立,通常以 e2b_ 開頭。', + e2bApiKeyWhere: '前往 E2B 控制檯獲取 API Key', + apiKeyPlaceholder: '貼上 API Key', + secretConfigured: '已配置金鑰(不可回看);輸入新值可輪換', + secretKeepHint: '已配置,留空表示不修改', + e2bApiUrlOptional: '可留空 —— 留空時使用 SDK 默認值', + e2bDomainOptional: '可留空 —— 留空時使用 SDK 默認值', + e2bProxyUrlOptional: '自建 E2B 兼容集群的資料面閘道器地址;留空表示按 sandbox domain 直連(E2B Cloud 用法)', + backends: { + disabled: '禁用', + local: '本地進程', + docker: 'Docker', + cube: 'CubeSandbox', + e2b: 'E2B', + }, + apiUrl: 'API 端點', + proxyUrl: 'Proxy 端點', + sandboxDomain: '沙箱域名', + apiKey: 'API Key', + templateId: '模板 ID', + httpTimeout: 'HTTP 超時(秒)', + httpTimeoutHelp: '調用沙箱後端管理接口的等待上限,超過即視爲端點不可用。留空按 30 秒。', + sandboxTtl: '沙箱 TTL(秒)', + sandboxTtlHelp: '沙箱空閒多久後被遠端回收。設得太短,會話繼續時要重建沙箱;設得太長,閒置實例會一直計費。留空按後端默認值。', + dockerImage: 'Docker 鏡像', + defaultTimeout: '執行超時(秒)', + defaultTimeoutHelp: '單次技能腳本允許運行的最長時間,超時會被強制終止。留空按 60 秒。', + envVars: '環境變數', + envKey: '變數名', + envValue: '變數值', + envVarsHint: '注入到該空間所有沙箱;值加密存儲,但對沙箱內腳本可見,請勿放入腳本不應讀取的金鑰。', + addRow: '添加變數', + removeRow: '刪除', + save: '保存', + saved: '已保存,對新建會話生效', + saveFailed: '保存失敗', + testConnection: '測試連接', + deepCheck: '完整驗證', + recheck: '重新驗證', + deepCheckIntro: '保存前可以跑一次「完整驗證」:真實建立一個臨時沙箱、執行一次腳本並檢查出網,隨後自動銷燬。', + deepCheckConfirm: '完整驗證會執行一次臨時腳本;遠端後端還會真實建立並銷燬一個沙箱,可能消耗少量沙箱時長。是否繼續?', + checkPassed: '檢測通過', + checkFailed: '檢測未通過', + checkScopeConnection: '本次只驗證了控制面:端點可達且憑證有效。是否真的能跑起腳本還沒有驗證。', + checkScopeFull: '端點、憑證、模板、沙箱內執行與出網均已真實驗證。', + checkPendingHint: '{names} 需要「完整驗證」才能確認:會真實建立一個臨時沙箱、執行一次腳本再銷燬。', + noVolumeSupport: '該後端不支持掛載卷,依賴共享卷的技能將不可用。', + skipReasons: { + needs_deep_check: '需完整驗證', + control_plane_unreachable: '控制面不可達,已跳過', + environment_unavailable: '運行環境不可用,已跳過', + sandbox_not_created: '沙箱未建立,已跳過', + sandbox_exec_failed: '沙箱內執行失敗,已跳過', + }, + checks: { + environment_available: '運行環境可用性', + client_build: '客戶端構建', + api_url_reachable: '端點可達性', + credential_valid: '憑證有效性', + template_exists: '模板存在性', + sandbox_exec: '沙箱內執行', + egress_available: '出網可用', + }, + }, + mcpService: 'MCP服務', + versionInfo: '版本信息', + taskQueue: '任務佇列', + tenantInfo: '空間信息', + workspaceSettings: '空間設置', + system: '系統設置', + storage: { + title: '存儲引擎', + description: '配置文檔與圖片的存儲方式。此處設置各引擎參數,知識庫中僅選擇使用哪個引擎。', + basicSection: '基本配置', + modeSection: '部署模式', + credentialsSection: '憑證', + bucketSection: 'Bucket', + useSslDesc: '通過 HTTPS 訪問 MinIO', + loading: '加載中...', + retry: '重試', + defaultEngine: '默認引擎', + defaultEngineDesc: '新建知識庫時默認選用的存儲引擎', + engineLocal: 'Local(本地)', + engineCos: '騰訊雲 COS', + engineTos: '火山引擎 TOS', + engineOss: '阿里雲 OSS', + localTitle: 'Local(本地存儲)', + localDesc: '使用伺服器本地文件系統存儲文件,僅適合單機部署。', + available: '可用', + needsConfig: '需要配置', + configurable: '可配置', + pathPrefix: '路徑前綴(可選)', + pathPrefixPlaceholder: '如 weknora/images', + prefixPlaceholder: '如 weknora', + bucketName: 'Bucket 名稱', + bucketPlaceholder: '存儲桶名稱', + minioDesc: 'S3 兼容的自託管對象存儲,適合內網和私有雲部署。', + minioDocker: 'Docker 部署', + minioRemote: '遠程 MinIO', + minioDockerDetected: '已檢測到 Docker 部署的 MinIO 環境變數,連接信息由環境變數提供,無需手動填寫。', + minioDockerNotDetected: '未檢測到 MinIO 環境變數(MINIO_ENDPOINT 等),請確認 Docker Compose 配置正確。', + minioRemoteHint: '連接到遠程 MinIO 服務,需要手動填寫連接信息。', + cosTitle: '騰訊雲 COS', + cosDesc: '騰訊雲對象存儲服務,適合公有雲部署,支持 CDN 加速。', + cosSecretIdPlaceholder: '騰訊雲 API 金鑰 SecretId', + cosSecretKeyPlaceholder: '騰訊雲 API 金鑰 SecretKey', + cosAppIdPlaceholder: '騰訊雲帳號 AppID', + tosTitle: '火山引擎 TOS', + tosDesc: '火山引擎對象存儲服務(TOS),適合公有雲部署。', + tosAccessKeyPlaceholder: '火山引擎 Access Key', + tosSecretKeyPlaceholder: '火山引擎 Secret Key', + s3Title: 'AWS S3', + s3Desc: 'AWS S3 及兼容的對象存儲服務,適合公有雲部署。', + s3AccessKeyPlaceholder: 'AWS Access Key', + s3SecretKeyPlaceholder: 'AWS Secret Key', + s3DefaultCredentialsHint: 'Access Key 與 Secret Key 同時留空時,將使用 AWS 默認憑證鏈(IAM Role、IRSA / Web Identity、環境變數或共享配置)。', + s3EndpointPlaceholder: '可選,留空使用 AWS 區域默認端點', + ks3Title: '金山雲 KS3', + ks3Desc: '金山雲對象存儲服務(KS3),適合公有雲部署。', + ks3AccessKeyPlaceholder: '金山雲 Access Key', + ks3SecretKeyPlaceholder: '金山雲 Secret Key', + ks3EndpointPlaceholder: 'e.g. ks3-cn-beijing.ksyuncs.com', + ks3RegionPlaceholder: 'e.g. BEIJING', + engineKs3: '金山雲 KS3', + obsTitle: '華爲雲 OBS', + obsDesc: '華爲雲對象存儲服務(OBS),適合公有雲部署。', + obsAccessKeyPlaceholder: '華爲雲 Access Key', + obsSecretKeyPlaceholder: '華爲雲 Secret Key', + obsEndpointPlaceholder: 'e.g. obs.cn-north-4.myhuaweicloud.com', + obsRegionPlaceholder: 'e.g. cn-north-4', + engineObs: '華爲雲 OBS', + ossTitle: '阿里雲 OSS', + ossDesc: '阿里雲對象存儲服務(OSS),適合公有雲部署。', + ossAccessKeyPlaceholder: '阿里雲 Access Key', + ossSecretKeyPlaceholder: '阿里雲 Secret Key', + console: '控制檯', + docs: '文檔', + testConnection: '測試連接', + loadFailed: '加載失敗', + saveSuccess: '保存成功', + saveFailed: '保存失敗', + unknownError: '未知錯誤', + requestFailed: '請求失敗' + }, + storageBackend: { + description: '管理文件與圖片使用的存儲實例;同一種類型可以配置多個實例。', + empty: '尚未配置存儲實例', + defaultTag: '默認', + add: '添加存儲實例', + editTitle: '編輯存儲實例', + createTitle: '添加存儲實例', + editSubtitle: '修改此存儲實例的連接配置。', + createSubtitle: '爲文件與圖片新增一個存儲實例。', + basicSection: '基本信息', + nameLabel: '名稱', + namePlaceholder: '例如:生產 COS、歸檔 COS', + providerLabel: '存儲類型', + modeLabel: '部署模式', + modeRemote: '遠程實例', + modeEnv: '環境變數', + connectionSection: '連接配置', + optionalPlaceholder: '可選', + advancedSection: '高級選項', + pathPrefixLabel: '路徑前綴', + useSslDesc: '使用 HTTPS 訪問 MinIO', + forcePathStyleDesc: '使用 Path Style', + useTempBucketDesc: '使用臨時桶', + tempBucketLabel: '臨時桶', + tempBucketPlaceholder: '可選,用於臨時文件', + tempRegionLabel: '臨時桶 Region', + tempRegionPlaceholder: '留空時使用主 Region', + testConnection: '測試連接', + localStorage: '本地存儲', + setDefault: '設爲默認', + edit: '編輯', + delete: '刪除', + testSuccess: '連接成功', + testFailed: '連接失敗', + nameRequired: '請輸入名稱', + saveSuccess: '保存成功', + saveFailed: '保存失敗', + defaultUpdated: '默認存儲已更新', + deleteTitle: '刪除存儲實例', + deleteConfirm: '確定刪除“{name}”嗎?', + deleted: '已刪除', + deleteFailed: '刪除失敗' + }, + parser: { + title: '解析引擎', + description: '文檔解析引擎狀態及配置。此處設置優先於服務端環境變數,留空則使用環境變數默認值。', + supportedFileTypes: '支持文件類型', + statusSection: '狀態信息', + configSection: '配置', + featuresLabel: '識別選項', + loading: '加載中...', + retry: '重試', + noEngineDetected: '未檢測到解析引擎,請確認 DocReader 服務正常運行。', + disconnected: '未連接', + connected: '已連接', + available: '可用', + unavailable: '不可用', + builtinDesc: 'DocReader 內置解析引擎(docx/pdf/xlsx 等複雜格式)', + currentAddr: '當前', + envVarHint: '修改請設置環境變數 DOCREADER_ADDR、DOCREADER_TRANSPORT(grpc/http),重啓服務生效。', + selfHostedEndpoint: '自建端點', + formulaRecognition: '公式識別', + tableRecognition: '表格識別', + parseMethodLabel: 'PDF 解析方式', + parseMethodAuto: '自動識別(推薦)', + parseMethodOCR: '強制 OCR', + parseMethodText: '僅提取文本', + parseMethodHint: '自動模式會爲掃描件啓用 OCR,電子版 PDF 直接提取文本。', + sealRecognition: '印章識別', + chartRecognition: '圖表識別', + language: '語言', + testConnection: '測試連接', + docs: '文檔', + loadFailed: '加載解析引擎列表失敗', + ensureDocreaderConnected: '請先確保 DocReader 服務已通過環境變數配置並已連接', + checkDoneStatusUpdated: '已使用當前填寫參數檢測,上方狀態已更新', + checkSuccess: '測試連接成功', + checkFailed: '檢測失敗', + saveSuccess: '保存成功', + saveFailed: '保存失敗', + mineruEndpointPlaceholder: '如 https://your-mineru.example.com', + defaultPipeline: '默認 pipeline', + languagePlaceholder: '如 ch、en、ja(默認 ch)', + mineruCloudApiKeyPlaceholder: 'MinerU 雲服務 API Key', + vlmLabel: 'vlm(視覺語言模型)', + mineruHtmlLabel: 'MinerU-HTML(HTML 解析)', + serverUrl: '伺服器地址', + vlmServerUrlPlaceholder: '如 http://your-vllm-server:8000', + vlmServerUrlHint: '當 Backend 選擇 vlm-http-client 或 hybrid-http-client 時需要填寫', + paddleocrVlEndpointPlaceholder: '如 http://your-paddleocr-vl:8080', + paddleocrVlEndpointHint: '填寫 PaddleOCR-VL 完整服務(pipeline)地址,無需 /layout-parsing 後綴', + paddleocrVlCloudTokenPlaceholder: 'PaddleOCR-VL 飛槳星河社區 Token' + }, + weknoraCloud: { + title: 'WeKnora Cloud', + description: '配置 WeKnora Cloud 的 APPID 和 APPSECRET 憑證。憑證用於模型服務和文檔解析引擎。', + viewDocs: '查看文檔', + unconfigured: '尚未配置憑證,請填寫 APPID 和 APPSECRET', + configured: '憑證已配置,狀態正常', + expired: 'WeKnora Cloud 憑證已失效', + expiredDefault: '服務重啓後加密金鑰已變更,已保存的憑證無法解密。請重新填寫憑證。', + reconfigure: '重新配置', + appIdLabel: 'APPID', + appIdDesc: 'WeKnora Cloud 的應用 ID', + appIdPlaceholder: '請輸入 APPID', + appSecretLabel: 'APPSECRET', + appSecretDesc: 'WeKnora Cloud 的應用金鑰', + appSecretPlaceholder: '請輸入 APPSECRET', + saveHint: '保存後將驗證服務可達性並加密存儲憑證', + saveBtn: '保存憑證', + usageTitle: '使用說明', + usageSteps: '1. 填寫並保存 APPID / APPSECRET\n2. 在下方「雲模型接入」中按行添加 chat、embedding、rerank、vlm\n3. 文檔解析:知識庫設置 → 解析引擎,選擇 WeKnora Cloud 引擎', + fillRequired: '請填寫 APPID 和 APPSECRET', + saveSuccess: '憑證保存成功', + saveFailed: '憑證保存失敗', + credentialConfigured: 'WeKnoraCloud 憑證已配置', + credentialExpired: '憑證已失效,請重新配置。', + credentialUnconfigured: '尚未配置 WeKnoraCloud 憑證,請先填寫 APPID 和 APPSECRET。', + checkingStatus: '正在檢查憑證狀態...', + goToSettings: '前往設置中配置', + modelHintConfigured: 'WeKnoraCloud 憑證已配置。支持的模型可參考', + modelHintDocsLink: '接口文檔', + addModelsSuccess: '已成功添加 {count} 個模型', + addModelsPartial: '已添加 {success} 個,{failed} 個失敗', + addModelsFailed: '添加模型失敗', + addModelsEmbeddingFailed: 'Embedding 模型連接測試失敗,無法獲取向量維度', + addModelsDisplayName: { + chat: 'WeKnoraCloud 對話', + embedding: 'WeKnoraCloud Embedding', + rerank: 'WeKnoraCloud ReRank', + vllm: 'WeKnoraCloud 視覺' + }, + modelsSection: { + title: '雲模型接入', + descReady: '將 WeKnora Cloud 提供的四類標準模型註冊到當前空間,用於對話、向量檢索、重排序與多模態理解。', + descPending: '請先保存上方憑證,再在此添加雲模型。', + statusAdded: '已添加', + statusPending: '待配置憑證', + addOne: '添加', + addAllBtn: '添加全部缺失({count})', + addAllConfirm: '確認添加', + confirmAddOne: '添加 {type} 模型「{name}」?', + confirmAddAll: '一次性添加 {count} 個缺失的雲模型?', + allReady: '四類雲模型均已就緒' + } + }, + roleDenied: { + title: '權限不足', + desc: '你當前的角色無權訪問此設置項。請聯繫本空間的管理員獲取所需角色。' + }, + capabilityUnavailable: '當前部署不支持此功能,已返回可用頁面。', + navGroups: { + account: '帳號', + workspace: '空間', + modelsRuntime: '模型', + dataExtensions: '資料與擴展', + systemAdministration: '系統管理', + platform: '平台' + } + }, + agent: { + taskLabel: '任務:', + think: '思考', + copy: '複製', + addToKnowledgeBase: '添加到知識庫', + artifactDrawer: { + buttonTitle: '下載本次生成的文件', + title: '生成的文件', + empty: '本次未生成可下載的文件', + download: '下載', + downloadFailed: '下載失敗,請稍後重試', + }, + updatePlan: '更新計劃', + webSearchFound: '找到 {count} 個網絡搜尋結果', + toolFallback: '工具', + stepsCompleted: '已完成 {steps} 個步驟', + reasoningRounds: '思考 {rounds} 輪', + toolCalls: '調用 {tools} 次工具', + durationSuffix: '耗時 {duration}', + stepSummarySeparator: ' · ', + title: '智能體', + subtitle: '配置和管理您的智能體,自定義對話行爲和能力', + createAgent: '建立智能體', + builtin: '內置', + disabled: '已停用', + disable: '停用', + enable: '啓用', + noDescription: '暫無描述', + selectAgent: '選擇智能體', + noAgents: '暫無智能體', + manageAgents: '管理', + builtinAgents: '內置智能體', + customAgents: '自定義智能體', + selector: { + title: '選擇智能體', + current: '當前', + goToSettings: '設置', + sharedLabel: '共享', + notReadyHint: '尚未就緒,還需配置:{items}', + notReadyStatus: '待配置', + configureAction: '去配置', + sharedNotReadyContact: '請聯繫分享方管理員完成配置', + capabilitiesSection: '能力', + webSearchCapability: '網絡搜尋', + imageUploadCapability: '圖片上傳', + capabilityEnabled: '開啓', + capabilityDisabled: '關閉', + capabilitySupported: '支持', + capabilityUnsupported: '不支持', + capabilityUnconfigured: '未配置' + }, + editor: { + createTitle: '建立智能體', + editTitle: '編輯智能體', + buttons: { + create: '建立智能體', + saveAndClose: '保存並關閉', + }, + postCreateHint: { + title: '建立成功', + footer: '可繼續調整配置,設置共享與發佈渠道,完成後點擊「保存並關閉」。', + integrationDesc: '前往集成中心配置 IM、網頁嵌入等發佈渠道', + }, + basicInfo: '基本信息', + basicInfoDesc: '配置智能體的名稱、描述與運行模式', + promptsConfig: '提示詞', + promptsConfigDesc: '配置系統提示詞、上下文模板、意圖/改寫/兜底提示詞', + modelConfig: '模型配置', + modelConfigDesc: '配置對話模型、ReRank 等輔助模型及生成參數', + toolsConfig: '工具配置', + toolsConfigDesc: '配置 Agent 可以使用的工具', + knowledgeConfig: '知識庫', + knowledgeConfigDesc: '配置智能體可訪問的知識庫範圍與 FAQ 策略', + webSearchConfig: '網絡搜尋', + webSearchConfigDesc: '配置智能體的網絡搜尋能力', + agentId: '智能體 ID', + agentIdDesc: 'API 集成時可使用此 ID 指定智能體', + name: '名稱', + namePlaceholder: '請輸入智能體名稱', + nameRequired: '請輸入智能體名稱', + systemPromptRequired: '請輸入系統提示詞', + modelRequired: '請選擇模型', + queryMissingInRewrite: '改寫用戶提示詞必須包含 {\'{{\'}query{\'}}\'} 佔位符', + queryMissingInFallback: '兜底提示詞必須包含 {\'{{\'}query{\'}}\'} 佔位符', + description: '描述', + descriptionPlaceholder: '請輸入智能體描述', + normalDesc: '快速響應,直接回答問題', + agentDesc: '多步思考,深度分析複雜問題', + model: '模型', + modelPlaceholder: '請選擇模型', + systemPrompt: '系統提示詞', + systemPromptPlaceholder: '自定義系統提示詞,定義智能體的行爲和角色(使用 {\'{{\'}web_search_status{\'}}\'} 佔位符動態控制網絡搜尋行爲)', + contextTemplateRequired: '請輸入上下文模板', + temperature: '溫度', + thinking: '思考模式', + citationEnabled: '輸出來源引用', + citationEnabledDesc: '在最終回答中展示知識庫和網頁來源;關閉後仍會正常檢索和使用證據', + mode: '運行模式', + webSearch: '網絡搜尋', + webSearchProvider: '搜尋引擎', + webSearchProviderPlaceholder: '使用默認搜尋引擎', + webSearchMaxResults: '最大搜尋結果數', + webFetchEnabled: '自動抓取頁面內容', + webFetchTopN: '抓取頁面數', + knowledgeBases: '關聯知識庫', + allKnowledgeBases: '全部知識庫', + selectedKnowledgeBases: '指定知識庫', + noKnowledgeBase: '不使用知識庫', + selectKnowledgeBases: '選擇知識庫', + selectKnowledgeBasesDesc: '選擇要關聯的知識庫(包括協作知識庫)', + myKnowledgeBases: '我的知識庫', + sharedKnowledgeBases: '協作知識庫', + retrieveKBOnlyWhenMentioned: '僅在 {\'@\'} 提及時檢索', + retrieveKBOnlyWhenMentionedDesc: '關閉:自動檢索已配置的知識庫,開啓:僅當用戶 {\'@\'} 提及時才檢索', + rerankModel: 'ReRank 模型', + rerankModelDesc: '用於對知識庫檢索結果進行重排序,提高回答準確性', + rerankModelPlaceholder: '請選擇 ReRank 模型', + rerankModelOptionalHint: '當前作用域內暫無 RAG 類型知識庫,可不填;後續若加入 RAG 知識庫,將自動使用空間默認重排模型,仍建議顯式配置。', + maxIterations: '最大迭代次數', + allowedTools: '允許的工具', + multiTurn: '多輪對話', + historyTurns: '保留輪數', + memoryEnabled: '長期記憶', + retrievalStrategy: '檢索策略', + embeddingTopK: '向量召回數量', + keywordThreshold: '關鍵詞閾值', + vectorThreshold: '向量閾值', + rerankTopK: '重排數量', + rerankThreshold: '重排閾值', + conversationSettings: '多輪對話', + contextTemplate: '上下文模板', + contextTemplatePlaceholder: '自定義上下文模板...', + enableQueryExpansion: '查詢擴展', + enableRewrite: '問題改寫', + queryUnderstandModel: '問題理解模型', + queryUnderstandModelPlaceholder: '留空則複用主對話模型', + rewritePromptSystem: '改寫系統提示詞', + rewritePromptSystemPlaceholder: '留空使用系統默認提示詞', + rewritePromptUser: '改寫用戶提示詞', + rewritePromptUserPlaceholder: '留空使用系統默認提示詞', + maxCompletionTokens: '最大生成Token數', + fallbackStrategy: '兜底策略', + fallbackResponse: '固定回覆內容', + fallbackResponsePlaceholder: '抱歉,我無法回答這個問題。', + fallbackPrompt: '兜底提示詞', + fallbackPromptPlaceholder: '留空使用系統默認提示詞', + skillsConfig: '技能 Skills', + skillsConfigDesc: '配置 Agent 可以使用的預裝 Skills,提供專業領域知識和工作流程', + skillsSelection: 'Skills 選擇', + skillsSelectionDesc: '選擇 Agent 可以使用的 Skills 範圍', + skillsAll: '全部', + skillsSelected: '指定', + skillsNone: '禁用', + selectSkills: '選擇 Skills', + selectSkillsDesc: '選擇要啓用的 Skills', + noSkillsAvailable: '暫無預裝 Skills', + sandboxConfig: '沙箱後端', + sandboxConfigDesc: '選擇該智能體的技能腳本在哪個沙箱後端中執行。', + sandboxBackend: '沙箱後端', + sandboxBackendDefault: '不啓用沙箱', + sandboxBackendHint: '僅在啓用技能執行時生效。所選配置被刪除後,該智能體的技能執行會失敗。', + sandboxBackendMissing: '配置已刪除', + sandboxNoConfigs: '當前空間還沒有沙箱後端配置,技能腳本不會執行。可在「設置 - 沙箱後端」中添加。', + sandboxInfoTitle: '爲什麼要選後端?', + sandboxInfoContent: '不同後端對應不同的帳號、區域與配額。同一會話的沙箱一旦建立,後續的附件、產物與銷燬都會鎖定在建立時那份配置上,改這裡隻影響之後新建的沙箱。', + skillsInfoTitle: '什麼是 Skills?', + skillsInfoContent: 'Skills 是預裝的專業知識模塊,可以爲 Agent 提供特定領域的指令、工作流程和工具支持。啓用 Skills 後,Agent 會在需要時自動加載相關知識。' + }, + messages: { + created: '智能體建立成功', + updated: '智能體更新成功', + deleted: '智能體已刪除', + deleteFailed: '刪除失敗', + saveFailed: '保存失敗', + copied: '智能體複製成功', + copyFailed: '複製失敗', + disabled: '已停用', + enabled: '已啓用' + }, + delete: { + confirmTitle: '刪除智能體', + confirmMessage: '確定要刪除智能體「{name}」嗎?此操作不可還原。', + confirmButton: '確認刪除' + }, + shareScope: { + title: '共享範圍說明', + desc: '空間成員以只讀方式使用該智能體,將遵循您當前配置的能力與資源;您對智能體的修改會同步給已共享的空間。如需允許空間成員編輯知識庫內容,請將知識庫共享到空間。', + knowledgeBase: '知識庫', + chatModel: '對話模型', + rerankModel: '重排模型', + webSearch: '網絡搜尋', + mcp: 'MCP 服務', + kbAll: '全部知識庫', + kbSelected: '指定 {count} 個知識庫', + kbNone: '不使用', + modelConfigured: '已配置', + modelNotSet: '未配置', + enabled: '開啓', + disabled: '關閉', + mcpAll: '全部服務', + mcpSelected: '指定 {count} 個服務', + mcpNone: '不使用' + }, + detail: { + title: '智能體詳情', + useInChat: '在對話中使用' + }, + empty: { + title: '暫無自定義智能體', + description: '點擊右上角按鈕建立您的第一個智能體', + sharedTitle: '暫無共享智能體', + sharedDescription: '您可以加入空間或請求他人將智能體共享給您', + favoritesTitle: '暫無收藏', + favoritesDescription: '在智能體卡片右上角點擊星標即可收藏', + recentsTitle: '暫無最近訪問', + recentsDescription: '最近使用過的智能體會出現在這裡' + }, + sections: { + builtin: '內置', + mine: '我建立的', + tenantOthers: '本空間 · 其他成員', + tenantReadonly: '本空間 · 僅查看', + sharedByMe: '我共享的', + sharedEditable: '共享給我 · 可編輯', + sharedReadonly: '共享給我 · 僅查看' + }, + tabs: { + sharedToMe: '共享給我' + }, + features: { + webSearch: '支持網絡搜尋', + knowledgeBase: '關聯知識庫', + mcp: '支持MCP服務', + multiTurn: '多輪對話' + }, + mode: { + normal: '快速問答', + agent: '智能推理' + }, + type: { + normal: '快速問答', + agent: '智能推理' + }, + capabilities: { + kbCount: '指定 {count} 個知識庫', + kbAll: '可訪問全部知識庫', + mcpEnabled: '啓用 MCP 服務', + multiTurn: '多輪對話' + } + }, + knowledgeStages: { + title: '處理流水線', + root: '知識處理', + attempt: '第 {n} 次嘗試', + retry: '重新解析', + refresh: '立即刷新', + copy: '複製', + copyDetails: '複製詳情', + copied: '已複製到剪貼板', + close: '關閉', + live: 'LIVE', + liveTooltip: '解析進行中,每 2 秒自動刷新一次', + autoRefreshOn: '自動刷新中', + fetchFailedShort: '刷新失敗', + viewTrace: '查看 Trace', + expandBranch: '展開子項', + collapseBranch: '收起子項', + rowSelectHint: '點擊查看詳情;左側箭頭展開或收起子項', + resizeDrawer: '拖拽調整面板寬度', + justNow: '剛剛', + secondsAgo: '{n} 秒前', + minutesAgo: '{n} 分鐘前', + noActivity: '暫無解析記錄', + totalDuration: '總耗時:{d}', + total: '總耗時 {d}', + errorCode: { + UNKNOWN_SUGGESTION: '請查看應用日誌獲取詳細信息。' + }, + status: { + pending: '等待中', + running: '進行中', + finalizing: '優化中', + done: '已完成', + failed: '失敗', + skipped: '已跳過', + cancelled: '已取消' + }, + stage: { + docreader: '文檔解析', + chunking: '分塊', + embedding: '向量化', + multimodal: '多模態識別', + postprocess: '後處理' + }, + detail: { + started: '開始', + finished: '結束', + duration: '耗時', + offset: '起點偏移', + timing: '時序', + identity: '身份信息', + stageBreakdown: '階段分解', + stageOrder: '階段順序', + childCount: '子 span 數', + kind: '類型', + status: '狀態', + name: '名稱', + input: '輸入', + output: '輸出', + metadata: '元資料', + traceMetadata: 'Trace 級元資料', + metadataHint: '記錄與 Langfuse 等可觀測性系統關聯的輔助字段(如 trace ID)。各階段的業務入參/出參在「輸入」「輸出」標籤中查看。', + metadataEmpty: '當前 span 沒有元資料。階段與子任務的入參/出參請查看「輸入」「輸出」;若已接入 Langfuse,trace 級字段會顯示在「概覽」。', + error: '錯誤', + empty: '暫無資料', + inProgress: '進行中', + elapsed: '已用', + placeholderHint: '此階段未記錄詳細 span,僅展示推斷狀態。', + showJson: '展開 JSON', + hideJson: '收起 JSON', + includingChildren: '含子任務' + }, + tab: { + overview: '概覽', + raw: '原始 JSON' + }, + head: { + stagesDone: '主流程階段', + stagesProgress: '當前階段', + postprocessTasks: '後臺任務:運行中 {running} / 失敗 {failed} / 已完成 {completed}', + completedWithActiveTrace: '處理已完成,但仍有 {n} 個 Trace 任務處於活動狀態', + attempt: '嘗試', + updated: '更新於' + }, + processConfig: { + title: '本次解析配置', + kbDefault: '使用知識庫默認配置', + graph: '知識圖譜' + } + }, + uploadConfirm: { + title: '上傳文檔確認', + parseConfig: '解析配置', + configNav: '解析配置導航', + navParserDefault: '默認', + navParserCustomized: '已自定義', + moreOptions: '更多處理選項', + summaryParentChildShort: '父子分塊', + summaryParserForceScanned: '掃描件解析', + summaryQuestionCountValue: '{count} 個', + summaryGraphTagsValue: '{count} 個', + navChunkingSummary: '分塊 {size}', + statusOn: '已開啓', + statusOff: '未開啓', + notSet: '未設置', + summaryNoTags: '未設置', + summaryTagsCount: '{count} 個標籤', + confirm: '確認上傳並解析', + cancel: '取消', + tabTags: '文檔標籤', + tagsDescription: '爲本批次導入的所有文檔選擇標籤,可多選', + tagsPlaceholder: '請選擇標籤(可多選)', + tagsEmpty: '當前知識庫暫無標籤,可上傳後在標籤管理中建立', + tagsLoadFailed: '標籤加載失敗,可稍後在文檔列表中設置', + noItems: '請至少添加一個文件或 URL', + urlItemLabel: 'URL', + urlAdded: '已添加 URL', + urlDuplicate: '該 URL 已在列表中', + statusNeedsSetup: '待配置', + multimodalSetupHint: '含圖片內容,請啓用多模態並選擇模型', + asrSetupHint: '含音頻內容,請啓用語音識別並選擇模型', + vlmModelRequired: '請配置多模態模型', + asrModelRequired: '請配置語音識別模型', + vlmModelSelectRequired: '已啓用多模態,請選擇 VLM 模型', + asrModelSelectRequired: '已啓用語音識別,請選擇 ASR 模型', + continueAdd: '繼續添加', + destinationLabel: '上傳位置', + destinationChange: '更改上傳位置', + destinationToRoot: '改到根目錄', + folderUploadTitle: '文件夾「{name}」', + folderUploadHint: '共 {count} 個文件,將保留本地目錄結構', + filesAdded: '已添加 {count} 個文件', + filesAllDuplicate: '所選文件已在列表中', + titleManual: '在線編輯發佈確認', + confirmManual: '確認發佈並解析', + titleReparse: '重新解析確認', + confirmReparse: '確認並重新解析', + reparseSource: '待重新解析文檔', + reparseHint: '將沿用上次解析的配置,可在此調整', + manualCharCount: '{count} 個字符', + pdfForceScanned: { + label: '按掃描件解析 PDF', + description: '適用於網頁打印、掃描件、圖片型 PDF。開啓後會逐頁 OCR,解析更完整但耗時和模型調用更多。' + } + }, + knowledgeBase: { + title: '知識庫', + fileContent: '文件內容', + name: '名稱', + description: '描述', + settings: '設置', + tagUpdateSuccess: '標籤更新成功', + tagEditDialogHeading: '編輯標籤', + tagEditSearch: '搜尋標籤...', + tagEditSelectedSection: '已選標籤', + tagEditAvailableSection: '可選標籤', + tagEditNoSelected: '暫未選擇', + folderTree: { + title: '目錄', + rootRow: '根目錄', + rootRowTip: '知識庫根目錄,未歸入子文件夾的文檔在此', + folderCardCount: '{count} 個文檔', + searchingSubtree: '(含子目錄)', + emptyFolder: '這個文件夾裡還沒有文檔', + emptySearch: '沒有匹配的文檔', + collapse: '收起目錄', + expand: '展開目錄', + collapseFolder: '收起該文件夾', + expandFolder: '展開該文件夾', + rename: '重命名', + renamePlaceholder: '輸入文件夾名稱', + renameSuccess: '文件夾已重命名', + renameFailed: '文件夾重命名失敗', + renameInvalid: '不能把文件夾移動到它自己的子目錄下', + }, + moveToFolder: { + action: '移動到目錄', + newFolder: '新建子目錄', + newFolderPlaceholder: '輸入新目錄名稱', + newFolderCreate: '建立', + newFolderAddRoot: '在根目錄下新建子目錄', + newFolderAddUnder: '在「{folder}」下新建子目錄', + newFolderHint: '回車建立並移動', + newFolderHintRoot: '將在根目錄下建立', + newFolderHintUnder: '將在「{folder}」下建立', + success: '已移動 {count} 個文檔', + failed: '移動失敗', + duplicate: '該目錄已存在', + }, + tagFilterTitle: '按標籤篩選', + tagFilterPlaceholder: '標籤', + tagFilterMulti: '{count} 個標籤', + tagManageTitle: '管理標籤', + tagManageDescription: '新建、重命名或刪除知識庫標籤', + tagManageLink: '管理標籤…', + tagManageListSection: '標籤列表', + tagManageDocCount: '{count} 個文檔', + tagManageFaqCount: '{count} 個 FAQ', + tagSelectedCount: '已選 {count} 個標籤', + tagNewPlaceholder: '輸入新標籤名稱,回車添加', + untagged: '無標籤', + tagClearAction: '清空已選', + tagCreateAction: '新建標籤', + tagSearchPlaceholder: '輸入標籤名稱關鍵字', + tagNamePlaceholder: '請輸入標籤名稱', + tagNameRequired: '請先輸入標籤名稱', + tagCreateSuccess: '標籤建立成功', + tagEditSuccess: '標籤更新成功', + tagDeleteDescDoc: '確定刪除標籤"{name}"?該標籤下的所有文檔將被一併刪除', + tagDeleteSuccess: '標籤已刪除', + tagEditAction: '重命名', + tagDeleteAction: '刪除', + tagEmptyResult: '未找到匹配的標籤', + tagLabel: '標籤', + tagPlaceholder: '請選擇標籤', + noTags: '暫無標籤', + uploadSuccess: '文件上傳成功!', + uploadFailed: '文件上傳失敗!', + fileExists: '文件已存在', + uploadAllSuccess: '成功上傳 {count} 個文件!', + uploadPartialSuccess: '上傳完成:成功 {success} 個,失敗 {fail} 個', + uploadAllFailed: '所有文件上傳失敗', + uploadingFolder: '正在上傳文件夾中的 {total} 個文件...', + videosFilteredNoVLM: '已跳過 {count} 個視頻文件(暫不支持視頻上傳)', + unsupportedTypesHint: '部分文檔類型({types})暫無可用解析引擎,上傳後將無法解析', + goToParserSettings: '前往配置', + importURL: '導入網頁', + addDocument: '添加文檔', + importURLTitle: '導入網頁', + urlRequired: '請輸入URL', + invalidURL: '請輸入有效的URL', + urlImportSuccess: 'URL導入成功!', + urlImportFailed: 'URL導入失敗!', + urlExists: '該URL已存在', + urlLabel: 'URL地址', + urlPlaceholder: '請輸入網頁URL,例如:https://example.com', + urlTip: '支持導入各類網頁內容,系統會自動提取和解析網頁中的文本內容', + typeURL: '網頁', + typeManual: '手動建立', + typeFile: '文件', + channelLabel: '來源渠道', + channelWeb: '網頁端', + channelApi: 'API', + channelBrowserExtension: '瀏覽器插件', + channelWechat: '微信', + channelWecom: '企業微信', + channelFeishu: '飛書', + channelFeishuDrive: "飛書雲盤", + channelLarkDrive: "Lark 雲盤", + channelDingtalk: '釘釘', + channelSlack: 'Slack', + channelIm: 'IM 渠道', + channelNotion: 'Notion', + channelYuque: '語雀', + channelGitLab: 'GitLab', + channelIma: '騰訊 IMA', + channelUpload: '上傳', + channelManual: '手動', + channelUrl: '網頁', + channelUnknown: '未知', + urlSource: '來源網址', + webContent: '網頁內容', + documentContent: '文檔內容', + importTime: '導入時間', + createTime: '建立時間', + createdAt: '建立', + updatedAt: '更新', + clickToViewFull: '點擊卡片查看全文與分段', + characters: '字符', + segment: '片段', + chunkCount: '共 {count} 個片段', + viewChunks: '查看分塊', + viewMerged: '全文', + generatedQuestions: '輔助召回問題', + viewParentContext: '查看父塊上下文', + parentContextLoadFailed: '加載父上下文失敗', + confirmDeleteQuestion: '確定要刪除這個問題嗎?刪除後將同時移除對應的向量索引。', + legacyQuestionCannotDelete: '舊格式問題無法刪除,請重新生成問題', + customMetadata: '自定義元資料', + metadataCapabilityHint: '用於文檔總結,並在文檔被召回後作爲文檔級上下文輔助回答;不會參與索引或影響召回排序', + noCustomMetadata: '暫無自定義元資料', + addMetadataField: '添加元資料字段', + metadataKeyPlaceholder: '字段名', + metadataValuePlaceholder: '字段值', + metadataTypeText: '文本', + metadataTypeNumber: '數字', + metadataTypeBoolean: '布爾值', + metadataTypeNull: '空值', + metadataKeyRequired: '元資料字段名不能爲空', + metadataKeyDuplicate: '元資料字段 {key} 重複', + metadataNumberRequired: '元資料字段 {key} 必須是有效數字', + regenerateSummary: '重新生成摘要', + generateSummary: '生成摘要', + noDocumentSummary: '暫無文檔摘要', + summaryRefreshed: '摘要已更新', + summaryRefreshQueued: '摘要刷新已提交,完成後會自動更新', + indexFailed: '索引同步失敗', + chunkSavedIndexFailed: '內容已保存,但索引同步失敗,請點擊重試索引', + chunkEditConflict: '分塊已被他人修改,列表已刷新,請重試', + retryIndex: '重試索引', + indexRetrySuccess: '索引已同步', + chunkHistory: '分塊編輯歷史', + currentVersion: '當前版本', + noChunkHistory: '暫無編輯歷史', + compareRevisionWithCurrent: 'v{revision} 與當前 v{current} 的內容差異', + diffAddedInCurrent: '當前版本新增', + diffRemovedFromCurrent: '當前版本刪除', + noContentChanges: '內容沒有變化,該版本僅包含狀態變更', + revertRevision: '回滾版本', + revertRevisionConfirm: '確定回滾到 v{revision} 嗎?回滾後會生成一個新版本。', + chunkReverted: '分塊已回滾', + chunkContentRequired: '分塊內容不能爲空', + disableChunk: '停用', + enableChunk: '啓用', + enabledStatus: '已啓用', + disabledStatus: '已停用', + editChunkContent: '編輯分塊內容', + addGeneratedQuestion: '添加輔助召回問題', + regenerateQuestions: '重新生成問題', + questionsRegenerated: '輔助召回問題已更新', + staleGeneratedQuestions: '問題基於編輯前內容生成,可按需重新生成', + noGeneratedQuestions: '暫無輔助召回問題', + notInitialized: '該知識庫尚未完成初始化配置,請先前往設置頁面配置模型信息後再上傳文件', + missingStorageEngine: '該知識庫尚未選擇存儲引擎,請先前往設置頁面配置存儲引擎後再上傳內容。', + missingStorageEngineUpload: '請先配置存儲引擎後再上傳內容', + goToStorageSettings: '前往配置', + getInfoFailed: '獲取知識庫信息失敗,無法上傳文件', + missingId: '缺少知識庫ID', + deleteFailed: '刪除失敗,請稍後再試!', + uploadTime: '上傳時間', + newSession: '新會話', + editDocument: '編輯文檔', + rebuildDocument: '重建知識', + rebuildConfirm: '確認重建文檔"{fileName}"?該操作會清理現有分塊並重新解析。', + rebuildSubmitted: '重建任務已提交', + rebuildFailed: '重建失敗,請稍後再試', + rebuildInProgress: '當前文檔正在解析中,請稍後重試', + cancelParse: '停止解析', + cancelParseConfirmBody: '確認停止解析"{title}"?已寫入的分塊會保留,可稍後通過"重建"重新觸發;優化階段(摘要 / 問答 / 知識圖譜)的待執行任務會被立即丟棄。', + cancelParseSubmitted: '已停止解析', + cancelParseFailed: '停止失敗,請稍後再試', + draft: '草稿', + draftTip: '暫存內容,未參與檢索', + untitledDocument: '未命名文檔', + deleteDocument: '刪除文檔', + moveDocument: '移動到...', + moveToKnowledgeBase: '移動到知識庫', + moveNoTargets: '沒有兼容的目標知識庫(需要相同類型和 Embedding 模型)', + moveModeReuseVectors: '複用向量(快速)', + moveModeReuseVectorsDesc: '直接移動分塊和向量索引,適用於分片配置相同的情況', + moveModeReparse: '重新解析', + moveModeReparseDesc: '使用目標知識庫的分片配置重新解析文檔', + moveConfirm: '確認移動', + moveConfirmTitle: '確認移動設置', + moveStarted: '移動任務已提交', + moveFailed: '移動失敗', + moveCompleted: '移動完成', + moveCompletedWithErrors: '移動完成:{success} 成功,{failed} 失敗', + parsingFailed: '解析失敗', + parsingInProgress: '解析中...', + generatingSummary: '生成摘要中...', + documentSummary: '摘要', + detailSectionMeta: '基本信息', + confirmDeleteDocument: '確認刪除文檔"{fileName}",刪除後將無法還原', + confirmDelete: '確認刪除', + viewModeGrid: '卡片視圖', + viewModeList: '列表視圖', + viewModeToggle: '切換視圖', + columnName: '文件名', + columnTag: '標籤', + columnSize: '大小', + columnSource: '來源', + columnStatus: '狀態', + columnUpdatedAt: '更新時間', + columnActions: '操作', + selectAll: '全選', + selectedCount: '已選 {count} 項', + clearSelection: '取消選擇', + batchDelete: '批量刪除', + confirmBatchDeleteDocument: '確認刪除選中的 {count} 個文檔?刪除後將無法還原。', + batchDeleteSuccess: '成功刪除 {count} 個文檔', + batchDeleteFailed: '批量刪除失敗', + batchTag: '批量打標籤', + batchTagDialogHeading: '批量打標籤', + batchTagSubtitle: '爲選中的 {count} 個文檔統一設置標籤(將替換文檔原有標籤)', + batchTagSelectedSection: '已選標籤', + batchTagAvailableSection: '可選標籤', + batchTagNoSelected: '暫未選擇', + batchTagSuccess: '已爲 {count} 個文檔成功設置標籤', + batchTagFailed: '批量打標籤失敗', + confirmBatchReparseDocument: '確認重建選中的 {count} 個文檔?現有內容將被清除並重新解析。', + confirmBatchReparse: '確認並重新解析', + batchReparseSuccess: '已提交 {count} 個重建任務', + batchReparseFailed: '批量重建失敗', + batchReparseSkippedInFlight: '已跳過 {count} 個正在解析中的文檔', + statusCompleted: '已完成', + statusProcessing: '解析中', + statusFinalizing: '優化中', + statusFailed: '失敗', + statusCancelled: '已取消', + statusDraft: '草稿', + noDescription: '無描述', + emptyKnowledgeDragDrop: '知識爲空,拖放上傳', + pdfDocFormat: 'pdf、doc 格式文件,不超過10M', + textMarkdownFormat: 'text、markdown格式文件,不超過200K', + dragFileNotText: '請拖拽文件而不是文本或鏈接', + searchPlaceholder: '搜尋知識庫...', + docSearchPlaceholder: '搜尋文檔名稱...', + fileTypeFilter: '文件類型', + allFileTypes: '全部類型', + allTags: '全部標籤', + parseStatusFilter: '解析狀態', + allParseStatuses: '全部狀態', + parseStatusPending: '等待中', + parseStatusProcessing: '處理中', + parseStatusCompleted: '已完成', + parseStatusFinalizing: '整理優化中', + parseStatusFailed: '失敗', + parseStatusCancelled: '已取消', + parseStatusDraft: '草稿', + sourceFilter: '來源', + allSources: '全部來源', + sourceApi: 'API', + sourceBrowserExtension: '瀏覽器擴展', + sourceUpload: '本地上傳', + sourceUrl: 'URL 導入', + sourceManual: '手動建立', + updatedTimeFrom: '起始時間', + updatedTimeTo: '結束時間', + noMatch: '未找到匹配的知識庫', + noKnowledge: '暫無可用知識庫', + loadingFailed: '加載知識庫失敗', + operationNotSupportedForType: '當前知識庫類型不支持該操作', + allFilesSkippedNoEngine: '所選文件類型暫無可用解析引擎,已全部跳過', + filesSkippedNoEngine: '{count} 個文件因無可用解析引擎被跳過', + allUploadSuccess: '所有文件上傳成功({count}個)', + partialUploadSuccess: '部分文件上傳成功(成功:{success},失敗:{fail})', + allUploadFailed: '所有文件上傳失敗({count}個)', + deleteSuccess: '知識刪除成功!', + chunkLoadFailed: '分塊加載失敗', + infoCard: { + tooltip: '查看知識庫信息', + title: '知識庫信息', + basic: '基礎', + access: '訪問', + binding: '存儲綁定', + capabilities: '能力', + stats: '統計', + type: '類型', + createdAt: '建立時間', + source: '來源', + sharedTo: '共享範圍', + enabled: '已啓用', + vectorStore: '向量存儲', + fileStorage: '文件存儲', + documentCount: '文檔數', + faqCount: '問答數', + supportedFileTypes: '可上傳格式', + chunking: '分塊', + parentShort: '父', + childShort: '子' + }, + accessInfo: { + myRole: '我的身份', + roleOwner: '建立者', + permissionOwner: '可編輯、管理設置、刪除知識庫', + permissionAdmin: '可編輯、管理共享設置', + permissionEditor: '可編輯文檔與標籤', + permissionViewer: '僅查看與檢索', + fromOrg: '來自空間', + sharedAt: '共享於', + lastUpdated: '最後更新' + } + }, + resourceOrigin: { + mine: '我建立', + mineTooltip: '由當前用戶建立', + tenant: '本空間', + tenantTooltip: '本空間其他成員建立', + tenantTooltipWithCreator: '由 {creator} 建立', + space: '共享空間', + spaceTooltip: '來自共享空間「{space}」', + spaceTooltipWithTenant: '來自共享空間「{space}」· 源空間 {tenant}', + shared: '外部共享', + sharedTooltip: '通過共享空間從其他空間訪問' + }, + listSpaceSidebar: { + all: '全部', + workspace: '本空間', + spaces: '共享給我', + favorites: '收藏', + recents: '最近' + }, + batchManage: { + selectAll: '全選', + cancel: '取消', + delete: '刪除對話', + deleteConfirmTitle: '刪除對話', + deleteConfirmBody: '確定要刪除選中的 {count} 條對話嗎?刪除後無法還原。', + deleteAllConfirmBody: '確定要刪除所有對話嗎?此操作無法還原。', + deleteSuccess: '刪除成功', + deleteFailed: '刪除失敗,請稍後再試' + }, + contextualGuide: { + stepOf: '{current} / {total}', + skip: '跳過', + prev: '上一步', + next: '下一步', + done: '知道了', + interactHint: '請直接點擊高亮區域繼續', + chat: { + steps: { + done: { + title: '開始探索吧', + desc: '試試提一個與已上傳文檔相關的問題,體驗帶引用的精準回答。' + }, + send: { + title: '發送開始對話', + desc: '發送後將建立新會話,AI 會結合知識庫內容作答,並標註引用片段。' + }, + input: { + title: '輸入你的問題', + desc: '直接描述你想了解的內容;也可點擊上方推薦問題快速開始。' + }, + kb: { + title: '選擇知識範圍', + desc: '點擊 {\'@\'} 可指定一個或多個知識庫/文件,僅基於選中內容回答;不選則按當前智能體配置檢索。' + } + } + }, + kbDetail: { + steps: { + done: { + title: '解析完成後即可使用', + desc: '文檔解析入庫後,可在對話中 {\'@\'} 本知識庫提問,回答會附帶引用來源。' + }, + upload: { + title: '添加文檔', + desc: '點擊此處上傳文件、文件夾,或導入網頁與在線編輯內容。' + }, + intro: { + title: '知識庫還是空的', + desc: '添加第一份資料後,才能基於它進行檢索與對話。支持拖拽上傳多種文檔格式。' + } + } + }, + agentCreate: { + steps: { + submit: { + title: '保存智能體', + desc: '確認配置後點擊高亮的「確定」完成建立,即可在對話中選擇該智能體。' + }, + navTools: { + title: '工具與 MCP(可選)', + desc: '智能推理模式下可勾選內置工具、MCP 服務等,擴展搜尋、計算等能力。' + }, + multimodal: { + title: '啓用附件上傳', + desc: '可分別配置圖片、音頻上傳及附件解析策略;啓用圖片上傳時需在下方選擇 VLM 模型。' + }, + navMultimodal: { + title: '附件上傳(可選)', + desc: '開啓後,對話中可上傳圖片、文檔、音頻等附件;圖片理解需先在系統設置中配置 VLLM 模型。' + }, + navWebsearch: { + title: '聯網搜尋(可選)', + desc: '配置是否允許智能體調用外部搜尋引擎補充實時信息。' + }, + knowledge: { + title: '知識庫範圍', + desc: '「全部」適合通用助手;「指定」可限定專業領域;「不關聯」則僅依賴模型自身能力或聯網搜尋。' + }, + navKnowledge: { + title: '關聯知識庫', + desc: '決定智能體可檢索哪些知識。默認「全部知識庫」,也可改爲指定庫或暫不關聯。' + }, + model: { + title: '選擇模型', + desc: '從下拉列表選擇已配置的對話模型;沒有合適模型時請先到系統設置添加。' + }, + navModel: { + title: '綁定對話模型', + desc: '每個智能體必須指定一個 KnowledgeQA 模型作爲推理引擎。' + }, + name: { + title: '命名與描述', + desc: '取一個易識別的名稱。智能推理模式下系統可能已預填默認名稱,可按需修改。' + }, + agentType: { + title: '選擇智能體類型', + desc: '預設類型會自動填充系統提示詞、推薦工具與知識庫範圍(如 Wiki 構建、資料分析等)。可按場景切換,名稱與描述會隨之更新。' + }, + mode: { + title: '選擇運行模式', + desc: '「普通模式」適合固定流程的快速問答;「智能推理」可調用工具、多步思考,適合複雜任務。' + } + } + }, + agentList: { + steps: { + create: { + title: '建立你的智能體', + desc: '智能體把模型、知識庫、工具與提示詞組合成可複用的對話助手。點擊下方高亮的「建立智能體」開始配置。' + } + } + }, + kbCreate: { + steps: { + submit: { + title: '建立知識庫', + desc: '確認類型、名稱與模型已選好後,點擊高亮的「建立」按鈕。建立成功後將引導你上傳第一份文檔。' + }, + faq: { + title: 'FAQ 索引方式', + desc: '配置問答對的索引模式。建立後可在本頁繼續添加 FAQ 條目。' + }, + multimodalVllm: { + title: '選擇 VLM 模型', + desc: '開啓多模態後需指定 VLM(視覺語言模型)。若列表爲空,請先在系統設置中添加 VLLM 類型模型。' + }, + multimodalToggle: { + title: '開啓多模態解析', + desc: '啓用後,上傳的圖片類文檔將使用視覺語言模型提取內容,便於檢索與問答。' + }, + navMultimodal: { + title: '多模態 / 圖片理解(可選)', + desc: '若文檔含大量圖表、掃描件或需理解圖片內容,可在此開啓多模態並選擇 VLM 模型。' + }, + storage: { + title: '存儲引擎(可選)', + desc: '原始文件存放位置(本地或對象存儲)。默認跟隨空間設置即可。' + }, + chunking: { + title: '分塊策略(可選)', + desc: '決定文檔如何切分爲檢索片段。默認分塊大小已針對 RAG 優化,一般無需修改。' + }, + parser: { + title: '解析引擎(可選)', + desc: '控制 PDF、Office 等文件的解析方式。默認配置適用於大多數場景,有 OCR 需求時可在此調整。' + }, + embedding: { + title: 'Embedding 模型', + desc: '將文本轉爲向量以支持語義檢索。與上方索引策略中的「向量/關鍵詞檢索」配合使用。' + }, + llm: { + title: '對話 / 摘要模型', + desc: '用於文檔摘要、問答生成等。若列表爲空,請通過下拉菜單前往系統設置添加模型。' + }, + navModels: { + title: '配置模型(必填)', + desc: '知識庫必須綁定對話模型;開啓檢索時還需 Embedding 模型。點擊左側「模型配置」進入。' + }, + indexing: { + title: '選擇索引能力', + desc: '默認已開啓向量與關鍵詞檢索,可按需開啓 Wiki 結構化索引或知識圖譜。至少保留一種檢索方式。' + }, + name: { + title: '填寫名稱', + desc: '取一個便於識別的名稱,例如「產品手冊」或「客服 FAQ」。描述可選填。' + }, + type: { + title: '選擇知識庫類型', + desc: '文檔庫適合上傳 PDF、Word 等文件;FAQ 庫適合問答對。建立後類型不可更改,請按需選擇。' + } + } + }, + tenantModels: { + needChatModelFirst: '請先添加對話模型(KnowledgeQA),再建立智能體。', + stepsAgent: { + done: { + title: '然後建立智能體', + desc: '保存並關閉設置後,點擊「建立智能體」,嚮導會帶你配置模式、知識庫與附件上傳等選項。' + }, + addModel: { + title: '添加對話模型', + desc: '點擊「添加模型」,選擇 KnowledgeQA 類型並填寫接入信息。' + }, + intro: { + title: '需要先配置對話模型', + desc: '建立智能體至少需要一種 KnowledgeQA(對話)模型。請先在系統設置中添加;Embedding 模型僅建立知識庫時需要。' + } + }, + steps: { + done: { + title: '添加完成後繼續', + desc: '模型保存後關閉設置頁,即可點擊「新建知識庫」;建立嚮導會引導你完成類型、索引與模型綁定。' + }, + addModel: { + title: '添加模型', + desc: '點擊「添加模型」,分別配置 KnowledgeQA(對話)與 Embedding 類型。Lite 用戶可使用 Ollama 拉取本地模型。' + }, + intro: { + title: '需要先配置模型', + desc: '建立文檔知識庫至少需要:一個對話模型(用於摘要與問答)和一個 Embedding 模型(用於向量檢索)。請先在系統設置中添加。' + } + } + }, + kbList: { + steps: { + create: { + title: '建立第一個知識庫', + desc: '知識庫用來存放文檔與 FAQ。點擊下方高亮的「新建知識庫」按鈕,我們會帶你完成表單填寫。' + } + } + } + }, + newUserGuide: { + stepOf: '{current} / {total}', + skip: '跳過引導', + prev: '上一步', + next: '下一步', + done: '完成', + reopen: '新手引導', + steps: { + done: { + title: '一切就緒', + desc: '你已經瞭解了核心功能,現在就開始構建你的知識助手吧!隨時可點擊菜單頂部暱稱旁的幫助按鈕重新查看引導。' + }, + models: { + title: '配置你的模型', + desc: '這是關鍵一步:在模型管理中添加對話、向量等模型,知識庫與對話功能才能正常工作。點擊「添加模型」即可開始配置。' + }, + settings: { + title: '帳號與設置入口', + desc: '點開這裡可以管理帳號、成員與系統設置。需要再次查看本引導時,可點擊菜單頂部暱稱旁的幫助按鈕重新打開。' + }, + agents: { + title: '打造專屬智能體', + desc: '把知識庫、提示詞與工具組合成可複用的智能體,沉澱你的專業能力。' + }, + chat: { + title: '發起智能對話', + desc: '基於知識庫內容向 AI 提問,獲得帶引用來源的精準回答。點擊這裡開始新對話。' + }, + knowledge: { + title: '建立你的知識庫', + desc: '知識庫是一切的起點:上傳文檔、網頁或 FAQ,WeKnora 會自動解析並建立索引。點擊這裡進入知識庫。' + }, + welcome: { + title: '歡迎使用 WeKnora', + desc: '只需幾步,帶你快速瞭解知識庫、對話與智能體的核心用法。點擊「下一步」開始。' + } + } + }, + chatHeader: { + moreActions: '更多對話操作', + copySessionId: '複製會話 ID', + copyLink: '複製對話鏈接', + copyMarkdown: '複製爲 Markdown', + openNewWindow: '在新窗口中打開', + deleteSession: '刪除對話', + renamePlaceholder: '輸入對話標題', + unpinSuccess: '已取消置頂', + sessionIdCopied: '會話 ID 已複製', + linkCopied: '對話鏈接已複製', + copyFailed: '複製失敗,請檢查瀏覽器剪貼板權限', + markdownCopied: '完整對話已複製爲 Markdown', + markdownCopyFailed: '複製 Markdown 失敗,請稍後重試', + clearConfirmTitle: '清空對話消息', + clearConfirmBody: '確認清空當前對話的全部消息?對話本身會保留,此操作無法還原。', + deleteConfirmTitle: '刪除對話', + deleteConfirmBody: '確認刪除當前對話?刪除後將無法還原。', + deleteSuccess: '對話已刪除', + markdown: { + sessionId: '會話 ID', + exportedAt: '導出時間', + user: '用戶', + assistant: '助手', + attachments: '附件', + references: '引用' + } + }, + menu: { + knowledgeBase: '知識庫', + agents: '智能體', + organizations: '共享空間', + newChat: '新對話', + settings: '系統設置', + logout: '退出登錄', + clearMessages: '清空消息', + clearMessagesSuccess: '消息已清空', + clearMessagesFailed: '清空消息失敗,請稍後再試', + renameSession: '修改標題', + renameSessionSuccess: '標題已更新', + renameSessionFailed: '修改標題失敗,請稍後再試', + batchManage: '批量管理', + newSession: '新會話', + pin: '置頂', + unpin: '取消置頂', + pinFailed: '置頂失敗,請稍後再試', + unpinFailed: '取消置頂失敗,請稍後再試', + search: '搜尋', + collapseSidebar: '收起側邊欄', + expandSidebar: '展開側邊欄', + logoutSuccess: '已退出登錄', + myChats: '我的對話', + apiChats: 'API 會話', + noSessions: '暫無對話' + } +} diff --git a/frontend/src/i18n/resolveDefaultLocale.ts b/frontend/src/i18n/resolveDefaultLocale.ts index 808495f57a..836330e115 100644 --- a/frontend/src/i18n/resolveDefaultLocale.ts +++ b/frontend/src/i18n/resolveDefaultLocale.ts @@ -1,4 +1,4 @@ -export const SUPPORTED_LOCALES = ['zh-CN', 'en-US', 'ru-RU', 'ko-KR'] as const +export const SUPPORTED_LOCALES = ['zh-CN', 'zh-TW', 'en-US', 'ru-RU', 'ko-KR'] as const export type SupportedLocale = (typeof SUPPORTED_LOCALES)[number] export const BUILT_IN_DEFAULT: SupportedLocale = 'zh-CN' diff --git a/frontend/src/views/auth/Login.vue b/frontend/src/views/auth/Login.vue index edd29b1e2a..c54c44a7f2 100755 --- a/frontend/src/views/auth/Login.vue +++ b/frontend/src/views/auth/Login.vue @@ -433,6 +433,7 @@ const inviteLookupLoading = ref(false) // Language options const languageOptions = [ { value: 'zh-CN', label: '简体中文', shortLabel: '中文', flag: '🇨🇳' }, + { value: 'zh-TW', label: '繁體中文', shortLabel: '繁中', flag: '🇹🇼' }, { value: 'en-US', label: 'English', shortLabel: 'EN', flag: '🇺🇸' }, { value: 'ru-RU', label: 'Русский', shortLabel: 'RU', flag: '🇷🇺' }, { value: 'ko-KR', label: '한국어', shortLabel: '한국어', flag: '🇰🇷' } diff --git a/frontend/src/views/settings/GeneralSettings.vue b/frontend/src/views/settings/GeneralSettings.vue index 74ad9e6ba3..7c24f189e7 100755 --- a/frontend/src/views/settings/GeneralSettings.vue +++ b/frontend/src/views/settings/GeneralSettings.vue @@ -20,6 +20,7 @@ style="width: 280px;" > {{ $t('language.zhCN') }} + 繁體中文 {{ $t('language.enUS') }} {{ $t('language.ruRU') }} {{ $t('language.koKR') }} From 540865db94ff03ac5f1fc088c942b6980c184178 Mon Sep 17 00:00:00 2001 From: leonoxo Date: Fri, 14 Aug 2026 15:11:54 +0800 Subject: [PATCH 2/7] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=E7=B9=81?= =?UTF-8?q?=E9=AB=94=E4=B8=AD=E6=96=87=E8=AA=9E=E7=B3=BB=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=AA=AA=E6=98=8E=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...56\346\224\271\350\252\252\346\230\216.md" | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 "zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" diff --git "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" new file mode 100644 index 0000000000..975dc7d026 --- /dev/null +++ "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" @@ -0,0 +1,172 @@ +# 台灣繁體中文(zh-TW)語系包修改說明 + +## 專案概述 +本文件記錄 WeKnora 前端專案新增台灣繁體中文語系包的所有修改內容,包含語系檔案建立、國際化框架註冊、UI 選單適配、用語校正與部署流程。 + +--- + +## 修改檔案清單 + +### 1. 語系核心檔案 +| 檔案路徑 | 修改內容 | +|---------|---------| +| `frontend/src/i18n/locales/zh-TW.ts` | **新增**。以 `zh-CN.ts` 為基準模板,建立台灣繁體中文語系包(共 6358 行) | + +### 2. 國際化框架註冊 +| 檔案路徑 | 修改內容 | +|---------|---------| +| `frontend/src/i18n/index.ts` | 新增 `zh_TW` 動態匯入邏輯與載入註冊 | +| `frontend/src/i18n/resolveDefaultLocale.ts` | 將 `zh-TW` 加入預設語系解析優先級(瀏覽器語言比對) | +| `frontend/src/i18n/localeKeyAudit.ts` | 將 `zh-TW` 納入語系金鑰審計清單,確保與 `zh-CN` key 數量一致 | +| `frontend/src/i18n/embed.ts` | 支援嵌入頁面自動偵測 `zh-TW` 語系偏好 | + +### 3. 全域 UI 適配 +| 檔案路徑 | 修改內容 | +|---------|---------| +| `frontend/src/App.vue` | 匯入 TDesign `zh_TW` 本地化配置並註冊至 `TDesignProvider` | +| `frontend/src/views/auth/Login.vue` | 登陸頁面語系切換選單新增 `zh-TW` 選項 | +| `frontend/src/views/settings/GeneralSettings.vue` | 一般設定頁語系下拉選單支援繁體中文 | +| `frontend/src/views/agent/AgentEmbedChannelPanel.vue` | Agent 嵌入渠道設定頁語系適配 | + +--- + +## 用語校正統計 + +共執行 **19 組詞彙映射**,全面替換中國大陸用語為台灣繁體中文用語,總計修正 **685 處**。 + +### 主要替換對應表 +| 大陸用語 | 台灣繁體中文 | 說明 | +|---------|-------------|------| +| 创建 | 建立 | Create | +| 搜索 | 搜尋 | Search | +| 账户 | 帳號 | Account | +| 密钥 | 金鑰 | Secret Key | +| 服务器 | 伺服器 | Server | +| 二维码 | QR 碼 | QR Code | +| 变量 | 變數 | Variable | +| 恢复 | 還原 | Restore | +| 凭证 | 憑證 | Credential | +| 配置 | 設定 | Configuration | +| 取消 | 取消 | Cancel(一致) | +| 确定 | 確定 | Confirm | +| 删除 | 刪除 | Delete | +| 编辑 | 編輯 | Edit | +| 详情 | 詳細資訊 | Details | +| 状态 | 狀態 | Status | +| 参数 | 參數 | Parameter | +| 权限 | 權限 | Permission | +| 导入/导出 | 匯入/匯出 | Import/Export | + +### 校正方法 +使用 Python Regex 腳本進行批量替換,確保: +- 僅替換翻譯值(value),不影響程式碼金鑰(key) +- 避免誤觸發變數名稱與 API 端點 +- 執行多次 Regex 交叉驗證,確認零殘留 + +--- + +## 技術細節 + +### 國際化架構 +- **框架**:`vue-i18n` v9+ +- **UI 組件庫**:`TDesign Vue Next`(含內建本地化配置) +- **動態載入**:使用 `import()` 惰性載入語系 chunk,減少初始包體積 +- **語系偵測順序**: + 1. 使用者手動設定(localStorage) + 2. 瀏覽器 `navigator.language` + 3. 預設回退至 `zh-CN` + +### 語系金鑰審計 +專案內建 `localeKeyAudit.ts` 腳本,執行 `npm run locale-key-audit` 時會自動: +1. 掃描 `zh-CN.ts` 所有金鑰 +2. 比對 `zh-TW.ts` 是否存在對應金鑰 +3. 輸出缺失金鑰報告,防止 `missing translation` 警告 + +--- + +## 部署流程 + +### 遠端環境資訊 +- **容器主機**:`172.21.10.92` +- **SSH 跳板**:`172.21.10.94` +- **登入帳號**:`leonoxo` +- **專案路徑**:`/mnt/weknora/` +- **容器名稱**:`WeKnora-frontend`、`WeKnora-app` + +### 部署步驟 +1. 本機執行 `npm ci` 安裝依賴 +2. 執行 `npm run build` 編譯前端 +3. 壓縮 `dist/` 為 `frontend-dist.tar.gz` +4. 透過 `scp` 推送至遠端 `/tmp/` +5. 解壓縮至 `/mnt/weknora/frontend/dist/` +6. 執行 `docker compose up -d --build frontend` 重建映像檔並重啟容器 + +### 驗證方式 +- 檢查容器 JS Bundle 是否包含 `zh-TW` 字串 +- 瀏覽器開發者工具 `Network` 面板確認 `/assets/` 請求回傳 `200` +- 強制無快取重新載入(`⌘+Shift+R`)驗證語系生效 + +--- + +## 已知問題與解決方案 + +### 對話圖片閃退現象 +**現象**:歷史對話中的圖片載入時「閃一下然後消失」 + +**原因**:此問題與語系修改**無關**。WeKnora 內建聊天附件過期機制: +```env +WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=24 # 預設 24 小時 +``` +對話中上傳的圖片超過 24 小時後會被後端自動刪除,前端載入時 API 回傳 `404`,觸發圖片組件 `@error` 隱藏邏輯。 + +**解決方案**: +修改 `/mnt/weknora/.env` 中的 TTL 設定: +```bash +# 改成 720 小時(30天) +sed -i 's/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=.*/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=720/' .env + +# 或永不刪除 +sed -i 's/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=.*/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=0/' .env +``` +修改後重啟後端容器: +```bash +docker compose up -d app +``` + +### 知識庫圖片儲存位置 +知識庫圖片與聊天附件不同,**不會被自動刪除**。存放位置: +- **容器內**:`WeKnora-app` 的 `/data/files/<空間ID>/<知識庫ID>/` +- **Docker Volume**:`weknora_data-files` +- 除非手動刪除知識庫或文件,否則圖片會永久保留 + +--- + +## PR 資訊 +- **PR 編號**:#2708 +- **狀態**:OPEN +- **URL**:https://github.com/Tencent/WeKnora/pull/2708 +- **CI 狀態**:CodeCC 安全掃描(自動執行,無需手動回覆) + +--- + +## 維護建議 + +### 未來語系更新 +1. 官方發布新版本後,執行 `npm run locale-key-audit` 檢查是否有新增金鑰 +2. 若有缺失,執行 `npm run regenerate-pruned-locales` 自動補齊 +3. 手動校對新增內容的台灣繁體中文翻譯 +4. 提交 PR 至官方倉庫 + +### 使用者偏好儲存 +語系偏好儲存在瀏覽器 `localStorage` 的 `weknora-locale` 金鑰中,清除快取會重置為系統預設。 + +--- + +## 版本紀錄 +| 日期 | 版本 | 修改內容 | +|------|------|---------| +| 2026-08-14 | v0.1 | 初始建立 zh-TW 語系包,完成 19 組用語校正、6 個核心檔案修改、遠端部署與 PR 提交 | + +--- + +*本文件由團隊協作產生,最後更新:2026-08-14* From fcb961cf1b2c17fbb13cae8e3998b10c6aa59e27 Mon Sep 17 00:00:00 2001 From: leonoxo Date: Fri, 14 Aug 2026 20:32:41 +0800 Subject: [PATCH 3/7] docs(i18n): record RAG image compatibility findings --- ...56\346\224\271\350\252\252\346\230\216.md" | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" index 975dc7d026..e4144dc851 100644 --- "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" +++ "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" @@ -110,28 +110,35 @@ ## 已知問題與解決方案 -### 對話圖片閃退現象 -**現象**:歷史對話中的圖片載入時「閃一下然後消失」 +### 對話圖片顯示相容性(2026-08-14 更新) +**現象**:部分自架環境在載入 RAG 或歷史對話的知識庫圖片時,圖片短暫出現後消失;Nginx 可見下列請求回傳 `404`: +```text +/api/v1/sessions//messages//files?file_path=resource://... +``` -**原因**:此問題與語系修改**無關**。WeKnora 內建聊天附件過期機制: -```env -WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=24 # 預設 24 小時 +**根因**:較新的前端具有 message-scoped 圖片代理機制,但搭配尚未提供此 API 路由的較舊自架後端時,該路由會回傳 `404`。前端既有邏輯將 `404` 視為檔案遺失並移除圖片,造成閃退觀感。這不是 MinerU 未保存圖片,也不是繁中翻譯內容造成。 + +**已部署的相容性修復**:前端仍先使用 message-scoped 路由;若取得 `404`,僅針對已登入的 message scope 自動以既有的租戶檔案路由重試: +```text +/files?file_path=resource://... ``` -對話中上傳的圖片超過 24 小時後會被後端自動刪除,前端載入時 API 回傳 `404`,觸發圖片組件 `@error` 隱藏邏輯。 +Embed 訪客模式不會降級,以維持其 Embed token 的權限邊界。 -**解決方案**: -修改 `/mnt/weknora/.env` 中的 TTL 設定: -```bash -# 改成 720 小時(30天) -sed -i 's/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=.*/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=720/' .env +**驗證**:使用繁中介面重新開啟既有 RAG 對話,圖片已可正常顯示,無須重新提問。 -# 或永不刪除 -sed -i 's/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=.*/WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=0/' .env +**目前部署 Image**: +```text +weknora-ui:zh-tw-image-fallback-20260814 ``` -修改後重啟後端容器: -```bash -docker compose up -d app + +**後續處置**:此相容性修復應以獨立 PR 提交,不混入 zh-TW 語系 PR。待後端版本原生支援上述 session/message 檔案路由後,才評估移除此 fallback。 + +### 聊天附件 TTL +聊天中「使用者直接上傳」的暫存附件另受下列設定管理,和知識庫(RAG)圖片是不同路徑: +```env +WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=24 ``` +超過 TTL 的聊天附件可能被後端清理;可依實際保留政策調整 `.env` 後重啟 app 容器。 ### 知識庫圖片儲存位置 知識庫圖片與聊天附件不同,**不會被自動刪除**。存放位置: @@ -165,6 +172,7 @@ docker compose up -d app ## 版本紀錄 | 日期 | 版本 | 修改內容 | |------|------|---------| +| 2026-08-14 | v0.2 | 更正 RAG 圖片閃退根因為新舊前後端圖片代理 API 不相容;記錄部署的 fallback Image 與獨立修復 PR 策略 | | 2026-08-14 | v0.1 | 初始建立 zh-TW 語系包,完成 19 組用語校正、6 個核心檔案修改、遠端部署與 PR 提交 | --- From ce52d62b71b35bad408fd80deaeefb07d0264332 Mon Sep 17 00:00:00 2001 From: leonoxo Date: Fri, 14 Aug 2026 20:33:11 +0800 Subject: [PATCH 4/7] fix(files): fall back when message image proxy is unavailable --- .../src/utils/protectedFileAccess.test.ts | 18 +++++++++++++++++ frontend/src/utils/protectedFileAccess.ts | 11 ++++++++++ frontend/src/utils/security.ts | 20 +++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/frontend/src/utils/protectedFileAccess.test.ts b/frontend/src/utils/protectedFileAccess.test.ts index c865396d78..e87e9b70c3 100644 --- a/frontend/src/utils/protectedFileAccess.test.ts +++ b/frontend/src/utils/protectedFileAccess.test.ts @@ -2,6 +2,7 @@ import assert from 'node:assert/strict' import test from 'node:test' import { + buildProtectedFileFallbackRequest, buildProtectedFileRequest, isProtectedFileProxyPath, isProviderFileURL, @@ -55,6 +56,23 @@ test('message access routes through the session-message-scoped proxy', () => { ) }) +test('message access falls back to the tenant proxy when the server lacks the message route', () => { + const request = buildProtectedFileFallbackRequest(RESOURCE, { + mode: 'message', + sessionId: 'session 1', + messageId: 'message/1', + }) + + assert.equal(request?.url, `/files?file_path=${encodeURIComponent(RESOURCE)}`) +}) + +test('an embed context has no tenant-proxy fallback', () => { + assert.equal( + buildProtectedFileFallbackRequest(RESOURCE, { mode: 'embed', channelId: 'ch-1', token: 'tok-1' }), + null, + ) +}) + test('an embed context without a token yields no request instead of an unauthenticated one', () => { const request = buildProtectedFileRequest(RESOURCE, { mode: 'embed', channelId: 'ch-1', token: '' }) diff --git a/frontend/src/utils/protectedFileAccess.ts b/frontend/src/utils/protectedFileAccess.ts index 875e06e0ca..54f43ce270 100644 --- a/frontend/src/utils/protectedFileAccess.ts +++ b/frontend/src/utils/protectedFileAccess.ts @@ -134,6 +134,17 @@ function tenantRequestHeaders(): Record { * 为一个存储路径构造代理请求。返回 null 表示当前上下文无法发起该请求 * (非存储路径,或嵌入上下文尚未拿到 token),调用方应跳过并稍后重试。 */ +export function buildProtectedFileFallbackRequest( + sourceURL: string, + access: ProtectedFileAccessContext, +): ProtectedFileRequest | null { + // 訊息範圍代理晚於部分自架後端才加入;若該端點回傳 404,改以既有的 + // 已驗證 /files 路徑重試。不可降級嵌入訪客,因其沒有租戶憑證。 + if (access.mode !== 'message' || !isProviderFileURL(sourceURL.trim())) return null; + const query = new URLSearchParams({ file_path: sourceURL.trim() }).toString(); + return { url: `/files?${query}`, headers: tenantRequestHeaders() }; +} + export function buildProtectedFileRequest( sourceURL: string, access: ProtectedFileAccessContext, diff --git a/frontend/src/utils/security.ts b/frontend/src/utils/security.ts index 224a67cecd..a9899e6e1c 100644 --- a/frontend/src/utils/security.ts +++ b/frontend/src/utils/security.ts @@ -11,6 +11,7 @@ import { markdownDomPurifySecurityHooks, } from './markdownDomPurify.ts'; import { + buildProtectedFileFallbackRequest, buildProtectedFileRequest, isProtectedFileProxyPath, isProviderFileURL, @@ -537,7 +538,26 @@ export async function hydrateProtectedFileImages( credentials: 'include', }); if (!resp.ok) { + // 新版前端可使用訊息範圍圖片代理;較舊的自架後端沒有該端點, + // 但仍可透過已驗證的租戶 /files 代理讀取同一資源,因此僅在 404 + // 時進行相容性重試。 if (resp.status === 404) { + const fallback = buildProtectedFileFallbackRequest(sourceURL, resolvedAccess); + if (fallback) { + const fallbackResp = await fetch(fallback.url, { + method: 'GET', + headers: fallback.headers, + credentials: 'include', + }); + if (fallbackResp.ok) { + const blob = await fallbackResp.blob(); + const blobURL = URL.createObjectURL(blob); + protectedFileBlobCache.set(requestURL, blobURL); + protectedFileBlobCache.set(fallback.url, blobURL); + protectedFileFailureCache.delete(requestURL); + return { status: 'loaded', blobURL }; + } + } protectedFileFailureCache.set(requestURL, Date.now()); return { status: 'missing' }; } From 76069f13aaf91f67a0806e43e30e89195866cdc7 Mon Sep 17 00:00:00 2001 From: leonoxo Date: Fri, 14 Aug 2026 20:55:32 +0800 Subject: [PATCH 5/7] fix(i18n): complete zh-TW terminology review --- frontend/src/i18n/locales/zh-TW.ts | 4152 ++++++++--------- ...56\346\224\271\350\252\252\346\230\216.md" | 3 +- 2 files changed, 2078 insertions(+), 2077 deletions(-) diff --git a/frontend/src/i18n/locales/zh-TW.ts b/frontend/src/i18n/locales/zh-TW.ts index 96b5cd2064..3748f6d170 100755 --- a/frontend/src/i18n/locales/zh-TW.ts +++ b/frontend/src/i18n/locales/zh-TW.ts @@ -1,70 +1,70 @@ export default { platformApiKeys: { - title: '平台 API Key', - description: '爲跨空間自動化建立平台級憑證;調用空間接口時通過 X-Tenant-ID 指定目標空間。', - securityNotice: '平台 API Key 默認可選擇任意空間。請只授予必要能力;金鑰明文僅在建立時顯示一次。', - create: '建立平台 API Key', - createDescription: '平台 Key 不綁定空間,所有操作仍受能力範圍限制。', - loading: '正在加載…', - empty: '暫無平台 API Key', + title: '平臺 API Key', + description: '為跨空間自動化建立平臺級憑證;呼叫空間介面時透過 X-Tenant-ID 指定目標空間。', + securityNotice: '平臺 API Key 預設可選擇任意空間。請只授予必要能力;金鑰明文僅在建立時顯示一次。', + create: '建立平臺 API Key', + createDescription: '平臺 Key 不繫結空間,所有操作仍受能力範圍限制。', + loading: '正在載入…', + empty: '暫無平臺 API Key', name: '名稱', namePlaceholder: '例如:集中運維自動化', key: '金鑰', capability: '能力授權', capabilityMore: '+{count}', - viewAllCapabilities: '查看全部能力授權', - capabilityHint: '空間能力對任意 X-Tenant-ID 生效;系統能力用於平台控制面接口。', + viewAllCapabilities: '檢視全部能力授權', + capabilityHint: '空間能力對任意 X-Tenant-ID 生效;系統能力用於平臺控制面介面。', lastUsed: '最後使用', createdAt: '建立時間', actions: '操作', never: '從未使用', - systemCapabilityGroup: '平台控制面', - createdTitle: '平台 API Key 已建立', - createdDescription: '請立即複製並安全保存。關閉後將不再顯示完整金鑰。', + systemCapabilityGroup: '平臺控制面', + createdTitle: '平臺 API Key 已建立', + createdDescription: '請立即複製並安全儲存。關閉後將不再顯示完整金鑰。', copy: '複製金鑰', copySuccess: '金鑰已複製', deleteConfirm: '確定刪除“{name}”嗎?使用該 Key 的自動化將立即失效。', - deleteSuccess: '平台 API Key 已刪除', - deleteFailed: '刪除平台 API Key 失敗', + deleteSuccess: '平臺 API Key 已刪除', + deleteFailed: '刪除平臺 API Key 失敗', nameRequired: '請輸入名稱', capabilityRequired: '請至少選擇一項能力', - loadFailed: '加載平台 API Key 失敗', - createFailed: '建立平台 API Key 失敗', + loadFailed: '載入平臺 API Key 失敗', + createFailed: '建立平臺 API Key 失敗', capabilityHints: { - tenantsRead: '列出、搜尋和查看所有空間。', - tenantsManage: '建立、更新、刪除空間及應用全局空間配置。', - settingsRead: '讀取平台級運行設置。', - settingsManage: '更新和重置平台級運行設置。', - runtimeRead: '查看任務佇列和任務詳情。', - runtimeManage: '重試、立即執行、取消或刪除運行時任務。', - auditRead: '讀取平台級審計日誌。' + tenantsRead: '列出、搜尋和檢視所有空間。', + tenantsManage: '建立、更新、刪除空間及應用全域性空間配置。', + settingsRead: '讀取平臺級執行設定。', + settingsManage: '更新和重置平臺級執行設定。', + runtimeRead: '檢視任務佇列和任務詳情。', + runtimeManage: '重試、立即執行、取消或刪除執行時任務。', + auditRead: '讀取平臺級審計日誌。' }, capabilities: { - tenantsRead: '查看空間', + tenantsRead: '檢視空間', tenantsManage: '管理空間', - settingsRead: '查看系統設置', - settingsManage: '管理系統設置', - runtimeRead: '查看運行時', - runtimeManage: '管理運行時', - auditRead: '查看系統審計' + settingsRead: '檢視系統設定', + settingsManage: '管理系統設定', + runtimeRead: '檢視執行時', + runtimeManage: '管理執行時', + auditRead: '檢視系統審計' } }, tenantInvitation: { - inboxTooltip: '查看待接受的邀請', + inboxTooltip: '檢視待接受的邀請', pendingSectionTitle: '待接受的邀請', pendingSectionDesc: '發出後等待對方在站內確認。{days} 天未響應將自動過期。', pendingEmpty: '暫無待接受的邀請。', - inviteSubmit: '發送邀請', + inviteSubmit: '傳送邀請', inviteSuccess: '邀請已發出,等待對方接受。', - confirmInviteTitle: '確認發送邀請?', - confirmInviteBody: '將向 {email} 發出加入邀請(角色:{role})。TA 在站內接受後纔會成爲成員。', - confirmSend: '發送', - copyLink: '複製邀請鏈接', - copied: '已複製到剪貼板', - copyFailed: '複製失敗,請手動選中文本', + confirmInviteTitle: '確認傳送邀請?', + confirmInviteBody: '將向 {email} 發出加入邀請(角色:{role})。TA 在站內接受後才會成為成員。', + confirmSend: '傳送', + copyLink: '複製邀請連結', + copied: '已複製到剪貼簿', + copyFailed: '複製失敗,請手動選中文字', errors: { - pendingExists: '已經向該用戶發出過一條待接受的邀請。', - alreadyMember: '該用戶已是當前空間的成員。', + pendingExists: '已經向該使用者發出過一條待接受的邀請。', + alreadyMember: '該使用者已是當前空間的成員。', notPending: '邀請已不在待處理狀態。', forbidden: '只有被邀請人本人可以接受或拒絕該邀請。', notFound: '邀請不存在或已被撤銷。', @@ -106,16 +106,16 @@ export default { success: '邀請已撤銷。' }, shareLink: { - button: '生成共享鏈接', - cellTitle: '通過鏈接邀請', + button: '生成共享連結', + cellTitle: '透過連結邀請', cellAccepted: '已加入 {count} 人', cellEmpty: '尚無成員加入', - dialogTitle: '生成共享邀請鏈接', - description: '生成一條多人可用的註冊鏈接,發到群裡就行;誰打開都能用自己的信箱註冊並加入當前空間。鏈接 {days} 天后過期,或隨時可在列表中撤銷。', - generate: '生成鏈接', - resultTitle: '邀請鏈接已生成', - resultBody: '複製下方鏈接,通過任意私密渠道發給被邀請人。鏈接也會保存在下方列表中,隨時可以重新複製或撤銷。', - revokeConfirm: '撤銷後,所有還未註冊的人都無法再使用此鏈接;如需重發請生成新鏈接。' + dialogTitle: '生成共享邀請連結', + description: '生成一條多人可用的註冊連結,發到群裡就行;誰開啟都能用自己的信箱註冊並加入當前空間。連結 {days} 天後過期,或隨時可在列表中撤銷。', + generate: '生成連結', + resultTitle: '邀請連結已生成', + resultBody: '複製下方連結,透過任意私密渠道發給被邀請人。連結也會儲存在下方列表中,隨時可以重新複製或撤銷。', + revokeConfirm: '撤銷後,所有還未註冊的人都無法再使用此連結;如需重發請生成新連結。' } }, tenantMember: { @@ -123,24 +123,24 @@ export default { sectionDescription: '邀請夥伴加入當前空間並分配角色。只有 Owner 可以新增或移除成員。', learnRbacGuide: '瞭解 RBAC', listTitle: '空間成員', - loading: '正在加載成員…', + loading: '正在載入成員…', retry: '重試', - empty: '尚未邀請任何成員。點擊右上角邀請夥伴加入。', + empty: '尚未邀請任何成員。點選右上角邀請夥伴加入。', emptySearch: '沒有匹配 "{q}" 的成員。', searchPlaceholder: '按姓名或信箱搜尋', audit: { tabLabel: '審計日誌', description: '記錄當前空間的成員變更與訪問拒絕事件,按時間倒序展示。一分鐘內的重複拒絕會自動去重。', - refresh: '刷新', + refresh: '重新整理', end: '已經到底了。', empty: '暫無審計事件。', - forbidden: '無權查看審計日誌。', + forbidden: '無權檢視審計日誌。', systemActor: '系統', requiredRole: '需要角色:{role}', expanded: { actorId: '操作人 ID', - targetUserId: '目標用戶 ID', - targetType: '目標類型', + targetUserId: '目標使用者 ID', + targetType: '目標型別', targetId: '目標 ID', details: '原始詳情' }, @@ -174,7 +174,7 @@ export default { emailFormat: '信箱格式不正確', roleRequired: '請選擇角色', userNotFound: '該信箱尚未註冊,請先邀請對方註冊帳號。', - lastOwner: '無法降級、移除或退出最後一位 Owner,請先把其他成員提升爲 Owner。', + lastOwner: '無法降級、移除或退出最後一位 Owner,請先把其他成員提升為 Owner。', notFound: '未找到對應的成員。', invalidRole: '角色必須是 owner / admin / contributor / viewer 之一。', generic: '操作失敗,請稍後重試。' @@ -184,13 +184,13 @@ export default { }, leave: { confirmTitle: '確認退出當前空間?', - confirmBody: '退出後您將無法訪問當前空間內的所有知識庫和智能體。後續可被再次邀請加入。', + confirmBody: '退出後您將無法訪問當前空間內的所有知識庫和智慧體。後續可被再次邀請加入。', confirm: '退出', success: '已退出當前空間' }, remove: { button: '移除', - confirmBody: '確定要將 {name} 從當前空間中移除嗎?該用戶會立即失去訪問權限。', + confirmBody: '確定要將 {name} 從當前空間中移除嗎?該使用者會立即失去訪問許可權。', confirm: '移除', success: '已移除成員' }, @@ -214,36 +214,36 @@ export default { operations: '操作' }, permissions: { - title: '角色權限說明', - desc: '每個角色在當前空間內能做的事情。服務端強制執行,UI 控件僅作展示。', - iconHint: '懸停查看角色權限說明', + title: '角色許可權說明', + desc: '每個角色在當前空間內能做的事情。服務端強制執行,UI 控制元件僅作展示。', + iconHint: '懸停檢視角色許可權說明', manageMembers: '管理成員', manageTenantConfig: '修改空間配置', manageInfra: '配置模型 / 向量庫 / IM 通道', - createOwnKB: '建立並編輯自己的知識庫和智能體', - readAll: '查看空間內容' + createOwnKB: '建立並編輯自己的知識庫和智慧體', + readAll: '檢視空間內容' } }, userProfile: { - title: '用戶信息', - description: '查看您的帳號基礎信息(用戶 ID、用戶名、信箱、註冊時間),並可修改登錄密碼', + title: '使用者資訊', + description: '檢視您的帳號基礎資訊(使用者 ID、使用者名稱、信箱、註冊時間),並可修改登入密碼', changePassword: { label: '修改密碼', - description: '使用當前密碼驗證後設置新密碼。修改成功後所有設備上的登錄狀態將失效,需要重新登錄。', + description: '使用當前密碼驗證後設定新密碼。修改成功後所有裝置上的登入狀態將失效,需要重新登入。', currentLabel: '當前密碼', currentPlaceholder: '請輸入當前密碼', currentRequired: '請輸入當前密碼', newLabel: '新密碼', - newPlaceholder: '8-32 個字符,需包含字母和數字', + newPlaceholder: '8-32 個字元,需包含字母和數字', confirmLabel: '確認新密碼', confirmPlaceholder: '再次輸入新密碼', submit: '更新密碼', - success: '密碼已更新,請使用新密碼重新登錄', + success: '密碼已更新,請使用新密碼重新登入', failed: '修改密碼失敗,請檢查當前密碼是否正確', - policyFailed: '新密碼須爲 8-32 個字符,且同時包含字母和數字', + policyFailed: '新密碼須為 8-32 個字元,且同時包含字母和數字', sameAsCurrent: '新密碼不能與當前密碼相同', - oidcOnlyDescription: '您的帳號通過 OIDC 登錄開通,尚未設置本地登錄密碼。', - oidcOnlyNotice: '請聯繫系統管理員重置密碼,或繼續使用 OIDC 登錄。自助修改密碼需要先知道當前密碼。', + oidcOnlyDescription: '您的帳號透過 OIDC 登入開通,尚未設定本地登入密碼。', + oidcOnlyNotice: '請聯絡系統管理員重置密碼,或繼續使用 OIDC 登入。自助修改密碼需要先知道當前密碼。', }, }, credential: { @@ -253,38 +253,38 @@ export default { update: '更換', remove: '移除', inputPlaceholder: '請輸入', - savedToast: '憑證已保存', - saveFailed: '保存憑證失敗', + savedToast: '憑證已儲存', + saveFailed: '儲存憑證失敗', removedToast: '憑證已移除', removeFailed: '移除憑證失敗', confirmRemovePrompt: '確認移除?此操作不可撤銷', confirmRemove: '確認移除' }, integrations: { - title: '發佈集成', - selectAgentPlaceholder: '請選擇智能體', - selectAgentHint: '請先選擇一個智能體', - boundAgent: '綁定智能體', - filterByAgent: '按智能體篩選', - filterByAgentWithName: '按智能體篩選:{name}', - filterAllAgents: '全部智能體', + title: '釋出整合', + selectAgentPlaceholder: '請選擇智慧體', + selectAgentHint: '請先選擇一個智慧體', + boundAgent: '繫結智慧體', + filterByAgent: '按智慧體篩選', + filterByAgentWithName: '按智慧體篩選:{name}', + filterAllAgents: '全部智慧體', claw: { title: 'WeKnora Skill', - subtitle: '通過 WeKnora REST API 導入文檔並執行混合檢索(向量 + 關鍵詞)。適用於上傳文件/URL/Markdown 到知識庫、跨庫檢索與瀏覽知識內容。', + subtitle: '透過 WeKnora REST API 匯入文件並執行混合檢索(向量 + 關鍵詞)。適用於上傳檔案/URL/Markdown 到知識庫、跨庫檢索與瀏覽知識內容。', capabilitiesTitle: 'Skill 能力', stepsTitle: '配置步驟', - openApiSettings: '打開 API 信息', + openApiSettings: '開啟 API 資訊', copy: '複製', copyEnvSuccess: '已複製環境變數示例', copyCmdSuccess: '已複製安裝命令', ecosystemNote: 'Skill 託管於 ClawHub({\'@\'}lyingbug/weknora),完整 API 說明與版本歷史請參見 ClawHub 頁面。', installCta: '前往 ClawHub', - installCtaHint: '安裝 WeKnora Skill · 將在新標籤頁打開', + installCtaHint: '安裝 WeKnora Skill · 將在新標籤頁開啟', hubMeta: 'ClawHub · {\'@\'}lyingbug/weknora · MIT-0', steps: { verify: { - title: '驗證連接', - desc: '安裝後讓 Agent 列出知識庫或執行一次檢索,確認 API 憑證與網絡可達。' + title: '驗證連線', + desc: '安裝後讓 Agent 列出知識庫或執行一次檢索,確認 API 憑證與網路可達。' }, install: { title: '安裝 Skill', @@ -292,17 +292,17 @@ export default { }, env: { title: '配置環境變數', - desc: '在終端或 ~/.zshrc、~/.bashrc 中設置 WEKNORA_BASE_URL 與 WEKNORA_API_KEY。下方示例已填入當前 API 地址,請將 API Key 替換爲實際值。' + desc: '在終端或 ~/.zshrc、~/.bashrc 中設定 WEKNORA_BASE_URL 與 WEKNORA_API_KEY。下方示例已填入當前 API 地址,請將 API Key 替換為實際值。' }, api: { title: '獲取 API 憑證', - desc: '在「設置 → API 信息」中複製 API Key 與 API 地址。' + desc: '在「設定 → API 資訊」中複製 API Key 與 API 地址。' } }, capabilities: { browse: { title: '瀏覽知識庫', - desc: '列出知識庫與條目、查看詳情,管理已導入的知識內容。' + desc: '列出知識庫與條目、檢視詳情,管理已匯入的知識內容。' }, search: { title: '混合檢索', @@ -313,12 +313,12 @@ export default { desc: '以 Markdown 形式建立或編輯知識條目,適合會議記錄與結構化筆記。' }, url: { - title: '導入網頁', - desc: '通過 URL 抓取網頁內容並寫入知識庫,支持解析狀態輪詢。' + title: '匯入網頁', + desc: '透過 URL 抓取網頁內容並寫入知識庫,支援解析狀態輪詢。' }, upload: { - title: '上傳文件', - desc: '將 PDF、Word、Excel 等文檔上傳至知識庫,自動解析與向量化。' + title: '上傳檔案', + desc: '將 PDF、Word、Excel 等文件上傳至知識庫,自動解析與向量化。' } } }, @@ -327,28 +327,28 @@ export default { subtitle: '配合 WeKnora 自建服務使用:在任意網頁側邊欄提問、剪藏內容、Markdown 速記,將瀏覽中的知識沉澱到你的知識庫。', capabilitiesTitle: '核心能力', stepsTitle: '配置步驟', - openApiSettings: '打開 API 信息', + openApiSettings: '開啟 API 資訊', copy: '複製', copySuccess: '已複製 API 地址', installCta: '前往 Chrome 應用商店', - installCtaHint: '官方擴展 · 將在新標籤頁打開', + installCtaHint: '官方擴充套件 · 將在新標籤頁開啟', storeMeta: 'Chrome 應用商店 · v1.0.0', steps: { connect: { - title: '在插件中完成連接', - desc: '打開插件設置,選擇「企業/開發者」模式,填入服務 API 地址與 API Key。下方爲當前服務地址。' + title: '在外掛中完成連線', + desc: '開啟外掛設定,選擇「企業/開發者」模式,填入服務 API 地址與 API Key。下方為當前服務地址。' }, install: { - title: '安裝 Chrome 插件', + title: '安裝 Chrome 外掛', desc: '前往 Chrome 應用商店安裝「知識管理助手」。' }, port: { - title: '桌面版配置固定端口(推薦)', - desc: '使用 WeKnora 桌面版時,在 API 信息中設置固定端口(如 37841),避免每次啓動後地址變化導致插件斷連。' + title: '桌面版配置固定埠(推薦)', + desc: '使用 WeKnora 桌面版時,在 API 資訊中設定固定埠(如 37841),避免每次啟動後地址變化導致外掛斷連。' }, api: { title: '獲取 API 憑證', - desc: '在「設置 → API 信息」中複製 API Key 與 API 地址。' + desc: '在「設定 → API 資訊」中複製 API Key 與 API 地址。' } }, scenarios: { @@ -360,25 +360,25 @@ export default { capabilities: { shortcuts: { title: '高效快捷鍵', - desc: '可自定義快捷鍵快速提問、打開側邊欄等操作,提升日常效率。' + desc: '可自定義快捷鍵快速提問、開啟側邊欄等操作,提升日常效率。' }, notes: { title: 'Markdown 速記', - desc: '內置 Markdown 編輯器,隨時記錄靈感與筆記,一鍵保存到知識庫。' + desc: '內建 Markdown 編輯器,隨時記錄靈感與筆記,一鍵儲存到知識庫。' }, clip: { title: '網頁內容一鍵採集', - desc: '保存頁面 URL、AI 智能剪藏正文,或手動框選區域,精準寫入指定知識庫。' + desc: '儲存頁面 URL、AI 智慧剪藏正文,或手動框選區域,精準寫入指定知識庫。' }, qa: { - title: '知識庫智能問答', - desc: '側邊欄對話面板,支持多知識庫切換與快速/深度/精確三種回答模式,邊瀏覽邊提問不打斷工作流。' + title: '知識庫智慧問答', + desc: '側邊欄對話面板,支援多知識庫切換與快速/深度/精確三種回答模式,邊瀏覽邊提問不打斷工作流。' } } }, agentEditor: { - label: '發佈渠道', - desc: '將智能體發佈到 IM 平台或網站,在集成中心統一管理' + label: '釋出渠道', + desc: '將智慧體釋出到 IM 平臺或網站,在整合中心統一管理' }, embedOverview: { title: '網頁嵌入渠道' @@ -387,16 +387,16 @@ export default { title: '已接入的 IM' }, api: { - title: 'API 集成', - subtitle: '通過 REST API 接入服務,並配置請求如何攜帶終端用戶身份。', - loading: '正在加載 API 集成設置...', + title: 'API 整合', + subtitle: '透過 REST API 接入服務,並配置請求如何攜帶終端使用者身份。', + loading: '正在載入 API 整合設定...', retry: '重試', copy: '複製', copySuccess: '已複製', baseUrl: 'API 地址', baseUrlDesc: '與 REST API 路徑拼接使用。', apiKeys: 'API Keys', - apiKeysDesc: '爲不同集成建立獨立 Key,並限制操作權限與可訪問知識庫範圍。', + apiKeysDesc: '為不同整合建立獨立 Key,並限制操作許可權與可訪問知識庫範圍。', createApiKey: '建立 API Key', createApiKeyDialogDesc: '選擇該 API Key 可用的能力和知識庫範圍。', noApiKeys: '暫無 API Key', @@ -407,154 +407,154 @@ export default { apiKeyCapabilitiesRequired: 'Scoped API Key 至少需要選擇一項能力', apiKeyAccessMode: '授權方式', apiKeyScopedAccess: '能力授權', - apiKeyAccessType: '訪問類型', - apiKeyAccessTypeHint: '「知識庫」按下方權限級別在知識庫範圍內操作;「空間完全訪問」額外開放模型、資料源等全部空間級接口。', + apiKeyAccessType: '訪問型別', + apiKeyAccessTypeHint: '「知識庫」按下方許可權級別在知識庫範圍內操作;「空間完全訪問」額外開放模型、資料源等全部空間級介面。', apiKeyCapabilities: '可用能力', apiKeyCapabilityGroupKnowledge: '知識庫資料', - apiKeyCapabilityGroupAutomation: '智能體與集成', + apiKeyCapabilityGroupAutomation: '智慧體與整合', apiKeyCapabilityGroupCollaboration: '成員與空間', apiKeyCapabilityGroupTenant: '空間配置', apiKeyCapabilitySelectGroup: '全選', apiKeyCapabilityClearGroup: '清空', capabilityTenantFull: '空間完全訪問', - capabilityTenantFullHint: '允許調用模型、向量庫、資料源、渠道等全部空間級接口;知識庫範圍不再生效。', + capabilityTenantFullHint: '允許呼叫模型、向量庫、資料源、渠道等全部空間級介面;知識庫範圍不再生效。', capabilityRetrieve: '檢索知識庫', capabilityRetrieveHint: '允許讀取、查詢和檢索所選知識庫範圍內的資料;不建立會話,也不修改內容。', capabilityChat: '對話能力', capabilityChatHint: '允許該金鑰發起對話並管理自己的會話;不修改知識庫內容。', - capabilityReadAgents: '讀取智能體', - capabilityReadAgentsHint: '允許列出智能體、查看智能體詳情、讀取智能體預設和建議問題;不允許發起對話或修改智能體。', + capabilityReadAgents: '讀取智慧體', + capabilityReadAgentsHint: '允許列出智慧體、檢視智慧體詳情、讀取智慧體預設和建議問題;不允許發起對話或修改智慧體。', capabilityIngest: '寫入知識庫內容', - capabilityIngestHint: '允許向授權範圍內的知識庫寫入內容(上傳文檔、編輯分塊/FAQ/標籤/wiki);不能新建知識庫、不能新建智能體、不能清空知識庫,且僅限所選知識庫範圍。', + capabilityIngestHint: '允許向授權範圍內的知識庫寫入內容(上傳文件、編輯分塊/FAQ/標籤/wiki);不能新建知識庫、不能新建智慧體、不能清空知識庫,且僅限所選知識庫範圍。', capabilityManageKbs: '管理知識庫', - capabilityManageKbsHint: '允許管理知識庫全生命週期:新建、複製、修改、刪除知識庫並調整初始化/配置信息。針對已有知識庫的操作(複製/更新/刪除)仍受所選知識庫範圍限制;新建不受限(新知識庫歸本空間)。', - capabilityManageAgents: '管理智能體', - capabilityManageAgentsHint: '允許建立、修改、刪除、複製智能體。智能體配置可能含模型/MCP 等敏感綁定,默認關閉,按需開啓。', - capabilityMessageHistory: '消息歷史', - capabilityMessageHistoryHint: '允許檢索空間聊天曆史並讀取聊天曆史統計;不授予空間配置權限。', + capabilityManageKbsHint: '允許管理知識庫全生命週期:新建、複製、修改、刪除知識庫並調整初始化/配置資訊。針對已有知識庫的操作(複製/更新/刪除)仍受所選知識庫範圍限制;新建不受限(新知識庫歸本空間)。', + capabilityManageAgents: '管理智慧體', + capabilityManageAgentsHint: '允許建立、修改、刪除、複製智慧體。智慧體配置可能含模型/MCP 等敏感繫結,預設關閉,按需開啟。', + capabilityMessageHistory: '訊息歷史', + capabilityMessageHistoryHint: '允許檢索空間聊天曆史並讀取聊天曆史統計;不授予空間配置許可權。', capabilityManageModels: '管理模型', capabilityManageModelsHint: '允許管理模型配置、模型憑證、模型連通性測試和 WeKnoraCloud 憑證。', capabilityManageMcpServices: '管理 MCP 服務', capabilityManageMcpServicesHint: '允許管理 MCP 服務、憑證、工具審批策略和該主體的 OAuth 授權狀態。', capabilityManageDatasources: '管理資料源', - capabilityManageDatasourcesHint: '允許管理資料源連接器、憑證、資源選擇和同步任務;綁定知識庫時仍受知識庫範圍限制。', + capabilityManageDatasourcesHint: '允許管理資料源聯結器、憑證、資源選擇和同步任務;繫結知識庫時仍受知識庫範圍限制。', capabilityManageChannels: '管理渠道', - capabilityManageChannelsHint: '允許管理智能體的嵌入渠道、IM 渠道和微信掃碼綁定流程。', + capabilityManageChannelsHint: '允許管理智慧體的嵌入渠道、IM 渠道和微信掃碼繫結流程。', capabilityManageVectorStores: '管理檢索基礎設施', - capabilityManageVectorStoresHint: '允許管理向量庫配置,以及解析器、文檔讀取器和存儲引擎連通性檢查。', - capabilityManageStorageBackends: '管理存儲後端', - capabilityManageStorageBackendsHint: '允許管理對象/文件存儲後端實例(如 S3 兼容或本地文件存儲)的增刪改查、連通性測試及空間默認存儲設置。', + capabilityManageVectorStoresHint: '允許管理向量庫配置,以及解析器、文件讀取器和儲存引擎連通性檢查。', + capabilityManageStorageBackends: '管理儲存後端', + capabilityManageStorageBackendsHint: '允許管理物件/檔案儲存後端例項(如 S3 相容或本地檔案儲存)的增刪改查、連通性測試及空間預設儲存設定。', capabilityManageWebSearch: '管理聯網搜尋', - capabilityManageWebSearchHint: '允許管理聯網搜尋供應商配置、憑證和連接測試。', - capabilityRunEvaluations: '運行評測', - capabilityRunEvaluationsHint: '允許運行評測任務並讀取評測結果。', + capabilityManageWebSearchHint: '允許管理聯網搜尋供應商配置、憑證和連線測試。', + capabilityRunEvaluations: '執行評測', + capabilityRunEvaluationsHint: '允許執行評測任務並讀取評測結果。', capabilityManageMembers: '管理成員', - capabilityManageMembersHint: '允許查看和管理空間成員、角色、邀請和邀請鏈接;不包含 API Key 管理、空間刪除或所有權轉移。', + capabilityManageMembersHint: '允許檢視和管理空間成員、角色、邀請和邀請連結;不包含 API Key 管理、空間刪除或所有權轉移。', capabilityManageSpaces: '管理空間', - capabilityManageSpacesHint: '允許管理組織空間、加入流程、空間成員、邀請和共享空間可見性;不授予知識庫或智能體分享管理權限。', - capabilityManageTenantSettings: '管理空間設置', - capabilityManageTenantSettingsHint: '允許讀取和更新空間級集成設置,例如 API 終端用戶身份模式、請求頭配置、空間 KV 配置等;不包含 API Key 管理、成員管理、空間刪除或所有權轉移。', + capabilityManageSpacesHint: '允許管理組織空間、加入流程、空間成員、邀請和共享空間可見性;不授予知識庫或智慧體分享管理許可權。', + capabilityManageTenantSettings: '管理空間設定', + capabilityManageTenantSettingsHint: '允許讀取和更新空間級整合設定,例如 API 終端使用者身份模式、請求頭配置、空間 KV 配置等;不包含 API Key 管理、成員管理、空間刪除或所有權轉移。', apiKeyKnowledgeScope: '知識庫範圍', apiKeyKnowledgeScopePlaceholder: '留空表示允許訪問全部知識庫', allKnowledgeBases: '全部知識庫', editApiKeyScope: '編輯 API Key', editApiKeyScopeDesc: '修改 API Key「{name}」的名稱和授權範圍。', - editApiKeyScopeHint: '留空表示允許訪問本空間的全部知識庫。所有修改保存後立即生效。', + editApiKeyScopeHint: '留空表示允許訪問本空間的全部知識庫。所有修改儲存後立即生效。', updateApiKeyScopeSuccess: 'API Key 已更新', updateApiKeyScopeFailed: '更新 API Key 失敗', createdAt: '建立時間', actions: '操作', deleteApiKey: '刪除', - deleteApiKeyConfirm: '刪除後該 API Key 會立即失效,已部署的集成將無法繼續使用它。', + deleteApiKeyConfirm: '刪除後該 API Key 會立即失效,已部署的整合將無法繼續使用它。', deleteApiKeySuccess: 'API Key 已刪除', deleteApiKeyFailed: '刪除 API Key 失敗', createApiKeyFailed: '建立 API Key 失敗', - loadApiKeysFailed: '加載 API Key 列表失敗', + loadApiKeysFailed: '載入 API Key 列表失敗', apiKeyCreated: 'API Key 已建立', - principalMode: '用戶身份模式', - principalModeDesc: '配置 API 請求如何識別終端用戶。該身份會同時用於區分不同用戶的對話 Session 與 MCP 工具授權。', - principalScope: '終端用戶身份負責隔離 Session 與 MCP OAuth;API Key 自身的操作權限和知識庫範圍由上方 API Keys 管理。', + principalMode: '使用者身份模式', + principalModeDesc: '配置 API 請求如何識別終端使用者。該身份會同時用於區分不同使用者的對話 Session 與 MCP 工具授權。', + principalScope: '終端使用者身份負責隔離 Session 與 MCP OAuth;API Key 自身的操作許可權和知識庫範圍由上方 API Keys 管理。', modeTenant: '僅空間', - modeDirect: '直接傳用戶 ID', + modeDirect: '直接傳使用者 ID', modeSigned: '簽名 Token', - directWarning: '直接傳用戶 ID 會信任調用方請求頭,僅適用於可信服務端到服務端調用。', - directWarningDetail: '任何持有 API Key 的調用方都可以通過修改用戶 ID 請求頭冒充其他外部用戶,從而共用或劫持其 MCP OAuth 授權。請勿用於瀏覽器或不可信客戶端;面向終端用戶請使用「簽名 Token」。', - signedRecommended: '推薦給面向用戶的應用:由你的業務後端爲外部用戶簽發短期 HS256 JWT。', - signedFlowDetail: 'HMAC 金鑰僅保存在 WeKnora 與你的可信後端,切勿放入請求或下發給瀏覽器。請求頭裡傳的是用該金鑰簽出的 JWT 字符串(每次簽發或過期後會變),不是金鑰本身。JWT 須包含 sub(外部用戶 ID)、tenant_id、aud=weknora、exp(有效期不超過 24 小時)。', - directHeader: '用戶 ID 請求頭', - requireDirectHeader: '必須攜帶用戶 ID', - requireDirectHeaderDesc: '開啓後,缺少用戶 ID 請求頭的 API Key 請求將被拒絕;關閉則按整個空間統一處理,不區分具體終端用戶。', + directWarning: '直接傳使用者 ID 會信任呼叫方請求頭,僅適用於可信服務端到服務端呼叫。', + directWarningDetail: '任何持有 API Key 的呼叫方都可以透過修改使用者 ID 請求頭冒充其他外部使用者,從而共用或劫持其 MCP OAuth 授權。請勿用於瀏覽器或不可信客戶端;面向終端使用者請使用「簽名 Token」。', + signedRecommended: '推薦給面向使用者的應用:由你的業務後端為外部使用者簽發短期 HS256 JWT。', + signedFlowDetail: 'HMAC 金鑰僅儲存在 WeKnora 與你的可信後端,切勿放入請求或下發給瀏覽器。請求頭裡傳的是用該金鑰簽出的 JWT 字串(每次簽發或過期後會變),不是金鑰本身。JWT 須包含 sub(外部使用者 ID)、tenant_id、aud=weknora、exp(有效期不超過 24 小時)。', + directHeader: '使用者 ID 請求頭', + requireDirectHeader: '必須攜帶使用者 ID', + requireDirectHeaderDesc: '開啟後,缺少使用者 ID 請求頭的 API Key 請求將被拒絕;關閉則按整個空間統一處理,不區分具體終端使用者。', tokenHeader: 'Token 請求頭', tokenHeaderDesc: '客戶端在該固定請求頭中攜帶後端簽發的 JWT。', hmacSecret: 'HMAC 金鑰', - hmacSecretDesc: '與 WeKnora 保存的同一份金鑰;僅用於後端簽發 JWT,不要作爲請求頭髮送。', + hmacSecretDesc: '與 WeKnora 儲存的同一份金鑰;僅用於後端簽發 JWT,不要作為請求頭髮送。', secretConfigured: '已配置金鑰(不可回看);輸入新值可輪換', - secretSavedCopyHint: '金鑰已保存,請立即複製到後端配置。離開本頁後將無法再次查看。', + secretSavedCopyHint: '金鑰已儲存,請立即複製到後端配置。離開本頁後將無法再次檢視。', generateSecret: '生成金鑰', hmacSecretResetConfirmTitle: '確認重置 HMAC 金鑰?', - hmacSecretResetConfirmBody: '重置後,舊的 HMAC 金鑰會立即失效,所有使用舊金鑰簽發 JWT 的後端服務必須更換爲新金鑰纔可繼續通過簽名 Token 調用。此操作不可撤銷。', + hmacSecretResetConfirmBody: '重置後,舊的 HMAC 金鑰會立即失效,所有使用舊金鑰簽發 JWT 的後端服務必須更換為新金鑰才可繼續透過簽名 Token 呼叫。此操作不可撤銷。', hmacSecretResetConfirmOk: '確認重置', hmacSecretResetConfirmCancel: '取消', tokenSignExample: '後端簽發 JWT 示例(Go)', - signedRequestStep0: '# 0. 在你的後端簽發 JWT(HS256,aud=weknora,sub=用戶 ID,tenant_id={tenantId},exp 不超過 24 小時)', + signedRequestStep0: '# 0. 在你的後端簽發 JWT(HS256,aud=weknora,sub=使用者 ID,tenant_id={tenantId},exp 不超過 24 小時)', signedRequestStep0Hint: '# 將 JWT 放入 {headerName} 請求頭,不要傳 HMAC 金鑰', requestExampleCreateSession: '# 1. 建立會話', - requestExampleAgentChat: '# 2. Agent 對話(SSE;將 替換爲第 1 步返回的 id)', + requestExampleAgentChat: '# 2. Agent 對話(SSE;將 替換為第 1 步返回的 id)', requestExampleJwtPlaceholder: '<後端簽發的 JWT>', requestExample: '請求示例', playgroundTitle: 'API Playground', - playgroundDesc: '用當前 API Key 和身份模式發起真實請求,驗證會話建立、智能體對話和 SSE 返回。', - playgroundOpen: '打開 Playground', - playgroundDrawerDesc: '按真實 API 集成方式調試 Session、Agent Chat 和 SSE 返回', + playgroundDesc: '用當前 API Key 和身份模式發起真實請求,驗證會話建立、智慧體對話和 SSE 返回。', + playgroundOpen: '開啟 Playground', + playgroundDrawerDesc: '按真實 API 整合方式除錯 Session、Agent Chat 和 SSE 返回', playgroundSectionRequest: '請求配置', playgroundSectionPreview: '請求預覽', - playgroundSectionResult: '運行結果', - playgroundAgent: '測試智能體', - playgroundAgentPlaceholder: '選擇要測試的智能體', - playgroundBuiltin: '內置', - playgroundAgentsLoadFailed: '智能體列表加載失敗', - playgroundExternalUser: '外部用戶 ID', + playgroundSectionResult: '執行結果', + playgroundAgent: '測試智慧體', + playgroundAgentPlaceholder: '選擇要測試的智慧體', + playgroundBuiltin: '內建', + playgroundAgentsLoadFailed: '智慧體列表載入失敗', + playgroundExternalUser: '外部使用者 ID', playgroundExternalUserPlaceholder: 'user_123', - playgroundTenantModeHint: '僅空間模式不會發送外部用戶身份,所有 API 會話歸屬同一個空間級主體。', - playgroundDirectModeHint: '將通過 {headerName} 請求頭髮送此用戶 ID。', - playgroundSignedModeHint: '簽名模式由 JWT 的 sub 代表外部用戶;Playground 會用這裡的用戶 ID 自動簽出短期測試 JWT。', + playgroundTenantModeHint: '僅空間模式不會傳送外部使用者身份,所有 API 會話歸屬同一個空間級主體。', + playgroundDirectModeHint: '將透過 {headerName} 請求頭髮送此使用者 ID。', + playgroundSignedModeHint: '簽名模式由 JWT 的 sub 代表外部使用者;Playground 會用這裡的使用者 ID 自動簽出短期測試 JWT。', playgroundQuestion: '測試問題', - playgroundQuestionPlaceholder: '輸入要發送給智能體的問題', + playgroundQuestionPlaceholder: '輸入要傳送給智慧體的問題', playgroundRequestPreview: '請求預覽(已遮蔽金鑰)', - playgroundRun: '運行測試', + playgroundRun: '執行測試', playgroundStop: '停止', playgroundNeedApiKey: '當前空間沒有 API Key。', - playgroundNeedAgent: '請選擇測試智能體。', + playgroundNeedAgent: '請選擇測試智慧體。', playgroundNeedQuestion: '請輸入測試問題。', - playgroundNeedExternalUser: '請輸入外部用戶 ID。', + playgroundNeedExternalUser: '請輸入外部使用者 ID。', playgroundMintTokenFailed: '生成短期測試 JWT 失敗。', playgroundMissingSessionId: '建立會話成功,但響應中沒有 session id。', - playgroundNoStream: '對話接口沒有返回可讀取的 SSE 流。', + playgroundNoStream: '對話介面沒有返回可讀取的 SSE 流。', playgroundGeneratedToken: '本次生成的測試 Token', playgroundStepSession: '步驟 1:建立 Session', playgroundStepChat: '步驟 2:Agent Chat SSE', playgroundFinalAnswer: '提取出的回答', - playgroundEmptyResult: '運行後將在這裡顯示 Session 響應、SSE 原始輸出和提取出的回答。', + playgroundEmptyResult: '執行後將在這裡顯示 Session 響應、SSE 原始輸出和提取出的回答。', playgroundSuccess: '測試完成({ms}ms)', playgroundStopped: '測試已停止', playgroundFailed: 'API Playground 測試失敗', - loadFailed: '加載 API 集成設置失敗', - saveFailed: '保存 API 集成設置失敗', - saveSuccess: 'API 集成設置已保存', - autoSaveNeedSecret: '簽名 Token 模式需要填寫 HMAC 金鑰後才能自動保存。' + loadFailed: '載入 API 整合設定失敗', + saveFailed: '儲存 API 整合設定失敗', + saveSuccess: 'API 整合設定已儲存', + autoSaveNeedSecret: '簽名 Token 模式需要填寫 HMAC 金鑰後才能自動儲存。' }, tabs: { - im: 'IM 集成', + im: 'IM 整合', embed: '網頁嵌入', - api: 'API 集成', - chrome: 'Chrome 插件', + api: 'API 整合', + chrome: 'Chrome 外掛', claw: 'Claw Skill' } }, datasource: { title: '資料源管理', description: '配置外部資料源,自動同步內容到知識庫', - add: '添加資料源', + add: '新增資料源', empty: '暫無資料源', edit: '編輯', delete: '刪除', @@ -571,106 +571,106 @@ export default { pauseFailed: '暫停失敗', logs: '日誌', syncModeLabel: '同步模式', - createTitle: '添加資料源', + createTitle: '新增資料源', editTitle: '編輯資料源', nameLabel: '名稱', namePlaceholder: '輸入資料源名稱', - sectionBasic: '基本信息', - testConnection: '測試連接', - testSuccess: '連接成功', - testFailed: '連接失敗', - connected: '已連接', - connectionFailed: '連接失敗', - isRequired: '爲必填項', + sectionBasic: '基本資訊', + testConnection: '測試連線', + testSuccess: '連線成功', + testFailed: '連線失敗', + connected: '已連線', + connectionFailed: '連線失敗', + isRequired: '為必填項', credentialsLabel: '憑證', gitlab: { baseUrl: 'GitLab 地址', accessToken: '個人訪問權杖', - projects: 'GitLab 項目', - projectsHint: '填寫項目 ID 或命名空間路徑(如 group/project),可選指定分支和目錄。', - project: '項目', projectId: '項目 ID', projectIdPlaceholder: '例如:12345 或 group/project', - ref: '分支', refPlaceholder: '留空時使用默認分支', - paths: '同步目錄', pathsPlaceholder: '每行一個目錄;留空同步整個項目', - addProject: '添加項目', projectRequired: '請至少添加一個 GitLab 項目', - }, - resourceHint: '選擇要同步的內容空間/文件夾', + projects: 'GitLab 專案', + projectsHint: '填寫專案 ID 或名稱空間路徑(如 group/project),可選指定分支和目錄。', + project: '專案', projectId: '專案 ID', projectIdPlaceholder: '例如:12345 或 group/project', + ref: '分支', refPlaceholder: '留空時使用預設分支', + paths: '同步目錄', pathsPlaceholder: '每行一個目錄;留空同步整個專案', + addProject: '新增專案', projectRequired: '請至少新增一個 GitLab 專案', + }, + resourceHint: '選擇要同步的內容空間/資料夾', untitled: '無標題', - resourceLoadFailed: '加載資源列表失敗', + resourceLoadFailed: '載入資源列表失敗', noResources: '未找到可同步的知識庫空間', - noResourcesDesc: '應用需要通過群聊獲得知識庫訪問權限才能拉取內容', - noResourcesDesc_notion: '應用需要獲得 Notion 頁面的訪問權限才能拉取內容', - retryLoadResources: '重新加載', - guideStep1: '在飛書中建立一個群聊,在群設置「群機器人」中添加你的應用', - guideStep2: '打開知識庫「設置」→「成員設置」→ 添加成員,搜尋該群聊名稱並添加', - guideStep3: '確保群聊角色至少爲「可閱讀」,然後回到這裡點重新加載', - guideStep1_notion: '在 Notion 中打開你想要同步的頁面或資料庫', - guideStep2_notion: '點擊右上角的「···」菜單,選擇「Connect to」或「Add connections」', - guideStep3_notion: '搜尋並選擇你的集成應用(Integration),然後回到這裡點重新加載', - permissionDocLink: '查看飛書知識庫權限配置文檔', + noResourcesDesc: '應用需要透過群聊獲得知識庫訪問許可權才能拉取內容', + noResourcesDesc_notion: '應用需要獲得 Notion 頁面的訪問許可權才能拉取內容', + retryLoadResources: '重新載入', + guideStep1: '在飛書中建立一個群聊,在群設定「群機器人」中新增你的應用', + guideStep2: '開啟知識庫「設定」→「成員設定」→ 新增成員,搜尋該群聊名稱並新增', + guideStep3: '確保群聊角色至少為「可閱讀」,然後回到這裡點重新載入', + guideStep1_notion: '在 Notion 中開啟你想要同步的頁面或資料庫', + guideStep2_notion: '點選右上角的「···」選單,選擇「Connect to」或「Add connections」', + guideStep3_notion: '搜尋並選擇你的整合應用(Integration),然後回到這裡點重新載入', + permissionDocLink: '檢視飛書知識庫許可權配置文件', syncScheduleLabel: '同步頻率', conflictLabel: '衝突策略', syncDeletions: '同步刪除(源端刪除時同步刪除知識庫中的條目)', createAndSync: '建立並立即同步', createAndSyncSuccess: '資料源建立成功,同步任務已提交', createButSyncFailed: '資料源已建立,但觸發同步失敗', - updateSuccessSyncHint: '資料源更新成功;編輯不會自動觸發同步,如需重新導入請點擊“同步”。', - saveFailed: '保存失敗', + updateSuccessSyncHint: '資料源更新成功;編輯不會自動觸發同步,如需重新匯入請點選“同步”。', + saveFailed: '儲存失敗', syncHistory: '同步歷史', - refreshLogs: '刷新日誌', + refreshLogs: '重新整理日誌', noLogs: '暫無同步記錄', - comingSoon: '即將支持', + comingSoon: '即將支援', docHint: '在以下地址獲取憑證:', - openDoc: '打開文檔', - prereqBarText: '首次使用?點擊查看飛書應用配置指引', - prereqBarText_yuque: '首次使用?點擊查看語雀 Token 配置指引', + openDoc: '開啟文件', + prereqBarText: '首次使用?點選檢視飛書應用配置指引', + prereqBarText_yuque: '首次使用?點選檢視語雀 Token 配置指引', prereqStep1Brief_yuque: '建立語雀個人 Token', - prereqStep1Desc_yuque: '登錄語雀 → 個人頭像 → 設置 → Token → 新建 Token', - prereqStep2Brief_yuque: '爲 Token 勾選所需權限', - prereqStep2Desc_yuque: '至少勾選 repo:read 和 doc:read(讀取知識庫和文檔內容)', + prereqStep1Desc_yuque: '登入語雀 → 個人頭像 → 設定 → Token → 新建 Token', + prereqStep2Brief_yuque: '為 Token 勾選所需許可權', + prereqStep2Desc_yuque: '至少勾選 repo:read 和 doc:read(讀取知識庫和文件內容)', prereqStep3Brief_yuque: '(可選)企業版填寫 Base URL', - prereqStep3Desc_yuque: '公有雲用戶無需填寫;語雀企業版或私有部署請填寫企業域名', - prereqOpenConsole_yuque: '前往語雀 Token 設置', - prereqBarText_ima: '首次使用?點擊查看騰訊 IMA OpenAPI 授權指引', - prereqStep1Brief_ima: '開通 IMA 智能體接入', - prereqStep1Desc_ima: '登錄 https://ima.qq.com/agent-interface 並申請 OpenAPI 接入', + prereqStep3Desc_yuque: '公有雲使用者無需填寫;語雀企業版或私有部署請填寫企業域名', + prereqOpenConsole_yuque: '前往語雀 Token 設定', + prereqBarText_ima: '首次使用?點選檢視騰訊 IMA OpenAPI 授權指引', + prereqStep1Brief_ima: '開通 IMA 智慧體接入', + prereqStep1Desc_ima: '登入 https://ima.qq.com/agent-interface 並申請 OpenAPI 接入', prereqStep2Brief_ima: '獲取 ClientID 與 APIKey', - prereqStep2Desc_ima: '在智能體接入頁複製 ima-openapi-clientid 與 ima-openapi-apikey 兩個憑證', + prereqStep2Desc_ima: '在智慧體接入頁複製 ima-openapi-clientid 與 ima-openapi-apikey 兩個憑證', prereqStep3Brief_ima: '授權目標知識庫', - prereqStep3Desc_ima: '在 IMA 客戶端爲該憑證授權需要同步的知識庫,未授權的知識庫不會出現在列表中', + prereqStep3Desc_ima: '在 IMA 客戶端為該憑證授權需要同步的知識庫,未授權的知識庫不會出現在列表中', prereqOpenConsole_ima: '前往 IMA OpenAPI 控制檯', prereqStep1Brief_feishu: "建立飛書自建應用", - prereqStep1Desc_feishu: "登錄飛書開放平台 → 建立企業自建應用", - prereqStep2Brief_feishu: "添加機器人能力", - prereqStep2Desc_feishu: "開放平台 → 你的應用 → 添加應用能力 → 機器人", - prereqStep3Brief_feishu: "配置應用權限", - prereqStep3Desc_feishu: "爲應用開通 wiki:wiki:readonly, drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", + prereqStep1Desc_feishu: "登入飛書開放平臺 → 建立企業自建應用", + prereqStep2Brief_feishu: "新增機器人能力", + prereqStep2Desc_feishu: "開放平臺 → 你的應用 → 新增應用能力 → 機器人", + prereqStep3Brief_feishu: "配置應用許可權", + prereqStep3Desc_feishu: "為應用開通 wiki:wiki:readonly, drive:drive:readonly, drive:export:readonly, docx:document:readonly 許可權", prereqStep1Brief_lark: "建立 Lark 自建應用", - prereqStep1Desc_lark: "登錄 Lark 開放平台 → 建立企業自建應用", - prereqStep2Brief_lark: "添加機器人能力", - prereqStep2Desc_lark: "開放平台 → 你的應用 → 添加應用能力 → 機器人", - prereqStep3Brief_lark: "配置應用權限", - prereqStep3Desc_lark: "爲應用開通 wiki:wiki:readonly, drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", + prereqStep1Desc_lark: "登入 Lark 開放平臺 → 建立企業自建應用", + prereqStep2Brief_lark: "新增機器人能力", + prereqStep2Desc_lark: "開放平臺 → 你的應用 → 新增應用能力 → 機器人", + prereqStep3Brief_lark: "配置應用許可權", + prereqStep3Desc_lark: "為應用開通 wiki:wiki:readonly, drive:drive:readonly, drive:export:readonly, docx:document:readonly 許可權", prereqStep1Brief_feishu_drive: "建立飛書自建應用", - prereqStep1Desc_feishu_drive: "登錄飛書開放平台 → 建立企業自建應用", - prereqStep2Brief_feishu_drive: "添加機器人能力", - prereqStep2Desc_feishu_drive: "開放平台 → 你的應用 → 添加應用能力 → 機器人", - prereqStep3Brief_feishu_drive: "配置應用權限", - prereqStep3Desc_feishu_drive: "爲應用開通 drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", + prereqStep1Desc_feishu_drive: "登入飛書開放平臺 → 建立企業自建應用", + prereqStep2Brief_feishu_drive: "新增機器人能力", + prereqStep2Desc_feishu_drive: "開放平臺 → 你的應用 → 新增應用能力 → 機器人", + prereqStep3Brief_feishu_drive: "配置應用許可權", + prereqStep3Desc_feishu_drive: "為應用開通 drive:drive:readonly, drive:export:readonly, docx:document:readonly 許可權", prereqStep1Brief_lark_drive: "建立 Lark 自建應用", - prereqStep1Desc_lark_drive: "登錄 Lark 開放平台 → 建立企業自建應用", - prereqStep2Brief_lark_drive: "添加機器人能力", - prereqStep2Desc_lark_drive: "開放平台 → 你的應用 → 添加應用能力 → 機器人", - prereqStep3Brief_lark_drive: "配置應用權限", - prereqStep3Desc_lark_drive: "爲應用開通 drive:drive:readonly, drive:export:readonly, docx:document:readonly 權限", - prereqBotBrief: '爲應用添加「機器人」能力', - prereqBotDesc: '開放平台 → 添加應用能力 → 機器人 → 建立版本併發布', - prereqPermBrief: '開通 API 權限', - prereqOpenConsole: '前往飛書開放平台配置', - prereqMemberBrief: '通過群聊添加爲知識庫成員', - prereqMemberDesc: '建立群聊 → 添加應用爲群機器人 → 將群聊添加爲知識庫成員', + prereqStep1Desc_lark_drive: "登入 Lark 開放平臺 → 建立企業自建應用", + prereqStep2Brief_lark_drive: "新增機器人能力", + prereqStep2Desc_lark_drive: "開放平臺 → 你的應用 → 新增應用能力 → 機器人", + prereqStep3Brief_lark_drive: "配置應用許可權", + prereqStep3Desc_lark_drive: "為應用開通 drive:drive:readonly, drive:export:readonly, docx:document:readonly 許可權", + prereqBotBrief: '為應用新增「機器人」能力', + prereqBotDesc: '開放平臺 → 新增應用能力 → 機器人 → 建立版本併發布', + prereqPermBrief: '開通 API 許可權', + prereqOpenConsole: '前往飛書開放平臺配置', + prereqMemberBrief: '透過群聊新增為知識庫成員', + prereqMemberDesc: '建立群聊 → 新增應用為群機器人 → 將群聊新增為知識庫成員', back: '上一步', next: '下一步', - save: '保存', + save: '儲存', schedule30min: '每 30 分鐘', schedule1h: '每小時', schedule6h: '每 6 小時', @@ -683,7 +683,7 @@ export default { daysAgo: '{n} 天前', resourceType: { wikiSpace: '知識庫空間', - docCategory: '文檔標籤', + docCategory: '文件標籤', book: '語雀知識庫' }, scheduleHuman: { @@ -701,22 +701,22 @@ export default { imaClientId: 'IMA ClientID', imaApiKey: 'IMA APIKey', baseUrl: 'Base URL(可選)', - baseUrlHint: '留空將使用默認公有雲地址;如果是私有部署/企業內網部署,或需要通過反向代理訪問,請填寫自定義地址(例如 https://api-proxy.example.com)', + baseUrlHint: '留空將使用預設公有雲地址;如果是私有部署/企業內網部署,或需要透過反向代理訪問,請填寫自定義地址(例如 https://api-proxy.example.com)', feedUrls: '訂閱源地址', - feedUrlsHint: '每行一個 RSS / Atom 訂閱源地址,支持同時填寫多個', + feedUrlsHint: '每行一個 RSS / Atom 訂閱源地址,支援同時填寫多個', authHeaders: '自定義請求頭(可選)', - authHeadersHint: '用於訪問私有訂閱源,每行一個,格式爲「名稱: 值」,例如 Authorization: Bearer xxxx' + authHeadersHint: '用於訪問私有訂閱源,每行一個,格式為「名稱: 值」,例如 Authorization: Bearer xxxx' }, connectorDesc: { - feishu: '同步飛書知識庫中的文檔、表格、文件', - lark: '同步 Lark 知識庫中的文檔、表格、文件(飛書國際版)', - feishu_drive: "同步飛書雲盤文件夾中的文檔、表格、文件", - lark_drive: "同步 Lark 雲盤文件夾中的文檔、表格、文件(飛書國際版)", + feishu: '同步飛書知識庫中的文件、表格、檔案', + lark: '同步 Lark 知識庫中的文件、表格、檔案(飛書國際版)', + feishu_drive: "同步飛書雲盤資料夾中的文件、表格、檔案", + lark_drive: "同步 Lark 雲盤資料夾中的文件、表格、檔案(飛書國際版)", notion: '同步 Notion 中的頁面和資料庫', - yuque: '同步語雀知識庫中的文檔', - ima: '同步騰訊 IMA 知識庫中的文檔、筆記與文件(暫不支持 AI 會話與視頻解析)', + yuque: '同步語雀知識庫中的文件', + ima: '同步騰訊 IMA 知識庫中的文件、筆記與檔案(暫不支援 AI 會話與影片解析)', rss: '同步 RSS / Atom 訂閱源中的文章', - gitlab: '同步 GitLab 項目中的文件' + gitlab: '同步 GitLab 專案中的檔案' }, connector: { feishu: '飛書', @@ -732,9 +732,9 @@ export default { logDetail: { startTime: '開始時間', endTime: '結束時間', - failedItems: '失敗文檔', - failedItemsMore: '還有 {n} 個失敗文檔未顯示', - docsFailedSummary: '{n} 個文檔同步失敗' + failedItems: '失敗文件', + failedItemsMore: '還有 {n} 個失敗文件未顯示', + docsFailedSummary: '{n} 個文件同步失敗' }, logSummary: { total: '總次數', @@ -755,7 +755,7 @@ export default { canceled: '已取消' }, step: { - selectType: '選擇類型', + selectType: '選擇型別', credentials: '配置憑證', resources: '選擇範圍', strategy: '同步策略' @@ -765,7 +765,7 @@ export default { skip: '跳過已存在' }, status: { - active: '已連接', + active: '已連線', paused: '已暫停', error: '異常' }, @@ -774,22 +774,22 @@ export default { full: '全量同步' }, drive: { - folderTokenLabel: "雲盤文件夾 Token", - folderTokenPlaceholder: "輸入 folder_token 或飛書雲盤文件夾鏈接", - folderTokenRequired: "請輸入具體文件夾的 folder_token,不支持雲空間根目錄", - rootNotSupportedHint: "根目錄不分頁且不返回快捷方式,請選擇具體文件夾", - load: "加載", - shareHint: "需先將該雲盤文件夾分享給應用所在的群,應用才能訪問", - placeholderTitle: "請先加載雲盤文件夾", - placeholderDesc: "在上方輸入 folder_token(或從飛書雲盤文件夾 URL 複製)並點擊「加載」", - loadForbiddenHint: "應用無權訪問該文件夾。請在飛書雲盤中將該文件夾分享給應用所在的群后再試。", - loadAuthHint: "應用憑證無效或缺少雲盤權限,請檢查 App ID / App Secret 及 drive:drive:readonly 等權限。", - loadNotFoundHint: "folder_token 不存在或已刪除,請確認從飛書雲盤文件夾 URL 複製的 token 正確。", + folderTokenLabel: "雲盤資料夾 Token", + folderTokenPlaceholder: "輸入 folder_token 或飛書雲盤資料夾連結", + folderTokenRequired: "請輸入具體資料夾的 folder_token,不支援雲空間根目錄", + rootNotSupportedHint: "根目錄不分頁且不返回快捷方式,請選擇具體資料夾", + load: "載入", + shareHint: "需先將該雲盤資料夾分享給應用所在的群,應用才能訪問", + placeholderTitle: "請先載入雲盤資料夾", + placeholderDesc: "在上方輸入 folder_token(或從飛書雲盤資料夾 URL 複製)並點選「載入」", + loadForbiddenHint: "應用無權訪問該資料夾。請在飛書雲盤中將該資料夾分享給應用所在的群後再試。", + loadAuthHint: "應用憑證無效或缺少雲盤許可權,請檢查 App ID / App Secret 及 drive:drive:readonly 等許可權。", + loadNotFoundHint: "folder_token 不存在或已刪除,請確認從飛書雲盤資料夾 URL 複製的 token 正確。", }, syncError: { - deletion_lookup_failed: '刪除前查找文檔失敗,請查看伺服器日誌', - deletion_failed: '刪除失敗,請查看伺服器日誌', - ingest_failed: '導入失敗,請查看伺服器日誌' + deletion_lookup_failed: '刪除前查詢文件失敗,請檢視伺服器日誌', + deletion_failed: '刪除失敗,請檢視伺服器日誌', + ingest_failed: '匯入失敗,請檢視伺服器日誌' }, }, ollama: { @@ -800,7 +800,7 @@ export default { }, mermaid: { diagram: '圖表', - expand: '全屏查看', + expand: '全屏檢視', zoomIn: '放大', zoomOut: '縮小', reset: '重置', @@ -810,54 +810,54 @@ export default { }, faqManager: { import: { - recentResult: '最近導入結果', - totalData: '導入資料', + recentResult: '最近匯入結果', + totalData: '匯入資料', success: '成功', added: '新增', merged: '合併更新', partialFailed: '部分失敗', failed: '失敗', skipped: '跳過', - progressHint: '正在校驗並導入 FAQ 資料...', + progressHint: '正在校驗並匯入 FAQ 資料...', downloadReasons: '下載原因', appendMode: '追加模式', replaceMode: '替換模式', - importing: '導入中...', - importDone: '導入完成', - importFailed: '導入失敗', + importing: '匯入中...', + importDone: '匯入完成', + importFailed: '匯入失敗', waiting: '等待中...', - importInProgress: '導入正在進行中,請等待完成後再試', + importInProgress: '匯入正在進行中,請等待完成後再試', noFailedRecords: '暫無失敗記錄可下載' } }, agentEditor: { - builtinHint: '這是內置智能體,名稱和描述不可修改,但可以調整配置參數', + builtinHint: '這是內建智慧體,名稱和描述不可修改,但可以調整配置引數', fileTypes: { - label: '支持的文件類型', - desc: '限制可選擇的文件類型,留空表示支持所有類型', - allTypes: '全部類型', - pdf: 'PDF 文檔', - word: 'Word 文檔 (.docx/.doc)', - textLabel: '文本', - text: '純文本文件 (.txt)', - markdown: 'Markdown 文檔', - csv: '逗號分隔值文件', + label: '支援的檔案型別', + desc: '限制可選擇的檔案型別,留空表示支援所有型別', + allTypes: '全部型別', + pdf: 'PDF 文件', + word: 'Word 文件 (.docx/.doc)', + textLabel: '文字', + text: '純文字檔案 (.txt)', + markdown: 'Markdown 文件', + csv: '逗號分隔值檔案', excel: 'Excel 表格 (.xlsx/.xls)', imageLabel: '圖片', - image: '圖片文件 (.jpg/.jpeg/.png)' + image: '圖片檔案 (.jpg/.jpeg/.png)' }, fallback: { fixed: '固定回覆', model: '模型生成' }, dataAnalysis: { - enableLabel: '啓用表格資料分析', - enableDesc: '命中 CSV/Excel 類文件時,先調用大模型生成 DuckDB SQL 進行統計或篩選,再據此回答。會額外增加一次模型調用與幾秒延遲,僅在確實需要時開啓。' + enableLabel: '啟用表格資料分析', + enableDesc: '命中 CSV/Excel 類檔案時,先呼叫大模型生成 DuckDB SQL 進行統計或篩選,再據此回答。會額外增加一次模型呼叫與幾秒延遲,僅在確實需要時開啟。' }, faq: { title: 'FAQ 優先策略', - enableLabel: '啓用 FAQ 優先', - enableDesc: 'FAQ 答案將優先於普通文檔被引用,提高回答準確性', + enableLabel: '啟用 FAQ 優先', + enableDesc: 'FAQ 答案將優先於普通文件被引用,提高回答準確性', thresholdLabel: '直接回答閾值', thresholdDesc: '當問題與 FAQ 相似度超過此值時,直接使用 FAQ 答案', boostLabel: 'FAQ 分數加權', @@ -865,73 +865,73 @@ export default { }, chatParser: { label: '聊天附件解析策略', - desc: '爲不同文件類型指定解析引擎,僅對當前智能體的聊天附件生效', + desc: '為不同檔案型別指定解析引擎,僅對當前智慧體的聊天附件生效', waitTimeoutLabel: '附件解析等待超時(秒)', - waitTimeoutDesc: '單輪問答等待附件解析完成的最長時間,超時後未完成的附件會被跳過。大文件 / 掃描件可調大。0 表示使用全局默認。' + waitTimeoutDesc: '單輪問答等待附件解析完成的最長時間,超時後未完成的附件會被跳過。大檔案 / 掃描件可調大。0 表示使用全域性預設。' }, audioUpload: { label: '語音上傳', - desc: '啓用後用戶可在對話中上傳音頻文件,系統將使用 ASR 模型自動轉錄爲文字', + desc: '啟用後使用者可在對話中上傳音訊檔案,系統將使用 ASR 模型自動轉錄為文字', asrModel: 'ASR 模型', - asrModelDesc: '用於音頻轉錄的語音識別模型,未配置時音頻文件將以佔位符形式傳遞', + asrModelDesc: '用於音訊轉錄的語音識別模型,未配置時音訊檔案將以佔位符形式傳遞', asrModelPlaceholder: '請選擇 ASR 模型' }, imageUpload: { navLabel: '附件上傳', sectionTitle: '附件上傳', - sectionDesc: '配置對話中圖片、文檔、音頻等附件的上傳、解析及對應模型', + sectionDesc: '配置對話中圖片、文件、音訊等附件的上傳、解析及對應模型', label: '圖片上傳', - desc: '啓用後用戶可在對話中上傳圖片並由 VLM 理解', + desc: '啟用後使用者可在對話中上傳圖片並由 VLM 理解', vlmModel: 'VLM 模型', vlmModelDesc: '用於圖片分析的視覺語言模型', vlmModelPlaceholder: '請選擇 VLM 模型', - vlmModelRequired: '啓用圖片上傳時必須選擇 VLM 模型', + vlmModelRequired: '啟用圖片上傳時必須選擇 VLM 模型', imageUnderstandingLabel: '附件圖片理解 / 掃描件 OCR', - imageUnderstandingDesc: '對圖片型 PDF/PPT 等掃描件,當解析不出文字時用 VLM 進行 OCR 識別。開啓會增加解析耗時,默認關閉。', + imageUnderstandingDesc: '對圖片型 PDF/PPT 等掃描件,當解析不出文字時用 VLM 進行 OCR 識別。開啟會增加解析耗時,預設關閉。', ocrMaxPagesLabel: '掃描件 OCR 最大頁數', - ocrMaxPagesDesc: '掃描件送入 VLM 做 OCR 的最大頁數,越多覆蓋越全但越慢、越貴。0 表示使用全局默認。', - useGlobalDefault: '0 = 全局默認', - storageProvider: '圖片存儲', - storageProviderDesc: '選擇圖片文件的存儲引擎,留空則使用系統默認', - storageProviderPlaceholder: '選擇存儲引擎', - storageDefault: '系統默認', + ocrMaxPagesDesc: '掃描件送入 VLM 做 OCR 的最大頁數,越多覆蓋越全但越慢、越貴。0 表示使用全域性預設。', + useGlobalDefault: '0 = 全域性預設', + storageProvider: '圖片儲存', + storageProviderDesc: '選擇圖片檔案的儲存引擎,留空則使用系統預設', + storageProviderPlaceholder: '選擇儲存引擎', + storageDefault: '系統預設', notConfigured: '未配置', - goStorageSettings: '去存儲設置中配置' + goStorageSettings: '去儲存設定中配置' }, llmCallTimeout: { - label: 'LLM 調用超時', - desc: '單次 LLM 調用的最大等待時間(秒),超過此時間後調用將被中止', - hint: '留空或填 0 表示使用默認值(120 秒)', + label: 'LLM 呼叫超時', + desc: '單次 LLM 呼叫的最大等待時間(秒),超過此時間後呼叫將被中止', + hint: '留空或填 0 表示使用預設值(120 秒)', placeholder: '輸入秒數,建議範圍 60-1800' }, mcp: { label: 'MCP 服務', - desc: '選擇 Agent 可以調用的 MCP 服務', + desc: '選擇 Agent 可以呼叫的 MCP 服務', selectLabel: '選擇 MCP 服務', - selectDesc: '選擇要啓用的 MCP 服務', + selectDesc: '選擇要啟用的 MCP 服務', selectPlaceholder: '選擇 MCP 服務', authWaitTimeout: '授權等待超時(秒)', authWaitTimeoutDesc: '對話中觸發 OAuth 授權時,等待你完成授權的最長秒數,超時後自動跳過授權提示(僅對使用 OAuth 的 MCP 服務生效)。', - authWaitTimeoutPlaceholder: '默認 600 秒', + authWaitTimeoutPlaceholder: '預設 600 秒', unavailableService: '不可用服務' }, agentType: { - label: '智能體類型', + label: '智慧體型別', desc: '選擇一個預設會自動填充系統提示詞、工具列表和推薦的知識庫範圍。', defaultNamePattern: '我的{label}', - kbIncompatibleWarn: '已選的 {count} 個知識庫不適用於當前類型,請手動調整', + kbIncompatibleWarn: '已選的 {count} 個知識庫不適用於當前型別,請手動調整', kbMismatch: { - ragQa: '未啓用 RAG 檢索', - wikiQa: '未啓用 Wiki', - hybridRagWiki: '未啓用任何檢索能力', - dataAnalysis: '需啓用 RAG(不支持 FAQ)', - quickAnswer: '快速問答模式需啓用 RAG 檢索', - generic: '不適用於當前類型' + ragQa: '未啟用 RAG 檢索', + wikiQa: '未啟用 Wiki', + hybridRagWiki: '未啟用任何檢索能力', + dataAnalysis: '需啟用 RAG(不支援 FAQ)', + quickAnswer: '快速問答模式需啟用 RAG 檢索', + generic: '不適用於當前型別' } }, im: { - title: 'IM 集成', - description: '將智能體接入即時通訊平台,支持企業微信、飛書、Slack、Telegram、釘釘、Mattermost、微信、QQBot 和雲之家', + title: 'IM 整合', + description: '將智慧體接入即時通訊平臺,支援企業微信、飛書、Slack、Telegram、釘釘、Mattermost、微信、QQBot 和雲之家', feishu: '飛書', lark: 'Lark(飛書國際版)', slack: 'Slack', @@ -942,15 +942,15 @@ export default { wechat: '微信', qqbot: 'QQBot', yunzhijia: '雲之家', - addChannel: '添加渠道', + addChannel: '新增渠道', channelsTitle: 'IM 渠道', disabled: '已停用', editChannel: '編輯渠道', deleteConfirm: '確定刪除該渠道?刪除後無法還原。', channelName: '渠道名稱', channelNamePlaceholder: '輸入渠道名稱,方便辨識', - channelNameDefaultHint: '默認爲平台名稱,可自行修改;留空保存時也會使用平台名稱', - platform: '平台', + channelNameDefaultHint: '預設為平臺名稱,可自行修改;留空儲存時也會使用平臺名稱', + platform: '平臺', mode: '接入模式', outputMode: '輸出模式', outputStream: '流式輸出', @@ -958,79 +958,79 @@ export default { callbackUrl: '回呼地址', empty: '暫無 IM 渠道', unnamed: '未命名渠道', - docLink: '查看接入文檔', + docLink: '檢視接入文件', wecomConsole: '企業微信管理後臺', - feishuConsole: '飛書開放平台', - larkConsole: 'Lark 開放平台', + feishuConsole: '飛書開放平臺', + larkConsole: 'Lark 開放平臺', slackConsole: 'Slack API 控制檯', telegramConsole: 'Telegram BotFather', - dingtalkConsole: '釘釘開放平台', + dingtalkConsole: '釘釘開放平臺', dingtalkCardTemplateId: '卡片模板 ID(可選)', - dingtalkCardTemplateIdHint: '在 open-dev.dingtalk.com/fe/card 建立 AI 卡片模板,啓用後支持打字機效果的流式輸出', - mattermostConsole: 'Mattermost 集成說明', - qqbotConsole: 'QQ 開放平台', - qqbotAPIBaseURLHint: '可選,留空則使用默認正式環境 API 地址。', + dingtalkCardTemplateIdHint: '在 open-dev.dingtalk.com/fe/card 建立 AI 卡片模板,啟用後支援打字機效果的流式輸出', + mattermostConsole: 'Mattermost 整合說明', + qqbotConsole: 'QQ 開放平臺', + qqbotAPIBaseURLHint: '可選,留空則使用預設正式環境 API 地址。', qqbotGatewayURLHint: '可選,留空則自動獲取通用 WebSocket 接入點。', - yunzhijiaConsole: '雲之家開放平台', - yunzhijiaRobotDoc: '機器人消息文檔', - yunzhijiaImageDoc: '開發者平台(圖片功能)', - yunzhijiaModeHint: '支持 Webhook 和 WebSocket;WebSocket 模式無需配置公網回呼地址。', - yunzhijiaSendMsgUrl: '發送消息地址', - yunzhijiaSendMsgUrlHint: '用於機器人回覆消息。', + yunzhijiaConsole: '雲之家開放平臺', + yunzhijiaRobotDoc: '機器人訊息文件', + yunzhijiaImageDoc: '開發者平臺(圖片功能)', + yunzhijiaModeHint: '支援 Webhook 和 WebSocket;WebSocket 模式無需配置公網回呼地址。', + yunzhijiaSendMsgUrl: '傳送訊息地址', + yunzhijiaSendMsgUrlHint: '用於機器人回覆訊息。', yunzhijiaSecret: '簽名金鑰(可選)', - yunzhijiaSecretPlaceholder: '雲之家機器人設置中的 HmacSHA1 簽名金鑰', + yunzhijiaSecretPlaceholder: '雲之家機器人設定中的 HmacSHA1 簽名金鑰', yunzhijiaSecretHint: '配置後,將對傳入的回呼請求進行 HmacSHA1 簽名驗證', yunzhijiaAppId: '應用 App ID(圖片下載)', - yunzhijiaAppIdPlaceholder: '雲之家開放平台應用 App ID', + yunzhijiaAppIdPlaceholder: '雲之家開放平臺應用 App ID', yunzhijiaAppSecret: '應用 App Secret(圖片下載)', - yunzhijiaAppSecretPlaceholder: '雲之家開放平台應用 Secret', - yunzhijiaAppCredentialHint: '用於獲取 appAccessToken 並下載用戶發送的圖片文件。', + yunzhijiaAppSecretPlaceholder: '雲之家開放平臺應用 Secret', + yunzhijiaAppCredentialHint: '用於獲取 appAccessToken 並下載使用者傳送的圖片檔案。', yunzhijiaTimeout: 'HTTP 超時時間(秒)', - yunzhijiaTimeoutHint: '通過發送消息地址回覆的超時時間,默認 10 秒', - yunzhijiaAllowedHostSuffix: '允許的主機後綴', - yunzhijiaAllowedHostSuffixHint: '限制發送消息地址的目標域名後綴,提升安全性(如 yunzhijia.com)', - yunzhijiaSendMsgUrlRequired: '請填寫雲之家機器人設置中的發送消息地址', - mattermostModeHint: 'Mattermost 僅支持 Webhook(出站 Webhook + Bot Token)。', + yunzhijiaTimeoutHint: '透過傳送訊息地址回覆的超時時間,預設 10 秒', + yunzhijiaAllowedHostSuffix: '允許的主機字尾', + yunzhijiaAllowedHostSuffixHint: '限制傳送訊息地址的目標域名字尾,提升安全性(如 yunzhijia.com)', + yunzhijiaSendMsgUrlRequired: '請填寫雲之家機器人設定中的傳送訊息地址', + mattermostModeHint: 'Mattermost 僅支援 Webhook(出站 Webhook + Bot Token)。', mattermostPostToMain: '回覆顯示在頻道主時間線', - mattermostPostToMainHint: '開啓後 Bot 回覆作爲頻道內新帖子;關閉(默認)則作爲原消息的線程回覆,主窗口僅顯示「N 條回覆」。', + mattermostPostToMainHint: '開啟後 Bot 回覆作為頻道內新帖子;關閉(預設)則作為原訊息的執行緒回覆,主視窗僅顯示「N 條回覆」。', modeHint: '推薦使用 WebSocket 方式接入,配置更簡單', - consoleTip: '前往獲取憑證信息', - wecomWSEndpointHint: '可選,私有化部署時填寫自定義 WebSocket 地址,留空則使用默認公有雲地址。內網地址需將域名加入 SSRF_WHITELIST 環境變數', - wecomAPIBaseURLHint: '可選,私有化部署時填寫自定義 API 地址,留空則使用默認公有雲地址。內網地址需將域名加入 SSRF_WHITELIST 環境變數', - feishuAPIBaseURLHint: '可選。若伺服器能直連外網則留空;若需通過代理才能訪問飛書,填寫反向代理地址(如 nginx,http://host:port)。內網地址需將域名加入 SSRF_WHITELIST 環境變數', - fileKnowledgeBase: '文件保存知識庫', + consoleTip: '前往獲取憑證資訊', + wecomWSEndpointHint: '可選,私有化部署時填寫自定義 WebSocket 地址,留空則使用預設公有雲地址。內網地址需將域名加入 SSRF_WHITELIST 環境變數', + wecomAPIBaseURLHint: '可選,私有化部署時填寫自定義 API 地址,留空則使用預設公有雲地址。內網地址需將域名加入 SSRF_WHITELIST 環境變數', + feishuAPIBaseURLHint: '可選。若伺服器能直連外網則留空;若需透過代理才能訪問飛書,填寫反向代理地址(如 nginx,http://host:port)。內網地址需將域名加入 SSRF_WHITELIST 環境變數', + fileKnowledgeBase: '檔案儲存知識庫', fileKnowledgeBasePlaceholder: '選擇知識庫(可選)', - fileKnowledgeBaseHint: '配置後,用戶發送的文件將自動保存到該知識庫中', + fileKnowledgeBaseHint: '配置後,使用者傳送的檔案將自動儲存到該知識庫中', sessionMode: '會話模式', - sessionModeUser: '按用戶(默認)', + sessionModeUser: '按使用者(預設)', sessionModeThread: '按話題', - sessionModeHint: '用戶模式:每個用戶獨立對話,使用 /clear 開始新對話。話題模式:每個消息話題獨立對話,同一話題中多人可協作。', - wechatScanBind: '掃碼綁定微信', + sessionModeHint: '使用者模式:每個使用者獨立對話,使用 /clear 開始新對話。話題模式:每個訊息話題獨立對話,同一話題中多人可協作。', + wechatScanBind: '掃碼繫結微信', wechatScanning: '請使用微信掃描QR 碼', - wechatBindSuccess: '微信綁定成功', - wechatRebind: '重新綁定', - wechatHint: '需要 iOS 微信 8.0.70+ 版本,僅支持單聊消息', + wechatBindSuccess: '微信繫結成功', + wechatRebind: '重新繫結', + wechatHint: '需要 iOS 微信 8.0.70+ 版本,僅支援單聊訊息', wechatQRExpired: 'QR 碼已過期,請重新獲取', - wechatBinding: '綁定中...', - sectionChannel: '渠道信息', - sectionConnection: '連接設置', - sectionCredentials: '平台憑證', - selectPlatform: '選擇平台', - selectPlatformDesc: '選擇要接入的即時通訊平台', - enabled: '啓用渠道', - stepBasic: '基本信息', - stepConnection: '連接設置', - stepKnowledge: '文件存儲', - stepCredentials: '平台憑證', + wechatBinding: '繫結中...', + sectionChannel: '渠道資訊', + sectionConnection: '連線設定', + sectionCredentials: '平臺憑證', + selectPlatform: '選擇平臺', + selectPlatformDesc: '選擇要接入的即時通訊平臺', + enabled: '啟用渠道', + stepBasic: '基本資訊', + stepConnection: '連線設定', + stepKnowledge: '檔案儲存', + stepCredentials: '平臺憑證', sectionAccess: '接入與輸出', - sectionSession: '會話設置', + sectionSession: '會話設定', sectionCallback: '回呼地址', - sectionKnowledge: '文件存儲', - sectionStatus: '運行狀態' + sectionKnowledge: '檔案儲存', + sectionStatus: '執行狀態' }, embed: { title: '網頁嵌入', - description: '將智能體嵌入到您的網頁,訪客可通過頁面內聊天窗口或右下角浮窗發起對話,知識庫範圍跟隨本智能體配置。' + description: '將智慧體嵌入到您的網頁,訪客可透過頁面內聊天視窗或右下角浮窗發起對話,知識庫範圍跟隨本智慧體配置。' }, tools: { thinking: '思考', @@ -1038,45 +1038,45 @@ export default { todoWrite: '制定計劃', todoWriteDesc: '建立結構化的研究計劃', grepChunks: '關鍵詞搜尋', - grepChunksDesc: '快速定位包含特定關鍵詞的文檔和分塊', + grepChunksDesc: '快速定位包含特定關鍵詞的文件和分塊', knowledgeSearch: '語義搜尋', - knowledgeSearchDesc: '理解問題並查找語義相關內容', - listChunks: '查看文檔分塊', - listChunksDesc: '獲取文檔完整分塊內容', + knowledgeSearchDesc: '理解問題並查詢語義相關內容', + listChunks: '檢視文件分塊', + listChunksDesc: '獲取文件完整分塊內容', queryGraph: '查詢知識圖譜', queryGraphDesc: '從知識圖譜中查詢關係', - getDocInfo: '獲取文檔信息', - getDocInfoDesc: '查看文檔元資料', + getDocInfo: '獲取文件資訊', + getDocInfoDesc: '檢視文件元資料', dbQuery: '查詢資料庫', - dbQueryDesc: '查詢資料庫中的信息', + dbQueryDesc: '查詢資料庫中的資訊', dataAnalysis: '資料分析', - dataAnalysisDesc: '理解資料文件並進行資料分析', - dataSchema: '查看資料元信息', - dataSchemaDesc: '獲取表格文件的元信息', + dataAnalysisDesc: '理解資料檔案並進行資料分析', + dataSchema: '檢視資料元資訊', + dataSchemaDesc: '獲取表格檔案的元資訊', requiresKb: '(需要配置知識庫)', - requiresRagKb: '(需要關聯啓用向量/關鍵詞索引的知識庫)', - requiresWikiKb: '(需要關聯啓用 Wiki 能力的知識庫)', + requiresRagKb: '(需要關聯啟用向量/關鍵詞索引的知識庫)', + requiresWikiKb: '(需要關聯啟用 Wiki 能力的知識庫)', wikiSearch: '搜尋 Wiki', wikiSearchDesc: '在 Wiki 知識庫中按關鍵詞/語義搜尋頁面', wikiReadPage: '閱讀 Wiki 頁面', wikiReadPageDesc: '讀取指定 Wiki 頁面的完整內容', - wikiReadSourceDoc: '精讀源文檔', - wikiReadSourceDocDesc: '通過知識點深入閱讀 Wiki 頁面背後的原始文檔', + wikiReadSourceDoc: '精讀源文件', + wikiReadSourceDocDesc: '透過知識點深入閱讀 Wiki 頁面背後的原始文件', wikiFlagIssue: '標記 Wiki 問題', wikiFlagIssueDesc: '標記頁面中存在的事實錯誤或合併衝突問題', wikiWritePage: '建立/覆蓋 Wiki', wikiWritePageDesc: '建立新頁面或完全覆蓋已有 Wiki 頁面', - wikiReplaceText: '局部替換 Wiki', - wikiReplaceTextDesc: '替換 Wiki 頁面中的特定文本', - wikiRenamePage: '重命名 Wiki', - wikiRenamePageDesc: '重命名 Wiki 頁面並自動更新關聯鏈接', + wikiReplaceText: '區域性替換 Wiki', + wikiReplaceTextDesc: '替換 Wiki 頁面中的特定文字', + wikiRenamePage: '重新命名 Wiki', + wikiRenamePageDesc: '重新命名 Wiki 頁面並自動更新關聯連結', wikiDeletePage: '刪除 Wiki', wikiDeletePageDesc: '刪除 Wiki 頁面並自動清理關聯死鏈', - wikiReadIssue: '查看 Wiki 問題', - wikiReadIssueDesc: '查看特定 Wiki 頁面的巡檢問題詳情', + wikiReadIssue: '檢視 Wiki 問題', + wikiReadIssueDesc: '檢視特定 Wiki 頁面的巡檢問題詳情', wikiUpdateIssue: '更新 Wiki 問題', wikiUpdateIssueDesc: '更新 Wiki 頁面問題的處理狀態', - webSearch: '網絡搜尋', + webSearch: '網路搜尋', webFetch: '網頁抓取', groupBase: '基礎', groupRag: '知識庫檢索(RAG)', @@ -1090,45 +1090,45 @@ export default { kbMetricRag: 'RAG 知識庫', kbMetricWiki: 'Wiki 知識庫', statusInactive: '有 {count} 個已勾選工具在當前配置下無法生效', - effectiveLabel: '最終啓用的工具', - effectiveDesc: '根據當前配置計算,這是智能體保存後實際能調用的工具集合', - effectiveEmpty: '當前沒有可用工具,智能體將退化爲純模型問答' + effectiveLabel: '最終啟用的工具', + effectiveDesc: '根據當前配置計算,這是智慧體儲存後實際能呼叫的工具集合', + effectiveEmpty: '當前沒有可用工具,智慧體將退化為純模型問答' }, desc: { - name: '爲智能體設置一個易於識別的名稱', - description: '簡要描述智能體的用途和特點', - systemPrompt: '自定義系統提示詞,定義智能體的行爲和角色', - leaveEmptyDefault: '(留空則使用系統默認)', + name: '為智慧體設定一個易於識別的名稱', + description: '簡要描述智慧體的用途和特點', + systemPrompt: '自定義系統提示詞,定義智慧體的行為和角色', + leaveEmptyDefault: '(留空則使用系統預設)', contextTemplate: '定義如何將檢索到的內容格式化後傳遞給模型', - model: '選擇智能體使用的大語言模型', + model: '選擇智慧體使用的大語言模型', temperature: '控制輸出的隨機性,0 最確定,1 最隨機', maxTokens: '模型生成回覆的最大Token數量', - thinking: '啓用模型的擴展思考能力(需要模型支持)', + thinking: '啟用模型的擴充套件思考能力(需要模型支援)', conversationSection: '配置多輪對話開關與問題改寫開關(改寫提示詞見「提示詞」)', - multiTurn: '開啓後將保留歷史對話上下文', - historyRounds: '保留最近幾輪對話作爲上下文', - rewrite: '多輪對話時自動改寫用戶問題,消解指代和補全省略', - memoryEnabled: '允許該智能體讀取並補充你的長期記憶。關閉後,與它的對話既不會讀取記憶,也不會新增記憶。空間或個人設置關閉時,這裡開啓也不會生效', + multiTurn: '開啟後將保留歷史對話上下文', + historyRounds: '保留最近幾輪對話作為上下文', + rewrite: '多輪對話時自動改寫使用者問題,消解指代和補全省略', + memoryEnabled: '允許該智慧體讀取並補充你的長期記憶。關閉後,與它的對話既不會讀取記憶,也不會新增記憶。空間或個人設定關閉時,這裡開啟也不會生效', queryUnderstandModel: '用於問題理解(改寫與意圖識別)的模型,留空則複用主對話模型', - rewriteSystemPrompt: '用於問題改寫的系統提示詞(留空使用默認)', - rewriteUserPrompt: '用於問題改寫的用戶提示詞模板(留空使用默認)', + rewriteSystemPrompt: '用於問題改寫的系統提示詞(留空使用預設)', + rewriteUserPrompt: '用於問題改寫的使用者提示詞模板(留空使用預設)', selectTools: '選擇 Agent 可以使用的工具', maxIterations: 'Agent 執行任務時的最大推理步驟數', - kbScope: '選擇智能體可訪問的知識庫範圍', - webSearch: '啓用後智能體可以搜尋互聯網獲取信息', - webSearchProvider: '爲此智能體指定搜尋引擎,留空則使用默認搜尋引擎', + kbScope: '選擇智慧體可訪問的知識庫範圍', + webSearch: '啟用後智慧體可以搜尋網際網路獲取資訊', + webSearchProvider: '為此智慧體指定搜尋引擎,留空則使用預設搜尋引擎', webSearchMaxResults: '每次搜尋返回的最大結果數量', webFetchEnabled: 'Rerank 後自動抓取排名靠前的網頁完整內容,提升回答質量', webFetchTopN: 'Rerank 後最多抓取幾個網頁的完整內容', retrievalSection: '配置知識庫檢索召回、排序與 FAQ 優先策略(ReRank 模型見「模型配置」)', - queryExpansion: '自動擴展查詢詞以提高召回率', + queryExpansion: '自動擴充套件查詢詞以提高召回率', embeddingTopK: '向量檢索返回的最大結果數量', keywordThreshold: '關鍵詞檢索的最低相關性分數', vectorThreshold: '向量檢索的最低相似度分數', rerankTopK: '重排序後保留的最大結果數量', rerankThreshold: '重排序的最低相關性分數', fallbackStrategy: '當無法從知識庫找到相關內容時的處理方式', - fallbackResponse: '當無法回答時返回的固定文本', + fallbackResponse: '當無法回答時返回的固定文字', fallbackPrompt: '當無法從知識庫找到答案時,引導模型生成回覆的提示詞' }, selection: { @@ -1142,12 +1142,12 @@ export default { context: '上下文模板', intent: '意圖提示詞', rewriteSystem: '改寫 · 系統', - rewriteUser: '改寫 · 用戶', + rewriteUser: '改寫 · 使用者', fallback: '檢索兜底' }, intentPrompts: { title: '意圖提示詞', - sectionDesc: '爲不同查詢意圖配置專屬系統提示詞;未自定義時使用系統默認模板', + sectionDesc: '為不同查詢意圖配置專屬系統提示詞;未自定義時使用系統預設模板', intentLabel: '意圖', promptPlaceholder: '輸入自定義系統提示詞...', customized: '已自定義', @@ -1155,36 +1155,36 @@ export default { }, placeholders: { available: '可用變數:', - clickToInsert: '(點擊插入)', - hint: '(點擊插入,或輸入 {\'{{\'} 喚起列表)' + clickToInsert: '(點選插入)', + hint: '(點選插入,或輸入 {\'{{\'} 喚起列表)' }, questionSuggestions: { navLabel: '問題推薦', title: '對話問題推薦', - description: '統一配置開場問題與回答後的上下文追問;渠道可關閉展示,但不能改寫智能體策略。', + description: '統一配置開場問題與回答後的上下文追問;渠道可關閉展示,但不能改寫智慧體策略。', startersTitle: '開場推薦', followUpsTitle: '回答後推薦', enableStarters: '展示開場問題', - enableStartersDesc: '在用戶首次提問前展示,可使用運營配置、知識庫或混合來源。', + enableStartersDesc: '在使用者首次提問前展示,可使用運營配置、知識庫或混合來源。', enableFollowUps: '生成回答後推薦', - enableFollowUpsDesc: '每次完整回答結束後異步生成,不阻塞主回答。啓用後會產生額外模型調用。', + enableFollowUpsDesc: '每次完整回答結束後非同步生成,不阻塞主回答。啟用後會產生額外模型呼叫。', sourceMode: '內容來源', count: '展示數量', curatedItems: '運營配置問題', curatedItemsDesc: '用於開場推薦;混合模式下優先展示。', - addItem: '添加問題', + addItem: '新增問題', model: '生成模型', modelDesc: '留空時使用本輪對話模型。', - advancedSettings: '高級生成設置', + advancedSettings: '高階生成設定', displayRules: '展示與兜底規則', contextTurns: '上下文輪數', - categories: '問題類型', + categories: '問題型別', instruction: '附加生成要求', - instructionPlaceholder: '例如:優先推薦能幫助用戶落地執行的問題,避免寬泛問題或重複當前回答…', + instructionPlaceholder: '例如:優先推薦能幫助使用者落地執行的問題,避免寬泛問題或重複當前回答…', suppressFallback: '兜底回答後不展示', suppressQuestion: '回答本身以提問結尾時不展示', knowledgeFallback: '模型生成失敗時使用知識庫候選', - allowRegenerate: '允許用戶換一批', + allowRegenerate: '允許使用者換一批', modeCurated: '運營配置', modeKnowledge: '知識庫', modeGenerated: '模型生成', @@ -1196,55 +1196,55 @@ export default { navGroups: { basic: '基礎', knowledge: '知識檢索', - capability: '能力擴展', - integration: '發佈集成' + capability: '能力擴充套件', + integration: '釋出整合' } }, agentStream: { saveToKb: { - emptyContent: '當前回答爲空,無法保存到知識庫', - editorOpened: '已打開編輯器,請選擇知識庫後保存' + emptyContent: '當前回答為空,無法儲存到知識庫', + editorOpened: '已開啟編輯器,請選擇知識庫後儲存' }, copy: { - emptyContent: '當前回答爲空,無法複製', - success: '已複製到剪貼板', + emptyContent: '當前回答為空,無法複製', + success: '已複製到剪貼簿', failed: '複製失敗,請手動複製' }, toolStatus: { - calling: '正在調用 {name}...', + calling: '正在呼叫 {name}...', searchKb: '檢索知識庫', searchKbFailed: '檢索知識庫失敗', - searchMixed: '檢索知識庫和網絡', + searchMixed: '檢索知識庫和網路', searchMixedFailed: '檢索失敗', - webSearch: '網絡搜尋', - webSearchFailed: '網絡搜尋失敗', + webSearch: '網路搜尋', + webSearchFailed: '網路搜尋失敗', grepSearch: '搜尋關鍵詞', grepSearchFailed: '搜尋關鍵詞失敗', - getDocInfo: '獲取文檔信息', - getDocInfoFailed: '獲取文檔信息失敗', - viewDocument: '查看文檔', + getDocInfo: '獲取文件資訊', + getDocInfoFailed: '獲取文件資訊失敗', + viewDocument: '檢視文件', thinkingDone: '完成思考', thinkingFailed: '思考失敗', updateTodos: '更新任務列表', updateTodosFailed: '更新任務列表失敗', - imageAnalyzing: '正在查看圖片內容...', - imageAnalysisDone: '已查看圖片內容', - imageAnalysisFailed: '圖片內容查看失敗', + imageAnalyzing: '正在檢視圖片內容...', + imageAnalysisDone: '已檢視圖片內容', + imageAnalysisFailed: '圖片內容檢視失敗', attachmentParsing: '正在解析附件...', attachmentParsingDone: '已解析附件', attachmentParsingFailed: '附件解析失敗', queryUnderstanding: '正在理解問題...', queryUnderstandDone: '已完成問題理解', - called: '調用 {name}', - calledFailed: '調用 {name} 失敗' + called: '呼叫 {name}', + calledFailed: '呼叫 {name} 失敗' }, ragPipeline: { searching: '正在檢索知識庫...', searchingWithQuery: '正在檢索知識庫:「{query}」', - searchingWeb: '正在檢索網絡...', - searchingWebWithQuery: '正在檢索網絡:「{query}」', - searchingMixed: '正在檢索知識庫和網絡...', - searchingMixedWithQuery: '正在檢索知識庫和網絡:「{query}」', + searchingWeb: '正在檢索網路...', + searchingWebWithQuery: '正在檢索網路:「{query}」', + searchingMixed: '正在檢索知識庫和網路...', + searchingMixedWithQuery: '正在檢索知識庫和網路:「{query}」', searchDone: '檢索完成' }, attachmentParsing: { @@ -1253,7 +1253,7 @@ export default { noneReady: '沒有可用的已解析附件' }, knowledgeChunksList: { - chunkRange: '已加載 {fetched} / {total} 個分塊', + chunkRange: '已載入 {fetched} / {total} 個分塊', page: '第 {page} 頁,每頁 {pageSize} 個' }, grepResults: { @@ -1265,11 +1265,11 @@ export default { search: { noResults: '未找到匹配的內容', candidatesBelowThreshold: '命中 {count} 條候選,相關性不足,未用於回答', - foundResultsFromFiles: '找到 {count} 個結果,來自 {files} 個文件', + foundResultsFromFiles: '找到 {count} 個結果,來自 {files} 個檔案', foundResults: '找到 {count} 個結果', - foundMixedResults: '找到 {count} 個結果({docCount} 篇文檔,{webCount} 條網頁)', + foundMixedResults: '找到 {count} 個結果({docCount} 篇文件,{webCount} 條網頁)', webResults: '找到 {count} 條網頁', - grepSummary: '找到 {chunks} 個匹配片段,來自 {docs} 個文檔' + grepSummary: '找到 {chunks} 個匹配片段,來自 {docs} 個文件' }, plan: { inProgress: '進行中', @@ -1277,36 +1277,36 @@ export default { completed: '已完成' }, toolSummary: { - getDocument: '獲取文檔:{title}', - document: '文檔', - listChunks: '查看 {title}', - listFaqEntry: '查看 FAQ:{question}', + getDocument: '獲取文件:{title}', + document: '文件', + listChunks: '檢視 {title}', + listFaqEntry: '檢視 FAQ:{question}', deepThinking: '深度思考' }, citation: { notFound: '未找到內容', - loadFailed: '加載失敗', - noKbForWiki: '無法識別關聯的知識庫,無法打開 Wiki' + loadFailed: '載入失敗', + noKbForWiki: '無法識別關聯的知識庫,無法開啟 Wiki' }, tools: { searchKnowledge: '知識庫檢索', grepChunks: '搜尋關鍵詞', - webSearch: '網絡搜尋', + webSearch: '網路搜尋', webFetch: '網頁抓取', - getDocumentInfo: '獲取文檔信息', - listKnowledgeChunks: '查看知識分塊', - getRelatedDocuments: '查找相關文檔', - getDocumentContent: '獲取文檔內容', - wikiReadSourceDoc: '精讀源文檔', + getDocumentInfo: '獲取文件資訊', + listKnowledgeChunks: '檢視知識分塊', + getRelatedDocuments: '查詢相關文件', + getDocumentContent: '獲取文件內容', + wikiReadSourceDoc: '精讀源文件', todoWrite: '計劃管理', knowledgeGraphExtract: '知識圖譜抽取', thinking: '思考', attachmentParsing: '解析附件', - imageAnalysis: '查看圖片內容', + imageAnalysis: '檢視圖片內容', queryUnderstand: '理解問題', queryKnowledgeGraph: '知識圖譜查詢', readSkill: '讀取技能', - executeSkillScript: '執行技能腳本', + executeSkillScript: '執行技能指令碼', dataAnalysis: '資料分析', dataSchema: '資料結構', databaseQuery: '資料庫查詢' @@ -1317,7 +1317,7 @@ export default { targetWithTool: '{service} › {tool}', titleWithService: 'OAuth 授權 · {service}', titleWithTool: 'OAuth 授權 · {service} › {tool}', - desc: '點擊授權將打開新窗口完成登錄,授權成功後會自動繼續本次工具調用。', + desc: '點選授權將開啟新視窗完成登入,授權成功後會自動繼續本次工具呼叫。', authorize: '去授權', skip: '跳過', countdownShort: '{seconds}s', @@ -1330,44 +1330,44 @@ export default { skipFailed: '跳過失敗,請重試' }, toolApproval: { - waiting: '等待審覈 · {target}', - waitingStatus: '等待審覈', + waiting: '等待稽核 · {target}', + waitingStatus: '等待稽核', targetWithTool: '{service} › {tool}', - titleWithTarget: '人工審覈 · {service} › {tool}', - argsLabel: '調用參數', + titleWithTarget: '人工稽核 · {service} › {tool}', + argsLabel: '呼叫引數', argsModified: '已修改', countdownShort: '{seconds}s', - approve: '通過並執行', + approve: '透過並執行', reject: '拒絕', - approvedTag: '已通過', + approvedTag: '已透過', rejectedTag: '已拒絕', - invalidJson: '參數不是合法 JSON', + invalidJson: '引數不是合法 JSON', submitted: '已提交', submitFailed: '提交失敗', - userRejected: '用戶拒絕' + userRejected: '使用者拒絕' } }, kbSettings: { parser: { title: '解析引擎', - description: '爲不同文件類型選擇文檔解析引擎。未配置的文件類型將使用內置解析引擎。', - loading: '加載中...', - noEngineAvailable: '暫無可用解析引擎,或文檔解析服務未配置。', - default: '默認', + description: '為不同檔案型別選擇文件解析引擎。未配置的檔案型別將使用內建解析引擎。', + loading: '載入中...', + noEngineAvailable: '暫無可用解析引擎,或文件解析服務未配置。', + default: '預設', goConfig: '前往配置 →', noEngine: '無可用引擎', - fileTypePdf: 'PDF 文檔', - fileTypeWord: 'Word 文檔', - fileTypePpt: '演示文稿', + fileTypePdf: 'PDF 文件', + fileTypeWord: 'Word 文件', + fileTypePpt: '簡報', fileTypeExcel: 'Excel 表格', - xlsxFirstRowAsHeader: '將首行作爲列標題,並保留在每行上下文中', + xlsxFirstRowAsHeader: '將首行作為列標題,並保留在每行上下文中', fileTypeEbook: '電子書', fileTypeWebArchive: '網頁歸檔', - fileTypeCsv: 'CSV 文件', - fileTypeText: '純文本', - fileTypeJson: 'JSON 文件', + fileTypeCsv: 'CSV 檔案', + fileTypeText: '純文字', + fileTypeJson: 'JSON 檔案', fileTypeImage: '圖片', - fileTypeAudiovisual: '音頻', + fileTypeAudiovisual: '音訊', engines: { opendataloader: { name: 'OpenDataLoader', @@ -1375,11 +1375,11 @@ export default { }, markitdown: { name: 'MarkItDown', - desc: 'Microsoft MarkItDown 文檔轉換工具(支持 PDF/Office/HTML 等)' + desc: 'Microsoft MarkItDown 文件轉換工具(支援 PDF/Office/HTML 等)' }, weknoracloud: { name: 'WeKnora Cloud', - desc: '使用 WeKnora Cloud 進行文檔解析' + desc: '使用 WeKnora Cloud 進行文件解析' }, paddleocr_vl_cloud: { name: 'PaddleOCR-VL Cloud', @@ -1402,40 +1402,40 @@ export default { desc: '簡單格式 & 圖片解析(無需外部服務)' }, builtin: { - name: '內置', - desc: 'DocReader 內置解析引擎(docx/pdf/xlsx 等複雜格式)' + name: '內建', + desc: 'DocReader 內建解析引擎(docx/pdf/xlsx 等複雜格式)' } } }, storage: { - title: '存儲引擎', - selectDescription: '選擇此知識庫綁定的具體存儲實例。', - defaultTag: '默認', - instanceLabel: '存儲實例', - instanceDesc: '同一種存儲類型可以配置多個不同 Endpoint、Bucket 或憑證的實例。', - migrateHint: '知識庫中已有文件,需通過存儲遷移流程才能更換實例。', - manageInstances: '管理存儲實例', - localStorage: '本地存儲', - loading: '加載中...' + title: '儲存引擎', + selectDescription: '選擇此知識庫繫結的具體儲存例項。', + defaultTag: '預設', + instanceLabel: '儲存例項', + instanceDesc: '同一種儲存型別可以配置多個不同 Endpoint、Bucket 或憑證的例項。', + migrateHint: '知識庫中已有檔案,需透過儲存遷移流程才能更換例項。', + manageInstances: '管理儲存例項', + localStorage: '本地儲存', + loading: '載入中...' }, vectorStore: { - title: '向量存儲', - description: '選擇此知識庫要寫入的向量存儲。綁定不可更改 — 如需將現有 KB 遷移到其他存儲,請建立新 KB 並重新索引。', - loading: '正在加載向量存儲列表...', - engineLabel: '向量存儲', - engineDesc: '從全局向量存儲配置中選擇,或保持系統默認以使用空間的 RETRIEVE_DRIVER 引擎。', - boundLabel: '已綁定的向量存儲', - systemDefault: '系統默認', - immutableHint: '建立後不可更改。如需遷移,請建立一個綁定到目標存儲的新 KB 並重新索引。', - immutableEdit: '向量存儲綁定在建立後無法更改。', - unavailableHint: '綁定的向量存儲當前不可用,請在設置 → 向量存儲中檢查其連接配置。', - goGlobalSettings: '前往向量存儲設置' + title: '向量儲存', + description: '選擇此知識庫要寫入的向量儲存。繫結不可更改 — 如需將現有 KB 遷移到其他儲存,請建立新 KB 並重新索引。', + loading: '正在載入向量儲存列表...', + engineLabel: '向量儲存', + engineDesc: '從全域性向量儲存配置中選擇,或保持系統預設以使用空間的 RETRIEVE_DRIVER 引擎。', + boundLabel: '已繫結的向量儲存', + systemDefault: '系統預設', + immutableHint: '建立後不可更改。如需遷移,請建立一個繫結到目標儲存的新 KB 並重新索引。', + immutableEdit: '向量儲存繫結在建立後無法更改。', + unavailableHint: '繫結的向量儲存當前不可用,請在設定 → 向量儲存中檢查其連線配置。', + goGlobalSettings: '前往向量儲存設定' } }, vectorStoreBadge: { - systemDefault: '系統默認', + systemDefault: '系統預設', sharedFromOrg: '來自其他組織的共享', - unknownStore: '未知存儲', + unknownStore: '未知儲存', unavailable: '不可用' }, tools: { @@ -1443,36 +1443,36 @@ export default { knowledgeSearch: '知識庫搜尋', grepChunks: '搜尋關鍵詞', getChunkDetail: '獲取片段詳情', - listKnowledgeChunks: '查看知識分塊', + listKnowledgeChunks: '檢視知識分塊', listKnowledgeBases: '列出知識庫', - getDocumentInfo: '獲取文檔信息', + getDocumentInfo: '獲取文件資訊', queryKnowledgeGraph: '查詢知識圖譜', think: '深度思考', todoWrite: '制定計劃' }, commandPalette: { - placeholder: '搜尋知識庫、文件、對話…', + placeholder: '搜尋知識庫、檔案、對話…', clearRecent: '清除', - retrieval: '檢索參數', + retrieval: '檢索引數', untitledSession: '未命名對話', hotkey: { select: '選擇', - enter: '打開', - cmdNumber: '直接打開', + enter: '開啟', + cmdNumber: '直接開啟', cmdEnter: '發起對話', esc: '關閉' }, empty: { noResults: '沒有找到匹配結果', askAi: '直接向 AI 提問', - adjustRetrieval: '調整檢索參數' + adjustRetrieval: '調整檢索引數' }, quick: { newChat: '新建對話', - knowledgeBases: '打開知識庫', - agents: '打開智能體', - organizations: '打開共享空間', - settings: '打開設置', + knowledgeBases: '開啟知識庫', + agents: '開啟智慧體', + organizations: '開啟共享空間', + settings: '開啟設定', productTour: '新手引導' }, match: { @@ -1480,10 +1480,10 @@ export default { keyword: '關鍵字' }, group: { - chunks: '知識庫文件', - messages: '對話消息', + chunks: '知識庫檔案', + messages: '對話訊息', kbs: '知識庫', - agents: '智能體', + agents: '智慧體', sessionsByTitle: '對話(按標題)', commands: '命令', recent: '最近搜尋', @@ -1496,19 +1496,19 @@ export default { }, preview: { tab: '預覽', - loading: '正在加載文檔預覽...', - loadFailed: '加載文檔預覽失敗', + loading: '正在載入文件預覽...', + loadFailed: '載入文件預覽失敗', retry: '重試', - unsupported: '該文件類型暫不支持在線預覽', - unsupportedHint: '請下載文件後使用本地應用查看', + unsupported: '該檔案型別暫不支援線上預覽', + unsupportedHint: '請下載檔案後使用本地應用檢視', fullscreen: '全屏預覽', exitFullscreen: '退出全屏', - audioLoading: '加載音頻中…', - audioNotSupported: '您的瀏覽器不支持音頻播放' + audioLoading: '載入音訊中…', + audioNotSupported: '您的瀏覽器不支援音訊播放' }, organization: { title: '共享空間', - subtitle: '建立或加入共享空間,讓多個空間互相協作,共享知識庫與智能體', + subtitle: '建立或加入共享空間,讓多個空間互相協作,共享知識庫與智慧體', createOrg: '建立共享空間', joinOrg: '加入共享空間', name: '共享空間名稱', @@ -1516,7 +1516,7 @@ export default { nameRequired: '請輸入共享空間名稱', avatar: '共享空間頭像', avatarClear: '清除', - avatarPickerHint: '選擇 Emoji 作爲共享空間頭像', + avatarPickerHint: '選擇 Emoji 作為共享空間頭像', description: '共享空間描述', descriptionPlaceholder: '請輸入共享空間描述(選填)', noDescription: '暫無描述', @@ -1525,9 +1525,9 @@ export default { inviteCode: '邀請碼', inviteCodePlaceholder: '請輸入邀請碼', inviteCodeRequired: '請輸入邀請碼', - refreshInviteCode: '刷新邀請碼', - inviteCodeRefreshed: '邀請碼已刷新', - inviteCodeRefreshFailed: '刷新邀請碼失敗', + refreshInviteCode: '重新整理邀請碼', + inviteCodeRefreshed: '邀請碼已重新整理', + inviteCodeRefreshFailed: '重新整理邀請碼失敗', leave: '退出共享空間', leaveConfirmTitle: '退出共享空間', leaveConfirmMessage: '確定要退出共享空間「{name}」嗎?退出後將無法訪問該共享空間共享的知識庫。', @@ -1548,19 +1548,19 @@ export default { memberRemoved: '成員已移除', memberRemoveFailed: '移除成員失敗', empty: '您還沒有加入任何共享空間', - emptyDesc: '建立一個共享空間或通過邀請碼加入現有共享空間', + emptyDesc: '建立一個共享空間或透過邀請碼加入現有共享空間', createdByMe: '我建立的', joinedByMe: '我加入的', emptyCreated: '您還沒有建立任何共享空間', - emptyCreatedDesc: '點擊「建立共享空間」建立一個新的共享空間', + emptyCreatedDesc: '點選「建立共享空間」建立一個新的共享空間', emptyJoined: '您還沒有加入任何共享空間', - emptyJoinedDesc: '通過邀請碼加入現有共享空間', + emptyJoinedDesc: '透過邀請碼加入現有共享空間', share: { title: '共享到共享空間', selectOrg: '選擇共享空間', selectOrgPlaceholder: '請選擇要共享的共享空間', - permission: '權限', - permissionTip: '可編輯權限允許成員修改知識庫內容,只讀權限僅允許檢索和問答', + permission: '許可權', + permissionTip: '可編輯許可權允許成員修改知識庫內容,只讀許可權僅允許檢索和問答', shareSuccess: '已共享', shareFailed: '共享失敗', unshareSuccess: '已取消共享', @@ -1568,80 +1568,80 @@ export default { sharedTo: '已共享到', noShares: '尚未共享到任何共享空間', searchPlaceholder: '搜尋共享空間…', - loading: '加載中…', + loading: '載入中…', emptySearch: '未找到匹配「{q}」的共享空間', addShareDialogTitle: '共享到共享空間', unshareAction: '取消共享', sharedKnowledgeBase: '共享知識庫', - agentShareDesc: '將智能體共享到共享空間,共享空間成員可使用該智能體', + agentShareDesc: '將智慧體共享到共享空間,共享空間成員可使用該智慧體', sharedFrom: '來自', permissionReadonly: '只讀', permissionEditable: '可編輯', columns: { space: '共享空間', - permission: '權限', + permission: '許可權', sharedAt: '共享時間', operations: '操作' } }, addMember: { - button: '添加成員', - dialogTitle: '添加成員', - tipTenant: '共享空間的成員單位是空間:選定一個空間後,其下全部用戶都將獲得訪問權限。下方搜尋結果按空間去重。', + button: '新增成員', + dialogTitle: '新增成員', + tipTenant: '共享空間的成員單位是空間:選定一個空間後,其下全部使用者都將獲得訪問許可權。下方搜尋結果按空間去重。', searchTenant: '選擇空間', searchTenantPlaceholder: '輸入空間名搜尋...', - searchTenantHint: '輸入至少 2 個字符開始搜尋,按空間去重並自動過濾已加入的空間', + searchTenantHint: '輸入至少 2 個字元開始搜尋,按空間去重並自動過濾已加入的空間', selectRole: '分配角色', - confirmBtn: '添加', - success: '成員添加成功', - failed: '添加失敗' + confirmBtn: '新增', + success: '成員新增成功', + failed: '新增失敗' }, upgrade: { requestUpgrade: '申請升級', - pending: '審覈中', + pending: '稽核中', dialogTitle: '申請升級', - dialogDesc: '管理員審覈通過後更新您的角色。', + dialogDesc: '管理員稽核透過後更新您的角色。', currentRole: '當前角色', selectRole: '申請角色', reason: '申請理由(選填)', - reasonPlaceholder: '請簡要說明申請更高權限的原因...', + reasonPlaceholder: '請簡要說明申請更高許可權的原因...', submitBtn: '提交申請', - submitSuccess: '權限升級申請已提交,等待管理員審覈', + submitSuccess: '許可權升級申請已提交,等待管理員稽核', submitFailed: '提交申請失敗' }, editor: { - navBasic: '基本信息', - navPermissions: '權限說明', + navBasic: '基本資訊', + navPermissions: '許可權說明', navJoin: '加入共享空間', - basicTitle: '基本信息', - basicDesc: '設置共享空間的名稱和描述,便於成員識別', - nameTip: '建議使用團隊或項目名稱,便於成員識別', + basicTitle: '基本資訊', + basicDesc: '設定共享空間的名稱和描述,便於成員識別', + nameTip: '建議使用團隊或專案名稱,便於成員識別', descriptionTip: '描述共享空間的用途和目標,幫助成員瞭解共享空間', - permissionsTitle: '成員權限', - permissionsDesc: '瞭解共享空間中不同角色對知識庫與智能體的權限範圍', - permissionFeature: '權限功能', - fullAccess: '完整權限', - editAccess: '編輯權限', - viewAccess: '只讀權限', - adminPerm1: '管理共享空間設置、成員及知識庫與智能體共享', - adminPerm2: '共享和管理知識庫與智能體', + permissionsTitle: '成員許可權', + permissionsDesc: '瞭解共享空間中不同角色對知識庫與智慧體的許可權範圍', + permissionFeature: '許可權功能', + fullAccess: '完整許可權', + editAccess: '編輯許可權', + viewAccess: '只讀許可權', + adminPerm1: '管理共享空間設定、成員及知識庫與智慧體共享', + adminPerm2: '共享和管理知識庫與智慧體', adminPerm3: '編輯共享知識庫內容', - adminPerm4: '查看和檢索知識庫', - useSharedAgentsPerm: '使用共享智能體', + adminPerm4: '檢視和檢索知識庫', + useSharedAgentsPerm: '使用共享智慧體', shareKBPerm: '共享知識庫到共享空間', editorPerm1: '編輯共享知識庫內容', - editorPerm2: '查看和檢索知識庫', - editorPerm3: '管理共享空間設置和成員', - viewerPerm1: '查看和檢索知識庫', + editorPerm2: '檢視和檢索知識庫', + editorPerm3: '管理共享空間設定和成員', + viewerPerm1: '檢視和檢索知識庫', viewerPerm2: '編輯知識庫內容', - viewerPerm3: '管理共享空間設置', - ownerNote: '作爲共享空間建立者,您將自動成爲共享空間的管理員,擁有完整權限。', + viewerPerm3: '管理共享空間設定', + ownerNote: '作為共享空間建立者,您將自動成為共享空間的管理員,擁有完整許可權。', joinTitle: '加入共享空間', - joinDesc: '通過邀請碼加入現有共享空間,獲得知識庫與智能體訪問權限', + joinDesc: '透過邀請碼加入現有共享空間,獲得知識庫與智慧體訪問許可權', joinIllustration: '輸入共享空間管理員提供的邀請碼即可加入', inviteCodeTip: '邀請碼由共享空間管理員生成,請向他們索取', howToGetCode: '如何獲取邀請碼?', - step1: '聯繫您要加入的共享空間管理員', + step1: '聯絡您要加入的共享空間管理員', step2: '請求他們分享共享空間邀請碼', step3: '將邀請碼貼上到上方輸入框' }, @@ -1651,27 +1651,27 @@ export default { resources: '共享資源' }, settings: { - editTitle: '共享空間設置', - membersDesc: '查看和管理共享空間成員、調整成員角色。成員的最小單位是空間——加入後該空間下的所有用戶都將獲得訪問權限。', - permissionsIconHint: '查看各角色權限說明', - sharedDesc: '查看共享到此共享空間的所有知識庫', + editTitle: '共享空間設定', + membersDesc: '檢視和管理共享空間成員、調整成員角色。成員的最小單位是空間——加入後該空間下的所有使用者都將獲得訪問許可權。', + permissionsIconHint: '檢視各角色許可權說明', + sharedDesc: '檢視共享到此共享空間的所有知識庫', noSharedKB: '暫無共享的知識庫', - noSharedKBTip: '知識庫擁有者可以在知識庫設置中將其共享到此共享空間', - sharedAgents: '共享智能體', - noSharedAgents: '暫無共享的智能體', - sharedAgentsDesc: '已共享到本共享空間的智能體,成員可在對話中使用', - sharedAgentsKbHint: '智能體綁定的知識庫僅在成員使用該智能體對話時可 {\'@\'} 使用(只讀),不會出現在「知識庫列表」中。若需成員在列表中看到或編輯知識庫,請單獨將知識庫共享到本共享空間。', - sharedAgentsKbHintShort: '智能體綁定知識僅對話內只讀;需在列表看到或編輯請單獨共享知識庫', - noSharedAgentsTip: '管理員可將智能體從智能體設置中共享到本共享空間', - sharePermissionLabel: '共享空間權限', - myPermissionLabel: '生效權限', - permissionCalcFormula: '共享空間權限爲共享時設定;生效權限取共享空間權限與你的共享空間角色中較低值', - permissionCalcTip: '生效權限取共享空間權限與你的共享空間角色中較低值;只讀成員對此庫最多隻讀。', + noSharedKBTip: '知識庫擁有者可以在知識庫設定中將其共享到此共享空間', + sharedAgents: '共享智慧體', + noSharedAgents: '暫無共享的智慧體', + sharedAgentsDesc: '已共享到本共享空間的智慧體,成員可在對話中使用', + sharedAgentsKbHint: '智慧體繫結的知識庫僅在成員使用該智慧體對話時可 {\'@\'} 使用(只讀),不會出現在「知識庫列表」中。若需成員在列表中看到或編輯知識庫,請單獨將知識庫共享到本共享空間。', + sharedAgentsKbHintShort: '智慧體繫結知識僅對話內只讀;需在列表看到或編輯請單獨共享知識庫', + noSharedAgentsTip: '管理員可將智慧體從智慧體設定中共享到本共享空間', + sharePermissionLabel: '共享空間許可權', + myPermissionLabel: '生效許可權', + permissionCalcFormula: '共享空間許可權為共享時設定;生效許可權取共享空間許可權與你的共享空間角色中較低值', + permissionCalcTip: '生效許可權取共享空間許可權與你的共享空間角色中較低值;只讀成員對此庫最多隻讀。', inviteMembers: '邀請成員', - inviteMembersDesc: '通過邀請碼或鏈接邀請他人加入共享空間', - inviteLink: '邀請鏈接', - inviteLinkValidity: '邀請鏈接有效期', - inviteLinkValidityDesc: '新生成的邀請鏈接的有效期,僅影響之後刷新生成的鏈接', + inviteMembersDesc: '透過邀請碼或連結邀請他人加入共享空間', + inviteLink: '邀請連結', + inviteLinkValidity: '邀請連結有效期', + inviteLinkValidityDesc: '新生成的邀請連結的有效期,僅影響之後重新整理生成的連結', validity1Day: '1 天', validity7Days: '7 天', validity30Days: '30 天', @@ -1681,26 +1681,26 @@ export default { remainingValidityExpired: '已過期', removeShareFromOrg: '從共享空間中移除', removeShareConfirm: '確定將「{name}」從本共享空間中移除?移除後共享空間成員將無法再訪問該知識庫。', - removeAgentShareConfirm: '確定將「{name}」從本共享空間中移除?移除後共享空間成員將無法再訪問該智能體。', + removeAgentShareConfirm: '確定將「{name}」從本共享空間中移除?移除後共享空間成員將無法再訪問該智慧體。', removeShareSuccess: '已從共享空間中移除', removeShareFailed: '移除失敗,請重試', - requireApproval: '需要審覈', - requireApprovalDesc: '開啓後,新成員加入需要管理員審覈', + requireApproval: '需要稽核', + requireApprovalDesc: '開啟後,新成員加入需要管理員稽核', searchable: '開放可被搜尋', - searchableDesc: '開啓後,共享空間將出現在「加入共享空間」的搜尋列表中,他人可搜尋並申請加入,無需邀請碼', + searchableDesc: '開啟後,共享空間將出現在「加入共享空間」的搜尋列表中,他人可搜尋並申請加入,無需邀請碼', memberLimit: '成員數量上限', - memberLimitDesc: '超過上限後無法再添加新成員;設爲 0 表示不限制', + memberLimitDesc: '超過上限後無法再新增新成員;設為 0 表示不限制', memberLimitPlaceholder: '0 表示不限制', memberLimitHint: '當前成員數:{count}', joinRequests: '加入申請', - joinRequestsDesc: '審覈待加入共享空間的申請', - noPendingRequests: '暫無待審覈的申請', + joinRequestsDesc: '稽核待加入共享空間的申請', + noPendingRequests: '暫無待稽核的申請', pendingJoinRequestsBadge: '有待審批的加入申請', pendingReview: '待審批', assignRole: '分配角色', - approve: '通過', + approve: '透過', reject: '拒絕', - approveSuccess: '已通過申請', + approveSuccess: '已透過申請', rejectSuccess: '已拒絕申請', reviewFailed: '操作失敗,請重試' }, @@ -1715,28 +1715,28 @@ export default { }, sharedResources: { kbListTitle: '共享知識庫', - agentListTitle: '共享智能體', - loading: '加載中…', + agentListTitle: '共享智慧體', + loading: '載入中…', columns: { name: '名稱', sharedBy: '共享者', sharedAt: '共享時間', - permission: '權限' + permission: '許可權' } }, joinRequests: { - listTitle: '待審覈申請', + listTitle: '待稽核申請', searchPlaceholder: '搜尋申請人…', - loading: '加載申請中…', + loading: '載入申請中…', emptySearch: '未找到匹配「{q}」的申請', typeJoin: '加入', typeUpgrade: '升級', rejectConfirm: '確認拒絕該申請?', - approveTitle: '通過申請', - approveDesc: '爲「{name}」分配加入後的角色', + approveTitle: '透過申請', + approveDesc: '為「{name}」分配加入後的角色', columns: { applicant: '申請人', - type: '類型', + type: '型別', requestedRole: '申請角色', message: '申請說明', appliedAt: '申請時間' @@ -1745,7 +1745,7 @@ export default { members: { listTitle: '共享空間成員', searchPlaceholder: '搜尋成員…', - loading: '加載成員中…', + loading: '載入成員中…', emptySearch: '未找到匹配「{q}」的成員', columns: { member: '成員', @@ -1755,31 +1755,31 @@ export default { } }, invite: { - loading: '加載中...', + loading: '載入中...', previewTitle: '加入共享空間', - inputDesc: '輸入邀請碼或貼上邀請鏈接中的邀請碼,查看共享空間信息後加入', - previewAction: '查看', + inputDesc: '輸入邀請碼或貼上邀請連結中的邀請碼,檢視共享空間資訊後加入', + previewAction: '檢視', primaryJoin: '加入', invalidCode: '邀請碼無效或已過期', previewFailed: '預覽失敗,請稍後重試', knowledgeBases: '知識庫', - agents: '智能體', + agents: '智慧體', alreadyMember: '您已經是該共享空間的成員', submitRequest: '申請加入', - requireApprovalTip: '該共享空間需要管理員審覈後才能加入', + requireApprovalTip: '該共享空間需要管理員稽核後才能加入', approvalLabel: '加入方式', - needApproval: '需要審覈', - noApproval: '無需審覈', - defaultRoleAfterJoin: '加入後默認權限:{role}', + needApproval: '需要稽核', + noApproval: '無需稽核', + defaultRoleAfterJoin: '加入後預設許可權:{role}', requestRole: '申請角色', selectRole: '選擇角色', messagePlaceholder: '選填:申請說明(如自我介紹或加入原因)', applicationNote: '申請說明(選填)', joinSuccess: '成功加入共享空間!', joinFailed: '加入失敗,請稍後重試', - requestSubmitted: '申請已提交,請等待管理員審覈', + requestSubmitted: '申請已提交,請等待管理員稽核', requestFailed: '申請提交失敗,請稍後重試', - viewOrganization: '查看共享空間' + viewOrganization: '檢視共享空間' }, join: { title: '加入共享空間', @@ -1793,7 +1793,7 @@ export default { preview: '預覽並加入', memberCount: '{count} 個成員', shareCount: '{count} 個共享知識庫', - agentShareCount: '{count} 個智能體', + agentShareCount: '{count} 個智慧體', alreadyMember: '您已經是該共享空間的成員', invalidCode: '無效的邀請碼', byInviteCode: '輸入邀請碼', @@ -1807,7 +1807,7 @@ export default { backToSearch: '返回搜尋' }, rbac: { - needTenantAdminTip: '此操作需要當前空間的 admin 或更高角色,請聯繫空間 Owner 調整權限。', + needTenantAdminTip: '此操作需要當前空間的 admin 或更高角色,請聯絡空間 Owner 調整許可權。', cannotCreate: '當前空間角色不足,無法建立共享空間', cannotJoin: '當前空間角色不足,無法加入或申請加入共享空間', cannotManage: '當前空間角色不足,無法管理共享空間' @@ -1817,64 +1817,64 @@ export default { noTemplates: '暫無模板', selectTemplate: '選擇模板', useTemplate: '使用模板', - resetDefault: '還原默認', - default: '默認', + resetDefault: '還原預設', + default: '預設', withKnowledgeBase: '知識庫', - withWebSearch: '網絡搜尋' + withWebSearch: '網路搜尋' }, mcpServiceDialog: { - addTitle: '添加 MCP 服務', + addTitle: '新增 MCP 服務', editTitle: '編輯 MCP 服務', - basicSection: '基本信息', - connectionSection: '連接配置', - enableServiceDesc: '關閉後該服務不會被調用', - testAfterSaveHint: '保存後可測試連接', + basicSection: '基本資訊', + connectionSection: '連線配置', + enableServiceDesc: '關閉後該服務不會被呼叫', + testAfterSaveHint: '儲存後可測試連線', unitSecond: '秒', unitTimes: '次', name: '服務名稱', namePlaceholder: '請輸入服務名稱', description: '描述', descriptionPlaceholder: '請輸入服務描述', - transportType: '傳輸類型', + transportType: '傳輸型別', serviceUrl: '服務 URL', serviceUrlPlaceholder: 'https://example.com/mcp', - enableService: '啓用服務', + enableService: '啟用服務', authConfig: '認證配置', authType: '認證方式', authTypeNone: '無 / 自定義 Header', authTypeApiKey: 'API Key / Token', - authTypeOAuth: 'OAuth 2.0(首次連接授權)', - oauthRefreshable: 'Token 已過期,將在下次使用時自動刷新', - oauthAuthorizeHint: '點擊「去授權」會先自動保存當前配置,再發起授權(每個用戶獨立授權)。', + authTypeOAuth: 'OAuth 2.0(首次連線授權)', + oauthRefreshable: 'Token 已過期,將在下次使用時自動重新整理', + oauthAuthorizeHint: '點選「去授權」會先自動儲存當前配置,再發起授權(每個使用者獨立授權)。', apiKeyHeader: '請求頭名稱', - apiKeyHeaderDesc: '留空默認 X-API-Key。Bearer 方式請填 Authorization,並在下方金鑰值中寫 “Bearer ”;需要裸 token 時填 Authorization 並直接填入 token。', + apiKeyHeaderDesc: '留空預設 X-API-Key。Bearer 方式請填 Authorization,並在下方金鑰值中寫 “Bearer ”;需要裸 token 時填 Authorization 並直接填入 token。', credentialValue: '金鑰值 / Token', optional: '可選', - advancedConfig: '高級配置', + advancedConfig: '高階配置', timeoutSec: '超時時間(秒)', retryCount: '重試次數', retryDelaySec: '重試延遲(秒)', codeImport: { - toggle: '從代碼導入', + toggle: '從程式碼匯入', hint: '貼上標準 mcpServers JSON 配置,自動填充表單', parse: '解析並填充', - editOverwriteHint: '導入會覆蓋當前表單內容(不影響已保存的憑證,需點保存生效)', + editOverwriteHint: '匯入會覆蓋當前表單內容(不影響已儲存的憑證,需點儲存生效)', toasts: { - filled: '已填充表單,請檢查後保存', - multipleServers: '檢測到多個服務,已導入第一個:{name}' + filled: '已填充表單,請檢查後儲存', + multipleServers: '檢測到多個服務,已匯入第一個:{name}' }, errors: { empty: '請先貼上配置內容', invalidJson: '無法解析,請檢查 JSON 格式', noServer: '未找到 MCP 服務配置', missingUrl: '配置缺少 url', - stdioUnsupported: '暫不支持 stdio(command/args)配置,請使用帶 url 的遠程配置' + stdioUnsupported: '暫不支援 stdio(command/args)配置,請使用帶 url 的遠端配置' } }, customHeaders: { label: '自定義請求頭(可選)', desc: '附加到每次 MCP 請求的 HTTP 請求頭,常用於企業閘道器鑑權、鏈路追蹤等場景。', - add: '添加請求頭', + add: '新增請求頭', keyPlaceholder: 'Header 名稱', valuePlaceholder: 'Header 值' }, @@ -1883,21 +1883,21 @@ export default { updated: 'MCP 服務已更新', createFailed: '建立 MCP 服務失敗', updateFailed: '更新 MCP 服務失敗', - oauthRequired: '該服務需要 OAuth 授權,已自動切換爲 OAuth 2.0,請保存後點擊「去授權」。' + oauthRequired: '該服務需要 OAuth 授權,已自動切換為 OAuth 2.0,請儲存後點選「去授權」。' }, rules: { nameRequired: '請輸入服務名稱', - transportRequired: '請選擇傳輸類型', + transportRequired: '請選擇傳輸型別', urlRequired: '請輸入服務 URL', urlInvalid: '請輸入有效的 URL' } }, ollamaSettings: { title: 'Ollama 配置', - description: '管理本地 Ollama 服務,查看和下載模型', + description: '管理本地 Ollama 服務,檢視和下載模型', toasts: { - connected: '連接成功', - connectFailed: '連接失敗,請檢查 Ollama 是否運行', + connected: '連線成功', + connectFailed: '連線失敗,請檢查 Ollama 是否執行', listFailed: '獲取模型列表失敗', downloadFailed: '下載失敗,請稍後重試', downloadStarted: '已開始下載模型 {name}', @@ -1919,13 +1919,13 @@ export default { }, address: { label: '服務地址', - desc: '本地 Ollama 服務的 API 地址,由系統自動檢測。如需修改,請在 .env 配置文件中設置', + desc: '本地 Ollama 服務的 API 地址,由系統自動檢測。如需修改,請在 .env 配置檔案中設定', placeholder: 'http://localhost:11434', - failed: '連接失敗,請檢查 Ollama 是否運行或服務地址是否正確' + failed: '連線失敗,請檢查 Ollama 是否執行或服務地址是否正確' }, status: { label: 'Ollama 服務狀態', - desc: '自動檢測本地 Ollama 服務是否可用。如果服務未運行或地址配置錯誤,將顯示"不可用"狀態', + desc: '自動檢測本地 Ollama 服務是否可用。如果服務未執行或地址配置錯誤,將顯示"不可用"狀態', testing: '檢測中', available: '可用', unavailable: '不可用', @@ -1935,85 +1935,85 @@ export default { }, modelSettings: { title: '模型配置', - description: '管理不同類型的 AI 模型,支持 Ollama 本地模型和遠程 API', + description: '管理不同型別的 AI 模型,支援 Ollama 本地模型和遠端 API', copySuffix: ' 副本', - builtinTag: '內置', + builtinTag: '內建', confirmDelete: '確定刪除模型「{name}」嗎?', debug: { title: '模型測試', - description: '向已配置的模型發送真實請求,查看響應與耗時', + description: '向已配置的模型傳送真實請求,檢視響應與耗時', groupModel: '選擇模型', groupInput: '測試輸入', - groupResult: '運行結果', - modelType: '模型類型', + groupResult: '執行結果', + modelType: '模型型別', model: '模型', modelPlaceholder: '請選擇要測試的模型', - noModelsForType: '當前類型暫無已添加模型', + noModelsForType: '當前型別暫無已新增模型', query: '輸入內容', - queryPlaceholder: '輸入要發送給模型的內容', - embeddingInput: '待向量化文本', - embeddingPlaceholder: '輸入要生成 Embedding 的文本', + queryPlaceholder: '輸入要傳送給模型的內容', + embeddingInput: '待向量化文字', + embeddingPlaceholder: '輸入要生成 Embedding 的文字', vlmPrompt: '圖片提示詞', vlmPromptPlaceholder: '例如:請詳細描述這張圖片', - documents: '候選文檔', - documentsPlaceholder: '每行輸入一個候選文檔', - documentsHint: '每個非空行會作爲一個獨立文檔發送給 ReRank 模型', - imageFile: '圖片文件', - audioFile: '音頻文件', - chooseFile: '選擇文件', - parameters: '請求參數', + documents: '候選文件', + documentsPlaceholder: '每行輸入一個候選文件', + documentsHint: '每個非空行會作為一個獨立文件傳送給 ReRank 模型', + imageFile: '圖片檔案', + audioFile: '音訊檔案', + chooseFile: '選擇檔案', + parameters: '請求引數', thinking: '思考模式', - thinkingDesc: '僅對支持思考模式的模型生效', + thinkingDesc: '僅對支援思考模式的模型生效', systemPrompt: 'System Prompt', systemPromptPlaceholder: '可選,輸入系統提示詞', - run: '運行測試', + run: '執行測試', copyResult: '複製結果', history: '歷史記錄', - thinkOn: '思考開啓', + thinkOn: '思考開啟', thinkOff: '思考關閉', - runLabel: '第 {n} 次運行', - success: '調用成功', - failed: '調用失敗', + runLabel: '第 {n} 次執行', + success: '呼叫成功', + failed: '呼叫失敗', rawResponse: '響應內容', requestPreview: '請求預覽', requestFailed: '模型測試請求失敗', metrics: { dimension: '向量維度', resultCount: '結果數量', - answerChars: '回答字符數', - reasoningChars: '推理字符數', + answerChars: '回答字元數', + reasoningChars: '推理字元數', reasoningReturned: '返回推理內容', - textChars: '轉寫字符數', + textChars: '轉寫字元數', segmentCount: '分段數量' } }, builtinModels: { - title: '內置模型', - description: '內置模型對所有空間可見,敏感信息會被隱藏,且不可編輯或刪除。', - descriptionAdmin: '內置模型對所有空間可見。系統管理員可編輯配置和憑證;刪除仍由部署配置管理。', - viewGuide: '查看內置模型管理指南' + title: '內建模型', + description: '內建模型對所有空間可見,敏感資訊會被隱藏,且不可編輯或刪除。', + descriptionAdmin: '內建模型對所有空間可見。系統管理員可編輯配置和憑證;刪除仍由部署配置管理。', + viewGuide: '檢視內建模型管理指南' }, toasts: { - nameRequired: '模型名稱不能爲空', - nameTooLong: '模型名稱不能超過100個字符', - displayNameTooLong: '顯示名稱不能超過100個字符', - baseUrlRequired: 'Remote API 類型必須填寫 Base URL', + nameRequired: '模型名稱不能為空', + nameTooLong: '模型名稱不能超過100個字元', + displayNameTooLong: '顯示名稱不能超過100個字元', + baseUrlRequired: 'Remote API 型別必須填寫 Base URL', baseUrlInvalid: 'Base URL 格式不正確,請輸入有效的 URL', dimensionInvalid: 'Embedding 模型必須填寫有效的向量維度(128-4096)', updated: '模型已更新', - added: '模型已添加', - saveFailed: '保存模型失敗', + added: '模型已新增', + saveFailed: '儲存模型失敗', deleted: '模型已刪除', deleteFailed: '刪除模型失敗', - builtinCannotEdit: '內置模型不能編輯', - builtinCannotDelete: '內置模型不能刪除', - builtinCannotCopy: '內置模型不能複製', + builtinCannotEdit: '內建模型不能編輯', + builtinCannotDelete: '內建模型不能刪除', + builtinCannotCopy: '內建模型不能複製', copied: '模型已複製', copyFailed: '複製模型失敗' }, asr: { title: 'ASR 語音模型', - desc: '配置用於語音識別和音頻轉錄的語音轉文本模型(如 OpenAI Whisper)', + desc: '配置用於語音識別和音訊轉錄的語音轉文字模型(如 OpenAI Whisper)', empty: '暫無 ASR 語音模型' }, vllm: { @@ -2028,7 +2028,7 @@ export default { }, embedding: { title: 'Embedding 模型', - desc: '配置用於文本向量化的嵌入模型', + desc: '配置用於文字向量化的嵌入模型', empty: '暫無 Embedding 模型' }, chat: { @@ -2038,11 +2038,11 @@ export default { }, source: { remote: 'Remote', - openaiCompatible: 'OpenAI兼容', + openaiCompatible: 'OpenAI相容', custom: '自定義' }, actions: { - addModel: '添加模型', + addModel: '新增模型', debugModel: '模型測試' }, typeShort: { @@ -2055,19 +2055,19 @@ export default { }, mcpSettings: { title: 'MCP 服務管理', - description: '管理外部 MCP (Model Context Protocol) 服務,在 Agent 模式下調用外部工具和資源', - enabled: '已啓用', + description: '管理外部 MCP (Model Context Protocol) 服務,在 Agent 模式下呼叫外部工具和資源', + enabled: '已啟用', disabled: '已禁用', configuredServices: '已配置的服務', - manageAndTest: '管理和測試 MCP 服務連接', - addService: '添加服務', + manageAndTest: '管理和測試 MCP 服務連線', + addService: '新增服務', empty: '暫無 MCP 服務', deleteConfirmBody: '確定要刪除 MCP 服務"{name}"嗎?此操作無法撤銷。', unnamed: '未命名', - builtin: '內置', + builtin: '內建', toasts: { - loadFailed: '加載 MCP 服務列表失敗', - enabled: '已啓用 MCP 服務', + loadFailed: '載入 MCP 服務列表失敗', + enabled: '已啟用 MCP 服務', disabled: '已禁用 MCP 服務', updateStateFailed: '更新 MCP 服務狀態失敗', testing: '正在測試 {name}...', @@ -2077,7 +2077,7 @@ export default { deleteFailed: '刪除 MCP 服務失敗' }, actions: { - test: '測試連接' + test: '測試連線' } }, conversationSettings: { @@ -2106,13 +2106,13 @@ export default { desc: '當選擇模型兜底時使用的提示模板' }, fallbackResponse: { - desc: '當兜底策略爲固定回覆時返回的文本' + desc: '當兜底策略為固定回覆時返回的文字' }, fallbackStrategy: { desc: '檢索無結果時採用的處理方式' }, enableQueryExpansion: { - desc: '召回不足時調用大模型生成擴展查詢(增加時延與成本)' + desc: '召回不足時呼叫大模型生成擴充套件查詢(增加時延與成本)' }, enableRewrite: { desc: '多輪對話自動改寫問題以獲得更優召回' @@ -2121,7 +2121,7 @@ export default { desc: '重排序階段的最低得分閾值' }, rerankTopK: { - desc: '重排序後進入答案生成的文檔數量' + desc: '重排序後進入答案生成的文件數量' }, vectorThreshold: { desc: '向量召回的最低相似度閾值' @@ -2130,7 +2130,7 @@ export default { desc: '關鍵詞檢索的最低得分閾值' }, embeddingTopK: { - desc: '向量召回階段保留的文檔數量' + desc: '向量召回階段保留的文件數量' }, maxRounds: { desc: '用於多輪上下文和問題改寫的歷史輪數' @@ -2141,7 +2141,7 @@ export default { }, agentSettings: { systemPrompt: { - desc: '配置 Agent 的系統提示詞,支持佔位符模板。佔位符會在運行時自動替換爲實際內容。' + desc: '配置 Agent 的系統提示詞,支援佔位符模板。佔位符會在執行時自動替換為實際內容。' }, allowedTools: { desc: '當前 Agent 可使用的工具列表' @@ -2163,9 +2163,9 @@ export default { } }, upload: { - uploadDocument: '上傳文檔', - uploadFolder: '上傳文件夾', - onlineEdit: '在線編輯', + uploadDocument: '上傳文件', + uploadFolder: '上傳資料夾', + onlineEdit: '線上編輯', deleteRecord: '刪除記錄' }, time: { @@ -2179,45 +2179,45 @@ export default { }, platform: { subtitle: '大模型驅動的企業級知識框架', - description: 'RAG 檢索、智能體推理、Wiki 知識庫,讓文檔真正被理解和運用', + description: 'RAG 檢索、智慧體推理、Wiki 知識庫,讓文件真正被理解和運用', rag: 'RAG 增強生成', - agent: 'ReAct 智能體', + agent: 'ReAct 智慧體', wiki: 'Wiki 知識庫', hybridSearch: '混合檢索', - multimodalParsing: '多模態文檔解析', + multimodalParsing: '多模態文件解析', hybridSearchEngine: '混合檢索 + 知識圖譜', - ragQandA: 'ReAct 智能體問答', + ragQandA: 'ReAct 智慧體問答', independentTenant: '獨立空間', fullApiAccess: '完整 API 訪問', knowledgeBaseManagement: '知識庫管理', carousel: { agenticRagTitle: 'Agentic RAG', - agenticRagDesc: 'ReAct 推理 + 工具調用 + 多步思考', + agenticRagDesc: 'ReAct 推理 + 工具呼叫 + 多步思考', hybridSearchTitle: '混合檢索策略', hybridSearchDesc: 'BM25 + 向量 + 知識圖譜', wikiTitle: 'Wiki 知識庫', - wikiDesc: '文檔蒸餾爲結構化互聯知識', - smartDocRetrievalTitle: '智能文檔檢索', + wikiDesc: '文件蒸餾為結構化互聯知識', + smartDocRetrievalTitle: '智慧文件檢索', smartDocRetrievalDesc: 'PDF/Word/圖片多格式解析' } }, font: { - uiFont: '界面字體', - uiFontDescription: '用於菜單、正文、按鈕等界面大部分文字的字體', - monoFont: '代碼字體', - monoFontDescription: '用於代碼塊、終端命令、API 金鑰、文件路徑等技術內容,每個字符等寬顯示,避免 0/O、1/l 混淆', - selectFont: '選擇字體', - sansPreview: '示例 Sample 字體 Font — Aa Gg Oo 0123', + uiFont: '介面字型', + uiFontDescription: '用於選單、正文、按鈕等介面大部分文字的字型', + monoFont: '程式碼字型', + monoFontDescription: '用於程式碼塊、終端命令、API 金鑰、檔案路徑等技術內容,每個字元等寬顯示,避免 0/O、1/l 混淆', + selectFont: '選擇字型', + sansPreview: '示例 Sample 字型 Font — Aa Gg Oo 0123', monoPreview: 'const msg = \'Hello\'; // 0O1l', - fontSize: '字體大小', - fontSizeDescription: '整體縮放界面(文字、圖標、間距等),切換後立即生效', + fontSize: '字型大小', + fontSizeDescription: '整體縮放介面(文字、圖示、間距等),切換後立即生效', size: { small: '小', normal: '正常', large: '大' }, mono: { - system: '系統默認', + system: '系統預設', menlo: 'Menlo', monaco: 'Monaco', consolas: 'Consolas', @@ -2227,7 +2227,7 @@ export default { monospace: '通用等寬' }, sans: { - system: '系統默認', + system: '系統預設', pingfang: '蘋方 PingFang SC', georgia: 'Georgia 襯線', yahei: '微軟雅黑 Microsoft YaHei', @@ -2239,20 +2239,20 @@ export default { }, theme: { theme: '主題模式', - themeDescription: '選擇界面的顯示主題,支持跟隨系統自動切換', + themeDescription: '選擇介面的顯示主題,支援跟隨系統自動切換', light: '淺色', dark: '深色', system: '跟隨系統', selectTheme: '選擇主題' }, general: { - title: '常規設置', - allSettings: '全部設置', - personalSettings: '個人設置', - helpAndDocs: '幫助與文檔', + title: '常規設定', + allSettings: '全部設定', + personalSettings: '個人設定', + helpAndDocs: '幫助與文件', description: '配置語言、外觀等基礎選項', - settings: '設置', - close: '關閉設置' + settings: '設定', + close: '關閉設定' }, language: { zhCN: '簡體中文', @@ -2261,46 +2261,46 @@ export default { koKR: '한국어', selectLanguage: '選擇語言', language: '語言', - languageDescription: '選擇界面顯示語言', - languageSaved: '語言設置已保存' + languageDescription: '選擇介面顯示語言', + languageSaved: '語言設定已儲存' }, model: { modelName: '模型名稱', - defaultTag: '默認', - addModelInSettings: '前往全局設置添加模型', - loadFailed: '加載模型列表失敗', + defaultTag: '預設', + addModelInSettings: '前往全域性設定新增模型', + loadFailed: '載入模型列表失敗', selectModelPlaceholder: '請選擇模型', searchPlaceholder: '搜尋模型...', - builtinTag: '內置', + builtinTag: '內建', editor: { - addTitle: '添加模型', + addTitle: '新增模型', editTitle: '編輯模型', - sectionType: '模型類型', - typeLabel: '模型類型', + sectionType: '模型型別', + typeLabel: '模型型別', sectionSource: '模型來源', sectionProvider: '接入配置', - sectionAdvanced: '高級選項', + sectionAdvanced: '高階選項', sourceLabel: '模型來源', sourceLocal: 'Ollama', sourceRemote: 'API', baseUrlLabel: 'Base URL', displayNameLabel: '顯示名稱(可選)', displayNamePlaceholder: '例如:客服問答模型', - displayNameDesc: '僅用於界面展示,實際調用仍使用上面的模型名稱。', + displayNameDesc: '僅用於介面展示,實際呼叫仍使用上面的模型名稱。', baseUrlPlaceholder: '例如:https://api.openai.com/v1', baseUrlPlaceholderVllm: '例如:http://localhost:11434/v1', baseUrlPlaceholderAsr: '例如:https://api.openai.com/v1', apiKeyOptional: 'API Key(可選)', apiKeyPlaceholder: '輸入 API Key', customHeadersLabel: '自定義請求頭(可選)', - customHeadersDesc: '調用遠程模型 API 時附加的 HTTP 請求頭,常用於企業閘道器鑑權、鏈路追蹤等場景;Authorization、Content-Type 等保留頭會被自動忽略。', - customHeadersAdd: '添加請求頭', + customHeadersDesc: '呼叫遠端模型 API 時附加的 HTTP 請求頭,常用於企業閘道器鑑權、鏈路追蹤等場景;Authorization、Content-Type 等保留頭會被自動忽略。', + customHeadersAdd: '新增請求頭', customHeadersKeyPlaceholder: 'Header 名稱', customHeadersValuePlaceholder: 'Header 值', testing: '測試中...', - testConnection: '測試連接', + testConnection: '測試連線', downloadLabel: '下載: {keyword}', - refreshList: '刷新列表', + refreshList: '重新整理列表', dimensionLabel: '向量維度', dimensionPlaceholder: '例如:1536', checkDimension: '檢測維度', @@ -2308,30 +2308,30 @@ export default { dimensionFailed: '檢測失敗,請手動輸入維度', remoteDimensionDetected: '檢測到向量維度:{value}', dimensionOverrideLabel: '自定義輸出維度', - dimensionOverrideDesc: '僅在確認該模型支持 dimensions 參數時開啓;默認只使用檢測到的實際維度。', - supportsVisionLabel: '支持視覺/多模態', - supportsVisionDesc: '模型是否支持圖片等多模態輸入', + dimensionOverrideDesc: '僅在確認該模型支援 dimensions 引數時開啟;預設只使用檢測到的實際維度。', + supportsVisionLabel: '支援視覺/多模態', + supportsVisionDesc: '模型是否支援圖片等多模態輸入', maxConcurrencyLabel: '後臺併發上限', - maxConcurrencyPlaceholder: '0 表示使用全局默認', - maxConcurrencyDesc: '限制文檔入庫/富化等後臺任務對該模型的併發調用數(按模型全副本共享)。0 或留空表示沿用全局默認;不影響交互式對話。', - thinkingControlLabel: '思考模式參數格式', - thinkingControlDesc: '決定智能體「思考模式」開/關時如何寫入 API。已嘗試按廠商/模型預選,若與實際情況不符請按 API 文檔手動修改;選「不寫入」時,智能體「思考模式」開關不生效。', - dimensionHint: '模型已選擇,點擊"檢測維度"按鈕自動獲取向量維度', - loadModelListFailed: '加載模型列表失敗', - listRefreshed: '列表已刷新', + maxConcurrencyPlaceholder: '0 表示使用全域性預設', + maxConcurrencyDesc: '限制文件入庫/富化等後臺任務對該模型的併發呼叫數(按模型全副本共享)。0 或留空表示沿用全域性預設;不影響互動式對話。', + thinkingControlLabel: '思考模式引數格式', + thinkingControlDesc: '決定智慧體「思考模式」開/關時如何寫入 API。已嘗試按廠商/模型預選,若與實際情況不符請按 API 文件手動修改;選「不寫入」時,智慧體「思考模式」開關不生效。', + dimensionHint: '模型已選擇,點選"檢測維度"按鈕自動獲取向量維度', + loadModelListFailed: '載入模型列表失敗', + listRefreshed: '列表已重新整理', fillModelAndUrl: '請先填寫模型標識和 Base URL', - remoteBaseUrlRequired: 'Remote API 類型必須填寫 Base URL', - unsupportedModelType: '不支持的模型類型', - connectionSuccess: '連接成功', - connectionFailed: '連接失敗', - connectionConfigError: '連接失敗,請檢查配置', + remoteBaseUrlRequired: 'Remote API 型別必須填寫 Base URL', + unsupportedModelType: '不支援的模型型別', + connectionSuccess: '連線成功', + connectionFailed: '連線失敗', + connectionConfigError: '連線失敗,請檢查配置', downloadStarted: '開始下載 {name}', downloadCompleted: '{name} 下載完成', downloadFailed: '{name} 下載失敗', - downloadStartFailed: '啓動下載失敗', + downloadStartFailed: '啟動下載失敗', ollamaUnavailable: 'Ollama服務不可用,無法選擇本地模型', - ollamaNotSupportRerank: 'Ollama 不支持 ReRank 模型,請使用遠程接口配置', - goToOllamaSettings: '查看設置', + ollamaNotSupportRerank: 'Ollama 不支援 ReRank 模型,請使用遠端介面配置', + goToOllamaSettings: '檢視設定', providerLabel: '服務商', providerPlaceholder: '選擇模型服務商', providers: { @@ -2400,11 +2400,11 @@ export default { description: 'jina-clip-v1, jina-embeddings-v2-base-zh, etc.' }, siliconflow: { - label: '硅基流動 SiliconFlow', + label: '矽基流動 SiliconFlow', description: 'deepseek-ai/DeepSeek-V3.1, etc.' }, generic: { - label: '自定義 (OpenAI兼容接口)', + label: '自定義 (OpenAI相容介面)', description: 'Generic API endpoint (OpenAI-compatible)' }, requesty: { @@ -2438,16 +2438,16 @@ export default { }, validation: { modelNameRequired: '請輸入模型名稱', - modelNameEmpty: '模型名稱不能爲空', - modelNameMax: '模型名稱不能超過100個字符', + modelNameEmpty: '模型名稱不能為空', + modelNameMax: '模型名稱不能超過100個字元', baseUrlRequired: '請輸入 Base URL', - baseUrlEmpty: 'Base URL 不能爲空', + baseUrlEmpty: 'Base URL 不能為空', baseUrlInvalid: 'Base URL 格式不正確,請輸入有效的 URL' }, thinkingControl: { thinkingType: { label: 'thinking.type', - hint: '火山引擎 Ark;騰訊雲 LKEAP(DeepSeek V3 等,選 LKEAP 時默認此項;R1 請改「不寫入」)' + hint: '火山引擎 Ark;騰訊雲 LKEAP(DeepSeek V3 等,選 LKEAP 時預設此項;R1 請改「不寫入」)' }, enableThinking: { label: 'enable_thinking', @@ -2455,11 +2455,11 @@ export default { }, chatTemplateKwargs: { label: 'chat_template_kwargs', - hint: '自定義 OpenAI 兼容、NVIDIA NIM、vLLM / 本地 Qwen 部署' + hint: '自定義 OpenAI 相容、NVIDIA NIM、vLLM / 本地 Qwen 部署' }, none: { - label: '不寫入思考參數', - hint: '智能體「思考模式」開關不生效,不會在請求中寫入思考相關參數' + label: '不寫入思考引數', + hint: '智慧體「思考模式」開關不生效,不會在請求中寫入思考相關引數' } }, volcengine: { @@ -2476,7 +2476,7 @@ export default { secretKeyPlaceholder: '騰訊雲 API 金鑰 SecretKey', regionLabel: '地域', regionPlaceholder: 'ap-guangzhou', - regionDesc: 'RunRerank 支持 ap-beijing、ap-guangzhou 等,默認 ap-guangzhou', + regionDesc: 'RunRerank 支援 ap-beijing、ap-guangzhou 等,預設 ap-guangzhou', rerankCredentialHint: 'Rerank 使用騰訊雲 API 簽名(非 OpenAI API Key)。請在雲 API 金鑰控制檯建立 SecretId/SecretKey。' }, modelNamePlaceholder: { @@ -2488,26 +2488,26 @@ export default { }, description: { chat: '配置用於對話的大語言模型', - embedding: '配置用於文本向量化的嵌入模型', + embedding: '配置用於文字向量化的嵌入模型', rerank: '配置用於結果重排序的模型', vllm: '配置用於視覺理解和多模態的視覺語言模型', - asr: '配置用於語音識別和音頻轉錄的語音轉文本模型', - default: '配置模型信息' + asr: '配置用於語音識別和音訊轉錄的語音轉文字模型', + default: '配置模型資訊' } } }, error: { - networkError: '網絡錯誤,請檢查您的網絡連接', - invalidCredentials: '用戶名或密碼錯誤', - tokenRefreshFailed: 'Token刷新失敗', - pleaseRelogin: '請重新登錄', - fileSizeExceeded: '文件大小不能超過 {size}M!', - unsupportedFileType: '不支持的文件類型!', - invalidFileType: '文件類型錯誤!', - invalidImageLink: '無效的圖片鏈接', + networkError: '網路錯誤,請檢查您的網路連線', + invalidCredentials: '使用者名稱或密碼錯誤', + tokenRefreshFailed: 'Token重新整理失敗', + pleaseRelogin: '請重新登入', + fileSizeExceeded: '檔案大小不能超過 {size}M!', + unsupportedFileType: '不支援的檔案型別!', + invalidFileType: '檔案型別錯誤!', + invalidImageLink: '無效的圖片連結', missingKbId: '缺少知識庫ID', - tokenNotFound: '未找到登錄權杖,請重新登錄', - streamFailed: '流式連接失敗', + tokenNotFound: '未找到登入權杖,請重新登入', + streamFailed: '流式連線失敗', initialization: { checkFailed: '檢查失敗', testFailed: '測試失敗' @@ -2515,10 +2515,10 @@ export default { tenant: { listFailed: '獲取空間列表失敗', searchFailed: '搜尋空間失敗', - getApiPrincipalConfigFailed: '獲取 API 用戶身份配置失敗', - updateApiPrincipalConfigFailed: '更新 API 用戶身份配置失敗', + getApiPrincipalConfigFailed: '獲取 API 使用者身份配置失敗', + updateApiPrincipalConfigFailed: '更新 API 使用者身份配置失敗', createApiPrincipalTestTokenFailed: '生成 API 測試 Token 失敗', - updateFailed: '更新空間信息失敗', + updateFailed: '更新空間資訊失敗', deleteFailed: '刪除空間失敗' }, model: { @@ -2528,12 +2528,12 @@ export default { deleteFailed: '刪除模型失敗' }, auth: { - loginFailed: '登錄失敗', + loginFailed: '登入失敗', registerFailed: '註冊失敗', - getUserFailed: '獲取用戶信息失敗', - getTenantFailed: '獲取空間信息失敗', - updatePreferencesFailed: '更新個性化設置失敗', - refreshTokenFailed: '刷新Token失敗', + getUserFailed: '獲取使用者資訊失敗', + getTenantFailed: '獲取空間資訊失敗', + updatePreferencesFailed: '更新個性化設定失敗', + refreshTokenFailed: '重新整理Token失敗', logoutFailed: '登出失敗', validateTokenFailed: 'Token驗證失敗' } @@ -2541,36 +2541,36 @@ export default { mcp: { testResult: { title: '測試結果: {name}', - connectionSuccess: '連接成功', - connectionFailed: '連接失敗', + connectionSuccess: '連線成功', + connectionFailed: '連線失敗', toolsTitle: '可用工具', resourcesTitle: '可用資源', descriptionLabel: '描述', - schemaLabel: '參數結構', + schemaLabel: '引數結構', emptyDescription: '該服務未提供工具或資源', - requireApproval: '需人工審覈', - requireApprovalTip: '開啓後,Agent 調用該工具前會暫停並等待確認,適用於可能改庫/刪文件等高危操作', - approvalSaveFailed: '保存審覈設置失敗' + requireApproval: '需人工稽核', + requireApprovalTip: '開啟後,Agent 呼叫該工具前會暫停並等待確認,適用於可能改庫/刪檔案等高危操作', + approvalSaveFailed: '儲存稽核設定失敗' } }, system: { - title: '系統信息', - sectionDescription: '查看系統版本信息和用戶帳號配置', - loadingInfo: '正在加載信息...', + title: '系統資訊', + sectionDescription: '檢視系統版本資訊和使用者帳號配置', + loadingInfo: '正在載入資訊...', retry: '重試', versionLabel: '應用版本', versionDescription: '當前應用服務(weknora-app)的版本號', frontendVersionLabel: 'UI 版本', - frontendVersionDescription: '當前 UI 界面(weknora-ui)的構建版本號', + frontendVersionDescription: '當前 UI 介面(weknora-ui)的構建版本號', versionMismatch: '與應用版本不一致', buildTimeLabel: '構建時間', buildTimeDescription: '系統構建的時間', goVersionLabel: 'Go 版本', goVersionDescription: '後端使用的 Go 語言版本', - startedAtLabel: '服務啓動時間', - startedAtDescription: '當前後端進程最近一次啓動的時刻', - uptimeLabel: '運行時長', - uptimeDescription: '自本次啓動以來的連續運行時間', + startedAtLabel: '服務啟動時間', + startedAtDescription: '當前後端程序最近一次啟動的時刻', + uptimeLabel: '執行時長', + uptimeDescription: '自本次啟動以來的連續執行時間', uptimeDays: '{n} 天', uptimeHours: '{n} 小時', uptimeMinutes: '{n} 分鐘', @@ -2579,57 +2579,57 @@ export default { dbVersionDescription: '當前資料庫遷移版本號', dbMigrationFailedTag: '遷移失敗', dbMigrationFailedTitle: '資料庫遷移失敗', - dbMigrationFailedDesc: '啓動時資料庫遷移未成功完成,部分表或索引可能未建立,會導致 Wiki、知識圖譜等功能異常。建議先查看排查文檔自助修復;如仍無法解決,請通過下方鏈接反饋。', - dbMigrationViewDocs: '查看排查文檔', + dbMigrationFailedDesc: '啟動時資料庫遷移未成功完成,部分表或索引可能未建立,會導致 Wiki、知識圖譜等功能異常。建議先檢視排查文件自助修復;如仍無法解決,請透過下方連結反饋。', + dbMigrationViewDocs: '檢視排查文件', dbMigrationReportIssue: '無法修復?提交 Issue', keywordIndexEngineLabel: '關鍵詞索引引擎', keywordIndexEngineDescription: '當前使用的關鍵詞索引引擎', - vectorStoreEngineLabel: '向量存儲引擎', - vectorStoreEngineDescription: '當前使用的向量存儲引擎', + vectorStoreEngineLabel: '向量儲存引擎', + vectorStoreEngineDescription: '當前使用的向量儲存引擎', graphDatabaseEngineLabel: '圖資料庫引擎', graphDatabaseEngineDescription: '當前使用的圖資料庫引擎', unknown: '未知', globalSettings: { - title: '系統設置', - description: '平台級運行時配置,保存後立即對所有空間生效。僅系統管理員可見可改。', - loading: '加載中...', - empty: '暫無可配置的系統設置', - saving: '保存中', - saved: '已保存', - saveAnnouncement: '{label} 已保存', - badgeRequiresRestart: '需重啓', + title: '系統設定', + description: '平臺級執行時配置,儲存後立即對所有空間生效。僅系統管理員可見可改。', + loading: '載入中...', + empty: '暫無可配置的系統設定', + saving: '儲存中', + saved: '已儲存', + saveAnnouncement: '{label} 已儲存', + badgeRequiresRestart: '需重啟', badgeSecret: '敏感', badgeHighRisk: '高風險', badgeOverride: '已覆蓋', - badgeOverrideTooltip: '該值已由管理員保存到資料庫,覆蓋了環境變數與默認值', + badgeOverrideTooltip: '該值已由管理員儲存到資料庫,覆蓋了環境變數與預設值', modifiedAt: '上次修改:{value}', - tagInputPlaceholder: '回車添加條目,例:example.com / *.foo.com / 10.0.0.0/8', + tagInputPlaceholder: '回車新增條目,例:example.com / *.foo.com / 10.0.0.0/8', audit: { tabLabel: '審計日誌', - description: '記錄平台級操作:系統設置變更、系統管理員授予/回收、配額批量同步等。按時間倒序展示。', - refresh: '刷新', + description: '記錄平臺級操作:系統設定變更、系統管理員授予/回收、配額批次同步等。按時間倒序展示。', + refresh: '重新整理', retry: '重試', - loading: '加載中...', + loading: '載入中...', end: '已經到底了。', - empty: '暫無平台級審計事件。', - forbidden: '無權查看平台審計日誌。', + empty: '暫無平臺級審計事件。', + forbidden: '無權檢視平臺審計日誌。', systemActor: '系統', drawer: { sectionSummary: '事件概要', sectionIdentifiers: '關聯標識', - sectionRequest: '請求信息', + sectionRequest: '請求資訊', targetChange: '變更內容', requestMethod: '請求方法' }, expanded: { actorId: '操作人 ID', - targetUserId: '目標用戶 ID', - targetType: '目標類型', + targetUserId: '目標使用者 ID', + targetType: '目標型別', targetId: '目標 ID', details: '原始詳情' }, target: { - bulkQuota: '批量同步:默認存儲配額', + bulkQuota: '批次同步:預設儲存配額', bulkQuotaDiff: '應用到 {count} 個空間({gb} GB)', promoteIdempotent: '目標已是系統管理員(冪等)', revokeNoop: '目標本就不是系統管理員(冪等)', @@ -2641,12 +2641,12 @@ export default { denied: '拒絕' }, action: { - 'system.setting_changed': '系統設置變更', + 'system.setting_changed': '系統設定變更', 'system.admin_promoted': '授予系統管理員', - 'system.api_key_created': '建立平台 API Key', - 'system.api_key_revoked': '吊銷平台 API Key', + 'system.api_key_created': '建立平臺 API Key', + 'system.api_key_revoked': '吊銷平臺 API Key', 'system.admin_revoked': '回收系統管理員', - 'system.user_password_reset': '重置用戶密碼', + 'system.user_password_reset': '重置使用者密碼', 'system.queue_task_retried': '重新執行失敗任務', 'system.queue_task_deleted': '清除失敗任務記錄', 'system.queue_task_run_now': '立即執行佇列任務', @@ -2665,37 +2665,37 @@ export default { system_admin: '系統管理員' }, errors: { - generic: '加載審計日誌失敗' + generic: '載入審計日誌失敗' } }, bulkApply: { label: '應用到所有現有空間', - tooltip: '保存的值默認只對之後新建的空間生效;點擊此按鈕將當前值同步寫入所有現有空間。', + tooltip: '儲存的值預設只對之後新建的空間生效;點選此按鈕將當前值同步寫入所有現有空間。', confirmBtn: '確認應用', - confirmBody: '將把所有現有空間的存儲配額覆蓋爲 {value} GB。如有空間被運維單獨調整過的配額,也會一併被覆蓋。是否繼續?', - success: '已將 {count} 個空間的存儲配額更新爲 {gb} GB', + confirmBody: '將把所有現有空間的儲存配額覆蓋為 {value} GB。如有空間被運維單獨調整過的配額,也會一併被覆蓋。是否繼續?', + success: '已將 {count} 個空間的儲存配額更新為 {gb} GB', failed: '應用到所有空間失敗' }, passwordReset: { - label: '重置用戶密碼', - description: '爲忘記密碼的其他用戶設置新密碼。重置成功後,該用戶當前所有登錄會話都會失效,需要使用新密碼重新登錄。', + label: '重置使用者密碼', + description: '為忘記密碼的其他使用者設定新密碼。重置成功後,該使用者當前所有登入會話都會失效,需要使用新密碼重新登入。', action: '重置密碼', - dialogTitle: '重置其他用戶的密碼', - warning: '這是高風險操作。請覈對用戶信箱;出於安全考慮,不能在這裡重置自己的密碼。', - emailLabel: '用戶信箱', - emailPlaceholder: '輸入需要重置密碼的用戶信箱', + dialogTitle: '重置其他使用者的密碼', + warning: '這是高風險操作。請核對使用者信箱;出於安全考慮,不能在這裡重置自己的密碼。', + emailLabel: '使用者信箱', + emailPlaceholder: '輸入需要重置密碼的使用者信箱', newPasswordLabel: '新密碼', - newPasswordPlaceholder: '8-32 個字符,包含字母和數字', + newPasswordPlaceholder: '8-32 個字元,包含字母和數字', confirmPasswordLabel: '確認新密碼', confirmPasswordPlaceholder: '再次輸入新密碼', confirmBtn: '確認重置', - success: '密碼已重置,該用戶的現有會話已失效', + success: '密碼已重置,該使用者的現有會話已失效', failed: '重置密碼失敗', validation: { - emailRequired: '請輸入用戶信箱', + emailRequired: '請輸入使用者信箱', emailInvalid: '請輸入有效的信箱地址', passwordRequired: '請輸入新密碼', - passwordLength: '密碼長度必須爲 8-32 個字符', + passwordLength: '密碼長度必須為 8-32 個字元', passwordLetter: '密碼必須包含字母', passwordNumber: '密碼必須包含數字', confirmRequired: '請再次輸入新密碼', @@ -2704,36 +2704,36 @@ export default { }, admins: { label: '系統管理員', - description: '擁有平台級權限的用戶。在右側輸入信箱並回車即可提升用戶爲管理員;點擊 × 即爲撤銷其權限。當前你(自己)已是管理員,不在列表中顯示,也無法被自己撤銷。', - placeholder: '輸入用戶信箱並回車', - loadFailed: '加載系統管理員失敗', + description: '擁有平臺級許可權的使用者。在右側輸入信箱並回車即可提升使用者為管理員;點選 × 即為撤銷其許可權。當前你(自己)已是管理員,不在列表中顯示,也無法被自己撤銷。', + placeholder: '輸入使用者信箱並回車', + loadFailed: '載入系統管理員失敗', saveSuccess: '已更新系統管理員', saveFailed: '更新系統管理員失敗', confirm: { revoke: { header: '撤銷系統管理員', - body: '確認撤銷 {email} 的系統管理員權限?撤銷後該用戶將無法再訪問任何系統級功能。', + body: '確認撤銷 {email} 的系統管理員許可權?撤銷後該使用者將無法再訪問任何系統級功能。', confirmBtn: '確認撤銷' }, promote: { - header: '提升爲系統管理員', - body: '確認將 {email} 提升爲系統管理員?該用戶將獲得平台級權限,可訪問所有空間、修改系統設置、管理其他管理員。', + header: '提升為系統管理員', + body: '確認將 {email} 提升為系統管理員?該使用者將獲得平臺級許可權,可訪問所有空間、修改系統設定、管理其他管理員。', confirmBtn: '確認提升' } } }, reset: { label: '重置', - tooltip: '清除當前 UI 覆蓋,還原使用環境變數或內置默認值', + tooltip: '清除當前 UI 覆蓋,還原使用環境變數或內建預設值', confirmBtn: '確認重置', - confirmBody: '確定要重置「{label}」嗎?該操作會刪除資料庫中的覆蓋值,回退到環境變數或內置默認值。', - success: '已重置爲默認值', + confirmBody: '確定要重置「{label}」嗎?該操作會刪除資料庫中的覆蓋值,回退到環境變數或內建預設值。', + success: '已重置為預設值', failed: '重置失敗' }, messages: { - loadFailed: '加載系統設置失敗', - saveSuccess: '已保存', - saveFailed: '保存失敗' + loadFailed: '載入系統設定失敗', + saveSuccess: '已儲存', + saveFailed: '儲存失敗' }, listConfirm: { ssrf: { @@ -2744,18 +2744,18 @@ export default { confirmBtn: '確認移除' }, add: { - header: '添加 SSRF 白名單條目', - body: '確認把 {entry} 加入 SSRF 白名單?該條目匹配到的主機 / IP / 網段會繞過 SSRF 防護,可能讓 Agent 訪問內網服務,請僅在確知用途時添加。', - confirmBtn: '確認添加' + header: '新增 SSRF 白名單條目', + body: '確認把 {entry} 加入 SSRF 白名單?該條目匹配到的主機 / IP / 網段會繞過 SSRF 防護,可能讓 Agent 訪問內網服務,請僅在確知用途時新增。', + confirmBtn: '確認新增' } } } }, confirm: { - confirmBtn: '確認保存', + confirmBtn: '確認儲存', cancelBtn: '取消', emptyValue: '(空)', - bodyAuthRegistrationMode: '即將把「{label}」改爲:{value}\n\n如果切到 self_serve,公網任何人都可以註冊帳號 — 務必確認是預期行爲。' + bodyAuthRegistrationMode: '即將把「{label}」改為:{value}\n\n如果切到 self_serve,公網任何人都可以註冊帳號 — 務必確認是預期行為。' }, enumLabels: { auth: { @@ -2771,33 +2771,33 @@ export default { }, keyDescriptions: { model: { - max_concurrency: '後臺任務(文檔入庫/富化)對單個模型的默認併發上限,按模型 ID 全副本共享。每次調用實時讀取,修改後立即生效、無需重啓。0 或負數表示關閉默認限制(各模型仍會尊重自身在模型管理裡配置的上限)。僅影響後臺任務,不影響交互式對話。' + max_concurrency: '後臺任務(文件入庫/富化)對單個模型的預設併發上限,按模型 ID 全副本共享。每次呼叫實時讀取,修改後立即生效、無需重啟。0 或負數表示關閉預設限制(各模型仍會尊重自身在模型管理裡配置的上限)。僅影響後臺任務,不影響互動式對話。' }, asynq: { - core_concurrency: '文檔解析與手工重解析的每實例保底併發,可額外借用共享彈性池;修改後需重啓。', - postprocess_concurrency: '解析完成後的輕量收尾和富化扇出專用併發;修改後需重啓。', - enrichment_concurrency: '摘要、圖片、圖譜與問題生成的每實例保底併發,可額外借用共享彈性池;修改後需重啓。', - maintenance_concurrency: '資料源同步、批處理和清理任務的每實例併發,與用戶面流水線硬隔離;修改後需重啓。', - shared_concurrency: '核心解析與內容富化共同使用的每實例彈性併發,由有積壓的一側自動借用;修改後需重啓。', - wiki_concurrency: '每個服務實例的 Wiki 專用 Worker 併發數,與上游任務池相互隔離。最小值爲 1;修改後需重啓服務進程方可生效。' + core_concurrency: '文件解析與手工重解析的每例項保底併發,可額外借用共享彈性池;修改後需重啟。', + postprocess_concurrency: '解析完成後的輕量收尾和富化扇出專用併發;修改後需重啟。', + enrichment_concurrency: '摘要、圖片、圖譜與問題生成的每例項保底併發,可額外借用共享彈性池;修改後需重啟。', + maintenance_concurrency: '資料源同步、批處理和清理任務的每例項併發,與使用者面流水線硬隔離;修改後需重啟。', + shared_concurrency: '核心解析與內容富化共同使用的每例項彈性併發,由有積壓的一側自動借用;修改後需重啟。', + wiki_concurrency: '每個服務例項的 Wiki 專用 Worker 併發數,與上游任務池相互隔離。最小值為 1;修改後需重啟服務程序方可生效。' }, tenant: { - max_owned_per_user: '每個非超管用戶通過自助建立可擁有的最大空間數。每次建立空間時實時讀取,修改後立即生效。0 表示使用內置默認值 10;負數表示完全關閉限制(不建議在公開部署使用)。', - self_service_creation_enabled: '是否允許非超管用戶主動建立空間。關閉後,普通用戶只能通過邀請加入已有空間;跨空間超管仍可建立。修改後立即生效。', - default_storage_quota_gb: '新建空間時默認分配的存儲配額(GB),包含向量、原文、文本、索引等。僅在建立時讀取,修改後只對之後新建的空間生效,不會回寫已存在的空間。0 或負數表示使用內置默認值 10GB。', - auto_create_api_key: '爲新空間自動生成 full_access API Key,並在建立響應中返回明文 token。僅用於兼容依賴舊行爲的集成;默認關閉,建議通過 API Key 管理顯式建立。' + max_owned_per_user: '每個非超管使用者透過自助建立可擁有的最大空間數。每次建立空間時實時讀取,修改後立即生效。0 表示使用內建預設值 10;負數表示完全關閉限制(不建議在公開部署使用)。', + self_service_creation_enabled: '是否允許非超管使用者主動建立空間。關閉後,普通使用者只能透過邀請加入已有空間;跨空間超管仍可建立。修改後立即生效。', + default_storage_quota_gb: '新建空間時預設分配的儲存配額(GB),包含向量、原文、文字、索引等。僅在建立時讀取,修改後只對之後新建的空間生效,不會回寫已存在的空間。0 或負數表示使用內建預設值 10GB。', + auto_create_api_key: '為新空間自動生成 full_access API Key,並在建立響應中返回明文 token。僅用於相容依賴舊行為的整合;預設關閉,建議透過 API Key 管理顯式建立。' }, ssrf: { whitelist: 'SSRF 防護白名單。可填入 example.com / *.foo.com / 10.0.0.0/8 / 2001:db8::1。修改後立即生效。SSRF_WHITELIST_EXTRA 環境變數仍由部署方維護,不在此處覆蓋。' }, auth: { registration_mode: '自助註冊模式。self_serve = 任何人可註冊帳號;invite_only = 關閉公網註冊,僅 Owner/Admin 可邀請。修改後立即生效,但謹慎對待 self_serve(公網會接受 spam)。', - default_tenant_mode: '公開註冊後的空間初始化策略。create_personal 會自動建立個人空間並授予 Owner;tenantless 僅建立帳號,用戶需要接受邀請或主動建立空間。隻影響之後註冊的用戶。' + default_tenant_mode: '公開註冊後的空間初始化策略。create_personal 會自動建立個人空間並授予 Owner;tenantless 僅建立帳號,使用者需要接受邀請或主動建立空間。隻影響之後註冊的使用者。' } }, keyLabels: { model: { - max_concurrency: '模型默認併發上限' + max_concurrency: '模型預設併發上限' }, asynq: { core_concurrency: '核心解析保底併發數', @@ -2808,9 +2808,9 @@ export default { wiki_concurrency: 'Wiki Worker 併發數' }, tenant: { - max_owned_per_user: '每用戶最大空間數', - self_service_creation_enabled: '允許用戶自助建立空間', - default_storage_quota_gb: '新空間默認存儲配額 (GB)', + max_owned_per_user: '每使用者最大空間數', + self_service_creation_enabled: '允許使用者自助建立空間', + default_storage_quota_gb: '新空間預設儲存配額 (GB)', auto_create_api_key: '建立空間時自動生成 API Key' }, ssrf: { @@ -2818,65 +2818,65 @@ export default { }, auth: { registration_mode: '自助註冊模式', - default_tenant_mode: '註冊默認空間策略' + default_tenant_mode: '註冊預設空間策略' } }, runtime: { - title: '任務佇列運行時', - description: '後臺任務佇列的實時負載,以及各獨立 worker 池的每實例併發配置。支持查看任務明細和安全管理,每 5 秒自動刷新。', - refresh: '刷新', - autoRefresh: '自動刷新(每 5 秒)', - loading: '加載中...', + title: '任務佇列執行時', + description: '後臺任務佇列的實時負載,以及各獨立 worker 池的每例項併發配置。支援檢視任務明細和安全管理,每 5 秒自動重新整理。', + refresh: '重新整理', + autoRefresh: '自動重新整理(每 5 秒)', + loading: '載入中...', retry: '重試', unavailableTitle: '任務佇列不可用', - unavailable: '當前部署未啓用 Redis / asynq 佇列(Lite 模式),無佇列可展示。', + unavailable: '當前部署未啟用 Redis / asynq 佇列(Lite 模式),無佇列可展示。', empty: '暫無佇列資料', detailsTitle: '佇列明細', detailsDescription: '各處理通道的實時負載與等待情況。“最終失敗”表示任務超過重試上限,已停止自動執行。', poolsTitle: 'Worker 池', poolsDescription: '各階段擁有保底容量,核心解析與內容富化還可借用共享彈性池。', - perInstance: '卡片主值爲集群運行中/容量', - poolConfigured: '單實例配置 {value}', - poolInstances: '{value} 個實例', + perInstance: '卡片主值為叢集執行中/容量', + poolConfigured: '單例項配置 {value}', + poolInstances: '{value} 個例項', poolUtilization: '利用率 {value}%', queueCount: '{value} 個佇列', weightShort: '權重 {value}', - footnote: '卡片主值爲集群運行中/實時容量;單實例配置修改後需重啓。共享彈性池只消費核心解析和內容富化佇列。', + footnote: '卡片主值為叢集執行中/實時容量;單例項配置修改後需重啟。共享彈性池只消費核心解析和內容富化佇列。', updatedAt: '更新於 {value}', models: { title: '模型併發佔用', - description: '觀察後臺任務實際進入模型服務時的併發佔用;上方是任務調度,這裡是模型服務限流,兩者處於不同處理階段。', - scope: '佔用爲集群全局 · 等待爲當前實例', - disabled: '模型後臺併發治理未啓用。可在全局設置中配置模型默認併發上限。', - empty: '暫無模型調用資料;模型首次執行後臺任務後會出現在這裡。', - backgroundOnly: '僅統計後臺任務,不包含交互式對話', + description: '觀察後臺任務實際進入模型服務時的併發佔用;上方是任務排程,這裡是模型服務限流,兩者處於不同處理階段。', + scope: '佔用為叢集全域性 · 等待為當前例項', + disabled: '模型後臺併發治理未啟用。可在全域性設定中配置模型預設併發上限。', + empty: '暫無模型呼叫資料;模型首次執行後臺任務後會出現在這裡。', + backgroundOnly: '僅統計後臺任務,不包含互動式對話', status: { queued: '限流中', full: '已滿載' }, columns: { model: '模型 ID', - active: '調用中', + active: '呼叫中', waiting: '限流等待', usage: '併發用量' } }, tasks: { title: '任務明細 · {queue}', - description: '查看各狀態任務及其安全管理動作。定時、重試任務按最近執行時間優先,其餘狀態按時間倒序。', + description: '檢視各狀態任務及其安全管理動作。定時、重試任務按最近執行時間優先,其餘狀態按時間倒序。', listTitle: '{state}任務', - openAria: '查看{queue}中 {count} 個{state}任務', - unavailable: '當前部署不支持查看任務明細', + openAria: '檢視{queue}中 {count} 個{state}任務', + unavailable: '當前部署不支援檢視任務明細', empty: '這個佇列當前沒有{state}任務', loadError: '獲取任務明細失敗', - loadMore: '加載更多', - loadedSummary: '已加載 {count} 條,繼續下滑或點擊加載', - loadedAll: '已全部加載,共 {count} 條', - loadingMore: '正在加載更多…', + loadMore: '載入更多', + loadedSummary: '已載入 {count} 條,繼續下滑或點選載入', + loadedAll: '已全部載入,共 {count} 條', + loadingMore: '正在載入更多…', attempts: '執行 {current}/{max}', - unknownTarget: '未識別到關聯對象', + unknownTarget: '未識別到關聯物件', knowledgeBaseLabel: '知識庫 ID', - knowledgeLabel: '文檔 ID', + knowledgeLabel: '文件 ID', taskIDLabel: '業務任務 ID', tenantLabel: '空間 ID', sourceLabel: '來源 ID', @@ -2885,24 +2885,24 @@ export default { targetKBLabel: '目標知識庫', dataSourceLabel: '資料源 ID', syncLogLabel: '同步記錄 ID', - knowledgeCountLabel: '文檔數量', + knowledgeCountLabel: '文件數量', enqueuedAt: '入隊時間', startedAt: '開始時間', nextProcessAt: '下次執行', lastFailedAt: '最後失敗', completedAt: '完成時間', deadline: '執行截止', - worker: '執行實例', - health: '運行健康', - orphaned: '執行實例已失聯,等待還原', + worker: '執行例項', + health: '執行健康', + orphaned: '執行例項已失聯,等待還原', cancel: '終止任務', - cancelConfirm: '將通過業務取消流程終止該任務及同一文檔的相關佇列任務。確認終止?', + cancelConfirm: '將透過業務取消流程終止該任務及同一文件的相關佇列任務。確認終止?', runNow: '立即執行', runNowConfirm: '該任務將立即進入待執行佇列,重試次數不會重置。確認繼續?', deleteRecord: '清除記錄', deleteConfirm: '僅從當前佇列移除這條失敗記錄,不會執行或完成原任務,歷史日誌仍會保留。確認清除?', purgeArchived: '清除全部失敗任務', - purgeArchivedConfirm: '將從當前佇列一次性移除全部 {count} 條失敗記錄,僅清理佇列裡的失敗任務,不影響運行中或排隊中的任務,也不會回滾已失敗文檔的業務狀態。確認清除?', + purgeArchivedConfirm: '將從當前佇列一次性移除全部 {count} 條失敗記錄,僅清理佇列裡的失敗任務,不影響執行中或排隊中的任務,也不會回滾已失敗文件的業務狀態。確認清除?', purgeArchivedSuccess: '已清除 {count} 條失敗任務', purgeArchivedError: '清除失敗任務失敗', stateFilter: '按任務狀態篩選', @@ -2917,15 +2917,15 @@ export default { delete: '失敗記錄已清除' }, guides: { - active: '運行中任務可查看執行實例、開始時間和截止時間。只有具備完整業務取消語義的任務才允許終止。', + active: '執行中任務可檢視執行例項、開始時間和截止時間。只有具備完整業務取消語義的任務才允許終止。', pending: '排隊任務尚未被 worker 領取。終止操作會同步更新業務狀態,而不是隻刪除 Redis 記錄。', - scheduled: '定時任務可提前立即執行;支持業務取消的文檔任務也可以安全終止。', + scheduled: '定時任務可提前立即執行;支援業務取消的文件任務也可以安全終止。', retry: '請結合最後錯誤、重試次數和下次執行時間判斷是否立即執行或終止。', archived: '請先修復失敗原因再立即執行。清除記錄不會完成原業務任務。', - completed: '這裡只展示設置了結果保留時間的近期完成任務,不提供管理動作。' + completed: '這裡只展示設定了結果保留時間的近期完成任務,不提供管理動作。' }, states: { - active: '運行中', + active: '執行中', pending: '排隊中', scheduled: '定時執行', retry: '重試中', @@ -2933,20 +2933,20 @@ export default { completed: '已完成' }, taskTypes: { - documentProcess: '文檔解析', + documentProcess: '文件解析', manualProcess: '手工重新處理', temporaryDocumentProcess: '聊天附件解析', - postProcess: '文檔後處理', + postProcess: '文件後處理', summary: '摘要生成', tableSummary: '表格摘要生成', question: '問題生成', multimodal: '圖片多模態處理', graph: '知識圖譜抽取', sync: '資料源同步', - faqImport: 'FAQ 導入', - batchReparse: '批量重新解析', - batchDelete: '批量刪除', - move: '文檔移動', + faqImport: 'FAQ 匯入', + batchReparse: '批次重新解析', + batchDelete: '批次刪除', + move: '文件移動', indexDelete: '索引刪除', kbClone: '知識庫複製', kbDelete: '知識庫刪除', @@ -2956,7 +2956,7 @@ export default { }, failedNotice: { title: '{count} 個任務待處理', - description: '點擊下方表中紅色「最終失敗」數字查看原因,修復後可手動重試。' + description: '點選下方表中紅色「最終失敗」數字檢視原因,修復後可手動重試。' }, status: { working: '處理中', @@ -2968,7 +2968,7 @@ export default { }, columns: { queue: '佇列', - active: '運行中', + active: '執行中', pending: '排隊', scheduled: '定時', retry: '重試', @@ -2978,8 +2978,8 @@ export default { status: '狀態' }, summary: { - title: '運行概覽', - active: '運行中', + title: '執行概覽', + active: '執行中', pending: '排隊中', retry: '重試中', archived: '最終失敗' @@ -2993,15 +2993,15 @@ export default { wiki: 'Wiki 池' }, poolDescriptions: { - core: '文檔解析與手工重解析的保底容量', + core: '文件解析與手工重解析的保底容量', postprocess: '解析完成後的收尾與富化扇出', enrichment: '摘要、圖片、圖譜與問題生成', maintenance: '資料源同步、批處理與刪除清理', shared: '由核心解析與內容富化按積壓借用', - wiki: 'Wiki 內容生成與全局收尾' + wiki: 'Wiki 內容生成與全域性收尾' }, queueNames: { - default: '文檔解析', + default: '文件解析', chat_attachment: '對話附件解析', postprocess: '後處理編排', summary: '摘要生成', @@ -3013,12 +3013,12 @@ export default { wiki: 'Wiki 處理' }, queueDescriptions: { - default: '文檔解析、手工重解析', + default: '文件解析、手工重解析', chat_attachment: '會話內上傳附件解析', postprocess: '解析收尾、富化扇出', - summary: '文檔摘要、表格摘要', + summary: '文件摘要、表格摘要', sync: '手動與定時同步', - low: 'FAQ 導入、批量重解析、刪除清理', + low: 'FAQ 匯入、批次重解析、刪除清理', multimodal: '圖片 OCR、視覺描述', graph: '分塊圖譜抽取', question: '分塊問題生成', @@ -3039,49 +3039,49 @@ export default { description: '當前部署中未歸入標準分組的配置項。' }, security: { - tab: '網絡安全 {count}', - title: '網絡安全', + tab: '網路安全 {count}', + title: '網路安全', description: '管理可繞過 SSRF 防護的受信主機、IP 與網段。' }, runtime: { - tab: '運行與併發 {count}', - title: '運行與併發', + tab: '執行與併發 {count}', + title: '執行與併發', description: '配置後臺任務池與模型服務的併發容量。', - restartHint: 'Worker 配置需重啓生效' + restartHint: 'Worker 配置需重啟生效' }, tenant: { - tab: '空間默認值 {count}', - title: '空間默認值', - description: '設置新空間的初始配額與兼容性行爲,不會自動改寫已有空間。' + tab: '空間預設值 {count}', + title: '空間預設值', + description: '設定新空間的初始配額與相容性行為,不會自動改寫已有空間。' }, access: { tab: '帳號與訪問 {count}', title: '帳號與訪問', - description: '管理系統管理員、公開註冊與用戶建立空間的規則。' + description: '管理系統管理員、公開註冊與使用者建立空間的規則。' } }, priorityHint: { - disclosure: '配置來源與優先級', - tier1: '在此頁面保存過的項(帶「已覆蓋」徽章)— 始終以這裡的值爲準,環境變數會被忽略。', - tier2: '未在此處保存過的項 — 如果環境變數裡有就用環境變數,否則用程式內置默認值。', - tier3: '若想讓某項重新由環境變數控制,點擊該行的「重置」按鈕即可清除當前 UI 設置。' + disclosure: '配置來源與優先順序', + tier1: '在此頁面儲存過的項(帶「已覆蓋」徽章)— 始終以這裡的值為準,環境變數會被忽略。', + tier2: '未在此處儲存過的項 — 如果環境變數裡有就用環境變數,否則用程式內建預設值。', + tier3: '若想讓某項重新由環境變數控制,點選該行的「重置」按鈕即可清除當前 UI 設定。' } }, messages: { - fetchFailed: '獲取系統信息失敗', - networkError: '網絡錯誤,請稍後重試' + fetchFailed: '獲取系統資訊失敗', + networkError: '網路錯誤,請稍後重試' } }, tenant: { - title: '空間信息', + title: '空間資訊', currentTenant: '當前空間', switchTenant: '切換空間', - sectionDescription: '查看空間的詳細配置信息', + sectionDescription: '檢視空間的詳細配置資訊', statusActive: '活躍', - statusInactive: '未激活', + statusInactive: '未啟用', statusSuspended: '已暫停', statusUnknown: '未知', - loadingInfo: '正在加載信息...', + loadingInfo: '正在載入資訊...', retry: '重試', unknown: '未知', formatError: '格式錯誤', @@ -3089,47 +3089,47 @@ export default { noMatch: '未找到匹配的空間', switchSuccessTitle: '已切換空間', switchSuccessContent: '你已進入 {name}', - loadTenantsFailed: '加載空間列表失敗', - loading: '加載中...', - loadMore: '加載更多', + loadTenantsFailed: '載入空間列表失敗', + loading: '載入中...', + loadMore: '載入更多', api: { - title: 'API 信息', - docLabel: 'API 文檔', - docDescription: '查看完整的 API 調用文檔和示例,', - openDoc: '打開文檔', - userIdLabel: '用戶 ID', - userIdDescription: '您的唯一用戶標識', - usernameLabel: '用戶名', - usernameDescription: '您的登錄用戶名', + title: 'API 資訊', + docLabel: 'API 文件', + docDescription: '檢視完整的 API 呼叫文件和示例,', + openDoc: '開啟文件', + userIdLabel: '使用者 ID', + userIdDescription: '您的唯一使用者標識', + usernameLabel: '使用者名稱', + usernameDescription: '您的登入使用者名稱', emailLabel: '信箱', emailDescription: '您的註冊信箱地址', createdAtLabel: '註冊時間', createdAtDescription: '帳號建立的時間', - desktopPortLabel: '本地 API 端口(桌面版)', - desktopPortDescription: '填寫固定端口(如 37841)後,Chrome 擴展等工具可長期使用同一 API 地址;0 表示每次啓動隨機端口。保存後請重啓應用生效。', - desktopPortSave: '保存', - desktopPortSaved: '已保存,請重啓應用後生效', - desktopPortSaveFailed: '保存失敗', - desktopPortInvalid: '請輸入 0–65535 之間的端口', - desktopBindPublicLabel: '允許局域網訪問 API', - desktopBindPublicDescription: '開啓後內嵌服務監聽 0.0.0.0,同一局域網內其他設備可通過下方地址調用 API。存在資料暴露風險,請在防火牆與路由側自行做好訪問控制;修改後需重啓應用。', - desktopBindPublicSaved: '已保存,請重啓應用後生效', - desktopBindPublicSaveFailed: '保存失敗', - lanUrlLabel: '局域網 API 地址', - lanUrlDescription: '在已開啓「允許局域網訪問」且應用已重啓後顯示;若 IP 不準確,請在本機網絡設置中查看實際 IPv4 後替換主機部分。', - lanUrlCopyTitle: '複製局域網 API 地址', - lanUrlUnavailable: '當前已監聽所有網卡,但未能自動識別本機 IPv4。請在本機網絡設置中查看局域網地址,並手動拼接爲 http://你的IP:端口/api/v1。' + desktopPortLabel: '本地 API 埠(桌面版)', + desktopPortDescription: '填寫固定埠(如 37841)後,Chrome 擴充套件等工具可長期使用同一 API 地址;0 表示每次啟動隨機埠。儲存後請重啟應用生效。', + desktopPortSave: '儲存', + desktopPortSaved: '已儲存,請重啟應用後生效', + desktopPortSaveFailed: '儲存失敗', + desktopPortInvalid: '請輸入 0–65535 之間的埠', + desktopBindPublicLabel: '允許區域網訪問 API', + desktopBindPublicDescription: '開啟後內嵌服務監聽 0.0.0.0,同一區域網內其他裝置可透過下方地址呼叫 API。存在資料暴露風險,請在防火牆與路由側自行做好訪問控制;修改後需重啟應用。', + desktopBindPublicSaved: '已儲存,請重啟應用後生效', + desktopBindPublicSaveFailed: '儲存失敗', + lanUrlLabel: '區域網 API 地址', + lanUrlDescription: '在已開啟「允許區域網訪問」且應用已重啟後顯示;若 IP 不準確,請在本機網路設定中檢視實際 IPv4 後替換主機部分。', + lanUrlCopyTitle: '複製區域網 API 地址', + lanUrlUnavailable: '當前已監聽所有網絡卡,但未能自動識別本機 IPv4。請在本機網路設定中檢視區域網地址,並手動拼接為 http://你的IP:埠/api/v1。' }, messages: { - fetchFailed: '獲取空間信息失敗', - networkError: '網絡錯誤,請稍後重試' + fetchFailed: '獲取空間資訊失敗', + networkError: '網路錯誤,請稍後重試' }, deleteDangerZone: { title: '刪除當前空間', - desc: '刪除整個空間及其配置。刪除後,空間成員將無法繼續訪問其中的知識庫、智能體與 API Key。', + desc: '刪除整個空間及其配置。刪除後,空間成員將無法繼續訪問其中的知識庫、智慧體與 API Key。', button: '刪除空間', confirmTitle: '刪除當前空間?', - confirmBody: '此操作將刪除空間「{name}」,並使其中的知識庫、智能體、成員與 API Key 不再可用。此操作不可撤銷。', + confirmBody: '此操作將刪除空間「{name}」,並使其中的知識庫、智慧體、成員與 API Key 不再可用。此操作不可撤銷。', confirmHint: '請輸入空間名稱「{name}」以確認刪除。', confirm: '確認刪除', nameMismatch: '空間名稱不匹配', @@ -3138,16 +3138,16 @@ export default { }, leaveDangerZone: { title: '退出當前空間', - desc: '終止您在本空間的成員身份。退出後將無法訪問本空間的知識庫與智能體,之後可被再次邀請加入。', + desc: '終止您在本空間的成員身份。退出後將無法訪問本空間的知識庫與智慧體,之後可被再次邀請加入。', button: '退出空間' }, storage: { - quotaLabel: '存儲配額', - quotaDescription: '空間的總存儲空間配額', - usedLabel: '已使用存儲', - usedDescription: '已經使用的存儲空間', - usageLabel: '存儲使用率', - usageDescription: '存儲空間的使用百分比' + quotaLabel: '儲存配額', + quotaDescription: '空間的總儲存空間配額', + usedLabel: '已使用儲存', + usedDescription: '已經使用的儲存空間', + usageLabel: '儲存使用率', + usageDescription: '儲存空間的使用百分比' }, details: { idLabel: '空間 ID', @@ -3155,18 +3155,18 @@ export default { nameLabel: '空間名稱', nameDescription: '您所屬的空間名稱', descriptionLabel: '空間描述', - descriptionDescription: '空間的詳細描述信息', + descriptionDescription: '空間的詳細描述資訊', businessLabel: '空間業務', - businessDescription: '空間所屬的業務類型', + businessDescription: '空間所屬的業務型別', statusLabel: '空間狀態', - statusDescription: '空間當前的運行狀態', + statusDescription: '空間當前的執行狀態', createdAtLabel: '空間建立時間', createdAtDescription: '空間建立的時間', editName: '修改名稱', editNamePlaceholder: '請輸入新的空間名稱', - editNameConfirm: '保存', + editNameConfirm: '儲存', editNameCancel: '取消', - editNameRequired: '空間名稱不能爲空', + editNameRequired: '空間名稱不能為空', editNameSuccess: '空間名稱已更新', editNameFailed: '更新空間名稱失敗', editDescription: '修改描述', @@ -3178,9 +3178,9 @@ export default { create: { action: '建立新空間', dialogTitle: '建立新空間', - dialogSubtitle: '空間擁有獨立的知識庫與成員,你將自動成爲新空間的所有者。', + dialogSubtitle: '空間擁有獨立的知識庫與成員,你將自動成為新空間的所有者。', nameLabel: '空間名稱', - namePlaceholder: '例如:我的新項目', + namePlaceholder: '例如:我的新專案', nameRequired: '請輸入空間名稱', descriptionLabel: '描述(可選)', descriptionPlaceholder: '簡單描述一下這個空間的用途', @@ -3188,7 +3188,7 @@ export default { cancel: '取消', success: '空間建立成功', failed: '空間建立失敗', - disabled: '當前系統只允許通過邀請加入空間,不能自行建立空間。' + disabled: '當前系統只允許透過邀請加入空間,不能自行建立空間。' }, switcher: { menuLabel: '切換空間', @@ -3205,46 +3205,46 @@ export default { memoryHint: '這些是助手在回答時看到的長期記憶,刪除後不會再被使用。', suggestedQuestions: '你可以這樣問我', followUpQuestions: '繼續問', - followUpQuestionsLoading: '加載推薦問題', + followUpQuestionsLoading: '載入推薦問題', refreshSuggestedQuestions: '換一批', thinking: '思考中...', thinkingAlt: '正在思考', preparingAnswer: '正在準備回答…', - connectingModelAndGeneratingAnswer: '正在連接模型並生成回答…', + connectingModelAndGeneratingAnswer: '正在連線模型並生成回答…', modelStillResponding: '模型響應較慢,仍在等待…', deepThoughtCompleted: '已深度思考', deepThoughtAlt: '深度思考完成', referencesTitle: '參考了{count}個相關內容', - referencesDocCount: '引用了{count}篇文檔', + referencesDocCount: '引用了{count}篇文件', referencesWebCount: '參考了{count}條網頁', - referencesDocAndWebCount: '引用了{docCount}篇文檔和{webCount}條網頁', + referencesDocAndWebCount: '引用了{docCount}篇文件和{webCount}條網頁', referencesDrawerTitle: '參考來源', referencesDrawerTitleWeb: '網頁來源', - referencesDrawerTitleDocs: '文檔來源', + referencesDrawerTitleDocs: '文件來源', referencesDrawerTitleTools: '工具結果', referencesDrawerTitleMixed: '參考來源', referencesDrawerWebSection: '網頁', - referencesDrawerDocsSection: '知識庫文檔', + referencesDrawerDocsSection: '知識庫文件', referencesDrawerToolsSection: '工具', referencesDrawerEmpty: '暫無參考來源', referenceChunkCount: '{count}個片段', - fallbackHint: '未從知識庫中檢索到相關內容,以上爲模型直接回答', - requestInfoTitle: '請求信息', + fallbackHint: '未從知識庫中檢索到相關內容,以上為模型直接回答', + requestInfoTitle: '請求資訊', requestInfoRequestId: 'Request ID', - requestInfoMessageId: '消息 ID', + requestInfoMessageId: '訊息 ID', requestInfoSessionId: '會話 ID', requestInfoUrl: '請求', requestInfoSentAt: '發起時間', - requestInfoEmpty: '暫無請求信息', + requestInfoEmpty: '暫無請求資訊', channelWeb: '網頁', channelApi: 'API', channelIm: 'IM', chunkLabel: '片段{index}:', - navigateToDocument: '查看文檔詳情', + navigateToDocument: '檢視文件詳情', chunkIdLabel: '片段ID:', - documentIdLabel: '文檔ID:', + documentIdLabel: '文件ID:', faqIdLabel: 'FAQ ID:', - faqContainerIdLabel: '所屬文檔ID:', + faqContainerIdLabel: '所屬文件ID:', faqAnswersLabel: '答案:', chunkOrdinal: '片段 {index}', previewContent: '預覽內容', @@ -3261,17 +3261,17 @@ export default { otherSource: '其他來源', webGroupIntro: '以下 {count} 條內容來自', graphConfigTitle: '圖譜配置', - entityTypesLabel: '實體類型:', - relationTypesLabel: '關係類型:', + entityTypesLabel: '實體型別:', + relationTypesLabel: '關係型別:', graphResultsHeader: '找到 {count} 條相關結果', - graphNoResults: '未找到相關的圖譜信息', - unknownLink: '未知鏈接', + graphNoResults: '未找到相關的圖譜資訊', + unknownLink: '未知連結', contentLengthLabel: '長度 {value}', notProvided: '未提供', promptLabel: '提示詞', - errorMessageLabel: '錯誤信息', + errorMessageLabel: '錯誤資訊', summaryLabel: '總結', - rawTextLabel: '原始文本', + rawTextLabel: '原始文字', collapseRaw: '收起原文', expandRaw: '展開原文', noWebContent: '未獲取到網頁內容', @@ -3287,11 +3287,11 @@ export default { noDatabaseRecords: '未找到匹配的記錄', nullValuePlaceholder: '', chunkCountValue: '{count} 個片段', - documentDescriptionLabel: '文檔描述:', + documentDescriptionLabel: '文件描述:', documentSourceLabel: '來源:', - documentFileLabel: '文件信息:', + documentFileLabel: '檔案資訊:', documentMetadataLabel: '元資料', - documentInfoEmpty: '暫無文檔信息', + documentInfoEmpty: '暫無文件資訊', positionLabel: '位置:', chunkPositionValue: '第 {index} 個片段', contentLengthLabelSimple: '內容長度:', @@ -3302,37 +3302,37 @@ export default { enterDescription: '輸入描述', rawOutputLabel: '原始輸出', wikiWritePageTitle: 'Wiki 頁面寫入', - wikiReplaceTextTitle: 'Wiki 文本替換', - wikiRenamePageTitle: 'Wiki 頁面重命名', + wikiReplaceTextTitle: 'Wiki 文字替換', + wikiRenamePageTitle: 'Wiki 頁面重新命名', wikiDeletePageTitle: 'Wiki 頁面刪除', wikiActionCreated: '已建立', wikiActionUpdated: '已更新', - wikiActionRenamed: '已重命名', + wikiActionRenamed: '已重新命名', wikiActionDeleted: '已刪除', wikiFieldSlug: '頁面路徑', wikiFieldTitle: '標題', - wikiFieldPageType: '類型', + wikiFieldPageType: '型別', wikiFieldSummary: '摘要', - wikiFieldOldText: '原文本', - wikiFieldNewText: '新文本', + wikiFieldOldText: '原文字', + wikiFieldNewText: '新文字', wikiFieldOldSlug: '原路徑', wikiFieldNewSlug: '新路徑', wikiFieldAffectedPages: '受影響頁面', - wikiAffectedCount: '{count} 個頁面的鏈接已更新', + wikiAffectedCount: '{count} 個頁面的連結已更新', processError: '處理出錯', sessionExcerpt: '會話摘錄', noAnswerContent: '(無回答內容)', noMatchFound: '未找到匹配的內容', deleteSessionFailed: '刪除失敗,請稍後再試!', imageTooMany: '最多上傳5張圖片', - imageTypeSizeError: '僅支持 JPG/PNG/GIF/WEBP 格式,單張不超過 10MB', - imageUploadTooltip: '上傳圖片(支持貼上/拖拽)', - attachmentUploadTooltip: '上傳附件(文檔、音頻等)', + imageTypeSizeError: '僅支援 JPG/PNG/GIF/WEBP 格式,單張不超過 10MB', + imageUploadTooltip: '上傳圖片(支援貼上/拖拽)', + attachmentUploadTooltip: '上傳附件(文件、音訊等)', attachmentWithCount: '已上傳 {count} 個附件', attachmentTooMany: '最多上傳 {max} 個附件', attachmentTotalTooMany: '圖片和附件合計最多 {max} 個', - attachmentTooLarge: '文件 {name} 超過 {max}MB 限制', - attachmentTypeNotSupported: '不支持的文件類型:{name}', + attachmentTooLarge: '檔案 {name} 超過 {max}MB 限制', + attachmentTypeNotSupported: '不支援的檔案型別:{name}', attachmentUploading: '上傳中 {progress}%', attachmentParsing: '正在解析', attachmentReady: '解析完成', @@ -3342,122 +3342,122 @@ export default { }, knowledgeEditor: { titleCreate: '新建知識庫', - titleEdit: '知識庫設置', + titleEdit: '知識庫設定', advanced: { - title: '高級設置', - description: '配置問題生成等高級功能', + title: '高階設定', + description: '配置問題生成等高階功能', multimodal: { label: '多模態功能', - description: '啓用圖片等多模態內容的理解能力', + description: '啟用圖片等多模態內容的理解能力', vllmLabel: 'VLLM 視覺模型', vllmDescription: '用於多模態理解的視覺語言模型(必選)', vllmPlaceholder: '請選擇 VLLM 模型(必選)', descriptionLanguageLabel: '圖片描述語言', - descriptionLanguageDescription: '留空時跟隨文檔語言;不再強制使用中文', - descriptionLanguageAuto: '自動跟隨文檔語言', + descriptionLanguageDescription: '留空時跟隨文件語言;不再強制使用中文', + descriptionLanguageAuto: '自動跟隨文件語言', customInstructionsLabel: '圖片解析要求', - customInstructionsDescription: '補充需要重點識別的視覺信息,OCR 和 Markdown 格式協議保持不變', - customInstructionsPlaceholder: '例如:重點識別設備銘牌、型號、告警代碼和表格中的單位…' + customInstructionsDescription: '補充需要重點識別的視覺資訊,OCR 和 Markdown 格式協議保持不變', + customInstructionsPlaceholder: '例如:重點識別裝置銘牌、型號、告警程式碼和表格中的單位…' }, tableMetadataInstructions: { label: '表格元資料生成要求', - description: '爲 CSV/Excel 摘要補充業務背景和字段語義,幫助後續檢索理解表格內容', - placeholder: '例如:這是銷售訂單表,金額單位爲元,status 字段使用公司內部狀態碼…' + description: '為 CSV/Excel 摘要補充業務背景和欄位語義,幫助後續檢索理解表格內容', + placeholder: '例如:這是銷售訂單表,金額單位為元,status 欄位使用公司內部狀態碼…' }, questionGeneration: { label: 'AI 問題生成', - description: '解析文檔時調用大模型爲每個分塊生成相關問題,提高檢索召回率。啓用後會增加文檔解析耗時。', + description: '解析文件時呼叫大模型為每個分塊生成相關問題,提高檢索召回率。啟用後會增加文件解析耗時。', countLabel: '生成問題數量', - countDescription: '每個文檔分塊生成的問題數量(1-10)', + countDescription: '每個文件分塊生成的問題數量(1-10)', instructionsLabel: '問題生成要求', instructionsDescription: '指定問題面向的人群、場景和表達方式,系統仍維護穩定輸出格式', - instructionsPlaceholder: '例如:生成客服用戶常問的自然語言問題,避免考試題式表達…' + instructionsPlaceholder: '例如:生成客服使用者常問的自然語言問題,避免考試題式表達…' }, autoTag: { label: '自動關聯標籤', - description: '文檔解析完成後,從當前知識庫已有標籤中選擇合適標籤自動關聯。不會建立或刪除標籤,並會增加一次模型調用。', + description: '文件解析完成後,從當前知識庫已有標籤中選擇合適標籤自動關聯。不會建立或刪除標籤,並會增加一次模型呼叫。', modelLabel: '分類模型', modelDescription: '留空時使用知識庫摘要模型。', modelPlaceholder: '請選擇分類模型', - maxTagsLabel: '單篇文檔最多標籤數', - maxTagsDescription: '每篇文檔最多自動關聯 1-10 個已有標籤。', - skipIfTaggedLabel: '跳過已有標籤的文檔', - skipIfTaggedDescription: '開啓後,上傳時已手動設置標籤的文檔不再自動打標籤,避免覆蓋人工分類意圖。' + maxTagsLabel: '單篇文件最多標籤數', + maxTagsDescription: '每篇文件最多自動關聯 1-10 個已有標籤。', + skipIfTaggedLabel: '跳過已有標籤的文件', + skipIfTaggedDescription: '開啟後,上傳時已手動設定標籤的文件不再自動打標籤,避免覆蓋人工分類意圖。' } }, asr: { - title: '音頻語音識別', - description: '配置語音識別(ASR),啓用後可上傳音頻文件並整段轉寫爲文本(常見格式:mp3、wav、m4a、flac、ogg 等)。暫不支持視頻上傳。', - label: '啓用音頻語音識別', - desc: '啓用後可上傳音頻到知識庫,系統自動將語音轉寫爲文本並參與解析與檢索', + title: '音訊語音識別', + description: '配置語音識別(ASR),啟用後可上傳音訊檔案並整段轉寫為文字(常見格式:mp3、wav、m4a、flac、ogg 等)。暫不支援影片上傳。', + label: '啟用音訊語音識別', + desc: '啟用後可上傳音訊到知識庫,系統自動將語音轉寫為文字並參與解析與檢索', modelLabel: 'ASR 模型', - modelDescription: '用於音頻中語音轉文本的識別模型(如 OpenAI Whisper)', + modelDescription: '用於音訊中語音轉文字的識別模型(如 OpenAI Whisper)', modelPlaceholder: '請選擇 ASR 模型', - languageLabel: '音頻語言提示', + languageLabel: '音訊語言提示', languageDescription: '可選;指定主要語種可提高部分 ASR 模型的識別穩定性,留空時自動檢測', languagePlaceholder: '例如 zh、en,留空自動檢測' }, multimodal: { - title: '圖像處理配置', - description: '配置圖像內容理解能力,啓用後支持圖片等非文本內容的解析和檢索' + title: '影象處理配置', + description: '配置影象內容理解能力,啟用後支援圖片等非文字內容的解析和檢索' }, chunking: { - title: '分塊設置', - description: '控制上傳文檔在嵌入前的切分方式。默認值適用於大多數場景,僅在檢索質量異常時調整。', + title: '分塊設定', + description: '控制上傳文件在嵌入前的切分方式。預設值適用於大多數場景,僅在檢索質量異常時調整。', sizeLabel: '分塊大小', - sizeDescription: '每個分塊的最大字符數(100-4000)。默認 512 ≈ 中文 300 tokens / 英文 100-130 tokens。FAQ 用 200-400,敘述性長文檔用 1000-2000。', - characters: '字符', + sizeDescription: '每個分塊的最大字元數(100-4000)。預設 512 ≈ 中文 300 tokens / 英文 100-130 tokens。FAQ 用 200-400,敘述性長文件用 1000-2000。', + characters: '字元', overlapLabel: '分塊重疊', - overlapDescription: '相鄰分塊之間共享的字符數(0-500)。默認 80 ≈ 分塊大小的 15%,符合當前研究推薦。FAQ/結構化資料用 0,長篇敘述用 150-200。', + overlapDescription: '相鄰分塊之間共享的字元數(0-500)。預設 80 ≈ 分塊大小的 15%,符合當前研究推薦。FAQ/結構化資料用 0,長篇敘述用 150-200。', separatorsLabel: '分隔符', - separatorsDescription: '切分時優先使用的字符或字符串。優先級高的分隔符先嚐試;默認順序優先段落 → 句子 → 標點。', + separatorsDescription: '切分時優先使用的字元或字串。優先順序高的分隔符先嚐試;預設順序優先段落 → 句子 → 標點。', separatorsPlaceholder: '選擇或自定義分隔符', parentChildLabel: '父子分塊', - parentChildDescription: '兩級分塊:小的子塊用於向量匹配(精準命中),大的父塊返回給 LLM(更豐富上下文)。建議用於長文檔(>10 頁);短 FAQ 可關閉以節省存儲。', + parentChildDescription: '兩級分塊:小的子塊用於向量匹配(精準命中),大的父塊返回給 LLM(更豐富上下文)。建議用於長文件(>10 頁);短 FAQ 可關閉以節省儲存。', parentChunkSizeLabel: '父塊大小', - parentChunkSizeDescription: '返回給 LLM 的上下文塊大小(512-8192)。默認 4096 ≈ 1000 英文 tokens,適合所有現代 LLM 上下文窗口。', + parentChunkSizeDescription: '返回給 LLM 的上下文塊大小(512-8192)。預設 4096 ≈ 1000 英文 tokens,適合所有現代 LLM 上下文視窗。', childChunkSizeLabel: '子塊大小', - childChunkSizeDescription: '用於向量匹配的嵌入塊大小(64-2048)。默認 384 ≈ 80 tokens,是 sentence-transformer / BGE 類嵌入模型的最佳點。', + childChunkSizeDescription: '用於向量匹配的嵌入塊大小(64-2048)。預設 384 ≈ 80 tokens,是 sentence-transformer / BGE 類嵌入模型的最佳點。', strategyLabel: '分塊策略', - strategyDescription: '選擇文檔的分塊方式。自動模式會分析每個文檔的結構並選擇最佳策略。', + strategyDescription: '選擇文件的分塊方式。自動模式會分析每個文件的結構並選擇最佳策略。', strategyPlaceholder: '選擇分塊策略(不填則按長度切分)', overlapWarning: '重疊相對於分塊大小較大——分塊之間會共享大部分內容。', - advancedLabel: '高級選項', + advancedLabel: '高階選項', tokenLimitLabel: '每塊 Token 上限', - tokenLimitDescription: '每個分塊的硬性 Token 上限(0-8192)。0 = 關閉(僅按字符數)。當嵌入模型 Token 上限較小時啓用:MiniLM (256 tok) 用 200,BGE/Cohere (512 tok) 用 400。現代嵌入器(OpenAI、Voyage、Jina-v3)支持 >2000 tokens,保持 0 即可。', + tokenLimitDescription: '每個分塊的硬性 Token 上限(0-8192)。0 = 關閉(僅按字元數)。當嵌入模型 Token 上限較小時啟用:MiniLM (256 tok) 用 200,BGE/Cohere (512 tok) 用 400。現代嵌入器(OpenAI、Voyage、Jina-v3)支援 >2000 tokens,保持 0 即可。', languagesLabel: '語言提示', - languagesDescription: '限制啓發式模式只識別選定的語言(DE/EN/ZH)。留空 = 自動檢測。同質化語料庫可顯式設置以避免跨語言誤匹配。', + languagesDescription: '限制啟發式模式只識別選定的語言(DE/EN/ZH)。留空 = 自動檢測。同質化語料庫可顯式設定以避免跨語言誤匹配。', languagesPlaceholder: '自動檢測', debug: { toggle: '測試分塊效果', - toggleHint: '無需重新上傳即可對示例文本運行分塊器', - sampleLabel: '示例文本', - samplePlaceholder: '貼上 Markdown / 純文本片段以查看當前配置的分塊結果…', + toggleHint: '無需重新上傳即可對示例文字執行分塊器', + sampleLabel: '示例文字', + samplePlaceholder: '貼上 Markdown / 純文字片段以檢視當前配置的分塊結果…', presetLabel: '載入示例:', - runButton: '運行預覽', - loading: '正在對示例運行分塊器…', + runButton: '執行預覽', + loading: '正在對示例執行分塊器…', errorPrefix: '預覽失敗', selectedTier: '選定策略', rejected: '被拒絕的層級', contextHeader: '上下文標題', - fallbackWarning: '策略鏈已窮盡 — 當前設置無法智能分塊此內容', + fallbackWarning: '策略鏈已窮盡 — 當前設定無法智慧分塊此內容', stats: { chunks: '塊', truncated: '已截斷;總數 {total}' }, profile: { lines: '行', - chars: '字符', + chars: '字元', headings: 'Markdown 標題', pageBreaks: '分頁符', chapterMarkers: '章節標記', languages: '語言' }, samples: { - markdown: 'Markdown 文檔', + markdown: 'Markdown 文件', faq: 'FAQ 列表', chapter: 'PDF 章節', - plain: '純文本' + plain: '純文字' } }, languageOptions: { @@ -3468,19 +3468,19 @@ export default { strategies: { legacy: { label: '按長度切分', - tooltip: '忽略結構,僅按字符數和分隔符遞歸切分——原始行爲。當上述策略對你的內容效果不佳時使用。' + tooltip: '忽略結構,僅按字元數和分隔符遞迴切分——原始行為。當上述策略對你的內容效果不佳時使用。' }, heuristic: { label: '結構感知', - tooltip: '識別分頁符、編號章節、多語言章節標記(DE/EN/ZH)、全大寫標題等結構信號進行切分。適合沒有 Markdown 標題的 PDF / 掃描件。' + tooltip: '識別分頁符、編號章節、多語言章節標記(DE/EN/ZH)、全大寫標題等結構訊號進行切分。適合沒有 Markdown 標題的 PDF / 掃描件。' }, heading: { label: '按標題切分', - tooltip: '在 Markdown 標題(#、##、###)邊界處切分,每塊自動帶上所在標題路徑。適合結構清晰的 Markdown 文檔。' + tooltip: '在 Markdown 標題(#、##、###)邊界處切分,每塊自動帶上所在標題路徑。適合結構清晰的 Markdown 文件。' }, auto: { label: '自動', - tooltip: '文檔分析器根據內容結構自動在「按標題切分」「結構感知」「按長度切分」之間選擇。' + tooltip: '文件分析器根據內容結構自動在「按標題切分」「結構感知」「按長度切分」之間選擇。' } }, separators: { @@ -3496,83 +3496,83 @@ export default { }, models: { title: '模型配置', - description: '爲知識庫選擇合適的 AI 模型', + description: '為知識庫選擇合適的 AI 模型', llmLabel: 'LLM 大語言模型', llmDesc: '用於總結和摘要的大語言模型', llmPlaceholder: '請選擇 LLM 模型(可選)', embeddingLabel: 'Embedding 嵌入模型', - embeddingDesc: '用於文本向量化的嵌入模型', + embeddingDesc: '用於文字向量化的嵌入模型', embeddingPlaceholder: '請選擇 Embedding 模型', - embeddingLocked: '知識庫中已有文件,無法修改 Embedding 模型', + embeddingLocked: '知識庫中已有檔案,無法修改 Embedding 模型', embeddingOptional: '(可選)', embeddingWikiOptionalDesc: '可選。配置後用於 Wiki 目錄歸類的相似度匹配,讓新頁面更好地複用已有目錄;不配置則按完整目錄樹歸類。' }, faqExport: { - exportButton: '導出', - exportCSV: '導出 CSV', - exportJSON: '導出 JSON', - exportSuccess: '導出成功', - exportFailed: '導出失敗' + exportButton: '匯出', + exportCSV: '匯出 CSV', + exportJSON: '匯出 JSON', + exportSuccess: '匯出成功', + exportFailed: '匯出失敗' }, faqImport: { - title: '批量導入 FAQ', - modeLabel: '導入模式', - appendMode: '追加導入', + title: '批次匯入 FAQ', + modeLabel: '匯入模式', + appendMode: '追加匯入', replaceMode: '替換現有條目', - fileLabel: '選擇文件', - fileTip: '支持 JSON / CSV / Excel。CSV/Excel 表頭:標籤(必填)、問題(必填)、相似問題(選填-多個用##分隔)、反例問題(選填-多個用##分隔)、機器人回答(必填-多個用##分隔)、是否全部回覆(選填-默認FALSE)、是否停用(選填-默認FALSE)、是否禁止被推薦(選填-默認False 可被推薦)。也支持舊錶頭「分類」及舊格式:standard_question、answers、similar_questions、negative_questions', - clickToUpload: '點擊上傳文件', - dragDropTip: '或拖拽文件到此處', - importButton: '導入 FAQ', + fileLabel: '選擇檔案', + fileTip: '支援 JSON / CSV / Excel。CSV/Excel 表頭:標籤(必填)、問題(必填)、相似問題(選填-多個用##分隔)、反例問題(選填-多個用##分隔)、機器人回答(必填-多個用##分隔)、是否全部回覆(選填-預設FALSE)、是否停用(選填-預設FALSE)、是否禁止被推薦(選填-預設False 可被推薦)。也支援舊錶頭「分類」及舊格式:standard_question、answers、similar_questions、negative_questions', + clickToUpload: '點選上傳檔案', + dragDropTip: '或拖拽檔案到此處', + importButton: '匯入 FAQ', deleteSuccess: '選中條目已刪除', previewCount: '共解析 {count} 條記錄', previewMore: '還有 {count} 條未展示', - importSuccess: '導入成功', - parseFailed: '解析文件失敗', - invalidJSON: 'JSON 文件格式不正確', - unsupportedFormat: '暫不支持該文件格式', - selectFile: '請先選擇需要導入的文件', - downloadExample: '下載示例文件', + importSuccess: '匯入成功', + parseFailed: '解析檔案失敗', + invalidJSON: 'JSON 檔案格式不正確', + unsupportedFormat: '暫不支援該檔案格式', + selectFile: '請先選擇需要匯入的檔案', + downloadExample: '下載示例檔案', downloadExampleJSON: '下載 JSON 示例', downloadExampleCSV: '下載 CSV 示例', downloadExampleExcel: '下載 Excel 示例' }, faq: { title: '問答', - subtitle: '結構化問答管理,支持標準問、相似問和反例,精準匹配用戶查詢,提升問答準確率', - description: '設置 FAQ 知識庫的索引策略和問答組織方式', + subtitle: '結構化問答管理,支援標準問、相似問和反例,精準匹配使用者查詢,提升問答準確率', + description: '設定 FAQ 知識庫的索引策略和問答組織方式', indexModeLabel: '索引方式', indexModeDescription: '僅索引問題可提升精度,索引問答可提高召回率', questionIndexModeLabel: '問題索引方式', - questionIndexModeDescription: '合併索引:標準問和相似問合併索引;分別索引:標準問和每個相似問獨立索引,檢索更精確但需要更多存儲', - entryGuide: 'FAQ 條目由標準問、相似問、反例和多個答案組成,可在知識庫詳情中批量導入、編輯。', - tagDesc: '爲 FAQ 條目選擇標籤', + questionIndexModeDescription: '合併索引:標準問和相似問合併索引;分別索引:標準問和每個相似問獨立索引,檢索更精確但需要更多儲存', + entryGuide: 'FAQ 條目由標準問、相似問、反例和多個答案組成,可在知識庫詳情中批次匯入、編輯。', + tagDesc: '為 FAQ 條目選擇標籤', tagPlaceholder: '請選擇標籤', standardQuestion: '標準問', - standardQuestionDesc: '設置問題的標準表述,這是用戶最常問的問題形式。', + standardQuestionDesc: '設定問題的標準表述,這是使用者最常問的問題形式。', answers: '答案', - answersDesc: '提供完整準確的答案內容,可添加多個答案以覆蓋不同場景。', + answersDesc: '提供完整準確的答案內容,可新增多個答案以覆蓋不同場景。', similarQuestions: '相似問', - similarQuestionsDesc: '添加與標準問意思相同但表述不同的問題,幫助系統更好地匹配用戶查詢。', + similarQuestionsDesc: '新增與標準問意思相同但表述不同的問題,幫助系統更好地匹配使用者查詢。', negativeQuestions: '反例', - negativeQuestionsDesc: '添加不應匹配此答案的問題,用於排除誤匹配的情況。', + negativeQuestionsDesc: '新增不應匹配此答案的問題,用於排除誤匹配的情況。', editorCreate: '新增 FAQ 條目', editorEdit: '編輯 FAQ 條目', - answerPlaceholder: '請輸入答案內容,支持多行文本,按 Ctrl+Enter 或點擊按鈕添加', - similarPlaceholder: '輸入相似問題後點擊加號添加', - negativePlaceholder: '輸入反例後點擊加號添加', + answerPlaceholder: '請輸入答案內容,支援多行文字,按 Ctrl+Enter 或點選按鈕新增', + similarPlaceholder: '輸入相似問題後點選加號新增', + negativePlaceholder: '輸入反例後點選加號新增', answerRequired: '請至少填寫一個答案', emptyTitle: '暫無 FAQ 條目', - emptyDesc: '點擊上方"新增 FAQ 條目"按鈕開始建立', + emptyDesc: '點選上方"新增 FAQ 條目"按鈕開始建立', searchPlaceholder: '搜尋問題和答案...', searchTest: '檢索測試', createGroup: '新建', searchTestTitle: 'FAQ 檢索測試', queryLabel: '查詢內容', queryPlaceholder: '請輸入要檢索的問題', - vectorThresholdDesc: '範圍 0-1,默認 0.7', + vectorThresholdDesc: '範圍 0-1,預設 0.7', matchCountLabel: '結果數量', - matchCountDesc: '範圍 1-50,默認 10', + matchCountDesc: '範圍 1-50,預設 10', searchButton: '開始檢索', searching: '檢索中...', searchResults: '檢索結果', @@ -3581,21 +3581,21 @@ export default { matchTypeEmbedding: '向量匹配', matchTypeKeywords: '關鍵詞匹配', similarityThresholdLabel: '相似度閾值', - statusEnabled: '已啓用', + statusEnabled: '已啟用', statusDisabled: '已禁用', - statusEnableSuccess: 'FAQ 條目已啓用', + statusEnableSuccess: 'FAQ 條目已啟用', statusDisableSuccess: 'FAQ 條目已禁用', statusUpdateFailed: '更新狀態失敗', recommended: '推薦', - recommendedEnabled: '已開啓推薦', + recommendedEnabled: '已開啟推薦', recommendedDisabled: '已關閉推薦', recommendedDisableSuccess: 'FAQ 條目已關閉推薦', recommendedUpdateFailed: '更新推薦狀態失敗', - batchUpdateTag: '批量設置標籤', - batchUpdateTagTip: '將爲 {count} 個選中的條目設置標籤', - batchEnable: '批量啓用', - batchDisable: '批量禁用', - batchDelete: '批量刪除', + batchUpdateTag: '批次設定標籤', + batchUpdateTagTip: '將為 {count} 個選中的條目設定標籤', + batchEnable: '批次啟用', + batchDisable: '批次禁用', + batchDelete: '批次刪除', confirmBatchDelete: '確認刪除選中的 {count} 個 FAQ 條目?刪除後將無法還原。', batchDeleteSuccess: '已刪除 {count} 個 FAQ 條目', modes: { @@ -3606,12 +3606,12 @@ export default { } }, document: { - title: '文檔', - subtitle: '支持點擊或拖拽上傳,多格式文檔自動解析並智能分塊,快速構建可檢索的知識庫' + title: '文件', + subtitle: '支援點選或拖拽上傳,多格式文件自動解析並智慧分塊,快速構建可檢索的知識庫' }, messages: { - loadModelsFailed: '加載模型列表失敗', - loadDataFailed: '加載知識庫資料失敗', + loadModelsFailed: '載入模型列表失敗', + loadDataFailed: '載入知識庫資料失敗', notFound: '知識庫不存在', nameRequired: '請輸入知識庫名稱', summaryRequired: '請選擇 Summary 模型', @@ -3620,27 +3620,27 @@ export default { createFailed: '建立知識庫失敗', missingId: '缺少知識庫 ID', buildDataFailed: '資料構建失敗', - updateSuccess: '配置保存成功', + updateSuccess: '配置儲存成功', indexModeRequired: '請選擇 FAQ 的索引方式', - storageChangeConfirm: '知識庫中已有文件,更改存儲引擎後舊文件可能無法正常訪問。是否確認更改?' + storageChangeConfirm: '知識庫中已有檔案,更改儲存引擎後舊檔案可能無法正常訪問。是否確認更改?' }, share: { description: '將知識庫共享給空間,讓空間成員可以訪問和使用', hintTitle: '共享說明', addShare: '共享', unshareConfirm: '確定要取消對「{name}」的共享嗎?', - tip1: '共享後,空間成員將根據設定的權限訪問此知識庫', - tip2: '可編輯權限允許成員修改知識庫內容,只讀權限僅允許檢索和問答' + tip1: '共享後,空間成員將根據設定的許可權訪問此知識庫', + tip2: '可編輯許可權允許成員修改知識庫內容,只讀許可權僅允許檢索和問答' }, buttons: { create: '建立知識庫', - save: '保存配置', - saveAndClose: '保存並關閉', + save: '儲存配置', + saveAndClose: '儲存並關閉', }, postCreateHint: { title: '建立成功', - footer: '可繼續調整配置,設置共享與資料源,完成後點擊「保存並關閉」。', - followUpDesc: '可在左側配置資料源,或在「共享管理」中發佈到空間', + footer: '可繼續調整配置,設定共享與資料源,完成後點選「儲存並關閉」。', + followUpDesc: '可在左側配置資料源,或在「共享管理」中釋出到空間', }, wikiBrowser: { editBtn: '編輯', @@ -3652,12 +3652,12 @@ export default { deletePageFailed: '刪除頁面失敗', editTitlePlaceholder: '頁面標題', editSummaryPlaceholder: '一句話摘要(用於索引列表)', - editContentPlaceholder: 'Markdown 正文,支持 [[頁面鏈接]] 語法', - editSaveSuccess: '頁面已保存', - editSaveFailed: '保存失敗', - editConflictHint: '保存衝突:頁面已被他人或系統更新至 v{ver}。你可以放棄本地修改加載最新版本,或覆蓋保存(被覆蓋的版本會保留在歷史中)。', - editConflictReload: '加載最新版本', - editConflictOverwrite: '覆蓋保存', + editContentPlaceholder: 'Markdown 正文,支援 [[頁面連結]] 語法', + editSaveSuccess: '頁面已儲存', + editSaveFailed: '儲存失敗', + editConflictHint: '儲存衝突:頁面已被他人或系統更新至 v{ver}。你可以放棄本地修改載入最新版本,或覆蓋儲存(被覆蓋的版本會保留在歷史中)。', + editConflictReload: '載入最新版本', + editConflictOverwrite: '覆蓋儲存', editSourceUser: '手動編輯', editSourceAgent: 'AI 修改', editSourceRevert: '版本回滾', @@ -3669,50 +3669,50 @@ export default { newPageSlugLabel: 'Slug(頁面地址)', newPageSlugPlaceholder: '例如 concept/my-topic', newPageSlugHint: '由字母/數字/中劃線組成,可用 / 分層,建立後不可修改', - newPageTypeLabel: '頁面類型', + newPageTypeLabel: '頁面型別', newPageContentLabel: '正文(可選)', newPageMissingFields: '請填寫標題和 Slug', newPageSuccess: '頁面已建立', newPageFailed: '建立頁面失敗', revisionCurrent: '當前版本', - revisionCurrentHint: '這是頁面的當前版本,選擇左側的歷史版本可查看差異或回滾。', - revisionSelectHint: '選擇左側的版本查看內容', + revisionCurrentHint: '這是頁面的當前版本,選擇左側的歷史版本可檢視差異或回滾。', + revisionSelectHint: '選擇左側的版本檢視內容', revisionEmpty: '暫無歷史版本,頁面內容變化後會自動記錄快照', revisionDiff: '對比當前', - revisionRaw: '查看原文', - revisionDiffCaption: 'v{from} → v{to}(紅色爲該版本,綠色爲當前)', + revisionRaw: '檢視原文', + revisionDiffCaption: 'v{from} → v{to}(紅色為該版本,綠色為當前)', revisionDiffIncremental: '版本變更', revisionDiffCumulative: '對比當前', revisionDiffBasisLabel: '對比方式', - revisionViewModeLabel: '查看方式', + revisionViewModeLabel: '檢視方式', revisionLatestChangeHint: '上一版到當前版的變更', revisionIncrementalHint: '產生 v{ver} 的變更', revisionInitialRange: '初始 → v{ver}', revisionInitialCreationHint: '初始建立內容', revisionCumulativeHint: '該版本到當前版的累計變更', - revisionDiffIncrementalCaption: 'v{from} → v{to}(相鄰版本,紅色爲舊、綠色爲新)', + revisionDiffIncrementalCaption: 'v{from} → v{to}(相鄰版本,紅色為舊、綠色為新)', revisionDiffCumulativeCaption: 'v{from} → v{to}(距當前的累計變更)', revisionFirstVersionHint: '這是首個版本,沒有上一版可對比。', revisionDiffTitle: '標題', revisionDiffSummary: '摘要', revisionDiffContent: '正文', revisionDiffEmpty: '此版本與當前在標題、摘要和正文上均無差異', - revisionLoadFailed: '加載版本歷史失敗', + revisionLoadFailed: '載入版本歷史失敗', revertBtn: '回滾到此版本', - revertConfirm: '確定回滾到 v{ver} 嗎?當前內容會先保存爲歷史版本,回滾操作可再次撤銷。', + revertConfirm: '確定回滾到 v{ver} 嗎?當前內容會先儲存為歷史版本,回滾操作可再次撤銷。', revertSuccess: '已回滾到 v{ver}', revertFailed: '回滾失敗', - viewInGraph: '在圖譜中查看', + viewInGraph: '在圖譜中檢視', editingBadge: '編輯中', pageActions: '頁面操作', - tabDocuments: '文檔', + tabDocuments: '文件', tabGraph: '圖譜', - tabGraphTip: 'Wiki 頁面之間的引用關係圖(即頁面鏈接圖譜),與「知識庫設置 → 知識圖譜」中基於 LLM 抽取的實體-關係圖譜不是同一個概念', + tabGraphTip: 'Wiki 頁面之間的引用關係圖(即頁面連結圖譜),與「知識庫設定 → 知識圖譜」中基於 LLM 抽取的實體-關係圖譜不是同一個概念', searchPlaceholder: '搜尋 Wiki 頁面...', searchNoResults: '沒有找到匹配的頁面', - viewModeToggle: '切換目錄視圖', - viewTree: '樹形視圖', - viewList: '列表視圖', + viewModeToggle: '切換目錄檢視', + viewTree: '樹形檢視', + viewList: '列表檢視', newRootFolder: '新建目錄', newSubfolder: '新建子目錄', folderActions: '目錄操作', @@ -3721,9 +3721,9 @@ export default { createFolderFailed: '建立目錄失敗', movePageSuccess: '頁面已移動', movePageFailed: '移動頁面失敗', - renameFolder: '重命名目錄', - renameFolderSuccess: '目錄已重命名', - renameFolderFailed: '重命名目錄失敗', + renameFolder: '重新命名目錄', + renameFolderSuccess: '目錄已重新命名', + renameFolderFailed: '重新命名目錄失敗', deleteFolder: '刪除目錄', deleteFolderConfirm: '確定要刪除目錄“{name}”嗎?', deleteFolderSuccess: '目錄已刪除', @@ -3743,20 +3743,20 @@ export default { filterComparison: '對比', legendFamiliar: '你常用的資料', emptyTitle: '暫無 Wiki 頁面', - emptyDesc: '上傳文檔並啓用 Wiki 後將自動生成知識頁面', - selectPageHint: '從左側選擇一個頁面查看內容', + emptyDesc: '上傳文件並啟用 Wiki 後將自動生成知識頁面', + selectPageHint: '從左側選擇一個頁面檢視內容', version: 'v{ver}', aliases: '別名', - linkedFrom: '被鏈接', - sources: '來源文檔', - graphEmpty: '加載圖譜中...', - fitView: '適應屏幕', + linkedFrom: '被連結', + sources: '來源文件', + graphEmpty: '載入圖譜中...', + fitView: '適應螢幕', indexTitle: '索引', - loading: '加載中…', - loadMoreShort: '加載更多', + loading: '載入中…', + loadMoreShort: '載入更多', indexOverviewTag: '分類目錄', - indexEmpty: '暫無 Wiki 頁面,請先上傳文檔', - graphNoData: '暫無圖譜資料,請先上傳文檔(這裡展示的是 Wiki 頁面之間的鏈接關係,與「知識庫設置 → 知識圖譜」中的實體-關係圖譜不同)', + indexEmpty: '暫無 Wiki 頁面,請先上傳文件', + graphNoData: '暫無圖譜資料,請先上傳文件(這裡展示的是 Wiki 頁面之間的連結關係,與「知識庫設定 → 知識圖譜」中的實體-關係圖譜不同)', showArrows: '顯示箭頭', hideArrows: '隱藏箭頭', expandNeighbors: '展開鄰居', @@ -3772,9 +3772,9 @@ export default { helpButtonTitle: '操作幫助', helpTitle: '畫布操作', helpClickAction: '單擊', - helpClickDesc: '打開節點詳情', + helpClickDesc: '開啟節點詳情', helpDblClickAction: '雙擊', - helpDblClickDesc: '以該節點爲中心聚焦', + helpDblClickDesc: '以該節點為中心聚焦', helpShiftClickAction: 'Shift + 單擊', helpShiftClickDesc: '疊加該節點鄰居到畫布', helpHoverPlusAction: '懸浮 → ⊕', @@ -3785,18 +3785,18 @@ export default { helpPanDesc: '平移畫布', helpZoomAction: '滾輪', helpZoomDesc: '縮放畫布', - neighborsProgress: '已顯示鄰居 {visible}/{total}(還有 {hidden} 個未加載)', + neighborsProgress: '已顯示鄰居 {visible}/{total}(還有 {hidden} 個未載入)', neighborsAllShown: '全部 {total} 個鄰居已在圖中(可點"展開鄰居"聚焦到該節點子圖)', - neighborsNone: '該節點沒有鏈接鄰居', + neighborsNone: '該節點沒有連結鄰居', neighborsCenterUnreachable: '已顯示鄰居 {visible}/{total}(還有 {hidden} 個無法連通:可能是死鏈、被過濾或已刪除)', - neighborsOverviewHidden: '已顯示鄰居 {visible}/{total}({hidden} 個不在概覽範圍,點"展開鄰居"以此爲中心查看)', + neighborsOverviewHidden: '已顯示鄰居 {visible}/{total}({hidden} 個不在概覽範圍,點"展開鄰居"以此為中心檢視)', backToOverview: '返回概覽', queueStatus: 'Wiki 佇列中 {count} 個待處理任務', issueTitle: '此頁面存在 {count} 個待處理的知識衝突或錯誤', issueFixBtn: 'AI 一鍵修復', - issueMixed: '信息混雜', + issueMixed: '資訊混雜', issueConflict: '事實衝突', - issueOutdated: '信息過時', + issueOutdated: '資訊過時', issueAttention: '需要關注', issueReportedBy: '由 {reporter} 報告', issueAiLinter: 'AI 巡檢', @@ -3806,35 +3806,35 @@ export default { globalIssuesEmpty: '暫無待處理的內容問題', issuePagePrefix: '頁面: ', issueGoFix: '去處理', - fixAssistantTitle: 'Wiki 智能修復助手', - issueFixSuggestions: '內容優化建議 ({count})', + fixAssistantTitle: 'Wiki 智慧修復助手', + issueFixSuggestions: '內容最佳化建議 ({count})', issueFixSingle: '修復', - fixStartError: '啓動修復助手失敗', + fixStartError: '啟動修復助手失敗', issueFixPromptSingle: '請修復頁面 [[{slug}]] 上的問題 (ID: {id})。', issueFixPromptAutoStart: '請修復頁面 [[{slug}]] 上的以下問題:' }, indexing: { title: '索引策略', - description: '配置文檔上傳後的處理管道,可以獨立開啓或關閉每種索引方式', + description: '配置文件上傳後的處理管道,可以獨立開啟或關閉每種索引方式', searchTitle: 'RAG 檢索', - searchDesc: '對文檔進行分塊、向量化和關鍵詞索引,支持混合檢索', + searchDesc: '對文件進行分塊、向量化和關鍵詞索引,支援混合檢索', wikiTitle: 'Wiki 知識庫', wikiDesc: '自動生成互相關聯的 Wiki 知識頁面,構建結構化知識體系', graphTitle: '知識圖譜', - graphDesc: '提取實體和關係,構建知識圖譜支持圖譜檢索', - atLeastOne: '至少需要開啓一種索引策略', + graphDesc: '提取實體和關係,構建知識圖譜支援圖譜檢索', + atLeastOne: '至少需要開啟一種索引策略', embeddingRequired: 'RAG 檢索需要配置 Embedding 模型', - lockedTip: '知識庫已有內容,索引策略暫不支持調整。如需變更,請先清空知識庫。', + lockedTip: '知識庫已有內容,索引策略暫不支援調整。如需變更,請先清空知識庫。', rebuildConfirmTitle: '重建索引', - rebuildConfirmBody: '索引策略已變更,是否對已有的 {count} 篇文檔重新處理?這可能需要一些時間。', - rebuildSuccess: '已提交重建任務,共 {count} 篇文檔', + rebuildConfirmBody: '索引策略已變更,是否對已有的 {count} 篇文件重新處理?這可能需要一些時間。', + rebuildSuccess: '已提交重建任務,共 {count} 篇文件', rebuildSkip: '稍後可在資料源中手動觸發重建' }, wiki: { - title: 'Wiki 設置', + title: 'Wiki 設定', synthesisModelLabel: 'Wiki 合成模型', synthesisModelPlaceholder: '選擇用於 Wiki 生成的 LLM 模型', - synthesisModelTip: '不設置時將回退使用摘要模型', + synthesisModelTip: '不設定時將回退使用摘要模型', extractionGranularityLabel: '提取粒度', contentInstructionsLabel: 'Wiki 內容生成要求', contentInstructionsTip: '控制摘要、頁面和首頁的表達重點;引用、合併與防幻覺規則由系統固定維護。修改後需重新解析才能影響已有內容。', @@ -3842,43 +3842,43 @@ export default { extractionInstructionsLabel: 'Wiki 提取重點', extractionInstructionsTip: '說明應重點識別的領域實體和概念,不會替換系統的 JSON 與引用協議。', extractionInstructionsPlaceholder: '例如:重點識別產品、版本、組織、負責人和關鍵技術概念…', - extractionGranularityTip: '控制每篇文檔抽取的 Wiki 實體/概念數量。粒度越細,索引越聚焦;粒度越粗,索引越詳盡', + extractionGranularityTip: '控制每篇文件抽取的 Wiki 實體/概念數量。粒度越細,索引越聚焦;粒度越粗,索引越詳盡', granularityFocused: '聚焦', granularityStandard: '標準', granularityExhaustive: '詳盡', - granularityFocusedHint: '只抽取文檔的主角(如簡歷 → 人物和項目)。最乾淨,但可能漏掉次要實體。', + granularityFocusedHint: '只抽取文件的主角(如簡歷 → 人物和專案)。最乾淨,但可能漏掉次要實體。', granularityStandardHint: '抽取主角 + 被詳細描述的次要實體/概念。跳過一帶而過的通用名詞。適合大多數場景。', granularityExhaustiveHint: '抽取所有可識別的命名實體與概念,包括一帶而過的技術棧。適合將知識庫當作術語表使用。' }, basic: { - title: '基本信息', - description: '設置知識庫的名稱和描述信息', + title: '基本資訊', + description: '設定知識庫的名稱和描述資訊', kbId: '知識庫 ID', - kbIdDesc: 'API 集成時可使用此 ID 指定知識庫', - typeLabel: '知識庫類型', - typeDocument: '文檔', + kbIdDesc: 'API 整合時可使用此 ID 指定知識庫', + typeLabel: '知識庫型別', + typeDocument: '文件', typeFAQ: '問答', - typeDescription: 'FAQ 類型適合結構化問答資料;文檔型支持文件解析與分塊;Wiki 類型由 LLM 自動構建互鏈知識頁面。', + typeDescription: 'FAQ 型別適合結構化問答資料;文件型支援檔案解析與分塊;Wiki 型別由 LLM 自動構建互鏈知識頁面。', nameLabel: '知識庫名稱', namePlaceholder: '請輸入知識庫名稱', descriptionLabel: '知識庫描述', descriptionPlaceholder: '請輸入知識庫描述(可選)' }, errors: { - vectorStoreBindingInvalid: '無法使用所選向量存儲。請選擇其他存儲或使用系統默認值。', - vectorStoreUnavailable: '所選向量存儲當前不可用。請在設置 → 向量存儲中檢查其連接配置。' + vectorStoreBindingInvalid: '無法使用所選向量儲存。請選擇其他儲存或使用系統預設值。', + vectorStoreUnavailable: '所選向量儲存當前不可用。請在設定 → 向量儲存中檢查其連線配置。' }, sidebar: { - basic: '基本信息', + basic: '基本資訊', models: '模型配置', - vectorStore: '向量存儲', - chunking: '分塊設置', - storage: '存儲引擎', - advanced: '高級設置', - faq: 'FAQ 設置', + vectorStore: '向量儲存', + chunking: '分塊設定', + storage: '儲存引擎', + advanced: '高階設定', + faq: 'FAQ 設定', graph: '知識圖譜', - multimodal: '圖像處理', - asr: '音頻處理', + multimodal: '影象處理', + asr: '音訊處理', datasource: '資料源', share: '共享管理', activity: '活動記錄' @@ -3886,32 +3886,32 @@ export default { navGroups: { basic: '基礎', processing: '索引與解析', - data: '存儲與資料', - integration: '發佈集成', + data: '儲存與資料', + integration: '釋出整合', management: '管理與審計' }, activity: { title: '活動記錄', - description: '查看這個知識庫的重要變更與後臺任務入口,記錄默認遵循審計日誌保留策略。', + description: '檢視這個知識庫的重要變更與後臺任務入口,記錄預設遵循審計日誌保留策略。', allOutcomes: '全部結果', allActions: '全部操作', - refresh: '刷新', + refresh: '重新整理', retry: '重試', empty: '暫無活動記錄', emptyFiltered: '沒有匹配的活動記錄', clearFilters: '清除篩選', - loadingMore: '加載中…', + loadingMore: '載入中…', end: '沒有更早的記錄了', - loadFailed: '活動記錄加載失敗', + loadFailed: '活動記錄載入失敗', systemActor: '系統觸發', knowledgeBase: '知識庫', countItems: '共 {count} 項', titleWithCount: '{title} 等 {count} 項', importSummary: '成功 {success} / 失敗 {failed} / 跳過 {skipped}', detailValues: { - user: '用戶發起', + user: '使用者發起', manual: '手動觸發', - schedule: '定時調度', + schedule: '定時排程', system: '系統觸發', pending: '待處理', completed: '已完成', @@ -3943,10 +3943,10 @@ export default { 'kb.clone_started': '開始克隆', 'kb.clone_completed': '完成克隆', 'kb.clone_failed': '克隆失敗', - 'knowledge.created': '添加知識', + 'knowledge.created': '新增知識', 'knowledge.updated': '更新知識', 'knowledge.deleted': '刪除知識', - 'knowledge.batch_deleted': '批量刪除知識', + 'knowledge.batch_deleted': '批次刪除知識', 'knowledge.reparse_started': '開始重新解析', 'knowledge.parse_canceled': '取消解析', 'knowledge.move_started': '開始移動知識', @@ -3963,13 +3963,13 @@ export default { 'datasource.sync_failed': '資料源同步失敗', 'datasource.paused': '暫停資料源', 'datasource.resumed': '還原資料源', - 'kb.share_added': '添加共享', - 'kb.share_permission_changed': '修改共享權限', + 'kb.share_added': '新增共享', + 'kb.share_permission_changed': '修改共享許可權', 'kb.share_removed': '移除共享', 'wiki.content_changed': '更新 Wiki 內容', - 'faq.import_started': '開始導入 FAQ', - 'faq.import_completed': '完成導入 FAQ', - 'faq.import_failed': '導入 FAQ 失敗' + 'faq.import_started': '開始匯入 FAQ', + 'faq.import_completed': '完成匯入 FAQ', + 'faq.import_failed': '匯入 FAQ 失敗' }, detailFields: { task_id: '任務 ID', @@ -3980,7 +3980,7 @@ export default { sync_log_id: '同步記錄 ID', mode: '執行模式', attempt: '處理批次', - count: '項目數', + count: '專案數', total: '總數', processed: '已處理', failed: '失敗數', @@ -3999,20 +3999,20 @@ export default { }, drawer: { sectionSummary: '摘要', - sectionIdentifiers: '標識符', - sectionTask: '任務信息', + sectionIdentifiers: '識別符號', + sectionTask: '任務資訊', targetChange: '變更詳情' }, expanded: { - targetType: '對象類型', - targetId: '對象 ID', + targetType: '物件型別', + targetId: '物件 ID', actorId: '發起人 ID', details: '詳情' }, columns: { time: '時間', action: '操作', - target: '對象', + target: '物件', actor: '發起人', outcome: '結果' } @@ -4024,17 +4024,17 @@ export default { disabled: '已停用', empty: '暫無嵌入渠道', allowedOrigins: '域名白名單', - embedCode: '嵌入代碼', - widgetCode: '浮窗腳本', - copyCode: '複製代碼', + embedCode: '嵌入程式碼', + widgetCode: '浮窗指令碼', + copyCode: '複製程式碼', channelKey: '渠道金鑰', channelKeyDesc: '用於第三方網站接入的長期金鑰,請妥善保管', - channelKeyHint: '加載渠道金鑰失敗,請關閉後重新打開或刷新頁面重試。', - channelKeyLoadFailed: '加載渠道金鑰失敗', + channelKeyHint: '載入渠道金鑰失敗,請關閉後重新開啟或重新整理頁面重試。', + channelKeyLoadFailed: '載入渠道金鑰失敗', channelKeyUnavailable: '金鑰不可用', resetKeyTitle: '重置渠道金鑰', resetKeyConfirmOk: '確認重置', - resetKeyConfirmBody: '重置後,舊的渠道金鑰會立即失效,所有已部署的嵌入代碼必須更換爲新金鑰才能繼續訪問。此操作不可撤銷。', + resetKeyConfirmBody: '重置後,舊的渠道金鑰會立即失效,所有已部署的嵌入程式碼必須更換為新金鑰才能繼續訪問。此操作不可撤銷。', resetKeySuccess: '渠道金鑰已重置,新金鑰已顯示在輸入框中', resetKeyFailed: '重置渠道金鑰失敗', copyChannelKeyTitle: '複製渠道金鑰', @@ -4044,24 +4044,24 @@ export default { name: '名稱', nameDesc: '後臺管理用,用於列表與渠道識別', namePlaceholder: '例如:官網客服', - nameDefaultHint: '默認爲「智能體名 · 網頁嵌入」,可自行修改;留空保存時也會使用該名稱', + nameDefaultHint: '預設為「智慧體名 · 網頁嵌入」,可自行修改;留空儲存時也會使用該名稱', defaultChannelName: '網頁嵌入', defaultChannelNameWithAgent: '{agent} · 網頁嵌入', welcomeMessage: '歡迎語', welcomePlaceholder: '你好,有什麼可以幫您?', - welcomeMessageDesc: '訪客打開嵌入聊天后、尚未發言時展示;留空則不顯示', + welcomeMessageDesc: '訪客開啟嵌入聊天后、尚未發言時展示;留空則不顯示', showSuggestedQuestions: '推薦問題', - showSuggestedQuestionsDesc: '訪客未發言前展示快捷提問,內容來自智能體配置與關聯知識庫', - originsHint: '每行一個完整來源地址(如 https://shop.example.com),至少填寫一個;支持 *.example.com 子域通配', + showSuggestedQuestionsDesc: '訪客未發言前展示快捷提問,內容來自智慧體配置與關聯知識庫', + originsHint: '每行一個完整來源地址(如 https://shop.example.com),至少填寫一個;支援 *.example.com 子域通配', originsRequired: '請至少填寫一個域名白名單', originsInvalid: '域名格式無效:{origin}', - originsWildcardProd: '生產環境不允許使用通配符 *', + originsWildcardProd: '生產環境不允許使用萬用字元 *', originsPlaceholder: 'https://shop.example.com', rateLimitLabel: '每分鐘請求上限', - rateLimitDesc: '按訪客 IP 統計,每分鐘最多允許的嵌入接口請求次數;超出後暫時拒絕訪問,默認 30。', + rateLimitDesc: '按訪客 IP 統計,每分鐘最多允許的嵌入介面請求次數;超出後暫時拒絕訪問,預設 30。', rateLimitDayLabel: '每日請求總上限', - rateLimitDayDesc: '整個渠道每天(跨所有訪客 IP)允許的請求總數;用於限制發佈 Token 被複制後被刷量的成本,默認 10000。', - publishTokenWarning: '發佈 Token 會以明文出現在嵌入頁面源碼中,任何訪問該網站的人都能看到,請將其視爲「可公開金鑰」而非機密:切勿把含敏感資料的智能體做成嵌入渠道;務必配置域名白名單與請求上限;Token 泄露時可隨時「重置 Token」作廢舊值。', + rateLimitDayDesc: '整個渠道每天(跨所有訪客 IP)允許的請求總數;用於限制釋出 Token 被複制後被刷量的成本,預設 10000。', + publishTokenWarning: '釋出 Token 會以明文出現在嵌入頁面原始碼中,任何訪問該網站的人都能看到,請將其視為「可公開金鑰」而非機密:切勿把含敏感資料的智慧體做成嵌入渠道;務必配置域名白名單與請求上限;Token 洩露時可隨時「重置 Token」作廢舊值。', primaryColor: '主題色', pageTitle: '頁面標題', pageTitleDesc: '訪客聊天頁標題與瀏覽器標籤;優先於名稱展示', @@ -4069,20 +4069,20 @@ export default { headerTitleMode: '頂欄標題', headerTitleModeChannel: '固定渠道標題', headerTitleModeSession: '跟隨會話標題', - headerTitleModeDesc: '固定渠道標題:始終顯示頁面標題;跟隨會話標題:首條消息後按對話內容自動命名,未生成前顯示頁面標題', - tokenHint: '加載渠道金鑰失敗,請關閉後重新打開該渠道。', + headerTitleModeDesc: '固定渠道標題:始終顯示頁面標題;跟隨會話標題:首條訊息後按對話內容自動命名,未生成前顯示頁面標題', + tokenHint: '載入渠道金鑰失敗,請關閉後重新開啟該渠道。', createdWithToken: '嵌入渠道已建立,渠道金鑰已顯示在下方', created: '嵌入渠道已建立', updated: '嵌入渠道已更新', - saveFailed: '保存失敗', + saveFailed: '儲存失敗', deleted: '已刪除', - copied: '已複製嵌入代碼', - loadError: '加載失敗', + copied: '已複製嵌入程式碼', + loadError: '載入失敗', missingChannel: '缺少嵌入渠道或 Token', invalidChannel: '無效的嵌入渠道', sessionFailed: '無法建立對話會話,請稍後重試', - channelDisabled: '嵌入渠道已停用,請在 Agent 編輯器的「網頁嵌入」中重新啓用', - loading: '加載中...', + channelDisabled: '嵌入渠道已停用,請在 Agent 編輯器的「網頁嵌入」中重新啟用', + loading: '載入中...', tabIframe: 'iframe', tabWidget: '浮窗', tabSecure: '安全模式', @@ -4095,69 +4095,69 @@ export default { tokenCopied: '渠道金鑰已複製', awaitingToken: '等待宿主頁面提供 Token…', preview: '預覽', - previewIframeHint: '模擬第三方網站用 iframe 嵌入的效果(與複製代碼一致)。', - previewWidgetHint: '模擬第三方網站加載浮窗腳本後的效果;真實站點由宿主頁面通過 postMessage 傳遞 Token。', + previewIframeHint: '模擬第三方網站用 iframe 嵌入的效果(與複製程式碼一致)。', + previewWidgetHint: '模擬第三方網站載入浮窗指令碼後的效果;真實站點由宿主頁面透過 postMessage 傳遞 Token。', previewMockPage: '模擬宿主頁面', - previewLoading: '正在加載預覽…', - previewUnavailable: '預覽暫時不可用,請確認渠道已啓用且 Redis 可用', + previewLoading: '正在載入預覽…', + previewUnavailable: '預覽暫時不可用,請確認渠道已啟用且 Redis 可用', defaultChatTitle: 'AI 助手', newChat: '新建對話', - sectionChannel: '渠道信息', + sectionChannel: '渠道資訊', sectionSecurity: '安全與限流', sectionCapabilities: '對話能力', allowWebSearch: '顯示聯網搜尋開關', - allowWebSearchDesc: '開啓後,訪客輸入框會顯示聯網搜尋按鈕,可自行打開或關閉;不會默認開啓。僅當綁定的智能體已啓用聯網搜尋時按鈕纔會出現。', - allowFileUpload: '顯示文件上傳', - allowFileUploadDesc: '開啓後,訪客可上傳圖片與文檔附件。僅當綁定的智能體已啓用圖片上傳時纔會生效。', + allowWebSearchDesc: '開啟後,訪客輸入框會顯示聯網搜尋按鈕,可自行開啟或關閉;不會預設開啟。僅當繫結的智慧體已啟用聯網搜尋時按鈕才會出現。', + allowFileUpload: '顯示檔案上傳', + allowFileUploadDesc: '開啟後,訪客可上傳圖片與文件附件。僅當繫結的智慧體已啟用圖片上傳時才會生效。', webhookUrl: 'Webhook 地址', webhookUrlPlaceholder: 'https://your-server.example.com/weknora/embed-events', - webhookUrlDesc: '可選。訪客發消息與助手回覆完成時,WeKnora 會向該 HTTPS 地址 POST 事件(message_sent / message_received)。', + webhookUrlDesc: '可選。訪客發訊息與助手回覆完成時,WeKnora 會向該 HTTPS 地址 POST 事件(message_sent / message_received)。', webhookSecret: 'Webhook 簽名金鑰', webhookSecretPlaceholder: '用於 HMAC-SHA256 簽名(X-WeKnora-Signature)', - webhookSecretKeep: '留空表示不修改已保存的金鑰', + webhookSecretKeep: '留空表示不修改已儲存的金鑰', webhookSecretDesc: '可選。配置後請求體會帶 sha256 簽名頭,便於你的服務端校驗來源。', - agentWebSearchDisabledHint: '當前智能體未啓用聯網搜尋,訪客端不會顯示聯網按鈕。請先在智能體設置中開啓聯網搜尋。', - agentImageUploadDisabledHint: '當前智能體未啓用圖片上傳,訪客端不會顯示上傳按鈕。請先在智能體設置中開啓圖片上傳。', + agentWebSearchDisabledHint: '當前智慧體未啟用聯網搜尋,訪客端不會顯示聯網按鈕。請先在智慧體設定中開啟聯網搜尋。', + agentImageUploadDisabledHint: '當前智慧體未啟用圖片上傳,訪客端不會顯示上傳按鈕。請先在智慧體設定中開啟圖片上傳。', sectionAppearance: '外觀與展示', sectionDeploy: '嵌入到網頁', sectionWebhook: '事件回呼', - stepChannel: '渠道信息', + stepChannel: '渠道資訊', stepSecurity: '安全限流', stepCapabilities: '對話能力', stepAppearance: '外觀展示', stepWebhook: '事件回呼', stepDeploy: '網頁嵌入', - deployIntro: '選擇嵌入方式並複製下方代碼到您的網頁;需要鑑權或輪換金鑰時,可在頁面底部的「渠道金鑰」區域操作。', - deployStepEmbed: '複製嵌入代碼', - deployStepEmbedDesc: '選擇嵌入方式,將代碼貼上到第三方頁面即可。', + deployIntro: '選擇嵌入方式並複製下方程式碼到您的網頁;需要鑑權或輪換金鑰時,可在頁面底部的「渠道金鑰」區域操作。', + deployStepEmbed: '複製嵌入程式碼', + deployStepEmbedDesc: '選擇嵌入方式,將程式碼貼上到第三方頁面即可。', embedIframeDesc: '適合在頁面固定區域嵌入整頁聊天。', - embedWidgetDesc: '適合右下角浮窗,點擊圖標展開聊天面板。', - embedSecureDesc: '推薦:發佈 Token 只保存在你自己的後端,頁面只拿到短時權杖,瀏覽器永遠看不到長期金鑰。', - deployAfterSaveHint: '保存渠道後,可在此複製渠道金鑰與嵌入代碼。', - widgetTokenNote: '浮窗腳本需包含渠道金鑰;iframe 會在加載時自動完成憑證交換。', - secureTokenNote: '頁面不再包含發佈 Token,而是指向你後端的取權杖接口(data-token-endpoint)。你的後端用發佈 Token 換取 30 分鐘的短時權杖返回給頁面,浮窗會在到期前自動刷新。', - secureServerLabel: '服務端取權杖接口示例(發佈 Token 僅保存在服務端)', + embedWidgetDesc: '適合右下角浮窗,點選圖示展開聊天面板。', + embedSecureDesc: '推薦:釋出 Token 只儲存在你自己的後端,頁面只拿到短時權杖,瀏覽器永遠看不到長期金鑰。', + deployAfterSaveHint: '儲存渠道後,可在此複製渠道金鑰與嵌入程式碼。', + widgetTokenNote: '浮窗指令碼需包含渠道金鑰;iframe 會在載入時自動完成憑證交換。', + secureTokenNote: '頁面不再包含釋出 Token,而是指向你後端的取權杖介面(data-token-endpoint)。你的後端用釋出 Token 換取 30 分鐘的短時權杖返回給頁面,浮窗會在到期前自動重新整理。', + secureServerLabel: '服務端取權杖介面示例(釋出 Token 僅儲存在服務端)', tabServerNode: 'Node.js', tabServerGo: 'Go', - enabled: '啓用渠道', - deleteConfirm: '確定刪除該嵌入渠道?已部署的網站代碼將失效。', - defaultLocale: '默認語言', - defaultLocaleDesc: '訪客打開聊天時使用的界面語言;留空則跟隨瀏覽器或宿主頁面通過 Widget 設置的 locale。', + enabled: '啟用渠道', + deleteConfirm: '確定刪除該嵌入渠道?已部署的網站程式碼將失效。', + defaultLocale: '預設語言', + defaultLocaleDesc: '訪客開啟聊天時使用的介面語言;留空則跟隨瀏覽器或宿主頁面透過 Widget 設定的 locale。', defaultLocaleBrowser: '跟隨瀏覽器 / 宿主' }, knowledgeList: { create: '新建知識庫', - subtitle: '管理和組織您的知識庫,支持文檔型和問答型知識庫', + subtitle: '管理和組織您的知識庫,支援文件型和問答型知識庫', sharedToOrgs: '已共享給 {count} 個空間', - uninitializedBanner: '部分知識庫尚未初始化,需要先在設置中配置模型信息才能添加知識文檔', + uninitializedBanner: '部分知識庫尚未初始化,需要先在設定中配置模型資訊才能新增知識文件', uploadProgress: { - uploadingTitle: '正在向「{name}」上傳文件夾中的文檔', - detail: '已完成 {completed}/{total} 個文件', - keepPageOpen: '請保持頁面打開,上傳完成後會自動刷新解析狀態。', + uploadingTitle: '正在向「{name}」上傳資料夾中的文件', + detail: '已完成 {completed}/{total} 個檔案', + keepPageOpen: '請保持頁面開啟,上傳完成後會自動重新整理解析狀態。', completedTitle: '「{name}」的上傳已完成', - completedDetail: '共上傳 {total} 個文件,正在刷新列表查看解析狀態...', - refreshing: '正在刷新列表並獲取最新解析狀態...', - errorTip: '部分文件上傳失敗,請查看右上角通知詳情。', + completedDetail: '共上傳 {total} 個檔案,正在重新整理列表檢視解析狀態...', + refreshing: '正在重新整理列表並獲取最新解析狀態...', + errorTip: '部分檔案上傳失敗,請檢視右上角通知詳情。', unknownKb: '知識庫 {id}' }, features: { @@ -4170,15 +4170,15 @@ export default { title: '共享知識庫', sourceType: '來源方式', sourceTypeKbShare: '知識庫直接共享到本空間', - sourceTypeAgent: '智能體可訪問(通過共享智能體可見)', + sourceTypeAgent: '智慧體可訪問(透過共享智慧體可見)', sourceOrg: '來源空間', - sourceFromAgent: '智能體', - agentKbStrategy: '智能體知識庫策略', + sourceFromAgent: '智慧體', + agentKbStrategy: '智慧體知識庫策略', agentKbStrategyAll: '全部知識庫', agentKbStrategySelected: '指定知識庫', agentKbStrategyNone: '不使用知識庫', sharedAt: '共享時間', - myPermission: '我的權限', + myPermission: '我的許可權', goToKb: '進入知識庫' }, messages: { @@ -4191,10 +4191,10 @@ export default { pinned: '置頂', mine: '我建立的', tenantOthers: '本空間 · 其他成員', - tenantReadonly: '本空間 · 僅查看', + tenantReadonly: '本空間 · 僅檢視', sharedByMe: '我共享的', sharedEditable: '共享給我 · 可編輯', - sharedReadonly: '共享給我 · 僅查看' + sharedReadonly: '共享給我 · 僅檢視' }, pin: { pin: '置頂', @@ -4204,7 +4204,7 @@ export default { failed: '操作失敗' }, menu: { - viewDetails: '查看詳情', + viewDetails: '檢視詳情', duplicate: '建立副本' }, delete: { @@ -4214,13 +4214,13 @@ export default { }, empty: { title: '暫無知識庫', - description: '點擊左側快捷操作"新建知識庫"按鈕建立第一個知識庫', + description: '點選左側快捷操作"新建知識庫"按鈕建立第一個知識庫', sharedTitle: '暫無共享知識庫', sharedDescription: '您可以加入共享空間或請求他人共享知識庫給您', favoritesTitle: '暫無收藏', - favoritesDescription: '在知識庫卡片右上角點擊星標即可收藏', + favoritesDescription: '在知識庫卡片右上角點選星標即可收藏', recentsTitle: '暫無最近訪問', - recentsDescription: '最近打開過的知識庫會出現在這裡' + recentsDescription: '最近開啟過的知識庫會出現在這裡' } }, createChat: { @@ -4232,13 +4232,13 @@ export default { } }, input: { - addModel: '添加模型', + addModel: '新增模型', placeholder: '直接向模型提問', - placeholderWithContext: '輸入問題,將基於上方選中的知識庫/文件回答', - placeholderWebOnly: '輸入問題,將結合網絡搜尋回答', - placeholderKbAndWeb: '輸入問題,將基於知識庫和網絡搜尋回答', + placeholderWithContext: '輸入問題,將基於上方選中的知識庫/檔案回答', + placeholderWebOnly: '輸入問題,將結合網路搜尋回答', + placeholderKbAndWeb: '輸入問題,將基於知識庫和網路搜尋回答', placeholderAgent: '向 {name} 提問', - agentMode: '智能推理', + agentMode: '智慧推理', normalMode: '快速問答', normalModeDesc: '基於知識庫的 RAG 問答', agentModeDesc: '多步思考,深度分析', @@ -4248,57 +4248,57 @@ export default { customAgentMissingSummaryModel: '對話模型', customAgentMissingRerankModel: '重排模型', goToAgentEditor: '前往配置 →', - agentNotReadyDetail: '智能體「{agentName}」未就緒,需要配置以下內容:{reasons}', - sharedAgentNotReadyDetail: '共享智能體「{agentName}」尚未就緒(缺少:{reasons}),請聯繫分享方管理員完成配置。', + agentNotReadyDetail: '智慧體「{agentName}」未就緒,需要配置以下內容:{reasons}', + sharedAgentNotReadyDetail: '共享智慧體「{agentName}」尚未就緒(缺少:{reasons}),請聯絡分享方管理員完成配置。', knowledgeBase: '知識庫', knowledgeBaseWithCount: '知識庫({count})', notConfigured: '未配置', - sharedAgentModelLabel: '共享智能體配置的模型', + sharedAgentModelLabel: '共享智慧體配置的模型', noModel: '暫無可用模型', stopGeneration: '停止生成', - send: '發送', - webSearchDisabledByAgent: '當前智能體已禁用網絡搜尋', - kbLockedByAgent: '當前智能體已鎖定知識庫配置', - kbDisabledByAgent: '當前智能體已禁用知識庫功能', - modelLockedByAgent: '當前智能體已鎖定模型配置', - imageUploadDisabledByAgent: '當前智能體未啓用圖片上傳', - goToAgentSettings: '去設置智能體', + send: '傳送', + webSearchDisabledByAgent: '當前智慧體已禁用網路搜尋', + kbLockedByAgent: '當前智慧體已鎖定知識庫配置', + kbDisabledByAgent: '當前智慧體已禁用知識庫功能', + modelLockedByAgent: '當前智慧體已鎖定模型配置', + imageUploadDisabledByAgent: '當前智慧體未啟用圖片上傳', + goToAgentSettings: '去設定智慧體', messages: { enterContent: '請先輸入內容!', replying: '正在回覆中,請稍後再試!', - agentSwitchedOn: '已切換到智能推理', + agentSwitchedOn: '已切換到智慧推理', agentSwitchedOff: '已切換到快速問答', - agentSelected: '已選擇智能體「{name}」', - webSearchNotConfigured: '未配置網絡搜尋引擎,請先在設置中完成搜尋引擎選擇與接口配置。', - webSearchEnabled: '網絡搜尋已開啓', - webSearchDisabled: '網絡搜尋已關閉', + agentSelected: '已選擇智慧體「{name}」', + webSearchNotConfigured: '未配置網路搜尋引擎,請先在設定中完成搜尋引擎選擇與介面配置。', + webSearchEnabled: '網路搜尋已開啟', + webSearchDisabled: '網路搜尋已關閉', sessionMissing: '會話 ID 不存在', - messageMissing: '無法獲取消息 ID,請刷新頁面後重試', + messageMissing: '無法獲取訊息 ID,請重新整理頁面後重試', stopSuccess: '已停止生成', stopFailed: '停止失敗,請重試' }, webSearch: { - toggleOn: '開啓網絡搜尋', - toggleOff: '關閉網絡搜尋', - notConfigured: '未配置網絡搜尋引擎' + toggleOn: '開啟網路搜尋', + toggleOff: '關閉網路搜尋', + notConfigured: '未配置網路搜尋引擎' } }, manualEditor: { - description: '使用 Markdown 編寫知識內容,支持實時預覽', - defaultTitlePrefix: '新建文檔', - noDocumentKnowledgeBases: '暫無可用的文檔型知識庫,請先建立一個文檔型知識庫', + description: '使用 Markdown 編寫知識內容,支援實時預覽', + defaultTitlePrefix: '新建文件', + noDocumentKnowledgeBases: '暫無可用的文件型知識庫,請先建立一個文件型知識庫', actions: { cancel: '取消', saveDraft: '暫存草稿', - publish: '發佈入庫' + publish: '釋出入庫' }, loading: { - content: '正在加載內容', + content: '正在載入內容', preparing: '正在準備編輯器' }, status: { draftTag: '當前狀態:草稿', - publishedTag: '當前狀態:已發佈', + publishedTag: '當前狀態:已釋出', lastUpdated: '最近更新:{time}' }, form: { @@ -4306,32 +4306,32 @@ export default { knowledgeBasePlaceholder: '請選擇知識庫', titleLabel: '知識標題', titlePlaceholder: '請輸入標題', - contentPlaceholder: '支持 Markdown 語法,可使用 # 標題、列表、代碼塊等' + contentPlaceholder: '支援 Markdown 語法,可使用 # 標題、列表、程式碼塊等' }, success: { - draftSaved: '草稿已保存', - published: '知識已發佈並開始索引' + draftSaved: '草稿已儲存', + published: '知識已釋出並開始索引' }, warning: { selectKnowledgeBase: '請選擇目標知識庫', enterTitle: '請輸入知識標題', enterContent: '請輸入知識內容', - contentTooShort: '內容過短,建議補充更多信息後再發布' + contentTooShort: '內容過短,建議補充更多資訊後再發布' }, error: { fetchDetailFailed: '獲取知識詳情失敗', - saveFailed: '保存失敗,請稍後重試' + saveFailed: '儲存失敗,請稍後重試' }, labels: { currentKnowledgeBase: '當前知識庫' }, section: { - basic: '基本信息', + basic: '基本資訊', content: '知識內容' }, title: { edit: '編輯 Markdown 知識', - create: '在線編輯 Markdown 知識' + create: '線上編輯 Markdown 知識' }, preview: { empty: '暫無內容' @@ -4344,7 +4344,7 @@ export default { bold: '加粗', italic: '斜體', strike: '刪除線', - inlineCode: '行內代碼', + inlineCode: '行內程式碼', heading1: '一級標題', heading2: '二級標題', heading3: '三級標題', @@ -4352,8 +4352,8 @@ export default { orderedList: '有序列表', taskList: '任務列表', blockquote: '引用', - codeBlock: '代碼塊', - link: '插入鏈接', + codeBlock: '程式碼塊', + link: '插入連結', image: '插入圖片', table: '插入表格', horizontalRule: '分割線' @@ -4368,47 +4368,47 @@ export default { listItem: '列表項', taskItem: '任務項', quote: '引用內容', - code: '代碼內容', - linkText: '鏈接文本', + code: '程式碼內容', + linkText: '連結文字', imageAlt: '描述', - bold: '加粗文本', - italic: '斜體文本', + bold: '加粗文字', + italic: '斜體文字', strike: '刪除線', inlineCode: 'code' } }, file: { - upload: '上傳文件' + upload: '上傳檔案' }, mentionDetail: { readOnlyFromAgent: '僅在此對話中只讀,不顯示在知識庫列表中', faqCount: '共 {count} 條問答', - kbCount: '共 {count} 個文檔', + kbCount: '共 {count} 個文件', belongsToKb: '所屬知識庫:', belongsToOrg: '所屬空間:', - noCompatibleKbForAgent: '當前智能體的工具與作用域內知識庫的能力不匹配,暫無可引用的知識庫。' + noCompatibleKbForAgent: '當前智慧體的工具與作用域內知識庫的能力不匹配,暫無可引用的知識庫。' }, common: { - add: '添加', + add: '新增', me: '我', confirm: '確認', cancel: '取消', - save: '保存', + save: '儲存', delete: '刪除', edit: '編輯', copy: '複製', copied: '已複製', - default: '默認', + default: '預設', create: '建立', download: '下載', - refresh: '刷新', - loading: '加載中...', + refresh: '重新整理', + loading: '載入中...', noData: '暫無資料', - noMoreData: '已加載全部內容', + noMoreData: '已載入全部內容', error: '錯誤', success: '成功', failed: '失敗', - info: '信息', + info: '資訊', selectAll: '全選', yes: '是', no: '否', @@ -4421,20 +4421,20 @@ export default { website: '官方網站', clawhubSkill: 'Claw Skill', github: 'GitHub', - githubStarTip: '在 GitHub 打開倉庫,若覺得有用歡迎點個 Star', - on: '開啓', + githubStarTip: '在 GitHub 開啟倉庫,若覺得有用歡迎點個 Star', + on: '開啟', off: '關閉', confirmDelete: '確認刪除', deleteSuccess: '刪除成功', deleteFailed: '刪除失敗', updateSuccess: '更新成功', - saveSuccess: '保存成功', - saveFailed: '保存失敗', - file: '文件', + saveSuccess: '儲存成功', + saveFailed: '儲存失敗', + file: '檔案', knowledgeBase: '知識庫', noResult: '無結果', remove: '移除', - defaultUser: '用戶', + defaultUser: '使用者', copyFailed: '複製失敗', retry: '重試', expand: '展開', @@ -4442,79 +4442,79 @@ export default { }, authStore: { errors: { - parseUserFailed: '解析用戶信息失敗', - parseTenantFailed: '解析空間信息失敗', + parseUserFailed: '解析使用者資訊失敗', + parseTenantFailed: '解析空間資訊失敗', parseKnowledgeBasesFailed: '解析知識庫列表失敗', parseCurrentKnowledgeBaseFailed: '解析當前知識庫失敗' } }, auth: { - login: '登錄', + login: '登入', logout: '退出', - oidcLogin: '使用 OIDC 登錄', - oidcLoginWithProvider: '使用 {provider} 登錄', + oidcLogin: '使用 OIDC 登入', + oidcLoginWithProvider: '使用 {provider} 登入', redirectingToOIDC: '正在跳轉到身份提供商...', orContinueWith: '或使用以下方式繼續', - oidcLoginFailed: 'OIDC 登錄失敗', - username: '用戶名', + oidcLoginFailed: 'OIDC 登入失敗', + username: '使用者名稱', email: '信箱', password: '密碼', confirmPassword: '確認密碼', - loginSuccessTitle: '登錄成功', + loginSuccessTitle: '登入成功', loginSuccessContent: '歡迎,你已進入 {name}', - loggingIn: '登錄中...', + loggingIn: '登入中...', register: '註冊', registering: '註冊中...', createAccount: '建立帳號', haveAccount: '已有帳號?', - backToLogin: '返回登錄', - loginHint: '登錄以繼續使用;首次使用請在下方建立帳號。', + backToLogin: '返回登入', + loginHint: '登入以繼續使用;首次使用請在下方建立帳號。', firstTime: '首次使用 WeKnora?', - registerSuccess: '註冊成功,請登錄', + registerSuccess: '註冊成功,請登入', registerFailed: '註冊失敗', - subtitle: 'RAG 問答、ReAct 智能體與 Wiki 知識庫,大模型驅動的企業級知識框架', + subtitle: 'RAG 問答、ReAct 智慧體與 Wiki 知識庫,大模型驅動的企業級知識框架', registerSubtitle: '建立帳號並開始使用 WeKnora', emailPlaceholder: '輸入信箱地址', - passwordPlaceholder: '輸入密碼(8-32個字符,包含字母和數字)', + passwordPlaceholder: '輸入密碼(8-32個字元,包含字母和數字)', confirmPasswordPlaceholder: '再次輸入密碼', - usernamePlaceholder: '輸入用戶名', + usernamePlaceholder: '輸入使用者名稱', emailRequired: '請輸入信箱地址', emailInvalid: '請輸入正確的信箱格式', passwordRequired: '請輸入密碼', - passwordMinLength: '密碼至少8個字符', - passwordMaxLength: '密碼不能超過32個字符', + passwordMinLength: '密碼至少8個字元', + passwordMaxLength: '密碼不能超過32個字元', passwordMustContainLetter: '密碼必須包含字母', passwordMustContainNumber: '密碼必須包含數字', - usernameRequired: '請輸入用戶名', - usernameMinLength: '用戶名至少2個字符', - usernameMaxLength: '用戶名不能超過20個字符', - usernameInvalid: '用戶名只能包含字母、數字、下劃線和中文字符', + usernameRequired: '請輸入使用者名稱', + usernameMinLength: '使用者名稱至少2個字元', + usernameMaxLength: '使用者名稱不能超過20個字元', + usernameInvalid: '使用者名稱只能包含字母、數字、下劃線和中文字元', confirmPasswordRequired: '請確認密碼', passwordMismatch: '兩次輸入的密碼不一致', - loginError: '登錄錯誤,請檢查信箱或密碼', - loginErrorRetry: '登錄錯誤,請稍後重試', + loginError: '登入錯誤,請檢查信箱或密碼', + loginErrorRetry: '登入錯誤,請稍後重試', registerError: '註冊錯誤,請稍後重試', workspaceOnboarding: { title: '選擇你的工作空間', create: '建立空間', - invitations: '查看邀請', + invitations: '檢視邀請', loadingPolicy: '正在確認可用的空間加入方式…', - policyLoadFailed: '暫時無法獲取空間權限,請檢查網絡後重試。', - retry: '重新加載', + policyLoadFailed: '暫時無法獲取空間許可權,請檢查網路後重試。', + retry: '重新載入', inviteOnlyTitle: '等待加入工作空間', - inviteOnlyDescription: '當前系統不開放個人建立空間。你可以查看並接受管理員發來的空間邀請。', - inviteOnlyNotice: '此帳號只能通過邀請加入已有空間', - inviteOnlyHelp: '還沒有邀請?請把你的註冊信箱提供給空間管理員,由管理員向你發送邀請。' + inviteOnlyDescription: '當前系統不開放個人建立空間。你可以檢視並接受管理員發來的空間邀請。', + inviteOnlyNotice: '此帳號只能透過邀請加入已有空間', + inviteOnlyHelp: '還沒有邀請?請把你的註冊信箱提供給空間管理員,由管理員向你傳送邀請。' } }, inviteRegister: { bannerTitle: '您被邀請加入「{tenant}」', - bannerHint: '填寫下方信息完成註冊,註冊成功後將自動加入該團隊。', - bannerHintLogin: '登錄後將自動加入該團隊。', - loading: '正在校驗邀請鏈接…', - invalidTitle: '邀請鏈接無效或已撤銷', - invalidBody: '請聯繫邀請人重新發送鏈接,或前往登錄使用現有帳號。', - backToLogin: '返回登錄', + bannerHint: '填寫下方資訊完成註冊,註冊成功後將自動加入該團隊。', + bannerHintLogin: '登入後將自動加入該團隊。', + loading: '正在校驗邀請連結…', + invalidTitle: '邀請連結無效或已撤銷', + invalidBody: '請聯絡邀請人重新傳送連結,或前往登入使用現有帳號。', + backToLogin: '返回登入', title: '完成註冊', subtitle: '您被邀請加入「{tenant}」', email: '信箱', @@ -4523,7 +4523,7 @@ export default { emailInvalid: '請輸入有效的信箱地址', username: '姓名', usernamePlaceholder: '請輸入您的姓名', - password: '設置密碼', + password: '設定密碼', passwordPlaceholder: '至少 6 位', confirmPassword: '確認密碼', submit: '完成註冊', @@ -4541,57 +4541,57 @@ export default { }, graphSettings: { title: '知識圖譜配置', - description: '配置實體-關係提取功能,自動從文本中抽取實體和關係構建知識圖譜(注意:這與 Wiki 知識庫中的「頁面鏈接圖譜」是兩回事——前者是基於 LLM 的實體-關係圖,後者是 Wiki 頁面之間的引用關係圖)', - enableLabel: '啓用實體關係提取', - enableDescription: '開啓後將自動從文本中提取實體和關係', - tagsLabel: '關係類型', - tagsDescription: '定義要提取的關係類型標籤,多個標籤用逗號分隔', - tagsPlaceholder: '輸入關係類型,如:工作於、同事、朋友等', + description: '配置實體-關係提取功能,自動從文字中抽取實體和關係構建知識圖譜(注意:這與 Wiki 知識庫中的「頁面連結圖譜」是兩回事——前者是基於 LLM 的實體-關係圖,後者是 Wiki 頁面之間的引用關係圖)', + enableLabel: '啟用實體關係提取', + enableDescription: '開啟後將自動從文字中提取實體和關係', + tagsLabel: '關係型別', + tagsDescription: '定義要提取的關係型別標籤,多個標籤用逗號分隔', + tagsPlaceholder: '輸入關係型別,如:工作於、同事、朋友等', generateRandomTags: '生成隨機標籤', - sampleTextLabel: '示例文本', - sampleTextDescription: '用於測試實體關係提取的示例文本', - sampleTextPlaceholder: '輸入一段包含實體和關係的文本...', + sampleTextLabel: '示例文字', + sampleTextDescription: '用於測試實體關係提取的示例文字', + sampleTextPlaceholder: '輸入一段包含實體和關係的文字...', customInstructionsLabel: '額外提取要求', customInstructionsDescription: '補充領域範圍、實體篩選和屬性提取要求;系統仍負責結構化輸出協議', customInstructionsPlaceholder: '例如:重點提取合同主體、金額、履約期限和違約責任…', - generateRandomText: '生成隨機文本', + generateRandomText: '生成隨機文字', entityListLabel: '實體列表', - entityListDescription: '從文本中提取的實體及其屬性', + entityListDescription: '從文字中提取的實體及其屬性', nodeNamePlaceholder: '輸入實體名稱', attributePlaceholder: '輸入屬性值', - addAttribute: '添加屬性', + addAttribute: '新增屬性', manageEntitiesLabel: '管理實體', - manageEntitiesDescription: '添加或刪除實體節點', - addEntity: '添加實體', + manageEntitiesDescription: '新增或刪除實體節點', + addEntity: '新增實體', relationListLabel: '關係列表', - relationListDescription: '定義實體之間的關係連接', + relationListDescription: '定義實體之間的關係連線', selectEntity: '選擇實體', - selectRelationType: '選擇關係類型', + selectRelationType: '選擇關係型別', manageRelationsLabel: '管理關係', - manageRelationsDescription: '添加或刪除實體間的關係', - addRelation: '添加關係', + manageRelationsDescription: '新增或刪除實體間的關係', + addRelation: '新增關係', extractActionsLabel: '提取操作', extractActionsDescription: '執行實體關係提取或管理示例資料', startExtraction: '開始提取', extracting: '提取中...', - defaultExample: '默認示例', + defaultExample: '預設示例', clearExample: '清除示例', completeModelConfig: '請先完成模型配置', tagsGenerated: '標籤生成成功', tagsGenerateFailed: '標籤生成失敗', - textGenerated: '文本生成成功', - textGenerateFailed: '文本生成失敗', - pleaseInputText: '請先輸入示例文本', + textGenerated: '文字生成成功', + textGenerateFailed: '文字生成失敗', + pleaseInputText: '請先輸入示例文字', extractSuccess: '實體關係提取成功', extractFailed: '實體關係提取失敗', - exampleLoaded: '示例已加載', + exampleLoaded: '示例已載入', exampleCleared: '示例已清除', - disabledWarning: '知識圖譜資料庫未啓用,實體關係提取功能將無法使用', - howToEnable: '如何啓用知識圖譜?' + disabledWarning: '知識圖譜資料庫未啟用,實體關係提取功能將無法使用', + howToEnable: '如何啟用知識圖譜?' }, retrievalSettings: { - title: '搜尋設置', - description: '配置知識庫搜尋和消息搜尋的全局檢索參數', + title: '搜尋設定', + description: '配置知識庫搜尋和訊息搜尋的全域性檢索引數', embeddingTopKLabel: '向量檢索數量 (Top K)', vectorThresholdLabel: '向量相似度閾值', keywordThresholdLabel: '關鍵詞匹配閾值', @@ -4601,25 +4601,25 @@ export default { rerankModelDescription: '選擇用於搜尋結果重排序的模型', rerankModelRequired: '請選擇 Rerank 模型,搜尋功能需要此模型對結果進行重排序', toasts: { - saveSuccess: '檢索配置已保存', - saveFailed: '保存配置失敗: {message}' + saveSuccess: '檢索配置已儲存', + saveFailed: '儲存配置失敗: {message}' } }, memorySettings: { title: '我的記憶', - description: '這裡是助手跨會話記住的關於你的內容。你可以隨時查看、修改和刪除,刪除後不會再被使用。', - workspaceDisabled: '當前空間尚未開啓長期記憶,管理員開啓後這裡的開關纔會生效。', - enableLabel: '爲我啓用長期記憶', - enableDescription: '關閉後助手不再讀取或新增你的記憶,已有記憶會保留,重新開啓即可繼續使用。', - agentDisabledHint: '單個智能體也可以單獨關閉長期記憶。被關閉的智能體在對話中既不會讀取你的記憶,也不會新增記憶;換用其他智能體不受影響。', + description: '這裡是助手跨會話記住的關於你的內容。你可以隨時檢視、修改和刪除,刪除後不會再被使用。', + workspaceDisabled: '當前空間尚未開啟長期記憶,管理員開啟後這裡的開關才會生效。', + enableLabel: '為我啟用長期記憶', + enableDescription: '關閉後助手不再讀取或新增你的記憶,已有記憶會保留,重新開啟即可繼續使用。', + agentDisabledHint: '單個智慧體也可以單獨關閉長期記憶。被關閉的智慧體在對話中既不會讀取你的記憶,也不會新增記憶;換用其他智慧體不受影響。', usage: { title: '記憶何時會被使用', - iconHint: '查看哪些記憶會在對話裡被使用', + iconHint: '檢視哪些記憶會在對話裡被使用', intro: '僅「生效中」會進入對話。', rows: { alwaysOn: { label: '每輪都會帶上', - text: '個人信息、偏好,以及明確說「記住」的內容' + text: '個人資訊、偏好,以及明確說「記住」的內容' }, situational: { label: '相關時才用', @@ -4631,11 +4631,11 @@ export default { }, tracking: { label: '先觀察再記住', - text: '常問方向會先計數,達到次數後才成爲長期關注' + text: '常問方向會先計數,達到次數後才成為長期關注' }, documents: { label: '常用資料', - text: '反覆用來回答你的文檔,檢索時會稍稍優先' + text: '反覆用來回答你的文件,檢索時會稍稍優先' }, pending: { label: '確認後才生效', @@ -4659,42 +4659,42 @@ export default { rejectGuess: '不是', pendingHint: '這些是系統從你的提問裡推斷出來的,確認之前不會被使用。', trackingHint: '這些是你反覆問到、但還沒達到「長期關注」次數的主題。記下來之前不會進入對話。', - documentsHint: '這些文檔在回答裡反覆出現,檢索會稍微偏向它們。停止跟蹤後不再加權,再被引用兩次會重新出現。', - supersededHint: '這些內容已被更新的記憶替代,不會再進入對話,只作爲變更記錄保留。', + documentsHint: '這些文件在回答裡反覆出現,檢索會稍微偏向它們。停止跟蹤後不再加權,再被引用兩次會重新出現。', + supersededHint: '這些內容已被更新的記憶替代,不會再進入對話,只作為變更記錄保留。', archivedHint: '已歸檔的記憶不會再進入對話。超出每人上限後,較少用到的條目會被自動收起。', pendingEmptyTitle: '沒有待確認的推斷', - pendingEmptyDescription: '當系統從你的提問裡推斷出關於你的信息時,會先放在這裡等你確認。', + pendingEmptyDescription: '當系統從你的提問裡推斷出關於你的資訊時,會先放在這裡等你確認。', trackingEmptyTitle: '沒有正在觀察的主題', - trackingEmptyDescription: '自動提煉開啓後,系統會先統計你常問的方向,達到次數後再記爲長期關注。', + trackingEmptyDescription: '自動提煉開啟後,系統會先統計你常問的方向,達到次數後再記為長期關注。', documentsEmptyTitle: '還沒有常用資料', - documentsEmptyDescription: '同一份文檔被回答引用兩次以上,就會出現在這裡。', + documentsEmptyDescription: '同一份文件被回答引用兩次以上,就會出現在這裡。', supersededEmptyTitle: '還沒有被更新的記憶', supersededEmptyDescription: '同一主題被新說法覆蓋時,舊內容會留在這裡。在本頁直接編輯是原地改寫,不會產生這條記錄。', archivedEmptyTitle: '還沒有歸檔的記憶', - archivedEmptyDescription: '生效中超過上限(默認 200 條)時,較少用到的會自動收起;帶過期時間的事項到期後也會進來。', + archivedEmptyDescription: '生效中超過上限(預設 200 條)時,較少用到的會自動收起;帶過期時間的事項到期後也會進來。', documentsHits: '已引用 {hits} 次', - untitledDocument: '未命名文檔', - openDocument: '打開文檔', - openDocumentUnavailable: '無法打開:缺少知識庫信息', + untitledDocument: '未命名文件', + openDocument: '開啟文件', + openDocumentUnavailable: '無法開啟:缺少知識庫資訊', stopTrackingDocument: '停止跟蹤', - stopTrackingDocumentConfirm: '停止用這份文檔做個性化檢索?之後再被引用兩次會重新出現。', + stopTrackingDocumentConfirm: '停止用這份文件做個性化檢索?之後再被引用兩次會重新出現。', stopTrackingDocumentSuccess: '已停止跟蹤這份資料', stopTrackingDocumentFailed: '停止跟蹤失敗', - trackingProgress: '已問 {hits} 次,滿 {threshold} 次後記爲長期關注', - trackingReady: '已達到次數,可以記爲長期關注', + trackingProgress: '已問 {hits} 次,滿 {threshold} 次後記為長期關注', + trackingReady: '已達到次數,可以記為長期關注', trackingAliases: '也問過:{aliases}', - promoteTopic: '記爲關注', + promoteTopic: '記為關注', dismissTopic: '不再跟蹤', - dismissTopicConfirm: '停止跟蹤這個主題?之後再問到也不會自動記爲長期關注。', - promoteSuccess: '已記爲長期關注', - promoteFailed: '記爲關注失敗', + dismissTopicConfirm: '停止跟蹤這個主題?之後再問到也不會自動記為長期關注。', + promoteSuccess: '已記為長期關注', + promoteFailed: '記為關註失敗', dismissSuccess: '已停止跟蹤這個主題', dismissFailed: '停止跟蹤失敗', confirmSuccess: '已確認', confirmFailed: '確認失敗', rejectSuccess: '已否決,不會再次推斷', rejectFailed: '否決失敗', - export: '導出', + export: '匯出', consolidate: '整理', consolidateConfirm: '合併意思接近的條目,舊內容會留在「已被更新」。確定整理?', consolidateSuccess: '整理完成:合併 {merged} 組,到期歸檔 {expired} 條,過期事項降權 {demoted} 條', @@ -4703,20 +4703,20 @@ export default { consolidateNoCandidates: '沒有發現意思相近的記憶,無需合併', consolidateModelDeclined: '模型看過了,這些記憶說的不是同一件事,未做合併', consolidateTooSoon: '剛整理過,請稍後再試', - consolidateModelUnavailable: '模型不可用,爲避免誤合併,本次沒有改動任何記憶', + consolidateModelUnavailable: '模型不可用,為避免誤合併,本次沒有改動任何記憶', consolidateFailed: '整理失敗', clear: '清空', clearConfirm: '將永久刪除你的全部記憶、正在觀察的主題和常用資料,此操作不可撤銷。確定繼續嗎?', deleteConfirm: '永久刪除這條記憶?', - add: '添加', + add: '新增', addPlaceholder: '用一句話寫下你希望助手記住的事', - addTitle: '添加記憶', - addKindLabel: '類型', + addTitle: '新增記憶', + addKindLabel: '型別', addContentLabel: '內容', emptyTitle: '還沒有記憶', - emptyDescription: '在對話裡說「記住:……」,或者在上面直接添加一條。', + emptyDescription: '在對話裡說「記住:……」,或者在上面直接新增一條。', kinds: { - profile: '個人信息', + profile: '個人資訊', preference: '偏好', fact: '事實', task: '在辦事項', @@ -4725,19 +4725,19 @@ export default { kindHints: { profile: '之後每輪對話都會帶上', preference: '之後每輪對話都會帶上', - fact: '只在問題相關時纔會用到', - task: '只在問題相關時纔會用到', + fact: '只在問題相關時才會用到', + task: '只在問題相關時才會用到', interest: '用來理解你常問的方向,不一定每輪都引用' }, origins: { explicit: '你要求記住', extracted: '自動提煉', - manual: '手動添加' + manual: '手動新增' }, toasts: { - enabled: '已爲你開啓長期記憶', + enabled: '已為你開啟長期記憶', disabled: '已關閉長期記憶', - added: '已添加', + added: '已新增', updated: '已更新', deleted: '已刪除', cleared: '已刪除 {count} 條記憶', @@ -4746,219 +4746,219 @@ export default { }, memoryWorkspaceSettings: { title: '長期記憶', - description: '讓助手跨會話記住成員說過的個人信息、偏好、事實與在辦事項。', - introTitle: '默認關閉,需要你顯式開啓', - introDescription: '長期記憶會保留成員在對話中說過的內容,因此默認不開啓。開啓後每位成員的記憶彼此隔離,成員可以在「我的記憶」裡隨時查看、修改、刪除或整體關閉。生效中的個人信息與偏好會進入之後的每一輪對話;事實和在辦事項只在相關問題時召回。', - enableLabel: '在本空間啓用長期記憶', + description: '讓助手跨會話記住成員說過的個人資訊、偏好、事實與在辦事項。', + introTitle: '預設關閉,需要你顯式開啟', + introDescription: '長期記憶會保留成員在對話中說過的內容,因此預設不開啟。開啟後每位成員的記憶彼此隔離,成員可以在「我的記憶」裡隨時檢視、修改、刪除或整體關閉。生效中的個人資訊與偏好會進入之後的每一輪對話;事實和在辦事項只在相關問題時召回。', + enableLabel: '在本空間啟用長期記憶', enableDescription: '關閉後本空間的所有會話都不會讀取或寫入記憶。', writeModeLabel: '記憶寫入方式', writeModeDescription: '決定什麼內容會被記住。', writeModeExplicit: '僅顯式記錄', writeModeAuto: '自動提煉', - writeModeExplicitHint: '只記錄成員明確說「記住:……」的內容,以及在記憶頁手動添加的條目,不額外調用模型。', - writeModeAutoHint: '在此基礎上,會話結束後在後臺調用一次模型,從成員自己說過的話裡提煉值得長期保留的內容。', + writeModeExplicitHint: '只記錄成員明確說「記住:……」的內容,以及在記憶頁手動新增的條目,不額外呼叫模型。', + writeModeAutoHint: '在此基礎上,會話結束後在後臺呼叫一次模型,從成員自己說過的話裡提煉值得長期保留的內容。', extractModelLabel: '提煉模型', extractModelDescription: '留空則使用該次會話所用的模型。', extractDelayLabel: '挖掘延遲', - extractDelayDescription: '一輪對話結束後等待多久再挖掘。等一等可以讓一次模型調用覆蓋用戶連着發的幾條消息。', + extractDelayDescription: '一輪對話結束後等待多久再挖掘。等一等可以讓一次模型呼叫覆蓋使用者連著發的幾條訊息。', extractMinIntervalLabel: '兩次挖掘的最小間隔', - extractMinIntervalDescription: '同一個人兩次挖掘之間至少間隔多久,用來控制成本。間隔內產生的消息不會被丟棄,會順延到下一次挖掘一併處理。', + extractMinIntervalDescription: '同一個人兩次挖掘之間至少間隔多久,用來控制成本。間隔內產生的訊息不會被丟棄,會順延到下一次挖掘一併處理。', vectorRecallLabel: '按語義召回記憶', - vectorRecallDescription: '除了字面匹配,再按含義匹配。用戶換個說法之後,原來那條記憶仍然能被找到——而多數記憶遲早會被換說法。每輪問答多一次向量調用,超時會自動退回字面匹配。', + vectorRecallDescription: '除了字面匹配,再按含義匹配。使用者換個說法之後,原來那條記憶仍然能被找到——而多數記憶遲早會被換說法。每輪問答多一次向量呼叫,超時會自動退回字面匹配。', embeddingModelLabel: '記憶 Embedding 模型', - embeddingModelDescription: '語義召回只使用這一個模型,與各知識庫綁定的 Embedding 無關。不選則只按字面匹配。換模型後,新寫入立刻用新模型;舊記憶在補上新向量之前,語義召回找不到它們,只靠字面匹配。', + embeddingModelDescription: '語義召回只使用這一個模型,與各知識庫繫結的 Embedding 無關。不選則只按字面匹配。換模型後,新寫入立刻用新模型;舊記憶在補上新向量之前,語義召回找不到它們,只靠字面匹配。', conditioningLabel: '讓記憶參與檢索', - conditioningDescription: '開啓後,記憶會參與查詢改寫和文檔排序,而不只是附加到回答提示裡。這是記憶在知識庫產品裡真正起作用的地方。', - interestThresholdLabel: '成爲長期關注的次數', - interestThresholdDescription: '同一個主題被問到這麼多次後,纔會作爲長期關注記下來。設爲 1 會把每個一次性問題都記下來,通常太吵。', + conditioningDescription: '開啟後,記憶會參與查詢改寫和文件排序,而不只是附加到回答提示裡。這是記憶在知識庫產品裡真正起作用的地方。', + interestThresholdLabel: '成為長期關注的次數', + interestThresholdDescription: '同一個主題被問到這麼多次後,才會作為長期關注記下來。設為 1 會把每個一次性問題都記下來,通常太吵。', instructionsLabel: '自定義挖掘規則', instructionsDescription: '追加到挖掘提示詞裡的空間規則,用來表達產品猜不到的策略,例如「永遠不要記錄客戶姓名」。', instructionsPlaceholder: '一行一條規則,例如:永遠不要記錄客戶姓名', maxItemsLabel: '每人記憶上限', - maxItemsDescription: '超出後按重要度與使用時間歸檔最低的若干條,歸檔的記憶仍可在「我的記憶」裡查看。', + maxItemsDescription: '超出後按重要度與使用時間歸檔最低的若干條,歸檔的記憶仍可在「我的記憶」裡檢視。', toasts: { - saveSuccess: '長期記憶配置已保存', - saveFailed: '保存失敗:{message}' + saveSuccess: '長期記憶配置已儲存', + saveFailed: '儲存失敗:{message}' } }, chatHistorySettings: { - title: '消息管理', - description: '配置聊天曆史知識庫,將對話消息自動向量化索引,實現語義搜尋', - enableLabel: '啓用消息索引', - enableDescription: '開啓後,新的對話消息將自動索引到知識庫,支持向量搜尋', + title: '訊息管理', + description: '配置聊天曆史知識庫,將對話訊息自動向量化索引,實現語義搜尋', + enableLabel: '啟用訊息索引', + enableDescription: '開啟後,新的對話訊息將自動索引到知識庫,支援向量搜尋', embeddingModelLabel: 'Embedding 模型', - embeddingModelDescription: '選擇用於消息向量化的 Embedding 模型', - embeddingModelLocked: '已有消息被索引,Embedding 模型不可修改(修改需清空索引資料)', + embeddingModelDescription: '選擇用於訊息向量化的 Embedding 模型', + embeddingModelLocked: '已有訊息被索引,Embedding 模型不可修改(修改需清空索引資料)', statsTitle: '索引統計', - statsIndexedMessages: '已索引消息', - statsNotConfigured: '消息索引未配置', - statsNotConfiguredDesc: '啓用並選擇 Embedding 模型後,對話消息將自動向量化索引', + statsIndexedMessages: '已索引訊息', + statsNotConfigured: '訊息索引未配置', + statsNotConfiguredDesc: '啟用並選擇 Embedding 模型後,對話訊息將自動向量化索引', toasts: { - saveSuccess: '消息管理配置已保存', - saveFailed: '保存配置失敗: {message}' + saveSuccess: '訊息管理配置已儲存', + saveFailed: '儲存配置失敗: {message}' } }, vectorStoreSettings: { title: '向量資料庫引擎', - description: '註冊和管理用於知識庫搜尋的向量資料庫實例。', - basicSection: '基本信息', + description: '註冊和管理用於知識庫搜尋的向量資料庫例項。', + basicSection: '基本資訊', storesTitle: '向量資料庫', - addStore: '添加資料庫', + addStore: '新增資料庫', editStore: '編輯資料庫', deleteConfirm: '確定要刪除此向量資料庫嗎?', - emptyDesc: '尚未配置向量資料庫。點擊"添加資料庫"開始設置。', - engineTypeLabel: '引擎類型', + emptyDesc: '尚未配置向量資料庫。點選"新增資料庫"開始設定。', + engineTypeLabel: '引擎型別', nameLabel: '名稱', namePlaceholder: '例如:my-vector-store', - connectionInfo: '連接信息', - advancedIndexConfig: '高級設置', + connectionInfo: '連線資訊', + advancedIndexConfig: '高階設定', envTag: 'DEFAULT', - testConnection: '測試連接', + testConnection: '測試連線', testing: '測試中...', - immutableNotice: '建立後無法更改引擎類型、連接和索引設置。\n如需更改,請刪除後重新建立。', - insecureSkipVerifyWarning: '關閉 TLS 證書校驗會使連接面臨中間人攻擊風險。僅可用於自簽名證書的開發集群,切勿在生產環境使用。', + immutableNotice: '建立後無法更改引擎型別、連線和索引設定。\n如需更改,請刪除後重新建立。', + insecureSkipVerifyWarning: '關閉 TLS 證書校驗會使連線面臨中間人攻擊風險。僅可用於自簽名證書的開發叢集,切勿在生產環境使用。', toasts: { storeCreated: '向量資料庫已建立', storeUpdated: '向量資料庫已更新', storeDeleted: '向量資料庫已刪除', - testSuccess: '連接測試成功', - testFailed: '連接測試失敗', + testSuccess: '連線測試成功', + testFailed: '連線測試失敗', duplicateName: '同名向量資料庫已存在', errorGeneric: '發生錯誤,請重試。' }, validation: { - nameRequired: '名稱爲必填項', - engineTypeRequired: '引擎類型爲必填項', - fieldRequired: '{field}爲必填項', - indexNamePattern: '必須以字母開頭,僅允許字母、數字、下劃線和連字符(最多128個字符)' + nameRequired: '名稱為必填項', + engineTypeRequired: '引擎型別為必填項', + fieldRequired: '{field}為必填項', + indexNamePattern: '必須以字母開頭,僅允許字母、數字、下劃線和連字元(最多128個字元)' } }, webSearchSettings: { - title: '網絡搜尋配置', - description: '配置網絡搜尋功能,在回答問題時可以從互聯網獲取實時信息補充知識庫內容', - basicSection: '基本信息', - credentialsSection: '連接配置', + title: '網路搜尋配置', + description: '配置網路搜尋功能,在回答問題時可以從網際網路獲取實時資訊補充知識庫內容', + basicSection: '基本資訊', + credentialsSection: '連線配置', optionsSection: '選項', providersTitle: '搜尋引擎配置', - addProvider: '添加搜尋引擎', + addProvider: '新增搜尋引擎', editProvider: '編輯搜尋引擎', deleteConfirm: '確定要刪除此搜尋引擎配置嗎?', providerNameLabel: '名稱', providerNamePlaceholder: '例如:生產環境 Bing 搜尋', - providerTypeLabel: '引擎類型', + providerTypeLabel: '引擎型別', providerDescLabel: '備註', providerDescPlaceholder: '可選,如:測試環境用', engineIdLabel: '搜尋引擎 ID', - setAsDefault: '設爲默認', - testConnection: '測試連接', + setAsDefault: '設為預設', + testConnection: '測試連線', testing: '測試中...', - viewDocs: '查看文檔獲取金鑰', - noProvidersDesc: '添加一個網絡搜尋引擎,爲您的智能體提供實時的互聯網信息檢索能力。', - setAsDefaultDesc: '當智能體沒有指定特定的搜尋引擎時,將默認使用此配置', + viewDocs: '檢視文件獲取金鑰', + noProvidersDesc: '新增一個網路搜尋引擎,為您的智慧體提供實時的網際網路資訊檢索能力。', + setAsDefaultDesc: '當智慧體沒有指定特定的搜尋引擎時,將預設使用此配置', proxyUrlLabel: 'HTTP 代理', - proxyUrlPlaceholder: '例如 http://proxy.example.com:3128(可選,僅支持 http/https)', + proxyUrlPlaceholder: '例如 http://proxy.example.com:3128(可選,僅支援 http/https)', proxyUrlHelp: '若環境訪問搜尋 API 需代理,在此填寫;留空則使用系統環境變數 HTTP(S)_PROXY。', apiKeyLabel: 'API 金鑰', apiKeyOptionalLabel: 'API 金鑰(可選)', - baseUrlLabel: '實例地址', + baseUrlLabel: '例項地址', baseUrlPlaceholder: 'https://searxng.example.com', apiKeyPlaceholder: '請輸入 API 金鑰', toasts: { providerCreated: '搜尋引擎配置已建立', providerUpdated: '搜尋引擎配置已更新', providerDeleted: '搜尋引擎配置已刪除', - testSuccess: '連接測試成功', - testFailed: '連接測試失敗' + testSuccess: '連線測試成功', + testFailed: '連線測試失敗' } }, settings: { modelManagement: '模型管理', - webSearchConfig: '網絡搜尋', + webSearchConfig: '網路搜尋', autoCheckUpdate: '自動下載更新', - autoCheckUpdateDesc: '開啓後自動檢查並在後臺下載最新版本安裝包。', + autoCheckUpdateDesc: '開啟後自動檢查並在後臺下載最新版本安裝包。', vectorStoreEngine: '向量資料庫引擎', parserEngine: '解析引擎', - storageEngine: '存儲引擎', + storageEngine: '儲存引擎', sandbox: { title: '沙箱後端', - description: '管理智能體技能使用的沙箱運行環境,每個智能體可以選擇一份空間後端配置。', - editorDescription: '配置空間運行環境,Docker、本地進程、CubeSandbox 和 E2B 使用同一套管理流程。', - stepConnection: '連接', + description: '管理智慧體技能使用的沙箱執行環境,每個智慧體可以選擇一份空間後端配置。', + editorDescription: '配置空間執行環境,Docker、本地程序、CubeSandbox 和 E2B 使用同一套管理流程。', + stepConnection: '連線', stepTemplate: '模板', - stepRuntime: '運行配置', + stepRuntime: '執行配置', setupProgress: '沙箱配置進度', stepDescriptions: { - connection: '先配置後端並驗證連接,通過後再從集群加載模板。', - template: '選擇當前集群返回且已經就緒的運行模板。', - runtime: '配置執行參數和環境變數,然後保存。', + connection: '先配置後端並驗證連線,透過後再從叢集載入模板。', + template: '選擇當前叢集返回且已經就緒的執行模板。', + runtime: '配置執行引數和環境變數,然後儲存。', }, back: '上一步', - connectAndContinue: '連接並繼續', - loading: '加載沙箱配置...', - loadFailed: '加載沙箱配置失敗', + connectAndContinue: '連線並繼續', + loading: '載入沙箱配置...', + loadFailed: '載入沙箱配置失敗', backend: '沙箱後端', - backendType: '沙箱類型', - backendTypePlaceholder: '選擇沙箱類型', - scriptPolicyLabel: '允許在沙箱中執行技能腳本', - scriptPolicyDesc: '關閉後本空間所有智能體只能閱讀技能內容,不再執行腳本;已在運行的遠端沙箱需結束會話後才釋放。', + backendType: '沙箱型別', + backendTypePlaceholder: '選擇沙箱型別', + scriptPolicyLabel: '允許在沙箱中執行技能指令碼', + scriptPolicyDesc: '關閉後本空間所有智慧體只能閱讀技能內容,不再執行指令碼;已在執行的遠端沙箱需結束會話後才釋放。', backendDescriptions: { - cube: '適合私有化或內網部署的自建 MicroVM 集群', - e2b: 'E2B 託管服務或兼容 E2B 的集群', - docker: '每次在當前 WeKnora 主機啓動一個短生命週期容器執行腳本', - local: '直接在 WeKnora 服務進程所在環境執行腳本', + cube: '適合私有化或內網部署的自建 MicroVM 叢集', + e2b: 'E2B 託管服務或相容 E2B 的叢集', + docker: '每次在當前 WeKnora 主機啟動一個短生命週期容器執行指令碼', + local: '直接在 WeKnora 服務程序所在環境執行指令碼', }, - addConfig: '添加沙箱後端', - viewClusterGuide: '集群搭建指南', + addConfig: '新增沙箱後端', + viewClusterGuide: '叢集搭建指南', configName: '配置名稱', configNamePlaceholder: '如:生產 E2B', configNameRequired: '請填寫配置名稱', configDescription: '描述', - configDescriptionPlaceholder: '選填,用於區分多份同類型配置', - createTitle: '添加沙箱後端', + configDescriptionPlaceholder: '選填,用於區分多份同型別配置', + createTitle: '新增沙箱後端', editTitle: '編輯沙箱後端', - sectionBasic: '基本信息', - sectionConnection: '集群連接', - sectionRuntimeEnvironment: '運行環境', - sectionTemplate: '運行模板', - sectionRuntime: '執行設置', + sectionBasic: '基本資訊', + sectionConnection: '叢集連線', + sectionRuntimeEnvironment: '執行環境', + sectionTemplate: '執行模板', + sectionRuntime: '執行設定', sectionEnvironment: '環境變數', - noConfigs: '還沒有沙箱後端配置。智能體未選擇空間配置時不會執行技能腳本。', - identityFieldHint: '該配置下有沙箱運行時,以下項無法修改:後端類型、API 端點、API Key、沙箱域名、Proxy 端點。', - viewSandboxes: '查看沙箱佔用', + noConfigs: '還沒有沙箱後端配置。智慧體未選擇空間配置時不會執行技能指令碼。', + identityFieldHint: '該配置下有沙箱執行時,以下項無法修改:後端型別、API 端點、API Key、沙箱域名、Proxy 端點。', + viewSandboxes: '檢視沙箱佔用', inventoryTitle: '沙箱佔用', - inventoryDrawerDesc: '該配置當前佔用的沙箱,以及受影響的會話與智能體。', + inventoryDrawerDesc: '該配置當前佔用的沙箱,以及受影響的會話與智慧體。', inventoryFailed: '獲取沙箱佔用失敗', sandboxCount: '沙箱數量', - sandboxCountUnknown: '未知(無法連接該後端)', - inventoryUnverifiableHint: '無法連接該後端,因此沙箱數量未知——這不代表沒有沙箱。', - sandboxesStillLive: '該配置仍有 {count} 個運行中或已暫停的沙箱,暫時無法修改身份字段。', - blockedHint: '可結束或刪除這些會話(刪除會話會銷燬其沙箱),或新建一份配置並把智能體指過去。', - unverifiableBlocked: '無法連接該後端覈實是否仍有沙箱,因此不能覆蓋現有憑證。', - unverifiableSaveHint: '請先還原該後端的連通性;若已廢棄,可新建一份配置並把智能體指過去。', + sandboxCountUnknown: '未知(無法連線該後端)', + inventoryUnverifiableHint: '無法連線該後端,因此沙箱數量未知——這不代表沒有沙箱。', + sandboxesStillLive: '該配置仍有 {count} 個執行中或已暫停的沙箱,暫時無法修改身份欄位。', + blockedHint: '可結束或刪除這些會話(刪除會話會銷燬其沙箱),或新建一份配置並把智慧體指過去。', + unverifiableBlocked: '無法連線該後端核實是否仍有沙箱,因此不能覆蓋現有憑證。', + unverifiableSaveHint: '請先還原該後端的連通性;若已廢棄,可新建一份配置並把智慧體指過去。', affectedSessions: '影響 {count} 個會話。', - affectedAgents: '以下智能體正在使用該配置:{names}', + affectedAgents: '以下智慧體正在使用該配置:{names}', confirmDelete: '確定刪除沙箱後端「{name}」嗎?', confirmDeleteWithAgents: '確定刪除沙箱後端「{name}」嗎?{agents}它們將在下次執行技能時報錯。', deleteFailed: '刪除失敗', deleted: '已刪除', - forceDeleteTitle: '無法覈實沙箱佔用', - forceDeleteConfirm: '無法連接該後端覈實是否仍有沙箱。若該後端已廢棄,可強制刪除這份配置;若只是暫時不可達,強制刪除會讓殘留沙箱無人回收。仍要強制刪除嗎?', + forceDeleteTitle: '無法核實沙箱佔用', + forceDeleteConfirm: '無法連線該後端核實是否仍有沙箱。若該後端已廢棄,可強制刪除這份配置;若只是暫時不可達,強制刪除會讓殘留沙箱無人回收。仍要強制刪除嗎?', forceDelete: '強制刪除', disableScripts: '禁用沙盒執行', - enableScripts: '啓用沙盒執行', + enableScripts: '啟用沙盒執行', disableScriptsConfirm: - '禁用後,本空間內所有智能體將無法在沙盒中執行技能腳本;仍可閱讀技能內容。已在運行中的遠端沙盒不會自動銷燬,需結束或刪除相關會話後纔會釋放。是否繼續?', + '禁用後,本空間內所有智慧體將無法在沙盒中執行技能指令碼;仍可閱讀技能內容。已在執行中的遠端沙盒不會自動銷燬,需結束或刪除相關會話後才會釋放。是否繼續?', scriptsDisabled: '已禁用本空間沙盒執行', scriptsEnabled: '已還原本空間沙盒執行', policySaveFailed: '更新沙盒執行策略失敗', legacyConfig: '已廢棄', - namedBackendHint: '空間配置是唯一運行時來源;智能體沒有選擇配置時不會執行技能腳本。', + namedBackendHint: '空間配置是唯一執行時來源;智慧體沒有選擇配置時不會執行技能指令碼。', weknoraTemplateTitle: 'WeKnora 標準模板', - weknoraDockerImage: 'WeKnora 標準鏡像', - weknoraDockerImageHint: '每次執行都會基於該鏡像建立一個隔離的短生命週期容器,不保留會話沙箱。', - localRuntimeWarning: '本地進程會直接在 WeKnora 伺服器上執行技能腳本,不具備容器或 MicroVM 隔離。僅建議在可信的開發空間使用。', - weknoraTemplateOverview: 'WeKnora 負責提供標準運行環境。連接集群后會自動發現模板,缺少標準模板時自動建立。', - weknoraTemplateDescription: '包含 WeKnora 技能所需的 Python、Node.js、CLI 工具、工作目錄和非 root 執行用戶。', + weknoraDockerImage: 'WeKnora 標準映象', + weknoraDockerImageHint: '每次執行都會基於該映象建立一個隔離的短生命週期容器,不保留會話沙箱。', + localRuntimeWarning: '本地程序會直接在 WeKnora 伺服器上執行技能指令碼,不具備容器或 MicroVM 隔離。僅建議在可信的開發空間使用。', + weknoraTemplateOverview: 'WeKnora 負責提供標準執行環境。連線叢集後會自動發現模板,缺少標準模板時自動建立。', + weknoraTemplateDescription: '包含 WeKnora 技能所需的 Python、Node.js、CLI 工具、工作目錄和非 root 執行使用者。', recommendedTag: '推薦', templateNotConfigured: '未配置模板', cardTemplateConfigured: '模板已配置', @@ -4968,26 +4968,26 @@ export default { cardVolumeMounted: '已掛載卷', cardEnvVars: '{count} 個環境變數', cardPrivateEndpoints: '允許訪問私網', - imageNotConfigured: '未配置鏡像', - localRuntimeSummary: 'WeKnora 伺服器本地進程', + imageNotConfigured: '未配置映象', + localRuntimeSummary: 'WeKnora 伺服器本地程序', templateApplied: '已使用', - refreshTemplates: '刷新模板', - templateSelectHelp: '模板由當前集群實時返回,保存時僅記錄模板 ID,無需手工複製。', - templateSelectPlaceholder: '先連接集群並加載模板', - templateLoadHint: '填寫集群連接後刷新模板;若缺少 WeKnora 標準模板,系統會自動建立。', - templateLoadFailed: '模板列表加載失敗', - standardTemplateProvisioning: '已開始在集群中建立 WeKnora 標準模板,請稍後刷新查看狀態', - templateNotReady: '所選模板尚未構建完成,請刷新並等待狀態就緒', - connectionPassed: '連接驗證通過,以下模板均從當前集群實時加載。', - connectionPassedTitle: '集群連接成功', - templateStepHint: '集群缺少標準模板時,WeKnora 會自動建立;模板就緒後才能繼續。', - loadingTemplates: '正在從集群加載模板…', - templateBuildingHint: '標準模板正在自動構建,列表會自動刷新。', - templateUntaggedHint: '構建已完成,但沒有構建帶 default 標籤,建立沙箱時無法解析。請在 E2B 刪除該模板,刷新後 WeKnora 會重新構建。', + refreshTemplates: '重新整理模板', + templateSelectHelp: '模板由當前叢集實時返回,儲存時僅記錄模板 ID,無需手工複製。', + templateSelectPlaceholder: '先連線叢集並載入模板', + templateLoadHint: '填寫叢集連線後重新整理模板;若缺少 WeKnora 標準模板,系統會自動建立。', + templateLoadFailed: '模板列表載入失敗', + standardTemplateProvisioning: '已開始在叢集中建立 WeKnora 標準模板,請稍後重新整理檢視狀態', + templateNotReady: '所選模板尚未構建完成,請重新整理並等待狀態就緒', + connectionPassed: '連線驗證透過,以下模板均從當前叢集實時載入。', + connectionPassedTitle: '叢集連線成功', + templateStepHint: '叢集缺少標準模板時,WeKnora 會自動建立;模板就緒後才能繼續。', + loadingTemplates: '正在從叢集載入模板…', + templateBuildingHint: '標準模板正在自動構建,列表會自動重新整理。', + templateUntaggedHint: '構建已完成,但沒有構建帶 default 標籤,建立沙箱時無法解析。請在 E2B 刪除該模板,重新整理後 WeKnora 會重新構建。', templateFailedReason: '構建失敗:{reason}', - noTemplates: '當前集群未返回可用模板。', + noTemplates: '當前叢集未返回可用模板。', templateReadyHint: '模板「{name}」已就緒並選中。', - templateProvisioningHint: '模板仍在構建中,狀態會自動刷新。', + templateProvisioningHint: '模板仍在構建中,狀態會自動重新整理。', templateStatuses: { ready: '已就緒', building: '構建中', @@ -4995,24 +4995,24 @@ export default { failed: '失敗', unknown: '未知', }, - allowPrivateEndpoints: '允許訪問私網集群地址', + allowPrivateEndpoints: '允許訪問私網叢集地址', allowPrivateEndpointsHint: '僅用於自建 Cube 等私網控制面;雲元資料等鏈路本地地址始終禁止訪問。', - howToBuildTemplate: '沙箱集群搭建與模板說明', - noEnvVars: '暫無額外環境變數,僅添加技能確實需要的值。', + howToBuildTemplate: '沙箱叢集搭建與模板說明', + noEnvVars: '暫無額外環境變數,僅新增技能確實需要的值。', fieldRequired: '必填', cubeApiKeyOptional: '可留空 —— 自建 CubeSandbox 通常無鑑權', - cubeApiKeyWhere: '自建集群如何開啓鑑權', + cubeApiKeyWhere: '自建叢集如何開啟鑑權', e2bApiKeyHelp: '在 E2B 控制檯的 API Keys 頁面建立,通常以 e2b_ 開頭。', e2bApiKeyWhere: '前往 E2B 控制檯獲取 API Key', apiKeyPlaceholder: '貼上 API Key', secretConfigured: '已配置金鑰(不可回看);輸入新值可輪換', secretKeepHint: '已配置,留空表示不修改', - e2bApiUrlOptional: '可留空 —— 留空時使用 SDK 默認值', - e2bDomainOptional: '可留空 —— 留空時使用 SDK 默認值', - e2bProxyUrlOptional: '自建 E2B 兼容集群的資料面閘道器地址;留空表示按 sandbox domain 直連(E2B Cloud 用法)', + e2bApiUrlOptional: '可留空 —— 留空時使用 SDK 預設值', + e2bDomainOptional: '可留空 —— 留空時使用 SDK 預設值', + e2bProxyUrlOptional: '自建 E2B 相容叢集的資料面閘道器地址;留空表示按 sandbox domain 直連(E2B Cloud 用法)', backends: { disabled: '禁用', - local: '本地進程', + local: '本地程序', docker: 'Docker', cube: 'CubeSandbox', e2b: 'E2B', @@ -5023,41 +5023,41 @@ export default { apiKey: 'API Key', templateId: '模板 ID', httpTimeout: 'HTTP 超時(秒)', - httpTimeoutHelp: '調用沙箱後端管理接口的等待上限,超過即視爲端點不可用。留空按 30 秒。', + httpTimeoutHelp: '呼叫沙箱後端管理介面的等待上限,超過即視為端點不可用。留空按 30 秒。', sandboxTtl: '沙箱 TTL(秒)', - sandboxTtlHelp: '沙箱空閒多久後被遠端回收。設得太短,會話繼續時要重建沙箱;設得太長,閒置實例會一直計費。留空按後端默認值。', - dockerImage: 'Docker 鏡像', + sandboxTtlHelp: '沙箱空閒多久後被遠端回收。設得太短,會話繼續時要重建沙箱;設得太長,閒置例項會一直計費。留空按後端預設值。', + dockerImage: 'Docker 映象', defaultTimeout: '執行超時(秒)', - defaultTimeoutHelp: '單次技能腳本允許運行的最長時間,超時會被強制終止。留空按 60 秒。', + defaultTimeoutHelp: '單次技能指令碼允許執行的最長時間,超時會被強制終止。留空按 60 秒。', envVars: '環境變數', envKey: '變數名', envValue: '變數值', - envVarsHint: '注入到該空間所有沙箱;值加密存儲,但對沙箱內腳本可見,請勿放入腳本不應讀取的金鑰。', - addRow: '添加變數', + envVarsHint: '注入到該空間所有沙箱;值加密儲存,但對沙箱內指令碼可見,請勿放入指令碼不應讀取的金鑰。', + addRow: '新增變數', removeRow: '刪除', - save: '保存', - saved: '已保存,對新建會話生效', - saveFailed: '保存失敗', - testConnection: '測試連接', + save: '儲存', + saved: '已儲存,對新建會話生效', + saveFailed: '儲存失敗', + testConnection: '測試連線', deepCheck: '完整驗證', recheck: '重新驗證', - deepCheckIntro: '保存前可以跑一次「完整驗證」:真實建立一個臨時沙箱、執行一次腳本並檢查出網,隨後自動銷燬。', - deepCheckConfirm: '完整驗證會執行一次臨時腳本;遠端後端還會真實建立並銷燬一個沙箱,可能消耗少量沙箱時長。是否繼續?', - checkPassed: '檢測通過', - checkFailed: '檢測未通過', - checkScopeConnection: '本次只驗證了控制面:端點可達且憑證有效。是否真的能跑起腳本還沒有驗證。', + deepCheckIntro: '儲存前可以跑一次「完整驗證」:真實建立一個臨時沙箱、執行一次指令碼並檢查出網,隨後自動銷燬。', + deepCheckConfirm: '完整驗證會執行一次臨時指令碼;遠端後端還會真實建立並銷燬一個沙箱,可能消耗少量沙箱時長。是否繼續?', + checkPassed: '檢測透過', + checkFailed: '檢測未透過', + checkScopeConnection: '本次只驗證了控制面:端點可達且憑證有效。是否真的能跑起指令碼還沒有驗證。', checkScopeFull: '端點、憑證、模板、沙箱內執行與出網均已真實驗證。', - checkPendingHint: '{names} 需要「完整驗證」才能確認:會真實建立一個臨時沙箱、執行一次腳本再銷燬。', - noVolumeSupport: '該後端不支持掛載卷,依賴共享卷的技能將不可用。', + checkPendingHint: '{names} 需要「完整驗證」才能確認:會真實建立一個臨時沙箱、執行一次指令碼再銷燬。', + noVolumeSupport: '該後端不支援掛載卷,依賴共享卷的技能將不可用。', skipReasons: { needs_deep_check: '需完整驗證', control_plane_unreachable: '控制面不可達,已跳過', - environment_unavailable: '運行環境不可用,已跳過', + environment_unavailable: '執行環境不可用,已跳過', sandbox_not_created: '沙箱未建立,已跳過', sandbox_exec_failed: '沙箱內執行失敗,已跳過', }, checks: { - environment_available: '運行環境可用性', + environment_available: '執行環境可用性', client_build: '客戶端構建', api_url_reachable: '端點可達性', credential_valid: '憑證有效性', @@ -5067,168 +5067,168 @@ export default { }, }, mcpService: 'MCP服務', - versionInfo: '版本信息', + versionInfo: '版本資訊', taskQueue: '任務佇列', - tenantInfo: '空間信息', - workspaceSettings: '空間設置', - system: '系統設置', + tenantInfo: '空間資訊', + workspaceSettings: '空間設定', + system: '系統設定', storage: { - title: '存儲引擎', - description: '配置文檔與圖片的存儲方式。此處設置各引擎參數,知識庫中僅選擇使用哪個引擎。', + title: '儲存引擎', + description: '配置文件與圖片的儲存方式。此處設定各引擎引數,知識庫中僅選擇使用哪個引擎。', basicSection: '基本配置', modeSection: '部署模式', credentialsSection: '憑證', bucketSection: 'Bucket', - useSslDesc: '通過 HTTPS 訪問 MinIO', - loading: '加載中...', + useSslDesc: '透過 HTTPS 訪問 MinIO', + loading: '載入中...', retry: '重試', - defaultEngine: '默認引擎', - defaultEngineDesc: '新建知識庫時默認選用的存儲引擎', + defaultEngine: '預設引擎', + defaultEngineDesc: '新建知識庫時預設選用的儲存引擎', engineLocal: 'Local(本地)', engineCos: '騰訊雲 COS', engineTos: '火山引擎 TOS', engineOss: '阿里雲 OSS', - localTitle: 'Local(本地存儲)', - localDesc: '使用伺服器本地文件系統存儲文件,僅適合單機部署。', + localTitle: 'Local(本地儲存)', + localDesc: '使用伺服器本地檔案系統儲存檔案,僅適合單機部署。', available: '可用', needsConfig: '需要配置', configurable: '可配置', - pathPrefix: '路徑前綴(可選)', + pathPrefix: '路徑字首(可選)', pathPrefixPlaceholder: '如 weknora/images', prefixPlaceholder: '如 weknora', bucketName: 'Bucket 名稱', - bucketPlaceholder: '存儲桶名稱', - minioDesc: 'S3 兼容的自託管對象存儲,適合內網和私有雲部署。', + bucketPlaceholder: '儲存桶名稱', + minioDesc: 'S3 相容的自託管物件儲存,適合內網和私有雲部署。', minioDocker: 'Docker 部署', - minioRemote: '遠程 MinIO', - minioDockerDetected: '已檢測到 Docker 部署的 MinIO 環境變數,連接信息由環境變數提供,無需手動填寫。', + minioRemote: '遠端 MinIO', + minioDockerDetected: '已檢測到 Docker 部署的 MinIO 環境變數,連線資訊由環境變數提供,無需手動填寫。', minioDockerNotDetected: '未檢測到 MinIO 環境變數(MINIO_ENDPOINT 等),請確認 Docker Compose 配置正確。', - minioRemoteHint: '連接到遠程 MinIO 服務,需要手動填寫連接信息。', + minioRemoteHint: '連線到遠端 MinIO 服務,需要手動填寫連線資訊。', cosTitle: '騰訊雲 COS', - cosDesc: '騰訊雲對象存儲服務,適合公有雲部署,支持 CDN 加速。', + cosDesc: '騰訊雲物件儲存服務,適合公有雲部署,支援 CDN 加速。', cosSecretIdPlaceholder: '騰訊雲 API 金鑰 SecretId', cosSecretKeyPlaceholder: '騰訊雲 API 金鑰 SecretKey', cosAppIdPlaceholder: '騰訊雲帳號 AppID', tosTitle: '火山引擎 TOS', - tosDesc: '火山引擎對象存儲服務(TOS),適合公有雲部署。', + tosDesc: '火山引擎物件儲存服務(TOS),適合公有雲部署。', tosAccessKeyPlaceholder: '火山引擎 Access Key', tosSecretKeyPlaceholder: '火山引擎 Secret Key', s3Title: 'AWS S3', - s3Desc: 'AWS S3 及兼容的對象存儲服務,適合公有雲部署。', + s3Desc: 'AWS S3 及相容的物件儲存服務,適合公有雲部署。', s3AccessKeyPlaceholder: 'AWS Access Key', s3SecretKeyPlaceholder: 'AWS Secret Key', - s3DefaultCredentialsHint: 'Access Key 與 Secret Key 同時留空時,將使用 AWS 默認憑證鏈(IAM Role、IRSA / Web Identity、環境變數或共享配置)。', - s3EndpointPlaceholder: '可選,留空使用 AWS 區域默認端點', + s3DefaultCredentialsHint: 'Access Key 與 Secret Key 同時留空時,將使用 AWS 預設憑證鏈(IAM Role、IRSA / Web Identity、環境變數或共享配置)。', + s3EndpointPlaceholder: '可選,留空使用 AWS 區域預設端點', ks3Title: '金山雲 KS3', - ks3Desc: '金山雲對象存儲服務(KS3),適合公有雲部署。', + ks3Desc: '金山雲物件儲存服務(KS3),適合公有雲部署。', ks3AccessKeyPlaceholder: '金山雲 Access Key', ks3SecretKeyPlaceholder: '金山雲 Secret Key', ks3EndpointPlaceholder: 'e.g. ks3-cn-beijing.ksyuncs.com', ks3RegionPlaceholder: 'e.g. BEIJING', engineKs3: '金山雲 KS3', - obsTitle: '華爲雲 OBS', - obsDesc: '華爲雲對象存儲服務(OBS),適合公有雲部署。', - obsAccessKeyPlaceholder: '華爲雲 Access Key', - obsSecretKeyPlaceholder: '華爲雲 Secret Key', + obsTitle: '華為雲 OBS', + obsDesc: '華為雲物件儲存服務(OBS),適合公有雲部署。', + obsAccessKeyPlaceholder: '華為雲 Access Key', + obsSecretKeyPlaceholder: '華為雲 Secret Key', obsEndpointPlaceholder: 'e.g. obs.cn-north-4.myhuaweicloud.com', obsRegionPlaceholder: 'e.g. cn-north-4', - engineObs: '華爲雲 OBS', + engineObs: '華為雲 OBS', ossTitle: '阿里雲 OSS', - ossDesc: '阿里雲對象存儲服務(OSS),適合公有雲部署。', + ossDesc: '阿里雲物件儲存服務(OSS),適合公有雲部署。', ossAccessKeyPlaceholder: '阿里雲 Access Key', ossSecretKeyPlaceholder: '阿里雲 Secret Key', console: '控制檯', - docs: '文檔', - testConnection: '測試連接', - loadFailed: '加載失敗', - saveSuccess: '保存成功', - saveFailed: '保存失敗', + docs: '文件', + testConnection: '測試連線', + loadFailed: '載入失敗', + saveSuccess: '儲存成功', + saveFailed: '儲存失敗', unknownError: '未知錯誤', requestFailed: '請求失敗' }, storageBackend: { - description: '管理文件與圖片使用的存儲實例;同一種類型可以配置多個實例。', - empty: '尚未配置存儲實例', - defaultTag: '默認', - add: '添加存儲實例', - editTitle: '編輯存儲實例', - createTitle: '添加存儲實例', - editSubtitle: '修改此存儲實例的連接配置。', - createSubtitle: '爲文件與圖片新增一個存儲實例。', - basicSection: '基本信息', + description: '管理檔案與圖片使用的儲存例項;同一種型別可以配置多個例項。', + empty: '尚未配置儲存例項', + defaultTag: '預設', + add: '新增儲存例項', + editTitle: '編輯儲存例項', + createTitle: '新增儲存例項', + editSubtitle: '修改此儲存例項的連線配置。', + createSubtitle: '為檔案與圖片新增一個儲存例項。', + basicSection: '基本資訊', nameLabel: '名稱', namePlaceholder: '例如:生產 COS、歸檔 COS', - providerLabel: '存儲類型', + providerLabel: '儲存型別', modeLabel: '部署模式', - modeRemote: '遠程實例', + modeRemote: '遠端例項', modeEnv: '環境變數', - connectionSection: '連接配置', + connectionSection: '連線配置', optionalPlaceholder: '可選', - advancedSection: '高級選項', - pathPrefixLabel: '路徑前綴', + advancedSection: '高階選項', + pathPrefixLabel: '路徑字首', useSslDesc: '使用 HTTPS 訪問 MinIO', forcePathStyleDesc: '使用 Path Style', useTempBucketDesc: '使用臨時桶', tempBucketLabel: '臨時桶', - tempBucketPlaceholder: '可選,用於臨時文件', + tempBucketPlaceholder: '可選,用於臨時檔案', tempRegionLabel: '臨時桶 Region', tempRegionPlaceholder: '留空時使用主 Region', - testConnection: '測試連接', - localStorage: '本地存儲', - setDefault: '設爲默認', + testConnection: '測試連線', + localStorage: '本地儲存', + setDefault: '設為預設', edit: '編輯', delete: '刪除', - testSuccess: '連接成功', - testFailed: '連接失敗', + testSuccess: '連線成功', + testFailed: '連線失敗', nameRequired: '請輸入名稱', - saveSuccess: '保存成功', - saveFailed: '保存失敗', - defaultUpdated: '默認存儲已更新', - deleteTitle: '刪除存儲實例', + saveSuccess: '儲存成功', + saveFailed: '儲存失敗', + defaultUpdated: '預設儲存已更新', + deleteTitle: '刪除儲存例項', deleteConfirm: '確定刪除“{name}”嗎?', deleted: '已刪除', deleteFailed: '刪除失敗' }, parser: { title: '解析引擎', - description: '文檔解析引擎狀態及配置。此處設置優先於服務端環境變數,留空則使用環境變數默認值。', - supportedFileTypes: '支持文件類型', - statusSection: '狀態信息', + description: '文件解析引擎狀態及配置。此處設定優先於服務端環境變數,留空則使用環境變數預設值。', + supportedFileTypes: '支援檔案型別', + statusSection: '狀態資訊', configSection: '配置', featuresLabel: '識別選項', - loading: '加載中...', + loading: '載入中...', retry: '重試', - noEngineDetected: '未檢測到解析引擎,請確認 DocReader 服務正常運行。', - disconnected: '未連接', - connected: '已連接', + noEngineDetected: '未檢測到解析引擎,請確認 DocReader 服務正常執行。', + disconnected: '未連線', + connected: '已連線', available: '可用', unavailable: '不可用', - builtinDesc: 'DocReader 內置解析引擎(docx/pdf/xlsx 等複雜格式)', + builtinDesc: 'DocReader 內建解析引擎(docx/pdf/xlsx 等複雜格式)', currentAddr: '當前', - envVarHint: '修改請設置環境變數 DOCREADER_ADDR、DOCREADER_TRANSPORT(grpc/http),重啓服務生效。', + envVarHint: '修改請設定環境變數 DOCREADER_ADDR、DOCREADER_TRANSPORT(grpc/http),重啟服務生效。', selfHostedEndpoint: '自建端點', formulaRecognition: '公式識別', tableRecognition: '表格識別', parseMethodLabel: 'PDF 解析方式', parseMethodAuto: '自動識別(推薦)', parseMethodOCR: '強制 OCR', - parseMethodText: '僅提取文本', - parseMethodHint: '自動模式會爲掃描件啓用 OCR,電子版 PDF 直接提取文本。', + parseMethodText: '僅提取文字', + parseMethodHint: '自動模式會為掃描件啟用 OCR,電子版 PDF 直接提取文字。', sealRecognition: '印章識別', chartRecognition: '圖表識別', language: '語言', - testConnection: '測試連接', - docs: '文檔', - loadFailed: '加載解析引擎列表失敗', - ensureDocreaderConnected: '請先確保 DocReader 服務已通過環境變數配置並已連接', - checkDoneStatusUpdated: '已使用當前填寫參數檢測,上方狀態已更新', - checkSuccess: '測試連接成功', + testConnection: '測試連線', + docs: '文件', + loadFailed: '載入解析引擎列表失敗', + ensureDocreaderConnected: '請先確保 DocReader 服務已透過環境變數配置並已連線', + checkDoneStatusUpdated: '已使用當前填寫引數檢測,上方狀態已更新', + checkSuccess: '測試連線成功', checkFailed: '檢測失敗', - saveSuccess: '保存成功', - saveFailed: '保存失敗', + saveSuccess: '儲存成功', + saveFailed: '儲存失敗', mineruEndpointPlaceholder: '如 https://your-mineru.example.com', - defaultPipeline: '默認 pipeline', - languagePlaceholder: '如 ch、en、ja(默認 ch)', + defaultPipeline: '預設 pipeline', + languagePlaceholder: '如 ch、en、ja(預設 ch)', mineruCloudApiKeyPlaceholder: 'MinerU 雲服務 API Key', vlmLabel: 'vlm(視覺語言模型)', mineruHtmlLabel: 'MinerU-HTML(HTML 解析)', @@ -5236,17 +5236,17 @@ export default { vlmServerUrlPlaceholder: '如 http://your-vllm-server:8000', vlmServerUrlHint: '當 Backend 選擇 vlm-http-client 或 hybrid-http-client 時需要填寫', paddleocrVlEndpointPlaceholder: '如 http://your-paddleocr-vl:8080', - paddleocrVlEndpointHint: '填寫 PaddleOCR-VL 完整服務(pipeline)地址,無需 /layout-parsing 後綴', - paddleocrVlCloudTokenPlaceholder: 'PaddleOCR-VL 飛槳星河社區 Token' + paddleocrVlEndpointHint: '填寫 PaddleOCR-VL 完整服務(pipeline)地址,無需 /layout-parsing 字尾', + paddleocrVlCloudTokenPlaceholder: 'PaddleOCR-VL 飛槳星河社群 Token' }, weknoraCloud: { title: 'WeKnora Cloud', - description: '配置 WeKnora Cloud 的 APPID 和 APPSECRET 憑證。憑證用於模型服務和文檔解析引擎。', - viewDocs: '查看文檔', + description: '配置 WeKnora Cloud 的 APPID 和 APPSECRET 憑證。憑證用於模型服務和文件解析引擎。', + viewDocs: '檢視文件', unconfigured: '尚未配置憑證,請填寫 APPID 和 APPSECRET', configured: '憑證已配置,狀態正常', expired: 'WeKnora Cloud 憑證已失效', - expiredDefault: '服務重啓後加密金鑰已變更,已保存的憑證無法解密。請重新填寫憑證。', + expiredDefault: '服務重啟後加密金鑰已變更,已儲存的憑證無法解密。請重新填寫憑證。', reconfigure: '重新配置', appIdLabel: 'APPID', appIdDesc: 'WeKnora Cloud 的應用 ID', @@ -5254,24 +5254,24 @@ export default { appSecretLabel: 'APPSECRET', appSecretDesc: 'WeKnora Cloud 的應用金鑰', appSecretPlaceholder: '請輸入 APPSECRET', - saveHint: '保存後將驗證服務可達性並加密存儲憑證', - saveBtn: '保存憑證', + saveHint: '儲存後將驗證服務可達性並加密儲存憑證', + saveBtn: '儲存憑證', usageTitle: '使用說明', - usageSteps: '1. 填寫並保存 APPID / APPSECRET\n2. 在下方「雲模型接入」中按行添加 chat、embedding、rerank、vlm\n3. 文檔解析:知識庫設置 → 解析引擎,選擇 WeKnora Cloud 引擎', + usageSteps: '1. 填寫並儲存 APPID / APPSECRET\n2. 在下方「雲模型接入」中按行新增 chat、embedding、rerank、vlm\n3. 文件解析:知識庫設定 → 解析引擎,選擇 WeKnora Cloud 引擎', fillRequired: '請填寫 APPID 和 APPSECRET', - saveSuccess: '憑證保存成功', - saveFailed: '憑證保存失敗', + saveSuccess: '憑證儲存成功', + saveFailed: '憑證儲存失敗', credentialConfigured: 'WeKnoraCloud 憑證已配置', credentialExpired: '憑證已失效,請重新配置。', credentialUnconfigured: '尚未配置 WeKnoraCloud 憑證,請先填寫 APPID 和 APPSECRET。', checkingStatus: '正在檢查憑證狀態...', - goToSettings: '前往設置中配置', - modelHintConfigured: 'WeKnoraCloud 憑證已配置。支持的模型可參考', - modelHintDocsLink: '接口文檔', - addModelsSuccess: '已成功添加 {count} 個模型', - addModelsPartial: '已添加 {success} 個,{failed} 個失敗', - addModelsFailed: '添加模型失敗', - addModelsEmbeddingFailed: 'Embedding 模型連接測試失敗,無法獲取向量維度', + goToSettings: '前往設定中配置', + modelHintConfigured: 'WeKnoraCloud 憑證已配置。支援的模型可參考', + modelHintDocsLink: '介面文件', + addModelsSuccess: '已成功新增 {count} 個模型', + addModelsPartial: '已新增 {success} 個,{failed} 個失敗', + addModelsFailed: '新增模型失敗', + addModelsEmbeddingFailed: 'Embedding 模型連線測試失敗,無法獲取向量維度', addModelsDisplayName: { chat: 'WeKnoraCloud 對話', embedding: 'WeKnoraCloud Embedding', @@ -5281,132 +5281,132 @@ export default { modelsSection: { title: '雲模型接入', descReady: '將 WeKnora Cloud 提供的四類標準模型註冊到當前空間,用於對話、向量檢索、重排序與多模態理解。', - descPending: '請先保存上方憑證,再在此添加雲模型。', - statusAdded: '已添加', + descPending: '請先儲存上方憑證,再在此新增雲模型。', + statusAdded: '已新增', statusPending: '待配置憑證', - addOne: '添加', - addAllBtn: '添加全部缺失({count})', - addAllConfirm: '確認添加', - confirmAddOne: '添加 {type} 模型「{name}」?', - confirmAddAll: '一次性添加 {count} 個缺失的雲模型?', + addOne: '新增', + addAllBtn: '新增全部缺失({count})', + addAllConfirm: '確認新增', + confirmAddOne: '新增 {type} 模型「{name}」?', + confirmAddAll: '一次性新增 {count} 個缺失的雲模型?', allReady: '四類雲模型均已就緒' } }, roleDenied: { - title: '權限不足', - desc: '你當前的角色無權訪問此設置項。請聯繫本空間的管理員獲取所需角色。' + title: '許可權不足', + desc: '你當前的角色無權訪問此設定項。請聯絡本空間的管理員獲取所需角色。' }, - capabilityUnavailable: '當前部署不支持此功能,已返回可用頁面。', + capabilityUnavailable: '當前部署不支援此功能,已返回可用頁面。', navGroups: { account: '帳號', workspace: '空間', modelsRuntime: '模型', - dataExtensions: '資料與擴展', + dataExtensions: '資料與擴充套件', systemAdministration: '系統管理', - platform: '平台' + platform: '平臺' } }, agent: { taskLabel: '任務:', think: '思考', copy: '複製', - addToKnowledgeBase: '添加到知識庫', + addToKnowledgeBase: '新增到知識庫', artifactDrawer: { - buttonTitle: '下載本次生成的文件', - title: '生成的文件', - empty: '本次未生成可下載的文件', + buttonTitle: '下載本次生成的檔案', + title: '生成的檔案', + empty: '本次未生成可下載的檔案', download: '下載', downloadFailed: '下載失敗,請稍後重試', }, updatePlan: '更新計劃', - webSearchFound: '找到 {count} 個網絡搜尋結果', + webSearchFound: '找到 {count} 個網路搜尋結果', toolFallback: '工具', stepsCompleted: '已完成 {steps} 個步驟', reasoningRounds: '思考 {rounds} 輪', - toolCalls: '調用 {tools} 次工具', + toolCalls: '呼叫 {tools} 次工具', durationSuffix: '耗時 {duration}', stepSummarySeparator: ' · ', - title: '智能體', - subtitle: '配置和管理您的智能體,自定義對話行爲和能力', - createAgent: '建立智能體', - builtin: '內置', + title: '智慧體', + subtitle: '配置和管理您的智慧體,自定義對話行為和能力', + createAgent: '建立智慧體', + builtin: '內建', disabled: '已停用', disable: '停用', - enable: '啓用', + enable: '啟用', noDescription: '暫無描述', - selectAgent: '選擇智能體', - noAgents: '暫無智能體', + selectAgent: '選擇智慧體', + noAgents: '暫無智慧體', manageAgents: '管理', - builtinAgents: '內置智能體', - customAgents: '自定義智能體', + builtinAgents: '內建智慧體', + customAgents: '自定義智慧體', selector: { - title: '選擇智能體', + title: '選擇智慧體', current: '當前', - goToSettings: '設置', + goToSettings: '設定', sharedLabel: '共享', notReadyHint: '尚未就緒,還需配置:{items}', notReadyStatus: '待配置', configureAction: '去配置', - sharedNotReadyContact: '請聯繫分享方管理員完成配置', + sharedNotReadyContact: '請聯絡分享方管理員完成配置', capabilitiesSection: '能力', - webSearchCapability: '網絡搜尋', + webSearchCapability: '網路搜尋', imageUploadCapability: '圖片上傳', - capabilityEnabled: '開啓', + capabilityEnabled: '開啟', capabilityDisabled: '關閉', - capabilitySupported: '支持', - capabilityUnsupported: '不支持', + capabilitySupported: '支援', + capabilityUnsupported: '不支援', capabilityUnconfigured: '未配置' }, editor: { - createTitle: '建立智能體', - editTitle: '編輯智能體', + createTitle: '建立智慧體', + editTitle: '編輯智慧體', buttons: { - create: '建立智能體', - saveAndClose: '保存並關閉', + create: '建立智慧體', + saveAndClose: '儲存並關閉', }, postCreateHint: { title: '建立成功', - footer: '可繼續調整配置,設置共享與發佈渠道,完成後點擊「保存並關閉」。', - integrationDesc: '前往集成中心配置 IM、網頁嵌入等發佈渠道', + footer: '可繼續調整配置,設定共享與釋出渠道,完成後點選「儲存並關閉」。', + integrationDesc: '前往整合中心配置 IM、網頁嵌入等釋出渠道', }, - basicInfo: '基本信息', - basicInfoDesc: '配置智能體的名稱、描述與運行模式', + basicInfo: '基本資訊', + basicInfoDesc: '配置智慧體的名稱、描述與執行模式', promptsConfig: '提示詞', promptsConfigDesc: '配置系統提示詞、上下文模板、意圖/改寫/兜底提示詞', modelConfig: '模型配置', - modelConfigDesc: '配置對話模型、ReRank 等輔助模型及生成參數', + modelConfigDesc: '配置對話模型、ReRank 等輔助模型及生成引數', toolsConfig: '工具配置', toolsConfigDesc: '配置 Agent 可以使用的工具', knowledgeConfig: '知識庫', - knowledgeConfigDesc: '配置智能體可訪問的知識庫範圍與 FAQ 策略', - webSearchConfig: '網絡搜尋', - webSearchConfigDesc: '配置智能體的網絡搜尋能力', - agentId: '智能體 ID', - agentIdDesc: 'API 集成時可使用此 ID 指定智能體', + knowledgeConfigDesc: '配置智慧體可訪問的知識庫範圍與 FAQ 策略', + webSearchConfig: '網路搜尋', + webSearchConfigDesc: '配置智慧體的網路搜尋能力', + agentId: '智慧體 ID', + agentIdDesc: 'API 整合時可使用此 ID 指定智慧體', name: '名稱', - namePlaceholder: '請輸入智能體名稱', - nameRequired: '請輸入智能體名稱', + namePlaceholder: '請輸入智慧體名稱', + nameRequired: '請輸入智慧體名稱', systemPromptRequired: '請輸入系統提示詞', modelRequired: '請選擇模型', - queryMissingInRewrite: '改寫用戶提示詞必須包含 {\'{{\'}query{\'}}\'} 佔位符', + queryMissingInRewrite: '改寫使用者提示詞必須包含 {\'{{\'}query{\'}}\'} 佔位符', queryMissingInFallback: '兜底提示詞必須包含 {\'{{\'}query{\'}}\'} 佔位符', description: '描述', - descriptionPlaceholder: '請輸入智能體描述', + descriptionPlaceholder: '請輸入智慧體描述', normalDesc: '快速響應,直接回答問題', agentDesc: '多步思考,深度分析複雜問題', model: '模型', modelPlaceholder: '請選擇模型', systemPrompt: '系統提示詞', - systemPromptPlaceholder: '自定義系統提示詞,定義智能體的行爲和角色(使用 {\'{{\'}web_search_status{\'}}\'} 佔位符動態控制網絡搜尋行爲)', + systemPromptPlaceholder: '自定義系統提示詞,定義智慧體的行為和角色(使用 {\'{{\'}web_search_status{\'}}\'} 佔位符動態控制網路搜尋行為)', contextTemplateRequired: '請輸入上下文模板', temperature: '溫度', thinking: '思考模式', citationEnabled: '輸出來源引用', citationEnabledDesc: '在最終回答中展示知識庫和網頁來源;關閉後仍會正常檢索和使用證據', - mode: '運行模式', - webSearch: '網絡搜尋', + mode: '執行模式', + webSearch: '網路搜尋', webSearchProvider: '搜尋引擎', - webSearchProviderPlaceholder: '使用默認搜尋引擎', + webSearchProviderPlaceholder: '使用預設搜尋引擎', webSearchMaxResults: '最大搜尋結果數', webFetchEnabled: '自動抓取頁面內容', webFetchTopN: '抓取頁面數', @@ -5419,11 +5419,11 @@ export default { myKnowledgeBases: '我的知識庫', sharedKnowledgeBases: '協作知識庫', retrieveKBOnlyWhenMentioned: '僅在 {\'@\'} 提及時檢索', - retrieveKBOnlyWhenMentionedDesc: '關閉:自動檢索已配置的知識庫,開啓:僅當用戶 {\'@\'} 提及時才檢索', + retrieveKBOnlyWhenMentionedDesc: '關閉:自動檢索已配置的知識庫,開啟:僅當使用者 {\'@\'} 提及時才檢索', rerankModel: 'ReRank 模型', rerankModelDesc: '用於對知識庫檢索結果進行重排序,提高回答準確性', rerankModelPlaceholder: '請選擇 ReRank 模型', - rerankModelOptionalHint: '當前作用域內暫無 RAG 類型知識庫,可不填;後續若加入 RAG 知識庫,將自動使用空間默認重排模型,仍建議顯式配置。', + rerankModelOptionalHint: '當前作用域內暫無 RAG 型別知識庫,可不填;後續若加入 RAG 知識庫,將自動使用空間預設重排模型,仍建議顯式配置。', maxIterations: '最大迭代次數', allowedTools: '允許的工具', multiTurn: '多輪對話', @@ -5438,20 +5438,20 @@ export default { conversationSettings: '多輪對話', contextTemplate: '上下文模板', contextTemplatePlaceholder: '自定義上下文模板...', - enableQueryExpansion: '查詢擴展', + enableQueryExpansion: '查詢擴充套件', enableRewrite: '問題改寫', queryUnderstandModel: '問題理解模型', queryUnderstandModelPlaceholder: '留空則複用主對話模型', rewritePromptSystem: '改寫系統提示詞', - rewritePromptSystemPlaceholder: '留空使用系統默認提示詞', - rewritePromptUser: '改寫用戶提示詞', - rewritePromptUserPlaceholder: '留空使用系統默認提示詞', + rewritePromptSystemPlaceholder: '留空使用系統預設提示詞', + rewritePromptUser: '改寫使用者提示詞', + rewritePromptUserPlaceholder: '留空使用系統預設提示詞', maxCompletionTokens: '最大生成Token數', fallbackStrategy: '兜底策略', fallbackResponse: '固定回覆內容', fallbackResponsePlaceholder: '抱歉,我無法回答這個問題。', fallbackPrompt: '兜底提示詞', - fallbackPromptPlaceholder: '留空使用系統默認提示詞', + fallbackPromptPlaceholder: '留空使用系統預設提示詞', skillsConfig: '技能 Skills', skillsConfigDesc: '配置 Agent 可以使用的預裝 Skills,提供專業領域知識和工作流程', skillsSelection: 'Skills 選擇', @@ -5460,99 +5460,99 @@ export default { skillsSelected: '指定', skillsNone: '禁用', selectSkills: '選擇 Skills', - selectSkillsDesc: '選擇要啓用的 Skills', + selectSkillsDesc: '選擇要啟用的 Skills', noSkillsAvailable: '暫無預裝 Skills', sandboxConfig: '沙箱後端', - sandboxConfigDesc: '選擇該智能體的技能腳本在哪個沙箱後端中執行。', + sandboxConfigDesc: '選擇該智慧體的技能指令碼在哪個沙箱後端中執行。', sandboxBackend: '沙箱後端', - sandboxBackendDefault: '不啓用沙箱', - sandboxBackendHint: '僅在啓用技能執行時生效。所選配置被刪除後,該智能體的技能執行會失敗。', + sandboxBackendDefault: '不啟用沙箱', + sandboxBackendHint: '僅在啟用技能執行時生效。所選配置被刪除後,該智慧體的技能執行會失敗。', sandboxBackendMissing: '配置已刪除', - sandboxNoConfigs: '當前空間還沒有沙箱後端配置,技能腳本不會執行。可在「設置 - 沙箱後端」中添加。', - sandboxInfoTitle: '爲什麼要選後端?', + sandboxNoConfigs: '當前空間還沒有沙箱後端配置,技能指令碼不會執行。可在「設定 - 沙箱後端」中新增。', + sandboxInfoTitle: '為什麼要選後端?', sandboxInfoContent: '不同後端對應不同的帳號、區域與配額。同一會話的沙箱一旦建立,後續的附件、產物與銷燬都會鎖定在建立時那份配置上,改這裡隻影響之後新建的沙箱。', skillsInfoTitle: '什麼是 Skills?', - skillsInfoContent: 'Skills 是預裝的專業知識模塊,可以爲 Agent 提供特定領域的指令、工作流程和工具支持。啓用 Skills 後,Agent 會在需要時自動加載相關知識。' + skillsInfoContent: 'Skills 是預裝的專業知識模組,可以為 Agent 提供特定領域的指令、工作流程和工具支援。啟用 Skills 後,Agent 會在需要時自動載入相關知識。' }, messages: { - created: '智能體建立成功', - updated: '智能體更新成功', - deleted: '智能體已刪除', + created: '智慧體建立成功', + updated: '智慧體更新成功', + deleted: '智慧體已刪除', deleteFailed: '刪除失敗', - saveFailed: '保存失敗', - copied: '智能體複製成功', + saveFailed: '儲存失敗', + copied: '智慧體複製成功', copyFailed: '複製失敗', disabled: '已停用', - enabled: '已啓用' + enabled: '已啟用' }, delete: { - confirmTitle: '刪除智能體', - confirmMessage: '確定要刪除智能體「{name}」嗎?此操作不可還原。', + confirmTitle: '刪除智慧體', + confirmMessage: '確定要刪除智慧體「{name}」嗎?此操作不可還原。', confirmButton: '確認刪除' }, shareScope: { title: '共享範圍說明', - desc: '空間成員以只讀方式使用該智能體,將遵循您當前配置的能力與資源;您對智能體的修改會同步給已共享的空間。如需允許空間成員編輯知識庫內容,請將知識庫共享到空間。', + desc: '空間成員以只讀方式使用該智慧體,將遵循您當前配置的能力與資源;您對智慧體的修改會同步給已共享的空間。如需允許空間成員編輯知識庫內容,請將知識庫共享到空間。', knowledgeBase: '知識庫', chatModel: '對話模型', rerankModel: '重排模型', - webSearch: '網絡搜尋', + webSearch: '網路搜尋', mcp: 'MCP 服務', kbAll: '全部知識庫', kbSelected: '指定 {count} 個知識庫', kbNone: '不使用', modelConfigured: '已配置', modelNotSet: '未配置', - enabled: '開啓', + enabled: '開啟', disabled: '關閉', mcpAll: '全部服務', mcpSelected: '指定 {count} 個服務', mcpNone: '不使用' }, detail: { - title: '智能體詳情', + title: '智慧體詳情', useInChat: '在對話中使用' }, empty: { - title: '暫無自定義智能體', - description: '點擊右上角按鈕建立您的第一個智能體', - sharedTitle: '暫無共享智能體', - sharedDescription: '您可以加入空間或請求他人將智能體共享給您', + title: '暫無自定義智慧體', + description: '點選右上角按鈕建立您的第一個智慧體', + sharedTitle: '暫無共享智慧體', + sharedDescription: '您可以加入空間或請求他人將智慧體共享給您', favoritesTitle: '暫無收藏', - favoritesDescription: '在智能體卡片右上角點擊星標即可收藏', + favoritesDescription: '在智慧體卡片右上角點選星標即可收藏', recentsTitle: '暫無最近訪問', - recentsDescription: '最近使用過的智能體會出現在這裡' + recentsDescription: '最近使用過的智慧體會出現在這裡' }, sections: { - builtin: '內置', + builtin: '內建', mine: '我建立的', tenantOthers: '本空間 · 其他成員', - tenantReadonly: '本空間 · 僅查看', + tenantReadonly: '本空間 · 僅檢視', sharedByMe: '我共享的', sharedEditable: '共享給我 · 可編輯', - sharedReadonly: '共享給我 · 僅查看' + sharedReadonly: '共享給我 · 僅檢視' }, tabs: { sharedToMe: '共享給我' }, features: { - webSearch: '支持網絡搜尋', + webSearch: '支援網路搜尋', knowledgeBase: '關聯知識庫', - mcp: '支持MCP服務', + mcp: '支援MCP服務', multiTurn: '多輪對話' }, mode: { normal: '快速問答', - agent: '智能推理' + agent: '智慧推理' }, type: { normal: '快速問答', - agent: '智能推理' + agent: '智慧推理' }, capabilities: { kbCount: '指定 {count} 個知識庫', kbAll: '可訪問全部知識庫', - mcpEnabled: '啓用 MCP 服務', + mcpEnabled: '啟用 MCP 服務', multiTurn: '多輪對話' } }, @@ -5561,19 +5561,19 @@ export default { root: '知識處理', attempt: '第 {n} 次嘗試', retry: '重新解析', - refresh: '立即刷新', + refresh: '立即重新整理', copy: '複製', copyDetails: '複製詳情', - copied: '已複製到剪貼板', + copied: '已複製到剪貼簿', close: '關閉', live: 'LIVE', - liveTooltip: '解析進行中,每 2 秒自動刷新一次', - autoRefreshOn: '自動刷新中', - fetchFailedShort: '刷新失敗', - viewTrace: '查看 Trace', + liveTooltip: '解析進行中,每 2 秒自動重新整理一次', + autoRefreshOn: '自動重新整理中', + fetchFailedShort: '重新整理失敗', + viewTrace: '檢視 Trace', expandBranch: '展開子項', collapseBranch: '收起子項', - rowSelectHint: '點擊查看詳情;左側箭頭展開或收起子項', + rowSelectHint: '點選檢視詳情;左側箭頭展開或收起子項', resizeDrawer: '拖拽調整面板寬度', justNow: '剛剛', secondsAgo: '{n} 秒前', @@ -5582,19 +5582,19 @@ export default { totalDuration: '總耗時:{d}', total: '總耗時 {d}', errorCode: { - UNKNOWN_SUGGESTION: '請查看應用日誌獲取詳細信息。' + UNKNOWN_SUGGESTION: '請檢視應用日誌獲取詳細資訊。' }, status: { pending: '等待中', running: '進行中', - finalizing: '優化中', + finalizing: '最佳化中', done: '已完成', failed: '失敗', skipped: '已跳過', cancelled: '已取消' }, stage: { - docreader: '文檔解析', + docreader: '文件解析', chunking: '分塊', embedding: '向量化', multimodal: '多模態識別', @@ -5606,19 +5606,19 @@ export default { duration: '耗時', offset: '起點偏移', timing: '時序', - identity: '身份信息', + identity: '身份資訊', stageBreakdown: '階段分解', stageOrder: '階段順序', childCount: '子 span 數', - kind: '類型', + kind: '型別', status: '狀態', name: '名稱', input: '輸入', output: '輸出', metadata: '元資料', traceMetadata: 'Trace 級元資料', - metadataHint: '記錄與 Langfuse 等可觀測性系統關聯的輔助字段(如 trace ID)。各階段的業務入參/出參在「輸入」「輸出」標籤中查看。', - metadataEmpty: '當前 span 沒有元資料。階段與子任務的入參/出參請查看「輸入」「輸出」;若已接入 Langfuse,trace 級字段會顯示在「概覽」。', + metadataHint: '記錄與 Langfuse 等可觀測性系統關聯的輔助欄位(如 trace ID)。各階段的業務入參/出參在「輸入」「輸出」標籤中檢視。', + metadataEmpty: '當前 span 沒有元資料。階段與子任務的入參/出參請檢視「輸入」「輸出」;若已接入 Langfuse,trace 級欄位會顯示在「概覽」。', error: '錯誤', empty: '暫無資料', inProgress: '進行中', @@ -5635,22 +5635,22 @@ export default { head: { stagesDone: '主流程階段', stagesProgress: '當前階段', - postprocessTasks: '後臺任務:運行中 {running} / 失敗 {failed} / 已完成 {completed}', + postprocessTasks: '後臺任務:執行中 {running} / 失敗 {failed} / 已完成 {completed}', completedWithActiveTrace: '處理已完成,但仍有 {n} 個 Trace 任務處於活動狀態', attempt: '嘗試', updated: '更新於' }, processConfig: { title: '本次解析配置', - kbDefault: '使用知識庫默認配置', + kbDefault: '使用知識庫預設配置', graph: '知識圖譜' } }, uploadConfirm: { - title: '上傳文檔確認', + title: '上傳文件確認', parseConfig: '解析配置', configNav: '解析配置導航', - navParserDefault: '默認', + navParserDefault: '預設', navParserCustomized: '已自定義', moreOptions: '更多處理選項', summaryParentChildShort: '父子分塊', @@ -5658,55 +5658,55 @@ export default { summaryQuestionCountValue: '{count} 個', summaryGraphTagsValue: '{count} 個', navChunkingSummary: '分塊 {size}', - statusOn: '已開啓', - statusOff: '未開啓', - notSet: '未設置', - summaryNoTags: '未設置', + statusOn: '已開啟', + statusOff: '未開啟', + notSet: '未設定', + summaryNoTags: '未設定', summaryTagsCount: '{count} 個標籤', confirm: '確認上傳並解析', cancel: '取消', - tabTags: '文檔標籤', - tagsDescription: '爲本批次導入的所有文檔選擇標籤,可多選', + tabTags: '文件標籤', + tagsDescription: '為本批次匯入的所有文件選擇標籤,可多選', tagsPlaceholder: '請選擇標籤(可多選)', tagsEmpty: '當前知識庫暫無標籤,可上傳後在標籤管理中建立', - tagsLoadFailed: '標籤加載失敗,可稍後在文檔列表中設置', - noItems: '請至少添加一個文件或 URL', + tagsLoadFailed: '標籤載入失敗,可稍後在文件列表中設定', + noItems: '請至少新增一個檔案或 URL', urlItemLabel: 'URL', - urlAdded: '已添加 URL', + urlAdded: '已新增 URL', urlDuplicate: '該 URL 已在列表中', statusNeedsSetup: '待配置', - multimodalSetupHint: '含圖片內容,請啓用多模態並選擇模型', - asrSetupHint: '含音頻內容,請啓用語音識別並選擇模型', + multimodalSetupHint: '含圖片內容,請啟用多模態並選擇模型', + asrSetupHint: '含音訊內容,請啟用語音識別並選擇模型', vlmModelRequired: '請配置多模態模型', asrModelRequired: '請配置語音識別模型', - vlmModelSelectRequired: '已啓用多模態,請選擇 VLM 模型', - asrModelSelectRequired: '已啓用語音識別,請選擇 ASR 模型', - continueAdd: '繼續添加', + vlmModelSelectRequired: '已啟用多模態,請選擇 VLM 模型', + asrModelSelectRequired: '已啟用語音識別,請選擇 ASR 模型', + continueAdd: '繼續新增', destinationLabel: '上傳位置', destinationChange: '更改上傳位置', destinationToRoot: '改到根目錄', - folderUploadTitle: '文件夾「{name}」', - folderUploadHint: '共 {count} 個文件,將保留本地目錄結構', - filesAdded: '已添加 {count} 個文件', - filesAllDuplicate: '所選文件已在列表中', - titleManual: '在線編輯發佈確認', - confirmManual: '確認發佈並解析', + folderUploadTitle: '資料夾「{name}」', + folderUploadHint: '共 {count} 個檔案,將保留本地目錄結構', + filesAdded: '已新增 {count} 個檔案', + filesAllDuplicate: '所選檔案已在列表中', + titleManual: '線上編輯釋出確認', + confirmManual: '確認釋出並解析', titleReparse: '重新解析確認', confirmReparse: '確認並重新解析', - reparseSource: '待重新解析文檔', + reparseSource: '待重新解析文件', reparseHint: '將沿用上次解析的配置,可在此調整', - manualCharCount: '{count} 個字符', + manualCharCount: '{count} 個字元', pdfForceScanned: { label: '按掃描件解析 PDF', - description: '適用於網頁打印、掃描件、圖片型 PDF。開啓後會逐頁 OCR,解析更完整但耗時和模型調用更多。' + description: '適用於網頁列印、掃描件、圖片型 PDF。開啟後會逐頁 OCR,解析更完整但耗時和模型呼叫更多。' } }, knowledgeBase: { title: '知識庫', - fileContent: '文件內容', + fileContent: '檔案內容', name: '名稱', description: '描述', - settings: '設置', + settings: '設定', tagUpdateSuccess: '標籤更新成功', tagEditDialogHeading: '編輯標籤', tagEditSearch: '搜尋標籤...', @@ -5716,20 +5716,20 @@ export default { folderTree: { title: '目錄', rootRow: '根目錄', - rootRowTip: '知識庫根目錄,未歸入子文件夾的文檔在此', - folderCardCount: '{count} 個文檔', + rootRowTip: '知識庫根目錄,未歸入子資料夾的文件在此', + folderCardCount: '{count} 個文件', searchingSubtree: '(含子目錄)', - emptyFolder: '這個文件夾裡還沒有文檔', - emptySearch: '沒有匹配的文檔', + emptyFolder: '這個資料夾裡還沒有文件', + emptySearch: '沒有匹配的文件', collapse: '收起目錄', expand: '展開目錄', - collapseFolder: '收起該文件夾', - expandFolder: '展開該文件夾', - rename: '重命名', - renamePlaceholder: '輸入文件夾名稱', - renameSuccess: '文件夾已重命名', - renameFailed: '文件夾重命名失敗', - renameInvalid: '不能把文件夾移動到它自己的子目錄下', + collapseFolder: '收起該資料夾', + expandFolder: '展開該資料夾', + rename: '重新命名', + renamePlaceholder: '輸入資料夾名稱', + renameSuccess: '資料夾已重新命名', + renameFailed: '資料夾重新命名失敗', + renameInvalid: '不能把資料夾移動到它自己的子目錄下', }, moveToFolder: { action: '移動到目錄', @@ -5741,7 +5741,7 @@ export default { newFolderHint: '回車建立並移動', newFolderHintRoot: '將在根目錄下建立', newFolderHintUnder: '將在「{folder}」下建立', - success: '已移動 {count} 個文檔', + success: '已移動 {count} 個文件', failed: '移動失敗', duplicate: '該目錄已存在', }, @@ -5749,13 +5749,13 @@ export default { tagFilterPlaceholder: '標籤', tagFilterMulti: '{count} 個標籤', tagManageTitle: '管理標籤', - tagManageDescription: '新建、重命名或刪除知識庫標籤', + tagManageDescription: '新建、重新命名或刪除知識庫標籤', tagManageLink: '管理標籤…', tagManageListSection: '標籤列表', - tagManageDocCount: '{count} 個文檔', + tagManageDocCount: '{count} 個文件', tagManageFaqCount: '{count} 個 FAQ', tagSelectedCount: '已選 {count} 個標籤', - tagNewPlaceholder: '輸入新標籤名稱,回車添加', + tagNewPlaceholder: '輸入新標籤名稱,回車新增', untagged: '無標籤', tagClearAction: '清空已選', tagCreateAction: '新建標籤', @@ -5764,42 +5764,42 @@ export default { tagNameRequired: '請先輸入標籤名稱', tagCreateSuccess: '標籤建立成功', tagEditSuccess: '標籤更新成功', - tagDeleteDescDoc: '確定刪除標籤"{name}"?該標籤下的所有文檔將被一併刪除', + tagDeleteDescDoc: '確定刪除標籤"{name}"?該標籤下的所有文件將被一併刪除', tagDeleteSuccess: '標籤已刪除', - tagEditAction: '重命名', + tagEditAction: '重新命名', tagDeleteAction: '刪除', tagEmptyResult: '未找到匹配的標籤', tagLabel: '標籤', tagPlaceholder: '請選擇標籤', noTags: '暫無標籤', - uploadSuccess: '文件上傳成功!', - uploadFailed: '文件上傳失敗!', - fileExists: '文件已存在', - uploadAllSuccess: '成功上傳 {count} 個文件!', + uploadSuccess: '檔案上傳成功!', + uploadFailed: '檔案上傳失敗!', + fileExists: '檔案已存在', + uploadAllSuccess: '成功上傳 {count} 個檔案!', uploadPartialSuccess: '上傳完成:成功 {success} 個,失敗 {fail} 個', - uploadAllFailed: '所有文件上傳失敗', - uploadingFolder: '正在上傳文件夾中的 {total} 個文件...', - videosFilteredNoVLM: '已跳過 {count} 個視頻文件(暫不支持視頻上傳)', - unsupportedTypesHint: '部分文檔類型({types})暫無可用解析引擎,上傳後將無法解析', + uploadAllFailed: '所有檔案上傳失敗', + uploadingFolder: '正在上傳資料夾中的 {total} 個檔案...', + videosFilteredNoVLM: '已跳過 {count} 個影片檔案(暫不支援影片上傳)', + unsupportedTypesHint: '部分文件型別({types})暫無可用解析引擎,上傳後將無法解析', goToParserSettings: '前往配置', - importURL: '導入網頁', - addDocument: '添加文檔', - importURLTitle: '導入網頁', + importURL: '匯入網頁', + addDocument: '新增文件', + importURLTitle: '匯入網頁', urlRequired: '請輸入URL', invalidURL: '請輸入有效的URL', - urlImportSuccess: 'URL導入成功!', - urlImportFailed: 'URL導入失敗!', + urlImportSuccess: 'URL匯入成功!', + urlImportFailed: 'URL匯入失敗!', urlExists: '該URL已存在', urlLabel: 'URL地址', urlPlaceholder: '請輸入網頁URL,例如:https://example.com', - urlTip: '支持導入各類網頁內容,系統會自動提取和解析網頁中的文本內容', + urlTip: '支援匯入各類網頁內容,系統會自動提取和解析網頁中的文字內容', typeURL: '網頁', typeManual: '手動建立', - typeFile: '文件', + typeFile: '檔案', channelLabel: '來源渠道', channelWeb: '網頁端', channelApi: 'API', - channelBrowserExtension: '瀏覽器插件', + channelBrowserExtension: '瀏覽器外掛', channelWechat: '微信', channelWecom: '企業微信', channelFeishu: '飛書', @@ -5818,43 +5818,43 @@ export default { channelUnknown: '未知', urlSource: '來源網址', webContent: '網頁內容', - documentContent: '文檔內容', - importTime: '導入時間', + documentContent: '文件內容', + importTime: '匯入時間', createTime: '建立時間', createdAt: '建立', updatedAt: '更新', - clickToViewFull: '點擊卡片查看全文與分段', - characters: '字符', + clickToViewFull: '點選卡片檢視全文與分段', + characters: '字元', segment: '片段', chunkCount: '共 {count} 個片段', - viewChunks: '查看分塊', + viewChunks: '檢視分塊', viewMerged: '全文', generatedQuestions: '輔助召回問題', - viewParentContext: '查看父塊上下文', - parentContextLoadFailed: '加載父上下文失敗', + viewParentContext: '檢視父塊上下文', + parentContextLoadFailed: '載入父上下文失敗', confirmDeleteQuestion: '確定要刪除這個問題嗎?刪除後將同時移除對應的向量索引。', legacyQuestionCannotDelete: '舊格式問題無法刪除,請重新生成問題', customMetadata: '自定義元資料', - metadataCapabilityHint: '用於文檔總結,並在文檔被召回後作爲文檔級上下文輔助回答;不會參與索引或影響召回排序', + metadataCapabilityHint: '用於文件總結,並在文件被召回後作為文件級上下文輔助回答;不會參與索引或影響召回排序', noCustomMetadata: '暫無自定義元資料', - addMetadataField: '添加元資料字段', - metadataKeyPlaceholder: '字段名', - metadataValuePlaceholder: '字段值', - metadataTypeText: '文本', + addMetadataField: '新增元資料欄位', + metadataKeyPlaceholder: '欄位名', + metadataValuePlaceholder: '欄位值', + metadataTypeText: '文字', metadataTypeNumber: '數字', - metadataTypeBoolean: '布爾值', + metadataTypeBoolean: '布林值', metadataTypeNull: '空值', - metadataKeyRequired: '元資料字段名不能爲空', - metadataKeyDuplicate: '元資料字段 {key} 重複', - metadataNumberRequired: '元資料字段 {key} 必須是有效數字', + metadataKeyRequired: '元資料欄位名不能為空', + metadataKeyDuplicate: '元資料欄位 {key} 重複', + metadataNumberRequired: '元資料欄位 {key} 必須是有效數字', regenerateSummary: '重新生成摘要', generateSummary: '生成摘要', - noDocumentSummary: '暫無文檔摘要', + noDocumentSummary: '暫無文件摘要', summaryRefreshed: '摘要已更新', - summaryRefreshQueued: '摘要刷新已提交,完成後會自動更新', + summaryRefreshQueued: '摘要重新整理已提交,完成後會自動更新', indexFailed: '索引同步失敗', - chunkSavedIndexFailed: '內容已保存,但索引同步失敗,請點擊重試索引', - chunkEditConflict: '分塊已被他人修改,列表已刷新,請重試', + chunkSavedIndexFailed: '內容已儲存,但索引同步失敗,請點選重試索引', + chunkEditConflict: '分塊已被他人修改,列表已重新整理,請重試', retryIndex: '重試索引', indexRetrySuccess: '索引已同步', chunkHistory: '分塊編輯歷史', @@ -5867,49 +5867,49 @@ export default { revertRevision: '回滾版本', revertRevisionConfirm: '確定回滾到 v{revision} 嗎?回滾後會生成一個新版本。', chunkReverted: '分塊已回滾', - chunkContentRequired: '分塊內容不能爲空', + chunkContentRequired: '分塊內容不能為空', disableChunk: '停用', - enableChunk: '啓用', - enabledStatus: '已啓用', + enableChunk: '啟用', + enabledStatus: '已啟用', disabledStatus: '已停用', editChunkContent: '編輯分塊內容', - addGeneratedQuestion: '添加輔助召回問題', + addGeneratedQuestion: '新增輔助召回問題', regenerateQuestions: '重新生成問題', questionsRegenerated: '輔助召回問題已更新', staleGeneratedQuestions: '問題基於編輯前內容生成,可按需重新生成', noGeneratedQuestions: '暫無輔助召回問題', - notInitialized: '該知識庫尚未完成初始化配置,請先前往設置頁面配置模型信息後再上傳文件', - missingStorageEngine: '該知識庫尚未選擇存儲引擎,請先前往設置頁面配置存儲引擎後再上傳內容。', - missingStorageEngineUpload: '請先配置存儲引擎後再上傳內容', + notInitialized: '該知識庫尚未完成初始化配置,請先前往設定頁面配置模型資訊後再上傳檔案', + missingStorageEngine: '該知識庫尚未選擇儲存引擎,請先前往設定頁面配置儲存引擎後再上傳內容。', + missingStorageEngineUpload: '請先配置儲存引擎後再上傳內容', goToStorageSettings: '前往配置', - getInfoFailed: '獲取知識庫信息失敗,無法上傳文件', + getInfoFailed: '獲取知識庫資訊失敗,無法上傳檔案', missingId: '缺少知識庫ID', deleteFailed: '刪除失敗,請稍後再試!', uploadTime: '上傳時間', newSession: '新會話', - editDocument: '編輯文檔', + editDocument: '編輯文件', rebuildDocument: '重建知識', - rebuildConfirm: '確認重建文檔"{fileName}"?該操作會清理現有分塊並重新解析。', + rebuildConfirm: '確認重建文件"{fileName}"?該操作會清理現有分塊並重新解析。', rebuildSubmitted: '重建任務已提交', rebuildFailed: '重建失敗,請稍後再試', - rebuildInProgress: '當前文檔正在解析中,請稍後重試', + rebuildInProgress: '當前文件正在解析中,請稍後重試', cancelParse: '停止解析', - cancelParseConfirmBody: '確認停止解析"{title}"?已寫入的分塊會保留,可稍後通過"重建"重新觸發;優化階段(摘要 / 問答 / 知識圖譜)的待執行任務會被立即丟棄。', + cancelParseConfirmBody: '確認停止解析"{title}"?已寫入的分塊會保留,可稍後透過"重建"重新觸發;最佳化階段(摘要 / 問答 / 知識圖譜)的待執行任務會被立即丟棄。', cancelParseSubmitted: '已停止解析', cancelParseFailed: '停止失敗,請稍後再試', draft: '草稿', draftTip: '暫存內容,未參與檢索', - untitledDocument: '未命名文檔', - deleteDocument: '刪除文檔', + untitledDocument: '未命名文件', + deleteDocument: '刪除文件', moveDocument: '移動到...', moveToKnowledgeBase: '移動到知識庫', - moveNoTargets: '沒有兼容的目標知識庫(需要相同類型和 Embedding 模型)', + moveNoTargets: '沒有相容的目標知識庫(需要相同型別和 Embedding 模型)', moveModeReuseVectors: '複用向量(快速)', moveModeReuseVectorsDesc: '直接移動分塊和向量索引,適用於分片配置相同的情況', moveModeReparse: '重新解析', - moveModeReparseDesc: '使用目標知識庫的分片配置重新解析文檔', + moveModeReparseDesc: '使用目標知識庫的分片配置重新解析文件', moveConfirm: '確認移動', - moveConfirmTitle: '確認移動設置', + moveConfirmTitle: '確認移動設定', moveStarted: '移動任務已提交', moveFailed: '移動失敗', moveCompleted: '移動完成', @@ -5918,13 +5918,13 @@ export default { parsingInProgress: '解析中...', generatingSummary: '生成摘要中...', documentSummary: '摘要', - detailSectionMeta: '基本信息', - confirmDeleteDocument: '確認刪除文檔"{fileName}",刪除後將無法還原', + detailSectionMeta: '基本資訊', + confirmDeleteDocument: '確認刪除文件"{fileName}",刪除後將無法還原', confirmDelete: '確認刪除', - viewModeGrid: '卡片視圖', - viewModeList: '列表視圖', - viewModeToggle: '切換視圖', - columnName: '文件名', + viewModeGrid: '卡片檢視', + viewModeList: '列表檢視', + viewModeToggle: '切換檢視', + columnName: '檔名', columnTag: '標籤', columnSize: '大小', columnSource: '來源', @@ -5934,84 +5934,84 @@ export default { selectAll: '全選', selectedCount: '已選 {count} 項', clearSelection: '取消選擇', - batchDelete: '批量刪除', - confirmBatchDeleteDocument: '確認刪除選中的 {count} 個文檔?刪除後將無法還原。', - batchDeleteSuccess: '成功刪除 {count} 個文檔', - batchDeleteFailed: '批量刪除失敗', - batchTag: '批量打標籤', - batchTagDialogHeading: '批量打標籤', - batchTagSubtitle: '爲選中的 {count} 個文檔統一設置標籤(將替換文檔原有標籤)', + batchDelete: '批次刪除', + confirmBatchDeleteDocument: '確認刪除選中的 {count} 個文件?刪除後將無法還原。', + batchDeleteSuccess: '成功刪除 {count} 個文件', + batchDeleteFailed: '批次刪除失敗', + batchTag: '批次打標籤', + batchTagDialogHeading: '批次打標籤', + batchTagSubtitle: '為選中的 {count} 個文件統一設定標籤(將替換文件原有標籤)', batchTagSelectedSection: '已選標籤', batchTagAvailableSection: '可選標籤', batchTagNoSelected: '暫未選擇', - batchTagSuccess: '已爲 {count} 個文檔成功設置標籤', - batchTagFailed: '批量打標籤失敗', - confirmBatchReparseDocument: '確認重建選中的 {count} 個文檔?現有內容將被清除並重新解析。', + batchTagSuccess: '已為 {count} 個文件成功設定標籤', + batchTagFailed: '批次打標籤失敗', + confirmBatchReparseDocument: '確認重建選中的 {count} 個文件?現有內容將被清除並重新解析。', confirmBatchReparse: '確認並重新解析', batchReparseSuccess: '已提交 {count} 個重建任務', - batchReparseFailed: '批量重建失敗', - batchReparseSkippedInFlight: '已跳過 {count} 個正在解析中的文檔', + batchReparseFailed: '批次重建失敗', + batchReparseSkippedInFlight: '已跳過 {count} 個正在解析中的文件', statusCompleted: '已完成', statusProcessing: '解析中', - statusFinalizing: '優化中', + statusFinalizing: '最佳化中', statusFailed: '失敗', statusCancelled: '已取消', statusDraft: '草稿', noDescription: '無描述', - emptyKnowledgeDragDrop: '知識爲空,拖放上傳', - pdfDocFormat: 'pdf、doc 格式文件,不超過10M', - textMarkdownFormat: 'text、markdown格式文件,不超過200K', - dragFileNotText: '請拖拽文件而不是文本或鏈接', + emptyKnowledgeDragDrop: '知識為空,拖放上傳', + pdfDocFormat: 'pdf、doc 格式檔案,不超過10M', + textMarkdownFormat: 'text、markdown格式檔案,不超過200K', + dragFileNotText: '請拖拽檔案而不是文字或連結', searchPlaceholder: '搜尋知識庫...', - docSearchPlaceholder: '搜尋文檔名稱...', - fileTypeFilter: '文件類型', - allFileTypes: '全部類型', + docSearchPlaceholder: '搜尋文件名稱...', + fileTypeFilter: '檔案型別', + allFileTypes: '全部型別', allTags: '全部標籤', parseStatusFilter: '解析狀態', allParseStatuses: '全部狀態', parseStatusPending: '等待中', parseStatusProcessing: '處理中', parseStatusCompleted: '已完成', - parseStatusFinalizing: '整理優化中', + parseStatusFinalizing: '整理最佳化中', parseStatusFailed: '失敗', parseStatusCancelled: '已取消', parseStatusDraft: '草稿', sourceFilter: '來源', allSources: '全部來源', sourceApi: 'API', - sourceBrowserExtension: '瀏覽器擴展', + sourceBrowserExtension: '瀏覽器擴充套件', sourceUpload: '本地上傳', - sourceUrl: 'URL 導入', + sourceUrl: 'URL 匯入', sourceManual: '手動建立', updatedTimeFrom: '起始時間', updatedTimeTo: '結束時間', noMatch: '未找到匹配的知識庫', noKnowledge: '暫無可用知識庫', - loadingFailed: '加載知識庫失敗', - operationNotSupportedForType: '當前知識庫類型不支持該操作', - allFilesSkippedNoEngine: '所選文件類型暫無可用解析引擎,已全部跳過', - filesSkippedNoEngine: '{count} 個文件因無可用解析引擎被跳過', - allUploadSuccess: '所有文件上傳成功({count}個)', - partialUploadSuccess: '部分文件上傳成功(成功:{success},失敗:{fail})', - allUploadFailed: '所有文件上傳失敗({count}個)', + loadingFailed: '載入知識庫失敗', + operationNotSupportedForType: '當前知識庫型別不支援該操作', + allFilesSkippedNoEngine: '所選檔案型別暫無可用解析引擎,已全部跳過', + filesSkippedNoEngine: '{count} 個檔案因無可用解析引擎被跳過', + allUploadSuccess: '所有檔案上傳成功({count}個)', + partialUploadSuccess: '部分檔案上傳成功(成功:{success},失敗:{fail})', + allUploadFailed: '所有檔案上傳失敗({count}個)', deleteSuccess: '知識刪除成功!', - chunkLoadFailed: '分塊加載失敗', + chunkLoadFailed: '分塊載入失敗', infoCard: { - tooltip: '查看知識庫信息', - title: '知識庫信息', + tooltip: '檢視知識庫資訊', + title: '知識庫資訊', basic: '基礎', access: '訪問', - binding: '存儲綁定', + binding: '儲存繫結', capabilities: '能力', stats: '統計', - type: '類型', + type: '型別', createdAt: '建立時間', source: '來源', sharedTo: '共享範圍', - enabled: '已啓用', - vectorStore: '向量存儲', - fileStorage: '文件存儲', - documentCount: '文檔數', + enabled: '已啟用', + vectorStore: '向量儲存', + fileStorage: '檔案儲存', + documentCount: '文件數', faqCount: '問答數', supportedFileTypes: '可上傳格式', chunking: '分塊', @@ -6021,10 +6021,10 @@ export default { accessInfo: { myRole: '我的身份', roleOwner: '建立者', - permissionOwner: '可編輯、管理設置、刪除知識庫', - permissionAdmin: '可編輯、管理共享設置', - permissionEditor: '可編輯文檔與標籤', - permissionViewer: '僅查看與檢索', + permissionOwner: '可編輯、管理設定、刪除知識庫', + permissionAdmin: '可編輯、管理共享設定', + permissionEditor: '可編輯文件與標籤', + permissionViewer: '僅檢視與檢索', fromOrg: '來自空間', sharedAt: '共享於', lastUpdated: '最後更新' @@ -6032,7 +6032,7 @@ export default { }, resourceOrigin: { mine: '我建立', - mineTooltip: '由當前用戶建立', + mineTooltip: '由當前使用者建立', tenant: '本空間', tenantTooltip: '本空間其他成員建立', tenantTooltipWithCreator: '由 {creator} 建立', @@ -6040,7 +6040,7 @@ export default { spaceTooltip: '來自共享空間「{space}」', spaceTooltipWithTenant: '來自共享空間「{space}」· 源空間 {tenant}', shared: '外部共享', - sharedTooltip: '通過共享空間從其他空間訪問' + sharedTooltip: '透過共享空間從其他空間訪問' }, listSpaceSidebar: { all: '全部', @@ -6065,24 +6065,24 @@ export default { prev: '上一步', next: '下一步', done: '知道了', - interactHint: '請直接點擊高亮區域繼續', + interactHint: '請直接點選高亮區域繼續', chat: { steps: { done: { title: '開始探索吧', - desc: '試試提一個與已上傳文檔相關的問題,體驗帶引用的精準回答。' + desc: '試試提一個與已上傳文件相關的問題,體驗帶引用的精準回答。' }, send: { - title: '發送開始對話', - desc: '發送後將建立新會話,AI 會結合知識庫內容作答,並標註引用片段。' + title: '傳送開始對話', + desc: '傳送後將建立新會話,AI 會結合知識庫內容作答,並標註引用片段。' }, input: { title: '輸入你的問題', - desc: '直接描述你想了解的內容;也可點擊上方推薦問題快速開始。' + desc: '直接描述你想了解的內容;也可點選上方推薦問題快速開始。' }, kb: { title: '選擇知識範圍', - desc: '點擊 {\'@\'} 可指定一個或多個知識庫/文件,僅基於選中內容回答;不選則按當前智能體配置檢索。' + desc: '點選 {\'@\'} 可指定一個或多個知識庫/檔案,僅基於選中內容回答;不選則按當前智慧體配置檢索。' } } }, @@ -6090,39 +6090,39 @@ export default { steps: { done: { title: '解析完成後即可使用', - desc: '文檔解析入庫後,可在對話中 {\'@\'} 本知識庫提問,回答會附帶引用來源。' + desc: '文件解析入庫後,可在對話中 {\'@\'} 本知識庫提問,回答會附帶引用來源。' }, upload: { - title: '添加文檔', - desc: '點擊此處上傳文件、文件夾,或導入網頁與在線編輯內容。' + title: '新增文件', + desc: '點選此處上傳檔案、資料夾,或匯入網頁與線上編輯內容。' }, intro: { title: '知識庫還是空的', - desc: '添加第一份資料後,才能基於它進行檢索與對話。支持拖拽上傳多種文檔格式。' + desc: '新增第一份資料後,才能基於它進行檢索與對話。支援拖拽上傳多種文件格式。' } } }, agentCreate: { steps: { submit: { - title: '保存智能體', - desc: '確認配置後點擊高亮的「確定」完成建立,即可在對話中選擇該智能體。' + title: '儲存智慧體', + desc: '確認配置後點選高亮的「確定」完成建立,即可在對話中選擇該智慧體。' }, navTools: { title: '工具與 MCP(可選)', - desc: '智能推理模式下可勾選內置工具、MCP 服務等,擴展搜尋、計算等能力。' + desc: '智慧推理模式下可勾選內建工具、MCP 服務等,擴充套件搜尋、計算等能力。' }, multimodal: { - title: '啓用附件上傳', - desc: '可分別配置圖片、音頻上傳及附件解析策略;啓用圖片上傳時需在下方選擇 VLM 模型。' + title: '啟用附件上傳', + desc: '可分別配置圖片、音訊上傳及附件解析策略;啟用圖片上傳時需在下方選擇 VLM 模型。' }, navMultimodal: { title: '附件上傳(可選)', - desc: '開啓後,對話中可上傳圖片、文檔、音頻等附件;圖片理解需先在系統設置中配置 VLLM 模型。' + desc: '開啟後,對話中可上傳圖片、文件、音訊等附件;圖片理解需先在系統設定中配置 VLLM 模型。' }, navWebsearch: { title: '聯網搜尋(可選)', - desc: '配置是否允許智能體調用外部搜尋引擎補充實時信息。' + desc: '配置是否允許智慧體呼叫外部搜尋引擎補充實時資訊。' }, knowledge: { title: '知識庫範圍', @@ -6130,35 +6130,35 @@ export default { }, navKnowledge: { title: '關聯知識庫', - desc: '決定智能體可檢索哪些知識。默認「全部知識庫」,也可改爲指定庫或暫不關聯。' + desc: '決定智慧體可檢索哪些知識。預設「全部知識庫」,也可改為指定庫或暫不關聯。' }, model: { title: '選擇模型', - desc: '從下拉列表選擇已配置的對話模型;沒有合適模型時請先到系統設置添加。' + desc: '從下拉選單選擇已配置的對話模型;沒有合適模型時請先到系統設定新增。' }, navModel: { - title: '綁定對話模型', - desc: '每個智能體必須指定一個 KnowledgeQA 模型作爲推理引擎。' + title: '繫結對話模型', + desc: '每個智慧體必須指定一個 KnowledgeQA 模型作為推理引擎。' }, name: { title: '命名與描述', - desc: '取一個易識別的名稱。智能推理模式下系統可能已預填默認名稱,可按需修改。' + desc: '取一個易識別的名稱。智慧推理模式下系統可能已預填預設名稱,可按需修改。' }, agentType: { - title: '選擇智能體類型', - desc: '預設類型會自動填充系統提示詞、推薦工具與知識庫範圍(如 Wiki 構建、資料分析等)。可按場景切換,名稱與描述會隨之更新。' + title: '選擇智慧體型別', + desc: '預設型別會自動填充系統提示詞、推薦工具與知識庫範圍(如 Wiki 構建、資料分析等)。可按場景切換,名稱與描述會隨之更新。' }, mode: { - title: '選擇運行模式', - desc: '「普通模式」適合固定流程的快速問答;「智能推理」可調用工具、多步思考,適合複雜任務。' + title: '選擇執行模式', + desc: '「普通模式」適合固定流程的快速問答;「智慧推理」可呼叫工具、多步思考,適合複雜任務。' } } }, agentList: { steps: { create: { - title: '建立你的智能體', - desc: '智能體把模型、知識庫、工具與提示詞組合成可複用的對話助手。點擊下方高亮的「建立智能體」開始配置。' + title: '建立你的智慧體', + desc: '智慧體把模型、知識庫、工具與提示片語合成可複用的對話助手。點選下方高亮的「建立智慧體」開始配置。' } } }, @@ -6166,90 +6166,90 @@ export default { steps: { submit: { title: '建立知識庫', - desc: '確認類型、名稱與模型已選好後,點擊高亮的「建立」按鈕。建立成功後將引導你上傳第一份文檔。' + desc: '確認型別、名稱與模型已選好後,點選高亮的「建立」按鈕。建立成功後將引導你上傳第一份文件。' }, faq: { title: 'FAQ 索引方式', - desc: '配置問答對的索引模式。建立後可在本頁繼續添加 FAQ 條目。' + desc: '配置問答對的索引模式。建立後可在本頁繼續新增 FAQ 條目。' }, multimodalVllm: { title: '選擇 VLM 模型', - desc: '開啓多模態後需指定 VLM(視覺語言模型)。若列表爲空,請先在系統設置中添加 VLLM 類型模型。' + desc: '開啟多模態後需指定 VLM(視覺語言模型)。若列表為空,請先在系統設定中新增 VLLM 型別模型。' }, multimodalToggle: { - title: '開啓多模態解析', - desc: '啓用後,上傳的圖片類文檔將使用視覺語言模型提取內容,便於檢索與問答。' + title: '開啟多模態解析', + desc: '啟用後,上傳的圖片類文件將使用視覺語言模型提取內容,便於檢索與問答。' }, navMultimodal: { title: '多模態 / 圖片理解(可選)', - desc: '若文檔含大量圖表、掃描件或需理解圖片內容,可在此開啓多模態並選擇 VLM 模型。' + desc: '若文件含大量圖表、掃描件或需理解圖片內容,可在此開啟多模態並選擇 VLM 模型。' }, storage: { - title: '存儲引擎(可選)', - desc: '原始文件存放位置(本地或對象存儲)。默認跟隨空間設置即可。' + title: '儲存引擎(可選)', + desc: '原始檔案存放位置(本地或物件儲存)。預設跟隨空間設定即可。' }, chunking: { title: '分塊策略(可選)', - desc: '決定文檔如何切分爲檢索片段。默認分塊大小已針對 RAG 優化,一般無需修改。' + desc: '決定文件如何切分為檢索片段。預設分塊大小已針對 RAG 最佳化,一般無需修改。' }, parser: { title: '解析引擎(可選)', - desc: '控制 PDF、Office 等文件的解析方式。默認配置適用於大多數場景,有 OCR 需求時可在此調整。' + desc: '控制 PDF、Office 等檔案的解析方式。預設配置適用於大多數場景,有 OCR 需求時可在此調整。' }, embedding: { title: 'Embedding 模型', - desc: '將文本轉爲向量以支持語義檢索。與上方索引策略中的「向量/關鍵詞檢索」配合使用。' + desc: '將文字轉為向量以支援語義檢索。與上方索引策略中的「向量/關鍵詞檢索」配合使用。' }, llm: { title: '對話 / 摘要模型', - desc: '用於文檔摘要、問答生成等。若列表爲空,請通過下拉菜單前往系統設置添加模型。' + desc: '用於文件摘要、問答生成等。若列表為空,請透過下拉選單前往系統設定新增模型。' }, navModels: { title: '配置模型(必填)', - desc: '知識庫必須綁定對話模型;開啓檢索時還需 Embedding 模型。點擊左側「模型配置」進入。' + desc: '知識庫必須繫結對話模型;開啟檢索時還需 Embedding 模型。點選左側「模型配置」進入。' }, indexing: { title: '選擇索引能力', - desc: '默認已開啓向量與關鍵詞檢索,可按需開啓 Wiki 結構化索引或知識圖譜。至少保留一種檢索方式。' + desc: '預設已開啟向量與關鍵詞檢索,可按需開啟 Wiki 結構化索引或知識圖譜。至少保留一種檢索方式。' }, name: { title: '填寫名稱', desc: '取一個便於識別的名稱,例如「產品手冊」或「客服 FAQ」。描述可選填。' }, type: { - title: '選擇知識庫類型', - desc: '文檔庫適合上傳 PDF、Word 等文件;FAQ 庫適合問答對。建立後類型不可更改,請按需選擇。' + title: '選擇知識庫型別', + desc: '文件庫適合上傳 PDF、Word 等檔案;FAQ 庫適合問答對。建立後型別不可更改,請按需選擇。' } } }, tenantModels: { - needChatModelFirst: '請先添加對話模型(KnowledgeQA),再建立智能體。', + needChatModelFirst: '請先新增對話模型(KnowledgeQA),再建立智慧體。', stepsAgent: { done: { - title: '然後建立智能體', - desc: '保存並關閉設置後,點擊「建立智能體」,嚮導會帶你配置模式、知識庫與附件上傳等選項。' + title: '然後建立智慧體', + desc: '儲存並關閉設定後,點選「建立智慧體」,嚮導會帶你配置模式、知識庫與附件上傳等選項。' }, addModel: { - title: '添加對話模型', - desc: '點擊「添加模型」,選擇 KnowledgeQA 類型並填寫接入信息。' + title: '新增對話模型', + desc: '點選「新增模型」,選擇 KnowledgeQA 型別並填寫接入資訊。' }, intro: { title: '需要先配置對話模型', - desc: '建立智能體至少需要一種 KnowledgeQA(對話)模型。請先在系統設置中添加;Embedding 模型僅建立知識庫時需要。' + desc: '建立智慧體至少需要一種 KnowledgeQA(對話)模型。請先在系統設定中新增;Embedding 模型僅建立知識庫時需要。' } }, steps: { done: { - title: '添加完成後繼續', - desc: '模型保存後關閉設置頁,即可點擊「新建知識庫」;建立嚮導會引導你完成類型、索引與模型綁定。' + title: '新增完成後繼續', + desc: '模型儲存後關閉設定頁,即可點選「新建知識庫」;建立嚮導會引導你完成型別、索引與模型繫結。' }, addModel: { - title: '添加模型', - desc: '點擊「添加模型」,分別配置 KnowledgeQA(對話)與 Embedding 類型。Lite 用戶可使用 Ollama 拉取本地模型。' + title: '新增模型', + desc: '點選「新增模型」,分別配置 KnowledgeQA(對話)與 Embedding 型別。Lite 使用者可使用 Ollama 拉取本地模型。' }, intro: { title: '需要先配置模型', - desc: '建立文檔知識庫至少需要:一個對話模型(用於摘要與問答)和一個 Embedding 模型(用於向量檢索)。請先在系統設置中添加。' + desc: '建立文件知識庫至少需要:一個對話模型(用於摘要與問答)和一個 Embedding 模型(用於向量檢索)。請先在系統設定中新增。' } } }, @@ -6257,7 +6257,7 @@ export default { steps: { create: { title: '建立第一個知識庫', - desc: '知識庫用來存放文檔與 FAQ。點擊下方高亮的「新建知識庫」按鈕,我們會帶你完成表單填寫。' + desc: '知識庫用來存放文件與 FAQ。點選下方高亮的「新建知識庫」按鈕,我們會帶你完成表單填寫。' } } } @@ -6272,57 +6272,57 @@ export default { steps: { done: { title: '一切就緒', - desc: '你已經瞭解了核心功能,現在就開始構建你的知識助手吧!隨時可點擊菜單頂部暱稱旁的幫助按鈕重新查看引導。' + desc: '你已經瞭解了核心功能,現在就開始構建你的知識助手吧!隨時可點選選單頂部暱稱旁的幫助按鈕重新檢視引導。' }, models: { title: '配置你的模型', - desc: '這是關鍵一步:在模型管理中添加對話、向量等模型,知識庫與對話功能才能正常工作。點擊「添加模型」即可開始配置。' + desc: '這是關鍵一步:在模型管理中新增對話、向量等模型,知識庫與對話功能才能正常工作。點選「新增模型」即可開始配置。' }, settings: { - title: '帳號與設置入口', - desc: '點開這裡可以管理帳號、成員與系統設置。需要再次查看本引導時,可點擊菜單頂部暱稱旁的幫助按鈕重新打開。' + title: '帳號與設定入口', + desc: '點開這裡可以管理帳號、成員與系統設定。需要再次檢視本引導時,可點選選單頂部暱稱旁的幫助按鈕重新開啟。' }, agents: { - title: '打造專屬智能體', - desc: '把知識庫、提示詞與工具組合成可複用的智能體,沉澱你的專業能力。' + title: '打造專屬智慧體', + desc: '把知識庫、提示詞與工具組合成可複用的智慧體,沉澱你的專業能力。' }, chat: { - title: '發起智能對話', - desc: '基於知識庫內容向 AI 提問,獲得帶引用來源的精準回答。點擊這裡開始新對話。' + title: '發起智慧對話', + desc: '基於知識庫內容向 AI 提問,獲得帶引用來源的精準回答。點選這裡開始新對話。' }, knowledge: { title: '建立你的知識庫', - desc: '知識庫是一切的起點:上傳文檔、網頁或 FAQ,WeKnora 會自動解析並建立索引。點擊這裡進入知識庫。' + desc: '知識庫是一切的起點:上傳文件、網頁或 FAQ,WeKnora 會自動解析並建立索引。點選這裡進入知識庫。' }, welcome: { title: '歡迎使用 WeKnora', - desc: '只需幾步,帶你快速瞭解知識庫、對話與智能體的核心用法。點擊「下一步」開始。' + desc: '只需幾步,帶你快速瞭解知識庫、對話與智慧體的核心用法。點選「下一步」開始。' } } }, chatHeader: { moreActions: '更多對話操作', copySessionId: '複製會話 ID', - copyLink: '複製對話鏈接', - copyMarkdown: '複製爲 Markdown', - openNewWindow: '在新窗口中打開', + copyLink: '複製對話連結', + copyMarkdown: '複製為 Markdown', + openNewWindow: '在新視窗中開啟', deleteSession: '刪除對話', renamePlaceholder: '輸入對話標題', unpinSuccess: '已取消置頂', sessionIdCopied: '會話 ID 已複製', - linkCopied: '對話鏈接已複製', - copyFailed: '複製失敗,請檢查瀏覽器剪貼板權限', - markdownCopied: '完整對話已複製爲 Markdown', + linkCopied: '對話連結已複製', + copyFailed: '複製失敗,請檢查瀏覽器剪貼簿許可權', + markdownCopied: '完整對話已複製為 Markdown', markdownCopyFailed: '複製 Markdown 失敗,請稍後重試', - clearConfirmTitle: '清空對話消息', - clearConfirmBody: '確認清空當前對話的全部消息?對話本身會保留,此操作無法還原。', + clearConfirmTitle: '清空對話訊息', + clearConfirmBody: '確認清空當前對話的全部訊息?對話本身會保留,此操作無法還原。', deleteConfirmTitle: '刪除對話', deleteConfirmBody: '確認刪除當前對話?刪除後將無法還原。', deleteSuccess: '對話已刪除', markdown: { sessionId: '會話 ID', - exportedAt: '導出時間', - user: '用戶', + exportedAt: '匯出時間', + user: '使用者', assistant: '助手', attachments: '附件', references: '引用' @@ -6330,18 +6330,18 @@ export default { }, menu: { knowledgeBase: '知識庫', - agents: '智能體', + agents: '智慧體', organizations: '共享空間', newChat: '新對話', - settings: '系統設置', - logout: '退出登錄', - clearMessages: '清空消息', - clearMessagesSuccess: '消息已清空', - clearMessagesFailed: '清空消息失敗,請稍後再試', + settings: '系統設定', + logout: '退出登入', + clearMessages: '清空訊息', + clearMessagesSuccess: '訊息已清空', + clearMessagesFailed: '清空訊息失敗,請稍後再試', renameSession: '修改標題', renameSessionSuccess: '標題已更新', renameSessionFailed: '修改標題失敗,請稍後再試', - batchManage: '批量管理', + batchManage: '批次管理', newSession: '新會話', pin: '置頂', unpin: '取消置頂', @@ -6350,7 +6350,7 @@ export default { search: '搜尋', collapseSidebar: '收起側邊欄', expandSidebar: '展開側邊欄', - logoutSuccess: '已退出登錄', + logoutSuccess: '已退出登入', myChats: '我的對話', apiChats: 'API 會話', noSessions: '暫無對話' diff --git "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" index e4144dc851..df6f09aaf6 100644 --- "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" +++ "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" @@ -32,7 +32,7 @@ ## 用語校正統計 -共執行 **19 組詞彙映射**,全面替換中國大陸用語為台灣繁體中文用語,總計修正 **685 處**。 +初始版本執行 **19 組詞彙映射**,全面替換中國大陸用語為台灣繁體中文用語,初步修正 **685 處**。後續完整複核再以 OpenCC `s2twp` 僅處理翻譯值,並人工保留台灣慣用字(如「群」、「核」);共校正 2,076 個語系項目,包含「快速問答」、「智慧體」、「載入」、「連結」、「登入」、「使用者」、「支援」等用語。 ### 主要替換對應表 | 大陸用語 | 台灣繁體中文 | 說明 | @@ -172,6 +172,7 @@ WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=24 ## 版本紀錄 | 日期 | 版本 | 修改內容 | |------|------|---------| +| 2026-08-14 | v0.3 | 完整複核 zh-TW 全部翻譯值;以 OpenCC `s2twp` 校正 2,076 個項目,確認「快速問答」等簡體用語零殘留,並完成語系審計與 production build 驗證 | | 2026-08-14 | v0.2 | 更正 RAG 圖片閃退根因為新舊前後端圖片代理 API 不相容;記錄部署的 fallback Image 與獨立修復 PR 策略 | | 2026-08-14 | v0.1 | 初始建立 zh-TW 語系包,完成 19 組用語校正、6 個核心檔案修改、遠端部署與 PR 提交 | From 89ff3851a276705b2caee1b77033472bc1ca7478 Mon Sep 17 00:00:00 2001 From: leonoxo Date: Fri, 14 Aug 2026 22:51:16 +0800 Subject: [PATCH 6/7] docs(i18n): record v0.3 overlay image tag --- "zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" index df6f09aaf6..7262975e27 100644 --- "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" +++ "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" @@ -128,7 +128,7 @@ Embed 訪客模式不會降級,以維持其 Embed token 的權限邊界。 **目前部署 Image**: ```text -weknora-ui:zh-tw-image-fallback-20260814 +weknora-ui:zh-tw-i18n-v0.3-image-fallback-20260814 ``` **後續處置**:此相容性修復應以獨立 PR 提交,不混入 zh-TW 語系 PR。待後端版本原生支援上述 session/message 檔案路由後,才評估移除此 fallback。 From e611dbc156bb50c2722b10f5934a41a34e901f54 Mon Sep 17 00:00:00 2001 From: leonoxo Date: Fri, 14 Aug 2026 23:09:47 +0800 Subject: [PATCH 7/7] docs(i18n): record v0.7.2 overlay deployment --- ...W-\344\277\256\346\224\271\350\252\252\346\230\216.md" | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" index 7262975e27..380c60d4fb 100644 --- "a/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" +++ "b/zh-TW-\344\277\256\346\224\271\350\252\252\346\230\216.md" @@ -128,7 +128,12 @@ Embed 訪客模式不會降級,以維持其 Embed token 的權限邊界。 **目前部署 Image**: ```text -weknora-ui:zh-tw-i18n-v0.3-image-fallback-20260814 +weknora-ui:zh-tw-v0.7.2-overlay-20260814 +``` + +**部署驗證(2026-08-14)**:已在官方 `v0.7.2` 前後端基準上重新編譯並部署;確認 served bundle 含 `zh-TW` 與受保護圖片相容性 fallback,並保留官方基準 Image: +```text +weknora-ui:official-v0.7.2-before-zh-tw-overlay-20260814 ``` **後續處置**:此相容性修復應以獨立 PR 提交,不混入 zh-TW 語系 PR。待後端版本原生支援上述 session/message 檔案路由後,才評估移除此 fallback。 @@ -172,6 +177,7 @@ WEKNORA_CHAT_ATTACHMENT_TTL_HOURS=24 ## 版本紀錄 | 日期 | 版本 | 修改內容 | |------|------|---------| +| 2026-08-14 | v0.4 | 官方 UI Image 更新後,以 v0.7.2 基準重新部署 zh-TW Overlay;保留官方 Image 備份並驗證語系 bundle、內建智能體繁中名稱與圖片 fallback | | 2026-08-14 | v0.3 | 完整複核 zh-TW 全部翻譯值;以 OpenCC `s2twp` 校正 2,076 個項目,確認「快速問答」等簡體用語零殘留,並完成語系審計與 production build 驗證 | | 2026-08-14 | v0.2 | 更正 RAG 圖片閃退根因為新舊前後端圖片代理 API 不相容;記錄部署的 fallback Image 與獨立修復 PR 策略 | | 2026-08-14 | v0.1 | 初始建立 zh-TW 語系包,完成 19 組用語校正、6 個核心檔案修改、遠端部署與 PR 提交 |