1. 下載 OV 模型。
2. 在 'Manager' 中新增模型。
1. 下載 OV 模型。
2. 在 'Manager' 中新增模型。
僅支援 Windows!
OVMS 安裝路徑:'%USERPROFILE%\\.cherrystudio\\ovms' 。
請參考 Intel OVMS 指南
",
"download": {
"button": "下載",
"error": "下載失敗",
@@ -2317,25 +2364,25 @@
"placeholder": "必填,例如 Qwen3-8B-int4-ov",
"required": "請輸入模型名稱"
},
- "model_source": "模型來源:",
- "model_task": "模型任務:",
+ "model_source": "模型來源:",
+ "model_task": "模型任務:",
"success": "下載成功",
- "success_desc": "模型\"{{modelName}}\"-\"{{modelId}}\"下載成功,請前往 OVMS 管理界面添加模型",
+ "success_desc": "模型\"{{modelName}}\"-\"{{modelId}}\"下載成功,請前往 OVMS 管理介面新增模型",
"tip": "模型正在下載,有時需要幾個小時。請耐心等候...",
"title": "下載 Intel OpenVINO 模型"
},
"failed": {
- "install": "安裝 OVMS 失敗:",
+ "install": "安裝 OVMS 失敗:",
"install_code_100": "未知錯誤",
"install_code_101": "僅支援 Intel(R) CPU",
"install_code_102": "僅支援 Windows",
"install_code_103": "下載 OVMS runtime 失敗",
"install_code_104": "安裝 OVMS runtime 失敗",
- "install_code_105": "創建 ovdnd.exe 失敗",
- "install_code_106": "創建 run.bat 失敗",
+ "install_code_105": "建立 ovdnd.exe 失敗",
+ "install_code_106": "建立 run.bat 失敗",
"install_code_110": "清理舊 OVMS runtime 失敗",
- "run": "執行 OVMS 失敗:",
- "stop": "停止 OVMS 失敗:"
+ "run": "執行 OVMS 失敗:",
+ "stop": "停止 OVMS 失敗:"
},
"status": {
"not_installed": "OVMS 未安裝",
@@ -2353,7 +2400,7 @@
"square": "方形"
},
"auto_create_paint": "自動新增圖片",
- "auto_create_paint_tip": "圖片生成後,會自動新增圖片",
+ "auto_create_paint_tip": "圖片產生後會自動新增圖片",
"background": "背景",
"background_options": {
"auto": "自動",
@@ -2373,31 +2420,31 @@
},
"custom_size": "自訂尺寸",
"edit": {
- "image_file": "編輯圖像",
- "magic_prompt_option_tip": "智能優化編輯提示詞",
- "model_tip": "部分編輯僅支持 V_2 和 V_2_TURBO 版本",
- "number_images_tip": "生成的編輯結果數量",
+ "image_file": "編輯影像",
+ "magic_prompt_option_tip": "開啟後會自動調整編輯提示詞,以提升效果",
+ "model_tip": "部分編輯僅支援 V_2 和 V_2_TURBO 版本",
+ "number_images_tip": "要產生的編輯結果數量",
"rendering_speed_tip": "控制渲染速度與品質之間的平衡,僅適用於 V_3 版本",
"seed_tip": "控制編輯結果的隨機性",
- "style_type_tip": "編輯後的圖像風格,僅適用於 V_2 及以上版本"
+ "style_type_tip": "編輯後的影像風格,僅適用於 V_2 及以上版本"
},
"generate": {
"height": "高度",
- "magic_prompt_option_tip": "智能優化生成效果的提示詞",
+ "magic_prompt_option_tip": "開啟後會自動調整提示詞,以提升效果",
"model_tip": "模型版本:V2 是最新 API 模型,V2A 是高速模型,V_1 是初代模型,_TURBO 是高速處理版",
- "negative_prompt_tip": "描述不想在圖像中出現的內容",
- "number_images_tip": "一次生成的圖片數量",
- "person_generation": "人物生成",
- "person_generation_tip": "允許模型生成人物圖像",
+ "negative_prompt_tip": "描述不想在影像中出現的內容",
+ "number_images_tip": "一次產生的圖片數量",
+ "person_generation": "產生人物",
+ "person_generation_tip": "允許模型產生人物影像",
"rendering_speed_tip": "控制渲染速度與品質之間的平衡,僅適用於 V_3 版本",
"safety_tolerance": "安全耐性",
- "safety_tolerance_tip": "控制圖像生成的安全耐性,僅適用於 FLUX.1-Kontext-pro 版本",
- "seed_tip": "控制圖像生成的隨機性,以重現相同的生成結果",
- "style_type_tip": "圖像生成風格,僅適用於 V_2 及以上版本",
+ "safety_tolerance_tip": "控制影像產生的安全耐性,僅適用於 FLUX.1-Kontext-pro 版本",
+ "seed_tip": "控制影像產生的隨機性,以重現相同結果",
+ "style_type_tip": "產生圖片的風格,僅適用於 V_2 及以上版本",
"width": "寬度"
},
- "generated_image": "生成圖片",
- "go_to_settings": "去設置",
+ "generated_image": "產生的圖片",
+ "go_to_settings": "前往設定",
"guidance_scale": "引導比例",
"guidance_scale_tip": "無分類器指導。控制模型在尋找相關影像時對提示詞的遵循程度",
"image": {
@@ -2433,10 +2480,10 @@
},
"negative_prompt": "反向提示詞",
"negative_prompt_tip": "描述你不想在圖片中出現的內容",
- "no_image_generation_model": "暫無可用的圖片生成模型,請先新增模型並設置端點類型為 {{endpoint_type}}",
- "number_images": "生成數量",
- "number_images_tip": "一次生成的圖片數量 (1-4)",
- "paint_course": "教程",
+ "no_image_generation_model": "暫無可用的圖片產生模型,請先新增模型並設定端點類型為 {{endpoint_type}}",
+ "number_images": "張數",
+ "number_images_tip": "一次產生的圖片數量 (1-4)",
+ "paint_course": "教學",
"per_image": "每張圖片",
"per_images": "每張圖片",
"person_generation_options": {
@@ -2448,9 +2495,9 @@
"prompt_enhancement": "提示詞增強",
"prompt_enhancement_tip": "開啟後將提示重寫為詳細的、適合模型的版本",
"prompt_placeholder": "描述你想建立的圖片,例如:一個寧靜的湖泊,夕陽西下,遠處是群山",
- "prompt_placeholder_edit": "輸入你的圖片描述,文本繪製用 ' 雙引號 ' 包裹",
- "prompt_placeholder_en": "輸入英文圖片描述,目前僅支持英文提示詞",
- "proxy_required": "打開代理並開啟”TUN 模式 “查看生成圖片或複製到瀏覽器開啟,後續會支持國內直連",
+ "prompt_placeholder_edit": "輸入你的圖片描述,文字繪製用 ' 雙引號 ' 包裹",
+ "prompt_placeholder_en": "輸入英文圖片描述,目前僅支援英文提示詞",
+ "proxy_required": "請開啟代理並啟用「TUN 模式」,即可查看產生的圖片;也可以複製到瀏覽器開啟。日後將支援免代理直接連線。",
"quality": "品質",
"quality_options": {
"auto": "自動",
@@ -2459,19 +2506,19 @@
"medium": "中"
},
"regenerate": {
- "confirm": "這將覆蓋已生成的圖片,是否繼續?"
+ "confirm": "這將覆蓋已產生的圖片,是否繼續?"
},
"remix": {
"image_file": "參考圖",
"image_weight": "參考圖權重",
- "image_weight_tip": "調整參考圖像的影響程度",
- "magic_prompt_option_tip": "智能優化重混提示詞",
+ "image_weight_tip": "調整參考影像的影響程度",
+ "magic_prompt_option_tip": "開啟後會自動調整重混提示詞,以提升效果",
"model_tip": "選擇重混使用的 AI 模型版本",
"negative_prompt_tip": "描述不想在重混結果中出現的元素",
- "number_images_tip": "生成的重混結果數量",
+ "number_images_tip": "要產生的重混結果數量",
"rendering_speed_tip": "控制渲染速度與品質之間的平衡,僅適用於 V_3 版本",
"seed_tip": "控制重混結果的隨機性",
- "style_type_tip": "重混後的圖像風格,僅適用於 V_2 及以上版本"
+ "style_type_tip": "重混後的影像風格,僅適用於 V_2 及以上版本"
},
"rendering_speed": "渲染速度",
"rendering_speeds": {
@@ -2479,14 +2526,14 @@
"quality": "高品質",
"turbo": "快速"
},
- "req_error_model": "獲取模型失敗",
- "req_error_no_balance": "請檢查令牌的有效性",
+ "req_error_model": "取得模型失敗",
+ "req_error_no_balance": "請檢查權杖的有效性",
"req_error_text": "伺服器繁忙或提示詞中出現「版權詞」或「敏感詞」,請重試。",
- "req_error_token": "請檢查令牌的有效性",
+ "req_error_token": "請檢查權杖的有效性",
"required_field": "必填欄位",
"seed": "隨機種子",
- "seed_desc_tip": "相同的種子和提示詞可以生成相似的圖片,設置 -1 每次生成都不一樣",
- "seed_tip": "相同的種子和提示詞可以生成相似的圖片",
+ "seed_desc_tip": "相同的種子和提示詞可以產生相似的圖片,設定為 -1 時,每次結果都會不同",
+ "seed_tip": "相同的種子和提示詞可以產生相似的圖片",
"select_model": "選擇模型",
"style_type": "風格",
"style_types": {
@@ -2504,10 +2551,10 @@
"uploaded_input": "已上傳輸入",
"upscale": {
"detail": "細節",
- "detail_tip": "控制放大圖像的細節增強程度",
+ "detail_tip": "控制放大影像的細節增強程度",
"image_file": "需要放大的圖片",
- "magic_prompt_option_tip": "智能優化放大提示詞",
- "number_images_tip": "生成的放大結果數量",
+ "magic_prompt_option_tip": "開啟後會自動調整放大提示詞,以提升效果",
+ "number_images_tip": "要產生的放大結果數量",
"resemblance": "相似度",
"resemblance_tip": "控制放大結果與原圖的相似程度",
"seed_tip": "控制放大結果的隨機性"
@@ -2544,15 +2591,15 @@
"image": "複製為圖片",
"src": "複製圖片來源"
},
- "dialog": "開啟預覽窗口",
+ "dialog": "開啟預覽視窗",
"label": "預覽",
"pan": "移動",
"pan_down": "下移",
"pan_left": "左移",
"pan_right": "右移",
"pan_up": "上移",
- "reset": "重置",
- "source": "查看源碼",
+ "reset": "重設",
+ "source": "檢視原始碼",
"zoom_in": "放大",
"zoom_out": "縮小"
},
@@ -2565,7 +2612,7 @@
"302ai": "302.AI",
"ai-gateway": "AI 閘道器",
"aihubmix": "AiHubMix",
- "aionly": "唯一AI (AiOnly)",
+ "aionly": "唯一 AI (AiOnly)",
"alayanew": "Alaya NeW",
"anthropic": "Anthropic",
"aws-bedrock": "AWS Bedrock",
@@ -2596,6 +2643,7 @@
"lanyun": "藍耘",
"lmstudio": "LM Studio",
"longcat": "龍貓",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "MiniMax",
"mistral": "Mistral",
"modelscope": "ModelScope 魔搭",
@@ -2669,20 +2717,20 @@
"title": "粗體"
},
"bulletList": {
- "description": "建立簡單的項目符號清單",
+ "description": "建立簡單的列點清單",
"title": "無序清單"
},
"calloutInfo": {
- "description": "添加資訊提示框",
+ "description": "新增資訊提示框",
"title": "資訊提示框"
},
"calloutWarning": {
- "description": "添加警告提示框",
+ "description": "新增警告提示框",
"title": "警告提示框"
},
"code": {
- "description": "插入代碼片段",
- "title": "代碼"
+ "description": "插入程式碼片段",
+ "title": "程式碼"
},
"codeBlock": {
"description": "插入程式碼片段",
@@ -2693,11 +2741,11 @@
"title": "分欄"
},
"date": {
- "description": "插入當前日期",
+ "description": "插入目前日期",
"title": "日期"
},
"divider": {
- "description": "添加水平分隔線",
+ "description": "新增水平分隔線",
"title": "分隔線"
},
"hardBreak": {
@@ -2733,7 +2781,7 @@
"title": "圖片"
},
"inlineCode": {
- "description": "添加行內程式碼",
+ "description": "新增行內程式碼",
"title": "行內程式碼"
},
"inlineMath": {
@@ -2745,7 +2793,7 @@
"title": "斜體"
},
"link": {
- "description": "添加連結",
+ "description": "新增連結",
"title": "連結"
},
"noCommandsFound": "未找到命令",
@@ -2778,8 +2826,8 @@
"title": "下劃線"
},
"undo": {
- "description": "撤銷上一步操作",
- "title": "撤銷"
+ "description": "復原上一步操作",
+ "title": "復原"
}
},
"dragHandle": "拖拽塊",
@@ -2799,7 +2847,7 @@
"propertyName": "屬性名稱"
},
"image": {
- "placeholder": "添加圖片"
+ "placeholder": "新增圖片"
},
"imageUploader": {
"embedImage": "嵌入圖片",
@@ -2808,29 +2856,29 @@
"invalidType": "請選擇圖片檔案",
"invalidUrl": "無效的圖片連結",
"processing": "正在處理圖片...",
- "title": "添加圖片",
+ "title": "新增圖片",
"tooLarge": "圖片大小不能超過 10MB",
"upload": "上傳",
"uploadError": "圖片上傳失敗",
"uploadFile": "上傳檔案",
"uploadHint": "支援 JPG、PNG、GIF 等格式,最大 10MB",
"uploadSuccess": "圖片上傳成功",
- "uploadText": "點擊或拖拽圖片到此處上傳",
+ "uploadText": "點選或拖曳圖片到此處上傳",
"uploading": "正在上傳圖片",
- "urlPlaceholder": "貼上圖片連結地址",
- "urlRequired": "請輸入圖片連結地址"
+ "urlPlaceholder": "貼上圖片連結網址",
+ "urlRequired": "請輸入圖片連結網址"
},
"link": {
- "remove": "移除鏈接",
- "text": "鏈接標題",
- "textPlaceholder": "請輸入鏈接標題",
- "url": "鏈接地址"
+ "remove": "移除連結",
+ "text": "連結標題",
+ "textPlaceholder": "請輸入連結標題",
+ "url": "連結網址"
},
"math": {
"placeholder": "輸入 LaTeX 公式"
},
- "placeholder": "輸入'/'調用命令",
- "plusButton": "點擊在下方添加",
+ "placeholder": "輸入'/'呼叫命令",
+ "plusButton": "點選以在下方新增",
"toolbar": {
"blockMath": "數學公式塊",
"blockquote": "引用",
@@ -2865,13 +2913,13 @@
"copy": "複製",
"explain": "解釋",
"quote": "引用",
- "refine": "優化",
+ "refine": "潤飾",
"search": "搜尋",
"summary": "總結",
"translate": "翻譯"
},
"translate": {
- "smart_translate_tips": "智能翻譯:內容將優先翻譯為目標語言;內容已是目標語言的,將翻譯為備用語言"
+ "smart_translate_tips": "智慧翻譯:內容將優先翻譯為目標語言;內容已是目標語言時,將翻譯為備用語言"
},
"window": {
"c_copy": "C 複製",
@@ -2883,7 +2931,7 @@
"original_show": "顯示原文",
"pin": "置頂",
"pinned": "已置頂",
- "r_regenerate": "R 重新生成"
+ "r_regenerate": "R 重新產生"
}
},
"name": "劃詞助手",
@@ -2905,7 +2953,7 @@
},
"advanced": {
"filter_list": {
- "description": "進階功能,建議有經驗的用戶在了解情況下再進行設置",
+ "description": "進階功能,建議有經驗的使用者在了解情況下再進行設定",
"title": "篩選名單"
},
"filter_mode": {
@@ -2921,12 +2969,12 @@
"description": "目前僅支援 Windows & macOS",
"mac_process_trust_hint": {
"button": {
- "go_to_settings": "去設定",
- "open_accessibility_settings": "打開輔助使用設定"
+ "go_to_settings": "前往設定",
+ "open_accessibility_settings": "開啟輔助使用設定"
},
"description": {
"0": "劃詞助手需「
輔助使用權限」才能正常工作。",
- "1": "請點擊「
去設定」,並在稍後彈出的權限請求彈窗中點擊 「
打開系統設定」 按鈕,然後在之後的應用程式列表中找到 「
Cherry Studio」,並開啟權限開關。",
+ "1": "請點選「
前往設定」,並在稍後出現的權限請求對話框中點選「
開啟系統設定」按鈕,接著在應用程式清單中找到「
Cherry Studio」,並開啟權限開關。",
"2": "完成設定後,請再次開啟劃詞助手。"
},
"title": "輔助使用權限"
@@ -2937,8 +2985,8 @@
"filter_modal": {
"title": "應用篩選名單",
"user_tips": {
- "mac": "請輸入應用的 Bundle ID,每行一個,不區分大小寫,可以模糊匹配。例如:com.google.Chrome、com.apple.mail等",
- "windows": "請輸入應用的執行檔名稱,每行一個,不區分大小寫,可以模糊匹配。例如:chrome.exe、weixin.exe、Cherry Studio.exe等"
+ "mac": "請輸入應用程式的 Bundle ID(每行一個、不區分大小寫,可模糊比對)。例如:com.google.Chrome、com.apple.mail 等",
+ "windows": "請輸入應用程式的執行檔名稱(每行一個、不區分大小寫,可模糊比對)。例如:chrome.exe、weixin.exe、Cherry Studio.exe 等"
}
},
"search_modal": {
@@ -2974,14 +3022,14 @@
"ctrlkey_note": "劃詞後,再 按住 Ctrl 鍵,才顯示工具列",
"description": "劃詞後,觸發取詞並顯示工具列的方式",
"description_note": {
- "mac": "若使用了快捷鍵或鍵盤映射工具對 ⌘ 鍵進行了重新對應,可能導致部分應用程式無法劃詞。",
+ "mac": "若使用了快捷鍵或鍵盤對映工具對 ⌘ 鍵進行了重新對應,可能導致部分應用程式無法劃詞。",
"windows": "在某些應用中可能無法透過 Ctrl 鍵劃詞。若使用了 AHK 等工具對 Ctrl 鍵進行了重新對應,可能導致部分應用程式無法劃詞。"
},
"selected": "劃詞",
"selected_note": "劃詞後,立即顯示工具列",
"shortcut": "快捷鍵",
"shortcut_link": "前往快捷鍵設定",
- "shortcut_note": "劃詞後,使用快捷鍵顯示工具列。請在快捷鍵設定頁面中設置取詞快捷鍵並啟用。",
+ "shortcut_note": "劃詞後,使用快捷鍵顯示工具列。請在快捷鍵設定頁面中設定取詞快捷鍵並啟用。",
"title": "取詞方式"
}
},
@@ -3011,7 +3059,7 @@
"prompt": {
"copy_placeholder": "複製佔位符",
"label": "使用者提示詞 (Prompt)",
- "placeholder": "使用佔位符 {{text}} 代表選取的文字,不填寫時,選取的文字將加到本提示詞的末尾",
+ "placeholder": "使用佔位符 {{text}} 代表選取的文字,不填寫時,選取的文字將加到本提示詞的結尾",
"placeholder_text": "佔位符",
"tooltip": "使用者提示詞,作為使用者輸入的補充,不會覆蓋助手的系統提示詞"
},
@@ -3026,7 +3074,7 @@
"title": "自動關閉"
},
"auto_pin": {
- "description": "預設將視窗置於頂部",
+ "description": "預設將視窗置於頂端",
"title": "自動置頂"
},
"follow_toolbar": {
@@ -3034,11 +3082,11 @@
"title": "跟隨工具列"
},
"opacity": {
- "description": "設置視窗的預設透明度,100% 為完全不透明",
+ "description": "設定視窗的預設透明度,100% 為完全不透明",
"title": "透明度"
},
"remember_size": {
- "description": "應用運行期間,視窗會按上次調整的大小顯示",
+ "description": "應用運作期間,視窗會按上次調整的大小顯示",
"title": "記住大小"
},
"title": "功能視窗"
@@ -3058,7 +3106,7 @@
},
"debug": {
"open": "開啟",
- "title": "調試面板"
+ "title": "除錯面板"
},
"description": "一款為創作者而生的強大 AI 助手",
"downloading": "正在下載...",
@@ -3105,30 +3153,30 @@
},
"data": {
"app_data": {
- "copy_data_option": "複製數據,會自動重啟後將原始目錄數據複製到新目錄",
- "copy_failed": "複製數據失敗",
- "copy_success": "成功複製數據到新位置",
- "copy_time_notice": "複製數據將需要一些時間,複製期間不要關閉應用",
- "copying": "正在複製數據到新位置...",
- "copying_warning": "數據複製中,不要強制退出應用,複製完成後會自動重啟應用",
- "label": "應用數據",
- "migration_title": "數據遷移",
+ "copy_data_option": "複製資料,會在重新啟動後將原始目錄的資料複製到新目錄",
+ "copy_failed": "複製資料失敗",
+ "copy_success": "成功複製資料到新位置",
+ "copy_time_notice": "複製資料需要一些時間,期間請勿關閉應用程式",
+ "copying": "正在複製資料到新位置...",
+ "copying_warning": "資料複製中,請勿強制關閉應用程式;複製完成後會自動重新啟動應用程式",
+ "label": "應用程式資料",
+ "migration_title": "資料移轉",
"new_path": "新路徑",
"original_path": "原始路徑",
- "path_change_failed": "數據目錄更改失敗",
+ "path_change_failed": "資料目錄變更失敗",
"path_changed_without_copy": "路徑已變更成功",
- "restart_notice": "變更數據目錄後可能需要重啟應用才能生效",
- "select": "修改目錄",
- "select_error": "變更數據目錄失敗",
+ "restart_notice": "變更資料目錄後可能需要重新啟動應用程式才能生效",
+ "select": "變更目錄",
+ "select_error": "變更資料目錄失敗",
"select_error_in_app_path": "新路徑與應用安裝路徑相同,請選擇其他路徑",
"select_error_root_path": "新路徑不能是根路徑",
"select_error_same_path": "新路徑與舊路徑相同,請選擇其他路徑",
"select_error_write_permission": "新路徑沒有寫入權限",
"select_not_empty_dir": "新路徑不為空",
- "select_not_empty_dir_content": "新路徑不為空,選擇複製將覆蓋新路徑中的數據,有數據丟失和複製失敗的風險,是否繼續?",
- "select_success": "數據目錄已變更,應用將重啟以應用變更",
- "select_title": "變更應用數據目錄",
- "stop_quit_app_reason": "應用目前正在遷移數據,不能退出"
+ "select_not_empty_dir_content": "新路徑不為空,若選擇複製將覆寫新路徑中的資料,可能導致資料遺失或複製失敗。是否繼續?",
+ "select_success": "資料目錄已變更,應用程式將重新啟動以套用變更",
+ "select_title": "變更應用程式資料目錄",
+ "stop_quit_app_reason": "應用程式目前正在移轉資料,無法關閉"
},
"app_knowledge": {
"button": {
@@ -3144,12 +3192,12 @@
"label": "應用程式日誌"
},
"backup": {
- "skip_file_data_help": "備份時跳過備份圖片、知識庫等數據文件,僅備份聊天記錄和設置。減少空間佔用,加快備份速度",
+ "skip_file_data_help": "備份時跳過圖片、知識庫等資料檔案,只備份聊天記錄與設定。可減少空間佔用並加快備份速度",
"skip_file_data_title": "精簡備份"
},
"clear_cache": {
"button": "清除快取",
- "confirm": "清除快取將刪除應用快取資料,包括小工具資料。此操作不可恢復,是否繼續?",
+ "confirm": "清除快取將刪除應用快取資料,包括小工具資料。此操作無法恢復,是否繼續?",
"error": "清除快取失敗",
"success": "快取清除成功",
"title": "清除快取"
@@ -3158,11 +3206,11 @@
"title": "資料目錄"
},
"divider": {
- "basic": "基礎數據設定",
+ "basic": "基本資料設定",
"cloud_storage": "雲備份設定",
"export_settings": "匯出設定",
"import_settings": "匯入設定",
- "third_party": "第三方連接"
+ "third_party": "第三方連結"
},
"export_menu": {
"docx": "匯出為 Word",
@@ -3170,10 +3218,10 @@
"joplin": "匯出到 Joplin",
"markdown": "匯出為 Markdown",
"markdown_reason": "匯出為 Markdown(包含思考)",
- "notes": "導出到筆記",
+ "notes": "匯出到筆記",
"notion": "匯出到 Notion",
"obsidian": "匯出到 Obsidian",
- "plain_text": "複製為純文本",
+ "plain_text": "複製為純文字",
"siyuan": "匯出到思源筆記",
"title": "匯出選單設定",
"yuque": "匯出到語雀"
@@ -3182,14 +3230,14 @@
"confirm": {
"button": "選擇備份檔案"
},
- "content": "匯出部分數據,包括聊天記錄、設定。請注意,備份過程可能需要一些時間,感謝您的耐心等候。",
+ "content": "匯出部分資料,包括聊天記錄與設定。請注意,備份過程可能需要一些時間,感謝耐心等候。",
"lan": {
"auto_close_tip": "將於 {{seconds}} 秒後自動關閉...",
"confirm_close_message": "檔案傳輸正在進行中。關閉將會中斷傳輸。您確定要強制關閉嗎?",
"confirm_close_title": "確認關閉",
"connected": "已連線",
"connection_failed": "連線失敗",
- "content": "請確保電腦和手機處於同一網路以使用區域網路傳輸。請打開 Cherry Studio App 掃描此 QR 碼。",
+ "content": "請確保電腦和手機處於同一網路以使用區域網路傳輸。請開啟 Cherry Studio App 掃描此 QR 碼。",
"error": {
"init_failed": "初始化失敗",
"no_file": "未選擇檔案",
@@ -3197,13 +3245,13 @@
"send_failed": "無法傳送檔案"
},
"force_close": "強制關閉",
- "generating_qr": "正在生成 QR 碼...",
+ "generating_qr": "正在產生 QR 碼...",
"noZipSelected": "未選取壓縮檔案",
- "scan_qr": "請使用手機掃描QR碼",
+ "scan_qr": "請使用手機掃描 QR 碼",
"selectZip": "選擇壓縮檔案",
- "sendZip": "開始恢復資料",
+ "sendZip": "開始還原資料",
"status": {
- "completed": "轉帳完成",
+ "completed": "傳輸完成",
"connected": "已連線",
"connecting": "連線中...",
"disconnected": "已斷線",
@@ -3211,7 +3259,7 @@
"initializing": "正在初始化連線...",
"preparing": "正在準備傳輸...",
"sending": "傳輸中 {{progress}}%",
- "waiting_qr_scan": "請掃描QR碼以連接"
+ "waiting_qr_scan": "請掃描 QR 碼以連線"
},
"title": "區域網路傳輸",
"transfer_progress": "傳輸進度"
@@ -3221,20 +3269,20 @@
"hour_interval_one": "{{count}} 小時",
"hour_interval_other": "{{count}} 小時",
"import_settings": {
- "button": "匯入 Json 檔案",
- "chatgpt": "匯入 ChatGPT 數據",
- "title": "匯入外部應用程式數據"
+ "button": "匯入 JSON 檔案",
+ "chatgpt": "匯入 ChatGPT 資料",
+ "title": "匯入外部應用程式資料"
},
"joplin": {
"check": {
"button": "檢查",
"empty_token": "請先輸入 Joplin 授權 Token",
"empty_url": "請先輸入 Joplin 剪輯服務 URL",
- "fail": "Joplin 連接驗證失敗",
- "success": "Joplin 連接驗證成功"
+ "fail": "Joplin 連結驗證失敗",
+ "success": "Joplin 連結驗證成功"
},
"export_reasoning": {
- "help": "啟用後,匯出內容將包含助手生成的思維鏈(思考過程)。",
+ "help": "啟用後,匯出內容將包含助手產生的思維鏈(思考過程)。",
"title": "匯出時包含思維鏈"
},
"help": "在 Joplin 選項中,啟用剪輯服務(無需安裝瀏覽器外掛),確認埠編號,並複製授權 Token",
@@ -3246,7 +3294,7 @@
},
"limit": {
"appDataDiskQuota": "磁碟空間警告",
- "appDataDiskQuotaDescription": "資料目錄空間即將用盡, 請清理磁碟空間, 否則會丟失數據"
+ "appDataDiskQuotaDescription": "資料目錄空間即將用盡,請清理磁碟空間,否則可能導致資料遺失"
},
"local": {
"autoSync": {
@@ -3254,55 +3302,55 @@
"off": "關閉"
},
"backup": {
- "button": "本地備份",
+ "button": "本機備份",
"manager": {
"columns": {
"actions": "操作",
- "fileName": "文件名",
+ "fileName": "檔名",
"modifiedTime": "修改時間",
"size": "大小"
},
"delete": {
"confirm": {
- "multiple": "確定要刪除選中的 {{count}} 個備份文件嗎?此操作無法撤銷。",
- "single": "確定要刪除備份文件 \"{{fileName}}\" 嗎?此操作無法撤銷。",
+ "multiple": "確定要刪除選取的 {{count}} 個備份檔案嗎?此操作無法復原。",
+ "single": "確定要刪除備份檔案 \"{{fileName}}\" 嗎?此操作無法復原。",
"title": "確認刪除"
},
"error": "刪除失敗",
- "selected": "刪除選中",
+ "selected": "刪除選取內容",
"success": {
- "multiple": "已刪除 {{count}} 個備份文件",
+ "multiple": "已刪除 {{count}} 個備份檔案",
"single": "刪除成功"
},
"text": "刪除"
},
"fetch": {
- "error": "獲取備份文件失敗"
+ "error": "無法取得備份檔案"
},
- "refresh": "刷新",
+ "refresh": "重新整理",
"restore": {
- "error": "恢復失敗",
- "success": "恢復成功,應用將很快刷新",
- "text": "恢復"
+ "error": "還原失敗",
+ "success": "還原成功,應用將很快重新整理",
+ "text": "還原"
},
"select": {
"files": {
- "delete": "請選擇要刪除的備份文件"
+ "delete": "請選擇要刪除的備份檔案"
}
},
- "title": "備份文件管理"
+ "title": "備份檔案管理"
},
"modal": {
"filename": {
- "placeholder": "請輸入備份文件名"
+ "placeholder": "請輸入備份檔名"
},
- "title": "本地備份"
+ "title": "本機備份"
}
},
"directory": {
"label": "備份目錄",
"placeholder": "請選擇備份目錄",
- "select_error_app_data_path": "新路徑不能與應用數據路徑相同",
+ "select_error_app_data_path": "新路徑不能與應用程式資料路徑相同",
"select_error_in_app_install_path": "新路徑不能與應用安裝路徑相同",
"select_error_write_permission": "新路徑沒有寫入權限",
"select_title": "選擇備份目錄"
@@ -3318,15 +3366,15 @@
"minute_interval_other": "{{count}} 分鐘",
"noSync": "等待下次備份",
"restore": {
- "button": "備份文件管理",
+ "button": "備份檔案管理",
"confirm": {
- "content": "從本地備份恢復將覆蓋當前數據,是否繼續?",
- "title": "確認恢復"
+ "content": "從本機備份還原會覆寫目前資料,是否繼續?",
+ "title": "確認還原"
}
},
"syncError": "備份錯誤",
"syncStatus": "備份狀態",
- "title": "本地備份"
+ "title": "本機備份"
},
"markdown_export": {
"exclude_citations": {
@@ -3357,8 +3405,8 @@
},
"message_title": {
"use_topic_naming": {
- "help": "開啟後,使用快速模型為導出的消息命名標題。該項也會影響所有透過 Markdown 導出的方式",
- "title": "使用快速模型為導出的消息命名標題"
+ "help": "開啟後,使用快速模型為匯出的訊息命名標題。此設定也會影響所有透過 Markdown 匯出的方式",
+ "title": "使用快速模型為匯出的訊息命名標題"
}
},
"minute_interval_one": "{{count}} 分鐘",
@@ -3370,8 +3418,8 @@
"button": "檢查",
"empty_api_key": "未設定 API key",
"empty_database_id": "未設定 Database ID",
- "error": "連接異常,請檢查網路及 API key 和 Database ID 是否正確",
- "fail": "連接失敗,請檢查網路及 API key 和 Database ID 是否正確",
+ "error": "連線異常,請檢查網路及 API key 和 Database ID 是否正確",
+ "fail": "連線失敗,請檢查網路及 API key 和 Database ID 是否正確",
"success": "連線成功"
},
"database_id": "Notion 資料庫 ID",
@@ -3380,7 +3428,7 @@
"help": "啟用後,匯出到 Notion 時會包含思維鏈內容。",
"title": "匯出時包含思維鏈"
},
- "help": "Notion 設定文件",
+ "help": "Notion 說明文件",
"page_name_key": "頁面標題欄位名稱",
"page_name_key_placeholder": "請輸入頁面標題欄位名稱,預設為 Name",
"title": "Notion 設定"
@@ -3390,57 +3438,57 @@
"button": "備份到堅果雲",
"modal": {
"filename": {
- "placeholder": "請輸入備份檔案名"
+ "placeholder": "請輸入備份檔名"
},
"title": "備份到堅果雲"
}
},
"checkConnection": {
- "fail": "堅果雲連接失敗",
- "name": "檢查連接",
- "success": "已連接堅果雲"
+ "fail": "堅果雲連線失敗",
+ "name": "檢查連線",
+ "success": "已連線至堅果雲"
},
"isLogin": "已登入",
"login": {
"button": "登入"
},
"logout": {
- "button": "退出登入",
- "content": "退出後將無法備份至堅果雲和從堅果雲恢復",
- "title": "確定要退出堅果雲登入?"
+ "button": "登出",
+ "content": "登出後將無法備份到堅果雲或從堅果雲還原。",
+ "title": "確定要登出堅果雲嗎?"
},
"new_folder": {
"button": {
"cancel": "取消",
"confirm": "確定",
- "label": "新建文件夾"
+ "label": "新增資料夾"
}
},
"notLogin": "未登入",
"path": {
- "label": "堅果雲存儲路徑",
- "placeholder": "請輸入堅果雲的存儲路徑"
+ "label": "堅果雲儲存路徑",
+ "placeholder": "請輸入堅果雲儲存路徑"
},
"pathSelector": {
- "currentPath": "當前路徑",
- "return": "返回",
- "title": "堅果雲存儲路徑"
+ "currentPath": "目前路徑",
+ "return": "上一層",
+ "title": "堅果雲儲存路徑"
},
"restore": {
- "button": "從堅果雲恢復",
+ "button": "從堅果雲還原",
"confirm": {
- "content": "從堅果雲恢復將覆蓋目前資料,是否繼續?",
- "title": "從堅果雲恢復"
+ "content": "從堅果雲還原會覆寫目前資料,是否繼續?",
+ "title": "從堅果雲還原"
}
},
"title": "堅果雲設定",
- "username": "堅果雲用戶名"
+ "username": "堅果雲使用者名稱"
},
"obsidian": {
"default_vault": "預設 Obsidian 倉庫",
"default_vault_export_failed": "匯出失敗",
- "default_vault_fetch_error": "獲取 Obsidian 倉庫失敗",
- "default_vault_loading": "正在獲取 Obsidian 倉庫...",
+ "default_vault_fetch_error": "取得 Obsidian 倉庫失敗",
+ "default_vault_loading": "正在取得 Obsidian 倉庫...",
"default_vault_no_vaults": "未找到 Obsidian 倉庫",
"default_vault_placeholder": "請選擇預設 Obsidian 倉庫",
"title": "Obsidian 設定"
@@ -3458,7 +3506,7 @@
},
"backup": {
"button": "立即備份",
- "error": "S3 備份失敗: {{message}}",
+ "error": "S3 備份失敗:{{message}}",
"manager": {
"button": "管理備份"
},
@@ -3473,7 +3521,7 @@
},
"bucket": {
"label": "儲存桶",
- "placeholder": "Bucket,例如: example"
+ "placeholder": "Bucket,例如:example"
},
"endpoint": {
"label": "API 位址",
@@ -3492,11 +3540,11 @@
},
"delete": {
"confirm": {
- "multiple": "確定要刪除選中的 {{count}} 個備份檔案嗎?此操作不可撤銷。",
- "single": "確定要刪除備份檔案 \"{{fileName}}\" 嗎?此操作不可撤銷。",
+ "multiple": "確定要刪除選中的 {{count}} 個備份檔案嗎?此操作無法復原。",
+ "single": "確定要刪除備份檔案 \"{{fileName}}\" 嗎?此操作無法復原。",
"title": "確認刪除"
},
- "error": "刪除備份檔案失敗: {{message}}",
+ "error": "刪除備份檔案失敗:{{message}}",
"label": "刪除",
"selected": "刪除選中 ({{count}})",
"success": {
@@ -3506,7 +3554,7 @@
},
"files": {
"fetch": {
- "error": "取得備份檔案清單失敗: {{message}}"
+ "error": "取得備份檔案清單失敗:{{message}}"
}
},
"refresh": "重新整理",
@@ -3522,7 +3570,7 @@
},
"region": {
"label": "區域",
- "placeholder": "Region,例如: us-east-1"
+ "placeholder": "Region,例如:us-east-1"
},
"restore": {
"config": {
@@ -3530,11 +3578,11 @@
},
"confirm": {
"cancel": "取消",
- "content": "恢復資料將覆寫當前所有資料,此操作不可撤銷。確定要繼續嗎?",
+ "content": "恢復資料將覆寫目前所有資料,此操作無法復原。確定要繼續嗎?",
"ok": "確認恢復",
"title": "確認恢復資料"
},
- "error": "資料恢復失敗: {{message}}",
+ "error": "資料恢復失敗:{{message}}",
"file": {
"required": "請選擇要恢復的備份檔案"
},
@@ -3559,38 +3607,38 @@
"label": "精簡備份"
},
"syncStatus": {
- "error": "同步錯誤: {{message}}",
+ "error": "同步錯誤:{{message}}",
"label": "同步狀態",
- "lastSync": "上次同步: {{time}}",
+ "lastSync": "上次同步:{{time}}",
"noSync": "未同步"
},
"title": {
- "help": "與AWS S3 API相容的物件儲存服務,例如AWS S3、Cloudflare R2、阿里雲OSS、騰訊雲COS等",
+ "help": "與 AWS S3 API 相容的物件儲存服務,例如 AWS S3、Cloudflare R2、阿里雲 OSS、騰訊雲 COS 等",
"label": "S3 相容儲存",
"tooltip": "S3 相容儲存設定指南"
}
},
"siyuan": {
- "api_url": "API 地址",
+ "api_url": "思源筆記 API URL",
"api_url_placeholder": "例如:http://127.0.0.1:6806",
"box_id": "筆記本 ID",
"box_id_placeholder": "請輸入筆記本 ID",
"check": {
"button": "檢查",
- "empty_config": "請填寫 API 地址和令牌",
- "error": "連接異常,請檢查網絡連接",
- "fail": "連接失敗,請檢查 API 地址和令牌",
- "success": "連接成功",
- "title": "連接檢查"
+ "empty_config": "請填寫 API 位址和權杖",
+ "error": "連線異常,請檢查網路連線",
+ "fail": "連線失敗,請檢查 API 位址和權杖",
+ "success": "連線成功",
+ "title": "連線檢查"
},
- "root_path": "文檔根路徑",
+ "root_path": "思源筆記根路徑",
"root_path_placeholder": "例如:/CherryStudio",
- "title": "思源筆記配置",
+ "title": "思源筆記設定",
"token": {
- "help": "在思源筆記 -> 設置 -> 關於中獲取",
- "label": "API 令牌"
+ "help": "在思源筆記 → 設定 → 關於中取得",
+ "label": "思源筆記權杖"
},
- "token_placeholder": "請輸入思源筆記令牌"
+ "token_placeholder": "請輸入思源筆記權杖"
},
"title": "資料設定",
"webdav": {
@@ -3603,50 +3651,50 @@
"manager": {
"columns": {
"actions": "操作",
- "fileName": "文件名",
+ "fileName": "檔名",
"modifiedTime": "修改時間",
"size": "大小"
},
"delete": {
"confirm": {
- "multiple": "確定要刪除選中的 {{count}} 個備份文件嗎?此操作不可恢復",
- "single": "確定要刪除備份文件 \"{{fileName}}\" 嗎?此操作不可恢復",
+ "multiple": "確定要刪除選取的 {{count}} 個備份檔案嗎?此操作無法復原",
+ "single": "確定要刪除備份檔案 \"{{fileName}}\" 嗎?此操作無法復原",
"title": "確認刪除"
},
"error": "刪除失敗",
- "selected": "刪除選中",
+ "selected": "刪除選取內容",
"success": {
- "multiple": "成功刪除 {{count}} 個備份文件",
+ "multiple": "已刪除 {{count}} 個備份檔案",
"single": "刪除成功"
},
"text": "刪除"
},
"fetch": {
- "error": "獲取備份文件失敗"
+ "error": "無法取得備份檔案"
},
- "refresh": "刷新",
+ "refresh": "重新整理",
"restore": {
- "error": "恢復失敗",
- "success": "恢復成功,應用將在幾秒後刷新",
- "text": "恢復"
+ "error": "還原失敗",
+ "success": "還原成功,應用程式將在幾秒後重新整理",
+ "text": "還原"
},
"select": {
"files": {
- "delete": "請選擇要刪除的備份文件"
+ "delete": "請選擇要刪除的備份檔案"
}
},
- "title": "備份數據管理"
+ "title": "備份檔案管理"
},
"modal": {
"filename": {
- "placeholder": "請輸入備份文件名"
+ "placeholder": "請輸入備份檔名"
},
"title": "備份到 WebDAV"
}
},
"disableStream": {
"help": "開啟後,將檔案載入到記憶體中再上傳,可解決部分 WebDAV 服務不相容 chunked 上傳的問題,但會增加記憶體佔用。",
- "title": "禁用串流上傳"
+ "title": "停用串流上傳"
},
"host": {
"label": "WebDAV 主機位址",
@@ -3683,8 +3731,8 @@
"button": "檢查",
"empty_repo_url": "請先輸入知識庫 URL",
"empty_token": "請先輸入語雀 Token",
- "fail": "語雀連接驗證失敗",
- "success": "語雀連接驗證成功"
+ "fail": "語雀連結驗證失敗",
+ "success": "語雀連結驗證成功"
},
"help": "取得語雀 Token",
"repo_url": "知識庫 URL",
@@ -3696,7 +3744,7 @@
},
"developer": {
"enable_developer_mode": "啟用開發者模式",
- "help": "啟用開發者模式後,將可以使用調用鏈功能查看模型調用過程的數據流。",
+ "help": "啟用開發者模式後,可使用呼叫鏈功能檢視模型呼叫過程的資料流。",
"title": "開發者模式"
},
"display": {
@@ -3714,23 +3762,23 @@
"code": "程式碼字型",
"default": "預設",
"global": "全域字型",
- "select": "選擇字體",
+ "select": "選擇字型",
"title": "字型設定"
},
"navbar": {
"position": {
- "label": "導航欄位置",
+ "label": "導覽列位置",
"left": "左側",
- "top": "頂部"
+ "top": "頂端"
},
- "title": "導航欄設定"
+ "title": "導覽列設定"
},
"sidebar": {
"chat": {
"hiddenMessage": "助手是基礎功能,不支援隱藏"
},
"disabled": "隱藏的圖示",
- "empty": "把要隱藏的功能從左側拖拽到這裡",
+ "empty": "把要隱藏的功能從左側拖曳到這裡",
"files": {
"icon": "顯示檔案圖示"
},
@@ -3765,7 +3813,7 @@
"title": "自動更新"
},
"avatar": {
- "builtin": "內置頭像",
+ "builtin": "內建頭像",
"reset": "重設頭像"
},
"backup": {
@@ -3793,9 +3841,9 @@
"beta_version": "測試版本 (Beta)",
"beta_version_tooltip": "功能可能會隨時變化,錯誤較多,升級較快",
"rc_version": "預覽版本 (RC)",
- "rc_version_tooltip": "相對穩定,請務必提前備份數據",
+ "rc_version_tooltip": "相對穩定,請務必提前備份資料",
"title": "測試計畫",
- "tooltip": "參與測試計畫,體驗最新功能,但同時也帶來更多風險,請務必提前備份數據",
+ "tooltip": "參與測試計畫,體驗最新功能,但同時也帶來更多風險,請務必提前備份資料",
"version_channel_not_match": "預覽版和測試版的切換將在下一個正式版發布時生效",
"version_options": "版本選項"
},
@@ -3811,10 +3859,10 @@
},
"hardware_acceleration": {
"confirm": {
- "content": "禁用硬件加速需要重新啟動應用程序才能生效。是否立即重新啟動?",
+ "content": "停用硬體加速需要重新啟動應用程式才能生效。要立即重新啟動嗎?",
"title": "需要重新啟動"
},
- "title": "禁用硬件加速"
+ "title": "停用硬體加速"
},
"input": {
"auto_translate_with_space": "快速敲擊 3 次空格翻譯",
@@ -3836,7 +3884,7 @@
"launch": {
"onboot": "開機自動啟動",
"title": "啟動",
- "totray": "啟動時最小化到系统匣"
+ "totray": "啟動時最小化到系統匣"
},
"math": {
"engine": {
@@ -3845,58 +3893,60 @@
},
"single_dollar": {
"label": "啟用 $...$",
- "tip": "渲染單個美元符號 $...$ 包裹的數學公式,默認啟用。"
+ "tip": "渲染單個美元符號 $...$ 包裹的數學公式,預設啟用。"
},
"title": "數學公式設定"
},
"mcp": {
"actions": "操作",
"active": "啟用",
- "addError": "添加伺服器失敗",
+ "addError": "新增伺服器失敗",
"addServer": {
- "create": "快速創建",
+ "create": "快速建立",
"importFrom": {
"connectionFailed": "連線失敗",
- "dxt": "導入 DXT 包",
- "dxtFile": "DXT 包文件",
- "dxtHelp": "選擇包含 MCP 服務器的 .dxt 文件",
- "dxtProcessFailed": "處理 DXT 文件失敗",
+ "dxt": "匯入 DXT 套件",
+ "dxtFile": "DXT 套件檔案",
+ "dxtHelp": "選擇包含 MCP 伺服器的 .dxt 檔案",
+ "dxtProcessFailed": "處理 DXT 檔案失敗",
"error": {
"multipleServers": "不能從多個伺服器匯入"
},
"invalid": "無效的輸入,請檢查 JSON 格式",
"json": "從 JSON 匯入",
- "method": "導入方式",
+ "method": "匯入方式",
"nameExists": "伺服器已存在:{{name}}",
- "noDxtFile": "請選擇一個 DXT 文件",
- "oneServer": "每次只能保存一個 MCP 伺服器配置",
+ "noDxtFile": "請選擇一個 DXT 檔案",
+ "oneServer": "每次只能儲存一個 MCP 伺服器設定",
"placeholder": "貼上 MCP 伺服器 JSON 設定",
"selectDxtFile": "選擇 DXT 檔案",
- "tooltip": "請從 MCP Servers 的介紹頁面複製配置 JSON(優先使用\n NPX 或 UVX 配置),並粘貼到輸入框中"
+ "tooltip": "請從 MCP Servers 的介紹頁面複製設定 JSON(優先使用 NPX 或 UVX 設定),並貼上到輸入框中"
},
"label": "新增伺服器"
},
"addSuccess": "伺服器新增成功",
- "advancedSettings": "高級設定",
+ "advancedSettings": "進階設定",
"args": "參數",
"argsTooltip": "每個參數佔一行",
- "baseUrlTooltip": "遠端 URL 地址",
- "builtinServers": "內置伺服器",
+ "baseUrlTooltip": "遠端 URL 位址",
+ "builtinServers": "內建伺服器",
"builtinServersDescriptions": {
- "brave_search": "一個集成了Brave 搜索 API 的 MCP 伺服器實現,提供網頁與本地搜尋雙重功能。需要配置 BRAVE_API_KEY 環境變數",
- "didi_mcp": "一個集成了滴滴 MCP 伺服器實現,提供網約車服務包括地圖搜尋、價格預估、訂單管理和司機追蹤。僅支援中國大陸地區。需要配置 DIDI_API_KEY 環境變數",
- "dify_knowledge": "Dify 的 MCP 伺服器實現,提供了一個簡單的 API 來與 Dify 進行互動。需要配置 Dify Key",
- "fetch": "用於獲取 URL 網頁內容的 MCP 伺服器",
- "filesystem": "實現文件系統操作的模型上下文協議(MCP)的 Node.js 伺服器。需要配置允許訪問的目錄",
+ "brave_search": "一個整合了 Brave 搜尋 API 的 MCP 伺服器實做,提供網頁與本機搜尋雙重功能。需要設定 BRAVE_API_KEY 環境變數",
+ "browser": "透過 Chrome DevTools Protocol 控制 headless Electron 視窗。工具:開啟 URL、執行單行 JS、重設工作階段。",
+ "didi_mcp": "一個整合了滴滴 MCP 伺服器實做,提供網約車服務包括地圖搜尋、價格預估、訂單管理和司機追蹤。僅支援中國大陸地區。需要設定 DIDI_API_KEY 環境變數",
+ "dify_knowledge": "Dify 的 MCP 伺服器實做,提供了一個簡單的 API 來與 Dify 進行互動。需要設定 Dify Key",
+ "fetch": "用於取得 URL 網頁內容的 MCP 伺服器",
+ "filesystem": "實做文件系統操作的模型上下文協議(MCP)的 Node.js 伺服器。需要設定允許存取的目錄",
"mcp_auto_install": "自動安裝 MCP 服務(測試版)",
- "memory": "基於本地知識圖譜的持久性記憶基礎實現。這使得模型能夠在不同對話間記住使用者的相關資訊。需要配置 MEMORY_FILE_PATH 環境變數。",
+ "memory": "基於本機知識圖譜的持久性記憶基礎實做。這使得模型能夠在不同對話間記住使用者的相關資訊。需要設定 MEMORY_FILE_PATH 環境變數。",
"no": "無描述",
- "python": "在安全的沙盒環境中執行 Python 代碼。使用 Pyodide 運行 Python,支援大多數標準庫和科學計算套件",
- "sequentialthinking": "一個 MCP 伺服器實現,提供了透過結構化思維過程進行動態和反思性問題解決的工具"
+ "nowledge_mem": "需要本機執行 Nowledge Mem 應用程式。將 AI 對話、工具、筆記、代理和檔案保存在電腦上的私人記憶體中。請從 https://mem.nowledge.co/ 下載",
+ "python": "在安全的沙盒環境中執行 Python 程式碼。使用 Pyodide 執行 Python,支援大多數標準函式庫和科學計算套件",
+ "sequentialthinking": "一個 MCP 伺服器實做,提供了透過結構化思維過程進行動態和反思性問題解決的工具"
},
"command": "指令",
"config_description": "設定模型上下文協議伺服器",
- "customRegistryPlaceholder": "請輸入私有倉庫位址,如: https://npm.company.com",
+ "customRegistryPlaceholder": "請輸入私有倉庫位址,如:https://npm.company.com",
"deleteError": "刪除伺服器失敗",
"deleteServer": "刪除伺服器",
"deleteServerConfirm": "確定要刪除此伺服器嗎?",
@@ -3911,17 +3961,17 @@
"discover": "發現",
"duplicateName": "已存在相同名稱的伺服器",
"editJson": "編輯 JSON",
- "editMcpJson": "編輯 MCP 配置",
+ "editMcpJson": "編輯 MCP 設定",
"editServer": "編輯伺服器",
"env": "環境變數",
"envTooltip": "格式:KEY=value,每行一個",
"errors": {
- "32000": "MCP 伺服器啟動失敗,請根據教程檢查參數是否填寫完整",
+ "32000": "MCP 伺服器啟動失敗,請根據教學檢查參數是否填寫完整",
"toolNotFound": "未找到工具 {{name}}"
},
"fetch": {
- "button": "獲取伺服器",
- "success": "伺服器獲取成功"
+ "button": "取得伺服器",
+ "success": "伺服器取得成功"
},
"findMore": "更多 MCP",
"headers": "請求標頭",
@@ -3929,29 +3979,29 @@
"inMemory": "記憶體",
"install": "安裝",
"installError": "安裝相依套件失敗",
- "installHelp": "獲取安裝幫助",
+ "installHelp": "取得安裝幫助",
"installSuccess": "相依套件安裝成功",
"jsonFormatError": "JSON 格式錯誤",
- "jsonModeHint": "編輯 MCP 伺服器配置的 JSON 表示。保存前請確保格式正確",
- "jsonSaveError": "保存 JSON 配置失敗",
- "jsonSaveSuccess": "JSON 配置已儲存",
- "logoUrl": "標誌網址",
+ "jsonModeHint": "編輯 MCP 伺服器設定的 JSON 表示。儲存前請確認格式正確",
+ "jsonSaveError": "儲存 JSON 設定失敗",
+ "jsonSaveSuccess": "JSON 設定已儲存",
+ "logoUrl": "Logo URL",
"logs": "日誌",
- "longRunning": "長時間運行模式",
- "longRunningTooltip": "啟用後,伺服器支援長時間任務,接收到進度通知時會重置超時計時器,並延長最大超時時間至10分鐘",
+ "longRunning": "長時間運作模式",
+ "longRunningTooltip": "啟用後,伺服器支援長時間任務;收到進度通知時會重設逾時計時器,並將最大逾時時間延長至 10 分鐘",
"marketplaces": "市場",
- "missingDependencies": "缺失,請安裝它以繼續",
+ "missingDependencies": "遺失,請安裝它以繼續",
"more": {
"awesome": "精選的 MCP 伺服器清單",
"composio": "Composio MCP 開發工具",
"glama": "Glama MCP 伺服器目錄",
"higress": "Higress MCP 伺服器",
"mcpso": "MCP 伺服器發現平台",
- "modelscope": "魔搭社區 MCP 伺服器",
+ "modelscope": "魔搭社群 MCP 伺服器",
"official": "官方 MCP 伺服器集合",
"pulsemcp": "Pulse MCP 伺服器",
"smithery": "Smithery MCP 工具",
- "zhipu": "精選MCP,極速接入"
+ "zhipu": "精選 MCP,極速接入"
},
"name": "名稱",
"newServer": "MCP 伺服器",
@@ -3962,27 +4012,27 @@
"npx_list": {
"actions": "操作",
"description": "描述",
- "no_packages": "未找到包",
+ "no_packages": "找不到套件",
"npm": "NPM",
- "package_name": "包名稱",
- "scope_placeholder": "輸入 npm 作用域 (例如 @your-org)",
- "scope_required": "請輸入 npm 作用域",
- "search": "搜索",
- "search_error": "搜索失敗",
+ "package_name": "套件名稱",
+ "scope_placeholder": "輸入 npm 作用區域 (例如 @your-org)",
+ "scope_required": "請輸入 npm 作用區域",
+ "search": "搜尋",
+ "search_error": "搜尋失敗",
"usage": "用法",
"version": "版本"
},
"oauth": {
"callback": {
- "message": "您可以關閉此頁面並返回 Cherry Studio",
+ "message": "關閉此頁面後即可回到 Cherry Studio",
"title": "認證成功"
}
},
"prompts": {
"arguments": "參數",
"availablePrompts": "可用提示",
- "genericError": "獲取提示錯誤",
- "loadError": "獲取提示失敗",
+ "genericError": "取得提示錯誤",
+ "loadError": "取得提示失敗",
"noPromptsAvailable": "無可用提示",
"requiredField": "必填欄位"
},
@@ -3995,16 +4045,16 @@
"provider": "提供者",
"providerPlaceholder": "提供者名稱",
"providerUrl": "提供者網址",
- "providers": "提供商",
+ "providers": "供應商",
"registry": "套件管理源",
"registryDefault": "預設",
"registryTooltip": "選擇用於安裝套件的源,以解決預設源的網路問題",
- "requiresConfig": "需要配置",
+ "requiresConfig": "需要設定",
"resources": {
"availableResources": "可用資源",
- "blob": "二進位數據",
- "blobInvisible": "隱藏二進位數據",
- "genericError": "获取资源错误",
+ "blob": "二進位資料",
+ "blobInvisible": "隱藏二進位資料",
+ "genericError": "取得資源錯誤",
"mimeType": "MIME 類型",
"noResourcesAvailable": "無可用資源",
"size": "大小",
@@ -4012,10 +4062,10 @@
"uri": "URI"
},
"search": {
- "placeholder": "搜索 MCP 伺服器...",
- "tooltip": "搜索 MCP 伺服器"
+ "placeholder": "搜尋 MCP 伺服器...",
+ "tooltip": "搜尋 MCP 伺服器"
},
- "searchNpx": "搜索 MCP",
+ "searchNpx": "搜尋 MCP",
"serverPlural": "伺服器",
"serverSingular": "伺服器",
"servers": "MCP 伺服器",
@@ -4026,17 +4076,17 @@
"sync": {
"button": "同步",
"discoverMcpServers": "發現 MCP 伺服器",
- "discoverMcpServersDescription": "訪問平台以發現可用的 MCP 伺服器",
+ "discoverMcpServersDescription": "存取平台以發現可用的 MCP 伺服器",
"error": "同步 MCP 伺服器出錯",
- "getToken": "獲取 API 令牌",
- "getTokenDescription": "從您的帳戶獲取個人 API 令牌",
+ "getToken": "取得 API 權杖",
+ "getTokenDescription": "從帳戶取得個人 API 權杖",
"noServersAvailable": "無可用的 MCP 伺服器",
"selectProvider": "選擇提供者:",
- "setToken": "輸入您的令牌",
+ "setToken": "輸入權杖",
"success": "同步 MCP 伺服器成功",
"title": "同步伺服器",
- "tokenPlaceholder": "在此輸入 API 令牌",
- "tokenRequired": "需要 API 令牌",
+ "tokenPlaceholder": "在此輸入 API 權杖",
+ "tokenRequired": "需要 API 權杖",
"unauthorized": "同步未授權"
},
"system": "系統",
@@ -4049,17 +4099,17 @@
},
"tags": "標籤",
"tagsPlaceholder": "輸入標籤",
- "timeout": "超時",
- "timeoutTooltip": "對該伺服器請求的超時時間(秒),預設為 60 秒",
+ "timeout": "逾時",
+ "timeoutTooltip": "對該伺服器請求的逾時時間(秒),預設為 60 秒",
"title": "MCP",
"tools": {
"autoApprove": {
- "label": "自動批准",
+ "label": "自動核准",
"tooltip": {
- "confirm": "是否運行該MCP工具?",
- "disabled": "工具運行前需要手動批准",
- "enabled": "工具將自動運行而無需批准",
- "howToEnable": "啟用工具後才能使用自動批准"
+ "confirm": "是否運作該 MCP 工具?",
+ "disabled": "工具運作前需要手動核准",
+ "enabled": "工具將自動運作而無需手動核准",
+ "howToEnable": "啟用工具後才能使用自動核准"
}
},
"availableTools": "可用工具",
@@ -4070,26 +4120,26 @@
},
"label": "輸入模式"
},
- "loadError": "獲取工具失敗",
+ "loadError": "取得工具失敗",
"noToolsAvailable": "無可用工具",
- "run": "運行"
+ "run": "運作"
},
"type": "類型",
"types": {
- "inMemory": "內置",
+ "inMemory": "記憶體內",
"sse": "SSE",
"stdio": "STDIO",
- "streamableHttp": "流式"
+ "streamableHttp": "串流 HTTP"
},
"updateError": "更新伺服器失敗",
"updateSuccess": "伺服器更新成功",
"url": "URL",
- "user": "用戶"
+ "user": "使用者"
},
"messages": {
"divider": {
"label": "訊息間顯示分隔線",
- "tooltip": "不適用於氣泡樣式消息"
+ "tooltip": "不適用於氣泡樣式訊息"
},
"grid_columns": "訊息網格展示列數",
"grid_popover_trigger": {
@@ -4099,7 +4149,7 @@
},
"input": {
"confirm_delete_message": "刪除訊息前確認",
- "confirm_regenerate_message": "重新生成訊息前確認",
+ "confirm_regenerate_message": "重新產生訊息前確認",
"enable_quick_triggers": "啟用 / 和 @ 觸發快捷選單",
"paste_long_text_as_file": "將長文字貼上為檔案",
"paste_long_text_threshold": "長文字長度",
@@ -4115,11 +4165,11 @@
"navigation": {
"anchor": "對話錨點",
"buttons": "上下按鈕",
- "label": "訊息導航",
+ "label": "訊息導覽",
"none": "不顯示"
},
"prompt": "提示詞顯示",
- "show_message_outline": "顯示消息大綱",
+ "show_message_outline": "顯示訊息大綱",
"title": "訊息設定",
"use_serif_font": "使用襯線字型"
},
@@ -4127,20 +4177,20 @@
"api_key": "Mineru 現在每天提供 500 頁的免費配額,且無需輸入金鑰。"
},
"miniapps": {
- "cache_change_notice": "更改將在打開的小程式增減至設定值後生效",
- "cache_description": "設置同時保持活躍狀態的小程式最大數量",
- "cache_settings": "緩存設置",
- "cache_title": "小程式緩存數量",
+ "cache_change_notice": "變更會在開啟的小程式數量調整至設定值後生效",
+ "cache_description": "設定同時保持活躍狀態的小程式最大數量",
+ "cache_settings": "快取設定",
+ "cache_title": "小程式快取數量",
"custom": {
- "conflicting_ids": "與預設應用 ID 衝突: {{ids}}",
+ "conflicting_ids": "與預設應用 ID 衝突:{{ids}}",
"duplicate_ids": "發現重複的 ID: {{ids}}",
- "edit_description": "編輯自定義小程序配置",
- "edit_title": "編輯自定義小程序",
+ "edit_description": "編輯自訂小程式設定",
+ "edit_title": "編輯自訂小程式",
"id": "ID",
"id_error": "ID 是必填項",
"id_placeholder": "請輸入 ID",
"logo": "Logo",
- "logo_file": "上傳 Logo 文件",
+ "logo_file": "上傳 Logo 檔案",
"logo_upload_button": "上傳",
"logo_upload_error": "Logo 上傳失敗",
"logo_upload_label": "上傳 Logo",
@@ -4149,36 +4199,36 @@
"logo_url_label": "Logo URL",
"logo_url_placeholder": "請輸入 Logo URL",
"name": "名稱",
- "name_error": "名稱是必填項",
+ "name_error": "名稱為必填欄位",
"name_placeholder": "請輸入名稱",
- "placeholder": "請輸入自定義小程序配置(JSON 格式)",
- "remove_error": "自定義小程序刪除失敗",
- "remove_success": "自定義小程序刪除成功",
- "save": "保存",
- "save_error": "自定義小程序保存失敗",
- "save_success": "自定義小程序保存成功",
- "title": "自定義",
+ "placeholder": "請輸入自訂小程式設定(JSON 格式)",
+ "remove_error": "自訂小程式刪除失敗",
+ "remove_success": "自訂小程式刪除成功",
+ "save": "儲存",
+ "save_error": "自訂小程式儲存失敗",
+ "save_success": "自訂小程式儲存成功",
+ "title": "自訂",
"url": "URL",
"url_error": "URL 是必填項",
"url_placeholder": "請輸入 URL"
},
"disabled": "隱藏的小程式",
- "display_title": "小程式顯示設置",
- "empty": "把要隱藏的小程式從左側拖拽到這裡",
+ "display_title": "小程式顯示設定",
+ "empty": "把要隱藏的小程式從左側拖曳到這裡",
"open_link_external": {
- "title": "在瀏覽器中打開新視窗連結"
+ "title": "在瀏覽器中開啟新視窗連結"
},
- "reset_tooltip": "重置為預設值",
- "sidebar_description": "設置側邊欄是否顯示活躍的小程式",
- "sidebar_title": "側邊欄活躍小程式顯示設置",
- "title": "小程式設置",
+ "reset_tooltip": "重設為預設值",
+ "sidebar_description": "設定側邊欄是否顯示活躍的小程式",
+ "sidebar_title": "側邊欄活躍小程式顯示設定",
+ "title": "小程式設定",
"visible": "顯示的小程式"
},
"model": "預設模型",
"models": {
"add": {
"add_model": "新增模型",
- "batch_add_models": "批量新增模型",
+ "batch_add_models": "批次新增模型",
"endpoint_type": {
"label": "端點類型",
"placeholder": "選擇端點類型",
@@ -4204,35 +4254,35 @@
"tooltip": "例如 GPT-4"
},
"supported_text_delta": {
- "label": "支持增量文本輸出",
- "tooltip": "模型每次返回文本增量,而不是一次性返回所有文本,預設開啟,如果模型不支持,請關閉"
+ "label": "支援增量文字輸出",
+ "tooltip": "模型每次回傳文字增量,而不是一次性回傳所有文字,預設開啟,如果模型不支援,請關閉"
}
},
- "api_key": "API 密鑰",
+ "api_key": "API 金鑰",
"base_url": "基礎 URL",
"check": {
"all": "所有",
- "all_models_passed": "所有模型檢查通過",
+ "all_models_passed": "所有模型檢查皆成功",
"button_caption": "健康檢查",
"disabled": "關閉",
- "disclaimer": "健康檢查需要發送請求,請謹慎使用。按次收費的模型可能產生更多費用,請自行承擔。",
+ "disclaimer": "健康檢查需要傳送請求,請謹慎使用。按次收費的模型可能產生更多費用,請自行承擔。",
"enable_concurrent": "並行檢查",
"enabled": "開啟",
"failed": "失敗",
- "keys_status_count": "通過:{{count_passed}} 個密鑰,失敗:{{count_failed}} 個密鑰",
- "model_status_failed": "{{count}} 個模型完全無法訪問",
- "model_status_partial": "其中 {{count}} 個模型用某些密鑰無法訪問",
- "model_status_passed": "{{count}} 個模型通過健康檢查",
+ "keys_status_count": "成功:{{count_passed}} 個金鑰,失敗:{{count_failed}} 個金鑰",
+ "model_status_failed": "{{count}} 個模型完全無法存取",
+ "model_status_partial": "其中 {{count}} 個模型用某些金鑰無法存取",
+ "model_status_passed": "{{count}} 個模型健康檢查成功",
"model_status_summary": "{{provider}}: {{summary}}",
- "no_api_keys": "未找到 API 密鑰,請先添加 API 密鑰",
+ "no_api_keys": "未找到 API 金鑰,請先新增 API 金鑰",
"no_results": "無結果",
- "passed": "通過",
- "select_api_key": "選擇要使用的 API 密鑰:",
+ "passed": "成功",
+ "select_api_key": "選擇要使用的 API 金鑰:",
"single": "單個",
"start": "開始",
- "timeout": "超時",
+ "timeout": "逾時",
"title": "模型健康檢查",
- "use_all_keys": "使用密鑰"
+ "use_all_keys": "使用金鑰"
},
"default_assistant_model": "預設助手模型",
"default_assistant_model_description": "建立新助手時使用的模型,如果助手未設定模型,則使用此模型",
@@ -4243,27 +4293,27 @@
"label": "新增列表中的模型"
},
"add_whole_group": "新增整個分組",
- "refetch_list": "重新獲取模型列表",
+ "refetch_list": "重新取得模型列表",
"remove_listed": "移除列表中的模型",
"remove_model": "移除模型",
"remove_whole_group": "移除整個分組"
},
"provider_id": "提供者 ID",
- "provider_key_add_confirm": "是否要為 {{provider}} 添加 API 密鑰?",
- "provider_key_add_failed_by_empty_data": "添加提供者 API 密鑰失敗,數據為空",
- "provider_key_add_failed_by_invalid_data": "添加提供者 API 密鑰失敗,數據格式錯誤",
- "provider_key_added": "成功為 {{provider}} 添加 API 密鑰",
- "provider_key_already_exists": "{{provider}} 已存在相同API 密鑰,不會重複添加",
- "provider_key_confirm_title": "為{{provider}}添加 API 密鑰",
- "provider_key_no_change": "{{provider}} 的 API 密鑰沒有變化",
- "provider_key_overridden": "成功更新 {{provider}} 的 API 密鑰",
+ "provider_key_add_confirm": "是否要為 {{provider}} 新增 API 金鑰?",
+ "provider_key_add_failed_by_empty_data": "新增提供者 API 金鑰失敗,資料為空",
+ "provider_key_add_failed_by_invalid_data": "新增提供者 API 金鑰失敗,資料格式錯誤",
+ "provider_key_added": "成功為 {{provider}} 新增 API 金鑰",
+ "provider_key_already_exists": "{{provider}} 已存在相同 API 金鑰,不會重複新增",
+ "provider_key_confirm_title": "為{{provider}}新增 API 金鑰",
+ "provider_key_no_change": "{{provider}} 的 API 金鑰沒有變化",
+ "provider_key_overridden": "成功更新 {{provider}} 的 API 金鑰",
"provider_key_override_confirm": "{{provider}} 已存在相同 API 金鑰,是否覆蓋?",
"provider_name": "提供者名稱",
"quick_assistant_default_tag": "預設",
"quick_assistant_model": "快捷助手模型",
"quick_assistant_selection": "選擇助手",
"quick_model": {
- "description": "用於執行話題命名、搜尋關鍵字提煉等簡單任務的模型",
+ "description": "用於話題命名、搜尋關鍵字提煉等簡單任務的模型",
"label": "快速模型",
"setting_title": "快速模型設定",
"tooltip": "建議選擇輕量模型,不建議選擇思考模型"
@@ -4288,7 +4338,7 @@
"label": "更多設定",
"warn": "風險警告"
},
- "no_provider_selected": "未選擇提供商",
+ "no_provider_selected": "未選擇供應商",
"notification": {
"assistant": "助手訊息",
"backup": "備份訊息",
@@ -4329,7 +4379,7 @@
}
},
"privacy": {
- "enable_privacy_mode": "匿名發送錯誤報告和資料統計",
+ "enable_privacy_mode": "匿名傳送錯誤報告和資料統計",
"title": "隱私設定"
},
"provider": {
@@ -4342,9 +4392,9 @@
"type": "供應商類型"
},
"anthropic": {
- "apikey": "API 密鑰",
+ "apikey": "API 金鑰",
"auth_failed": "Anthropic 身份驗證失敗",
- "auth_method": "认证方式",
+ "auth_method": "認證方式",
"auth_success": "Anthropic OAuth 認證成功",
"authenticated": "已認證",
"authenticating": "正在認證",
@@ -4360,48 +4410,48 @@
"logout_success": "成功登出 Anthropic",
"oauth": "網頁 OAuth",
"start_auth": "開始授權",
- "submit_code": "完成登錄"
+ "submit_code": "完成登入"
},
- "anthropic_api_host": "Anthropic API 主機地址",
+ "anthropic_api_host": "Anthropic API 主機位址",
"anthropic_api_host_preview": "Anthropic 預覽:{{url}}",
- "anthropic_api_host_tooltip": "僅在服務商提供 Claude 相容的基礎網址時設定。",
+ "anthropic_api_host_tooltip": "僅在供應商提供 Claude 相容的基礎網址時設定。",
"api": {
"key": {
"check": {
"latency": "耗時"
},
"error": {
- "duplicate": "API 密鑰已存在",
- "empty": "API 密鑰不能為空"
+ "duplicate": "API 金鑰已存在",
+ "empty": "API 金鑰不能為空"
},
"list": {
- "open": "打開管理界面",
- "title": "API 密鑰管理"
+ "open": "開啟管理介面",
+ "title": "API 金鑰管理"
},
"new_key": {
- "placeholder": "輸入一個或多個密鑰"
+ "placeholder": "輸入一個或多個金鑰"
}
},
"options": {
"array_content": {
- "help": "該提供商是否支援 message 的 content 欄位為 array 類型",
+ "help": "該供應商是否支援 message 的 content 欄位為 array 類型",
"label": "支援陣列格式的 message content"
},
"developer_role": {
- "help": "該提供商是否支援 role: \"developer\" 的訊息",
+ "help": "該供應商是否支援 role: \"developer\" 的訊息",
"label": "支援開發人員訊息"
},
"enable_thinking": {
- "help": "該提供商是否支援透過 enable_thinking 參數控制 Qwen3 等模型的思考",
+ "help": "該供應商是否支援透過 enable_thinking 參數控制 Qwen3 等模型的思考",
"label": "支援 enable_thinking"
},
"label": "API 設定",
"service_tier": {
- "help": "該提供商是否支援設定 service_tier 參數。啟用後,可在對話頁面的服務層級設定中調整此參數。(僅限 OpenAI 模型)",
+ "help": "該供應商是否支援設定 service_tier 參數。啟用後,可在對話頁面的服務層級設定中調整此參數。(僅限 OpenAI 模型)",
"label": "支援 service_tier"
},
"stream_options": {
- "help": "該提供商是否支援 stream_options 參數",
+ "help": "該供應商是否支援 stream_options 參數",
"label": "支援 stream_options"
},
"verbosity": {
@@ -4412,32 +4462,32 @@
"url": {
"preview": "預覽:{{url}}",
"reset": "重設",
- "tip": "在末尾添加 # 以停用自動附加的 API 版本。"
+ "tip": "在結尾新增 # 以停用自動附加的 API 版本。"
}
},
- "api_host": "API 主機地址",
+ "api_host": "API 主機位址",
"api_host_no_valid": "API 位址不合法",
"api_host_preview": "預覽:{{url}}",
- "api_host_tooltip": "僅在服務商需要自訂的 OpenAI 相容端點時才覆蓋。",
+ "api_host_tooltip": "僅在供應商需要自訂的 OpenAI 相容端點時才覆蓋。",
"api_key": {
"label": "API 金鑰",
"tip": "多個金鑰使用逗號分隔"
},
"api_version": "API 版本",
"aws-bedrock": {
- "access_key_id": "AWS 存取密鑰 ID",
- "access_key_id_help": "您的 AWS 存取密鑰 ID,用於存取 AWS Bedrock 服務",
+ "access_key_id": "AWS 存取金鑰 ID",
+ "access_key_id_help": "您的 AWS 存取金鑰 ID,用於存取 AWS Bedrock 服務",
"api_key": "Bedrock API 金鑰",
"api_key_help": "您的 AWS Bedrock API 金鑰,用於身份驗證",
"auth_type": "認證方式",
"auth_type_api_key": "Bedrock API 金鑰",
"auth_type_help": "選擇使用 IAM 憑證或 Bedrock API 金鑰進行身份驗證",
"auth_type_iam": "IAM 憑證",
- "description": "AWS Bedrock 是亞馬遜提供的全托管基础模型服務,支持多種先進的大語言模型",
+ "description": "AWS Bedrock 是亞馬遜提供的全託管基礎模型服務,支援多種先進的大型語言模型",
"region": "AWS 區域",
"region_help": "您的 AWS 服務區域,例如 us-east-1",
- "secret_access_key": "AWS 存取密鑰",
- "secret_access_key_help": "您的 AWS 存取密鑰,請妥善保管",
+ "secret_access_key": "AWS 存取金鑰",
+ "secret_access_key_help": "您的 AWS 存取金鑰,請妥善保管",
"title": "AWS Bedrock 設定"
},
"azure": {
@@ -4451,59 +4501,59 @@
"label": "密碼",
"tip": "輸入密碼"
},
- "tip": "適用於透過伺服器部署的實例(請參閱文檔)。目前僅支援 Basic 方案(RFC7617)",
+ "tip": "適用於透過伺服器部署的執行個體(請參閱文件)。目前僅支援 Basic 方案(RFC7617)",
"user_name": {
- "label": "用戶",
+ "label": "使用者",
"tip": "留空以停用"
}
},
"bills": "費用帳單",
- "charge": "餘額充值",
+ "charge": "餘額儲值",
"check": "檢查",
"check_all_keys": "檢查所有金鑰",
"check_multiple_keys": "檢查多個 API 金鑰",
"copilot": {
- "auth_failed": "Github Copilot 認證失敗",
- "auth_success": "Github Copilot 認證成功",
+ "auth_failed": "GitHub Copilot 認證失敗",
+ "auth_success": "GitHub Copilot 認證成功",
"auth_success_title": "認證成功",
"code_copied": "授權碼已自動複製到剪貼簿",
- "code_failed": "獲取 Device Code 失敗,請重試",
- "code_generated_desc": "請將設備代碼複製到下面的瀏覽器連結中",
- "code_generated_title": "獲取設備代碼",
- "connect": "連接 Github",
+ "code_failed": "取得裝置碼失敗,請重試",
+ "code_generated_desc": "請將裝置碼複製到下方的瀏覽器連結中",
+ "code_generated_title": "取得裝置碼",
+ "connect": "連線 GitHub",
"custom_headers": "自訂請求標頭",
- "description": "您的 Github 帳號需要訂閱 Copilot",
+ "description": "GitHub 帳號需要訂閱 Copilot",
"description_detail": "GitHub Copilot 是一個基於 AI 的程式碼助手,需要有效的 GitHub Copilot 訂閱才能使用",
"expand": "展開",
"headers_description": "自訂請求標頭 (json 格式)",
"invalid_json": "JSON 格式錯誤",
- "login": "登入 Github",
- "logout": "退出 Github",
- "logout_failed": "退出失敗,請重試",
+ "login": "登入 GitHub",
+ "logout": "登出 GitHub",
+ "logout_failed": "登出失敗,請重試",
"logout_success": "已成功登出",
"model_setting": "模型設定",
- "open_verification_first": "請先點擊上方連結訪問驗證頁面",
+ "open_verification_first": "請先點選上方連結前往驗證頁面",
"open_verification_page": "開啟授權頁面",
"rate_limit": "速率限制",
"start_auth": "開始授權",
"step_authorize": "開啟授權頁面",
"step_authorize_desc": "在 GitHub 上完成授權",
- "step_authorize_detail": "點擊下方按鈕開啟 GitHub 授權頁面,然後輸入複製的授權碼",
+ "step_authorize_detail": "點選下方按鈕開啟 GitHub 授權頁面,然後輸入複製的授權碼",
"step_connect": "完成連線",
- "step_connect_desc": "確認連接到 GitHub",
- "step_connect_detail": "在 GitHub 頁面完成授權後,點擊此按鈕完成連線",
+ "step_connect_desc": "確認已連線至 GitHub",
+ "step_connect_detail": "在 GitHub 頁面完成授權後,點選此按鈕完成連線",
"step_copy_code": "複製授權碼",
- "step_copy_code_desc": "複製設備授權碼",
+ "step_copy_code_desc": "複製裝置授權碼",
"step_copy_code_detail": "授權碼已自動複製,您也可以手動複製",
- "step_get_code": "獲取授權碼",
- "step_get_code_desc": "生成設備授權碼"
+ "step_get_code": "取得授權碼",
+ "step_get_code_desc": "產生裝置授權碼"
},
"delete": {
"content": "確定要刪除此提供者嗎?",
"title": "刪除提供者"
},
"dmxapi": {
- "select_platform": "選擇平臺"
+ "select_platform": "選擇平台"
},
"docs_check": "檢查",
"docs_more_details": "檢視更多細節",
@@ -4519,7 +4569,7 @@
"oauth": {
"button": "使用 {{provider}} 帳號登入",
"description": "本服務由
{{provider}} 提供",
- "error": "认证失败",
+ "error": "認證失敗",
"official_website": "官方網站"
},
"openai": {
@@ -4531,7 +4581,7 @@
"search_placeholder": "搜尋模型 ID 或名稱",
"title": "模型提供者",
"vertex_ai": {
- "api_host_help": "Vertex AI 的 API 地址,不建議填寫,通常適用於反向代理",
+ "api_host_help": "Vertex AI 的 API 位址,不建議填寫,通常適用於反向代理",
"documentation": "檢視官方文件以取得更多設定詳細資訊:",
"learn_more": "瞭解更多",
"location": "地區",
@@ -4544,7 +4594,7 @@
"client_email": "Client Email",
"client_email_help": "從 Google Cloud Console 下載的 JSON 金鑰檔案中的 client_email 欄位",
"client_email_placeholder": "輸入服務帳戶 client email",
- "description": "使用服務帳戶進行身份驗證,適用於 ADC 不可用的環境",
+ "description": "使用服務帳戶進行身份驗證,適用於 ADC 無法使用的環境",
"incomplete_config": "請先完成服務帳戶設定",
"private_key": "私密金鑰",
"private_key_help": "從 Google Cloud Console 下載的 JSON 金鑰檔案中的 private_key 欄位",
@@ -4562,7 +4612,7 @@
"system": "系統代理伺服器",
"title": "代理伺服器模式"
},
- "tip": "支援模糊匹配(*.test.com,192.168.0.0/16)"
+ "tip": "支援模糊比對(*.test.com,192.168.0.0/16)"
},
"quickAssistant": {
"click_tray_to_show": "點選工具列圖示啟動",
@@ -4586,12 +4636,12 @@
"add": "新增短語",
"assistant": "助手提示詞",
"contentLabel": "內容",
- "contentPlaceholder": "請輸入短語內容,支持使用變量,然後按 Tab 鍵可以快速定位到變量進行修改。比如:\n幫我規劃從 ${from} 到 ${to} 的行程,然後發送到 ${email}",
+ "contentPlaceholder": "請輸入短語內容,支援使用變數,然後按 Tab 鍵可以快速定位到變數進行修改。例如:\n幫我規劃從 ${from} 到 ${to} 的行程,然後傳送到 ${email}",
"delete": "刪除短語",
"deleteConfirm": "刪除後無法復原,是否繼續?",
"edit": "編輯短語",
- "global": "全局快速短語",
- "locationLabel": "添加位置",
+ "global": "全域快速短語",
+ "locationLabel": "新增位置",
"title": "快捷短語",
"titleLabel": "標題",
"titlePlaceholder": "請輸入短語標題"
@@ -4604,7 +4654,7 @@
"copy_last_message": "複製上一則訊息",
"edit_last_user_message": "編輯最後一則使用者訊息",
"enabled": "啟用",
- "exit_fullscreen": "退出螢幕",
+ "exit_fullscreen": "離開全螢幕",
"label": "按鍵",
"mini_window": "快捷助手",
"new_topic": "新增話題",
@@ -4614,8 +4664,8 @@
"reset_defaults_confirm": "確定要重設所有快捷鍵嗎?",
"reset_to_default": "重設為預設",
"search_message": "搜尋訊息",
- "search_message_in_chat": "在當前對話中搜尋訊息",
- "selection_assistant_select_text": "劃詞助手:取词",
+ "search_message_in_chat": "在目前對話中搜尋訊息",
+ "selection_assistant_select_text": "劃詞助手:取詞",
"selection_assistant_toggle": "開關劃詞助手",
"show_app": "顯示 / 隱藏應用程式",
"show_settings": "開啟設定",
@@ -4652,14 +4702,14 @@
},
"image": {
"error": {
- "provider_not_found": "該提供商不存在"
+ "provider_not_found": "該供應商不存在"
},
"system": {
- "no_need_configure": "MacOS 無需配置"
+ "no_need_configure": "MacOS 無需設定"
},
"title": "圖片"
},
- "image_provider": "OCR 服務提供商",
+ "image_provider": "OCR 服務供應商",
"paddleocr": {
"aistudio_access_token": "星河社群存取權杖",
"aistudio_url_label": "星河社群",
@@ -4669,7 +4719,7 @@
},
"system": {
"win": {
- "langs_tooltip": "依賴 Windows 提供服務,您需要在系統中下載語言包來支援相關語言。"
+ "langs_tooltip": "仰賴 Windows 提供的服務,需要在系統中下載語言套件,才能支援相關語言。"
}
},
"tesseract": {
@@ -4697,10 +4747,10 @@
"limit": {
"label": "截斷長度",
"placeholder": "輸入長度",
- "tooltip": "限制搜尋結果的內容長度,超過限制的內容將被截斷(例如 2000 字符)"
+ "tooltip": "限制搜尋結果的內容長度,超過限制的內容將被截斷(例如 2000 字元)"
},
"unit": {
- "char": "字符",
+ "char": "字元",
"token": "Token"
}
},
@@ -4708,7 +4758,7 @@
"rag_failed": "RAG 失敗"
},
"info": {
- "dimensions_auto_success": "維度自動獲取成功,維度為 {{dimensions}}"
+ "dimensions_auto_success": "維度自動取得成功,維度為 {{dimensions}}"
},
"method": {
"cutoff": "截斷",
@@ -4718,8 +4768,8 @@
},
"rag": {
"document_count": {
- "label": "文檔片段數量",
- "tooltip": "預期從單個搜尋結果中提取的文檔片段數量,實際提取的總數量是這個值乘以搜尋結果數量。"
+ "label": "文件片段數量",
+ "tooltip": "預期從單個搜尋結果中提取的文件片段數量,實際提取的總數量是這個值乘以搜尋結果數量。"
}
},
"title": "搜尋結果壓縮"
@@ -4727,28 +4777,28 @@
"content_limit": "內容長度限制",
"content_limit_tooltip": "限制搜尋結果的內容長度;超過限制的內容將被截斷。",
"free": "免費",
- "no_provider_selected": "請選擇搜尋服務商後再檢查",
+ "no_provider_selected": "請選擇搜尋供應商後再檢查",
"overwrite": "覆蓋搜尋服務",
"overwrite_tooltip": "強制使用搜尋服務而不是 LLM",
"search_max_result": {
"label": "搜尋結果個數",
"tooltip": "未開啟搜尋結果壓縮的情況下,數量過大可能會消耗過多 tokens"
},
- "search_provider": "搜尋服務商",
- "search_provider_placeholder": "選擇一個搜尋服務商",
+ "search_provider": "搜尋供應商",
+ "search_provider_placeholder": "選擇一個搜尋供應商",
"search_with_time": "搜尋包含日期",
"subscribe": "黑名單訂閱",
"subscribe_add": "新增訂閱",
- "subscribe_add_failed": "订阅源添加失败",
- "subscribe_add_success": "訂閱源新增成功!",
+ "subscribe_add_failed": "訂閱來源新增失敗",
+ "subscribe_add_success": "訂閱來源新增成功!",
"subscribe_delete": "刪除",
"subscribe_name": {
"label": "替代名稱",
- "placeholder": "下載的訂閱源沒有名稱時使用的替代名稱。"
+ "placeholder": "下載的訂閱來源沒有名稱時使用的替代名稱。"
},
"subscribe_update": "更新",
- "subscribe_update_failed": "订阅源更新失败",
- "subscribe_update_success": "订阅源更新成功",
+ "subscribe_update_failed": "訂閱來源更新失敗",
+ "subscribe_update_success": "訂閱來源更新成功",
"subscribe_url": "訂閱網址",
"tavily": {
"api_key": {
@@ -4759,8 +4809,8 @@
"title": "Tavily"
},
"title": "網路搜尋",
- "url_invalid": "輸入了無效的URL",
- "url_required": "需要輸入URL"
+ "url_invalid": "輸入了無效的 URL",
+ "url_required": "需要輸入 URL"
}
},
"topic": {
@@ -4781,27 +4831,27 @@
"title": "刪除自訂語言"
},
"error": {
- "add": "添加失敗",
- "delete": "删除失败",
+ "add": "新增失敗",
+ "delete": "刪除失敗",
"langCode": {
"builtin": "該語言已內建支援",
- "empty": "語言代碼為空",
+ "empty": "語言代號為空",
"exists": "該語言已存在",
- "invalid": "無效的語言代碼"
+ "invalid": "無效的語言代號"
},
"update": "更新失敗",
"value": {
- "empty": "語言名不能為空",
- "too_long": "語言名過長"
+ "empty": "語言名稱不能留空",
+ "too_long": "語言名稱過長"
}
},
"langCode": {
- "help": "[語言+區域]的格式,[2~3位小寫字母]-[2~3位小寫字母]",
- "label": "語言代碼",
+ "help": "[語言 + 區域] 的格式,[2~3 位小寫字母]-[2~3 位小寫字母]",
+ "label": "語言代號",
"placeholder": "zh-tw"
},
"success": {
- "add": "添加成功",
+ "add": "新增成功",
"delete": "刪除成功",
"update": "更新成功"
},
@@ -4811,29 +4861,29 @@
}
},
"value": {
- "help": "1~32個字元",
- "label": "语言名称",
+ "help": "1~32 個字元",
+ "label": "語言名稱",
"placeholder": "繁體中文"
}
},
- "prompt": "翻译提示词",
- "title": "翻译设置"
+ "prompt": "翻譯提示詞",
+ "title": "翻譯設定"
},
"tray": {
- "onclose": "關閉時最小化到系统匣",
- "show": "顯示系统匣圖示",
- "title": "系统匣"
+ "onclose": "關閉時最小化到系統匣",
+ "show": "顯示系統匣圖示",
+ "title": "系統匣"
},
"zoom": {
- "reset": "重置",
+ "reset": "重設",
"title": "縮放"
}
},
"title": {
- "apps": "小程序",
- "code": "Code",
- "files": "文件",
- "home": "主頁",
+ "apps": "小程式",
+ "code": "程式碼",
+ "files": "檔案",
+ "home": "首頁",
"knowledge": "知識庫",
"launchpad": "啟動台",
"mcp-servers": "MCP 伺服器",
@@ -4845,20 +4895,20 @@
"translate": "翻譯"
},
"trace": {
- "backList": "返回清單",
+ "backList": "回到清單",
"edasSupport": "Powered by Alibaba Cloud EDAS",
"endTime": "結束時間",
"inputs": "輸入",
"label": "呼叫鏈",
"name": "節點名稱",
- "noTraceList": "沒有找到Trace資訊",
+ "noTraceList": "沒有找到 Trace 資訊",
"outputs": "輸出",
- "parentId": "上級Id",
- "spanDetail": "Span詳情",
+ "parentId": "上級 Id",
+ "spanDetail": "Span 詳細資訊",
"spendTime": "消耗時間",
"startTime": "開始時間",
"tag": "標籤",
- "tokenUsage": "Token使用量",
+ "tokenUsage": "Token 使用量",
"traceWindow": "呼叫鏈視窗"
},
"translate": {
@@ -4884,48 +4934,48 @@
"method": {
"algo": {
"label": "演算法",
- "tip": "使用franc進行語言檢測"
+ "tip": "使用 franc 進行語言偵測"
},
"auto": {
"label": "自動",
- "tip": "自動選擇合適的檢測方法"
+ "tip": "自動選擇合適的偵測方法"
},
- "label": "自動檢測方法",
+ "label": "自動偵測方法",
"llm": {
- "tip": "使用快速模型進行語言檢測,消耗少量token。"
+ "tip": "使用快速模型進行語言偵測,消耗少量 token。"
},
"placeholder": "選擇自動偵測方法",
- "tip": "自動檢測輸入語言時使用的方法"
+ "tip": "自動偵測輸入語言時使用的方法"
}
},
"detected": {
- "language": "自動檢測"
+ "language": "自動偵測"
},
"empty": "翻譯內容為空",
"error": {
- "chat_qwen_mt": "Qwen MT 模型不可在对话中使用,請轉至翻譯頁面",
+ "chat_qwen_mt": "Qwen MT 模型無法在對話中使用,請前往翻譯頁面",
"detect": {
- "qwen_mt": "QwenMT模型不能用於語言檢測",
- "unknown": "檢測到未知語言",
+ "qwen_mt": "QwenMT 模型不能用於語言偵測",
+ "unknown": "偵測到未知語言",
"update_setting": "設定失敗"
},
- "empty": "翻译结果为空内容",
+ "empty": "翻譯結果為空",
"failed": "翻譯失敗",
- "invalid_source": "無效的源語言",
+ "invalid_source": "無效的來源語言",
"not_configured": "翻譯模型未設定",
"not_supported": "不支援的語言 {{language}}",
"unknown": "翻譯過程中遇到未知錯誤"
},
"exchange": {
- "label": "交換源語言與目標語言"
+ "label": "交換來源語言與目標語言"
},
"files": {
- "drag_text": "拖放到此处",
+ "drag_text": "拖曳到此處",
"error": {
"check_type": "檢查檔案類型時發生錯誤",
- "multiple": "不允许上传多个文件",
- "too_large": "文件過大",
- "unknown": "读取文件内容失败"
+ "multiple": "不允許上傳多個檔案",
+ "too_large": "檔案過大",
+ "unknown": "讀取檔案內容失敗"
},
"reading": "讀取檔案內容中..."
},
@@ -4935,11 +4985,11 @@
"delete": "刪除翻譯歷史",
"empty": "翻譯歷史為空",
"error": {
- "delete": "删除失败",
- "save": "保存翻譯歷史失敗"
+ "delete": "刪除失敗",
+ "save": "儲存翻譯歷史失敗"
},
"search": {
- "placeholder": "搜索翻譯歷史"
+ "placeholder": "搜尋翻譯歷史"
},
"title": "翻譯歷史"
},
@@ -4947,14 +4997,14 @@
"aborted": "翻譯中止"
},
"input": {
- "placeholder": "可粘貼或拖入文字、文字檔案、圖片(支援OCR)"
+ "placeholder": "可貼上或拖曳文字、文字檔案、圖片(支援 OCR)"
},
"language": {
- "not_pair": "源語言與設定的語言不同",
- "same": "源語言和目標語言相同"
+ "not_pair": "來源語言與設定的語言不同",
+ "same": "來源語言和目標語言相同"
},
"menu": {
- "description": "對當前輸入框內容進行翻譯"
+ "description": "對目前輸入框內容進行翻譯"
},
"not": {
"found": "未找到翻譯內容"
@@ -4966,10 +5016,10 @@
"settings": {
"autoCopy": "翻譯完成後自動複製",
"bidirectional": "雙向翻譯設定",
- "bidirectional_tip": "開啟後,僅支援在源語言和目標語言之間進行雙向翻譯",
+ "bidirectional_tip": "開啟後,僅支援在來源語言和目標語言之間進行雙向翻譯",
"model": "模型設定",
"model_desc": "翻譯服務使用的模型",
- "model_placeholder": "选择翻译模型",
+ "model_placeholder": "選擇翻譯模型",
"no_model_warning": "未選擇翻譯模型",
"preview": "Markdown 預覽",
"scroll_sync": "滾動同步設定",
@@ -4997,11 +5047,11 @@
"later": "稍後",
"message": "新版本 {{version}} 已準備就緒,是否立即安裝?",
"noReleaseNotes": "暫無更新日誌",
- "saveDataError": "保存數據失敗,請重試",
+ "saveDataError": "儲存資料失敗,請重試",
"title": "更新提示"
},
"warning": {
- "missing_provider": "供應商不存在,已回退到預設供應商 {{provider}}。這可能導致問題。"
+ "missing_provider": "供應商不存在,已改用預設供應商 {{provider}}。這可能導致問題。"
},
"words": {
"knowledgeGraph": "知識圖譜",
diff --git a/src/renderer/src/i18n/translate/de-de.json b/src/renderer/src/i18n/translate/de-de.json
index cbb5bc637a..b3acb49950 100644
--- a/src/renderer/src/i18n/translate/de-de.json
+++ b/src/renderer/src/i18n/translate/de-de.json
@@ -32,6 +32,7 @@
},
"gitBash": {
"autoDetected": "Automatisch ermitteltes Git Bash wird verwendet",
+ "autoDiscoveredHint": "[to be translated]:Auto-discovered",
"clear": {
"button": "Benutzerdefinierten Pfad löschen"
},
@@ -39,6 +40,7 @@
"error": {
"description": "Git Bash ist erforderlich, um Agents unter Windows auszuführen. Der Agent kann ohne es nicht funktionieren. Bitte installieren Sie Git für Windows von",
"recheck": "Überprüfe die Git Bash-Installation erneut",
+ "required": "[to be translated]:Git Bash path is required on Windows",
"title": "Git Bash erforderlich"
},
"found": {
@@ -51,7 +53,9 @@
"invalidPath": "Die ausgewählte Datei ist keine gültige Git Bash ausführbare Datei (bash.exe).",
"title": "Git Bash ausführbare Datei auswählen"
},
- "success": "Git Bash erfolgreich erkannt!"
+ "placeholder": "[to be translated]:Select bash.exe path",
+ "success": "Git Bash erfolgreich erkannt!",
+ "tooltip": "[to be translated]:Git Bash is required to run agents on Windows. Install from git-scm.com if not available."
},
"input": {
"placeholder": "Gib hier deine Nachricht ein, senden mit {{key}} – @ Pfad auswählen, / Befehl auswählen"
@@ -472,6 +476,7 @@
"button": "Importieren",
"error": {
"fetch_failed": "Daten von URL abrufen fehlgeschlagen",
+ "file_required": "Bitte wählen Sie zuerst eine Datei aus",
"invalid_format": "Ungültiges Assistentenformat: Pflichtfelder fehlen",
"url_required": "Bitte geben Sie eine URL ein"
},
@@ -489,8 +494,11 @@
"button": "Stapel löschen",
"confirm": "Sind Sie sicher, dass Sie die ausgewählten {{count}} Assistenten löschen möchten?"
},
+ "batch_export": {
+ "button": "Exportieren"
+ },
"mode": {
- "delete": "Löschen",
+ "manage": "Verwalten",
"sort": "Sortieren"
},
"title": "Assistenten verwalten"
@@ -540,14 +548,23 @@
"more": "Assistenteneinstellungen",
"prompt": "Prompt-Einstellungen",
"reasoning_effort": {
+ "auto": "Auto",
+ "auto_description": "Denkaufwand flexibel bestimmen",
"default": "Standard",
+ "default_description": "Vom Standardverhalten des Modells abhängen, ohne Konfiguration.",
"high": "Tiefes Nachdenken",
+ "high_description": "Ganzheitliches Denken",
"label": "Gedankenkettenlänge",
"low": "Spontan",
+ "low_description": "Geringfügige Argumentation",
"medium": "Überlegt",
+ "medium_description": "Denken auf mittlerem Niveau",
"minimal": "Minimal",
+ "minimal_description": "Minimales Denken",
"off": "Aus",
- "xhigh": "Extra hoch"
+ "off_description": "Denken deaktivieren",
+ "xhigh": "Extra hoch",
+ "xhigh_description": "Extra hohes Denkvermögen"
},
"regular_phrases": {
"add": "Phrase hinzufügen",
@@ -1027,6 +1044,29 @@
"yuque": "Nach Yuque exportieren"
},
"list": "Themenliste",
+ "manage": {
+ "clear_selection": "Auswahl aufheben",
+ "delete": {
+ "confirm": {
+ "content": "Sind Sie sicher, dass Sie {{count}} ausgewähltes Thema bzw. ausgewählte Themen löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
+ "title": "Themen löschen"
+ },
+ "success": "{{count}} Thema/Themen gelöscht"
+ },
+ "deselect_all": "Alle abwählen",
+ "error": {
+ "at_least_one": "Mindestens ein Thema muss beibehalten werden"
+ },
+ "move": {
+ "button": "Bewegen",
+ "placeholder": "Ziel auswählen",
+ "success": "{{count}} Thema(s) verschoben"
+ },
+ "pinned": "Angepinnte Themen",
+ "selected_count": "{{count}} ausgewählt",
+ "title": "Themen verwalten",
+ "unpinned": "Losgelöste Themen"
+ },
"move_to": "Verschieben nach",
"new": "Neues Gespräch starten",
"pin": "Thema anheften",
@@ -1037,6 +1077,10 @@
"label": "Themen-Prompt",
"tips": "Themen-Prompt: Bietet zusätzliche ergänzende Prompts für das aktuelle Thema"
},
+ "search": {
+ "placeholder": "Themen durchsuchen...",
+ "title": "Suche"
+ },
"title": "Thema",
"unpin": "Anheften aufheben"
},
@@ -1221,11 +1265,13 @@
}
},
"stop": "Stoppen",
+ "subscribe": "Abonnieren",
"success": "Erfolgreich",
"swap": "Tauschen",
"topics": "Themen",
"unknown": "Unbekannt",
"unnamed": "Unbenannt",
+ "unsubscribe": "Abmelden",
"update_success": "Erfolgreich aktualisiert",
"upload_files": "Dateien hochladen",
"warning": "Warnung",
@@ -2152,6 +2198,7 @@
"collapse": "Einklappen",
"content_placeholder": "Bitte Notizinhalt eingeben...",
"copyContent": "Inhalt kopieren",
+ "crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "Löschen",
"delete_confirm": "Möchten Sie diesen {{type}} wirklich löschen?",
"delete_folder_confirm": "Möchten Sie Ordner \"{{name}}\" und alle seine Inhalte wirklich löschen?",
@@ -2596,6 +2643,7 @@
"lanyun": "Lanyun Technologie",
"lmstudio": "LM Studio",
"longcat": "Meißner Riesenhamster",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "MiniMax",
"mistral": "Mistral",
"modelscope": "ModelScope",
@@ -3884,6 +3932,7 @@
"builtinServers": "Integrierter Server",
"builtinServersDescriptions": {
"brave_search": "MCP-Server-Implementierung mit Brave-Search-API, die sowohl Web- als auch lokale Suchfunktionen bietet. BRAVE_API_KEY-Umgebungsvariable muss konfiguriert werden",
+ "browser": "Steuert ein headless Electron-Fenster über das Chrome DevTools Protocol. Tools: URL öffnen, einzeiligen JS ausführen, Sitzung zurücksetzen.",
"didi_mcp": "An integrated Didi MCP server implementation that provides ride-hailing services including map search, price estimation, order management, and driver tracking. Only available in mainland China. Requires the DIDI_API_KEY environment variable to be configured.",
"dify_knowledge": "MCP-Server-Implementierung von Dify, die einen einfachen API-Zugriff auf Dify bietet. Dify Key muss konfiguriert werden",
"fetch": "MCP-Server zum Abrufen von Webseiteninhalten",
@@ -3891,6 +3940,7 @@
"mcp_auto_install": "MCP-Service automatisch installieren (Beta-Version)",
"memory": "MCP-Server mit persistenter Erinnerungsbasis auf lokalem Wissensgraphen, der Informationen über verschiedene Dialoge hinweg speichert. MEMORY_FILE_PATH-Umgebungsvariable muss konfiguriert werden",
"no": "Keine Beschreibung",
+ "nowledge_mem": "Erfordert lokal laufende Nowledge Mem App. Speichert KI-Chats, Tools, Notizen, Agenten und Dateien in einem privaten Speicher auf Ihrem Computer. Download unter https://mem.nowledge.co/",
"python": "Python-Code in einem sicheren Sandbox-Umgebung ausführen. Verwendung von Pyodide für Python, Unterstützung für die meisten Standardbibliotheken und wissenschaftliche Pakete",
"sequentialthinking": "MCP-Server-Implementierung mit strukturiertem Denkprozess, der dynamische und reflektierende Problemlösungen ermöglicht"
},
diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json
index e26abd58fd..ae7b855646 100644
--- a/src/renderer/src/i18n/translate/el-gr.json
+++ b/src/renderer/src/i18n/translate/el-gr.json
@@ -31,27 +31,31 @@
}
},
"gitBash": {
- "autoDetected": "[to be translated]:Using auto-detected Git Bash",
+ "autoDetected": "Χρησιμοποιείται αυτόματα εντοπισμένο Git Bash",
+ "autoDiscoveredHint": "[to be translated]:Auto-discovered",
"clear": {
- "button": "[to be translated]:Clear custom path"
+ "button": "Διαγραφή προσαρμοσμένης διαδρομής"
},
- "customPath": "[to be translated]:Using custom path: {{path}}",
+ "customPath": "Χρησιμοποιείται προσαρμοσμένη διαδρομή: {{path}}",
"error": {
"description": "Το Git Bash απαιτείται για την εκτέλεση πρακτόρων στα Windows. Ο πράκτορας δεν μπορεί να λειτουργήσει χωρίς αυτό. Παρακαλούμε εγκαταστήστε το Git για Windows από",
"recheck": "Επανέλεγχος Εγκατάστασης του Git Bash",
+ "required": "[to be translated]:Git Bash path is required on Windows",
"title": "Απαιτείται Git Bash"
},
"found": {
- "title": "[to be translated]:Git Bash configured"
+ "title": "Το Git Bash διαμορφώθηκε"
},
"notFound": "Το Git Bash δεν βρέθηκε. Παρακαλώ εγκαταστήστε το πρώτα.",
"pick": {
- "button": "[to be translated]:Select Git Bash Path",
- "failed": "[to be translated]:Failed to set Git Bash path",
- "invalidPath": "[to be translated]:Selected file is not a valid Git Bash executable (bash.exe).",
- "title": "[to be translated]:Select Git Bash executable"
+ "button": "Επιλογή διαδρομής Git Bash",
+ "failed": "Αποτυχία ορισμού διαδρομής Git Bash",
+ "invalidPath": "Το επιλεγμένο αρχείο δεν είναι έγκυρο εκτελέσιμο Git Bash (bash.exe).",
+ "title": "Επιλογή εκτελέσιμου Git Bash"
},
- "success": "Το Git Bash εντοπίστηκε με επιτυχία!"
+ "placeholder": "[to be translated]:Select bash.exe path",
+ "success": "Το Git Bash εντοπίστηκε με επιτυχία!",
+ "tooltip": "[to be translated]:Git Bash is required to run agents on Windows. Install from git-scm.com if not available."
},
"input": {
"placeholder": "Εισάγετε το μήνυμά σας εδώ, στείλτε με {{key}} - @ επιλέξτε διαδρομή, / επιλέξτε εντολή"
@@ -472,6 +476,7 @@
"button": "Εισαγωγή",
"error": {
"fetch_failed": "Αποτυχία λήψης δεδομένων από το URL",
+ "file_required": "Παρακαλώ επιλέξτε πρώτα ένα αρχείο",
"invalid_format": "Μη έγκυρη μορφή βοηθού: λείπουν υποχρεωτικά πεδία",
"url_required": "Παρακαλώ εισάγετε ένα URL"
},
@@ -489,8 +494,11 @@
"button": "Μαζική Διαγραφή",
"confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τους επιλεγμένους {{count}} βοηθούς;"
},
+ "batch_export": {
+ "button": "Εξαγωγή"
+ },
"mode": {
- "delete": "Διαγραφή",
+ "manage": "Διαχειριστείτε",
"sort": "Ταξινόμηση"
},
"title": "Διαχείριση βοηθών"
@@ -540,14 +548,23 @@
"more": "Ρυθμίσεις Βοηθού",
"prompt": "Ρυθμίσεις προκαλύμματος",
"reasoning_effort": {
+ "auto": "Αυτοκίνητο",
+ "auto_description": "Ευέλικτος καθορισμός της προσπάθειας συλλογισμού",
"default": "Προεπιλογή",
+ "default_description": "Εξαρτηθείτε από την προεπιλεγμένη συμπεριφορά του μοντέλου, χωρίς καμία διαμόρφωση.",
"high": "Μεγάλο",
+ "high_description": "Υψηλού επιπέδου συλλογισμός",
"label": "Μήκος λογισμικού αλυσίδας",
"low": "Μικρό",
+ "low_description": "Χαμηλού επιπέδου συλλογιστική",
"medium": "Μεσαίο",
+ "medium_description": "Αιτιολόγηση μεσαίου επιπέδου",
"minimal": "ελάχιστος",
+ "minimal_description": "Ελάχιστος συλλογισμός",
"off": "Απενεργοποίηση",
- "xhigh": "[to be translated]:Extra High"
+ "off_description": "Απενεργοποίηση λογικής",
+ "xhigh": "Εξαιρετικά Υψηλή",
+ "xhigh_description": "Εξαιρετικά υψηλού επιπέδου συλλογισμός"
},
"regular_phrases": {
"add": "Προσθήκη φράσης",
@@ -1027,6 +1044,29 @@
"yuque": "Εξαγωγή στο Yuque"
},
"list": "Λίστα θεμάτων",
+ "manage": {
+ "clear_selection": "Καθαρισμός Επιλογής",
+ "delete": {
+ "confirm": {
+ "content": "Είσαι βέβαιος ότι θέλεις να διαγράψεις {{count}} επιλεγμένο(α) θέμα(τα); Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.",
+ "title": "Διαγραφή Θεμάτων"
+ },
+ "success": "Διαγράφηκαν {{count}} θέμα(τα)"
+ },
+ "deselect_all": "Αποεπιλογή όλων",
+ "error": {
+ "at_least_one": "Τουλάχιστον ένα θέμα πρέπει να διατηρηθεί"
+ },
+ "move": {
+ "button": "Μετακίνηση",
+ "placeholder": "Επιλέξτε στόχο",
+ "success": "Μετακινήθηκαν {{count}} θέματα"
+ },
+ "pinned": "Καρφιτσωμένα Θέματα",
+ "selected_count": "{{count}} επιλεγμένα",
+ "title": "Διαχείριση Θεμάτων",
+ "unpinned": "Ξεκαρφωμένα Θέματα"
+ },
"move_to": "Μετακίνηση στο",
"new": "Ξεκινήστε νέα συζήτηση",
"pin": "Σταθερά θέματα",
@@ -1037,6 +1077,10 @@
"label": "Προσδοκώμενα όρια",
"tips": "Προσδοκώμενα όρια: προσθέτει επιπλέον επιστημονικές προσθήκες για το παρόν θέμα"
},
+ "search": {
+ "placeholder": "Αναζήτηση θεμάτων...",
+ "title": "Αναζήτηση"
+ },
"title": "Θέματα",
"unpin": "Ξεκαρφίτσωμα"
},
@@ -1221,11 +1265,13 @@
}
},
"stop": "σταματήστε",
+ "subscribe": "Εγγραφείτε",
"success": "Επιτυχία",
"swap": "Εναλλαγή",
"topics": "Θέματα",
"unknown": "Άγνωστο",
"unnamed": "Χωρίς όνομα",
+ "unsubscribe": "Απεγγραφή",
"update_success": "Επιτυχής ενημέρωση",
"upload_files": "Ανέβασμα αρχείου",
"warning": "Προσοχή",
@@ -2152,6 +2198,7 @@
"collapse": "σύμπτυξη",
"content_placeholder": "Παρακαλώ εισαγάγετε το περιεχόμενο των σημειώσεων...",
"copyContent": "αντιγραφή περιεχομένου",
+ "crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "διαγραφή",
"delete_confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το {{type}};",
"delete_folder_confirm": "Θέλετε να διαγράψετε τον φάκελο «{{name}}» και όλο το περιεχόμενό του;",
@@ -2596,6 +2643,7 @@
"lanyun": "Λανιούν Τεχνολογία",
"lmstudio": "LM Studio",
"longcat": "Τσίρο",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "MiniMax",
"mistral": "Mistral",
"modelscope": "ModelScope Magpie",
@@ -3884,6 +3932,7 @@
"builtinServers": "Ενσωματωμένοι Διακομιστές",
"builtinServersDescriptions": {
"brave_search": "μια εφαρμογή διακομιστή MCP που ενσωματώνει το Brave Search API, παρέχοντας δυνατότητες αναζήτησης στον ιστό και τοπικής αναζήτησης. Απαιτείται η ρύθμιση της μεταβλητής περιβάλλοντος BRAVE_API_KEY",
+ "browser": "Ελέγχει ένα headless παράθυρο Electron μέσω του Chrome DevTools Protocol. Εργαλεία: άνοιγμα URL, εκτέλεση JS μίας γραμμής, επαναφορά συνεδρίας.",
"didi_mcp": "Διακομιστής DiDi MCP που παρέχει υπηρεσίες μεταφοράς συμπεριλαμβανομένης της αναζήτησης χαρτών, εκτίμησης τιμών, διαχείρισης παραγγελιών και παρακολούθησης οδηγών. Διαθέσιμο μόνο στην ηπειρωτική Κίνα. Απαιτεί διαμόρφωση της μεταβλητής περιβάλλοντος DIDI_API_KEY",
"dify_knowledge": "Η υλοποίηση του Dify για τον διακομιστή MCP, παρέχει μια απλή API για να αλληλεπιδρά με το Dify. Απαιτείται η ρύθμιση του κλειδιού Dify",
"fetch": "Εξυπηρετητής MCP για λήψη περιεχομένου ιστοσελίδας URL",
@@ -3891,6 +3940,7 @@
"mcp_auto_install": "Αυτόματη εγκατάσταση υπηρεσίας MCP (προβολή)",
"memory": "Βασική υλοποίηση μόνιμης μνήμης με βάση τοπικό γράφημα γνώσης. Αυτό επιτρέπει στο μοντέλο να θυμάται πληροφορίες σχετικές με τον χρήστη ανάμεσα σε διαφορετικές συνομιλίες. Απαιτείται η ρύθμιση της μεταβλητής περιβάλλοντος MEMORY_FILE_PATH.",
"no": "Χωρίς περιγραφή",
+ "nowledge_mem": "[to be translated]:Requires Nowledge Mem app running locally. Keeps AI chats, tools, notes, agents, and files in private memory on your computer. Download from https://mem.nowledge.co/",
"python": "Εκτελέστε κώδικα Python σε ένα ασφαλές περιβάλλον sandbox. Χρησιμοποιήστε το Pyodide για να εκτελέσετε Python, υποστηρίζοντας την πλειονότητα των βιβλιοθηκών της τυπικής βιβλιοθήκης και των πακέτων επιστημονικού υπολογισμού",
"sequentialthinking": "ένας εξυπηρετητής MCP που υλοποιείται, παρέχοντας εργαλεία για δυναμική και αναστοχαστική επίλυση προβλημάτων μέσω δομημένων διαδικασιών σκέψης"
},
diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json
index 4316c80616..26b499cba2 100644
--- a/src/renderer/src/i18n/translate/es-es.json
+++ b/src/renderer/src/i18n/translate/es-es.json
@@ -32,6 +32,7 @@
},
"gitBash": {
"autoDetected": "Usando Git Bash detectado automáticamente",
+ "autoDiscoveredHint": "[to be translated]:Auto-discovered",
"clear": {
"button": "Borrar ruta personalizada"
},
@@ -39,6 +40,7 @@
"error": {
"description": "Se requiere Git Bash para ejecutar agentes en Windows. El agente no puede funcionar sin él. Instale Git para Windows desde",
"recheck": "Volver a verificar la instalación de Git Bash",
+ "required": "[to be translated]:Git Bash path is required on Windows",
"title": "Git Bash Requerido"
},
"found": {
@@ -51,7 +53,9 @@
"invalidPath": "El archivo seleccionado no es un ejecutable válido de Git Bash (bash.exe).",
"title": "Seleccionar ejecutable de Git Bash"
},
- "success": "¡Git Bash detectado con éxito!"
+ "placeholder": "[to be translated]:Select bash.exe path",
+ "success": "¡Git Bash detectado con éxito!",
+ "tooltip": "[to be translated]:Git Bash is required to run agents on Windows. Install from git-scm.com if not available."
},
"input": {
"placeholder": "Introduce tu mensaje aquí, envía con {{key}} - @ seleccionar ruta, / seleccionar comando"
@@ -472,6 +476,7 @@
"button": "Importar",
"error": {
"fetch_failed": "Error al obtener datos desde la URL",
+ "file_required": "Por favor, selecciona primero un archivo",
"invalid_format": "Formato de asistente inválido: faltan campos obligatorios",
"url_required": "Por favor introduce una URL"
},
@@ -489,8 +494,11 @@
"button": "Eliminación por lotes",
"confirm": "¿Estás seguro de que quieres eliminar los {{count}} asistentes seleccionados?"
},
+ "batch_export": {
+ "button": "Exportar"
+ },
"mode": {
- "delete": "Eliminar",
+ "manage": "Gestionar",
"sort": "Ordenar"
},
"title": "Gestionar asistentes"
@@ -540,14 +548,23 @@
"more": "Configuración del Asistente",
"prompt": "Configuración de Palabras Clave",
"reasoning_effort": {
+ "auto": "Automóvil",
+ "auto_description": "Determinar flexiblemente el esfuerzo de razonamiento",
"default": "Por defecto",
+ "default_description": "Depender del comportamiento predeterminado del modelo, sin ninguna configuración.",
"high": "Largo",
+ "high_description": "Razonamiento de alto nivel",
"label": "Longitud de Cadena de Razonamiento",
"low": "Corto",
+ "low_description": "Razonamiento de bajo nivel",
"medium": "Medio",
+ "medium_description": "Razonamiento de nivel medio",
"minimal": "minimal",
+ "minimal_description": "Razonamiento mínimo",
"off": "Apagado",
- "xhigh": "[to be translated]:Extra High"
+ "off_description": "Deshabilitar razonamiento",
+ "xhigh": "Extra Alta",
+ "xhigh_description": "Razonamiento de extra alto nivel"
},
"regular_phrases": {
"add": "Agregar frase",
@@ -1027,6 +1044,29 @@
"yuque": "Exportar a Yuque"
},
"list": "Lista de temas",
+ "manage": {
+ "clear_selection": "Borrar selección",
+ "delete": {
+ "confirm": {
+ "content": "¿Estás seguro de que quieres eliminar {{count}} tema(s) seleccionado(s)? Esta acción no se puede deshacer.",
+ "title": "Eliminar Temas"
+ },
+ "success": "Eliminado(s) {{count}} tema(s)"
+ },
+ "deselect_all": "Deseleccionar todo",
+ "error": {
+ "at_least_one": "Al menos se debe mantener un tema."
+ },
+ "move": {
+ "button": "Mover",
+ "placeholder": "Seleccionar asistente de destino",
+ "success": "Movido(s) {{count}} tema(s)"
+ },
+ "pinned": "Temas Fijados",
+ "selected_count": "{{count}} seleccionado",
+ "title": "Administrar Temas",
+ "unpinned": "Temas no fijados"
+ },
"move_to": "Mover a",
"new": "Iniciar nueva conversación",
"pin": "Fijar tema",
@@ -1037,6 +1077,10 @@
"label": "Palabras clave del tema",
"tips": "Palabras clave del tema: proporcionar indicaciones adicionales para el tema actual"
},
+ "search": {
+ "placeholder": "Buscar temas...",
+ "title": "Buscar"
+ },
"title": "Tema",
"unpin": "Quitar fijación"
},
@@ -1221,11 +1265,13 @@
}
},
"stop": "Detener",
+ "subscribe": "Suscribirse",
"success": "Éxito",
"swap": "Intercambiar",
"topics": "Temas",
"unknown": "Desconocido",
"unnamed": "Sin nombre",
+ "unsubscribe": "Cancelar suscripción",
"update_success": "Actualización exitosa",
"upload_files": "Subir archivo",
"warning": "Advertencia",
@@ -2152,6 +2198,7 @@
"collapse": "ocultar",
"content_placeholder": "Introduzca el contenido de la nota...",
"copyContent": "copiar contenido",
+ "crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "eliminar",
"delete_confirm": "¿Estás seguro de que deseas eliminar este {{type}}?",
"delete_folder_confirm": "¿Está seguro de que desea eliminar la carpeta \"{{name}}\" y todo su contenido?",
@@ -2596,6 +2643,7 @@
"lanyun": "Tecnología Lanyun",
"lmstudio": "Estudio LM",
"longcat": "Totoro",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "Minimax",
"mistral": "Mistral",
"modelscope": "ModelScope Módulo",
@@ -3884,6 +3932,7 @@
"builtinServers": "Servidores integrados",
"builtinServersDescriptions": {
"brave_search": "Una implementación de servidor MCP que integra la API de búsqueda de Brave, proporcionando funciones de búsqueda web y búsqueda local. Requiere configurar la variable de entorno BRAVE_API_KEY",
+ "browser": "Controla una ventana Electron headless mediante Chrome DevTools Protocol. Herramientas: abrir URL, ejecutar JS de una línea, reiniciar sesión.",
"didi_mcp": "Servidor DiDi MCP que proporciona servicios de transporte incluyendo búsqueda de mapas, estimación de precios, gestión de pedidos y seguimiento de conductores. Disponible solo en China Continental. Requiere configurar la variable de entorno DIDI_API_KEY",
"dify_knowledge": "Implementación del servidor MCP de Dify, que proporciona una API sencilla para interactuar con Dify. Se requiere configurar la clave de Dify.",
"fetch": "Servidor MCP para obtener el contenido de la página web de una URL",
@@ -3891,6 +3940,7 @@
"mcp_auto_install": "Instalación automática del servicio MCP (versión beta)",
"memory": "Implementación básica de memoria persistente basada en un grafo de conocimiento local. Esto permite que el modelo recuerde información relevante del usuario entre diferentes conversaciones. Es necesario configurar la variable de entorno MEMORY_FILE_PATH.",
"no": "sin descripción",
+ "nowledge_mem": "[to be translated]:Requires Nowledge Mem app running locally. Keeps AI chats, tools, notes, agents, and files in private memory on your computer. Download from https://mem.nowledge.co/",
"python": "Ejecuta código Python en un entorno sandbox seguro. Usa Pyodide para ejecutar Python, compatible con la mayoría de las bibliotecas estándar y paquetes de cálculo científico.",
"sequentialthinking": "Una implementación de servidor MCP que proporciona herramientas para la resolución dinámica y reflexiva de problemas mediante un proceso de pensamiento estructurado"
},
diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json
index 66b9fef86d..4dff56d7e9 100644
--- a/src/renderer/src/i18n/translate/fr-fr.json
+++ b/src/renderer/src/i18n/translate/fr-fr.json
@@ -32,6 +32,7 @@
},
"gitBash": {
"autoDetected": "Utilisation de Git Bash détecté automatiquement",
+ "autoDiscoveredHint": "[to be translated]:Auto-discovered",
"clear": {
"button": "Effacer le chemin personnalisé"
},
@@ -39,6 +40,7 @@
"error": {
"description": "Git Bash est requis pour exécuter des agents sur Windows. L'agent ne peut pas fonctionner sans. Veuillez installer Git pour Windows depuis",
"recheck": "Revérifier l'installation de Git Bash",
+ "required": "[to be translated]:Git Bash path is required on Windows",
"title": "Git Bash requis"
},
"found": {
@@ -51,7 +53,9 @@
"invalidPath": "Le fichier sélectionné n'est pas un exécutable Git Bash valide (bash.exe).",
"title": "Sélectionner l'exécutable Git Bash"
},
- "success": "Git Bash détecté avec succès !"
+ "placeholder": "[to be translated]:Select bash.exe path",
+ "success": "Git Bash détecté avec succès !",
+ "tooltip": "[to be translated]:Git Bash is required to run agents on Windows. Install from git-scm.com if not available."
},
"input": {
"placeholder": "Entrez votre message ici, envoyez avec {{key}} - @ sélectionner le chemin, / sélectionner la commande"
@@ -472,6 +476,7 @@
"button": "Importer",
"error": {
"fetch_failed": "Échec de la récupération des données depuis l'URL",
+ "file_required": "Veuillez d'abord sélectionner un fichier",
"invalid_format": "Format d'assistant invalide : champs obligatoires manquants",
"url_required": "Veuillez saisir une URL"
},
@@ -489,8 +494,11 @@
"button": "Suppression par lot",
"confirm": "Êtes-vous sûr de vouloir supprimer les {{count}} assistants sélectionnés ?"
},
+ "batch_export": {
+ "button": "Exporter"
+ },
"mode": {
- "delete": "Supprimer",
+ "manage": "Gérer",
"sort": "Trier"
},
"title": "Gérer les assistants"
@@ -540,14 +548,23 @@
"more": "Paramètres de l'assistant",
"prompt": "Paramètres de l'invite",
"reasoning_effort": {
+ "auto": "Auto",
+ "auto_description": "Déterminer de manière flexible l'effort de raisonnement",
"default": "Par défaut",
+ "default_description": "Dépendre du comportement par défaut du modèle, sans aucune configuration.",
"high": "Long",
+ "high_description": "Raisonnement de haut niveau",
"label": "Longueur de la chaîne de raisonnement",
"low": "Court",
+ "low_description": "Raisonnement de bas niveau",
"medium": "Moyen",
+ "medium_description": "Raisonnement de niveau moyen",
"minimal": "minimal",
+ "minimal_description": "Réflexion minimale",
"off": "Off",
- "xhigh": "[to be translated]:Extra High"
+ "off_description": "Désactiver le raisonnement",
+ "xhigh": "Très élevée",
+ "xhigh_description": "Raisonnement de très haut niveau"
},
"regular_phrases": {
"add": "Добавить фразу",
@@ -1027,6 +1044,29 @@
"yuque": "Exporter vers Yuque"
},
"list": "Liste des sujets",
+ "manage": {
+ "clear_selection": "Effacer la sélection",
+ "delete": {
+ "confirm": {
+ "content": "Êtes-vous sûr de vouloir supprimer {{count}} sujet(s) sélectionné(s) ? Cette action est irréversible.",
+ "title": "Supprimer des sujets"
+ },
+ "success": "Supprimé {{count}} sujet(s)"
+ },
+ "deselect_all": "Tout désélectionner",
+ "error": {
+ "at_least_one": "Au moins un sujet doit être conservé"
+ },
+ "move": {
+ "button": "Déplacer",
+ "placeholder": "Sélectionner la cible",
+ "success": "Déplacé {{count}} sujet(s)"
+ },
+ "pinned": "Sujets épinglés",
+ "selected_count": "{{count}} sélectionné",
+ "title": "Gérer les sujets",
+ "unpinned": "Sujets non épinglés"
+ },
"move_to": "Déplacer vers",
"new": "Commencer une nouvelle conversation",
"pin": "Fixer le sujet",
@@ -1037,6 +1077,10 @@
"label": "Indicateurs de sujet",
"tips": "Indicateurs de sujet : fournir des indications supplémentaires pour le sujet actuel"
},
+ "search": {
+ "placeholder": "Rechercher des sujets...",
+ "title": "Rechercher"
+ },
"title": "Sujet",
"unpin": "Annuler le fixage"
},
@@ -1221,11 +1265,13 @@
}
},
"stop": "Arrêter",
+ "subscribe": "S'abonner",
"success": "Succès",
"swap": "Échanger",
"topics": "Sujets",
"unknown": "Inconnu",
"unnamed": "Sans nom",
+ "unsubscribe": "Se désabonner",
"update_success": "Mise à jour réussie",
"upload_files": "Uploader des fichiers",
"warning": "Avertissement",
@@ -2152,6 +2198,7 @@
"collapse": "réduire",
"content_placeholder": "Veuillez saisir le contenu de la note...",
"copyContent": "contenu copié",
+ "crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "supprimer",
"delete_confirm": "Êtes-vous sûr de vouloir supprimer ce {{type}} ?",
"delete_folder_confirm": "Êtes-vous sûr de vouloir supprimer le dossier \"{{name}}\" et tout son contenu ?",
@@ -2596,6 +2643,7 @@
"lanyun": "Technologie Lan Yun",
"lmstudio": "Studio LM",
"longcat": "Mon voisin Totoro",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "MiniMax",
"mistral": "Mistral",
"modelscope": "ModelScope MoDa",
@@ -3884,6 +3932,7 @@
"builtinServers": "Serveurs intégrés",
"builtinServersDescriptions": {
"brave_search": "Une implémentation de serveur MCP intégrant l'API de recherche Brave, offrant des fonctionnalités de recherche web et locale. Nécessite la configuration de la variable d'environnement BRAVE_API_KEY",
+ "browser": "Contrôle une fenêtre Electron headless via Chrome DevTools Protocol. Outils : ouvrir une URL, exécuter du JS en une ligne, réinitialiser la session.",
"didi_mcp": "Serveur DiDi MCP fournissant des services de transport incluant la recherche de cartes, l'estimation des prix, la gestion des commandes et le suivi des conducteurs. Disponible uniquement en Chine continentale. Nécessite la configuration de la variable d'environnement DIDI_API_KEY",
"dify_knowledge": "Implémentation du serveur MCP de Dify, fournissant une API simple pour interagir avec Dify. Nécessite la configuration de la clé Dify",
"fetch": "serveur MCP utilisé pour récupérer le contenu des pages web URL",
@@ -3891,6 +3940,7 @@
"mcp_auto_install": "Installation automatique du service MCP (version bêta)",
"memory": "Implémentation de base de mémoire persistante basée sur un graphe de connaissances local. Cela permet au modèle de se souvenir des informations relatives à l'utilisateur entre différentes conversations. Nécessite la configuration de la variable d'environnement MEMORY_FILE_PATH.",
"no": "sans description",
+ "nowledge_mem": "[to be translated]:Requires Nowledge Mem app running locally. Keeps AI chats, tools, notes, agents, and files in private memory on your computer. Download from https://mem.nowledge.co/",
"python": "Exécutez du code Python dans un environnement bac à sable sécurisé. Utilisez Pyodide pour exécuter Python, prenant en charge la plupart des bibliothèques standard et des packages de calcul scientifique.",
"sequentialthinking": "Un serveur MCP qui fournit des outils permettant une résolution dynamique et réflexive des problèmes à travers un processus de pensée structuré"
},
diff --git a/src/renderer/src/i18n/translate/ja-jp.json b/src/renderer/src/i18n/translate/ja-jp.json
index 493d693580..090a1927cd 100644
--- a/src/renderer/src/i18n/translate/ja-jp.json
+++ b/src/renderer/src/i18n/translate/ja-jp.json
@@ -31,27 +31,31 @@
}
},
"gitBash": {
- "autoDetected": "[to be translated]:Using auto-detected Git Bash",
+ "autoDetected": "自動検出されたGit Bashを使用中",
+ "autoDiscoveredHint": "[to be translated]:Auto-discovered",
"clear": {
- "button": "[to be translated]:Clear custom path"
+ "button": "カスタムパスをクリア"
},
- "customPath": "[to be translated]:Using custom path: {{path}}",
+ "customPath": "カスタムパスを使用中: {{path}}",
"error": {
"description": "Windowsでエージェントを実行するにはGit Bashが必要です。これがないとエージェントは動作しません。以下からGit for Windowsをインストールしてください。",
"recheck": "Git Bashのインストールを再確認してください",
+ "required": "[to be translated]:Git Bash path is required on Windows",
"title": "Git Bashが必要です"
},
"found": {
- "title": "[to be translated]:Git Bash configured"
+ "title": "Git Bashが設定されました"
},
"notFound": "Git Bash が見つかりません。先にインストールしてください。",
"pick": {
- "button": "[to be translated]:Select Git Bash Path",
- "failed": "[to be translated]:Failed to set Git Bash path",
- "invalidPath": "[to be translated]:Selected file is not a valid Git Bash executable (bash.exe).",
- "title": "[to be translated]:Select Git Bash executable"
+ "button": "Git Bashパスを選択",
+ "failed": "Git Bashパスの設定に失敗しました",
+ "invalidPath": "選択されたファイルは有効なGit Bash実行ファイル(bash.exe)ではありません。",
+ "title": "Git Bash実行ファイルを選択"
},
- "success": "Git Bashが正常に検出されました!"
+ "placeholder": "[to be translated]:Select bash.exe path",
+ "success": "Git Bashが正常に検出されました!",
+ "tooltip": "[to be translated]:Git Bash is required to run agents on Windows. Install from git-scm.com if not available."
},
"input": {
"placeholder": "メッセージをここに入力し、{{key}}で送信 - @でパスを選択、/でコマンドを選択"
@@ -472,6 +476,7 @@
"button": "インポート",
"error": {
"fetch_failed": "URLからのデータ取得に失敗しました",
+ "file_required": "まずファイルを選択してください",
"invalid_format": "無効なアシスタント形式:必須フィールドが不足しています",
"url_required": "URLを入力してください"
},
@@ -489,8 +494,11 @@
"button": "バッチ削除",
"confirm": "選択した{{count}}件のアシスタントを削除してもよろしいですか?"
},
+ "batch_export": {
+ "button": "エクスポート"
+ },
"mode": {
- "delete": "削除",
+ "manage": "管理",
"sort": "並べ替え"
},
"title": "アシスタントを管理"
@@ -540,14 +548,23 @@
"more": "アシスタント設定",
"prompt": "プロンプト設定",
"reasoning_effort": {
+ "auto": "自動",
+ "auto_description": "推論にかける労力を柔軟に調整する",
"default": "デフォルト",
+ "default_description": "設定なしで、モデルの既定の動作に依存する。",
"high": "最大限の思考",
+ "high_description": "高度な推論",
"label": "思考連鎖の長さ",
"low": "少しの思考",
+ "low_description": "低レベル推論",
"medium": "普通の思考",
+ "medium_description": "中レベル推論",
"minimal": "最小限の思考",
+ "minimal_description": "最小限の推論",
"off": "オフ",
- "xhigh": "[to be translated]:Extra High"
+ "off_description": "推論を無効にする",
+ "xhigh": "超高",
+ "xhigh_description": "超高度な推論"
},
"regular_phrases": {
"add": "プロンプトを追加",
@@ -1027,6 +1044,29 @@
"yuque": "語雀にエクスポート"
},
"list": "トピックリスト",
+ "manage": {
+ "clear_selection": "選択をクリア",
+ "delete": {
+ "confirm": {
+ "content": "{{count}}件の選択したトピックを削除してもよろしいですか?この操作は元に戻せません。",
+ "title": "トピックを削除"
+ },
+ "success": "{{count}}件のトピックを削除しました"
+ },
+ "deselect_all": "すべての選択を解除",
+ "error": {
+ "at_least_one": "少なくとも1つのトピックは保持されなければなりません"
+ },
+ "move": {
+ "button": "移動",
+ "placeholder": "対象を選択",
+ "success": "{{count}}件のトピックを移動しました"
+ },
+ "pinned": "ピン留めされたトピック",
+ "selected_count": "{{count}} 選択済み",
+ "title": "トピックを管理",
+ "unpinned": "ピン留めされていないトピック"
+ },
"move_to": "移動先",
"new": "新しいトピック",
"pin": "トピックを固定",
@@ -1037,6 +1077,10 @@
"label": "トピック提示語",
"tips": "トピック提示語:現在のトピックに対して追加の補足提示語を提供"
},
+ "search": {
+ "placeholder": "トピックを検索...",
+ "title": "検索"
+ },
"title": "トピック",
"unpin": "固定解除"
},
@@ -1221,11 +1265,13 @@
}
},
"stop": "停止",
+ "subscribe": "購読",
"success": "成功",
"swap": "交換",
"topics": "トピック",
"unknown": "Unknown",
"unnamed": "無題",
+ "unsubscribe": "配信停止",
"update_success": "更新成功",
"upload_files": "ファイルをアップロードする",
"warning": "警告",
@@ -2152,6 +2198,7 @@
"collapse": "閉じる",
"content_placeholder": "メモの内容を入力してください...",
"copyContent": "コンテンツをコピーします",
+ "crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "削除",
"delete_confirm": "この{{type}}を本当に削除しますか?",
"delete_folder_confirm": "「{{name}}」フォルダーとそのすべての内容を削除してもよろしいですか?",
@@ -2596,6 +2643,7 @@
"lanyun": "LANYUN",
"lmstudio": "LM Studio",
"longcat": "トトロ",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "MiniMax",
"mistral": "Mistral",
"modelscope": "ModelScope",
@@ -3884,6 +3932,7 @@
"builtinServers": "組み込みサーバー",
"builtinServersDescriptions": {
"brave_search": "Brave検索APIを統合したMCPサーバーの実装で、ウェブ検索とローカル検索の両機能を提供します。BRAVE_API_KEY環境変数の設定が必要です",
+ "browser": "Chrome DevTools Protocolを介してheadless Electronウィンドウを制御します。ツール:URLを開く、単一行JSを実行、セッションをリセット。",
"didi_mcp": "DiDi MCPサーバーは、地図検索、料金見積もり、注文管理、ドライバー追跡を含むライドシェアサービスを提供します。中国本土でのみ利用可能です。DIDI_API_KEY環境変数の設定が必要です",
"dify_knowledge": "DifyのMCPサーバー実装は、Difyと対話するためのシンプルなAPIを提供します。Dify Keyの設定が必要です。",
"fetch": "URLのウェブページコンテンツを取得するためのMCPサーバー",
@@ -3891,6 +3940,7 @@
"mcp_auto_install": "MCPサービスの自動インストール(ベータ版)",
"memory": "ローカルのナレッジグラフに基づく永続的なメモリの基本的な実装です。これにより、モデルは異なる会話間でユーザーの関連情報を記憶できるようになります。MEMORY_FILE_PATH 環境変数の設定が必要です。",
"no": "説明なし",
+ "nowledge_mem": "Nowledge Mem アプリをローカルで実行する必要があります。AI チャット、ツール、ノート、エージェント、ファイルをコンピューター上のプライベートメモリに保存します。https://mem.nowledge.co/ からダウンロードしてください",
"python": "安全なサンドボックス環境でPythonコードを実行します。Pyodideを使用してPythonを実行し、ほとんどの標準ライブラリと科学計算パッケージをサポートしています。",
"sequentialthinking": "構造化された思考プロセスを通じて動的かつ反省的な問題解決を行うためのツールを提供するMCPサーバーの実装"
},
diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json
index fba1a8e706..50cc4fae03 100644
--- a/src/renderer/src/i18n/translate/pt-pt.json
+++ b/src/renderer/src/i18n/translate/pt-pt.json
@@ -32,6 +32,7 @@
},
"gitBash": {
"autoDetected": "Usando Git Bash detectado automaticamente",
+ "autoDiscoveredHint": "[to be translated]:Auto-discovered",
"clear": {
"button": "Limpar caminho personalizado"
},
@@ -39,6 +40,7 @@
"error": {
"description": "O Git Bash é necessário para executar agentes no Windows. O agente não pode funcionar sem ele. Por favor, instale o Git para Windows a partir de",
"recheck": "Reverificar a Instalação do Git Bash",
+ "required": "[to be translated]:Git Bash path is required on Windows",
"title": "Git Bash Necessário"
},
"found": {
@@ -51,7 +53,9 @@
"invalidPath": "O arquivo selecionado não é um executável válido do Git Bash (bash.exe).",
"title": "Selecionar executável do Git Bash"
},
- "success": "Git Bash detectado com sucesso!"
+ "placeholder": "[to be translated]:Select bash.exe path",
+ "success": "Git Bash detectado com sucesso!",
+ "tooltip": "[to be translated]:Git Bash is required to run agents on Windows. Install from git-scm.com if not available."
},
"input": {
"placeholder": "Digite sua mensagem aqui, envie com {{key}} - @ selecionar caminho, / selecionar comando"
@@ -472,6 +476,7 @@
"button": "Importar",
"error": {
"fetch_failed": "Falha ao obter dados do URL",
+ "file_required": "Por favor, selecione um arquivo primeiro",
"invalid_format": "Formato de assistente inválido: campos obrigatórios em falta",
"url_required": "Por favor insere um URL"
},
@@ -489,8 +494,11 @@
"button": "Exclusão em Lote",
"confirm": "Tem certeza de que deseja excluir os {{count}} assistentes selecionados?"
},
+ "batch_export": {
+ "button": "Exportar"
+ },
"mode": {
- "delete": "Excluir",
+ "manage": "Gerenciar",
"sort": "Ordenar"
},
"title": "Gerir assistentes"
@@ -540,14 +548,23 @@
"more": "Configurações do Assistente",
"prompt": "Configurações de Prompt",
"reasoning_effort": {
+ "auto": "Automóvel",
+ "auto_description": "Determinar flexivelmente o esforço de raciocínio",
"default": "Padrão",
+ "default_description": "Depender do comportamento padrão do modelo, sem qualquer configuração.",
"high": "Longo",
+ "high_description": "Raciocínio de alto nível",
"label": "Comprimento da Cadeia de Raciocínio",
"low": "Curto",
+ "low_description": "Raciocínio de baixo nível",
"medium": "Médio",
+ "medium_description": "Raciocínio de nível médio",
"minimal": "mínimo",
+ "minimal_description": "Raciocínio mínimo",
"off": "Desligado",
- "xhigh": "[to be translated]:Extra High"
+ "off_description": "Desabilitar raciocínio",
+ "xhigh": "Extra Alta",
+ "xhigh_description": "Raciocínio de altíssimo nível"
},
"regular_phrases": {
"add": "Adicionar Frase",
@@ -1027,6 +1044,29 @@
"yuque": "Exportar para Yuque"
},
"list": "Lista de tópicos",
+ "manage": {
+ "clear_selection": "Limpar Seleção",
+ "delete": {
+ "confirm": {
+ "content": "Tem certeza de que deseja excluir {{count}} tópico(s) selecionado(s)? Esta ação não pode ser desfeita.",
+ "title": "Excluir Tópicos"
+ },
+ "success": "Excluído(s) {{count}} tópico(s)"
+ },
+ "deselect_all": "Desmarcar Todos",
+ "error": {
+ "at_least_one": "Pelo menos um tópico deve ser mantido"
+ },
+ "move": {
+ "button": "Mover",
+ "placeholder": "Selecionar assistente de destino",
+ "success": "Movido(s) {{count}} tópico(s)"
+ },
+ "pinned": "Tópicos Fixados",
+ "selected_count": "{{count}} selecionado",
+ "title": "Gerenciar Tópicos",
+ "unpinned": "Tópicos Desafixados"
+ },
"move_to": "Mover para",
"new": "Começar nova conversa",
"pin": "Fixar tópico",
@@ -1037,6 +1077,10 @@
"label": "Prompt do tópico",
"tips": "Prompt do tópico: fornecer prompts adicionais para o tópico atual"
},
+ "search": {
+ "placeholder": "Pesquisar tópicos...",
+ "title": "Pesquisar"
+ },
"title": "Tópicos",
"unpin": "Desfixar"
},
@@ -1221,11 +1265,13 @@
}
},
"stop": "Parar",
+ "subscribe": "Subscrever",
"success": "Sucesso",
"swap": "Trocar",
"topics": "Tópicos",
"unknown": "Desconhecido",
"unnamed": "Sem nome",
+ "unsubscribe": "Cancelar inscrição",
"update_success": "Atualização bem-sucedida",
"upload_files": "Carregar arquivo",
"warning": "Aviso",
@@ -2152,6 +2198,7 @@
"collapse": "[minimizar]",
"content_placeholder": "Introduza o conteúdo da nota...",
"copyContent": "copiar conteúdo",
+ "crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "eliminar",
"delete_confirm": "Tem a certeza de que deseja eliminar este {{type}}?",
"delete_folder_confirm": "Tem a certeza de que deseja eliminar a pasta \"{{name}}\" e todos os seus conteúdos?",
@@ -2596,6 +2643,7 @@
"lanyun": "Lanyun Tecnologia",
"lmstudio": "Estúdio LM",
"longcat": "Totoro",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "Minimax",
"mistral": "Mistral",
"modelscope": "ModelScope MôDá",
@@ -3884,6 +3932,7 @@
"builtinServers": "Servidores integrados",
"builtinServersDescriptions": {
"brave_search": "uma implementação de servidor MCP integrada com a API de pesquisa Brave, fornecendo funcionalidades de pesquisa web e local. Requer a configuração da variável de ambiente BRAVE_API_KEY",
+ "browser": "Controla uma janela Electron headless via Chrome DevTools Protocol. Ferramentas: abrir URL, executar JS de linha única, reiniciar sessão.",
"didi_mcp": "Servidor DiDi MCP que fornece serviços de transporte incluindo pesquisa de mapas, estimativa de preços, gestão de pedidos e rastreamento de motoristas. Disponível apenas na China Continental. Requer configuração da variável de ambiente DIDI_API_KEY",
"dify_knowledge": "Implementação do servidor MCP do Dify, que fornece uma API simples para interagir com o Dify. Requer a configuração da chave Dify",
"fetch": "servidor MCP para obter o conteúdo da página web do URL",
@@ -3891,6 +3940,7 @@
"mcp_auto_install": "Instalação automática do serviço MCP (beta)",
"memory": "Implementação base de memória persistente baseada em grafos de conhecimento locais. Isso permite que o modelo lembre informações relevantes do utilizador entre diferentes conversas. É necessário configurar a variável de ambiente MEMORY_FILE_PATH.",
"no": "sem descrição",
+ "nowledge_mem": "Requer a aplicação Nowledge Mem em execução localmente. Mantém conversas de IA, ferramentas, notas, agentes e ficheiros numa memória privada no seu computador. Transfira de https://mem.nowledge.co/",
"python": "Executar código Python num ambiente sandbox seguro. Utilizar Pyodide para executar Python, suportando a maioria das bibliotecas padrão e pacotes de computação científica",
"sequentialthinking": "Uma implementação de servidor MCP que fornece ferramentas para resolução dinâmica e reflexiva de problemas através de um processo de pensamento estruturado"
},
diff --git a/src/renderer/src/i18n/translate/ru-ru.json b/src/renderer/src/i18n/translate/ru-ru.json
index 2972336406..8a6a781451 100644
--- a/src/renderer/src/i18n/translate/ru-ru.json
+++ b/src/renderer/src/i18n/translate/ru-ru.json
@@ -32,6 +32,7 @@
},
"gitBash": {
"autoDetected": "Используется автоматически обнаруженный Git Bash",
+ "autoDiscoveredHint": "[to be translated]:Auto-discovered",
"clear": {
"button": "Очистить пользовательский путь"
},
@@ -39,6 +40,7 @@
"error": {
"description": "Для запуска агентов в Windows требуется Git Bash. Без него агент не может работать. Пожалуйста, установите Git для Windows с",
"recheck": "Повторная проверка установки Git Bash",
+ "required": "[to be translated]:Git Bash path is required on Windows",
"title": "Требуется Git Bash"
},
"found": {
@@ -51,7 +53,9 @@
"invalidPath": "Выбранный файл не является допустимым исполняемым файлом Git Bash (bash.exe).",
"title": "Выберите исполняемый файл Git Bash"
},
- "success": "Git Bash успешно обнаружен!"
+ "placeholder": "[to be translated]:Select bash.exe path",
+ "success": "Git Bash успешно обнаружен!",
+ "tooltip": "[to be translated]:Git Bash is required to run agents on Windows. Install from git-scm.com if not available."
},
"input": {
"placeholder": "Введите ваше сообщение здесь, отправьте с помощью {{key}} — @ выбрать путь, / выбрать команду"
@@ -472,6 +476,7 @@
"button": "Импортировать",
"error": {
"fetch_failed": "Ошибка получения данных с URL",
+ "file_required": "Сначала выберите файл",
"invalid_format": "Неверный формат помощника: отсутствуют обязательные поля",
"url_required": "Пожалуйста, введите URL"
},
@@ -489,8 +494,11 @@
"button": "Массовое удаление",
"confirm": "Вы уверены, что хотите удалить выбранных {{count}} ассистентов?"
},
+ "batch_export": {
+ "button": "Экспорт"
+ },
"mode": {
- "delete": "Удалить",
+ "manage": "Управлять",
"sort": "Сортировать"
},
"title": "Управление помощниками"
@@ -540,14 +548,23 @@
"more": "Настройки ассистента",
"prompt": "Настройки промптов",
"reasoning_effort": {
+ "auto": "Авто",
+ "auto_description": "Гибко определяйте усилие на рассуждение",
"default": "По умолчанию",
+ "default_description": "Полагаться на поведение модели по умолчанию, без какой-либо конфигурации.",
"high": "Стараюсь думать",
+ "high_description": "Высокоуровневое рассуждение",
"label": "Настройки размышлений",
"low": "Меньше думать",
+ "low_description": "Низкоуровневое рассуждение",
"medium": "Среднее",
+ "medium_description": "Средний уровень рассуждения",
"minimal": "минимальный",
+ "minimal_description": "Минимальное рассуждение",
"off": "Выключить",
- "xhigh": "[to be translated]:Extra High"
+ "off_description": "Отключить рассуждение",
+ "xhigh": "Сверхвысокое",
+ "xhigh_description": "Высочайший уровень рассуждений"
},
"regular_phrases": {
"add": "Добавить подсказку",
@@ -1027,6 +1044,29 @@
"yuque": "Экспорт в Yuque"
},
"list": "Список топиков",
+ "manage": {
+ "clear_selection": "Очистить выбор",
+ "delete": {
+ "confirm": {
+ "content": "Вы уверены, что хотите удалить выбранные темы ({{count}})? Это действие нельзя отменить.",
+ "title": "Удалить темы"
+ },
+ "success": "Удалено {{count}} тем(ы)"
+ },
+ "deselect_all": "Снять выделение со всех",
+ "error": {
+ "at_least_one": "Должна быть сохранена хотя бы одна тема"
+ },
+ "move": {
+ "button": "Переместить",
+ "placeholder": "Выберите цель",
+ "success": "Перемещено {{count}} тем(ы)"
+ },
+ "pinned": "Закреплённые темы",
+ "selected_count": "{{count}} выбрано",
+ "title": "Управление темами",
+ "unpinned": "Откреплённые темы"
+ },
"move_to": "Переместить в",
"new": "Новый топик",
"pin": "Закрепленные темы",
@@ -1037,6 +1077,10 @@
"label": "Тематические подсказки",
"tips": "Тематические подсказки: Дополнительные подсказки, предоставленные для текущей темы"
},
+ "search": {
+ "placeholder": "Искать темы...",
+ "title": "Поиск"
+ },
"title": "Топики",
"unpin": "Открепленные темы"
},
@@ -1221,11 +1265,13 @@
}
},
"stop": "остановить",
+ "subscribe": "Подписаться",
"success": "Успешно",
"swap": "Поменять местами",
"topics": "Топики",
"unknown": "Неизвестно",
"unnamed": "Без имени",
+ "unsubscribe": "Отписаться",
"update_success": "Обновление выполнено успешно",
"upload_files": "Загрузить файл",
"warning": "Предупреждение",
@@ -2152,6 +2198,7 @@
"collapse": "Свернуть",
"content_placeholder": "Введите содержимое заметки...",
"copyContent": "Копировать контент",
+ "crossPlatformRestoreWarning": "[to be translated]:Cross-platform configuration restored, but notes directory is empty. Please copy your note files to: {{path}}",
"delete": "удалить",
"delete_confirm": "Вы уверены, что хотите удалить этот объект {{type}}?",
"delete_folder_confirm": "Вы уверены, что хотите удалить папку \"{{name}}\" со всем ее содержимым?",
@@ -2596,6 +2643,7 @@
"lanyun": "LANYUN",
"lmstudio": "LM Studio",
"longcat": "Тоторо",
+ "mimo": "[to be translated]:Xiaomi MiMo",
"minimax": "MiniMax",
"mistral": "Mistral",
"modelscope": "ModelScope",
@@ -3884,6 +3932,7 @@
"builtinServers": "Встроенные серверы",
"builtinServersDescriptions": {
"brave_search": "реализация сервера MCP с интеграцией API поиска Brave, обеспечивающая функции веб-поиска и локального поиска. Требуется настройка переменной среды BRAVE_API_KEY",
+ "browser": "Управление headless-окном Electron через Chrome DevTools Protocol. Инструменты: открытие URL, выполнение однострочного JS, сброс сессии.",
"didi_mcp": "Сервер DiDi MCP, предоставляющий услуги такси, включая поиск на карте, оценку стоимости, управление заказами и отслеживание водителей. Доступен только в материковом Китае. Требует настройки переменной окружения DIDI_API_KEY",
"dify_knowledge": "Реализация сервера MCP Dify, предоставляющая простой API для взаимодействия с Dify. Требуется настройка ключа Dify",
"fetch": "MCP-сервер для получения содержимого веб-страниц по URL",
@@ -3891,6 +3940,7 @@
"mcp_auto_install": "Автоматическая установка службы MCP (бета-версия)",
"memory": "реализация постоянной памяти на основе локального графа знаний. Это позволяет модели запоминать информацию о пользователе между различными диалогами. Требуется настроить переменную среды MEMORY_FILE_PATH.",
"no": "без описания",
+ "nowledge_mem": "Требуется запущенное локально приложение Nowledge Mem. Хранит чаты ИИ, инструменты, заметки, агентов и файлы в приватной памяти на вашем компьютере. Скачать можно на https://mem.nowledge.co/",
"python": "Выполняйте код Python в безопасной песочнице. Запускайте Python с помощью Pyodide, поддерживается большинство стандартных библиотек и пакетов для научных вычислений",
"sequentialthinking": "MCP серверная реализация, предоставляющая инструменты для динамического и рефлексивного решения проблем посредством структурированного мыслительного процесса"
},
diff --git a/src/renderer/src/pages/home/Chat.tsx b/src/renderer/src/pages/home/Chat.tsx
index 6a82794453..d76e7c9192 100644
--- a/src/renderer/src/pages/home/Chat.tsx
+++ b/src/renderer/src/pages/home/Chat.tsx
@@ -184,7 +184,8 @@ const Chat: FC
= (props) => {
diff --git a/src/renderer/src/pages/home/Inputbar/tools/components/ThinkingButton.tsx b/src/renderer/src/pages/home/Inputbar/tools/components/ThinkingButton.tsx
index 27417e2f30..5fc6e0ddc1 100644
--- a/src/renderer/src/pages/home/Inputbar/tools/components/ThinkingButton.tsx
+++ b/src/renderer/src/pages/home/Inputbar/tools/components/ThinkingButton.tsx
@@ -7,7 +7,8 @@ import {
MdiLightbulbOn30,
MdiLightbulbOn50,
MdiLightbulbOn80,
- MdiLightbulbOn90
+ MdiLightbulbOn90,
+ MdiLightbulbQuestion
} from '@renderer/components/Icons/SVGIcon'
import { QuickPanelReservedSymbol, useQuickPanel } from '@renderer/components/QuickPanel'
import {
@@ -19,7 +20,6 @@ import {
MODEL_SUPPORTED_OPTIONS
} from '@renderer/config/models'
import { useAssistant } from '@renderer/hooks/useAssistant'
-import { getReasoningEffortOptionsLabel } from '@renderer/i18n/label'
import type { ToolQuickPanelApi } from '@renderer/pages/home/Inputbar/types'
import type { Model, ThinkingOption } from '@renderer/types'
import type { FC, ReactElement } from 'react'
@@ -88,19 +88,48 @@ const ThinkingButton: FC = ({ quickPanel, model, assistantId }): ReactEle
[updateAssistantSettings, assistant.enableWebSearch, model, t]
)
+ const reasoningEffortOptionLabelMap = {
+ default: t('assistants.settings.reasoning_effort.default'),
+ none: t('assistants.settings.reasoning_effort.off'),
+ minimal: t('assistants.settings.reasoning_effort.minimal'),
+ high: t('assistants.settings.reasoning_effort.high'),
+ low: t('assistants.settings.reasoning_effort.low'),
+ medium: t('assistants.settings.reasoning_effort.medium'),
+ auto: t('assistants.settings.reasoning_effort.auto'),
+ xhigh: t('assistants.settings.reasoning_effort.xhigh')
+ } as const satisfies Record
+
+ const reasoningEffortDescriptionMap = {
+ default: t('assistants.settings.reasoning_effort.default_description'),
+ none: t('assistants.settings.reasoning_effort.off_description'),
+ minimal: t('assistants.settings.reasoning_effort.minimal_description'),
+ low: t('assistants.settings.reasoning_effort.low_description'),
+ medium: t('assistants.settings.reasoning_effort.medium_description'),
+ high: t('assistants.settings.reasoning_effort.high_description'),
+ xhigh: t('assistants.settings.reasoning_effort.xhigh_description'),
+ auto: t('assistants.settings.reasoning_effort.auto_description')
+ } as const satisfies Record
+
const panelItems = useMemo(() => {
// 使用表中定义的选项创建UI选项
return supportedOptions.map((option) => ({
level: option,
- label: getReasoningEffortOptionsLabel(option),
- description: '',
+ label: reasoningEffortOptionLabelMap[option],
+ description: reasoningEffortDescriptionMap[option],
icon: ThinkingIcon({ option }),
isSelected: currentReasoningEffort === option,
action: () => onThinkingChange(option)
}))
- }, [currentReasoningEffort, supportedOptions, onThinkingChange])
+ }, [
+ supportedOptions,
+ reasoningEffortOptionLabelMap,
+ reasoningEffortDescriptionMap,
+ currentReasoningEffort,
+ onThinkingChange
+ ])
- const isThinkingEnabled = currentReasoningEffort !== undefined && currentReasoningEffort !== 'none'
+ const isThinkingEnabled =
+ currentReasoningEffort !== undefined && currentReasoningEffort !== 'none' && currentReasoningEffort !== 'default'
const disableThinking = useCallback(() => {
onThinkingChange('none')
@@ -197,8 +226,9 @@ const ThinkingIcon = (props: { option?: ThinkingOption; isFixedReasoning?: boole
case 'none':
IconComponent = MdiLightbulbOffOutline
break
+ case 'default':
default:
- IconComponent = MdiLightbulbOffOutline
+ IconComponent = MdiLightbulbQuestion
break
}
}
diff --git a/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx b/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx
index fde5fd4e00..0179684b22 100644
--- a/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx
+++ b/src/renderer/src/pages/home/Tabs/components/AssistantItem.tsx
@@ -1,16 +1,14 @@
import { usePreference } from '@data/hooks/usePreference'
-import ModelAvatar from '@renderer/components/Avatar/ModelAvatar'
-import EmojiIcon from '@renderer/components/EmojiIcon'
+import AssistantAvatar from '@renderer/components/Avatar/AssistantAvatar'
import { CopyIcon, DeleteIcon, EditIcon } from '@renderer/components/Icons'
import PromptPopup from '@renderer/components/Popups/PromptPopup'
import { cacheService } from '@renderer/data/CacheService'
import { useAssistant, useAssistants } from '@renderer/hooks/useAssistant'
import { useTags } from '@renderer/hooks/useTags'
import AssistantSettingsPopup from '@renderer/pages/settings/AssistantSettings'
-import { getDefaultModel } from '@renderer/services/AssistantService'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import type { Assistant } from '@renderer/types'
-import { cn, getLeadingEmoji, uuid } from '@renderer/utils'
+import { cn, uuid } from '@renderer/utils'
import { hasTopicPendingRequests } from '@renderer/utils/queue'
import type { AssistantTabSortType } from '@shared/data/preference/preferenceTypes'
import type { MenuProps } from 'antd'
@@ -64,14 +62,13 @@ const AssistantItem: FC = ({
sortByPinyinAsc: externalSortByPinyinAsc,
sortByPinyinDesc: externalSortByPinyinDesc
}) => {
- const [assistantIconType, setAssistantIconType] = usePreference('assistant.icon_type')
+ const [, setAssistantIconType] = usePreference('assistant.icon_type')
const [clickAssistantToShowTopic] = usePreference('assistant.click_to_show_topic')
const [topicPosition] = usePreference('topic.position')
const { t } = useTranslation()
const { allTags } = useTags()
const { removeAllTopics } = useAssistant(assistant.id)
- const defaultModel = getDefaultModel()
const { assistants, updateAssistants } = useAssistants()
const [isPending, setIsPending] = useState(false)
@@ -168,20 +165,11 @@ const AssistantItem: FC = ({
popupRender={(menu) => e.stopPropagation()}>{menu}
}>
- {assistantIconType === 'model' ? (
-
- ) : (
- assistantIconType === 'emoji' && (
-
- )
- )}
+
{assistantName}
{isActive && (
diff --git a/src/renderer/src/pages/home/Tabs/components/TopicManageMode.tsx b/src/renderer/src/pages/home/Tabs/components/TopicManageMode.tsx
new file mode 100644
index 0000000000..92f213312d
--- /dev/null
+++ b/src/renderer/src/pages/home/Tabs/components/TopicManageMode.tsx
@@ -0,0 +1,411 @@
+import AssistantAvatar from '@renderer/components/Avatar/AssistantAvatar'
+import { modelGenerating } from '@renderer/hooks/useModel'
+import { TopicManager } from '@renderer/hooks/useTopic'
+import type { Assistant, Topic } from '@renderer/types'
+import { cn } from '@renderer/utils'
+import { Dropdown, Tooltip } from 'antd'
+import { CheckSquare, FolderOpen, Search, Square, Trash2, XIcon } from 'lucide-react'
+import type { FC, PropsWithChildren, Ref } from 'react'
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import { useTranslation } from 'react-i18next'
+
+export interface TopicManageModeState {
+ isManageMode: boolean
+ selectedIds: Set
+ searchText: string
+ enterManageMode: () => void
+ exitManageMode: () => void
+ toggleSelectTopic: (topicId: string) => void
+ setSelectedIds: React.Dispatch>>
+ setSearchText: React.Dispatch>
+}
+
+/**
+ * Hook for managing topic selection state
+ */
+export function useTopicManageMode(): TopicManageModeState {
+ const [isManageMode, setIsManageMode] = useState(false)
+ const [selectedIds, setSelectedIds] = useState>(new Set())
+ const [searchText, setSearchText] = useState('')
+
+ const enterManageMode = useCallback(() => {
+ setIsManageMode(true)
+ setSelectedIds(new Set())
+ setSearchText('')
+ }, [])
+
+ const exitManageMode = useCallback(() => {
+ setIsManageMode(false)
+ setSelectedIds(new Set())
+ setSearchText('')
+ }, [])
+
+ const toggleSelectTopic = useCallback((topicId: string) => {
+ setSelectedIds((prev) => {
+ const next = new Set(prev)
+ if (next.has(topicId)) {
+ next.delete(topicId)
+ } else {
+ next.add(topicId)
+ }
+ return next
+ })
+ }, [])
+
+ return {
+ isManageMode,
+ selectedIds,
+ searchText,
+ enterManageMode,
+ exitManageMode,
+ toggleSelectTopic,
+ setSelectedIds,
+ setSearchText
+ }
+}
+
+interface TopicManagePanelProps {
+ assistant: Assistant
+ assistants: Assistant[]
+ activeTopic: Topic
+ setActiveTopic: (topic: Topic) => void
+ removeTopic: (topic: Topic) => void
+ moveTopic: (topic: Topic, toAssistant: Assistant) => void
+ manageState: TopicManageModeState
+ filteredTopics: Topic[]
+}
+
+/**
+ * Bottom panel component for topic management mode
+ */
+export const TopicManagePanel: React.FC = ({
+ assistant,
+ assistants,
+ activeTopic,
+ setActiveTopic,
+ removeTopic,
+ moveTopic,
+ manageState,
+ filteredTopics
+}) => {
+ const { t } = useTranslation()
+ const { isManageMode, selectedIds, searchText, exitManageMode, setSelectedIds, setSearchText } = manageState
+ const [isSearchMode, setIsSearchMode] = useState(false)
+ const searchInputRef = useRef(null)
+
+ // Topics that can be selected (non-pinned, and filtered when in search mode)
+ const selectableTopics = useMemo(() => {
+ const baseTopics = isSearchMode ? filteredTopics : assistant.topics
+ return baseTopics.filter((topic) => !topic.pinned)
+ }, [assistant.topics, filteredTopics, isSearchMode])
+
+ // Check if all selectable topics are selected
+ const isAllSelected = useMemo(() => {
+ return selectableTopics.length > 0 && selectableTopics.every((topic) => selectedIds.has(topic.id))
+ }, [selectableTopics, selectedIds])
+
+ // Other assistants for move operation
+ const otherAssistants = useMemo(() => assistants.filter((a) => a.id !== assistant.id), [assistants, assistant.id])
+
+ // Handle select all / deselect all
+ const handleSelectAll = useCallback(() => {
+ if (isAllSelected) {
+ setSelectedIds(new Set())
+ } else {
+ setSelectedIds(new Set(selectableTopics.map((topic) => topic.id)))
+ }
+ }, [isAllSelected, selectableTopics, setSelectedIds])
+
+ // Handle clear selection
+ const handleClearSelection = useCallback(() => {
+ setSelectedIds(new Set())
+ }, [setSelectedIds])
+
+ // Handle delete selected topics
+ const handleDeleteSelected = useCallback(async () => {
+ if (selectedIds.size === 0) return
+
+ const remainingTopics = assistant.topics.filter((topic) => !selectedIds.has(topic.id))
+ if (remainingTopics.length === 0) {
+ window.toast.error(t('chat.topics.manage.error.at_least_one'))
+ return
+ }
+
+ const confirmed = await window.modal.confirm({
+ title: t('chat.topics.manage.delete.confirm.title'),
+ content: t('chat.topics.manage.delete.confirm.content', { count: selectedIds.size }),
+ centered: true,
+ okButtonProps: { danger: true }
+ })
+
+ if (!confirmed) return
+
+ await modelGenerating()
+
+ const deletedCount = selectedIds.size
+ for (const id of selectedIds) {
+ const topic = assistant.topics.find((t) => t.id === id)
+ if (topic) {
+ await TopicManager.removeTopic(id)
+ removeTopic(topic)
+ }
+ }
+
+ // Switch to first remaining topic if current topic was deleted
+ if (selectedIds.has(activeTopic.id)) {
+ setActiveTopic(remainingTopics[0])
+ }
+
+ window.toast.success(t('chat.topics.manage.delete.success', { count: deletedCount }))
+ exitManageMode()
+ }, [selectedIds, assistant.topics, removeTopic, activeTopic.id, setActiveTopic, t, exitManageMode])
+
+ // Handle move selected topics to another assistant
+ const handleMoveSelected = useCallback(
+ async (targetAssistantId: string) => {
+ if (selectedIds.size === 0) return
+
+ const targetAssistant = assistants.find((a) => a.id === targetAssistantId)
+ if (!targetAssistant) return
+
+ const remainingTopics = assistant.topics.filter((topic) => !selectedIds.has(topic.id))
+ if (remainingTopics.length === 0) {
+ window.toast.error(t('chat.topics.manage.error.at_least_one'))
+ return
+ }
+
+ await modelGenerating()
+
+ const movedCount = selectedIds.size
+ for (const id of selectedIds) {
+ const topic = assistant.topics.find((t) => t.id === id)
+ if (topic) {
+ moveTopic(topic, targetAssistant)
+ }
+ }
+
+ // Switch to first remaining topic if current topic was moved
+ if (selectedIds.has(activeTopic.id)) {
+ setActiveTopic(remainingTopics[0])
+ }
+
+ window.toast.success(t('chat.topics.manage.move.success', { count: movedCount }))
+ exitManageMode()
+ },
+ [selectedIds, assistant.topics, assistants, moveTopic, activeTopic.id, setActiveTopic, t, exitManageMode]
+ )
+
+ // Enter search mode
+ const enterSearchMode = useCallback(() => {
+ setIsSearchMode(true)
+ }, [])
+
+ // Exit search mode
+ const exitSearchMode = useCallback(() => {
+ setIsSearchMode(false)
+ setSearchText('')
+ }, [setSearchText])
+
+ // Focus input when entering search mode
+ useEffect(() => {
+ if (isSearchMode && searchInputRef.current) {
+ searchInputRef.current.focus()
+ }
+ }, [isSearchMode])
+
+ // Reset search mode when exiting manage mode
+ useEffect(() => {
+ if (!isManageMode) {
+ setIsSearchMode(false)
+ }
+ }, [isManageMode])
+
+ // Handle search input keydown
+ const handleSearchKeyDown = useCallback(
+ (e: React.KeyboardEvent) => {
+ if (e.key === 'Escape') {
+ exitSearchMode()
+ }
+ },
+ [exitSearchMode]
+ )
+
+ if (!isManageMode) return null
+
+ // Search mode UI
+ if (isSearchMode) {
+ return (
+
+
+
+
+
+ {isAllSelected ? : }
+
+
+ {selectedIds.size > 0 && (
+
+ {selectedIds.size}
+
+ )}
+
+
+ setSearchText(e.target.value)}
+ onKeyDown={handleSearchKeyDown}
+ />
+
+
+
+
+
+
+
+
+ )
+ }
+
+ // Normal manage mode UI
+ return (
+
+
+
+
+
+ {isAllSelected ? : }
+
+
+ {selectedIds.size > 0 && (
+
+ {selectedIds.size}
+
+ )}
+
+
+
+
+
+
+
+ {otherAssistants.length > 0 && (
+ ({
+ key: a.id,
+ label: a.name,
+ icon: ,
+ onClick: () => handleMoveSelected(a.id),
+ disabled: selectedIds.size === 0
+ }))
+ }}
+ trigger={['click']}
+ disabled={selectedIds.size === 0}>
+
+
+
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+// Tailwind components
+const ManagePanel: FC = ({ children }) => (
+
+ {children}
+
+)
+
+const ManagePanelContent: FC = ({ children }) => (
+ {children}
+)
+
+interface ManageIconButtonProps extends React.ButtonHTMLAttributes {
+ danger?: boolean
+}
+
+const ManageIconButton: FC> = ({
+ children,
+ className,
+ danger,
+ disabled,
+ ...props
+}) => (
+
+)
+
+const ManageDivider: FC = () =>
+
+const LeftGroup: FC = ({ children }) => {children}
+
+const RightGroup: FC = ({ children }) => (
+ {children}
+)
+
+const SelectedBadge: FC>> = ({
+ children,
+ className,
+ ...props
+}) => (
+
+ {children}
+
+)
+
+const SearchInputWrapper: FC = ({ children }) => (
+ {children}
+)
+
+interface SearchInputProps extends React.InputHTMLAttributes {
+ ref?: Ref
+}
+
+const SearchInput: FC = ({ className, ref, ...props }) => (
+
+)
+
+export default TopicManagePanel
diff --git a/src/renderer/src/pages/home/Tabs/components/Topics.tsx b/src/renderer/src/pages/home/Tabs/components/Topics.tsx
index 7bab7f687f..1edf207b96 100644
--- a/src/renderer/src/pages/home/Tabs/components/Topics.tsx
+++ b/src/renderer/src/pages/home/Tabs/components/Topics.tsx
@@ -1,5 +1,6 @@
import { useCache } from '@data/hooks/useCache'
import { useMultiplePreferences, usePreference } from '@data/hooks/usePreference'
+import AssistantAvatar from '@renderer/components/Avatar/AssistantAvatar'
import { DraggableVirtualList } from '@renderer/components/DraggableList'
import { CopyIcon, DeleteIcon, EditIcon } from '@renderer/components/Icons'
import ObsidianExportPopup from '@renderer/components/Popups/ObsidianExportPopup'
@@ -36,8 +37,10 @@ import dayjs from 'dayjs'
import { findIndex } from 'lodash'
import {
BrushCleaning,
+ CheckSquare,
FolderOpen,
HelpCircle,
+ ListChecks,
MenuIcon,
NotebookPen,
PackagePlus,
@@ -45,6 +48,7 @@ import {
PinOffIcon,
Save,
Sparkles,
+ Square,
UploadIcon,
XIcon
} from 'lucide-react'
@@ -54,6 +58,7 @@ import { useDispatch, useSelector } from 'react-redux'
import styled from 'styled-components'
import AddButton from './AddButton'
+import { TopicManagePanel, useTopicManageMode } from './TopicManageMode'
interface Props {
assistant: Assistant
@@ -85,6 +90,10 @@ export const Topics: React.FC = ({ assistant: _assistant, activeTopic, se
const deleteTimerRef = useRef(null)
const [editingTopicId, setEditingTopicId] = useState(null)
+ // 管理模式状态
+ const manageState = useTopicManageMode()
+ const { isManageMode, selectedIds, searchText, enterManageMode, exitManageMode, toggleSelectTopic } = manageState
+
const { startEdit, isEditing, inputProps } = useInPlaceEdit({
onSave: (name: string) => {
const topic = assistant.topics.find((t) => t.id === editingTopicId)
@@ -456,6 +465,7 @@ export const Topics: React.FC = ({ assistant: _assistant, activeTopic, se
.map((a) => ({
label: a.name,
key: a.id,
+ icon: ,
onClick: () => onMoveTopic(topic, a)
}))
})
@@ -511,107 +521,187 @@ export const Topics: React.FC = ({ assistant: _assistant, activeTopic, se
return assistant.topics
}, [assistant.topics, pinTopicsToTop])
+ // Filter topics based on search text (only in manage mode)
+ // Supports: case-insensitive, space-separated keywords (all must match)
+ const deferredSearchText = useDeferredValue(searchText)
+ const filteredTopics = useMemo(() => {
+ if (!isManageMode || !deferredSearchText.trim()) {
+ return sortedTopics
+ }
+ // Split by spaces and filter out empty strings
+ const keywords = deferredSearchText
+ .toLowerCase()
+ .split(/\s+/)
+ .filter((k) => k.length > 0)
+ if (keywords.length === 0) {
+ return sortedTopics
+ }
+ // All keywords must match (AND logic)
+ return sortedTopics.filter((topic) => {
+ const lowerName = topic.name.toLowerCase()
+ return keywords.every((keyword) => lowerName.includes(keyword))
+ })
+ }, [sortedTopics, deferredSearchText, isManageMode])
+
const singlealone = topicPosition === 'right' && position === 'right'
return (
-
- EventEmitter.emit(EVENT_NAMES.ADD_NEW_TOPIC)} className="">
- {t('chat.add.topic.title')}
-
-
- >
- }>
- {(topic) => {
- const isActive = topic.id === activeTopic?.id
- const topicName = topic.name.replace('`', '')
- const topicPrompt = topic.prompt
- const fullTopicPrompt = t('common.prompt') + ': ' + topicPrompt
-
- const getTopicNameClassName = () => {
- if (isRenaming(topic.id)) return 'shimmer'
- if (isNewlyRenamed(topic.id)) return 'typing'
- return ''
+ <>
+
+ EventEmitter.emit(EVENT_NAMES.ADD_NEW_TOPIC)} className="">
+ {t('chat.add.topic.title')}
+
+
+
+
+
+
+
}
+ disabled={isManageMode}>
+ {(topic) => {
+ const isActive = topic.id === activeTopic?.id
+ const topicName = topic.name.replace('`', '')
+ const topicPrompt = topic.prompt
+ const fullTopicPrompt = t('common.prompt') + ': ' + topicPrompt
+ const isSelected = selectedIds.has(topic.id)
+ const canSelect = !topic.pinned
- return (
-
- setTargetTopic(topic)}
- className={classNames(isActive ? 'active' : '', singlealone ? 'singlealone' : '')}
- onClick={editingTopicId === topic.id && isEditing ? undefined : () => onSwitchTopic(topic)}
- style={{
- borderRadius,
- cursor: editingTopicId === topic.id && isEditing ? 'default' : 'pointer'
- }}>
- {isPending(topic.id) && !isActive && }
- {isFulfilled(topic.id) && !isActive && }
-
- {editingTopicId === topic.id && isEditing ? (
- e.stopPropagation()} />
- ) : (
- {
- setEditingTopicId(topic.id)
- startEdit(topic.name)
- }}>
- {topicName}
-
+ const getTopicNameClassName = () => {
+ if (isRenaming(topic.id)) return 'shimmer'
+ if (isNewlyRenamed(topic.id)) return 'typing'
+ return ''
+ }
+
+ const handleItemClick = () => {
+ if (isManageMode) {
+ if (canSelect) {
+ toggleSelectTopic(topic.id)
+ }
+ } else {
+ onSwitchTopic(topic)
+ }
+ }
+
+ return (
+
+ setTargetTopic(topic)}
+ className={classNames(
+ isActive && !isManageMode ? 'active' : '',
+ singlealone ? 'singlealone' : '',
+ isManageMode && isSelected ? 'selected' : '',
+ isManageMode && !canSelect ? 'disabled' : ''
)}
- {!topic.pinned && (
-
- {t('chat.topics.delete.shortcut', { key: isMac ? '⌘' : 'Ctrl' })}
-