Merge branch 'main' into fix/next-release-bugs

This commit is contained in:
suyao 2025-05-11 01:31:05 +08:00
commit 8a99eea28a
No known key found for this signature in database
30 changed files with 2647 additions and 272 deletions

View File

@ -37,3 +37,49 @@ index 7d19f5578040afa004bc887aab1725e8703d2bac..59ec725b6142299a62798ac4bdedb63b
if (status === 400) { if (status === 400) {
return new BadRequestError(status, error, message, headers); return new BadRequestError(status, error, message, headers);
} }
diff --git a/resources/embeddings.js b/resources/embeddings.js
index aae578404cb2d09a39ac33fc416f1c215c45eecd..25c54b05bdae64d5c3b36fbb30dc7c8221b14034 100644
--- a/resources/embeddings.js
+++ b/resources/embeddings.js
@@ -36,6 +36,9 @@ class Embeddings extends resource_1.APIResource {
// No encoding_format specified, defaulting to base64 for performance reasons
// See https://github.com/openai/openai-node/pull/1312
let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';
+ if (body.model.includes('jina')) {
+ encoding_format = undefined;
+ }
if (hasUserProvidedEncodingFormat) {
Core.debug('Request', 'User defined encoding_format:', body.encoding_format);
}
@@ -47,7 +50,7 @@ class Embeddings extends resource_1.APIResource {
...options,
});
// if the user specified an encoding_format, return the response as-is
- if (hasUserProvidedEncodingFormat) {
+ if (hasUserProvidedEncodingFormat || body.model.includes('jina')) {
return response;
}
// in this stage, we are sure the user did not specify an encoding_format
diff --git a/resources/embeddings.mjs b/resources/embeddings.mjs
index 0df3c6cc79a520e54acb4c2b5f77c43b774035ff..aa488b8a11b2c413c0a663d9a6059d286d7b5faf 100644
--- a/resources/embeddings.mjs
+++ b/resources/embeddings.mjs
@@ -10,6 +10,9 @@ export class Embeddings extends APIResource {
// No encoding_format specified, defaulting to base64 for performance reasons
// See https://github.com/openai/openai-node/pull/1312
let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';
+ if (body.model.includes('jina')) {
+ encoding_format = undefined;
+ }
if (hasUserProvidedEncodingFormat) {
Core.debug('Request', 'User defined encoding_format:', body.encoding_format);
}
@@ -21,7 +24,7 @@ export class Embeddings extends APIResource {
...options,
});
// if the user specified an encoding_format, return the response as-is
- if (hasUserProvidedEncodingFormat) {
+ if (hasUserProvidedEncodingFormat || body.model.includes('jina')) {
return response;
}
// in this stage, we are sure the user did not specify an encoding_format

View File

@ -1,16 +1,16 @@
/** /**
* OCOOL_API_KEY=sk-abcxxxxxxxxxxxxxxxxxxxxxxx123 ts-node scripts/update-i18n.ts * Paratera_API_KEY=sk-abcxxxxxxxxxxxxxxxxxxxxxxx123 ts-node scripts/update-i18n.ts
*/ */
// OCOOL API KEY // OCOOL API KEY
const OCOOL_API_KEY = process.env.OCOOL_API_KEY const Paratera_API_KEY = process.env.Paratera_API_KEY
const INDEX = [ const INDEX = [
// 语言的名称 代码 用来翻译的模型 // 语言的名称 代码 用来翻译的模型
{ name: 'France', code: 'fr-fr', model: 'qwen2.5-32b-instruct' }, { name: 'France', code: 'fr-fr', model: 'Qwen3-235B-A22B' },
{ name: 'Spanish', code: 'es-es', model: 'qwen2.5-32b-instruct' }, { name: 'Spanish', code: 'es-es', model: 'Qwen3-235B-A22B' },
{ name: 'Portuguese', code: 'pt-pt', model: 'qwen2.5-72b-instruct' }, { name: 'Portuguese', code: 'pt-pt', model: 'Qwen3-235B-A22B' },
{ name: 'Greek', code: 'el-gr', model: 'qwen-turbo' } { name: 'Greek', code: 'el-gr', model: 'Qwen3-235B-A22B' }
] ]
const fs = require('fs') const fs = require('fs')
@ -19,8 +19,8 @@ import OpenAI from 'openai'
const zh = JSON.parse(fs.readFileSync('src/renderer/src/i18n/locales/zh-cn.json', 'utf8')) as object const zh = JSON.parse(fs.readFileSync('src/renderer/src/i18n/locales/zh-cn.json', 'utf8')) as object
const openai = new OpenAI({ const openai = new OpenAI({
apiKey: OCOOL_API_KEY, apiKey: Paratera_API_KEY,
baseURL: 'https://one.ocoolai.com/v1' baseURL: 'https://llmapi.paratera.com/v1'
}) })
// 递归遍历翻译 // 递归遍历翻译

View File

@ -267,11 +267,7 @@ const PopupContainer: React.FC<Props> = ({ model, resolve }) => {
// 处理键盘导航 // 处理键盘导航
const handleKeyDown = useCallback( const handleKeyDown = useCallback(
(e: KeyboardEvent) => { (e: KeyboardEvent) => {
if (!open) return if (!open || modelItems.length === 0 || e.isComposing) return
if (modelItems.length === 0) {
return
}
// 键盘操作时禁用鼠标 hover // 键盘操作时禁用鼠标 hover
if (['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Enter', 'Escape'].includes(e.key)) { if (['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Enter', 'Escape'].includes(e.key)) {

View File

@ -254,6 +254,7 @@ export function WebdavBackupManager({ visible, onClose, webdavConfig, restoreMet
open={visible} open={visible}
onCancel={onClose} onCancel={onClose}
width={800} width={800}
centered
footer={[ footer={[
<Button key="refresh" icon={<ReloadOutlined />} onClick={fetchBackupFiles} disabled={loading}> <Button key="refresh" icon={<ReloadOutlined />} onClick={fetchBackupFiles} disabled={loading}>
{t('settings.data.webdav.backup.manager.refresh')} {t('settings.data.webdav.backup.manager.refresh')}

View File

@ -76,7 +76,8 @@ export function WebdavBackupModal({
open={isModalVisible} open={isModalVisible}
onOk={handleBackup} onOk={handleBackup}
onCancel={handleCancel} onCancel={handleCancel}
okButtonProps={{ loading: backuping }}> okButtonProps={{ loading: backuping }}
centered>
<Input <Input
value={customFileName} value={customFileName}
onChange={(e) => setCustomFileName(e.target.value)} onChange={(e) => setCustomFileName(e.target.value)}
@ -206,7 +207,8 @@ export function WebdavRestoreModal({
onOk={handleRestore} onOk={handleRestore}
onCancel={handleCancel} onCancel={handleCancel}
okButtonProps={{ loading: restoring }} okButtonProps={{ loading: restoring }}
width={600}> width={600}
centered>
<div style={{ position: 'relative' }}> <div style={{ position: 'relative' }}>
<Select <Select
style={{ width: '100%' }} style={{ width: '100%' }}

View File

@ -84,7 +84,18 @@
"settings.knowledge_base.recognition.tip": "The assistant will use the large model's intent recognition capability to determine whether to use the knowledge base for answering. This feature will depend on the model's capabilities", "settings.knowledge_base.recognition.tip": "The assistant will use the large model's intent recognition capability to determine whether to use the knowledge base for answering. This feature will depend on the model's capabilities",
"settings.knowledge_base.recognition": "Use Knowledge Base", "settings.knowledge_base.recognition": "Use Knowledge Base",
"settings.knowledge_base.recognition.off": "Force Search", "settings.knowledge_base.recognition.off": "Force Search",
"settings.knowledge_base.recognition.on": "Intent Recognition" "settings.knowledge_base.recognition.on": "Intent Recognition",
"settings.regular_phrases": {
"title": "Regular Phrase",
"add": "Add Phrase",
"edit": "Edit Phrase",
"delete": "Delete Phrase",
"deleteConfirm": "Are you sure to delete this phrase?",
"titleLabel": "Title",
"titlePlaceholder": "Enter title",
"contentLabel": "Content",
"contentPlaceholder": "Please enter phrase content, support using variables, and press Tab to quickly locate the variable to modify. For example: \nHelp me plan a route from ${from} to ${to}, and send it to ${email}."
}
}, },
"auth": { "auth": {
"error": "API key automatically obtained failed, please get it manually", "error": "API key automatically obtained failed, please get it manually",
@ -1586,7 +1597,10 @@
"titlePlaceholder": "Please enter phrase title", "titlePlaceholder": "Please enter phrase title",
"contentPlaceholder": "Please enter phrase content, support using variables, and press Tab to quickly locate the variable to modify. For example: \nHelp me plan a route from ${from} to ${to}, and send it to ${email}.", "contentPlaceholder": "Please enter phrase content, support using variables, and press Tab to quickly locate the variable to modify. For example: \nHelp me plan a route from ${from} to ${to}, and send it to ${email}.",
"delete": "Delete Phrase", "delete": "Delete Phrase",
"deleteConfirm": "The phrase cannot be recovered after deletion, continue?" "deleteConfirm": "The phrase cannot be recovered after deletion, continue?",
"locationLabel": "Add Location",
"global": "Global Phrases",
"assistant": "Assistant Phrases"
}, },
"quickPanel": { "quickPanel": {
"title": "Quick Menu", "title": "Quick Menu",

View File

@ -81,6 +81,17 @@
"settings.reasoning_effort.medium": "普通の思考", "settings.reasoning_effort.medium": "普通の思考",
"settings.reasoning_effort.default": "デフォルト", "settings.reasoning_effort.default": "デフォルト",
"settings.more": "アシスタント設定", "settings.more": "アシスタント設定",
"settings.regular_phrases": {
"title": "定型プロンプト",
"add": "プロンプトを追加",
"edit": "プロンプトを編集",
"delete": "プロンプトを削除",
"deleteConfirm": "このプロンプトを削除してもよろしいですか?",
"titleLabel": "タイトル",
"titlePlaceholder": "タイトルを入力",
"contentLabel": "内容",
"contentPlaceholder": "フレーズの内容を入力してください。変数を使用することもできます。変数を使用する場合は、Tabキーを押して変数を選択し、変数を変更してください。例\n私の名前は${name}です。"
},
"settings.knowledge_base.recognition.tip": "アシスタントは大規模言語モデルの意図認識能力を使用して、ナレッジベースを参照する必要があるかどうかを判断します。この機能はモデルの能力に依存します", "settings.knowledge_base.recognition.tip": "アシスタントは大規模言語モデルの意図認識能力を使用して、ナレッジベースを参照する必要があるかどうかを判断します。この機能はモデルの能力に依存します",
"settings.knowledge_base.recognition": "ナレッジベースの呼び出し", "settings.knowledge_base.recognition": "ナレッジベースの呼び出し",
"settings.knowledge_base.recognition.off": "強制検索", "settings.knowledge_base.recognition.off": "強制検索",
@ -1585,7 +1596,10 @@
"titlePlaceholder": "フレーズのタイトルを入力してください", "titlePlaceholder": "フレーズのタイトルを入力してください",
"contentPlaceholder": "フレーズの内容を入力してください。変数を使用することもできます。変数を使用する場合は、Tabキーを押して変数を選択し、変数を変更してください。例\n私の名前は${name}です。", "contentPlaceholder": "フレーズの内容を入力してください。変数を使用することもできます。変数を使用する場合は、Tabキーを押して変数を選択し、変数を変更してください。例\n私の名前は${name}です。",
"delete": "フレーズを削除", "delete": "フレーズを削除",
"deleteConfirm": "削除後は復元できません。続行しますか?" "deleteConfirm": "削除後は復元できません。続行しますか?",
"locationLabel": "追加場所",
"global": "グローバルクイックフレーズ",
"assistant": "アシスタントプロンプト"
}, },
"quickPanel": { "quickPanel": {
"title": "クイックメニュー", "title": "クイックメニュー",

View File

@ -84,7 +84,18 @@
"settings.knowledge_base.recognition.tip": "Ассистент будет использовать возможности большой модели для распознавания намерений, чтобы определить, нужно ли обращаться к базе знаний для ответа. Эта функция будет зависеть от возможностей модели", "settings.knowledge_base.recognition.tip": "Ассистент будет использовать возможности большой модели для распознавания намерений, чтобы определить, нужно ли обращаться к базе знаний для ответа. Эта функция будет зависеть от возможностей модели",
"settings.knowledge_base.recognition": "Использование базы знаний", "settings.knowledge_base.recognition": "Использование базы знаний",
"settings.knowledge_base.recognition.off": "Принудительный поиск", "settings.knowledge_base.recognition.off": "Принудительный поиск",
"settings.knowledge_base.recognition.on": "Распознавание намерений" "settings.knowledge_base.recognition.on": "Распознавание намерений",
"settings.regular_phrases": {
"title": "Регулярные подсказки",
"add": "Добавить подсказку",
"edit": "Редактировать подсказку",
"delete": "Удалить подсказку",
"deleteConfirm": "Вы уверены, что хотите удалить эту подсказку?",
"titleLabel": "Заголовок",
"titlePlaceholder": "Введите заголовок",
"contentLabel": "Содержание",
"contentPlaceholder": "Введите содержание фразы, поддерживает использование переменных, и нажмите Tab для быстрого перехода к переменной для изменения. Например: \nПомоги мне спланировать маршрут от ${from} до ${to} и отправить его на ${email}."
}
}, },
"auth": { "auth": {
"error": "Автоматический получение ключа API не удалось, пожалуйста, получите ключ вручную", "error": "Автоматический получение ключа API не удалось, пожалуйста, получите ключ вручную",
@ -1585,7 +1596,10 @@
"titlePlaceholder": "Введите заголовок фразы", "titlePlaceholder": "Введите заголовок фразы",
"contentPlaceholder": "Введите содержание фразы, поддерживает использование переменных, и нажмите Tab для быстрого перехода к переменной для изменения. Например: \nПомоги мне спланировать маршрут от ${from} до ${to} и отправить его на ${email}.", "contentPlaceholder": "Введите содержание фразы, поддерживает использование переменных, и нажмите Tab для быстрого перехода к переменной для изменения. Например: \nПомоги мне спланировать маршрут от ${from} до ${to} и отправить его на ${email}.",
"delete": "Удалить фразу", "delete": "Удалить фразу",
"deleteConfirm": "После удаления фраза не может быть восстановлена, продолжить?" "deleteConfirm": "После удаления фраза не может быть восстановлена, продолжить?",
"locationLabel": "Место добавления",
"global": "Глобальные быстрые фразы",
"assistant": "Подсказки ассистента"
}, },
"quickPanel": { "quickPanel": {
"title": "Быстрое меню", "title": "Быстрое меню",

View File

@ -84,7 +84,18 @@
"settings.reasoning_effort.medium": "斟酌", "settings.reasoning_effort.medium": "斟酌",
"settings.reasoning_effort.high": "沉思", "settings.reasoning_effort.high": "沉思",
"settings.reasoning_effort.default": "默认", "settings.reasoning_effort.default": "默认",
"settings.more": "助手设置" "settings.more": "助手设置",
"settings.regular_phrases": {
"title": "常用短语",
"add": "添加短语",
"edit": "编辑短语",
"delete": "删除短语",
"deleteConfirm": "确定要删除这个短语吗?",
"titleLabel": "标题",
"titlePlaceholder": "输入标题",
"contentLabel": "内容",
"contentPlaceholder": "请输入短语内容支持使用变量然后按Tab键可以快速定位到变量进行修改。比如\n帮我规划从${from}到${to}的路线,然后发送到${email}。"
}
}, },
"auth": { "auth": {
"error": "自动获取密钥失败,请手动获取", "error": "自动获取密钥失败,请手动获取",
@ -1586,7 +1597,10 @@
"titlePlaceholder": "请输入短语标题", "titlePlaceholder": "请输入短语标题",
"contentPlaceholder": "请输入短语内容支持使用变量然后按Tab键可以快速定位到变量进行修改。比如\n帮我规划从${from}到${to}的路线,然后发送到${email}。", "contentPlaceholder": "请输入短语内容支持使用变量然后按Tab键可以快速定位到变量进行修改。比如\n帮我规划从${from}到${to}的路线,然后发送到${email}。",
"delete": "删除短语", "delete": "删除短语",
"deleteConfirm": "删除短语后将无法恢复,是否继续?" "deleteConfirm": "删除短语后将无法恢复,是否继续?",
"locationLabel": "添加位置",
"global": "全局短语",
"assistant": "助手短语"
}, },
"quickPanel": { "quickPanel": {
"title": "快捷菜单", "title": "快捷菜单",

View File

@ -81,6 +81,17 @@
"settings.reasoning_effort.medium": "正常思考", "settings.reasoning_effort.medium": "正常思考",
"settings.reasoning_effort.default": "預設", "settings.reasoning_effort.default": "預設",
"settings.more": "助手設定", "settings.more": "助手設定",
"settings.regular_phrases": {
"title": "常用短语",
"add": "添加短语",
"edit": "編輯短语",
"delete": "刪除短语",
"deleteConfirm": "確定要刪除這個短语嗎?",
"titleLabel": "標題",
"titlePlaceholder": "輸入標題",
"contentLabel": "內容",
"contentPlaceholder": "請輸入短語內容支持使用變量然後按Tab鍵可以快速定位到變量進行修改。比如\n幫我規劃從${from}到${to}的行程,然後發送到${email}。"
},
"settings.knowledge_base.recognition.tip": "智慧代理人將調用大語言模型的意圖識別能力,判斷是否需要調用知識庫進行回答,該功能將依賴模型的能力", "settings.knowledge_base.recognition.tip": "智慧代理人將調用大語言模型的意圖識別能力,判斷是否需要調用知識庫進行回答,該功能將依賴模型的能力",
"settings.knowledge_base.recognition": "調用知識庫", "settings.knowledge_base.recognition": "調用知識庫",
"settings.knowledge_base.recognition.off": "強制檢索", "settings.knowledge_base.recognition.off": "強制檢索",
@ -1586,7 +1597,10 @@
"titlePlaceholder": "請輸入短語標題", "titlePlaceholder": "請輸入短語標題",
"contentPlaceholder": "請輸入短語內容支持使用變量然後按Tab鍵可以快速定位到變量進行修改。比如\n幫我規劃從${from}到${to}的行程,然後發送到${email}。", "contentPlaceholder": "請輸入短語內容支持使用變量然後按Tab鍵可以快速定位到變量進行修改。比如\n幫我規劃從${from}到${to}的行程,然後發送到${email}。",
"delete": "刪除短語", "delete": "刪除短語",
"deleteConfirm": "刪除後無法復原,是否繼續?" "deleteConfirm": "刪除後無法復原,是否繼續?",
"locationLabel": "添加位置",
"global": "全局快速短語",
"assistant": "助手提示詞"
}, },
"quickPanel": { "quickPanel": {
"title": "快捷選單", "title": "快捷選單",

View File

@ -29,7 +29,26 @@
"tag.default": "Προεπιλογή", "tag.default": "Προεπιλογή",
"tag.new": "Νέος", "tag.new": "Νέος",
"tag.system": "Σύστημα", "tag.system": "Σύστημα",
"title": "Ειδικοί" "title": "Ειδικοί",
"import": {
"type": {
"url": "URL",
"file": "Αρχείο"
},
"error": {
"url_required": "Παρακαλώ εισάγετε τη διεύθυνση URL",
"fetch_failed": "Αποτυχία λήψης δεδομένων από το URL",
"invalid_format": "Μη έγκυρη μορφή πράκτορα: λείπουν υποχρεωτικά πεδία"
},
"title": "Εισαγωγή από το εξωτερικό",
"url_placeholder": "Εισάγετε τη διεύθυνση URL JSON",
"select_file": "Επιλέξτε αρχείο",
"button": "Εισαγωγή",
"file_filter": "Αρχεία JSON"
},
"export": {
"agent": "Εξαγωγή υποκειμένου"
}
}, },
"assistants": { "assistants": {
"abbr": "Βοηθός", "abbr": "Βοηθός",
@ -52,8 +71,31 @@
"settings.reasoning_effort.low": "Μικρό", "settings.reasoning_effort.low": "Μικρό",
"settings.reasoning_effort.medium": "Μεσαίο", "settings.reasoning_effort.medium": "Μεσαίο",
"settings.reasoning_effort.off": "Απενεργοποίηση", "settings.reasoning_effort.off": "Απενεργοποίηση",
"settings.reasoning_effort.tip": "Υποστηρίζεται μόνο για μοντέλα πληροφορικής OpenAI o-series και Anthropic", "title": "Βοηθός",
"title": "Βοηθός" "settings.regular_phrases": {
"title": "Δημοφιλείς φράσεις",
"add": "Προσθήκη φράσης",
"edit": "Επεξεργασία φράσης",
"delete": "Διαγραφή φράσης",
"deleteConfirm": "Είστε βέβαιος ότι θέλετε να διαγράψετε αυτήν τη φράση;",
"titleLabel": "Τίτλος",
"titlePlaceholder": "Εισαγάγετε τίτλο",
"contentLabel": "Περιεχόμενο",
"contentPlaceholder": "Παρακαλώ εισάγετε το περιεχόμενο της φράσης. Υποστηρίζονται μεταβλητές, και στη συνέχεια πατήστε Tab για να μεταβείτε γρήγορα στη μεταβλητή και να την επεξεργαστείτε. Για παράδειγμα: \\nΒοήθησέ με να σχεδιάσω μια διαδρομή από το ${from} στο ${to}, και στη συνέχεια στείλε την στο ${email}."
},
"settings.title": "Ρυθμίσεις Βοηθού",
"icon.type": "Εικόνα Βοηθού",
"settings.mcp": "Διακομιστής MCP",
"settings.mcp.enableFirst": "Πρώτα ενεργοποιήστε αυτόν τον διακομιστή στις ρυθμίσεις MCP",
"settings.mcp.title": "Ρυθμίσεις MCP",
"settings.mcp.noServersAvailable": "Δεν υπάρχουν διαθέσιμοι διακομιστές MCP. Προσθέστε ένα διακομιστή στις ρυθμίσεις",
"settings.mcp.description": "Διακομιστής MCP που είναι ενεργοποιημένος εξ ορισμού",
"settings.knowledge_base.recognition.tip": "Ο πράκτορας θα καλέσει τη δυνατότητα αναγνώρισης πρόθεσης του μεγάλου μοντέλου για να αποφασίσει αν χρειάζεται να κληθεί η βάση γνώσης για να απαντηθεί, και αυτή η λειτουργία θα εξαρτηθεί από τις δυνατότητες του μοντέλου",
"settings.knowledge_base.recognition": "Κλήση βάσης γνώσης",
"settings.knowledge_base.recognition.off": "Υποχρεωτική αναζήτηση",
"settings.knowledge_base.recognition.on": "Αναγνώριση πρόθεσης",
"settings.reasoning_effort.default": "Προεπιλογή",
"settings.more": "Ρυθμίσεις Βοηθού"
}, },
"auth": { "auth": {
"error": "Αποτυχία στην αυτόματη πήγαινη των κλειδιών, παρακαλείστε να το κάνετε χειροκίνητα", "error": "Αποτυχία στην αυτόματη πήγαινη των κλειδιών, παρακαλείστε να το κάνετε χειροκίνητα",
@ -133,7 +175,8 @@
"prev": "Προηγούμενο μήνυμα", "prev": "Προηγούμενο μήνυμα",
"top": "Επιστροφή στην κορυφή", "top": "Επιστροφή στην κορυφή",
"bottom": "Επιστροφή στο κάτω μέρος", "bottom": "Επιστροφή στο κάτω μέρος",
"close": "Κλείσιμο" "close": "Κλείσιμο",
"history": "Ιστορικό συνομιλίας"
}, },
"resend": "Ξαναστείλε", "resend": "Ξαναστείλε",
"save": "Αποθήκευση", "save": "Αποθήκευση",
@ -176,7 +219,6 @@
"topics.export.obsidian_created_placeholder": "Επιλέξτε την ημερομηνία δημιουργίας", "topics.export.obsidian_created_placeholder": "Επιλέξτε την ημερομηνία δημιουργίας",
"topics.export.obsidian_export_failed": "Η εξαγωγή απέτυχε", "topics.export.obsidian_export_failed": "Η εξαγωγή απέτυχε",
"topics.export.obsidian_export_success": "Η εξαγωγή ήταν επιτυχής", "topics.export.obsidian_export_success": "Η εξαγωγή ήταν επιτυχής",
"topics.export.obsidian_not_configured": "Το Obsidian δεν είναι συντονισμένο",
"topics.export.obsidian_operate": "Επεξεργασία μεθόδου", "topics.export.obsidian_operate": "Επεξεργασία μεθόδου",
"topics.export.obsidian_operate_append": "Επισυναγωγή", "topics.export.obsidian_operate_append": "Επισυναγωγή",
"topics.export.obsidian_operate_new_or_overwrite": "Νέο (επιστροφή σε επιστροφή)", "topics.export.obsidian_operate_new_or_overwrite": "Νέο (επιστροφή σε επιστροφή)",
@ -203,7 +245,54 @@
"topics.unpinned": "Αποστέλλω", "topics.unpinned": "Αποστέλλω",
"translate": "Μετάφραση", "translate": "Μετάφραση",
"input.generate_image": "Δημιουργία εικόνας", "input.generate_image": "Δημιουργία εικόνας",
"input.generate_image_not_supported": "Το μοντέλο δεν υποστηρίζει τη δημιουργία εικόνων" "input.generate_image_not_supported": "Το μοντέλο δεν υποστηρίζει τη δημιουργία εικόνων",
"history": {
"assistant_node": "Βοηθός",
"click_to_navigate": "Κάντε κλικ για να μεταβείτε στο αντίστοιχο μήνυμα",
"coming_soon": "Το διάγραμμα ροής συνομιλίας θα είναι σύντομα διαθέσιμο",
"no_messages": "Δεν βρέθηκαν μηνύματα",
"start_conversation": "Ξεκινήστε μια συνομιλία για να δείτε το διάγραμμα ροής",
"title": "Ιστορικό συνομιλιών",
"user_node": "Χρήστης",
"view_full_content": "Προβολή πλήρους περιεχομένου"
},
"input.translating": "Μετάφραση...",
"input.thinking": "Σκέψη",
"input.thinking.mode.default": "Προεπιλογή",
"input.thinking.mode.default.tip": "Το μοντέλο θα αποφασίσει αυτόματα τον αριθμό token για σκέψη",
"input.thinking.mode.custom": "Προσαρμοσμένο",
"input.thinking.mode.custom.tip": "Ο μέγιστος αριθμός token που μπορεί να σκεφτεί το μοντέλο. Πρέπει να ληφθεί υπόψη το όριο πλαισίου του μοντέλου, διαφορετικά θα εμφανιστεί σφάλμα",
"input.thinking.budget_exceeds_max": "Ο προϋπολογισμός σκέψης υπερβαίνει τον μέγιστο αριθμό token",
"input.upload.upload_from_local": "Μεταφόρτωση αρχείου από τον υπολογιστή...",
"input.web_search.builtin": "Ενσωματωμένη στο μοντέλο",
"input.web_search.builtin.enabled_content": "Χρήση της ενσωματωμένης δυνατότητας διαδικτυακής αναζήτησης του μοντέλου",
"input.web_search.builtin.disabled_content": "Η τρέχουσα έκδοση του μοντέλου δεν υποστηρίζει τη δυνατότητα διαδικτυακής αναζήτησης",
"input.web_search.no_web_search": "Χωρίς διαδίκτυο",
"input.web_search.no_web_search.description": "Να μην ενεργοποιηθεί η δυνατότητα διαδικτυακής αναζήτησης",
"settings.code_cacheable": "Κρυφή μνήμη κώδικα",
"settings.code_cacheable.tip": "Η κρυφή μνήμη των τμημάτων κώδικα μπορεί να μειώσει τον χρόνο απεικόνισης μεγάλων τμημάτων κώδικα, αλλά αυξάνει τη χρήση μνήμης",
"settings.code_cache_max_size": "Όριο κρυφής μνήμης",
"settings.code_cache_max_size.tip": "Μέγιστος αριθμός χαρακτήρων (σε χιλιάδες) που επιτρέπεται να αποθηκευτούν στην κρυφή μνήμη, υπολογίζεται με βάση τον κώδικα με χρώματα. Ο κώδικας με χρώματα είναι πολύ πιο μακρύς από τον καθαρό κείμενο.",
"settings.code_cache_ttl": "Διάρκεια κρυφής μνήμης",
"settings.code_cache_ttl.tip": "Χρόνος λήξης της κρυφής μνήμης (σε λεπτά)",
"settings.code_cache_threshold": "Κατώφλι κρυφής μνήμης",
"settings.code_cache_threshold.tip": "Ελάχιστο μήκος κώδικα (σε χιλιάδες χαρακτήρες) που επιτρέπεται να αποθηκευτεί στην κρυφή μνήμη. Μόνο τα τμήματα που υπερβαίνουν το κατώφλι θα αποθηκεύονται στην κρυφή μνήμη",
"topics.export.md.reason": "Εξαγωγή σε Markdown (περιλαμβανομένης της σκέψης)",
"topics.export.obsidian_vault": "Αποθήκη Obsidian",
"topics.export.obsidian_vault_placeholder": "Επιλέξτε το όνομα της αποθήκης",
"topics.export.obsidian_path": "Διαδρομή",
"topics.export.obsidian_path_placeholder": "Επιλέξτε διαδρομή",
"topics.export.obsidian_no_vaults": "Δεν βρέθηκε αποθήκη Obsidian",
"topics.export.obsidian_loading": "Φόρτωση...",
"topics.export.obsidian_fetch_error": "Αποτυχία λήψης της αποθήκης Obsidian",
"topics.export.obsidian_fetch_folders_error": "Αποτυχία λήψης της δομής φακέλων",
"topics.export.obsidian_no_vault_selected": "Παρακαλώ επιλέξτε μια αποθήκη πρώτα",
"topics.export.obsidian_select_vault_first": "Παρακαλώ επιλέξτε πρώτα μια αποθήκη",
"topics.export.obsidian_root_directory": "Κυρίως κατάλογος",
"topics.export.siyuan": "Εξαγωγή στο Siyuan Notepad",
"topics.export.wait_for_title_naming": "Γενικευμένος τίτλος...",
"topics.export.title_naming_success": "Ο τίτλος δημιουργήθηκε επιτυχώς",
"topics.export.title_naming_failed": "Η δημιουργία του τίτλου απέτυχε, θα χρησιμοποιηθεί ο προεπιλεγμένος τίτλος"
}, },
"code_block": { "code_block": {
"collapse": "συμπεριληφθείς", "collapse": "συμπεριληφθείς",
@ -254,7 +343,16 @@
"select": "Επιλογή", "select": "Επιλογή",
"topics": "Θέματα", "topics": "Θέματα",
"warning": "Προσοχή", "warning": "Προσοχή",
"you": "Εσείς" "you": "Εσείς",
"sort": {
"pinyin": "Ταξινόμηση κατά Πινγίν",
"pinyin.asc": "Αύξουσα ταξινόμηση κατά Πινγίν",
"pinyin.desc": "Φθίνουσα ταξινόμηση κατά Πινγίν"
},
"inspect": "Επιθεώρηση",
"collapse": "Σύμπτυξη",
"loading": "Φόρτωση...",
"reasoning_content": "Έχει σκεφτεί πολύ καλά"
}, },
"docs": { "docs": {
"title": "Βοήθεια" "title": "Βοήθεια"
@ -280,7 +378,9 @@
"description": "Απέτυχε η ώθηση της εξίσωσης, παρακαλώ ελέγξτε το σωστό μορφάτι της", "description": "Απέτυχε η ώθηση της εξίσωσης, παρακαλώ ελέγξτε το σωστό μορφάτι της",
"title": "Σφάλμα Παρασκήνιου" "title": "Σφάλμα Παρασκήνιου"
}, },
"user_message_not_found": "Αδυναμία εύρεσης της αρχικής μηνύματος χρήστη" "user_message_not_found": "Αδυναμία εύρεσης της αρχικής μηνύματος χρήστη",
"unknown": "Άγνωστο σφάλμα",
"pause_placeholder": "Διακόπηκε"
}, },
"export": { "export": {
"assistant": "βοηθός", "assistant": "βοηθός",
@ -393,7 +493,11 @@
"topN_tooltip": "Η ποσότητα των επιστρεφόμενων αποτελεσμάτων που συνάφονται, όσο μεγαλύτερη είναι η τιμή, τόσο περισσότερα αποτελέσματα συνδέονται, αλλά και οι καταναλωτικοί Token επειδή περισσότερα", "topN_tooltip": "Η ποσότητα των επιστρεφόμενων αποτελεσμάτων που συνάφονται, όσο μεγαλύτερη είναι η τιμή, τόσο περισσότερα αποτελέσματα συνδέονται, αλλά και οι καταναλωτικοί Token επειδή περισσότερα",
"url_added": "Η διεύθυνση προστέθηκε", "url_added": "Η διεύθυνση προστέθηκε",
"url_placeholder": "Εισάγετε τη διεύθυνση, χωρίστε πολλαπλές διευθύνσεις με επιστροφή", "url_placeholder": "Εισάγετε τη διεύθυνση, χωρίστε πολλαπλές διευθύνσεις με επιστροφή",
"urls": "Διευθύνσεις" "urls": "Διευθύνσεις",
"dimensions": "Διαστάσεις ενσωμάτωσης",
"dimensions_size_tooltip": "Το μέγεθος των διαστάσεων ενσωμάτωσης. Όσο μεγαλύτερη η τιμή, τόσο περισσότερες οι διαστάσεις ενσωμάτωσης, αλλά και οι απαιτούμενες μονάδες (Tokens).",
"dimensions_size_placeholder": "Προεπιλεγμένη τιμή (δεν συνιστάται να τροποποιηθεί)",
"dimensions_size_too_large": "Οι διαστάσεις ενσωμάτωσης δεν μπορούν να υπερβούν το όριο περιεχομένου του μοντέλου ({{max_context}})"
}, },
"languages": { "languages": {
"arabic": "Αραβικά", "arabic": "Αραβικά",
@ -505,20 +609,63 @@
"completed": "Ολοκληρώθηκε", "completed": "Ολοκληρώθηκε",
"invoking": "κλήση σε εξέλιξη", "invoking": "κλήση σε εξέλιξη",
"raw": "Ακατέργαστο", "raw": "Ακατέργαστο",
"preview": "Προεπισκόπηση" "preview": "Προεπισκόπηση",
"error": "Προέκυψε σφάλμα"
}, },
"topic.added": "Η θεματική προστέθηκε επιτυχώς", "topic.added": "Η θεματική προστέθηκε επιτυχώς",
"upgrade.success.button": "Επανεκκίνηση", "upgrade.success.button": "Επανεκκίνηση",
"upgrade.success.content": "Επανεκκίνηση για να ολοκληρώσετε την ενημέρωση", "upgrade.success.content": "Επανεκκίνηση για να ολοκληρώσετε την ενημέρωση",
"upgrade.success.title": "Η ενημέρωση ήταν επιτυχής", "upgrade.success.title": "Η ενημέρωση ήταν επιτυχής",
"warn.notion.exporting": "Εξαγωγή στο Notion, μην επαναλάβετε την διαδικασία εξαγωγής!", "warn.notion.exporting": "Εξαγωγή στο Notion, μην επαναλάβετε την διαδικασία εξαγωγής!",
"warning.rate.limit": "Υπερβολική συχνότητα στείλατε παρακαλώ περιμένετε {{seconds}} δευτερόλεπτα και προσπαθήστε ξανά" "warning.rate.limit": "Υπερβολική συχνότητα στείλατε παρακαλώ περιμένετε {{seconds}} δευτερόλεπτα και προσπαθήστε ξανά",
"agents": {
"imported": "Εισήχθη επιτυχώς",
"import.error": "Η εισαγωγή απέτυχε"
},
"citation": "{{count}} αναφορές",
"error.invalid.nutstore": "Μη έγκυρη ρύθμιση Nutstore",
"error.invalid.nutstore_token": "Μη έγκυρο Token Nutstore",
"processing": "Επεξεργασία...",
"error.siyuan.export": "Η έκθεση σημειώσεων Siyuan απέτυχε, ελέγξτε την κατάσταση σύνδεσης και τις ρυθμίσεις σύμφωνα με τα έγγραφα",
"error.siyuan.no_config": "Δεν έχει ρυθμιστεί η διεύθυνση API ή το Token του Siyuan Notes",
"success.siyuan.export": "Επιτυχής εξαγωγή στις σημειώσεις Siyuan",
"warn.yuque.exporting": "Γίνεται έκθεση Yuque· μην ξαναζητήσετε την έκθεση!",
"warn.siyuan.exporting": "Γίνεται εξαγωγή στις σημειώσεις Siyuan· μην ξαναζητήσετε την έκθεση!",
"download.success": "Λήψη ολοκληρώθηκε",
"download.failed": "Αποτυχία λήψης"
}, },
"minapp": { "minapp": {
"sidebar.add.title": "Προσθήκη στην πλευρή", "title": "Μικρόπρογραμμα",
"sidebar.remove.title": "Αφαίρεση από την πλευρή", "popup": {
"sidebar.hide.title": "Απόκρυψη μικροπρογράμματος", "refresh": "Ανανέωση",
"title": "Μικρόπρογραμμα" "close": "Κλείσιμο της εφαρμογής",
"minimize": "Ελαχιστοποίηση της εφαρμογής",
"devtools": "Εργαλεία προγραμματιστή",
"openExternal": "Άνοιγμα στον περιηγητή",
"rightclick_copyurl": "Αντιγραφή URL με δεξί κλικ",
"open_link_external_on": "Τρέχον: Άνοιγμα συνδέσμου στον περιηγητή",
"open_link_external_off": "Τρέχον: Άνοιγμα συνδέσμου χρησιμοποιώντας το προεπιλεγμένο παράθυρο"
},
"sidebar": {
"add": {
"title": "Προσθήκη στην πλευρική μπάρα"
},
"remove": {
"title": "Αφαίρεση από την πλευρική μπάρα"
},
"remove_custom": {
"title": "Διαγραφή προσαρμοσμένης εφαρμογής"
},
"hide": {
"title": "Απόκρυψη"
},
"close": {
"title": "Κλείσιμο"
},
"closeall": {
"title": "Κλείσιμο όλων"
}
}
}, },
"miniwindow": { "miniwindow": {
"clipboard": { "clipboard": {
@ -534,13 +681,17 @@
"copy_last_message": "Παράκαμε το τελευταίο μήνυμα", "copy_last_message": "Παράκαμε το τελευταίο μήνυμα",
"esc": "πατήστε ESC για {{action}}", "esc": "πατήστε ESC για {{action}}",
"esc_back": "Επιστροφή", "esc_back": "Επιστροφή",
"esc_close": "Κλείσιμο παραθύρου" "esc_close": "Κλείσιμο παραθύρου",
"backspace_clear": "Πατήστε το πλήκτρο Backspace για να κάνετε εκκαθάριση"
}, },
"input": { "input": {
"placeholder": { "placeholder": {
"empty": "Ρώτα τον {{model}} για βοήθεια...", "empty": "Ρώτα τον {{model}} για βοήθεια...",
"title": "Τι θέλεις να κάνεις με το κείμενο που είναι παρακάτω" "title": "Τι θέλεις να κάνεις με το κείμενο που είναι παρακάτω"
} }
},
"tooltip": {
"pin": "Καρφίτσωμα παραθύρου"
} }
}, },
"models": { "models": {
@ -577,7 +728,9 @@
"free": "δωρεάν", "free": "δωρεάν",
"rerank": "Τακτοποιώ", "rerank": "Τακτοποιώ",
"websearch": "δικτύωση" "websearch": "δικτύωση"
} },
"rerank_model_not_support_provider": "Ο επαναξιολογητικός μοντέλος δεν υποστηρίζει αυτόν τον πάροχο ({{provider}})",
"enable_tool_use": "Ενεργοποίηση κλήσης εργαλείου"
}, },
"navbar": { "navbar": {
"expand": "Επισκευή διαλόγου", "expand": "Επισκευή διαλόγου",
@ -609,7 +762,59 @@
"regenerate.confirm": "Αυτό θα επιβάλει τις δημιουργίες που έχετε κάνει, θέλετε να συνεχίσετε;", "regenerate.confirm": "Αυτό θα επιβάλει τις δημιουργίες που έχετε κάνει, θέλετε να συνεχίσετε;",
"seed": "Τυχαίος παράγοντας", "seed": "Τυχαίος παράγοντας",
"seed_tip": "Η χρήση του ίδιου παραγόντα και του σχολίου μπορεί να δημιουργήσει παρόμοιες εικόνες", "seed_tip": "Η χρήση του ίδιου παραγόντα και του σχολίου μπορεί να δημιουργήσει παρόμοιες εικόνες",
"title": "Εικόνα" "title": "Εικόνα",
"mode": {
"generate": "Δημιουργία",
"edit": "Επεξεργασία",
"remix": "Ανάμειξη",
"upscale": "Μεγέθυνση"
},
"generate": {
"model_tip": "Έκδοση μοντέλου: Το V2 είναι το τελευταίο μοντέλο διεπαφής, το V2A είναι γρήγορο μοντέλο, το V_1 είναι το αρχικό μοντέλο και το _TURBO είναι η επιταχυνόμενη έκδοση",
"number_images_tip": "Αριθμός εικόνων ανά παραγωγή",
"seed_tip": "Ελέγχει την τυχαιότητα της δημιουργίας εικόνας, χρησιμοποιείται για να επαναληφθεί το ίδιο αποτέλεσμα",
"negative_prompt_tip": "Περιγράψτε στοιχεία που δεν θέλετε να εμφανίζονται στην εικόνα, υποστηρίζεται μόνο στις εκδόσεις V_1, V_1_TURBO, V_2 και V_2_TURBO",
"magic_prompt_option_tip": "Έξυπνη βελτιστοποίηση της προτροπής για βελτίωση των αποτελεσμάτων",
"style_type_tip": "Στυλ δημιουργίας εικόνας, ισχύει μόνο για την έκδοση V_2 και μεταγενέστερες"
},
"edit": {
"image_file": "Επεξεργασμένη εικόνα",
"model_tip": "Η λειτουργία επεξεργασίας υποστηρίζεται μόνο από τις εκδόσεις V_2 και V_2_TURBO",
"number_images_tip": "Αριθμός των αποτελεσμάτων επεξεργασίας που θα δημιουργηθούν",
"style_type_tip": "Ο τύπος στυλ για την επεξεργασμένη εικόνα, ισχύει μόνο για την έκδοση V_2 και νεότερες",
"seed_tip": "Έλεγχος της τυχαιότητας στα αποτελέσματα επεξεργασίας",
"magic_prompt_option_tip": "Έξυπνη βελτιστοποίηση της πρότασης επεξεργασίας"
},
"remix": {
"model_tip": "Επιλέξτε την έκδοση του AI μοντέλου για χρήση σε remix",
"image_file": "Εικόνα αναφοράς",
"image_weight": "Βάρος εικόνας αναφοράς",
"image_weight_tip": "Ρυθμίστε την επίδραση της εικόνας αναφοράς",
"number_images_tip": "Αριθμός αποτελεσμάτων remix που θα δημιουργηθούν",
"seed_tip": "Έλεγχος τυχαιότητας των αποτελεσμάτων remix",
"style_type_tip": "Στυλ εικόνας μετά το remix, διαθέσιμο μόνο για εκδόσεις V_2 και νεότερες",
"negative_prompt_tip": "Περιγράψτε στοιχεία που δεν θέλετε να εμφανιστούν στο αποτέλεσμα remix",
"magic_prompt_option_tip": "Έξυπνη βελτιστοποίηση της προτροπής remix"
},
"upscale": {
"image_file": "Εικόνα που χρειάζεται μεγέθυνση",
"resemblance": "Ομοιότητα",
"resemblance_tip": "Ρυθμίστε την ομοιότητα της μεγεθυσμένης εικόνας με την αρχική",
"detail": "Λεπτομέρεια",
"detail_tip": "Ρυθμίστε την ένταση των λεπτομερειών στην μεγεθυσμένη εικόνα",
"number_images_tip": "Αριθμός των αποτελεσμάτων μεγέθυνσης που θα δημιουργηθούν",
"seed_tip": "Ελέγχει την τυχαιότητα του αποτελέσματος μεγέθυνσης",
"magic_prompt_option_tip": "Έξυπνη βελτιστοποίηση της προτροπής μεγέθυνσης"
},
"magic_prompt_option": "Ενίσχυση προτροπής",
"model": "Έκδοση",
"aspect_ratio": "Λόγος διαστάσεων",
"style_type": "Στυλ",
"learn_more": "Μάθετε περισσότερα",
"prompt_placeholder_edit": "Εισάγετε την περιγραφή της εικόνας σας, χρησιμοποιήστε διπλά εισαγωγικά \"\" για κείμενο",
"proxy_required": "Αυτή τη στιγμή χρειάζεται να ενεργοποιήσετε τον μεσολαβητή (proxy) για να δείτε τις δημιουργημένες εικόνες. Στο μέλλον θα υποστηρίζεται η άμεση σύνδεση στην Κίνα",
"image_file_required": "Παρακαλώ ανεβάστε πρώτα μια εικόνα",
"image_file_retry": "Παρακαλώ ανεβάστε ξανά την εικόνα"
}, },
"plantuml": { "plantuml": {
"download": { "download": {
@ -672,7 +877,9 @@
"xirang": "China Telecom Xiran", "xirang": "China Telecom Xiran",
"yi": "Zero One Wanyiwu", "yi": "Zero One Wanyiwu",
"zhinao": "360 Intelligent Brain", "zhinao": "360 Intelligent Brain",
"zhipu": "Zhipu AI" "zhipu": "Zhipu AI",
"voyageai": "Voyage AI",
"qiniu": "Qiniu Cloud"
}, },
"restore": { "restore": {
"confirm": "Είστε σίγουροι ότι θέλετε να επαναφέρετε τα δεδομένα;", "confirm": "Είστε σίγουροι ότι θέλετε να επαναφέρετε τα δεδομένα;",
@ -714,7 +921,6 @@
"advanced.title": "Ρυθμίσεις Ανώτερου Νiveau", "advanced.title": "Ρυθμίσεις Ανώτερου Νiveau",
"assistant": "Πρόεδρος Υπηρεσίας", "assistant": "Πρόεδρος Υπηρεσίας",
"assistant.model_params": "Παράμετροι Μοντέλου", "assistant.model_params": "Παράμετροι Μοντέλου",
"assistant.show.icon": "Εμφάνιση εικονιδίου μοντέλου",
"assistant.title": "Πρόεδρος Υπηρεσίας", "assistant.title": "Πρόεδρος Υπηρεσίας",
"data": { "data": {
"app_data": "Δεδομένα εφαρμογής", "app_data": "Δεδομένα εφαρμογής",
@ -780,13 +986,13 @@
"notion.split_size_placeholder": "Εισαγάγετε τον περιορισμό μπλοκ κάθε σελίδας (προεπιλογή: 90)", "notion.split_size_placeholder": "Εισαγάγετε τον περιορισμό μπλοκ κάθε σελίδας (προεπιλογή: 90)",
"notion.title": "Ρυθμίσεις του Notion", "notion.title": "Ρυθμίσεις του Notion",
"obsidian": { "obsidian": {
"folder": "Φάκελος",
"folder_placeholder": "Παρακαλώ εισάγετε όνομα φακέλου",
"tags": "Παγκόσμιοι ετικέτες",
"tags_placeholder": "Παρακαλώ εισάγετε ονόματα ετικετών, χωριστά με κόμματα, οι ετικέτες στο Obsidian δεν μπορούν να είναι μόνο αριθμοί",
"title": "Ρύθμιση του Obsidian", "title": "Ρύθμιση του Obsidian",
"vault": "Αποθήκη", "default_vault": "Προεπιλεγμένο αποθετήριο Obsidian",
"vault_placeholder": "Παρακαλώ εισάγετε όνομα αποθήκης" "default_vault_placeholder": "Επιλέξτε προεπιλεγμένο αποθετήριο Obsidian",
"default_vault_loading": "Ανάκτηση αποθετηρίου Obsidian...",
"default_vault_no_vaults": "Δεν βρέθηκε αποθετήριο Obsidian",
"default_vault_fetch_error": "Αποτυχία ανάκτησης αποθετηρίου Obsidian",
"default_vault_export_failed": "Η εξαγωγή απέτυχε"
}, },
"title": "Ρυθμίσεις δεδομένων", "title": "Ρυθμίσεις δεδομένων",
"webdav": { "webdav": {
@ -818,7 +1024,26 @@
"title": "WebDAV", "title": "WebDAV",
"user": "Όνομα χρήστη WebDAV", "user": "Όνομα χρήστη WebDAV",
"maxBackups": "Μέγιστο αριθμό αρχείων αντιγραφής ασφαλείας", "maxBackups": "Μέγιστο αριθμό αρχείων αντιγραφής ασφαλείας",
"maxBackups.unlimited": "Απεριόριστο" "maxBackups.unlimited": "Απεριόριστο",
"backup.manager.title": "Διαχείριση δεδομένων αντιγράφου ασφαλείας",
"backup.manager.refresh": "Ανανέωση",
"backup.manager.delete.selected": "Διαγραφή επιλεγμένων",
"backup.manager.delete.text": "Διαγραφή",
"backup.manager.restore.text": "Επαναφορά",
"backup.manager.restore.success": "Η επαναφορά ήταν επιτυχής, η εφαρμογή θα ανανεωθεί σε λίγα δευτερόλεπτα",
"backup.manager.restore.error": "Αποτυχία επαναφοράς",
"backup.manager.delete.confirm.title": "Επιβεβαίωση διαγραφής",
"backup.manager.delete.confirm.single": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το αντίγραφο ασφαλείας \"{{fileName}}\"; Η ενέργεια αυτή δεν μπορεί να αναιρεθεί.",
"backup.manager.delete.confirm.multiple": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τα {{count}} επιλεγμένα αντίγραφα ασφαλείας; Η ενέργεια αυτή δεν μπορεί να αναιρεθεί.",
"backup.manager.delete.success.single": "Η διαγραφή ήταν επιτυχής",
"backup.manager.delete.success.multiple": "Τα {{count}} αντίγραφα ασφαλείας διαγράφηκαν επιτυχώς",
"backup.manager.delete.error": "Αποτυχία διαγραφής",
"backup.manager.fetch.error": "Αποτυχία λήψης αντιγράφων ασφαλείας",
"backup.manager.select.files.delete": "Παρακαλώ επιλέξτε τα αντίγραφα ασφαλείας προς διαγραφή",
"backup.manager.columns.fileName": "Όνομα αρχείου",
"backup.manager.columns.modifiedTime": "Ώρα τροποποίησης",
"backup.manager.columns.size": "Μέγεθος",
"backup.manager.columns.actions": "Ενέργειες"
}, },
"yuque": { "yuque": {
"check": { "check": {
@ -834,16 +1059,73 @@
"title": "Ρύθμιση Yusi", "title": "Ρύθμιση Yusi",
"token": "Token του Yusi", "token": "Token του Yusi",
"token_placeholder": "Παρακαλούμε εισάγετε το Token του Yusi" "token_placeholder": "Παρακαλούμε εισάγετε το Token του Yusi"
} },
"export_menu": {
"title": "Εξαγωγή ρυθμίσεων μενού",
"image": "Εξαγωγή ως εικόνα",
"markdown": "Εξαγωγή σε Markdown",
"markdown_reason": "Εξαγωγή σε Markdown (περιλαμβάνει σκέψη)",
"notion": "Εξαγωγή στο Notion",
"yuque": "Εξαγωγή στο Yuque",
"obsidian": "Εξαγωγή στο Obsidian",
"siyuan": "Εξαγωγή στο Ση-Υάν",
"joplin": "Εξαγωγή στο Joplin",
"docx": "Εξαγωγή σε Word"
},
"siyuan": {
"check": {
"title": "Έλεγχος Σύνδεσης",
"button": "Έλεγχος",
"empty_config": "Παρακαλώ εισάγετε τη διεύθυνση API και το token",
"success": "Η σύνδεση ήταν επιτυχής",
"fail": "Αποτυχία σύνδεσης, παρακαλώ ελέγξτε τη διεύθυνση API και το token",
"error": "Αιφνίδια διακοπή σύνδεσης, παρακαλώ ελέγξτε τη σύνδεση δικτύου"
},
"title": "Ρυθμίσεις του Siyuan Σημειώσεων",
"api_url": "Διεύθυνση API",
"api_url_placeholder": "Παράδειγμα: http://127.0.0.1:6806",
"token": "Κλειδί API",
"token.help": "Λήψη από Siyuan Σημειώσεις -> Ρυθμίσεις -> Σχετικά",
"token_placeholder": "Εισάγετε το κλειδί των Siyuan Σημειώσεων",
"box_id": "ID Υπολογιστή",
"box_id_placeholder": "Εισάγετε το ID υπολογιστή",
"root_path": "Κεντρική διαδρομή εγγράφων",
"root_path_placeholder": "Παράδειγμα: /CherryStudio"
},
"nutstore": {
"title": "Ρυθμίσεις Jotunn Cloud",
"isLogin": "Συνδεδεμένος",
"notLogin": "Μη συνδεδεμένος",
"login.button": "Σύνδεση",
"logout.button": "Αποσύνδεση",
"logout.title": "Επιβεβαίωση αποσύνδεσης από το Jotunn Cloud;",
"logout.content": "Μετά την αποσύνδεση δεν θα μπορείτε να κάνετε αντίγραφο ασφαλείας ή να ανακτήσετε δεδομένα από το Jotunn Cloud",
"checkConnection.name": "Έλεγχος σύνδεσης",
"checkConnection.success": "Συνδεδεμένο στο Jotunn Cloud",
"checkConnection.fail": "Αποτυχία σύνδεσης στο Jotunn Cloud",
"username": "Όνομα χρήστη Jotunn Cloud",
"path": "Διαδρομή αποθήκευσης Jotunn Cloud",
"path.placeholder": "Παρακαλώ εισάγετε τη διαδρομή αποθήκευσης του Jotunn Cloud",
"backup.button": "Αντίγραφο ασφαλείας στο Jotunn Cloud",
"restore.button": "Επαναφορά από το Jotunn Cloud",
"pathSelector.title": "Διαδρομή αποθήκευσης Jotunn Cloud",
"pathSelector.return": "Πίσω",
"pathSelector.currentPath": "Τρέχουσα διαδρομή",
"new_folder.button.confirm": "Επιβεβαίωση",
"new_folder.button.cancel": "Άκυρο",
"new_folder.button": "Νέος φάκελος"
},
"divider.basic": "Ρυθμίσεις βασικών δεδομένων",
"divider.cloud_storage": "Ρυθμίσεις αποθήκευσης στο νέφος",
"divider.export_settings": "Ρυθμίσεις εξαγωγής",
"divider.third_party": "Σύνδεση τρίτων",
"message_title.use_topic_naming.title": "Δημιουργία τίτλων μηνυμάτων χρησιμοποιώντας μοντέλο ονομασίας θεμάτων",
"message_title.use_topic_naming.help": "Όταν είναι ενεργό, δημιουργεί τίτλους για τα μηνύματα που εξάγονται χρησιμοποιώντας μοντέλο ονομασίας θεμάτων. Αυτό επηρεάζει επίσης όλες τις μεθόδους εξαγωγής μέσω Markdown."
}, },
"display.assistant.title": "Ρυθμίσεις Υπηρεσίας", "display.assistant.title": "Ρυθμίσεις Υπηρεσίας",
"display.custom.css": "Προσαρμοστική CSS", "display.custom.css": "Προσαρμοστική CSS",
"display.custom.css.cherrycss": "Λήψη από cherrycss.com", "display.custom.css.cherrycss": "Λήψη από cherrycss.com",
"display.custom.css.placeholder": "/* Γράψτε εδώ την προσαρμοστική CSS */", "display.custom.css.placeholder": "/* Γράψτε εδώ την προσαρμοστική CSS */",
"display.minApp.disabled": "Αποκρυμμένα μικροπρογράμματα",
"display.minApp.empty": "Βάλτε εδώ τα μικροπρογράμματα που θέλετε να κρύψετε από την αριστερά",
"display.minApp.title": "Ρυθμίσεις εμφάνισης μικροπρογραμμάτων",
"display.minApp.visible": "Εμφανιζόμενα μικροπρογράμματα",
"display.sidebar.chat.hiddenMessage": "Η υπηρεσία είναι βασική λειτουργία και δεν υποστηρίζεται η κρυμμένη εμφάνιση", "display.sidebar.chat.hiddenMessage": "Η υπηρεσία είναι βασική λειτουργία και δεν υποστηρίζεται η κρυμμένη εμφάνιση",
"display.sidebar.disabled": "Αποκρυμμένα εικονίδια", "display.sidebar.disabled": "Αποκρυμμένα εικονίδια",
"display.sidebar.empty": "Βάλτε εδώ τις λειτουργίες που θέλετε να κρύψετε από την αριστερά", "display.sidebar.empty": "Βάλτε εδώ τις λειτουργίες που θέλετε να κρύψετε από την αριστερά",
@ -864,7 +1146,6 @@
"general.display.title": "Ρυθμίσεις εμφάνισης", "general.display.title": "Ρυθμίσεις εμφάνισης",
"general.emoji_picker": "Επιλογή σμιλιών", "general.emoji_picker": "Επιλογή σμιλιών",
"general.image_upload": "Φόρτωση εικόνων", "general.image_upload": "Φόρτωση εικόνων",
"general.manually_check_update.title": "Απενεργοποίηση ελέγχου ενημερώσεων",
"general.reset.button": "Επαναφορά", "general.reset.button": "Επαναφορά",
"general.reset.title": "Επαναφορά δεδομένων", "general.reset.title": "Επαναφορά δεδομένων",
"general.restore.button": "Αποκατάσταση", "general.restore.button": "Αποκατάσταση",
@ -930,11 +1211,94 @@
"serverPlural": "Διακομιστές", "serverPlural": "Διακομιστές",
"serverSingular": "Διακομιστής", "serverSingular": "Διακομιστής",
"title": "Διακομιστές MCP", "title": "Διακομιστές MCP",
"toggleError": "Αποτυχία εναλλαγής",
"type": "Τύπος", "type": "Τύπος",
"updateError": "Αποτυχία ενημέρωσης διακομιστή", "updateError": "Αποτυχία ενημέρωσης διακομιστή",
"updateSuccess": "Ο διακομιστής ενημερώθηκε επιτυχώς", "updateSuccess": "Ο διακομιστής ενημερώθηκε επιτυχώς",
"url": "URL" "url": "URL",
"errors": {
"32000": "Η εκκίνηση του MCP απέτυχε. Παρακαλώ ελέγξτε αν όλες οι παράμετροι έχουν συμπληρωθεί σύμφωνα με τον οδηγό."
},
"tabs": {
"general": "Γενικά",
"description": "Περιγραφή",
"tools": "Εργαλεία",
"prompts": "Ερωτήματα",
"resources": "Πόροι"
},
"tools": {
"inputSchema": "Είσοδος Σχήματος",
"availableTools": "Διαθέσιμα Εργαλεία",
"noToolsAvailable": "Δεν υπάρχουν διαθέσιμα εργαλεία",
"loadError": "Αποτυχία φόρτωσης εργαλείων"
},
"prompts": {
"availablePrompts": "Διαθέσιμες Υποδείξεις",
"noPromptsAvailable": "Δεν υπάρχουν διαθέσιμες υποδείξεις",
"arguments": "Ορίσματα",
"requiredField": "Υποχρεωτικό πεδίο",
"genericError": "Σφάλμα κατά τη λήψη της υπόδειξης",
"loadError": "Αποτυχία λήψης υπόδειξης"
},
"resources": {
"noResourcesAvailable": "Δεν υπάρχουν διαθέσιμοι πόροι",
"availableResources": "Διαθέσιμοι πόροι",
"uri": "URI",
"mimeType": "Τύπος MIME",
"size": "Μέγεθος",
"blob": "Δυαδικά δεδομένα",
"blobInvisible": "Αόρατα δυαδικά δεδομένα",
"text": "Κείμενο"
},
"types": {
"inMemory": "Ενσωματωμένη",
"sse": "SSE",
"streamableHttp": "Ροή",
"stdio": "STDIO"
},
"sync": {
"title": "Συγχρονισμός Διακομιστή",
"selectProvider": "Επιλέξτε Πάροχο:",
"discoverMcpServers": "Ανακάλυψη MCP Διακομιστών",
"discoverMcpServersDescription": "Πρόσβαση στην πλατφόρμα για ανακάλυψη διαθέσιμων MCP διακομιστών",
"getToken": "Λήψη API Τοκεν",
"getTokenDescription": "Λήψη ενός προσωπικού API τοκεν από τον λογαριασμό σας",
"setToken": "Εισαγάγετε το τοκεν σας",
"tokenRequired": "Απαιτείται API Τοκεν",
"tokenPlaceholder": "Εισάγετε το API τοκεν εδώ",
"button": "Συγχρονισμός",
"error": "Σφάλμα κατά τον συγχρονισμό MCP διακομιστή",
"success": "Ο συγχρονισμός MCP διακομιστή ολοκληρώθηκε επιτυχώς",
"unauthorized": "Δεν εξουσιοδοτήθηκε ο συγχρονισμός",
"noServersAvailable": "Δεν υπάρχουν διαθέσιμοι MCP διακομιστές"
},
"sse": "Συμβάντα Αποστολής από τον Διακομιστή (sse)",
"streamableHttp": "Ρέουσα μεταφορά HTTP (streamableHttp)",
"stdio": "Πρότυπη Είσοδος/Έξοδος (stdio)",
"inMemory": "Σε Μνήμη",
"headers": "Κεφαλίδες",
"headersTooltip": "Προσαρμοσμένες κεφαλίδες HTTP αιτήσεων",
"searchNpx": "Αναζήτηση MCP",
"newServer": "Διακομιστής MCP",
"startError": "Εκκίνηση Απέτυχε",
"editMcpJson": "Επεξεργασία ρύθμισης MCP",
"installHelp": "Λήψη βοήθειας εγκατάστασης",
"deleteServer": "Διαγραφή διακομιστή",
"deleteServerConfirm": "Είστε σίγουρος ότι θέλετε να διαγράψετε αυτόν τον διακομιστή;",
"registry": "Πηγή Διαχείρισης πακέτων",
"registryTooltip": "Επιλέξτε την πηγή για την εγκατάσταση πακέτων, για να αντιμετωπιστούν προβλήματα δικτύου από την προεπιλεγμένη πηγή.",
"registryDefault": "Προεπιλεγμένη",
"not_support": "Το μοντέλο δεν υποστηρίζεται",
"user": "Χρήστης",
"system": "Σύστημα",
"timeout": "Τερματισμός λόγω αδράνειας",
"timeoutTooltip": "Ο χρόνος λήξης αιτήσεων για αυτόν τον διακομιστή (σε δευτερόλεπτα), προεπιλεγμένος είναι 60 δευτερόλεπτα",
"provider": "Πάροχος",
"providerUrl": "URL Παρόχου",
"logoUrl": "URL Λογότυπου",
"tags": "Ετικέτες",
"tagsPlaceholder": "Εισάγετε ετικέτες",
"providerPlaceholder": "Όνομα παρόχου",
"advancedSettings": "Προχωρημένες Ρυθμίσεις"
}, },
"messages.divider": "Διαχωριστική γραμμή μηνυμάτων", "messages.divider": "Διαχωριστική γραμμή μηνυμάτων",
"messages.grid_columns": "Αριθμός στήλων γριλ μηνυμάτων", "messages.grid_columns": "Αριθμός στήλων γριλ μηνυμάτων",
@ -1046,13 +1410,29 @@
"docs_more_details": "Λάβετε περισσότερες λεπτομέρειες", "docs_more_details": "Λάβετε περισσότερες λεπτομέρειες",
"get_api_key": "Κάντε κλικ εδώ για να πάρετε κλειδί", "get_api_key": "Κάντε κλικ εδώ για να πάρετε κλειδί",
"is_not_support_array_content": "Ενεργοποίηση συμβατικού μοντέλου", "is_not_support_array_content": "Ενεργοποίηση συμβατικού μοντέλου",
"no_models": "Πρέπει να προσθέσετε πρώτα πρόσωπο το πρόσωπο της μονάδας πριν ελέγξετε τη σύνδεση API",
"not_checked": "Δεν ελέγχεται", "not_checked": "Δεν ελέγχεται",
"remove_duplicate_keys": "Αφαίρεση Επαναλαμβανόμενων Κλειδιών", "remove_duplicate_keys": "Αφαίρεση Επαναλαμβανόμενων Κλειδιών",
"remove_invalid_keys": "Διαγραφή Ακυρωμένων Κλειδιών", "remove_invalid_keys": "Διαγραφή Ακυρωμένων Κλειδιών",
"search": "Αναζήτηση πλατφόρμας μονάδων...", "search": "Αναζήτηση πλατφόρμας μονάδων...",
"search_placeholder": "Αναζήτηση ID ή ονόματος μονάδας", "search_placeholder": "Αναζήτηση ID ή ονόματος μονάδας",
"title": "Υπηρεσία μονάδων" "title": "Υπηρεσία μονάδων",
"oauth": {
"button": "Σύνδεση με λογαριασμό {{provider}}",
"description": "Η υπηρεσία παρέχεται από την ιστοσελίδα {{provider}}",
"official_website": "Επίσημη ιστοσελίδα"
},
"notes": {
"title": "Σχόλιο Μοντέλου",
"placeholder": "Εισάγετε περιεχόμενο σε μορφή Markdown...",
"markdown_editor_default_value": "Περιοχή Προεπισκόπησης"
},
"basic_auth": "Πιστοποίηση HTTP",
"basic_auth.tip": "Ισχύει για περιπτώσεις που τοποθετούνται σε διακομιστή (δείτε την τεκμηρίωση). Υποστηρίζεται μόνο το σχήμα Basic (RFC7617).",
"basic_auth.user_name": "Όνομα χρήστη",
"basic_auth.user_name.tip": "Αφήστε κενό για να απενεργοποιήσετε",
"basic_auth.password": "Κωδικός πρόσβασης",
"bills": "Λογαριασμοί",
"no_models_for_check": "Δεν υπάρχουν μοντέλα για έλεγχο (π.χ. μοντέλα συνομιλίας)"
}, },
"proxy": { "proxy": {
"mode": { "mode": {
@ -1129,8 +1509,111 @@
"description": "Το Tavily είναι ένα αναζητητής που διαμορφώνεται για AI-agents, παρέχοντας συνεχεία ακριβείς αποτελέσματα, νοηματικές προτάσεις αναζήτησης και βαθειά ικανότητες μελέτης", "description": "Το Tavily είναι ένα αναζητητής που διαμορφώνεται για AI-agents, παρέχοντας συνεχεία ακριβείς αποτελέσματα, νοηματικές προτάσεις αναζήτησης και βαθειά ικανότητες μελέτης",
"title": "Tavily" "title": "Tavily"
}, },
"title": "Διαδικτυακή αναζήτηση" "title": "Διαδικτυακή αναζήτηση",
} "overwrite": "Επικάλυψη πάροχου αναζήτησης",
"overwrite_tooltip": "Εξαναγκαστική χρήση του πάροχου αναζήτησης αντί του μεγάλου γλωσσικού μοντέλου για αναζήτηση",
"subscribe": "Συνδρομή λίστας αποκλεισμού",
"subscribe_update": "Ενημέρωση τώρα",
"subscribe_add": "Προσθήκη συνδρομής",
"subscribe_url": "Διεύθυνση συνδρομής",
"subscribe_name": "Εναλλακτικό όνομα",
"subscribe_name.placeholder": "Εναλλακτικό όνομα που θα χρησιμοποιείται όταν η ληφθείσα συνδρομή δεν έχει όνομα",
"subscribe_add_success": "Η συνδρομή προστέθηκε επιτυχώς!",
"subscribe_delete": "Διαγραφή συνδρομής",
"apikey": "Κλειδί API",
"free": "Δωρεάν",
"content_limit": "Περιορισμός μήκους περιεχομένου",
"content_limit_tooltip": "Περιορίζει το μήκος του περιεχομένου των αποτελεσμάτων αναζήτησης, το περιεχόμενο πέρα από το όριο θα περικόπτεται"
},
"miniapps": {
"open_link_external": {
"title": "Άνοιγμα νέου παραθύρου σύνδεσης στον περιηγητή"
},
"custom": {
"title": "Προσαρμοσμένη Εφαρμογή",
"edit_title": "Επεξεργασία Προσαρμοσμένης Εφαρμογής",
"save_success": "Η προσαρμοσμένη εφαρμογή αποθηκεύτηκε επιτυχώς.",
"save_error": "Αποτυχία αποθήκευσης της προσαρμοσμένης εφαρμογής.",
"remove_success": "Η προσαρμοσμένη εφαρμογή διαγράφηκε επιτυχώς.",
"remove_error": "Αποτυχία διαγραφής της προσαρμοσμένης εφαρμογής.",
"logo_upload_success": "Το Logo μεταφορτώθηκε επιτυχώς.",
"logo_upload_error": "Αποτυχία μεταφόρτωσης του Logo.",
"id": "ID",
"id_error": "Το ID είναι υποχρεωτικό πεδίο.",
"id_placeholder": "Παρακαλώ εισάγετε το ID",
"name": "Όνομα",
"name_error": "Το Όνομα είναι υποχρεωτικό πεδίο.",
"name_placeholder": "Παρακαλώ εισάγετε το όνομα",
"url": "URL",
"url_error": "Το URL είναι υποχρεωτικό πεδίο.",
"url_placeholder": "Παρακαλώ εισάγετε το URL",
"logo": "Logo",
"logo_url": "Logo URL",
"logo_file": "Μεταφόρτωση Logo Αρχείου",
"logo_url_label": "Logo URL",
"logo_url_placeholder": "Παρακαλώ εισάγετε το Logo URL",
"logo_upload_label": "Μεταφόρτωση Logo",
"logo_upload_button": "Μεταφόρτωση",
"save": "Αποθήκευση",
"edit_description": "Επεξεργαστείτε τη διαμόρφωση της προσαρμοσμένης σας εφαρμογής εδώ. Κάθε εφαρμογή πρέπει να περιλαμβάνει τα πεδία id, name, url και logo.",
"placeholder": "Παρακαλώ εισάγετε τη διαμόρφωση της προσαρμοσμένης εφαρμογής (Μορφή JSON)",
"duplicate_ids": "Εντοπίστηκαν διπλότυπα ID: {{ids}}",
"conflicting_ids": "Υπάρχει σύγκρουση με τα προεπιλεγμένα ID της εφαρμογής: {{ids}}"
},
"title": "Ρυθμίσεις Μικροπρογράμματος",
"disabled": "Απόκρυψη μικροπρογράμματος",
"empty": "Σύρετε το μικροπρόγραμμα που θέλετε να αποκρύψετε από την αριστερή πλευρά σε αυτήν την περιοχή",
"visible": "Εμφανιζόμενα μικροπρογράμματα",
"cache_settings": "Ρυθμίσεις Προσωρινής Μνήμης",
"cache_title": "Ποσότητα Προσωρινής Μνήμης Μικροπρογράμματος",
"cache_description": "Ορίστε τον μέγιστο αριθμό των μικροπρογραμμάτων που μπορούν να είναι ενεργά ταυτόχρονα",
"reset_tooltip": "Επαναφορά στις προεπιλεγμένες τιμές",
"display_title": "Ρυθμίσεις Εμφάνισης Μικροπρογράμματος",
"sidebar_title": "Ρυθμίσεις Εμφάνισης Ενεργού Μικροπρογράμματος στην Πλευρική Γραμμή",
"sidebar_description": "Καθορίστε εάν το ενεργό μικροπρόγραμμα θα εμφανίζεται στην πλευρική γραμμή",
"cache_change_notice": "Η αλλαγή θα τεθεί σε ισχύ αφού το πλήθος των ανοιχτών μικροπρογραμμάτων φτάσει τη ρυθμισμένη τιμή"
},
"quickPhrase": {
"title": "Γρήγορες Φράσεις",
"add": "Προσθήκη Φράσης",
"edit": "Επεξεργασία Φράσης",
"titleLabel": "Τίτλος",
"contentLabel": "Περιεχόμενο",
"titlePlaceholder": "Παρακαλώ εισάγετε τίτλο φράσης",
"contentPlaceholder": "Παρακαλώ εισάγετε περιεχόμενο φράσης. Υποστηρίζεται η χρήση μεταβλητών, και στη συνέχεια πατήστε Tab για να μεταβείτε γρήγορα στη μεταβλητή και να την τροποποιήσετε. Για παράδειγμα: \\\\n Βοήθησέ με να σχεδιάσω μια διαδρομή από το ${from} στο ${to}, και στη συνέχεια να τη στείλεις στο ${email}.",
"delete": "Διαγραφή Φράσης",
"deleteConfirm": "Η διαγραφή της φράσης δεν μπορεί να αναιρεθεί. Θέλετε να συνεχίσετε;",
"locationLabel": "Προσθήκη Τοποθεσίας",
"global": "Κοινές Φράσεις",
"assistant": "Φράσεις Βοηθού"
},
"quickPanel": {
"title": "Γρήγορη Πρόσβαση",
"close": "Κλείσιμο",
"select": "Επιλογή",
"page": "Σελίδα",
"confirm": "Επιβεβαίωση",
"back": "Πίσω",
"forward": "Μπρος",
"multiple": "Πολλαπλή επιλογή"
},
"privacy": {
"title": "Ρυθμίσεις Απορρήτου",
"enable_privacy_mode": "Αποστολή ανώνυμων αναφορών σφαλμάτων και στατιστικών δεδομένων"
},
"assistant.icon.type": "Τύπος εικονιδίου μοντέλου",
"assistant.icon.type.model": "Εικονίδιο μοντέλου",
"assistant.icon.type.emoji": "Emoji",
"assistant.icon.type.none": "Κανένα",
"general.auto_check_update.title": "Αυτόματη ενημέρωση",
"input.show_translate_confirm": "Εμφάνιση παραθύρου επιβεβαίωσης μετάφρασης",
"messages.prompt": "Λήμμα προτροπής",
"messages.input.enable_quick_triggers": "Ενεργοποίηση των '/' και '@' για γρήγορη πρόσβαση σε μενού",
"messages.input.enable_delete_model": "Ενεργοποίηση διαγραφής μοντέλων/επισυναπτόμενων αρχείων με το πλήκτρο διαγραφής",
"messages.math_engine.none": "Κανένα",
"models.manage.add_listed": "Προσθήκη μοντέλων από τη λίστα",
"models.manage.remove_listed": "Αφαίρεση μοντέλων από τη λίστα",
"zoom.title": "Μεγέθυνση σελίδας"
}, },
"translate": { "translate": {
"any.language": " οποιαδήποτε γλώσσα", "any.language": " οποιαδήποτε γλώσσα",
@ -1155,7 +1638,10 @@
"scroll_sync.disable": "Απενεργοποίηση συγχρονισμού οριζόντιου μετακινήσεων", "scroll_sync.disable": "Απενεργοποίηση συγχρονισμού οριζόντιου μετακινήσεων",
"scroll_sync.enable": "Ενεργοποίηση συγχρονισμού οριζόντιου μετακινήσεων", "scroll_sync.enable": "Ενεργοποίηση συγχρονισμού οριζόντιου μετακινήσεων",
"title": "Μετάφραση", "title": "Μετάφραση",
"tooltip.newline": "Αλλαγή γραμμής" "tooltip.newline": "Αλλαγή γραμμής",
"menu": {
"description": "Μεταφράστε το περιεχόμενο του τρέχοντος πεδίου εισαγωγής"
}
}, },
"tray": { "tray": {
"quit": "Έξοδος", "quit": "Έξοδος",

View File

@ -29,7 +29,26 @@
"tag.default": "Predeterminado", "tag.default": "Predeterminado",
"tag.new": "Nuevo", "tag.new": "Nuevo",
"tag.system": "Sistema", "tag.system": "Sistema",
"title": "Agente" "title": "Agente",
"import": {
"type": {
"url": "URL",
"file": "Archivo"
},
"error": {
"url_required": "Por favor, introduzca la URL",
"fetch_failed": "Error al obtener los datos de la URL",
"invalid_format": "Formato de proxy no válido: faltan campos obligatorios"
},
"title": "Importar desde el exterior",
"url_placeholder": "Ingrese la URL JSON",
"select_file": "Seleccionar archivo",
"button": "Importar",
"file_filter": "Archivos JSON"
},
"export": {
"agent": "Exportar Agente"
}
}, },
"assistants": { "assistants": {
"abbr": "Asistente", "abbr": "Asistente",
@ -52,8 +71,31 @@
"settings.reasoning_effort.low": "Corto", "settings.reasoning_effort.low": "Corto",
"settings.reasoning_effort.medium": "Medio", "settings.reasoning_effort.medium": "Medio",
"settings.reasoning_effort.off": "Apagado", "settings.reasoning_effort.off": "Apagado",
"settings.reasoning_effort.tip": "Solo compatible con modelos de razonamiento OpenAI o-series y Anthropic", "title": "Asistente",
"title": "Asistente" "settings.regular_phrases": {
"title": "Frases comunes",
"add": "Agregar frase",
"edit": "Editar frase",
"delete": "Eliminar frase",
"deleteConfirm": "¿Está seguro de que desea eliminar esta frase?",
"titleLabel": "Título",
"titlePlaceholder": "Ingrese el título",
"contentLabel": "Contenido",
"contentPlaceholder": "Por favor, introduzca el contenido de la frase. Puede usar variables y luego presionar Tab para navegar rápidamente a las variables y modificarlas. Por ejemplo: \\nAyúdame a planificar una ruta desde ${from} hasta ${to}, y luego envíala a ${email}."
},
"settings.title": "Configuración del Asistente",
"icon.type": "Ícono del Asistente",
"settings.mcp": "Servidor MCP",
"settings.mcp.enableFirst": "Habilite este servidor en la configuración de MCP primero",
"settings.mcp.title": "Configuración MCP",
"settings.mcp.noServersAvailable": "No hay servidores MCP disponibles. Agregue un servidor en la configuración",
"settings.mcp.description": "Servidor MCP habilitado por defecto",
"settings.knowledge_base.recognition.tip": "El agente utilizará la capacidad del modelo grande para el reconocimiento de intenciones y decidirá si necesita invocar la base de conocimientos para responder. Esta función dependerá de las capacidades del modelo",
"settings.knowledge_base.recognition": "Invocar base de conocimientos",
"settings.knowledge_base.recognition.off": "Búsqueda forzada",
"settings.knowledge_base.recognition.on": "Reconocimiento de intención",
"settings.reasoning_effort.default": "Por defecto",
"settings.more": "Configuración del Asistente"
}, },
"auth": { "auth": {
"error": "Falló la obtención automática de la clave, por favor obténla manualmente", "error": "Falló la obtención automática de la clave, por favor obténla manualmente",
@ -133,7 +175,8 @@
"prev": "Mensaje anterior", "prev": "Mensaje anterior",
"top": "Volver arriba", "top": "Volver arriba",
"bottom": "Volver abajo", "bottom": "Volver abajo",
"close": "Cerrar" "close": "Cerrar",
"history": "Historial de chat"
}, },
"resend": "Reenviar", "resend": "Reenviar",
"save": "Guardar", "save": "Guardar",
@ -176,7 +219,6 @@
"topics.export.obsidian_created_placeholder": "Selecciona la fecha de creación", "topics.export.obsidian_created_placeholder": "Selecciona la fecha de creación",
"topics.export.obsidian_export_failed": "Exportación fallida", "topics.export.obsidian_export_failed": "Exportación fallida",
"topics.export.obsidian_export_success": "Exportación exitosa", "topics.export.obsidian_export_success": "Exportación exitosa",
"topics.export.obsidian_not_configured": "Obsidian no configurado",
"topics.export.obsidian_operate": "Modo de operación", "topics.export.obsidian_operate": "Modo de operación",
"topics.export.obsidian_operate_append": "Agregar", "topics.export.obsidian_operate_append": "Agregar",
"topics.export.obsidian_operate_new_or_overwrite": "Crear nuevo (si existe, sobrescribir)", "topics.export.obsidian_operate_new_or_overwrite": "Crear nuevo (si existe, sobrescribir)",
@ -203,7 +245,54 @@
"topics.unpinned": "Quitar fijación", "topics.unpinned": "Quitar fijación",
"translate": "Traducir", "translate": "Traducir",
"input.generate_image": "Generar imagen", "input.generate_image": "Generar imagen",
"input.generate_image_not_supported": "El modelo no soporta la generación de imágenes" "input.generate_image_not_supported": "El modelo no soporta la generación de imágenes",
"history": {
"assistant_node": "Asistente",
"click_to_navigate": "Haga clic para ir al mensaje correspondiente",
"coming_soon": "Próximamente: gráfico del flujo de chat",
"no_messages": "No se encontraron mensajes",
"start_conversation": "Inicie una conversación para ver el gráfico del flujo de chat",
"title": "Historial de chat",
"user_node": "Usuario",
"view_full_content": "Ver contenido completo"
},
"input.translating": "Traduciendo...",
"input.thinking": "Pensando",
"input.thinking.mode.default": "Predeterminado",
"input.thinking.mode.default.tip": "El modelo determinará automáticamente la cantidad de tokens a pensar",
"input.thinking.mode.custom": "Personalizado",
"input.thinking.mode.custom.tip": "Número máximo de tokens que puede procesar el modelo. Debe tenerse en cuenta el límite del contexto del modelo, de lo contrario se generará un error",
"input.thinking.budget_exceeds_max": "El presupuesto de pensamiento excede el número máximo de tokens",
"input.upload.upload_from_local": "Subir archivo local...",
"input.web_search.builtin": "Integrada en el modelo",
"input.web_search.builtin.enabled_content": "Usar la función de búsqueda web integrada en el modelo",
"input.web_search.builtin.disabled_content": "La búsqueda web no es compatible con este modelo actualmente",
"input.web_search.no_web_search": "Sin búsqueda web",
"input.web_search.no_web_search.description": "No activar la función de búsqueda web",
"settings.code_cacheable": "Almacenamiento en caché de bloques de código",
"settings.code_cacheable.tip": "El almacenamiento en caché de bloques de código puede reducir el tiempo de representación de bloques largos, pero aumenta el uso de memoria",
"settings.code_cache_max_size": "Límite de caché",
"settings.code_cache_max_size.tip": "Límite de caracteres permitidos en caché (en miles), calculado según el código resaltado. La longitud del código resaltado suele ser mucho mayor que el texto plano.",
"settings.code_cache_ttl": "Tiempo de vida de la caché",
"settings.code_cache_ttl.tip": "Tiempo de expiración de la caché (en minutos)",
"settings.code_cache_threshold": "Umbral de la caché",
"settings.code_cache_threshold.tip": "Longitud mínima del código permitida para almacenarse en caché (en miles de caracteres), solo los bloques de código por encima de este umbral serán almacenados",
"topics.export.md.reason": "Exportar como Markdown (incluye el razonamiento)",
"topics.export.obsidian_vault": "Biblioteca",
"topics.export.obsidian_vault_placeholder": "Seleccione el nombre de la biblioteca",
"topics.export.obsidian_path": "Ruta",
"topics.export.obsidian_path_placeholder": "Seleccione una ruta",
"topics.export.obsidian_no_vaults": "No se encontró ninguna biblioteca de Obsidian",
"topics.export.obsidian_loading": "Cargando...",
"topics.export.obsidian_fetch_error": "Error al obtener las bibliotecas de Obsidian",
"topics.export.obsidian_fetch_folders_error": "Error al obtener la estructura de carpetas",
"topics.export.obsidian_no_vault_selected": "Por favor seleccione primero una biblioteca",
"topics.export.obsidian_select_vault_first": "Por favor seleccione una biblioteca primero",
"topics.export.obsidian_root_directory": "Directorio raíz",
"topics.export.siyuan": "Exportar a SiYuan Notes",
"topics.export.wait_for_title_naming": "Generando título...",
"topics.export.title_naming_success": "Título generado exitosamente",
"topics.export.title_naming_failed": "Fallo al generar el título, usando el título predeterminado"
}, },
"code_block": { "code_block": {
"collapse": "Replegar", "collapse": "Replegar",
@ -254,7 +343,16 @@
"select": "Seleccionar", "select": "Seleccionar",
"topics": "Temas", "topics": "Temas",
"warning": "Advertencia", "warning": "Advertencia",
"you": "Usuario" "you": "Usuario",
"sort": {
"pinyin": "Ordenar por pinyin",
"pinyin.asc": "Ordenar por pinyin ascendente",
"pinyin.desc": "Ordenar por pinyin descendente"
},
"inspect": "Inspeccionar",
"collapse": "Colapsar",
"loading": "Cargando...",
"reasoning_content": "Pensamiento profundo"
}, },
"docs": { "docs": {
"title": "Documentación de Ayuda" "title": "Documentación de Ayuda"
@ -280,7 +378,9 @@
"title": "Error de renderizado", "title": "Error de renderizado",
"description": "Error al renderizar la fórmula, por favor, compruebe si el formato de la fórmula es correcto" "description": "Error al renderizar la fórmula, por favor, compruebe si el formato de la fórmula es correcto"
}, },
"user_message_not_found": "No se pudo encontrar el mensaje original del usuario" "user_message_not_found": "No se pudo encontrar el mensaje original del usuario",
"unknown": "Error desconocido",
"pause_placeholder": "Interrumpido"
}, },
"export": { "export": {
"assistant": "Asistente", "assistant": "Asistente",
@ -393,7 +493,11 @@
"topN_tooltip": "Número de resultados coincidentes devueltos, un valor más alto significa más resultados coincidentes, pero también consume más tokens", "topN_tooltip": "Número de resultados coincidentes devueltos, un valor más alto significa más resultados coincidentes, pero también consume más tokens",
"url_added": "URL agregada", "url_added": "URL agregada",
"url_placeholder": "Ingrese la URL, múltiples URLs separadas por enter", "url_placeholder": "Ingrese la URL, múltiples URLs separadas por enter",
"urls": "URLs" "urls": "URLs",
"dimensions": "Dimensión de incrustación",
"dimensions_size_tooltip": "Tamaño de la dimensión de incrustación, cuanto mayor sea el valor, mayor será la dimensión de incrustación, pero también consumirá más Tokens",
"dimensions_size_placeholder": "Valor predeterminado (no recomendado modificar)",
"dimensions_size_too_large": "La dimensión de incrustación no puede exceder el límite del contexto del modelo ({{max_context}})"
}, },
"languages": { "languages": {
"arabic": "Árabe", "arabic": "Árabe",
@ -505,20 +609,63 @@
"completed": "Completado", "completed": "Completado",
"invoking": "En llamada", "invoking": "En llamada",
"raw": "Crudo", "raw": "Crudo",
"preview": "Vista previa" "preview": "Vista previa",
"error": "Se ha producido un error"
}, },
"topic.added": "Tema agregado con éxito", "topic.added": "Tema agregado con éxito",
"upgrade.success.button": "Reiniciar", "upgrade.success.button": "Reiniciar",
"upgrade.success.content": "Reinicie para completar la actualización", "upgrade.success.content": "Reinicie para completar la actualización",
"upgrade.success.title": "Actualización exitosa", "upgrade.success.title": "Actualización exitosa",
"warn.notion.exporting": "Se está exportando a Notion, ¡no solicite nuevamente la exportación!", "warn.notion.exporting": "Se está exportando a Notion, ¡no solicite nuevamente la exportación!",
"warning.rate.limit": "Envío demasiado frecuente, espere {{seconds}} segundos antes de intentarlo de nuevo" "warning.rate.limit": "Envío demasiado frecuente, espere {{seconds}} segundos antes de intentarlo de nuevo",
"agents": {
"imported": "Importado con éxito",
"import.error": "Error al importar"
},
"citation": "{{count}} contenido citado",
"error.invalid.nutstore": "Configuración de Nutstore no válida",
"error.invalid.nutstore_token": "Token de Nutstore no válido",
"processing": "Procesando...",
"error.siyuan.export": "Error al exportar la nota de Siyuan, verifique el estado de la conexión y revise la configuración según la documentación",
"error.siyuan.no_config": "No se ha configurado la dirección API o el token de Siyuan",
"success.siyuan.export": "Exportado a Siyuan exitosamente",
"warn.yuque.exporting": "Exportando Yuque, ¡no solicite la exportación nuevamente!",
"warn.siyuan.exporting": "Exportando a Siyuan, ¡no solicite la exportación nuevamente!",
"download.success": "Descarga exitosa",
"download.failed": "Descarga fallida"
}, },
"minapp": { "minapp": {
"sidebar.add.title": "Agregar al panel lateral", "title": "Mini programa",
"sidebar.remove.title": "Quitar del panel lateral", "popup": {
"sidebar.hide.title": "Ocultar mini programa", "refresh": "Actualizar",
"title": "Mini programa" "close": "Cerrar la aplicación",
"minimize": "Minimizar la aplicación",
"devtools": "Herramientas de desarrollo",
"openExternal": "Abrir en el navegador",
"rightclick_copyurl": "Copiar URL con clic derecho",
"open_link_external_on": "Actual: Abrir enlaces en el navegador",
"open_link_external_off": "Actual: Abrir enlaces en ventana predeterminada"
},
"sidebar": {
"add": {
"title": "Agregar a la barra lateral"
},
"remove": {
"title": "Eliminar de la barra lateral"
},
"remove_custom": {
"title": "Eliminar aplicación personalizada"
},
"hide": {
"title": "Ocultar"
},
"close": {
"title": "Cerrar"
},
"closeall": {
"title": "Cerrar todo"
}
}
}, },
"miniwindow": { "miniwindow": {
"clipboard": { "clipboard": {
@ -534,13 +681,17 @@
"copy_last_message": "Presione C para copiar", "copy_last_message": "Presione C para copiar",
"esc": "Presione ESC {{action}}", "esc": "Presione ESC {{action}}",
"esc_back": "Volver", "esc_back": "Volver",
"esc_close": "Cerrar ventana" "esc_close": "Cerrar ventana",
"backspace_clear": "Presione Retroceso para borrar"
}, },
"input": { "input": {
"placeholder": { "placeholder": {
"empty": "Pregunta a {{model}} para obtener ayuda...", "empty": "Pregunta a {{model}} para obtener ayuda...",
"title": "¿Qué deseas hacer con el texto de abajo?" "title": "¿Qué deseas hacer con el texto de abajo?"
} }
},
"tooltip": {
"pin": "Fijar en la parte superior"
} }
}, },
"models": { "models": {
@ -577,7 +728,9 @@
"free": "Gratis", "free": "Gratis",
"rerank": "Reclasificar", "rerank": "Reclasificar",
"websearch": "Búsqueda en línea" "websearch": "Búsqueda en línea"
} },
"rerank_model_not_support_provider": "Actualmente, el modelo de reordenamiento no admite este proveedor ({{provider}})",
"enable_tool_use": "Habilitar uso de herramientas"
}, },
"navbar": { "navbar": {
"expand": "Expandir cuadro de diálogo", "expand": "Expandir cuadro de diálogo",
@ -609,7 +762,59 @@
"regenerate.confirm": "Esto sobrescribirá las imágenes generadas, ¿desea continuar?", "regenerate.confirm": "Esto sobrescribirá las imágenes generadas, ¿desea continuar?",
"seed": "Semilla aleatoria", "seed": "Semilla aleatoria",
"seed_tip": "La misma semilla y la misma sugerencia generarán imágenes similares", "seed_tip": "La misma semilla y la misma sugerencia generarán imágenes similares",
"title": "Imagen" "title": "Imagen",
"mode": {
"generate": "Generar imagen",
"edit": "Editar",
"remix": "Mezclar",
"upscale": "Ampliar"
},
"generate": {
"model_tip": "Versión del modelo: V2 es el modelo más reciente de la interfaz, V2A es un modelo rápido, V_1 es el modelo inicial y _TURBO es la versión acelerada",
"number_images_tip": "Número de imágenes generadas a la vez",
"seed_tip": "Controla la aleatoriedad en la generación de imágenes, útil para reproducir resultados idénticos",
"negative_prompt_tip": "Describe elementos que no deseas en la imagen. Solo compatible con las versiones V_1, V_1_TURBO, V_2 y V_2_TURBO",
"magic_prompt_option_tip": "Optimización inteligente de indicaciones para mejorar los resultados de generación",
"style_type_tip": "Estilo de generación de imágenes, solo aplicable para la versión V_2 y posteriores"
},
"edit": {
"image_file": "Imagen editada",
"model_tip": "La edición local solo es compatible con las versiones V_2 y V_2_TURBO",
"number_images_tip": "Número de resultados de edición generados",
"style_type_tip": "Estilo de la imagen editada, solo aplicable para la versión V_2 y posteriores",
"seed_tip": "Controla la aleatoriedad de los resultados de edición",
"magic_prompt_option_tip": "Optimización inteligente de las palabras clave de edición"
},
"remix": {
"model_tip": "Seleccione la versión del modelo de inteligencia artificial para usar en el remix",
"image_file": "Imagen de referencia",
"image_weight": "Peso de la imagen de referencia",
"image_weight_tip": "Ajuste el grado de influencia de la imagen de referencia",
"number_images_tip": "Número de resultados de remix generados",
"seed_tip": "Controla la aleatoriedad de los resultados del remix",
"style_type_tip": "Estilo de la imagen tras el remix, solo aplicable a partir de la versión V_2",
"negative_prompt_tip": "Describa los elementos que no desea ver en los resultados del remix",
"magic_prompt_option_tip": "Optimización inteligente de las palabras clave para el remix"
},
"upscale": {
"image_file": "Imagen que se desea ampliar",
"resemblance": "Similitud",
"resemblance_tip": "Controla el nivel de similitud entre el resultado ampliado y la imagen original",
"detail": "Detalle",
"detail_tip": "Controla el grado de realce de los detalles en la imagen ampliada",
"number_images_tip": "Número de resultados de ampliación generados",
"seed_tip": "Controla la aleatoriedad del resultado de la ampliación",
"magic_prompt_option_tip": "Optimización inteligente de las palabras clave para la ampliación"
},
"magic_prompt_option": "Mejora de indicación",
"model": "Versión",
"aspect_ratio": "Relación de aspecto",
"style_type": "Estilo",
"learn_more": "Más información",
"prompt_placeholder_edit": "Introduce la descripción de tu imagen, utiliza comillas dobles \" \" para texto a dibujar",
"proxy_required": "Actualmente es necesario tener un proxy activo para ver las imágenes generadas, en el futuro se soportará conexión directa desde China",
"image_file_required": "Por favor, carga una imagen primero",
"image_file_retry": "Vuelve a cargar la imagen"
}, },
"plantuml": { "plantuml": {
"download": { "download": {
@ -672,7 +877,9 @@
"xirang": "Telecom Nube XiRang", "xirang": "Telecom Nube XiRang",
"yi": "Cero Uno Todo", "yi": "Cero Uno Todo",
"zhinao": "360 Inteligente", "zhinao": "360 Inteligente",
"zhipu": "ZhiPu IA" "zhipu": "ZhiPu IA",
"voyageai": "Voyage AI",
"qiniu": "Qiniu Yun"
}, },
"restore": { "restore": {
"confirm": "¿Está seguro de que desea restaurar los datos?", "confirm": "¿Está seguro de que desea restaurar los datos?",
@ -714,7 +921,6 @@
"advanced.title": "Configuración avanzada", "advanced.title": "Configuración avanzada",
"assistant": "Asistente predeterminado", "assistant": "Asistente predeterminado",
"assistant.model_params": "Parámetros del modelo", "assistant.model_params": "Parámetros del modelo",
"assistant.show.icon": "Mostrar icono del modelo",
"assistant.title": "Asistente predeterminado", "assistant.title": "Asistente predeterminado",
"data": { "data": {
"app_data": "Datos de la aplicación", "app_data": "Datos de la aplicación",
@ -780,13 +986,13 @@
"notion.split_size_placeholder": "Introduzca el límite de bloques por página (predeterminado 90)", "notion.split_size_placeholder": "Introduzca el límite de bloques por página (predeterminado 90)",
"notion.title": "Configuración de Notion", "notion.title": "Configuración de Notion",
"obsidian": { "obsidian": {
"folder": "Carpeta",
"folder_placeholder": "Introduce el nombre de la carpeta",
"tags": "Etiquetas globales",
"tags_placeholder": "Introduce el nombre de la etiqueta, múltiples etiquetas separadas por comas, Obsidian no admite números puros",
"title": "Configuración de Obsidian", "title": "Configuración de Obsidian",
"vault": "Custodia", "default_vault": "Repositorio Obsidian predeterminado",
"vault_placeholder": "Introduce el nombre de la custodia" "default_vault_placeholder": "Seleccione un repositorio Obsidian predeterminado",
"default_vault_loading": "Obteniendo repositorios Obsidian...",
"default_vault_no_vaults": "No se encontraron repositorios Obsidian",
"default_vault_fetch_error": "Error al obtener los repositorios Obsidian",
"default_vault_export_failed": "Exportación fallida"
}, },
"title": "Configuración de datos", "title": "Configuración de datos",
"webdav": { "webdav": {
@ -818,7 +1024,26 @@
"title": "WebDAV", "title": "WebDAV",
"user": "Nombre de usuario WebDAV", "user": "Nombre de usuario WebDAV",
"maxBackups": "Número máximo de copias de seguridad", "maxBackups": "Número máximo de copias de seguridad",
"maxBackups.unlimited": "Sin límite" "maxBackups.unlimited": "Sin límite",
"backup.manager.title": "Gestión de copias de seguridad",
"backup.manager.refresh": "Actualizar",
"backup.manager.delete.selected": "Eliminar seleccionados",
"backup.manager.delete.text": "Eliminar",
"backup.manager.restore.text": "Restaurar",
"backup.manager.restore.success": "Restauración exitosa, la aplicación se actualizará en unos segundos",
"backup.manager.restore.error": "Fallo en la restauración",
"backup.manager.delete.confirm.title": "Confirmar eliminación",
"backup.manager.delete.confirm.single": "¿Está seguro de que desea eliminar el archivo de copia de seguridad \"{{fileName}}\"? Esta acción no se puede deshacer.",
"backup.manager.delete.confirm.multiple": "¿Está seguro de que desea eliminar los {{count}} archivos de copia de seguridad seleccionados? Esta acción no se puede deshacer.",
"backup.manager.delete.success.single": "Eliminación exitosa",
"backup.manager.delete.success.multiple": "Se eliminaron exitosamente {{count}} archivos de copia de seguridad",
"backup.manager.delete.error": "Fallo al eliminar",
"backup.manager.fetch.error": "No se pudo obtener el archivo de copia de seguridad",
"backup.manager.select.files.delete": "Seleccione los archivos de copia de seguridad a eliminar",
"backup.manager.columns.fileName": "Nombre del archivo",
"backup.manager.columns.modifiedTime": "Fecha de modificación",
"backup.manager.columns.size": "Tamaño",
"backup.manager.columns.actions": "Acciones"
}, },
"yuque": { "yuque": {
"check": { "check": {
@ -834,16 +1059,73 @@
"title": "Configuración de Yuque", "title": "Configuración de Yuque",
"token": "Token de Yuque", "token": "Token de Yuque",
"token_placeholder": "Ingrese el Token de Yuque" "token_placeholder": "Ingrese el Token de Yuque"
} },
"export_menu": {
"title": "Exportar configuración del menú",
"image": "Exportar como imagen",
"markdown": "Exportar a Markdown",
"markdown_reason": "Exportar a Markdown (con pensamiento incluido)",
"notion": "Exportar a Notion",
"yuque": "Exportar a Yuque",
"obsidian": "Exportar a Obsidian",
"siyuan": "Exportar a Siyuan Notes",
"joplin": "Exportar a Joplin",
"docx": "Exportar a Word"
},
"siyuan": {
"check": {
"title": "Prueba de conexión",
"button": "Probar",
"empty_config": "Por favor, complete la dirección API y el token",
"success": "Conexión exitosa",
"fail": "Fallo en la conexión, verifique la dirección API y el token",
"error": "Error inesperado, verifique la conexión de red"
},
"title": "Configuración de Siyuan Notas",
"api_url": "Dirección API",
"api_url_placeholder": "Ejemplo: http://127.0.0.1:6806",
"token": "Token API",
"token.help": "Obtener en Siyuan Notas -> Configuración -> Acerca de",
"token_placeholder": "Por favor ingrese el token de Siyuan Notas",
"box_id": "ID del Cuaderno",
"box_id_placeholder": "Por favor ingrese el ID del cuaderno",
"root_path": "Ruta raíz del documento",
"root_path_placeholder": "Ejemplo: /CherryStudio"
},
"nutstore": {
"title": "Configuración de Nutstore",
"isLogin": "Iniciado sesión",
"notLogin": "No iniciado sesión",
"login.button": "Iniciar Sesión",
"logout.button": "Cerrar Sesión",
"logout.title": "¿Seguro que quieres cerrar la sesión de Nutstore?",
"logout.content": "Después de cerrar sesión no podrás hacer copias de seguridad ni restaurar desde Nutstore",
"checkConnection.name": "Verificar conexión",
"checkConnection.success": "Conexión con Nutstore establecida",
"checkConnection.fail": "Fallo en la conexión con Nutstore",
"username": "Nombre de usuario de Nutstore",
"path": "Ruta de almacenamiento de Nutstore",
"path.placeholder": "Por favor ingrese la ruta de almacenamiento de Nutstore",
"backup.button": "Hacer copia de seguridad en Nutstore",
"restore.button": "Restaurar desde Nutstore",
"pathSelector.title": "Ruta de almacenamiento de Nutstore",
"pathSelector.return": "Volver",
"pathSelector.currentPath": "Ruta actual",
"new_folder.button.confirm": "Aceptar",
"new_folder.button.cancel": "Cancelar",
"new_folder.button": "Crear carpeta"
},
"divider.basic": "Configuración básica",
"divider.cloud_storage": "Configuración de almacenamiento en la nube",
"divider.export_settings": "Configuración de exportación",
"divider.third_party": "Conexiones de terceros",
"message_title.use_topic_naming.title": "Usar el modelo de nombramiento temático para crear títulos de mensajes exportados",
"message_title.use_topic_naming.help": "Al activarlo, se utilizará el modelo de nombramiento temático para generar títulos de mensajes exportados. Esta opción también afectará a todos los métodos de exportación mediante Markdown."
}, },
"display.assistant.title": "Configuración del asistente", "display.assistant.title": "Configuración del asistente",
"display.custom.css": "CSS personalizado", "display.custom.css": "CSS personalizado",
"display.custom.css.cherrycss": "Obtener desde cherrycss.com", "display.custom.css.cherrycss": "Obtener desde cherrycss.com",
"display.custom.css.placeholder": "/* Escribe tu CSS personalizado aquí */", "display.custom.css.placeholder": "/* Escribe tu CSS personalizado aquí */",
"display.minApp.disabled": "Miniprogramas ocultos",
"display.minApp.empty": "Arrastra los miniprogramas que quieres ocultar desde la izquierda aquí",
"display.minApp.title": "Configuración de visualización de miniprogramas",
"display.minApp.visible": "Miniprogramas visibles",
"display.sidebar.chat.hiddenMessage": "El asistente es una función básica y no se puede ocultar", "display.sidebar.chat.hiddenMessage": "El asistente es una función básica y no se puede ocultar",
"display.sidebar.disabled": "Iconos ocultos", "display.sidebar.disabled": "Iconos ocultos",
"display.sidebar.empty": "Arrastra las funciones que deseas ocultar desde la izquierda aquí", "display.sidebar.empty": "Arrastra las funciones que deseas ocultar desde la izquierda aquí",
@ -864,7 +1146,6 @@
"general.display.title": "Configuración de visualización", "general.display.title": "Configuración de visualización",
"general.emoji_picker": "Selector de emojis", "general.emoji_picker": "Selector de emojis",
"general.image_upload": "Carga de imágenes", "general.image_upload": "Carga de imágenes",
"general.manually_check_update.title": "Desactivar verificación de actualizaciones",
"general.reset.button": "Restablecer", "general.reset.button": "Restablecer",
"general.reset.title": "Restablecer datos", "general.reset.title": "Restablecer datos",
"general.restore.button": "Restaurar", "general.restore.button": "Restaurar",
@ -930,11 +1211,94 @@
"serverPlural": "Servidores", "serverPlural": "Servidores",
"serverSingular": "Servidor", "serverSingular": "Servidor",
"title": "Servidores MCP", "title": "Servidores MCP",
"toggleError": "Fallo al cambiar",
"type": "Tipo", "type": "Tipo",
"updateError": "Fallo al actualizar servidor", "updateError": "Fallo al actualizar servidor",
"updateSuccess": "Servidor actualizado exitosamente", "updateSuccess": "Servidor actualizado exitosamente",
"url": "URL" "url": "URL",
"errors": {
"32000": "El servidor MCP no se pudo iniciar, verifique si los parámetros están completos según la guía"
},
"tabs": {
"general": "General",
"description": "Descripción",
"tools": "Herramientas",
"prompts": "Indicaciones",
"resources": "Recursos"
},
"tools": {
"inputSchema": "Esquema de entrada",
"availableTools": "Herramientas disponibles",
"noToolsAvailable": "No hay herramientas disponibles",
"loadError": "Error al cargar las herramientas"
},
"prompts": {
"availablePrompts": "Indicaciones disponibles",
"noPromptsAvailable": "No hay indicaciones disponibles",
"arguments": "Argumentos",
"requiredField": "Campo obligatorio",
"genericError": "Error al obtener la indicación",
"loadError": "Fallo al cargar la indicación"
},
"resources": {
"noResourcesAvailable": "No hay recursos disponibles",
"availableResources": "Recursos disponibles",
"uri": "URI",
"mimeType": "Tipo MIME",
"size": "Tamaño",
"blob": "Datos binarios",
"blobInvisible": "Datos binarios ocultos",
"text": "Texto"
},
"types": {
"inMemory": "Integrado",
"sse": "SSE",
"streamableHttp": "En secuencia",
"stdio": "STDIO"
},
"sync": {
"title": "Sincronizar Servidor",
"selectProvider": "Seleccionar proveedor:",
"discoverMcpServers": "Detectar servidores MCP",
"discoverMcpServersDescription": "Acceder a la plataforma para detectar servidores MCP disponibles",
"getToken": "Obtener token de API",
"getTokenDescription": "Obtener un token de API personal desde su cuenta",
"setToken": "Ingrese su token",
"tokenRequired": "Se requiere token de API",
"tokenPlaceholder": "Introduzca el token de API aquí",
"button": "Sincronizar",
"error": "Error al sincronizar el servidor MCP",
"success": "Servidor MCP sincronizado correctamente",
"unauthorized": "Sincronización no autorizada",
"noServersAvailable": "No hay servidores MCP disponibles"
},
"sse": "Eventos enviados por el servidor (sse)",
"streamableHttp": "HTTP transmisible (streamableHttp)",
"stdio": "Entrada/Salida estándar (stdio)",
"inMemory": "En memoria",
"headers": "Encabezados",
"headersTooltip": "Encabezados personalizados para solicitudes HTTP",
"searchNpx": "Buscar MCP",
"newServer": "Servidor MCP",
"startError": "Inicio fallido",
"editMcpJson": "Editar configuración MCP",
"installHelp": "Obtener ayuda de instalación",
"deleteServer": "Eliminar servidor",
"deleteServerConfirm": "¿Está seguro de que desea eliminar este servidor?",
"registry": "Repositorio de paquetes",
"registryTooltip": "Seleccione un repositorio para instalar paquetes, útil para resolver problemas de red con el repositorio predeterminado.",
"registryDefault": "Predeterminado",
"not_support": "El modelo no es compatible",
"user": "Usuario",
"system": "Sistema",
"timeout": "Tiempo de espera",
"timeoutTooltip": "Tiempo de espera (en segundos) para las solicitudes a este servidor; el valor predeterminado es 60 segundos",
"provider": "Proveedor",
"providerUrl": "URL del proveedor",
"logoUrl": "URL del logotipo",
"tags": "Etiquetas",
"tagsPlaceholder": "Ingrese etiquetas",
"providerPlaceholder": "Nombre del proveedor",
"advancedSettings": "Configuración avanzada"
}, },
"messages.divider": "Separador de mensajes", "messages.divider": "Separador de mensajes",
"messages.grid_columns": "Número de columnas en la cuadrícula de mensajes", "messages.grid_columns": "Número de columnas en la cuadrícula de mensajes",
@ -1046,13 +1410,29 @@
"docs_more_details": "Obtener más detalles", "docs_more_details": "Obtener más detalles",
"get_api_key": "Haga clic aquí para obtener la clave", "get_api_key": "Haga clic aquí para obtener la clave",
"is_not_support_array_content": "Activar modo compatible", "is_not_support_array_content": "Activar modo compatible",
"no_models": "Agregue un modelo primero antes de verificar la conexión API",
"not_checked": "No verificado", "not_checked": "No verificado",
"remove_duplicate_keys": "Eliminar claves duplicadas", "remove_duplicate_keys": "Eliminar claves duplicadas",
"remove_invalid_keys": "Eliminar claves inválidas", "remove_invalid_keys": "Eliminar claves inválidas",
"search": "Buscar plataforma de modelos...", "search": "Buscar plataforma de modelos...",
"search_placeholder": "Buscar ID o nombre del modelo", "search_placeholder": "Buscar ID o nombre del modelo",
"title": "Servicio de modelos" "title": "Servicio de modelos",
"oauth": {
"button": "Iniciar sesión con la cuenta de {{provider}}",
"description": "Este servicio es proporcionado por <website>{{provider}}</website>",
"official_website": "Sitio web oficial"
},
"notes": {
"title": "Nota del modelo",
"placeholder": "Por favor, introduzca el contenido en formato Markdown...",
"markdown_editor_default_value": "Área de vista previa"
},
"basic_auth": "Autenticación HTTP",
"basic_auth.tip": "Aplicable para instancias desplegadas a través del servidor (ver documento). Actualmente solo se admite el esquema Basic (RFC7617).",
"basic_auth.user_name": "Nombre de usuario",
"basic_auth.user_name.tip": "Déjelo vacío para desactivar",
"basic_auth.password": "Contraseña",
"bills": "Facturas",
"no_models_for_check": "No hay modelos disponibles para revisar (por ejemplo, modelos de conversación)"
}, },
"proxy": { "proxy": {
"mode": { "mode": {
@ -1129,8 +1509,111 @@
"description": "Tavily es un motor de búsqueda diseñado específicamente para agentes de IA, proporcionando resultados en tiempo real, precisos, sugerencias de consulta inteligentes y capacidades de investigación profundas", "description": "Tavily es un motor de búsqueda diseñado específicamente para agentes de IA, proporcionando resultados en tiempo real, precisos, sugerencias de consulta inteligentes y capacidades de investigación profundas",
"title": "Tavily" "title": "Tavily"
}, },
"title": "Búsqueda en la web" "title": "Búsqueda en la web",
} "overwrite": "Sobrescribir proveedor de búsqueda",
"overwrite_tooltip": "Forzar el uso del proveedor de búsqueda en lugar del modelo de lenguaje grande para realizar búsquedas",
"subscribe": "Suscripción a lista negra",
"subscribe_update": "Actualizar ahora",
"subscribe_add": "Agregar suscripción",
"subscribe_url": "Dirección del origen de la suscripción",
"subscribe_name": "Nombre alternativo",
"subscribe_name.placeholder": "Nombre alternativo que se usará cuando el origen de la suscripción descargado no tenga un nombre",
"subscribe_add_success": "¡Origen de la suscripción agregado correctamente!",
"subscribe_delete": "Eliminar origen de la suscripción",
"apikey": "Clave API",
"free": "Gratis",
"content_limit": "Límite de longitud del contenido",
"content_limit_tooltip": "Limita la longitud del contenido de los resultados de búsqueda; el contenido excedente será truncado"
},
"miniapps": {
"open_link_external": {
"title": "Abrir enlace en nueva ventana del navegador"
},
"custom": {
"title": "Aplicación Pequeña Personalizada",
"edit_title": "Editar Aplicación Pequeña Personalizada",
"save_success": "La aplicación pequeña personalizada se ha guardado correctamente.",
"save_error": "No se pudo guardar la aplicación pequeña personalizada.",
"remove_success": "La aplicación pequeña personalizada se eliminó correctamente.",
"remove_error": "No se pudo eliminar la aplicación pequeña personalizada.",
"logo_upload_success": "El logo se cargó correctamente.",
"logo_upload_error": "No se pudo cargar el logo.",
"id": "ID",
"id_error": "El campo ID es obligatorio.",
"id_placeholder": "Por favor, introduzca el ID",
"name": "Nombre",
"name_error": "El campo Nombre es obligatorio.",
"name_placeholder": "Por favor, introduzca el nombre",
"url": "URL",
"url_error": "El campo URL es obligatorio.",
"url_placeholder": "Por favor, introduzca la URL",
"logo": "Logo",
"logo_url": "URL del Logo",
"logo_file": "Cargar Archivo del Logo",
"logo_url_label": "URL del Logo",
"logo_url_placeholder": "Por favor, introduzca la URL del logo",
"logo_upload_label": "Cargar Logo",
"logo_upload_button": "Cargar",
"save": "Guardar",
"edit_description": "Edite aquí la configuración de su aplicación pequeña personalizada. Cada aplicación debe incluir los campos id, name, url y logo.",
"placeholder": "Introduzca la configuración de la aplicación pequeña personalizada (en formato JSON)",
"duplicate_ids": "Se encontraron IDs duplicados: {{ids}}",
"conflicting_ids": "Conflictos con IDs de aplicaciones predeterminadas: {{ids}}"
},
"title": "Configuración de miniaplicaciones",
"disabled": "Miniaplicaciones ocultas",
"empty": "Arrastra aquí las miniaplicaciones que deseas ocultar desde la izquierda",
"visible": "Miniaplicaciones visibles",
"cache_settings": "Configuración de caché",
"cache_title": "Cantidad de miniaplicaciones en caché",
"cache_description": "Establece el número máximo de miniaplicaciones que pueden permanecer activas simultáneamente",
"reset_tooltip": "Restablecer a los valores predeterminados",
"display_title": "Configuración de visualización de miniaplicaciones",
"sidebar_title": "Visualización de miniaplicaciones activas en la barra lateral",
"sidebar_description": "Configura si se muestra o no en la barra lateral la miniaplicación activa",
"cache_change_notice": "Los cambios surtirán efecto cuando el número de miniaplicaciones abiertas aumente o disminuya hasta alcanzar el valor configurado"
},
"quickPhrase": {
"title": "Frases rápidas",
"add": "Agregar frase",
"edit": "Editar frase",
"titleLabel": "Título",
"contentLabel": "Contenido",
"titlePlaceholder": "Ingrese el título de la frase",
"contentPlaceholder": "Ingrese el contenido de la frase. Se admite el uso de variables, y luego puede presionar Tab para ubicar rápidamente la variable y modificarla. Por ejemplo: \\nAyúdame a planificar la ruta desde ${desde} hasta ${hasta}, y luego envíala a ${correo}.",
"delete": "Eliminar frase",
"deleteConfirm": "Una vez eliminada, la frase no podrá recuperarse. ¿Desea continuar?",
"locationLabel": "Agregar ubicación",
"global": "Frase global",
"assistant": "Frase de asistente"
},
"quickPanel": {
"title": "Menú de acceso rápido",
"close": "Cerrar",
"select": "Seleccionar",
"page": "Página",
"confirm": "Confirmar",
"back": "Atrás",
"forward": "Adelante",
"multiple": "Selección múltiple"
},
"privacy": {
"title": "Configuración de privacidad",
"enable_privacy_mode": "Enviar informes de errores y estadísticas de forma anónima"
},
"assistant.icon.type": "Tipo de ícono del modelo",
"assistant.icon.type.model": "Ícono del modelo",
"assistant.icon.type.emoji": "Emoji",
"assistant.icon.type.none": "No mostrar",
"general.auto_check_update.title": "Actualización automática",
"input.show_translate_confirm": "Mostrar diálogo de confirmación de traducción",
"messages.prompt": "Palabra de indicación",
"messages.input.enable_quick_triggers": "Habilitar menú rápido con '/' y '@'",
"messages.input.enable_delete_model": "Habilitar la eliminación con la tecla de borrado para modelos/archivos adjuntos introducidos",
"messages.math_engine.none": "Ninguno",
"models.manage.add_listed": "Agregar modelo de la lista",
"models.manage.remove_listed": "Eliminar modelo de la lista",
"zoom.title": "Zoom de página"
}, },
"translate": { "translate": {
"any.language": "cualquier idioma", "any.language": "cualquier idioma",
@ -1155,7 +1638,10 @@
"scroll_sync.disable": "Deshabilitar sincronización de desplazamiento", "scroll_sync.disable": "Deshabilitar sincronización de desplazamiento",
"scroll_sync.enable": "Habilitar sincronización de desplazamiento", "scroll_sync.enable": "Habilitar sincronización de desplazamiento",
"title": "Traducción", "title": "Traducción",
"tooltip.newline": "Salto de línea" "tooltip.newline": "Salto de línea",
"menu": {
"description": "Traducir el contenido del campo de entrada actual"
}
}, },
"tray": { "tray": {
"quit": "Salir", "quit": "Salir",

View File

@ -29,7 +29,26 @@
"tag.default": "Par défaut", "tag.default": "Par défaut",
"tag.new": "Nouveau", "tag.new": "Nouveau",
"tag.system": "Système", "tag.system": "Système",
"title": "Agent intelligent" "title": "Agent intelligent",
"import": {
"type": {
"url": "URL",
"file": "Fichier"
},
"error": {
"url_required": "Veuillez entrer l'URL",
"fetch_failed": "Échec de la récupération des données depuis l'URL",
"invalid_format": "Format de proxy invalide : champs obligatoires manquants"
},
"title": "Импорт из внешнего источника",
"url_placeholder": "Введите URL JSON",
"select_file": "Выбрать файл",
"button": "Импортировать",
"file_filter": "Файлы JSON"
},
"export": {
"agent": "Экспортировать агента"
}
}, },
"assistants": { "assistants": {
"abbr": "Aide", "abbr": "Aide",
@ -52,8 +71,31 @@
"settings.reasoning_effort.low": "Court", "settings.reasoning_effort.low": "Court",
"settings.reasoning_effort.medium": "Moyen", "settings.reasoning_effort.medium": "Moyen",
"settings.reasoning_effort.off": "Off", "settings.reasoning_effort.off": "Off",
"settings.reasoning_effort.tip": "Prise en charge uniquement des modèles de raisonnement OpenAI o-series et Anthropic", "title": "Agent",
"title": "Agent" "settings.regular_phrases": {
"title": "Популярные фразы",
"add": "Добавить фразу",
"edit": "Редактировать фразу",
"delete": "Удалить фразу",
"deleteConfirm": "Вы уверены, что хотите удалить эту фразу?",
"titleLabel": "Заголовок",
"titlePlaceholder": "Введите заголовок",
"contentLabel": "Содержание",
"contentPlaceholder": "Введите содержание фразы. Поддерживаются переменные, после этого нажмите Tab для быстрого перехода к переменной и изменения её значения. Например:\\n Планируй маршрут из ${from} в ${to}, а затем отправь его на ${email}."
},
"settings.title": "Paramètres de l'assistant",
"icon.type": "Icône de l'assistant",
"settings.mcp": "Serveur MCP",
"settings.mcp.enableFirst": "Veuillez d'abord activer ce serveur dans les paramètres MCP",
"settings.mcp.title": "Paramètres MCP",
"settings.mcp.noServersAvailable": "Aucun serveur MCP disponible. Veuillez ajouter un serveur dans les paramètres",
"settings.mcp.description": "Serveur MCP activé par défaut",
"settings.knowledge_base.recognition.tip": "L'agent utilisera la capacité du grand modèle à reconnaître les intentions afin de déterminer si la base de connaissances doit être utilisée pour répondre. Cette fonctionnalité dépend des capacités du modèle",
"settings.knowledge_base.recognition": "Utiliser la base de connaissances",
"settings.knowledge_base.recognition.off": "Recherche forcée",
"settings.knowledge_base.recognition.on": "Reconnaissance des intentions",
"settings.reasoning_effort.default": "Par défaut",
"settings.more": "Paramètres de l'assistant"
}, },
"auth": { "auth": {
"error": "Échec de l'obtention automatique de la clé, veuillez la récupérer manuellement", "error": "Échec de l'obtention automatique de la clé, veuillez la récupérer manuellement",
@ -133,7 +175,8 @@
"prev": "Précédent message", "prev": "Précédent message",
"top": "Retour en haut", "top": "Retour en haut",
"bottom": "Retour en bas", "bottom": "Retour en bas",
"close": "Fermer" "close": "Fermer",
"history": "Historique des discussions"
}, },
"resend": "Réenvoyer", "resend": "Réenvoyer",
"save": "Enregistrer", "save": "Enregistrer",
@ -176,7 +219,6 @@
"topics.export.obsidian_created_placeholder": "Choisissez la date de création", "topics.export.obsidian_created_placeholder": "Choisissez la date de création",
"topics.export.obsidian_export_failed": "Échec de l'exportation", "topics.export.obsidian_export_failed": "Échec de l'exportation",
"topics.export.obsidian_export_success": "Exportation réussie", "topics.export.obsidian_export_success": "Exportation réussie",
"topics.export.obsidian_not_configured": "Obsidian non configuré",
"topics.export.obsidian_operate": "Mode de traitement", "topics.export.obsidian_operate": "Mode de traitement",
"topics.export.obsidian_operate_append": "Ajouter", "topics.export.obsidian_operate_append": "Ajouter",
"topics.export.obsidian_operate_new_or_overwrite": "Créer (écraser si existant)", "topics.export.obsidian_operate_new_or_overwrite": "Créer (écraser si existant)",
@ -203,7 +245,54 @@
"topics.unpinned": "Annuler le fixage", "topics.unpinned": "Annuler le fixage",
"translate": "Traduire", "translate": "Traduire",
"input.generate_image": "Générer une image", "input.generate_image": "Générer une image",
"input.generate_image_not_supported": "Le modèle ne supporte pas la génération d'images" "input.generate_image_not_supported": "Le modèle ne supporte pas la génération d'images",
"history": {
"assistant_node": "Assistant",
"click_to_navigate": "Cliquez pour accéder au message correspondant",
"coming_soon": "Le diagramme du flux de chat sera bientôt disponible",
"no_messages": "Aucun message trouvé",
"start_conversation": "Commencez une conversation pour visualiser le diagramme du flux de chat",
"title": "Historique des chats",
"user_node": "Utilisateur",
"view_full_content": "Voir le contenu complet"
},
"input.translating": "Traduction en cours...",
"input.thinking": "Pensée",
"input.thinking.mode.default": "Défaut",
"input.thinking.mode.default.tip": "Le modèle déterminera automatiquement le nombre de tokens à réfléchir",
"input.thinking.mode.custom": "Personnalisé",
"input.thinking.mode.custom.tip": "Nombre maximum de tokens sur lesquels le modèle peut réfléchir. Veuillez tenir compte des limites du contexte du modèle, sinon une erreur sera renvoyée",
"input.thinking.budget_exceeds_max": "Le budget de réflexion dépasse le nombre maximum de tokens",
"input.upload.upload_from_local": "Télécharger un fichier local...",
"input.web_search.builtin": "Intégré au modèle",
"input.web_search.builtin.enabled_content": "Utiliser la fonction de recherche web intégrée du modèle",
"input.web_search.builtin.disabled_content": "Le modèle actuel ne prend pas en charge la recherche web",
"input.web_search.no_web_search": "Pas de recherche web",
"input.web_search.no_web_search.description": "Ne pas activer la fonction de recherche web",
"settings.code_cacheable": "Mise en cache des blocs de code",
"settings.code_cacheable.tip": "La mise en cache des blocs de code permet de réduire le temps de rendu des longs codes, mais augmente l'utilisation de la mémoire",
"settings.code_cache_max_size": "Limite de cache",
"settings.code_cache_max_size.tip": "Nombre maximal de caractères mis en cache (en milliers), calculé selon le code surligné. La taille du code surligné est beaucoup plus grande que celle du texte brut.",
"settings.code_cache_ttl": "Durée du cache",
"settings.code_cache_ttl.tip": "Temps d'expiration du cache (en minutes)",
"settings.code_cache_threshold": "Seuil du cache",
"settings.code_cache_threshold.tip": "Longueur minimale de code autorisée pour la mise en cache (en milliers de caractères). Seuls les blocs de code supérieurs à ce seuil seront mis en cache",
"topics.export.md.reason": "Exporter au format Markdown (avec réflexion)",
"topics.export.obsidian_vault": "Coffre-fort",
"topics.export.obsidian_vault_placeholder": "Veuillez choisir un nom de coffre-fort",
"topics.export.obsidian_path": "Chemin",
"topics.export.obsidian_path_placeholder": "Veuillez choisir un chemin",
"topics.export.obsidian_no_vaults": "Aucun coffre-fort Obsidian trouvé",
"topics.export.obsidian_loading": "Chargement...",
"topics.export.obsidian_fetch_error": "Échec de récupération du coffre-fort Obsidian",
"topics.export.obsidian_fetch_folders_error": "Échec de récupération de la structure des dossiers",
"topics.export.obsidian_no_vault_selected": "Veuillez d'abord sélectionner un coffre-fort",
"topics.export.obsidian_select_vault_first": "Veuillez d'abord choisir un coffre-fort",
"topics.export.obsidian_root_directory": "Répertoire racine",
"topics.export.siyuan": "Exporter vers Siyuan Notes",
"topics.export.wait_for_title_naming": "Génération du titre en cours...",
"topics.export.title_naming_success": "Titre généré avec succès",
"topics.export.title_naming_failed": "Échec de génération du titre, utilisation du titre par défaut"
}, },
"code_block": { "code_block": {
"collapse": "Réduire", "collapse": "Réduire",
@ -254,7 +343,16 @@
"select": "Sélectionner", "select": "Sélectionner",
"topics": "Sujets", "topics": "Sujets",
"warning": "Avertissement", "warning": "Avertissement",
"you": "Vous" "you": "Vous",
"sort": {
"pinyin": "Сортировать по пиньинь",
"pinyin.asc": "Сортировать по пиньинь в порядке возрастания",
"pinyin.desc": "Сортировать по пиньинь в порядке убывания"
},
"inspect": "Vérifier",
"collapse": "Réduire",
"loading": "Chargement...",
"reasoning_content": "Réflexion approfondie"
}, },
"docs": { "docs": {
"title": "Documentation d'aide" "title": "Documentation d'aide"
@ -280,7 +378,9 @@
"description": "La formule n'a pas été rendue avec succès, veuillez vérifier si le format de la formule est correct", "description": "La formule n'a pas été rendue avec succès, veuillez vérifier si le format de la formule est correct",
"title": "Erreur de rendu" "title": "Erreur de rendu"
}, },
"user_message_not_found": "Impossible de trouver le message d'utilisateur original" "user_message_not_found": "Impossible de trouver le message d'utilisateur original",
"unknown": "Неизвестная ошибка",
"pause_placeholder": "Прервано"
}, },
"export": { "export": {
"assistant": "Assistant", "assistant": "Assistant",
@ -393,7 +493,11 @@
"topN_tooltip": "Nombre de résultats de correspondance retournés, plus le chiffre est élevé, plus il y a de résultats de correspondance, mais plus de jetons sont consommés", "topN_tooltip": "Nombre de résultats de correspondance retournés, plus le chiffre est élevé, plus il y a de résultats de correspondance, mais plus de jetons sont consommés",
"url_added": "URL ajoutée", "url_added": "URL ajoutée",
"url_placeholder": "Entrez l'URL, plusieurs URLs séparées par des sauts de ligne", "url_placeholder": "Entrez l'URL, plusieurs URLs séparées par des sauts de ligne",
"urls": "URLs" "urls": "URLs",
"dimensions": "Размерность встраивания",
"dimensions_size_tooltip": "Размерность встраивания. Чем больше значение, тем выше размерность, но тем больше токенов требуется",
"dimensions_size_placeholder": "Значение по умолчанию (не рекомендуется изменять)",
"dimensions_size_too_large": "Размерность встраивания не может превышать ограничение контекста модели ({{max_context}})"
}, },
"languages": { "languages": {
"arabic": "Arabe", "arabic": "Arabe",
@ -505,20 +609,63 @@
"completed": "Terminé", "completed": "Terminé",
"invoking": "En cours d'exécution", "invoking": "En cours d'exécution",
"raw": "Brut", "raw": "Brut",
"preview": "Aperçu" "preview": "Aperçu",
"error": "Une erreur s'est produite"
}, },
"topic.added": "Thème ajouté avec succès", "topic.added": "Thème ajouté avec succès",
"upgrade.success.button": "Redémarrer", "upgrade.success.button": "Redémarrer",
"upgrade.success.content": "Redémarrez pour finaliser la mise à jour", "upgrade.success.content": "Redémarrez pour finaliser la mise à jour",
"upgrade.success.title": "Mise à jour réussie", "upgrade.success.title": "Mise à jour réussie",
"warn.notion.exporting": "Exportation en cours vers Notion, veuillez ne pas faire plusieurs demandes d'exportation!", "warn.notion.exporting": "Exportation en cours vers Notion, veuillez ne pas faire plusieurs demandes d'exportation!",
"warning.rate.limit": "Vous envoyez trop souvent, veuillez attendre {{seconds}} secondes avant de réessayer" "warning.rate.limit": "Vous envoyez trop souvent, veuillez attendre {{seconds}} secondes avant de réessayer",
"agents": {
"imported": "Импортировано успешно",
"import.error": "Ошибка импорта"
},
"citation": "{{count}} éléments cités",
"error.invalid.nutstore": "Paramètres Nutstore invalides",
"error.invalid.nutstore_token": "Jeton Nutstore invalide",
"processing": "En cours de traitement...",
"error.siyuan.export": "Échec de l'exportation de la note Siyuan, veuillez vérifier l'état de la connexion et la configuration indiquée dans le document",
"error.siyuan.no_config": "L'adresse API ou le jeton Siyuan n'a pas été configuré",
"success.siyuan.export": "Exportation vers Siyuan réussie",
"warn.yuque.exporting": "Exportation Yuque en cours, veuillez ne pas demander à exporter à nouveau !",
"warn.siyuan.exporting": "Exportation vers Siyuan en cours, veuillez ne pas demander à exporter à nouveau !",
"download.success": "Téléchargement réussi",
"download.failed": "Échec du téléchargement"
}, },
"minapp": { "minapp": {
"sidebar.add.title": "Ajouter à la barre latérale", "title": "Mini-programme",
"sidebar.remove.title": "Supprimer de la barre latérale", "popup": {
"sidebar.hide.title": "Masquer le mini-programme", "refresh": "Обновить",
"title": "Mini-programme" "close": "Закрыть мини-программу",
"minimize": "Свернуть мини-программу",
"devtools": "Инструменты разработчика",
"openExternal": "Открыть в браузере",
"rightclick_copyurl": "Скопировать URL через правую кнопку мыши",
"open_link_external_on": "Текущий: открывать ссылки в браузере",
"open_link_external_off": "Текущий: открывать ссылки в окне по умолчанию"
},
"sidebar": {
"add": {
"title": "Ajouter à la barre latérale"
},
"remove": {
"title": "Удалить из боковой панели"
},
"remove_custom": {
"title": "Supprimer l'application personnalisée"
},
"hide": {
"title": "Cacher"
},
"close": {
"title": "Fermer"
},
"closeall": {
"title": "Закрыть все"
}
}
}, },
"miniwindow": { "miniwindow": {
"clipboard": { "clipboard": {
@ -534,13 +681,17 @@
"copy_last_message": "Appuyez sur C pour copier", "copy_last_message": "Appuyez sur C pour copier",
"esc": "Appuyez sur ESC {{action}}", "esc": "Appuyez sur ESC {{action}}",
"esc_back": "Revenir en arrière", "esc_back": "Revenir en arrière",
"esc_close": "Fermer la fenêtre" "esc_close": "Fermer la fenêtre",
"backspace_clear": "Appuyez sur Retour arrière pour effacer"
}, },
"input": { "input": {
"placeholder": { "placeholder": {
"empty": "Demander à {{model}} pour obtenir de l'aide...", "empty": "Demander à {{model}} pour obtenir de l'aide...",
"title": "Que souhaitez-vous faire avec le texte ci-dessous" "title": "Que souhaitez-vous faire avec le texte ci-dessous"
} }
},
"tooltip": {
"pin": "Закрепить окно"
} }
}, },
"models": { "models": {
@ -577,7 +728,9 @@
"free": "Gratuit", "free": "Gratuit",
"rerank": "Reclasser", "rerank": "Reclasser",
"websearch": "Recherche web" "websearch": "Recherche web"
} },
"rerank_model_not_support_provider": "Le modèle de réordonnancement ne prend pas en charge ce fournisseur ({{provider}}) pour le moment",
"enable_tool_use": "Appel d'outil"
}, },
"navbar": { "navbar": {
"expand": "Agrandir la boîte de dialogue", "expand": "Agrandir la boîte de dialogue",
@ -609,7 +762,59 @@
"regenerate.confirm": "Cela va remplacer les images générées, voulez-vous continuer?", "regenerate.confirm": "Cela va remplacer les images générées, voulez-vous continuer?",
"seed": "Graine aléatoire", "seed": "Graine aléatoire",
"seed_tip": "La même graine et le même prompt peuvent générer des images similaires", "seed_tip": "La même graine et le même prompt peuvent générer des images similaires",
"title": "Image" "title": "Image",
"mode": {
"generate": "Создать изображение",
"edit": "Редактировать",
"remix": "Смешать",
"upscale": "Увеличить"
},
"generate": {
"model_tip": "Версия модели: V2 — это последняя модель API, V2A — быстрая модель, V_1 — первое поколение модели, _TURBO — ускоренная версия",
"number_images_tip": "Количество изображений за один раз",
"seed_tip": "Контролирует случайность генерации изображения, используется для воспроизведения одинаковых результатов",
"negative_prompt_tip": "Описывает элементы, которые вы не хотите видеть на изображении. Поддерживается только версиями V_1, V_1_TURBO, V_2 и V_2_TURBO",
"magic_prompt_option_tip": "Интеллектуальная оптимизация подсказок для улучшения результатов генерации",
"style_type_tip": "Стиль генерации изображения, применим к версии V_2 и выше"
},
"edit": {
"image_file": "Image éditée",
"model_tip": "L'édition partielle est uniquement prise en charge par les versions V_2 et V_2_TURBO",
"number_images_tip": "Nombre de résultats d'édition générés",
"style_type_tip": "Style de l'image après édition, uniquement applicable aux versions V_2 et ultérieures",
"seed_tip": "Contrôle la variabilité aléatoire des résultats d'édition",
"magic_prompt_option_tip": "Optimisation intelligente du mot-clé d'édition"
},
"remix": {
"model_tip": "Sélectionnez la version du modèle IA à utiliser pour le remix",
"image_file": "Image de référence",
"image_weight": "Poids de l'image de référence",
"image_weight_tip": "Ajustez l'influence de l'image de référence",
"number_images_tip": "Nombre de résultats de remix à générer",
"seed_tip": "Contrôle l'aléatoire des résultats de remix",
"style_type_tip": "Style de l'image après le remix, uniquement applicable aux versions V_2 et supérieures",
"negative_prompt_tip": "Décrivez les éléments que vous ne souhaitez pas voir apparaître dans le résultat du remix",
"magic_prompt_option_tip": "Optimisation intelligente des mots-clés du remix"
},
"upscale": {
"image_file": "Image à agrandir",
"resemblance": "Similarité",
"resemblance_tip": "Contrôle le niveau de similarité entre le résultat agrandi et l'image originale",
"detail": "Détail",
"detail_tip": "Contrôle l'intensité de l'amélioration des détails dans l'image agrandie",
"number_images_tip": "Nombre de résultats d'agrandissement générés",
"seed_tip": "Contrôle la randomisation du résultat d'agrandissement",
"magic_prompt_option_tip": "Optimisation intelligente du prompt d'agrandissement"
},
"magic_prompt_option": "Amélioration du prompt",
"model": "Version",
"aspect_ratio": "Format d'image",
"style_type": "Style",
"learn_more": "En savoir plus",
"prompt_placeholder_edit": "Entrez votre description d'image, utilisez des guillemets « \"\" » pour le texte à dessiner",
"proxy_required": "Actuellement, un proxy doit être activé pour afficher les images générées. Le support pour une connexion directe depuis la Chine sera ajouté ultérieurement.",
"image_file_required": "Veuillez d'abord télécharger une image",
"image_file_retry": "Veuillez réuploader l'image"
}, },
"plantuml": { "plantuml": {
"download": { "download": {
@ -672,7 +877,9 @@
"xirang": "CTyun XiRang", "xirang": "CTyun XiRang",
"yi": "ZéroUnInfini", "yi": "ZéroUnInfini",
"zhinao": "360 ZhiNao", "zhinao": "360 ZhiNao",
"zhipu": "ZhiPu IA" "zhipu": "ZhiPu IA",
"voyageai": "Voyage AI",
"qiniu": "Qiniu Cloud"
}, },
"restore": { "restore": {
"confirm": "Êtes-vous sûr de vouloir restaurer les données ?", "confirm": "Êtes-vous sûr de vouloir restaurer les données ?",
@ -714,7 +921,6 @@
"advanced.title": "Paramètres avancés", "advanced.title": "Paramètres avancés",
"assistant": "Assistant par défaut", "assistant": "Assistant par défaut",
"assistant.model_params": "Paramètres du modèle", "assistant.model_params": "Paramètres du modèle",
"assistant.show.icon": "Afficher l'icône du modèle",
"assistant.title": "Assistant par défaut", "assistant.title": "Assistant par défaut",
"data": { "data": {
"app_data": "Données de l'application", "app_data": "Données de l'application",
@ -780,13 +986,13 @@
"notion.split_size_placeholder": "Veuillez entrer la limite de blocs par page (par défaut 90)", "notion.split_size_placeholder": "Veuillez entrer la limite de blocs par page (par défaut 90)",
"notion.title": "Configuration Notion", "notion.title": "Configuration Notion",
"obsidian": { "obsidian": {
"folder": "Dossier",
"folder_placeholder": "Veuillez entrer le nom du dossier",
"tags": "Étiquettes globales",
"tags_placeholder": "Veuillez entrer le nom de l'étiquette, plusieurs étiquettes sont séparées par une virgule anglaise, Obsidian ne peut pas utiliser uniquement des chiffres",
"title": "Configuration d'Obsidian", "title": "Configuration d'Obsidian",
"vault": "Coffre-fort", "default_vault": "Référentiel Obsidian par défaut",
"vault_placeholder": "Veuillez entrer le nom du coffre-fort" "default_vault_placeholder": "Veuillez sélectionner un référentiel Obsidian par défaut",
"default_vault_loading": "Récupération du référentiel Obsidian en cours...",
"default_vault_no_vaults": "Aucun référentiel Obsidian trouvé",
"default_vault_fetch_error": "Échec de la récupération du référentiel Obsidian",
"default_vault_export_failed": "Échec de l'exportation"
}, },
"title": "Paramètres des données", "title": "Paramètres des données",
"webdav": { "webdav": {
@ -818,7 +1024,26 @@
"title": "WebDAV", "title": "WebDAV",
"user": "Nom d'utilisateur WebDAV", "user": "Nom d'utilisateur WebDAV",
"maxBackups": "Nombre maximal de sauvegardes", "maxBackups": "Nombre maximal de sauvegardes",
"maxBackups.unlimited": "Illimité" "maxBackups.unlimited": "Illimité",
"backup.manager.title": "Gestion des sauvegardes",
"backup.manager.refresh": "Actualiser",
"backup.manager.delete.selected": "Supprimer la sélection",
"backup.manager.delete.text": "Supprimer",
"backup.manager.restore.text": "Restaurer",
"backup.manager.restore.success": "Restauration réussie, l'application sera actualisée dans quelques secondes",
"backup.manager.restore.error": "Échec de la restauration",
"backup.manager.delete.confirm.title": "Confirmer la suppression",
"backup.manager.delete.confirm.single": "Voulez-vous vraiment supprimer le fichier de sauvegarde \"{{fileName}}\" ? Cette action est irréversible.",
"backup.manager.delete.confirm.multiple": "Voulez-vous vraiment supprimer les {{count}} fichiers de sauvegarde sélectionnés ? Cette action est irréversible.",
"backup.manager.delete.success.single": "Suppression réussie",
"backup.manager.delete.success.multiple": "{{count}} fichiers de sauvegarde supprimés avec succès",
"backup.manager.delete.error": "Échec de la suppression",
"backup.manager.fetch.error": "Échec de la récupération des fichiers de sauvegarde",
"backup.manager.select.files.delete": "Veuillez sélectionner les fichiers de sauvegarde à supprimer",
"backup.manager.columns.fileName": "Nom du fichier",
"backup.manager.columns.modifiedTime": "Date de modification",
"backup.manager.columns.size": "Taille",
"backup.manager.columns.actions": "Actions"
}, },
"yuque": { "yuque": {
"check": { "check": {
@ -834,16 +1059,73 @@
"title": "Configuration Yuque", "title": "Configuration Yuque",
"token": "Token Yuque", "token": "Token Yuque",
"token_placeholder": "Veuillez entrer le Token Yuque" "token_placeholder": "Veuillez entrer le Token Yuque"
} },
"export_menu": {
"title": "Exporter les paramètres du menu",
"image": "Exporter en tant qu'image",
"markdown": "Exporter au format Markdown",
"markdown_reason": "Exporter au format Markdown (avec réflexion incluse)",
"notion": "Exporter vers Notion",
"yuque": "Exporter vers Yuque",
"obsidian": "Exporter vers Obsidian",
"siyuan": "Exporter vers Siyuan Notes",
"joplin": "Exporter vers Joplin",
"docx": "Exporter au format Word"
},
"siyuan": {
"check": {
"title": "Проверка подключения",
"button": "Проверить",
"empty_config": "Пожалуйста, введите адрес API и токен",
"success": "Подключение успешно",
"fail": "Не удалось подключиться, проверьте адрес API и токен",
"error": "Аномалия подключения, проверьте сетевое соединение"
},
"title": "Настройка CherryNote",
"api_url": "Адрес API",
"api_url_placeholder": "Например: http://127.0.0.1:6806",
"token": "Токен API",
"token.help": "Получить в разделе CherryNote -> Настройки -> О программе",
"token_placeholder": "Введите токен CherryNote",
"box_id": "Идентификатор блокнота",
"box_id_placeholder": "Введите идентификатор блокнота",
"root_path": "Корневой путь документа",
"root_path_placeholder": "Например: /CherryStudio"
},
"nutstore": {
"title": "Настройка坚果云",
"isLogin": "Вход выполнен",
"notLogin": "Вход не выполнен",
"login.button": "Войти",
"logout.button": "Выйти из аккаунта",
"logout.title": "Вы действительно хотите выйти из аккаунта坚果云?",
"logout.content": "После выхода будет невозможно создать резервную копию в坚果云 или восстановить данные из нее",
"checkConnection.name": "Проверить соединение",
"checkConnection.success": "Соединение с坚果云 установлено",
"checkConnection.fail": "Не удалось подключиться к坚果云",
"username": "Имя пользователя坚果云",
"path": "Путь хранения данных坚果云",
"path.placeholder": "Введите путь хранения данных坚果云",
"backup.button": "Резервное копирование в坚果云",
"restore.button": "Восстановление из坚果云",
"pathSelector.title": "Путь хранения данных坚果云",
"pathSelector.return": "Назад",
"pathSelector.currentPath": "Текущий путь",
"new_folder.button.confirm": "Подтвердить",
"new_folder.button.cancel": "Отмена",
"new_folder.button": "Создать папку"
},
"divider.basic": "Paramètres de base",
"divider.cloud_storage": "Paramètres de sauvegarde cloud",
"divider.export_settings": "Paramètres d'exportation",
"divider.third_party": "Connexion tierce",
"message_title.use_topic_naming.title": "Utiliser le modèle de dénomination thématique pour créer les titres des messages exportés",
"message_title.use_topic_naming.help": "Lorsque cette option est activée, le modèle de dénomination thématique sera utilisé pour créer les titres des messages exportés. Cette option affectera également toutes les méthodes d'exportation au format Markdown."
}, },
"display.assistant.title": "Paramètres de l'assistant", "display.assistant.title": "Paramètres de l'assistant",
"display.custom.css": "CSS personnalisé", "display.custom.css": "CSS personnalisé",
"display.custom.css.cherrycss": "Obtenir depuis cherrycss.com", "display.custom.css.cherrycss": "Obtenir depuis cherrycss.com",
"display.custom.css.placeholder": "/* Écrire votre CSS personnalisé ici */", "display.custom.css.placeholder": "/* Écrire votre CSS personnalisé ici */",
"display.minApp.disabled": "Applications minimisées masquées",
"display.minApp.empty": "Glissez les applications minimisées à masquer ici",
"display.minApp.title": "Paramètres d'affichage des applications minimisées",
"display.minApp.visible": "Applications minimisées affichées",
"display.sidebar.chat.hiddenMessage": "L'assistant est une fonction de base et ne peut pas être masquée", "display.sidebar.chat.hiddenMessage": "L'assistant est une fonction de base et ne peut pas être masquée",
"display.sidebar.disabled": "Icônes masquées", "display.sidebar.disabled": "Icônes masquées",
"display.sidebar.empty": "Glissez les fonctions à masquer ici", "display.sidebar.empty": "Glissez les fonctions à masquer ici",
@ -864,7 +1146,6 @@
"general.display.title": "Paramètres d'affichage", "general.display.title": "Paramètres d'affichage",
"general.emoji_picker": "Sélectionneur d'émoticônes", "general.emoji_picker": "Sélectionneur d'émoticônes",
"general.image_upload": "Téléchargement d'images", "general.image_upload": "Téléchargement d'images",
"general.manually_check_update.title": "Désactiver la vérification des mises à jour",
"general.reset.button": "Réinitialiser", "general.reset.button": "Réinitialiser",
"general.reset.title": "Réinitialiser les données", "general.reset.title": "Réinitialiser les données",
"general.restore.button": "Restaurer", "general.restore.button": "Restaurer",
@ -930,11 +1211,94 @@
"serverPlural": "Serveurs", "serverPlural": "Serveurs",
"serverSingular": "Serveur", "serverSingular": "Serveur",
"title": "Serveurs MCP", "title": "Serveurs MCP",
"toggleError": "Échec du basculement",
"type": "Type", "type": "Type",
"updateError": "Échec de la mise à jour du serveur", "updateError": "Échec de la mise à jour du serveur",
"updateSuccess": "Serveur mis à jour avec succès", "updateSuccess": "Serveur mis à jour avec succès",
"url": "URL" "url": "URL",
"errors": {
"32000": "Échec du démarrage du serveur MCP, veuillez vérifier si tous les paramètres sont correctement remplis conformément au tutoriel"
},
"tabs": {
"general": "Général",
"description": "Description",
"tools": "Outils",
"prompts": "Prompts",
"resources": "Ressources"
},
"tools": {
"inputSchema": "Schéma d'entrée",
"availableTools": "Outils disponibles",
"noToolsAvailable": "Aucun outil disponible",
"loadError": "Échec de la récupération des outils"
},
"prompts": {
"availablePrompts": "Invites disponibles",
"noPromptsAvailable": "Aucune invite disponible",
"arguments": "Arguments",
"requiredField": "Champ obligatoire",
"genericError": "Erreur lors de la récupération des invites",
"loadError": "Échec de la récupération des invites"
},
"resources": {
"noResourcesAvailable": "Нет доступных ресурсов",
"availableResources": "Доступные ресурсы",
"uri": "URI",
"mimeType": "Тип MIME",
"size": "Размер",
"blob": "Бинарные данные",
"blobInvisible": "Скрытые бинарные данные",
"text": "Текст"
},
"types": {
"inMemory": "Intégré",
"sse": "SSE",
"streamableHttp": "Flux continu",
"stdio": "STDIO"
},
"sync": {
"title": "Синхронизация сервера",
"selectProvider": "Выберите провайдера:",
"discoverMcpServers": "Обнаружить MCP-серверы",
"discoverMcpServersDescription": "Посетите платформу для обнаружения доступных MCP-серверов",
"getToken": "Получить API-токен",
"getTokenDescription": "Получите персональный API-токен из вашей учетной записи",
"setToken": "Введите ваш токен",
"tokenRequired": "Требуется API-токен",
"tokenPlaceholder": "Введите API-токен здесь",
"button": "Синхронизировать",
"error": "Ошибка синхронизации MCP-сервера",
"success": "MCP-сервер успешно синхронизирован",
"unauthorized": "Синхронизация не авторизована",
"noServersAvailable": "Нет доступных MCP-серверов"
},
"sse": "Серверные отправляемые события (sse)",
"streamableHttp": "HTTP поддерживающий потоковую передачу (streamableHttp)",
"stdio": "Стандартный ввод/вывод (stdio)",
"inMemory": "В памяти",
"headers": "Заголовки запроса",
"headersTooltip": "Пользовательские заголовки HTTP-запроса",
"searchNpx": "Поиск MCP",
"newServer": "Сервер MCP",
"startError": "Ошибка запуска",
"editMcpJson": "Редактировать конфигурацию MCP",
"installHelp": "Получить помощь по установке",
"deleteServer": "Удалить сервер",
"deleteServerConfirm": "Вы уверены, что хотите удалить этот сервер?",
"registry": "Источник управления пакетами",
"registryTooltip": "Выберите источник для установки пакетов, чтобы решить проблемы с сетью по умолчанию.",
"registryDefault": "По умолчанию",
"not_support": "Модель не поддерживается",
"user": "Пользователь",
"system": "Система",
"timeout": "Таймаут",
"timeoutTooltip": "Таймаут запроса к серверу (в секундах), по умолчанию 60 секунд",
"provider": "Поставщик",
"providerUrl": "Адрес поставщика",
"logoUrl": "Адрес логотипа",
"tags": "Теги",
"tagsPlaceholder": "Введите теги",
"providerPlaceholder": "Название поставщика",
"advancedSettings": "Расширенные настройки"
}, },
"messages.divider": "Séparateur de messages", "messages.divider": "Séparateur de messages",
"messages.grid_columns": "Nombre de colonnes de la grille de messages", "messages.grid_columns": "Nombre de colonnes de la grille de messages",
@ -1046,13 +1410,29 @@
"docs_more_details": "Obtenir plus de détails", "docs_more_details": "Obtenir plus de détails",
"get_api_key": "Cliquez ici pour obtenir une clé", "get_api_key": "Cliquez ici pour obtenir une clé",
"is_not_support_array_content": "Activer le mode compatible", "is_not_support_array_content": "Activer le mode compatible",
"no_models": "Veuillez ajouter un modèle avant de vérifier la connexion API",
"not_checked": "Non vérifié", "not_checked": "Non vérifié",
"remove_duplicate_keys": "Supprimer les clés en double", "remove_duplicate_keys": "Supprimer les clés en double",
"remove_invalid_keys": "Supprimer les clés invalides", "remove_invalid_keys": "Supprimer les clés invalides",
"search": "Rechercher une plateforme de modèles...", "search": "Rechercher une plateforme de modèles...",
"search_placeholder": "Rechercher un ID ou un nom de modèle", "search_placeholder": "Rechercher un ID ou un nom de modèle",
"title": "Services de modèles" "title": "Services de modèles",
"oauth": {
"button": "Войти через аккаунт {{provider}}",
"description": "Этот сервис предоставляется <website>{{provider}}</website>",
"official_website": "Официальный сайт"
},
"notes": {
"title": "Примечание к модели",
"placeholder": "Введите содержимое в формате Markdown...",
"markdown_editor_default_value": "Область предварительного просмотра"
},
"basic_auth": "Authentification HTTP",
"basic_auth.tip": "S'applique aux instances déployées via le serveur (voir la documentation). Seule la méthode Basic est actuellement prise en charge (RFC7617).",
"basic_auth.user_name": "Nom d'utilisateur",
"basic_auth.user_name.tip": "Laisser vide pour désactiver",
"basic_auth.password": "Mot de passe",
"bills": "Factures",
"no_models_for_check": "Aucun modèle détectable (par exemple, modèle de chat)"
}, },
"proxy": { "proxy": {
"mode": { "mode": {
@ -1129,8 +1509,111 @@
"description": "Tavily est un moteur de recherche conçu spécifiquement pour les agents IA, offrant des résultats en temps réel, précis, des suggestions de requêtes intelligentes et des capacités de recherche approfondie", "description": "Tavily est un moteur de recherche conçu spécifiquement pour les agents IA, offrant des résultats en temps réel, précis, des suggestions de requêtes intelligentes et des capacités de recherche approfondie",
"title": "Tavily" "title": "Tavily"
}, },
"title": "Recherche sur Internet" "title": "Recherche sur Internet",
} "overwrite": "Remplacer la recherche du fournisseur",
"overwrite_tooltip": "Forcer l'utilisation du moteur de recherche du fournisseur au lieu du modèle linguistique volumineux",
"subscribe": "Abonnement à la liste noire",
"subscribe_update": "Mettre à jour maintenant",
"subscribe_add": "Ajouter un abonnement",
"subscribe_url": "Adresse de la source d'abonnement",
"subscribe_name": "Nom alternatif",
"subscribe_name.placeholder": "Nom alternatif utilisé lorsque la source d'abonnement téléchargée ne contient pas de nom",
"subscribe_add_success": "Source d'abonnement ajoutée avec succès !",
"subscribe_delete": "Supprimer la source d'abonnement",
"apikey": "Clé API",
"free": "Gratuit",
"content_limit": "Limite de longueur du contenu",
"content_limit_tooltip": "Limite la longueur du contenu des résultats de recherche, le contenu dépassant la limite sera tronqué"
},
"miniapps": {
"open_link_external": {
"title": "Ouvrir un nouveau lien dans une fenêtre du navigateur"
},
"custom": {
"title": "Пользовательское приложение",
"edit_title": "Редактировать пользовательское приложение",
"save_success": "Пользовательское приложение успешно сохранено.",
"save_error": "Не удалось сохранить пользовательское приложение.",
"remove_success": "Пользовательское приложение успешно удалено.",
"remove_error": "Не удалось удалить пользовательское приложение.",
"logo_upload_success": "Логотип успешно загружен.",
"logo_upload_error": "Не удалось загрузить логотип.",
"id": "ID",
"id_error": "Поле ID обязательно для заполнения.",
"id_placeholder": "Введите ID",
"name": "Имя",
"name_error": "Поле Имя обязательно для заполнения.",
"name_placeholder": "Введите имя",
"url": "URL",
"url_error": "Поле URL обязательно для заполнения.",
"url_placeholder": "Введите URL",
"logo": "Логотип",
"logo_url": "URL логотипа",
"logo_file": "Загрузить файл логотипа",
"logo_url_label": "URL логотипа",
"logo_url_placeholder": "Введите URL логотипа",
"logo_upload_label": "Загрузить логотип",
"logo_upload_button": "Загрузить",
"save": "Сохранить",
"edit_description": "Здесь вы можете отредактировать конфигурацию пользовательского приложения. Каждое приложение должно содержать поля id, name, url и logo.",
"placeholder": "Введите конфигурацию пользовательского приложения (в формате JSON)",
"duplicate_ids": "Обнаружены повторяющиеся ID: {{ids}}",
"conflicting_ids": "Конфликтующие ID с ID по умолчанию: {{ids}}"
},
"title": "Paramètres de l'application",
"disabled": "Applications masquées",
"empty": "Faites glisser vers ici les applications que vous souhaitez masquer",
"visible": "Applications visibles",
"cache_settings": "Paramètres du cache",
"cache_title": "Nombre de caches d'applications",
"cache_description": "Définir le nombre maximum d'applications pouvant rester actives simultanément",
"reset_tooltip": "Réinitialiser aux valeurs par défaut",
"display_title": "Paramètres d'affichage des applications",
"sidebar_title": "Affichage des applications actives dans la barre latérale",
"sidebar_description": "Définir si les applications actives doivent s'afficher dans la barre latérale",
"cache_change_notice": "Les modifications prendront effet après l'ajout ou la suppression d'applications ouvertes jusqu'à atteindre la valeur définie"
},
"quickPhrase": {
"title": "Быстрые фразы",
"add": "Добавить фразу",
"edit": "Редактировать фразу",
"titleLabel": "Заголовок",
"contentLabel": "Содержание",
"titlePlaceholder": "Введите заголовок фразы",
"contentPlaceholder": "Введите содержание фразы, поддерживает использование переменных, после этого нажмите Tab, чтобы быстро перейти к переменной для редактирования. Например: \\n Запланируй маршрут от ${from} до ${to}, а затем отправь его на ${email}.",
"delete": "Удалить фразу",
"deleteConfirm": "После удаления фразы её невозможно восстановить. Продолжить?",
"locationLabel": "Добавить местоположение",
"global": "Глобальные фразы",
"assistant": "Фразы помощника"
},
"quickPanel": {
"title": "Быстрое меню",
"close": "Закрыть",
"select": "Выбрать",
"page": "Перелистнуть страницу",
"confirm": "Подтвердить",
"back": "Назад",
"forward": "Вперед",
"multiple": "Множественный выбор"
},
"privacy": {
"title": "Настройки конфиденциальности",
"enable_privacy_mode": "Отправлять анонимные сообщения об ошибках и статистику"
},
"assistant.icon.type": "Type d'icône du modèle",
"assistant.icon.type.model": "Icône de modèle",
"assistant.icon.type.emoji": "Emoji",
"assistant.icon.type.none": "Ne pas afficher",
"general.auto_check_update.title": "Mise à jour automatique",
"input.show_translate_confirm": "Afficher la boîte de dialogue de confirmation de traduction",
"messages.prompt": "Mot-clé d'affichage",
"messages.input.enable_quick_triggers": "Activer les menus rapides avec '/' et '@'",
"messages.input.enable_delete_model": "Activer la touche Supprimer pour effacer le modèle/pièce jointe saisie",
"messages.math_engine.none": "Aucun",
"models.manage.add_listed": "Ajouter un modèle depuis la liste",
"models.manage.remove_listed": "Supprimer un modèle de la liste",
"zoom.title": "Zoom de la page"
}, },
"translate": { "translate": {
"any.language": "langue arbitraire", "any.language": "langue arbitraire",
@ -1155,7 +1638,10 @@
"scroll_sync.disable": "désactiver la synchronisation du défilement", "scroll_sync.disable": "désactiver la synchronisation du défilement",
"scroll_sync.enable": "activer la synchronisation du défilement", "scroll_sync.enable": "activer la synchronisation du défilement",
"title": "traduction", "title": "traduction",
"tooltip.newline": "saut de ligne" "tooltip.newline": "saut de ligne",
"menu": {
"description": "Traduire le contenu de la zone de saisie actuelle"
}
}, },
"tray": { "tray": {
"quit": "Quitter", "quit": "Quitter",

View File

@ -29,7 +29,26 @@
"tag.default": "Padrão", "tag.default": "Padrão",
"tag.new": "Novo", "tag.new": "Novo",
"tag.system": "Sistema", "tag.system": "Sistema",
"title": "Agente" "title": "Agente",
"import": {
"type": {
"url": "URL",
"file": "Arquivo"
},
"error": {
"url_required": "Por favor, insira a URL",
"fetch_failed": "Falha ao buscar dados da URL",
"invalid_format": "Formato de proxy inválido: campos obrigatórios ausentes"
},
"title": "Importar do exterior",
"url_placeholder": "Insira o URL JSON",
"select_file": "Selecionar arquivo",
"button": "Importar",
"file_filter": "Arquivo JSON"
},
"export": {
"agent": "Exportar Agente"
}
}, },
"assistants": { "assistants": {
"abbr": "Assistente", "abbr": "Assistente",
@ -52,8 +71,31 @@
"settings.reasoning_effort.low": "Curto", "settings.reasoning_effort.low": "Curto",
"settings.reasoning_effort.medium": "Médio", "settings.reasoning_effort.medium": "Médio",
"settings.reasoning_effort.off": "Desligado", "settings.reasoning_effort.off": "Desligado",
"settings.reasoning_effort.tip": "Apenas suporta modelos de raciocínio OpenAI o-series e Anthropic", "title": "Assistente",
"title": "Assistente" "settings.regular_phrases": {
"title": "Frases Comuns",
"add": "Adicionar Frase",
"edit": "Editar Frase",
"delete": "Excluir Frase",
"deleteConfirm": "Tem certeza de que deseja excluir esta frase?",
"titleLabel": "Título",
"titlePlaceholder": "Digite o título",
"contentLabel": "Conteúdo",
"contentPlaceholder": "Por favor, insira o conteúdo da frase. Há suporte para o uso de variáveis, e em seguida você pode pressionar a tecla Tab para localizar rapidamente a variável e editá-la. Por exemplo:\\n Planeie uma rota de ${from} para ${to} e depois envie para ${email}."
},
"settings.title": "Configurações do Assistente",
"icon.type": "Ícone do Assistente",
"settings.mcp": "Servidor MCP",
"settings.mcp.enableFirst": "Por favor, ative este servidor nas configurações do MCP primeiro",
"settings.mcp.title": "Configurações do MCP",
"settings.mcp.noServersAvailable": "Nenhum servidor MCP disponível. Adicione um servidor nas configurações",
"settings.mcp.description": "Servidor MCP ativado por padrão",
"settings.knowledge_base.recognition.tip": "O agente usará a capacidade de reconhecimento de intenção do grande modelo para decidir se deve chamar a base de conhecimento para responder. Esta função depende da capacidade do modelo",
"settings.knowledge_base.recognition": "Chamar base de conhecimento",
"settings.knowledge_base.recognition.off": "Busca forçada",
"settings.knowledge_base.recognition.on": "Reconhecimento de intenção",
"settings.reasoning_effort.default": "Padrão",
"settings.more": "Configurações do Assistente"
}, },
"auth": { "auth": {
"error": "Falha ao obter a chave automaticamente, por favor obtenha manualmente", "error": "Falha ao obter a chave automaticamente, por favor obtenha manualmente",
@ -133,7 +175,8 @@
"prev": "Mensagem anterior", "prev": "Mensagem anterior",
"top": "Voltar ao topo", "top": "Voltar ao topo",
"bottom": "Voltar ao fundo", "bottom": "Voltar ao fundo",
"close": "Fechar" "close": "Fechar",
"history": "Histórico de Conversas"
}, },
"resend": "Reenviar", "resend": "Reenviar",
"save": "Salvar", "save": "Salvar",
@ -176,7 +219,6 @@
"topics.export.obsidian_created_placeholder": "Selecione a data de criação", "topics.export.obsidian_created_placeholder": "Selecione a data de criação",
"topics.export.obsidian_export_failed": "Exportação falhou", "topics.export.obsidian_export_failed": "Exportação falhou",
"topics.export.obsidian_export_success": "Exportação bem-sucedida", "topics.export.obsidian_export_success": "Exportação bem-sucedida",
"topics.export.obsidian_not_configured": "Obsidian não configurado",
"topics.export.obsidian_operate": "Operação", "topics.export.obsidian_operate": "Operação",
"topics.export.obsidian_operate_append": "Anexar", "topics.export.obsidian_operate_append": "Anexar",
"topics.export.obsidian_operate_new_or_overwrite": "Criar novo (substituir se existir)", "topics.export.obsidian_operate_new_or_overwrite": "Criar novo (substituir se existir)",
@ -203,7 +245,55 @@
"topics.unpinned": "Desfixar", "topics.unpinned": "Desfixar",
"translate": "Traduzir", "translate": "Traduzir",
"input.generate_image": "Gerar imagem", "input.generate_image": "Gerar imagem",
"input.generate_image_not_supported": "Modelo não suporta geração de imagem" "input.generate_image_not_supported": "Modelo não suporta geração de imagem",
"history": {
"assistant_node": "Assistente",
"click_to_navigate": "Clique para pular para a mensagem correspondente",
"coming_soon": "O gráfico do fluxo de chat estará disponível em breve",
"no_messages": "Nenhuma mensagem encontrada",
"start_conversation": "Inicie uma conversa para visualizar o gráfico do fluxo de chat",
"title": "Histórico de Chat",
"user_node": "Usuário",
"view_full_content": "Ver conteúdo completo"
},
"input.translating": "Traduzindo...",
"input.thinking": "Pensando",
"input.thinking.mode.default": "Padrão",
"input.thinking.mode.default.tip": "O modelo determinará automaticamente o número de tokens a serem pensados",
"input.thinking.mode.custom": "Personalizado",
"input.thinking.mode.custom.tip": "Número máximo de tokens que o modelo pode utilizar para pensar. Considere os limites de contexto do modelo, caso contrário ocorrerá um erro",
"input.thinking.mode.tokens.tip": "Definir o número de tokens para raciocínio",
"input.thinking.budget_exceeds_max": "Orçamento de pensamento excede o número máximo de tokens",
"input.upload.upload_from_local": "Fazer upload de arquivo local...",
"input.web_search.builtin": "Integrado ao modelo",
"input.web_search.builtin.enabled_content": "Usar a função integrada de busca na web do modelo",
"input.web_search.builtin.disabled_content": "Este modelo não suporta busca na web",
"input.web_search.no_web_search": "Sem busca na web",
"input.web_search.no_web_search.description": "Não ativar a função de busca na web",
"settings.code_cacheable": "Cache de blocos de código",
"settings.code_cacheable.tip": "O cache de blocos de código reduz o tempo de renderização de códigos longos, mas aumenta o uso de memória",
"settings.code_cache_max_size": "Limite do cache",
"settings.code_cache_max_size.tip": "Limite de caracteres permitidos no cache (em milhares de caracteres), calculado com base no código com sintaxe destacada. O código destacado é significativamente maior que texto puro.",
"settings.code_cache_ttl": "Tempo de vida do cache",
"settings.code_cache_ttl.tip": "Tempo em minutos até o cache expirar",
"settings.code_cache_threshold": "Limiar para cache",
"settings.code_cache_threshold.tip": "Tamanho mínimo de código permitido para cache (em milhares de caracteres). Apenas blocos maiores que esse limiar serão armazenados em cache",
"topics.export.md.reason": "Exportar como Markdown (incluindo raciocínios)",
"topics.export.obsidian_vault": "Cofre",
"topics.export.obsidian_vault_placeholder": "Selecione o nome do cofre",
"topics.export.obsidian_path": "Caminho",
"topics.export.obsidian_path_placeholder": "Selecione o caminho",
"topics.export.obsidian_no_vaults": "Nenhum cofre Obsidian encontrado",
"topics.export.obsidian_loading": "Carregando...",
"topics.export.obsidian_fetch_error": "Falha ao carregar cofres Obsidian",
"topics.export.obsidian_fetch_folders_error": "Falha ao carregar estrutura de pastas",
"topics.export.obsidian_no_vault_selected": "Por favor, selecione um cofre primeiro",
"topics.export.obsidian_select_vault_first": "Por favor, selecione um cofre primeiro",
"topics.export.obsidian_root_directory": "Diretório raiz",
"topics.export.siyuan": "Exportar para a nota Siyuan",
"topics.export.wait_for_title_naming": "Gerando título...",
"topics.export.title_naming_success": "Título gerado com sucesso",
"topics.export.title_naming_failed": "Falha ao gerar título, usando título padrão"
}, },
"code_block": { "code_block": {
"collapse": "Recolher", "collapse": "Recolher",
@ -254,7 +344,16 @@
"select": "Selecionar", "select": "Selecionar",
"topics": "Tópicos", "topics": "Tópicos",
"warning": "Aviso", "warning": "Aviso",
"you": "Você" "you": "Você",
"sort": {
"pinyin": "Ordenar por Pinyin",
"pinyin.asc": "Ordenar por Pinyin em ordem crescente",
"pinyin.desc": "Ordenar por Pinyin em ordem decrescente"
},
"inspect": "Verificar",
"collapse": "Recolher",
"loading": "Carregando...",
"reasoning_content": "Pensamento profundo concluído"
}, },
"docs": { "docs": {
"title": "Documentação de Ajuda" "title": "Documentação de Ajuda"
@ -280,7 +379,9 @@
"description": "Falha ao renderizar a fórmula, por favor verifique se o formato da fórmula está correto", "description": "Falha ao renderizar a fórmula, por favor verifique se o formato da fórmula está correto",
"title": "Erro de Renderização" "title": "Erro de Renderização"
}, },
"user_message_not_found": "Não foi possível encontrar a mensagem original do usuário" "user_message_not_found": "Não foi possível encontrar a mensagem original do usuário",
"unknown": "Erro desconhecido",
"pause_placeholder": "Interrompido"
}, },
"export": { "export": {
"assistant": "Assistente", "assistant": "Assistente",
@ -393,7 +494,11 @@
"topN_tooltip": "Número de resultados correspondentes retornados, quanto maior o valor, mais resultados correspondentes, mas mais tokens são consumidos", "topN_tooltip": "Número de resultados correspondentes retornados, quanto maior o valor, mais resultados correspondentes, mas mais tokens são consumidos",
"url_added": "URL adicionada", "url_added": "URL adicionada",
"url_placeholder": "Digite a URL, várias URLs separadas por enter", "url_placeholder": "Digite a URL, várias URLs separadas por enter",
"urls": "URLs" "urls": "URLs",
"dimensions": "Dimensão de incorporação",
"dimensions_size_tooltip": "Tamanho da dimensão de incorporação, quanto maior o valor, maior a dimensão de incorporação, mas também maior o consumo de tokens",
"dimensions_size_placeholder": "Valor padrão (não recomendado alterar)",
"dimensions_size_too_large": "A dimensão de incorporação não pode exceder o limite do contexto do modelo ({{max_context}})"
}, },
"languages": { "languages": {
"arabic": "Árabe", "arabic": "Árabe",
@ -505,20 +610,63 @@
"completed": "Completo", "completed": "Completo",
"invoking": "Em execução", "invoking": "Em execução",
"raw": "Bruto", "raw": "Bruto",
"preview": "Pré-visualização" "preview": "Pré-visualização",
"error": "Ocorreu um erro"
}, },
"topic.added": "Tópico adicionado com sucesso", "topic.added": "Tópico adicionado com sucesso",
"upgrade.success.button": "Reiniciar", "upgrade.success.button": "Reiniciar",
"upgrade.success.content": "Reinicie para concluir a atualização", "upgrade.success.content": "Reinicie para concluir a atualização",
"upgrade.success.title": "Atualização bem-sucedida", "upgrade.success.title": "Atualização bem-sucedida",
"warn.notion.exporting": "Exportando para Notion, não solicite novamente a exportação!", "warn.notion.exporting": "Exportando para Notion, não solicite novamente a exportação!",
"warning.rate.limit": "Envio muito frequente, aguarde {{seconds}} segundos antes de tentar novamente" "warning.rate.limit": "Envio muito frequente, aguarde {{seconds}} segundos antes de tentar novamente",
"agents": {
"imported": "Importado com sucesso",
"import.error": "Falha na importação"
},
"citation": "{{count}} conteúdo(s) citado(s)",
"error.invalid.nutstore": "Configuração inválida do Nutstore",
"error.invalid.nutstore_token": "Token do Nutstore inválido",
"processing": "Processando...",
"error.siyuan.export": "Falha ao exportar nota do Siyuan, verifique o estado da conexão e confira a configuração no documento",
"error.siyuan.no_config": "Endereço da API ou token do Siyuan não configurado",
"success.siyuan.export": "Exportado para o Siyuan com sucesso",
"warn.yuque.exporting": "Exportando para Yuque, por favor não solicite a exportação novamente!",
"warn.siyuan.exporting": "Exportando para o Siyuan, por favor não solicite a exportação novamente!",
"download.success": "Download bem-sucedido",
"download.failed": "Falha no download"
}, },
"minapp": { "minapp": {
"sidebar.add.title": "Adicionar à barra lateral", "title": "Pequeno aplicativo",
"sidebar.remove.title": "Remover da barra lateral", "popup": {
"sidebar.hide.title": "Ocultar aplicativo", "refresh": "Atualizar",
"title": "Pequeno aplicativo" "close": "Fechar aplicativo",
"minimize": "Minimizar aplicativo",
"devtools": "Ferramentas de Desenvolvedor",
"openExternal": "Abrir no navegador",
"rightclick_copyurl": "Copiar URL com botão direito",
"open_link_external_on": "Atual: Abrir links no navegador",
"open_link_external_off": "Atual: Abrir links em janela padrão"
},
"sidebar": {
"add": {
"title": "Adicionar à barra lateral"
},
"remove": {
"title": "Remover da barra lateral"
},
"remove_custom": {
"title": "Excluir aplicativo personalizado"
},
"hide": {
"title": "Ocultar"
},
"close": {
"title": "Fechar"
},
"closeall": {
"title": "Fechar Tudo"
}
}
}, },
"miniwindow": { "miniwindow": {
"clipboard": { "clipboard": {
@ -534,13 +682,17 @@
"copy_last_message": "Pressione C para copiar", "copy_last_message": "Pressione C para copiar",
"esc": "Pressione ESC {{action}}", "esc": "Pressione ESC {{action}}",
"esc_back": "Voltar", "esc_back": "Voltar",
"esc_close": "Fechar janela" "esc_close": "Fechar janela",
"backspace_clear": "Pressione Backspace para limpar"
}, },
"input": { "input": {
"placeholder": { "placeholder": {
"empty": "Pergunte a {{model}} para obter ajuda...", "empty": "Pergunte a {{model}} para obter ajuda...",
"title": "O que você quer fazer com o texto abaixo" "title": "O que você quer fazer com o texto abaixo"
} }
},
"tooltip": {
"pin": "Fixar na frente"
} }
}, },
"models": { "models": {
@ -577,7 +729,9 @@
"free": "Grátis", "free": "Grátis",
"rerank": "Reclassificar", "rerank": "Reclassificar",
"websearch": "Procurar na web" "websearch": "Procurar na web"
} },
"rerank_model_not_support_provider": "Atualmente o modelo de reclassificação não suporta este provedor ({{provider}})",
"enable_tool_use": "Chamada de ferramentas"
}, },
"navbar": { "navbar": {
"expand": "Expandir caixa de diálogo", "expand": "Expandir caixa de diálogo",
@ -609,7 +763,59 @@
"regenerate.confirm": "Isso substituirá as imagens já geradas, deseja continuar?", "regenerate.confirm": "Isso substituirá as imagens já geradas, deseja continuar?",
"seed": "Semente Aleatória", "seed": "Semente Aleatória",
"seed_tip": "A mesma semente e palavra-chave podem gerar imagens semelhantes", "seed_tip": "A mesma semente e palavra-chave podem gerar imagens semelhantes",
"title": "Imagem" "title": "Imagem",
"mode": {
"generate": "Gerar imagem",
"edit": "Editar",
"remix": "Misturar",
"upscale": "Aumentar"
},
"generate": {
"model_tip": "Versão do modelo: V2 é o modelo mais recente da interface, V2A é o modelo rápido, V_1 é o modelo de primeira geração e _TURBO é a versão acelerada",
"number_images_tip": "Número de imagens geradas por vez",
"seed_tip": "Controla a aleatoriedade na geração das imagens, usado para reproduzir resultados idênticos",
"negative_prompt_tip": "Descreve elementos que você não deseja ver nas imagens; suportado apenas nas versões V_1, V_1_TURBO, V_2 e V_2_TURBO",
"magic_prompt_option_tip": "Otimização inteligente do prompt para melhorar os resultados da geração",
"style_type_tip": "Estilo de geração da imagem, aplicável apenas às versões V_2 e superiores"
},
"edit": {
"image_file": "Imagem editada",
"model_tip": "Edição localizada apenas suporta as versões V_2 e V_2_TURBO",
"number_images_tip": "Número de resultados da edição gerados",
"style_type_tip": "Estilo da imagem editada, disponível apenas para a versão V_2 ou superior",
"seed_tip": "Controla a aleatoriedade do resultado da edição",
"magic_prompt_option_tip": "Otimização inteligente da palavra-chave de edição"
},
"remix": {
"model_tip": "Selecione a versão do modelo de IA para reutilização",
"image_file": "Imagem de referência",
"image_weight": "Peso da imagem de referência",
"image_weight_tip": "Ajuste o impacto da imagem de referência",
"number_images_tip": "Número de resultados de remix gerados",
"seed_tip": "Controla a aleatoriedade dos resultados do remix",
"style_type_tip": "Estilo da imagem após o remix, aplicável apenas às versões V_2 ou superiores",
"negative_prompt_tip": "Descreva elementos que não devem aparecer nos resultados do remix",
"magic_prompt_option_tip": "Otimização inteligente das palavras-chave do remix"
},
"upscale": {
"image_file": "Imagem que precisa ser ampliada",
"resemblance": "Similaridade",
"resemblance_tip": "Controla o nível de semelhança entre o resultado ampliado e a imagem original",
"detail": "Detalhe",
"detail_tip": "Controla o grau de realce dos detalhes na imagem ampliada",
"number_images_tip": "Número de resultados de ampliação gerados",
"seed_tip": "Controla a aleatoriedade do resultado de ampliação",
"magic_prompt_option_tip": "Otimização inteligente da dica de ampliação"
},
"magic_prompt_option": "Aprimoramento de Prompt",
"model": "Versão",
"aspect_ratio": "Proporção da Imagem",
"style_type": "Estilo",
"learn_more": "Saiba Mais",
"prompt_placeholder_edit": "Digite sua descrição da imagem, use aspas \"duplas\" para desenho textual",
"proxy_required": "Atualmente é necessário ativar um proxy para visualizar as imagens geradas, no futuro será suportada a conexão direta dentro do país",
"image_file_required": "Por favor, faça o upload da imagem primeiro",
"image_file_retry": "Por favor, faça o upload novamente da imagem"
}, },
"plantuml": { "plantuml": {
"download": { "download": {
@ -672,7 +878,9 @@
"xirang": "XiRang do Nuvem Telecom", "xirang": "XiRang do Nuvem Telecom",
"yi": "ZeroUmTudo", "yi": "ZeroUmTudo",
"zhinao": "360 Inteligência Artificial", "zhinao": "360 Inteligência Artificial",
"zhipu": "ZhiPu IA" "zhipu": "ZhiPu IA",
"voyageai": "Voyage AI",
"qiniu": "Qiniu Cloud"
}, },
"restore": { "restore": {
"confirm": "Tem certeza de que deseja restaurar os dados?", "confirm": "Tem certeza de que deseja restaurar os dados?",
@ -714,7 +922,6 @@
"advanced.title": "Configurações avançadas", "advanced.title": "Configurações avançadas",
"assistant": "Assistente padrão", "assistant": "Assistente padrão",
"assistant.model_params": "Parâmetros do modelo", "assistant.model_params": "Parâmetros do modelo",
"assistant.show.icon": "Mostrar ícone do modelo",
"assistant.title": "Assistente padrão", "assistant.title": "Assistente padrão",
"data": { "data": {
"app_data": "Dados do aplicativo", "app_data": "Dados do aplicativo",
@ -780,13 +987,13 @@
"notion.split_size_placeholder": "Insira o limite de blocos por página (padrão 90)", "notion.split_size_placeholder": "Insira o limite de blocos por página (padrão 90)",
"notion.title": "Configurações do Notion", "notion.title": "Configurações do Notion",
"obsidian": { "obsidian": {
"folder": "Pasta",
"folder_placeholder": "Insira o nome da pasta",
"tags": "Tags Globais",
"tags_placeholder": "Insira o nome da tag, use vírgulas para separar múltiplas tags, o Obsidian não permite números puros",
"title": "Configuração do Obsidian", "title": "Configuração do Obsidian",
"vault": "Cofre", "default_vault": "Repositório Obsidian padrão",
"vault_placeholder": "Insira o nome do cofre" "default_vault_placeholder": "Selecione o repositório Obsidian padrão",
"default_vault_loading": "Obtendo repositório Obsidian...",
"default_vault_no_vaults": "Nenhum repositório Obsidian encontrado",
"default_vault_fetch_error": "Falha ao obter o repositório Obsidian",
"default_vault_export_failed": "Falha na exportação"
}, },
"title": "Configurações de dados", "title": "Configurações de dados",
"webdav": { "webdav": {
@ -818,7 +1025,26 @@
"title": "WebDAV", "title": "WebDAV",
"user": "Nome de usuário WebDAV", "user": "Nome de usuário WebDAV",
"maxBackups": "Número máximo de backups", "maxBackups": "Número máximo de backups",
"maxBackups.unlimited": "Sem limite" "maxBackups.unlimited": "Sem limite",
"backup.manager.title": "Gerenciamento de Dados de Backup",
"backup.manager.refresh": "Atualizar",
"backup.manager.delete.selected": "Excluir Selecionado",
"backup.manager.delete.text": "Excluir",
"backup.manager.restore.text": "Restaurar",
"backup.manager.restore.success": "Restauração bem-sucedida, o aplicativo será atualizado em alguns segundos",
"backup.manager.restore.error": "Falha na restauração",
"backup.manager.delete.confirm.title": "Confirmar Exclusão",
"backup.manager.delete.confirm.single": "Tem certeza de que deseja excluir o arquivo de backup \"{{fileName}}\"? Esta ação não pode ser desfeita.",
"backup.manager.delete.confirm.multiple": "Tem certeza de que deseja excluir os {{count}} arquivos de backup selecionados? Esta ação não pode ser desfeita.",
"backup.manager.delete.success.single": "Exclusão bem-sucedida",
"backup.manager.delete.success.multiple": "{{count}} arquivos de backup excluídos com sucesso",
"backup.manager.delete.error": "Falha ao excluir",
"backup.manager.fetch.error": "Falha ao obter arquivos de backup",
"backup.manager.select.files.delete": "Selecione os arquivos de backup que deseja excluir",
"backup.manager.columns.fileName": "Nome do Arquivo",
"backup.manager.columns.modifiedTime": "Data de Modificação",
"backup.manager.columns.size": "Tamanho",
"backup.manager.columns.actions": "Ações"
}, },
"yuque": { "yuque": {
"check": { "check": {
@ -834,16 +1060,73 @@
"title": "Configuração do Yuque", "title": "Configuração do Yuque",
"token": "Token do Yuque", "token": "Token do Yuque",
"token_placeholder": "Insira o Token do Yuque" "token_placeholder": "Insira o Token do Yuque"
} },
"export_menu": {
"title": "Exportar Configurações do Menu",
"image": "Exportar como Imagem",
"markdown": "Exportar como Markdown",
"markdown_reason": "Exportar como Markdown (incluindo pensamentos)",
"notion": "Exportar para Notion",
"yuque": "Exportar para Yuque",
"obsidian": "Exportar para Obsidian",
"siyuan": "Exportar para Siyuan Notes",
"joplin": "Exportar para Joplin",
"docx": "Exportar como Word"
},
"siyuan": {
"check": {
"title": "Detecção de Conexão",
"button": "Detectar",
"empty_config": "Por favor, preencha o endereço da API e o token",
"success": "Conexão bem-sucedida",
"fail": "Falha na conexão, verifique o endereço da API e o token",
"error": "Erro na conexão, verifique a conexão de rede"
},
"title": "Configuração do Siyuan Notebook",
"api_url": "Endereço da API",
"api_url_placeholder": "Exemplo: http://127.0.0.1:6806",
"token": "Token da API",
"token.help": "Obtenha em Siyuan Notebook -> Configurações -> Sobre",
"token_placeholder": "Por favor, insira o token do Siyuan Notebook",
"box_id": "ID do Caderno",
"box_id_placeholder": "Por favor, insira o ID do caderno",
"root_path": "Caminho Raiz do Documento",
"root_path_placeholder": "Exemplo: /CherryStudio"
},
"nutstore": {
"title": "Configuração do Nutstore",
"isLogin": "Logado",
"notLogin": "Não Logado",
"login.button": "Entrar",
"logout.button": "Sair",
"logout.title": "Tem certeza de que deseja sair da conta do Nutstore?",
"logout.content": "Após sair, não será possível fazer backup ou restaurar dados do Nutstore",
"checkConnection.name": "Verificar Conexão",
"checkConnection.success": "Conectado ao Nutstore",
"checkConnection.fail": "Falha na conexão com o Nutstore",
"username": "Nome de usuário do Nutstore",
"path": "Caminho de armazenamento do Nutstore",
"path.placeholder": "Por favor, insira o caminho de armazenamento do Nutstore",
"backup.button": "Fazer backup para o Nutstore",
"restore.button": "Restaurar do Nutstore",
"pathSelector.title": "Caminho de armazenamento do Nutstore",
"pathSelector.return": "Voltar",
"pathSelector.currentPath": "Caminho atual",
"new_folder.button.confirm": "Confirmar",
"new_folder.button.cancel": "Cancelar",
"new_folder.button": "Nova Pasta"
},
"divider.basic": "Configurações Básicas",
"divider.cloud_storage": "Configurações de Armazenamento em Nuvem",
"divider.export_settings": "Configurações de Exportação",
"divider.third_party": "Conexões de Terceiros",
"message_title.use_topic_naming.title": "Usar modelo de nomeação por tópico para criar títulos das mensagens exportadas",
"message_title.use_topic_naming.help": "Ativando esta opção, será usado um modelo de nomeação por tópico para criar os títulos das mensagens exportadas. Esta configuração também afetará todas as formas de exportação feitas por meio de Markdown."
}, },
"display.assistant.title": "Configurações do assistente", "display.assistant.title": "Configurações do assistente",
"display.custom.css": "CSS personalizado", "display.custom.css": "CSS personalizado",
"display.custom.css.cherrycss": "Obter do cherrycss.com", "display.custom.css.cherrycss": "Obter do cherrycss.com",
"display.custom.css.placeholder": "/* Escreva seu CSS personalizado aqui */", "display.custom.css.placeholder": "/* Escreva seu CSS personalizado aqui */",
"display.minApp.disabled": "Aplicativos ocultos",
"display.minApp.empty": "Arraste os aplicativos que deseja ocultar da esquerda para cá",
"display.minApp.title": "Configurações de exibição de aplicativos",
"display.minApp.visible": "Aplicativos visíveis",
"display.sidebar.chat.hiddenMessage": "O assistente é uma funcionalidade básica e não pode ser ocultada", "display.sidebar.chat.hiddenMessage": "O assistente é uma funcionalidade básica e não pode ser ocultada",
"display.sidebar.disabled": "Ícones ocultos", "display.sidebar.disabled": "Ícones ocultos",
"display.sidebar.empty": "Arraste as funcionalidades que deseja ocultar da esquerda para cá", "display.sidebar.empty": "Arraste as funcionalidades que deseja ocultar da esquerda para cá",
@ -864,7 +1147,6 @@
"general.display.title": "Configurações de exibição", "general.display.title": "Configurações de exibição",
"general.emoji_picker": "Seletor de emojis", "general.emoji_picker": "Seletor de emojis",
"general.image_upload": "Carregar imagem", "general.image_upload": "Carregar imagem",
"general.manually_check_update.title": "Desativar verificação de atualização",
"general.reset.button": "Redefinir", "general.reset.button": "Redefinir",
"general.reset.title": "Redefinir dados", "general.reset.title": "Redefinir dados",
"general.restore.button": "Restaurar", "general.restore.button": "Restaurar",
@ -930,11 +1212,94 @@
"serverPlural": "Servidores", "serverPlural": "Servidores",
"serverSingular": "Servidor", "serverSingular": "Servidor",
"title": "Servidores MCP", "title": "Servidores MCP",
"toggleError": "Falha ao alternar",
"type": "Tipo", "type": "Tipo",
"updateError": "Falha ao atualizar servidor", "updateError": "Falha ao atualizar servidor",
"updateSuccess": "Servidor atualizado com sucesso", "updateSuccess": "Servidor atualizado com sucesso",
"url": "URL" "url": "URL",
"errors": {
"32000": "Falha ao iniciar o servidor MCP, verifique se todos os parâmetros foram preenchidos corretamente conforme o tutorial"
},
"tabs": {
"general": "Geral",
"description": "Descrição",
"tools": "Ferramentas",
"prompts": "Prompts",
"resources": "Recursos"
},
"tools": {
"inputSchema": "Esquema de Entrada",
"availableTools": "Ferramentas Disponíveis",
"noToolsAvailable": "Nenhuma Ferramenta Disponível",
"loadError": "Falha ao Obter Ferramentas"
},
"prompts": {
"availablePrompts": "Dicas disponíveis",
"noPromptsAvailable": "Nenhuma dica disponível",
"arguments": "Argumentos",
"requiredField": "Campo obrigatório",
"genericError": "Erro ao buscar dicas",
"loadError": "Falha ao carregar dicas"
},
"resources": {
"noResourcesAvailable": "Nenhum recurso disponível",
"availableResources": "Recursos disponíveis",
"uri": "URI",
"mimeType": "Tipo MIME",
"size": "Tamanho",
"blob": "Dados binários",
"blobInvisible": "Ocultar dados binários",
"text": "Texto"
},
"types": {
"inMemory": "Integrado",
"sse": "SSE",
"streamableHttp": "Streaming",
"stdio": "STDIO"
},
"sync": {
"title": "Sincronizar Servidor",
"selectProvider": "Selecione o provedor:",
"discoverMcpServers": "Descobrir servidores MCP",
"discoverMcpServersDescription": "Acesse a plataforma para descobrir servidores MCP disponíveis",
"getToken": "Obter token de API",
"getTokenDescription": "Obtenha um token de API pessoal da sua conta",
"setToken": "Digite seu token",
"tokenRequired": "Token de API é obrigatório",
"tokenPlaceholder": "Digite o token de API aqui",
"button": "Sincronizar",
"error": "Erro ao sincronizar servidor MCP",
"success": "Servidor MCP sincronizado com sucesso",
"unauthorized": "Sincronização não autorizada",
"noServersAvailable": "Nenhum servidor MCP disponível"
},
"sse": "Eventos do Servidor (sse)",
"streamableHttp": "HTTP Transmitido em Fluxo (streamableHttp)",
"stdio": "Entrada/Saída Padrão (stdio)",
"inMemory": "Na Memória",
"headers": "Cabeçalhos da Requisição",
"headersTooltip": "Cabeçalhos HTTP personalizados para as requisições",
"searchNpx": "Buscar MCP",
"newServer": "Servidor MCP",
"startError": "Falha ao Iniciar",
"editMcpJson": "Editar Configuração MCP",
"installHelp": "Obter Ajuda com a Instalação",
"deleteServer": "Excluir Servidor",
"deleteServerConfirm": "Tem certeza de que deseja excluir este servidor?",
"registry": "Fonte de Gerenciamento de Pacotes",
"registryTooltip": "Selecione uma fonte alternativa para instalar pacotes, caso tenha problemas de rede com a fonte padrão.",
"registryDefault": "Padrão",
"not_support": "Modelo Não Suportado",
"user": "Usuário",
"system": "Sistema",
"timeout": "Tempo Limite",
"timeoutTooltip": "Tempo limite (em segundos) para as requisições deste servidor; o padrão é 60 segundos",
"provider": "Fornecedor",
"providerUrl": "URL do Fornecedor",
"logoUrl": "URL do Logotipo",
"tags": "Etiquetas",
"tagsPlaceholder": "Digite as etiquetas",
"providerPlaceholder": "Nome do Fornecedor",
"advancedSettings": "Configurações Avançadas"
}, },
"messages.divider": "Divisor de mensagens", "messages.divider": "Divisor de mensagens",
"messages.grid_columns": "Número de colunas da grade de mensagens", "messages.grid_columns": "Número de colunas da grade de mensagens",
@ -1046,13 +1411,29 @@
"docs_more_details": "Obter mais detalhes", "docs_more_details": "Obter mais detalhes",
"get_api_key": "Clique aqui para obter a chave", "get_api_key": "Clique aqui para obter a chave",
"is_not_support_array_content": "Ativar modo compatível", "is_not_support_array_content": "Ativar modo compatível",
"no_models": "Por favor, adicione um modelo antes de verificar a conexão da API",
"not_checked": "Não verificado", "not_checked": "Não verificado",
"remove_duplicate_keys": "Remover chaves duplicadas", "remove_duplicate_keys": "Remover chaves duplicadas",
"remove_invalid_keys": "Remover chaves inválidas", "remove_invalid_keys": "Remover chaves inválidas",
"search": "Procurar plataforma de modelos...", "search": "Procurar plataforma de modelos...",
"search_placeholder": "Procurar ID ou nome do modelo", "search_placeholder": "Procurar ID ou nome do modelo",
"title": "Serviços de Modelos" "title": "Serviços de Modelos",
"oauth": {
"button": "Entrar com a conta {{provider}}",
"description": "Este serviço é fornecido por <website>{{provider}}</website>",
"official_website": "Site Oficial"
},
"notes": {
"title": "Observação do Modelo",
"placeholder": "Por favor, insira o conteúdo no formato Markdown...",
"markdown_editor_default_value": "Área de Visualização"
},
"basic_auth": "Autenticação HTTP",
"basic_auth.tip": "Aplica-se a instâncias implantadas por meio de servidor (consulte a documentação). Atualmente, apenas o esquema Basic é suportado (RFC7617).",
"basic_auth.user_name": "Nome de usuário",
"basic_auth.user_name.tip": "Deixe em branco para desativar",
"basic_auth.password": "Senha",
"bills": "Contas",
"no_models_for_check": "Não há modelos disponíveis para verificação (por exemplo, modelos de conversa)"
}, },
"proxy": { "proxy": {
"mode": { "mode": {
@ -1129,8 +1510,111 @@
"description": "O Tavily é um mecanismo de busca projetado especificamente para agentes de IA, oferecendo resultados em tempo real, precisos, sugestões inteligentes de consulta e capacidades de pesquisa aprofundada", "description": "O Tavily é um mecanismo de busca projetado especificamente para agentes de IA, oferecendo resultados em tempo real, precisos, sugestões inteligentes de consulta e capacidades de pesquisa aprofundada",
"title": "Tavily" "title": "Tavily"
}, },
"title": "Pesquisa na Web" "title": "Pesquisa na Web",
} "overwrite": "Substituir provedor de pesquisa",
"overwrite_tooltip": "Forçar o uso do provedor de pesquisa em vez do modelo de linguagem grande para pesquisas",
"subscribe": "Assinar lista negra",
"subscribe_update": "Atualizar agora",
"subscribe_add": "Adicionar assinatura",
"subscribe_url": "Endereço da fonte de assinatura",
"subscribe_name": "Nome alternativo",
"subscribe_name.placeholder": "Nome alternativo usado quando a fonte assinada não tem nome",
"subscribe_add_success": "Fonte de assinatura adicionada com sucesso!",
"subscribe_delete": "Excluir fonte de assinatura",
"apikey": "Chave API",
"free": "Grátis",
"content_limit": "Limite de comprimento do conteúdo",
"content_limit_tooltip": "Limita o comprimento do conteúdo nos resultados da pesquisa; conteúdo excedente será truncado"
},
"miniapps": {
"open_link_external": {
"title": "Abrir link em nova janela do navegador"
},
"custom": {
"title": "Aplicativo Personalizado",
"edit_title": "Editar Aplicativo Personalizado",
"save_success": "Aplicativo personalizado salvo com sucesso.",
"save_error": "Falha ao salvar o aplicativo personalizado.",
"remove_success": "Aplicativo personalizado excluído com sucesso.",
"remove_error": "Falha ao excluir o aplicativo personalizado.",
"logo_upload_success": "Logo enviada com sucesso.",
"logo_upload_error": "Falha no envio da Logo.",
"id": "ID",
"id_error": "A ID é obrigatória.",
"id_placeholder": "Digite a ID",
"name": "Nome",
"name_error": "O nome é obrigatório.",
"name_placeholder": "Digite o nome",
"url": "URL",
"url_error": "A URL é obrigatória.",
"url_placeholder": "Digite a URL",
"logo": "Logo",
"logo_url": "URL da Logo",
"logo_file": "Enviar Arquivo da Logo",
"logo_url_label": "URL da Logo",
"logo_url_placeholder": "Digite a URL da Logo",
"logo_upload_label": "Enviar Logo",
"logo_upload_button": "Enviar",
"save": "Salvar",
"edit_description": "Edite aqui as configurações do aplicativo personalizado. Cada aplicativo deve conter os campos id, name, url e logo.",
"placeholder": "Digite a configuração do aplicativo personalizado (formato JSON)",
"duplicate_ids": "IDs duplicadas encontradas: {{ids}}",
"conflicting_ids": "Conflito com IDs padrão: {{ids}}"
},
"title": "Configurações do Mini Aplicativo",
"disabled": "Mini Aplicativos Ocultos",
"empty": "Arraste para cá os mini aplicativos que deseja ocultar",
"visible": "Mini Aplicativos Visíveis",
"cache_settings": "Configurações de Cache",
"cache_title": "Quantidade de Mini Aplicativos no Cache",
"cache_description": "Defina o número máximo de mini aplicativos que permanecerão ativos simultaneamente",
"reset_tooltip": "Redefinir para os valores padrão",
"display_title": "Configurações de Exibição dos Mini Aplicativos",
"sidebar_title": "Exibição de Mini Aplicativos Ativos na Barra Lateral",
"sidebar_description": "Defina se os mini aplicativos ativos serão exibidos na barra lateral",
"cache_change_notice": "As alterações entrarão em vigor após a abertura ou remoção dos mini aplicativos até atingir o número definido"
},
"quickPhrase": {
"title": "Frases Rápidas",
"add": "Adicionar Frase",
"edit": "Editar Frase",
"titleLabel": "Título",
"contentLabel": "Conteúdo",
"titlePlaceholder": "Por favor, insira o título da frase",
"contentPlaceholder": "Por favor, insira o conteúdo da frase. É permitido usar variáveis, e em seguida pressionar a tecla Tab para localizar rapidamente as variáveis e editá-las. Por exemplo:\\nPlaneje uma rota de ${from} para ${to} e envie para ${email}.",
"delete": "Excluir Frase",
"deleteConfirm": "A frase excluída não poderá ser recuperada. Deseja continuar?",
"locationLabel": "Adicionar Localização",
"global": "Frase Global",
"assistant": "Frase do Assistente"
},
"quickPanel": {
"title": "Menu de Atalho",
"close": "Fechar",
"select": "Selecionar",
"page": "Página",
"confirm": "Confirmar",
"back": "Voltar",
"forward": "Avançar",
"multiple": "Múltipla Seleção"
},
"privacy": {
"title": "Configurações de Privacidade",
"enable_privacy_mode": "Enviar relatórios de erro e estatísticas de forma anônima"
},
"assistant.icon.type": "Tipo de ícone do modelo",
"assistant.icon.type.model": "Ícone do modelo",
"assistant.icon.type.emoji": "Emoji",
"assistant.icon.type.none": "Não mostrar",
"general.auto_check_update.title": "Atualização automática",
"input.show_translate_confirm": "Mostrar diálogo de confirmação de tradução",
"messages.prompt": "Exibir palavra-chave",
"messages.input.enable_quick_triggers": "Ativar menu rápido com '/' e '@'",
"messages.input.enable_delete_model": "Ativar tecla de exclusão para remover modelos/anexos inseridos",
"messages.math_engine.none": "Nenhum",
"models.manage.add_listed": "Adicionar modelo da lista",
"models.manage.remove_listed": "Remover modelo da lista",
"zoom.title": "Zoom da página"
}, },
"translate": { "translate": {
"any.language": "qualquer idioma", "any.language": "qualquer idioma",
@ -1155,7 +1639,10 @@
"scroll_sync.disable": "Desativar sincronização de rolagem", "scroll_sync.disable": "Desativar sincronização de rolagem",
"scroll_sync.enable": "Ativar sincronização de rolagem", "scroll_sync.enable": "Ativar sincronização de rolagem",
"title": "Tradução", "title": "Tradução",
"tooltip.newline": "Quebra de linha" "tooltip.newline": "Quebra de linha",
"menu": {
"description": "Traduzir o conteúdo da caixa de entrada atual"
}
}, },
"tray": { "tray": {
"quit": "Sair", "quit": "Sair",

View File

@ -43,14 +43,17 @@ const AgentCard: FC<Props> = ({ agent, onClick, activegroup, getLocalizedGroupNa
) )
const exportAgent = useCallback(async () => { const exportAgent = useCallback(async () => {
const result = { const result = [
{
name: agent.name, name: agent.name,
emoji: agent.emoji, emoji: agent.emoji,
group: agent.group, group: agent.group,
prompt: agent.prompt, prompt: agent.prompt,
description: agent.description, description: agent.description,
regularPhrases: agent.regularPhrases,
type: 'agent' type: 'agent'
} }
]
const resultStr = JSON.stringify(result, null, 2) const resultStr = JSON.stringify(result, null, 2)
@ -216,7 +219,6 @@ const HeaderInfoEmoji = styled.div`
border-radius: var(--list-item-border-radius); border-radius: var(--list-item-border-radius);
font-size: 26px; font-size: 26px;
line-height: 1; line-height: 1;
opacity: 0.8;
flex-shrink: 0; flex-shrink: 0;
opacity: 1; opacity: 1;
transition: opacity 0.2s ease; transition: opacity 0.2s ease;
@ -245,12 +247,12 @@ const AgentCardContainer = styled.div`
--shadow-color: rgba(0, 0, 0, 0.05); --shadow-color: rgba(0, 0, 0, 0.05);
box-shadow: box-shadow:
0 5px 7px -3px var(--shadow-color), 0 5px 7px -3px var(--color-border-soft),
0 2px 3px -4px var(--shadow-color); 0 2px 3px -4px var(--color-border-soft);
&:hover { &:hover {
box-shadow: box-shadow:
0 10px 15px -3px var(--shadow-color), 0 10px 15px -3px var(--color-border-soft),
0 4px 6px -4px var(--shadow-color); 0 4px 6px -4px var(--color-border-soft);
transform: translateY(-2px); transform: translateY(-2px);
${AgentCardHeaderInfoAction} ${HeaderInfoEmoji} { ${AgentCardHeaderInfoAction} ${HeaderInfoEmoji} {

View File

@ -64,7 +64,8 @@ const PopupContainer: React.FC<Props> = ({ resolve }) => {
type: 'agent', type: 'agent',
topics: [], topics: [],
messages: [], messages: [],
defaultModel: getDefaultModel() defaultModel: getDefaultModel(),
regularPhrases: agent.regularPhrases || []
} }
addAgent(newAgent) addAgent(newAgent)
} }

View File

@ -179,7 +179,8 @@ const App: FC<Props> = ({ app, onClick, size = 60, isLast }) => {
setIsModalVisible(false) setIsModalVisible(false)
setFileList([]) setFileList([])
}} }}
footer={null}> footer={null}
centered>
<Form form={form} onFinish={handleAddCustomApp} layout="vertical"> <Form form={form} onFinish={handleAddCustomApp} layout="vertical">
<Form.Item <Form.Item
name="id" name="id"

View File

@ -970,6 +970,7 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic, topic }) =
setInputValue={setText} setInputValue={setText}
resizeTextArea={resizeTextArea} resizeTextArea={resizeTextArea}
ToolbarButton={ToolbarButton} ToolbarButton={ToolbarButton}
assistantObj={assistant}
/> />
<Tooltip placement="top" title={t('chat.input.clear', { Command: cleanTopicShortcut })} arrow> <Tooltip placement="top" title={t('chat.input.clear', { Command: cleanTopicShortcut })} arrow>
<ToolbarButton type="text" onClick={clearTopic}> <ToolbarButton type="text" onClick={clearTopic}>

View File

@ -1,12 +1,15 @@
import { useQuickPanel } from '@renderer/components/QuickPanel' import { useQuickPanel } from '@renderer/components/QuickPanel'
import { QuickPanelListItem, QuickPanelOpenOptions } from '@renderer/components/QuickPanel/types' import { QuickPanelListItem, QuickPanelOpenOptions } from '@renderer/components/QuickPanel/types'
import { useAssistant } from '@renderer/hooks/useAssistant'
import QuickPhraseService from '@renderer/services/QuickPhraseService' import QuickPhraseService from '@renderer/services/QuickPhraseService'
import { useAppSelector } from '@renderer/store'
import { QuickPhrase } from '@renderer/types' import { QuickPhrase } from '@renderer/types'
import { Tooltip } from 'antd' import { Assistant } from '@renderer/types'
import { Plus, Zap } from 'lucide-react' import { Input, Modal, Radio, Space, Tooltip } from 'antd'
import { BotMessageSquare, Plus, Zap } from 'lucide-react'
import { memo, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react' import { memo, useCallback, useEffect, useImperativeHandle, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useNavigate } from 'react-router' import styled from 'styled-components'
export interface QuickPhrasesButtonRef { export interface QuickPhrasesButtonRef {
openQuickPanel: () => void openQuickPanel: () => void
@ -17,22 +20,37 @@ interface Props {
setInputValue: React.Dispatch<React.SetStateAction<string>> setInputValue: React.Dispatch<React.SetStateAction<string>>
resizeTextArea: () => void resizeTextArea: () => void
ToolbarButton: any ToolbarButton: any
assistantObj: Assistant
} }
const QuickPhrasesButton = ({ ref, setInputValue, resizeTextArea, ToolbarButton }: Props) => { const QuickPhrasesButton = ({ ref, setInputValue, resizeTextArea, ToolbarButton, assistantObj }: Props) => {
const [quickPhrasesList, setQuickPhrasesList] = useState<QuickPhrase[]>([]) const [quickPhrasesList, setQuickPhrasesList] = useState<QuickPhrase[]>([])
const [isModalOpen, setIsModalOpen] = useState(false)
const [formData, setFormData] = useState({ title: '', content: '', location: 'global' })
const { t } = useTranslation() const { t } = useTranslation()
const quickPanel = useQuickPanel() const quickPanel = useQuickPanel()
const activeAssistantId = useAppSelector(
(state) =>
state.assistants.assistants.find((a) => a.id === assistantObj.id)?.id || state.assistants.defaultAssistant.id
)
const { assistant, updateAssistant } = useAssistant(activeAssistantId)
const navigate = useNavigate() const loadQuickListPhrases = useCallback(
async (regularPhrases: QuickPhrase[] = []) => {
const phrases = await QuickPhraseService.getAll()
if (regularPhrases.length) {
setQuickPhrasesList([...regularPhrases, ...phrases])
return
}
const assistantPrompts = assistant.regularPhrases || []
setQuickPhrasesList([...assistantPrompts, ...phrases])
},
[assistant]
)
useEffect(() => { useEffect(() => {
const loadQuickListPhrases = async () => {
const phrases = await QuickPhraseService.getAll()
setQuickPhrasesList(phrases.reverse())
}
loadQuickListPhrases() loadQuickListPhrases()
}, []) }, [loadQuickListPhrases])
const handlePhraseSelect = useCallback( const handlePhraseSelect = useCallback(
(phrase: QuickPhrase) => { (phrase: QuickPhrase) => {
@ -56,20 +74,52 @@ const QuickPhrasesButton = ({ ref, setInputValue, resizeTextArea, ToolbarButton
[setInputValue, resizeTextArea] [setInputValue, resizeTextArea]
) )
const handleModalOk = async () => {
if (!formData.title.trim() || !formData.content.trim()) {
return
}
const updatedPrompts = [
...(assistant.regularPhrases || []),
{
id: crypto.randomUUID(),
title: formData.title,
content: formData.content,
createdAt: Date.now(),
updatedAt: Date.now()
}
]
if (formData.location === 'assistant') {
// 添加到助手的 regularPhrases
await updateAssistant({ ...assistant, regularPhrases: updatedPrompts })
} else {
// 添加到全局 Quick Phrases
await QuickPhraseService.add(formData)
}
setIsModalOpen(false)
setFormData({ title: '', content: '', location: 'global' })
if (formData.location === 'assistant') {
await loadQuickListPhrases(updatedPrompts)
return
}
await loadQuickListPhrases()
}
const phraseItems = useMemo(() => { const phraseItems = useMemo(() => {
const newList: QuickPanelListItem[] = quickPhrasesList.map((phrase) => ({ const newList: QuickPanelListItem[] = quickPhrasesList.map((phrase, index) => ({
label: phrase.title, label: phrase.title,
description: phrase.content, description: phrase.content,
icon: <Zap />, icon: index < (assistant.regularPhrases?.length || 0) ? <BotMessageSquare /> : <Zap />,
action: () => handlePhraseSelect(phrase) action: () => handlePhraseSelect(phrase)
})) }))
newList.push({ newList.push({
label: t('settings.quickPhrase.add') + '...', label: t('settings.quickPhrase.add') + '...',
icon: <Plus />, icon: <Plus />,
action: () => navigate('/settings/quickPhrase') action: () => setIsModalOpen(true)
}) })
return newList return newList
}, [quickPhrasesList, t, handlePhraseSelect, navigate]) }, [quickPhrasesList, t, handlePhraseSelect, assistant])
const quickPanelOpenOptions = useMemo<QuickPanelOpenOptions>( const quickPanelOpenOptions = useMemo<QuickPanelOpenOptions>(
() => ({ () => ({
@ -97,12 +147,70 @@ const QuickPhrasesButton = ({ ref, setInputValue, resizeTextArea, ToolbarButton
})) }))
return ( return (
<>
<Tooltip placement="top" title={t('settings.quickPhrase.title')} arrow> <Tooltip placement="top" title={t('settings.quickPhrase.title')} arrow>
<ToolbarButton type="text" onClick={handleOpenQuickPanel}> <ToolbarButton type="text" onClick={handleOpenQuickPanel}>
<Zap size={18} /> <Zap size={18} />
</ToolbarButton> </ToolbarButton>
</Tooltip> </Tooltip>
<Modal
title={t('settings.quickPhrase.add')}
open={isModalOpen}
onOk={handleModalOk}
onCancel={() => {
setIsModalOpen(false)
setFormData({ title: '', content: '', location: 'global' })
}}
width={520}
centered>
<Space direction="vertical" style={{ width: '100%' }} size="middle">
<div>
<Label>{t('settings.quickPhrase.titleLabel')}</Label>
<Input
placeholder={t('settings.quickPhrase.titlePlaceholder')}
value={formData.title}
onChange={(e) => setFormData({ ...formData, title: e.target.value })}
/>
</div>
<div>
<Label>{t('settings.quickPhrase.contentLabel')}</Label>
<Input.TextArea
placeholder={t('settings.quickPhrase.contentPlaceholder')}
value={formData.content}
onChange={(e) => setFormData({ ...formData, content: e.target.value })}
rows={6}
style={{ resize: 'none' }}
/>
</div>
<div>
<Label>{t('settings.quickPhrase.locationLabel', '添加位置')}</Label>
<Radio.Group
value={formData.location}
onChange={(e) => setFormData({ ...formData, location: e.target.value })}>
<Radio value="global">
<Zap size={20} style={{ paddingRight: '4px', verticalAlign: 'middle', paddingBottom: '3px' }} />
{t('settings.quickPhrase.global', '全局快速短语')}
</Radio>
<Radio value="assistant">
<BotMessageSquare
size={20}
style={{ paddingRight: '4px', verticalAlign: 'middle', paddingBottom: '3px' }}
/>
{t('settings.quickPhrase.assistant', '助手提示词')}
</Radio>
</Radio.Group>
</div>
</Space>
</Modal>
</>
) )
} }
const Label = styled.div`
font-size: 14px;
color: var(--color-text);
margin-bottom: 8px;
`
export default memo(QuickPhrasesButton) export default memo(QuickPhrasesButton)

View File

@ -43,6 +43,7 @@ const Mermaid: React.FC<Props> = ({ chart }) => {
useEffect(() => { useEffect(() => {
setTimeout(renderMermaidBase, 0) setTimeout(renderMermaidBase, 0)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []) }, [])
useEffect(() => { useEffect(() => {

View File

@ -347,7 +347,7 @@ const MessageMenubar: FC<Props> = (props) => {
].filter(Boolean) ].filter(Boolean)
} }
], ],
[message, messageContainerRef, onEdit, mainTextContent, onNewBranch, t, topic.name, exportMenuOptions] [message, messageContainerRef, isEditable, onEdit, mainTextContent, onNewBranch, t, topic.name, exportMenuOptions]
) )
const onRegenerate = async (e: React.MouseEvent | undefined) => { const onRegenerate = async (e: React.MouseEvent | undefined) => {

View File

@ -37,8 +37,8 @@ import {
setPasteLongTextThreshold, setPasteLongTextThreshold,
setRenderInputMessageAsMarkdown, setRenderInputMessageAsMarkdown,
setShowInputEstimatedTokens, setShowInputEstimatedTokens,
setShowPrompt,
setShowMessageDivider, setShowMessageDivider,
setShowPrompt,
setShowTranslateConfirm, setShowTranslateConfirm,
setThoughtAutoCollapse setThoughtAutoCollapse
} from '@renderer/store/settings' } from '@renderer/store/settings'

View File

@ -14,7 +14,7 @@ import { getErrorMessage } from '@renderer/utils/error'
import { Form, Input, Modal, Select, Slider } from 'antd' import { Form, Input, Modal, Select, Slider } from 'antd'
import { find, sortBy } from 'lodash' import { find, sortBy } from 'lodash'
import { nanoid } from 'nanoid' import { nanoid } from 'nanoid'
import { useRef, useState } from 'react' import { useMemo, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
interface ShowParams { interface ShowParams {
@ -40,33 +40,42 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
const { providers } = useProviders() const { providers } = useProviders()
const { addKnowledgeBase } = useKnowledgeBases() const { addKnowledgeBase } = useKnowledgeBases()
const allModels = providers const embeddingModels = useMemo(() => {
return providers
.map((p) => p.models) .map((p) => p.models)
.flat() .flat()
.filter((model) => isEmbeddingModel(model) && !isRerankModel(model)) .filter((model) => isEmbeddingModel(model))
}, [providers])
const rerankModels = providers const rerankModels = useMemo(() => {
return providers
.map((p) => p.models) .map((p) => p.models)
.flat() .flat()
.filter((model) => isRerankModel(model)) .filter((model) => isRerankModel(model))
}, [providers])
const nameInputRef = useRef<any>(null) const nameInputRef = useRef<any>(null)
const selectOptions = providers const embeddingSelectOptions = useMemo(() => {
console.log(providers)
return providers
.filter((p) => p.models.length > 0) .filter((p) => p.models.length > 0)
.map((p) => ({ .map((p) => ({
label: p.isSystem ? t(`provider.${p.id}`) : p.name, label: p.isSystem ? t(`provider.${p.id}`) : p.name,
title: p.name, title: p.name,
options: sortBy(p.models, 'name') options: sortBy(p.models, 'name')
.filter((model) => isEmbeddingModel(model) && !isRerankModel(model)) .filter((model) => isEmbeddingModel(model))
.map((m) => ({ .map((m) => ({
label: m.name, label: m.name,
value: getModelUniqId(m) value: getModelUniqId(m),
key: `${p.id}-${m.id}`
})) }))
})) }))
.filter((group) => group.options.length > 0) .filter((group) => group.options.length > 0)
}, [providers, t])
const rerankSelectOptions = providers const rerankSelectOptions = useMemo(() => {
return providers
.filter((p) => p.models.length > 0) .filter((p) => p.models.length > 0)
.filter((p) => !NOT_SUPPORTED_REANK_PROVIDERS.includes(p.id)) .filter((p) => !NOT_SUPPORTED_REANK_PROVIDERS.includes(p.id))
.map((p) => ({ .map((p) => ({
@ -80,19 +89,20 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
})) }))
})) }))
.filter((group) => group.options.length > 0) .filter((group) => group.options.length > 0)
}, [providers, t])
const onOk = async () => { const onOk = async () => {
try { try {
const values = await form.validateFields() const values = await form.validateFields()
const selectedModel = find(allModels, JSON.parse(values.model)) as Model const selectedEmbeddingModel = find(embeddingModels, JSON.parse(values.model)) as Model
const selectedRerankModel = values.rerankModel const selectedRerankModel = values.rerankModel
? (find(rerankModels, JSON.parse(values.rerankModel)) as Model) ? (find(rerankModels, JSON.parse(values.rerankModel)) as Model)
: undefined : undefined
if (selectedModel) { if (selectedEmbeddingModel) {
setLoading(true) setLoading(true)
const provider = providers.find((p) => p.id === selectedModel.provider) const provider = providers.find((p) => p.id === selectedEmbeddingModel.provider)
if (!provider) { if (!provider) {
return return
@ -102,7 +112,7 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
let dimensions = 0 let dimensions = 0
try { try {
dimensions = await aiProvider.getEmbeddingDimensions(selectedModel) dimensions = await aiProvider.getEmbeddingDimensions(selectedEmbeddingModel)
} catch (error) { } catch (error) {
console.error('Error getting embedding dimensions:', error) console.error('Error getting embedding dimensions:', error)
window.message.error(t('message.error.get_embedding_dimensions') + '\n' + getErrorMessage(error)) window.message.error(t('message.error.get_embedding_dimensions') + '\n' + getErrorMessage(error))
@ -113,7 +123,7 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
const newBase = { const newBase = {
id: nanoid(), id: nanoid(),
name: values.name, name: values.name,
model: selectedModel, model: selectedEmbeddingModel,
rerankModel: selectedRerankModel, rerankModel: selectedRerankModel,
dimensions, dimensions,
documentCount: values.documentCount || DEFAULT_KNOWLEDGE_DOCUMENT_COUNT, documentCount: values.documentCount || DEFAULT_KNOWLEDGE_DOCUMENT_COUNT,
@ -166,7 +176,7 @@ const PopupContainer: React.FC<Props> = ({ title, resolve }) => {
label={t('models.embedding_model')} label={t('models.embedding_model')}
tooltip={{ title: t('models.embedding_model_tooltip'), placement: 'right' }} tooltip={{ title: t('models.embedding_model_tooltip'), placement: 'right' }}
rules={[{ required: true, message: t('message.error.enter.model') }]}> rules={[{ required: true, message: t('message.error.enter.model') }]}>
<Select style={{ width: '100%' }} options={selectOptions} placeholder={t('settings.models.empty')} /> <Select style={{ width: '100%' }} options={embeddingSelectOptions} placeholder={t('settings.models.empty')} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item

View File

@ -381,7 +381,6 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
<SettingRow style={{ minHeight: 30 }}> <SettingRow style={{ minHeight: 30 }}>
<Label>{t('models.enable_tool_use')}</Label> <Label>{t('models.enable_tool_use')}</Label>
<Switch <Switch
size="small"
checked={enableToolUse} checked={enableToolUse}
onChange={(checked) => { onChange={(checked) => {
setEnableToolUse(checked) setEnableToolUse(checked)

View File

@ -0,0 +1,180 @@
import { DeleteOutlined, EditOutlined, ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons'
import DragableList from '@renderer/components/DragableList'
import FileItem from '@renderer/pages/files/FileItem'
import { Assistant, QuickPhrase } from '@renderer/types'
import { Button, Flex, Input, Modal, Popconfirm, Space } from 'antd'
import { FC, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import styled from 'styled-components'
import { v4 as uuidv4 } from 'uuid'
import { SettingContainer, SettingDivider, SettingGroup, SettingRow, SettingTitle } from '..'
const { TextArea } = Input
interface AssistantRegularPromptsSettingsProps {
assistant: Assistant
updateAssistant: (assistant: Assistant) => void
}
const AssistantRegularPromptsSettings: FC<AssistantRegularPromptsSettingsProps> = ({ assistant, updateAssistant }) => {
const { t } = useTranslation()
const [promptsList, setPromptsList] = useState<QuickPhrase[]>([])
const [isModalOpen, setIsModalOpen] = useState(false)
const [editingPrompt, setEditingPrompt] = useState<QuickPhrase | null>(null)
const [formData, setFormData] = useState({ title: '', content: '' })
const [dragging, setDragging] = useState(false)
useEffect(() => {
setPromptsList(assistant.regularPhrases || [])
}, [assistant.regularPhrases])
const handleAdd = () => {
setEditingPrompt(null)
setFormData({ title: '', content: '' })
setIsModalOpen(true)
}
const handleEdit = (prompt: QuickPhrase) => {
setEditingPrompt(prompt)
setFormData({ title: prompt.title, content: prompt.content })
setIsModalOpen(true)
}
const handleDelete = async (id: string) => {
const updatedPrompts = promptsList.filter((prompt) => prompt.id !== id)
setPromptsList(updatedPrompts)
updateAssistant({ ...assistant, regularPhrases: updatedPrompts })
}
const handleModalOk = async () => {
if (!formData.title.trim() || !formData.content.trim()) {
return
}
let updatedPrompts: QuickPhrase[]
if (editingPrompt) {
updatedPrompts = promptsList.map((prompt) =>
prompt.id === editingPrompt.id ? { ...prompt, ...formData } : prompt
)
} else {
const newPrompt: QuickPhrase = {
id: uuidv4(),
createdAt: Date.now(),
updatedAt: Date.now(),
...formData
}
updatedPrompts = [...promptsList, newPrompt]
}
setPromptsList(updatedPrompts)
updateAssistant({ ...assistant, regularPhrases: updatedPrompts })
setIsModalOpen(false)
}
const handleUpdateOrder = async (newPrompts: QuickPhrase[]) => {
setPromptsList(newPrompts)
updateAssistant({ ...assistant, regularPhrases: newPrompts })
}
const reversedPrompts = [...promptsList].reverse()
return (
<SettingContainer style={{ padding: 0, background: '#0000' }}>
<SettingGroup style={{ marginBottom: 0, padding: 0, border: 'none' }}>
<SettingTitle>
{t('assistants.settings.regular_phrases.title', 'Regular Prompts')}
<Button type="text" icon={<PlusOutlined />} onClick={handleAdd} />
</SettingTitle>
<SettingDivider />
<SettingRow>
<StyledPromptList>
<DragableList
list={reversedPrompts}
onUpdate={(newPrompts) => handleUpdateOrder([...newPrompts].reverse())}
style={{ paddingBottom: dragging ? '34px' : 0 }}
onDragStart={() => setDragging(true)}
onDragEnd={() => setDragging(false)}>
{(prompt) => (
<FileItem
key={prompt.id}
fileInfo={{
name: prompt.title,
ext: '.txt',
extra: prompt.content,
actions: (
<Flex gap={4} style={{ opacity: 0.6 }}>
<Button key="edit" type="text" icon={<EditOutlined />} onClick={() => handleEdit(prompt)} />
<Popconfirm
title={t('assistants.settings.regular_phrases.delete', 'Delete Prompt')}
description={t(
'assistants.settings.regular_phrases.deleteConfirm',
'Are you sure to delete this prompt?'
)}
okText={t('common.confirm')}
cancelText={t('common.cancel')}
onConfirm={() => handleDelete(prompt.id)}
icon={<ExclamationCircleOutlined style={{ color: 'red' }} />}>
<Button key="delete" type="text" danger icon={<DeleteOutlined />} />
</Popconfirm>
</Flex>
)
}}
/>
)}
</DragableList>
</StyledPromptList>
</SettingRow>
</SettingGroup>
<Modal
title={
editingPrompt
? t('assistants.settings.regular_phrases.edit', 'Edit Prompt')
: t('assistants.settings.regular_phrases.add', 'Add Prompt')
}
open={isModalOpen}
onOk={handleModalOk}
onCancel={() => setIsModalOpen(false)}
width={520}
centered>
<Space direction="vertical" style={{ width: '100%' }} size="middle">
<div>
<Label>{t('assistants.settings.regular_phrases.titleLabel', 'Title')}</Label>
<Input
placeholder={t('assistants.settings.regular_phrases.titlePlaceholder', 'Enter title')}
value={formData.title}
onChange={(e) => setFormData({ ...formData, title: e.target.value })}
/>
</div>
<div>
<Label>{t('assistants.settings.regular_phrases.contentLabel', 'Content')}</Label>
<TextArea
placeholder={t('assistants.settings.regular_phrases.contentPlaceholder', 'Enter content')}
value={formData.content}
onChange={(e) => setFormData({ ...formData, content: e.target.value })}
rows={6}
style={{ resize: 'none' }}
/>
</div>
</Space>
</Modal>
</SettingContainer>
)
}
const Label = styled.div`
font-size: 14px;
color: var(--color-text);
margin-bottom: 8px;
`
const StyledPromptList = styled.div`
width: 100%;
height: calc(100vh - 162px); // Adjusted height to match other settings pages
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 8px;
`
export default AssistantRegularPromptsSettings

View File

@ -14,13 +14,14 @@ import AssistantMCPSettings from './AssistantMCPSettings'
import AssistantMessagesSettings from './AssistantMessagesSettings' import AssistantMessagesSettings from './AssistantMessagesSettings'
import AssistantModelSettings from './AssistantModelSettings' import AssistantModelSettings from './AssistantModelSettings'
import AssistantPromptSettings from './AssistantPromptSettings' import AssistantPromptSettings from './AssistantPromptSettings'
import AssistantRegularPromptsSettings from './AssistantRegularPromptsSettings'
interface AssistantSettingPopupShowParams { interface AssistantSettingPopupShowParams {
assistant: Assistant assistant: Assistant
tab?: AssistantSettingPopupTab tab?: AssistantSettingPopupTab
} }
type AssistantSettingPopupTab = 'prompt' | 'model' | 'messages' | 'knowledge_base' | 'mcp' type AssistantSettingPopupTab = 'prompt' | 'model' | 'messages' | 'knowledge_base' | 'mcp' | 'regular_phrases'
interface Props extends AssistantSettingPopupShowParams { interface Props extends AssistantSettingPopupShowParams {
resolve: (assistant: Assistant) => void resolve: (assistant: Assistant) => void
@ -73,6 +74,10 @@ const AssistantSettingPopupContainer: React.FC<Props> = ({ resolve, tab, ...prop
{ {
key: 'mcp', key: 'mcp',
label: t('assistants.settings.mcp') label: t('assistants.settings.mcp')
},
{
key: 'regular_phrases',
label: t('assistants.settings.regular_phrases.title', 'Regular Prompts')
} }
].filter(Boolean) as { key: string; label: string }[] ].filter(Boolean) as { key: string; label: string }[]
@ -142,6 +147,9 @@ const AssistantSettingPopupContainer: React.FC<Props> = ({ resolve, tab, ...prop
updateAssistantSettings={updateAssistantSettings} updateAssistantSettings={updateAssistantSettings}
/> />
)} )}
{menu === 'regular_phrases' && (
<AssistantRegularPromptsSettings assistant={assistant} updateAssistant={updateAssistant} />
)}
</Settings> </Settings>
</HStack> </HStack>
</StyledModal> </StyledModal>

View File

@ -117,7 +117,8 @@ const QuickPhraseSettings: FC = () => {
open={isModalOpen} open={isModalOpen}
onOk={handleModalOk} onOk={handleModalOk}
onCancel={() => setIsModalOpen(false)} onCancel={() => setIsModalOpen(false)}
width={520}> width={520}
centered>
<Space direction="vertical" style={{ width: '100%' }} size="middle"> <Space direction="vertical" style={{ width: '100%' }} size="middle">
<div> <div>
<Label>{t('settings.quickPhrase.titleLabel')}</Label> <Label>{t('settings.quickPhrase.titleLabel')}</Label>

View File

@ -17,7 +17,8 @@ export function getDefaultAssistant(): Assistant {
prompt: '', prompt: '',
topics: [getDefaultTopic('default')], topics: [getDefaultTopic('default')],
messages: [], messages: [],
type: 'assistant' type: 'assistant',
regularPhrases: [] // Added regularPhrases
} }
} }
@ -171,7 +172,8 @@ export async function createAssistantFromAgent(agent: Agent) {
emoji: agent.emoji, emoji: agent.emoji,
topics: [topic], topics: [topic],
model: agent.defaultModel, model: agent.defaultModel,
type: 'assistant' type: 'assistant',
regularPhrases: agent.regularPhrases || [] // Ensured regularPhrases
} }
store.dispatch(addAssistant(assistant)) store.dispatch(addAssistant(assistant))

View File

@ -25,6 +25,7 @@ export type Assistant = {
enableGenerateImage?: boolean enableGenerateImage?: boolean
mcpServers?: MCPServer[] mcpServers?: MCPServer[]
knowledgeRecognition?: 'off' | 'on' knowledgeRecognition?: 'off' | 'on'
regularPhrases?: QuickPhrase[] // Added for regular phrase
} }
export type AssistantMessage = { export type AssistantMessage = {

View File

@ -12940,7 +12940,7 @@ __metadata:
"openai@patch:openai@npm%3A4.96.0#~/.yarn/patches/openai-npm-4.96.0-0665b05cb9.patch": "openai@patch:openai@npm%3A4.96.0#~/.yarn/patches/openai-npm-4.96.0-0665b05cb9.patch":
version: 4.96.0 version: 4.96.0
resolution: "openai@patch:openai@npm%3A4.96.0#~/.yarn/patches/openai-npm-4.96.0-0665b05cb9.patch::version=4.96.0&hash=17e659" resolution: "openai@patch:openai@npm%3A4.96.0#~/.yarn/patches/openai-npm-4.96.0-0665b05cb9.patch::version=4.96.0&hash=645779"
dependencies: dependencies:
"@types/node": "npm:^18.11.18" "@types/node": "npm:^18.11.18"
"@types/node-fetch": "npm:^2.6.4" "@types/node-fetch": "npm:^2.6.4"
@ -12959,7 +12959,7 @@ __metadata:
optional: true optional: true
bin: bin:
openai: bin/cli openai: bin/cli
checksum: 10c0/b1f6162017ede2e0c3338ca94ea0e0c6ababc39ef8abea9e1a04d747725cf6ca3fbd0e4682c231af03a6473228b25a16ce52aac03c3cc4feb302d03b9603e06b checksum: 10c0/8c16fcf1812294220eddd4616e298c2af87398acb479287b7565548c8c1979c6d5c487fb7a9c25b0ac59f778de74c23d94ce1a34362c49260ae7a14acf22abc2
languageName: node languageName: node
linkType: hard linkType: hard