diff --git a/backend/app/component/error_format.py b/backend/app/component/error_format.py index 38b4cb21f..e7afcd07b 100644 --- a/backend/app/component/error_format.py +++ b/backend/app/component/error_format.py @@ -12,10 +12,37 @@ # limitations under the License. # ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= +import ast import json import re +def _parse_dict(text: str) -> dict | None: + """Parse a dict string (JSON double-quotes or Python single-quotes).""" + for loader in (json.loads, ast.literal_eval): + try: + result = loader(text) + if isinstance(result, dict): + return result + except Exception: # nosec B112 + continue + return None + + +def _extract_from_dict(d: dict) -> tuple[str | None, str | None, dict]: + """Pull message / code / error_obj from an OpenAI-shaped dict.""" + err = d.get("error") or d + if not isinstance(err, dict): + return None, None, {} + error_obj = { + "message": err.get("message"), + "type": err.get("type"), + "param": err.get("param"), + "code": err.get("code"), + } + return err.get("message"), err.get("code"), error_obj + + def normalize_error_to_openai_format( exception: Exception, ) -> tuple[str, str | None, dict | None]: @@ -29,76 +56,50 @@ def normalize_error_to_openai_format( tuple: (message, error_code, error_object) """ raw_msg = str(exception) - error_obj = None - error_code = None - message = raw_msg - # Match "Error code: - {json}" + # 1) Structured attributes (OpenAI SDK exceptions expose .body) + body = getattr(exception, "body", None) + if isinstance(body, dict): + msg, code, obj = _extract_from_dict(body) + if msg: + return msg, code, obj + + # 2) Parse "Error code: - {dict}" from str(exception) m = re.search(r"Error code:\s*(\d+)\s*-\s*(\{.*\})", raw_msg, re.DOTALL) if m: - error_code = m.group(1) - try: - parsed = json.loads(m.group(2)) - err = parsed.get("error") or parsed - if isinstance(err, dict): - error_obj = { - "message": err.get("message"), - "type": err.get("type"), - "param": err.get("param"), - "code": err.get("code"), - } - if err.get("message"): - message = err.get("message") - if err.get("code"): - error_code = err.get("code") - except Exception: - pass + parsed = _parse_dict(m.group(2)) + if parsed: + msg, code, obj = _extract_from_dict(parsed) + if msg: + return msg, code or m.group(1), obj - # Heuristics if not parsed - if error_obj is None: - lower = raw_msg.lower() - if ( - "invalid_api_key" in lower - or "incorrect api key" in lower - or "unauthorized" in lower - or " 401" in lower - ): - error_code = "invalid_api_key" - message = "Invalid key. Validation failed." - error_obj = { - "message": message, - "type": "invalid_request_error", - "param": None, - "code": "invalid_api_key", - } - elif ( - "model_not_found" in lower - or "does not exist" in lower - or " 404" in lower - ): - error_code = "model_not_found" - message = "Invalid model name. Validation failed." - error_obj = { - "message": message, - "type": "invalid_request_error", - "param": None, - "code": "model_not_found", - } - elif ( - "insufficient_quota" in lower - or "quota" in lower - or " 429" in lower - ): - error_code = "insufficient_quota" - message = ( - "You exceeded your current quota, " - "please check your plan and billing details." - ) - error_obj = { - "message": message, - "type": "insufficient_quota", - "param": None, - "code": "insufficient_quota", - } + # 3) Keyword heuristics — classify the error but preserve original text + lower = raw_msg.lower() + if ( + "invalid_api_key" in lower + or "incorrect api key" in lower + or "unauthorized" in lower + or " 401" in lower + ): + code = "invalid_api_key" + elif ( + "model_not_found" in lower + or "does not exist" in lower + or " 404" in lower + ): + code = "model_not_found" + elif "insufficient_quota" in lower or "quota" in lower or " 429" in lower: + code = "insufficient_quota" + else: + return raw_msg, None, None - return message, error_code, error_obj + return ( + raw_msg, + code, + { + "message": raw_msg, + "type": "invalid_request_error", + "param": None, + "code": code, + }, + ) diff --git a/backend/app/service/chat_service.py b/backend/app/service/chat_service.py index b0ea4e606..7c7262a7e 100644 --- a/backend/app/service/chat_service.py +++ b/backend/app/service/chat_service.py @@ -43,6 +43,7 @@ from app.agent.toolkit.skill_toolkit import SkillToolkit from app.agent.toolkit.terminal_toolkit import TerminalToolkit from app.agent.tools import get_mcp_tools, get_toolkits +from app.component.error_format import normalize_error_to_openai_format from app.model.chat import Chat, NewAgent, Status, TaskContent, sse_json from app.service.task import ( Action, @@ -553,13 +554,14 @@ async def step_solve(options: Chat, request: Request, task_lock: TaskLock): ) except Exception as e: logger.error(f"Error generating simple answer: {e}") + message, error_code, _ = ( + normalize_error_to_openai_format(e) + ) yield sse_json( - "wait_confirm", + "error", { - "content": "I encountered an error" - " while processing " - "your question.", - "question": question, + "message": message, + "error_code": error_code, }, ) @@ -1259,13 +1261,14 @@ async def run_decomposition(): "Error generating simple " f"answer in multi-turn: {e}" ) + message, error_code, _ = ( + normalize_error_to_openai_format(e) + ) yield sse_json( - "wait_confirm", + "error", { - "content": "I encountered an error " - "while processing your " - "question.", - "question": new_task_content, + "message": message, + "error_code": error_code, }, ) @@ -1598,6 +1601,21 @@ def on_stream_text(chunk): }, ) + elif item.action == Action.error: + logger.error( + "[LIFECYCLE] ERROR action received " + f"for project {options.project_id}, " + f"task {options.task_id}: " + f"{item.data.get('message', 'Unknown error')}" + ) + yield sse_json( + "error", + { + "message": item.data.get("message", "Unknown error"), + "error_code": item.data.get("error_code"), + }, + ) + elif item.action == Action.end: logger.info("=" * 80) logger.info( @@ -1820,7 +1838,11 @@ def on_stream_text(chunk): f"{item.action}: {e}", exc_info=True, ) - yield sse_json("error", {"message": str(e)}) + message, error_code, _ = normalize_error_to_openai_format(e) + yield sse_json( + "error", + {"message": message, "error_code": error_code}, + ) if ( "workforce" in locals() and workforce is not None @@ -1834,7 +1856,11 @@ def on_stream_text(chunk): f"{item.action}: {e}", exc_info=True, ) - yield sse_json("error", {"message": str(e)}) + message, error_code, _ = normalize_error_to_openai_format(e) + yield sse_json( + "error", + {"message": message, "error_code": error_code}, + ) # Continue processing other items instead of breaking diff --git a/backend/app/service/task.py b/backend/app/service/task.py index 604fbc717..f2d28f110 100644 --- a/backend/app/service/task.py +++ b/backend/app/service/task.py @@ -65,6 +65,7 @@ class Action(str, Enum): resume = "resume" # user -> backend user take control new_agent = "new_agent" # user -> backend budget_not_enough = "budget_not_enough" # backend -> user + error = "error" # backend -> user (model/runtime error) add_task = "add_task" # user -> backend remove_task = "remove_task" # user -> backend skip_task = "skip_task" # user -> backend @@ -255,6 +256,11 @@ class ActionNewAgent(BaseModel): custom_model_config: "AgentModelConfig | None" = None +class ActionErrorData(BaseModel): + action: Literal[Action.error] = Action.error + data: dict + + class ActionBudgetNotEnough(BaseModel): action: Literal[Action.budget_not_enough] = Action.budget_not_enough @@ -303,6 +309,7 @@ class ActionSkipTaskData(BaseModel): | ActionTakeControl | ActionNewAgent | ActionBudgetNotEnough + | ActionErrorData | ActionAddTaskData | ActionRemoveTaskData | ActionSkipTaskData diff --git a/backend/app/utils/workforce.py b/backend/app/utils/workforce.py index e8d749b51..4c2c8cb08 100644 --- a/backend/app/utils/workforce.py +++ b/backend/app/utils/workforce.py @@ -42,11 +42,13 @@ from app.agent.listen_chat_agent import ListenChatAgent from app.component import code +from app.component.error_format import normalize_error_to_openai_format from app.exception.exception import UserException from app.service.task import ( Action, ActionAssignTaskData, ActionEndData, + ActionErrorData, ActionTaskStateData, ActionTimeoutData, get_camel_task, @@ -260,6 +262,27 @@ async def eigent_start(self, subtasks: list[Task]): exc_info=True, ) self._state = WorkforceState.STOPPED + # Push error event to SSE queue so frontend receives notification + try: + task_lock = get_task_lock(self.api_task_id) + if task_lock is not None: + message, error_code, _ = normalize_error_to_openai_format( + e + ) + await task_lock.put_queue( + ActionErrorData( + data={ + "message": message, + "error_code": error_code, + }, + ) + ) + except Exception as queue_err: + logger.error( + "[WF-LIFECYCLE] Failed to push error to SSE queue: " + f"{queue_err}", + exc_info=True, + ) raise finally: if self._state != WorkforceState.STOPPED: diff --git a/src/api/http.ts b/src/api/http.ts index 70fa418ce..7480f7ede 100644 --- a/src/api/http.ts +++ b/src/api/http.ts @@ -185,7 +185,7 @@ async function getProxyBaseURL() { } async function proxyFetchRequest( - method: 'GET' | 'POST' | 'PUT' | 'DELETE', + method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', url: string, data?: Record, customHeaders: Record = {} @@ -244,6 +244,9 @@ export const proxyFetchPost = (url: string, data?: any, headers?: any) => export const proxyFetchPut = (url: string, data?: any, headers?: any) => proxyFetchRequest('PUT', url, data, headers); +export const proxyFetchPatch = (url: string, data?: any, headers?: any) => + proxyFetchRequest('PATCH', url, data, headers); + export const proxyFetchDelete = (url: string, data?: any, headers?: any) => proxyFetchRequest('DELETE', url, data, headers); diff --git a/src/components/ChatBox/MessageItem/ModelErrorCard.tsx b/src/components/ChatBox/MessageItem/ModelErrorCard.tsx new file mode 100644 index 000000000..ef4e2665d --- /dev/null +++ b/src/components/ChatBox/MessageItem/ModelErrorCard.tsx @@ -0,0 +1,72 @@ +// ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= + +import { Button } from '@/components/ui/button'; +import { TriangleAlert } from 'lucide-react'; +import { useTranslation } from 'react-i18next'; +import { useNavigate } from 'react-router-dom'; + +interface ModelErrorCardProps { + content: string; + errorCode?: string | null; +} + +export function ModelErrorCard({ content, errorCode }: ModelErrorCardProps) { + const { t } = useTranslation(); + const navigate = useNavigate(); + + const description = (() => { + let text: string; + switch (errorCode) { + case 'invalid_api_key': + text = t('chat.model-error-invalid-api-key'); + break; + case 'model_not_found': + text = t('chat.model-error-model-not-found'); + break; + case 'insufficient_quota': + text = t('chat.model-error-quota-exceeded'); + break; + default: + return content; + } + // The i18n strings end with " in" for the toast's inline link. + // Strip it here since the card uses a separate button. + return text.replace(/ in$/, ''); + })(); + + return ( +
+ +
+

+ {description} +

+ {errorCode && content && content !== description && ( +

+ {content} +

+ )} + +
+
+ ); +} diff --git a/src/components/ChatBox/UserQueryGroup.tsx b/src/components/ChatBox/UserQueryGroup.tsx index 08c106b8d..91ef88502 100644 --- a/src/components/ChatBox/UserQueryGroup.tsx +++ b/src/components/ChatBox/UserQueryGroup.tsx @@ -19,6 +19,7 @@ import { FileText } from 'lucide-react'; import React, { useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { AgentMessageCard } from './MessageItem/AgentMessageCard'; +import { ModelErrorCard } from './MessageItem/ModelErrorCard'; import { NoticeCard } from './MessageItem/NoticeCard'; import { TaskCompletionCard } from './MessageItem/TaskCompletionCard'; import { UserMessageCard } from './MessageItem/UserMessageCard'; @@ -298,6 +299,22 @@ export const UserQueryGroup: React.FC = ({ {/* Other Messages */} {queryGroup.otherMessages.map((message) => { + if (message.error_code) { + return ( + + + + ); + } if (message.content.length > 0) { if (message.step === AgentStep.END) { return ( diff --git a/src/components/Toast/modelErrorToast.tsx b/src/components/Toast/modelErrorToast.tsx new file mode 100644 index 000000000..216ce71cf --- /dev/null +++ b/src/components/Toast/modelErrorToast.tsx @@ -0,0 +1,58 @@ +// ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ========= Copyright 2025-2026 @ Eigent.ai All Rights Reserved. ========= + +import i18n from '@/i18n'; +import { toast } from 'sonner'; + +export function showModelErrorToast( + errorMessage: string, + errorCode?: string | null +) { + toast.dismiss(); + + let description: string; + if (errorCode === 'invalid_api_key') { + description = i18n.t('chat.model-error-invalid-api-key'); + } else if (errorCode === 'model_not_found') { + description = i18n.t('chat.model-error-model-not-found'); + } else if (errorCode === 'insufficient_quota') { + description = i18n.t('chat.model-error-quota-exceeded'); + } else { + description = errorMessage; + } + + const isPersistent = errorCode === 'invalid_api_key'; + + const showOriginal = + errorCode && errorMessage && errorMessage !== description; + + toast.error( +
+ {description}{' '} + (window.location.href = '#/history?tab=agents')} + > + {i18n.t('chat.model-error-go-to-settings')} + + {showOriginal && ( +

{errorMessage}

+ )} +
, + { + duration: isPersistent ? Infinity : 8000, + closeButton: true, + } + ); +} diff --git a/src/i18n/locales/ar/chat.json b/src/i18n/locales/ar/chat.json index 631dfe510..0f19fb28c 100644 --- a/src/i18n/locales/ar/chat.json +++ b/src/i18n/locales/ar/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": ".نواجه حركة مرور عالية. يرجى المحاولة مرة أخرى بعد وقت قصيرة", "new-project": "مشروع جديد", "no-reply-received-task-continue": "لم يتم استلام رد، تستمر المهمة", - "splitting-tasks": "تقسيم المهام", - "start-task": "بدء المهمة", - "message-cannot-be-empty": "لا يمكن أن تكون الرسالة فارغة", - "remove-file": "إزالة الملف", - "drop-files-to-attach": "أسقط الملفات للإرفاق", - "expand-input": "توسيع الإدخال (⌘P)", - "queued-tasks": "المهام في قائمة الانتظار", - "remove-queued-message": "إزالة الرسالة من قائمة الانتظار", - "no-agents-added": "لم تتم إضافة وكلاء", "open-in-ide": "فتح في IDE", "open-in-vscode": "فتح في VS Code", "open-in-cursor": "فتح في Cursor", "open-in-file-manager": "فتح في مدير الملفات", "failed-to-open-folder": "فشل في فتح المجلد", - "task-completed-card-title": "تمت المهمة", - "task-completed-card-subtitle": "أتمت مهامك باستخدام الزناد" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "أسقط الملفات للإرفاق", + "expand-input": "توسيع الإدخال (⌘P)", + "message-cannot-be-empty": "لا يمكن أن تكون الرسالة فارغة", + "no-agents-added": "لم تتم إضافة وكلاء", + "queued-tasks": "المهام في قائمة الانتظار", + "remove-file": "إزالة الملف", + "remove-queued-message": "إزالة الرسالة من قائمة الانتظار", + "splitting-tasks": "تقسيم المهام", + "start-task": "بدء المهمة", + "task-completed-card-subtitle": "أتمت مهامك باستخدام الزناد", + "task-completed-card-title": "تمت المهمة" } diff --git a/src/i18n/locales/ar/setting.json b/src/i18n/locales/ar/setting.json index 766aad86e..843afb0ef 100644 --- a/src/i18n/locales/ar/setting.json +++ b/src/i18n/locales/ar/setting.json @@ -8,7 +8,7 @@ "default": "افتراضي", "profile": "الملف الشخصي", "account": "حساب", - "you-are-currently-signed-in-with": "{{email}} أنت مسجل الدخول حاليًا باستخدام", + "you-are-currently-signed-in-with": "{{email}} أنت مسجل الدخول حاليًا باستخدام", "manage": "إدارة", "log-out": "تسجيل الخروج", "language": "اللغة", @@ -18,12 +18,10 @@ "dark": "غامق", "light": "فاتح", "transparent": "شفاف", - "data-privacy": "خصوصية البيانات", "data-privacy-description": "يعتمد أيجنت على الوضع المحلي الجديد ويضمن خصوصيتك. تبقى بياناتك على جهازك افتراضيًا. أذونات السحابة اختيارية، ويُستخدم حد البيانات لأغراض العمل فقط", "privacy-policy": "سياسة الخصوصية", "how-we-handle-your-data": "كيف نتعامل مع بياناتك", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "نحن نستخدم فقط البيانات الأساسية اللازمة لتنفيذ مهامك", "how-we-handle-your-data-line-1": "نحن نستخدم فقط البيانات الأساسية اللازمة لتنفيذ مهامك", "how-we-handle-your-data-line-1-line-1": ".يمكنك اختيار لقطات شاشة أيجنت لتحليل عناصر واجهة المستخدم وقراءة النص وتحديد الإجراء التالي، تمامًا كما تفعل", "how-we-handle-your-data-line-1-line-2": ".يمكن استخدام الماوس ولوحة المفاتيح المحلية للوصول إلى البرامج والملفات المحلية التي تم تنشيطها", @@ -32,6 +30,8 @@ "how-we-handle-your-data-line-3": ".يتم تخزين بيانات الاعتماد محليًا، وتشفيرها، ولا تُستخدم إلا للخطوات المعتمدة", "how-we-handle-your-data-line-4": ".لا تُستخدم بياناتك أبدًا لتدريب نماذج الذكاء الاصطناعي الخاصة بنا دون موافقتك الصريحة", "how-we-handle-your-data-line-5": ".نحن لا نبيع بياناتك لأطراف ثالثة", + "enable-privacy-permissions-settings": "تمكين إعدادات أذونات الخصوصية", + "enable-privacy-permissions-settings-description": ".من خلال تفعيل هذا الخيار، فإنك تقر بأنك قد قرأت ووافقت على سياسة الخصوصية الخاصة بنا بشأن كيفية جمع بيانات مهامك ومعالجتها وحمايتها", "api-key-can-not-be-empty": "!لا يمكن أن يكون مفتاح واجهة برمجة التطبيقات فارغًا", "api-host-can-not-be-empty": "!لا يمكن أن يكون مضيف واجهة برمجة التطبيقات فارغًا", "model-type-can-not-be-empty": "!لا يمكن أن يكون نوع النموذج فارغًا", @@ -67,7 +67,6 @@ "url": "عنوان URL", "enter-your-model-type": "أدخل نوع النموذج الخاص بك", "verifying": "جارٍ التحقق...", - "mcp-and-tools": "MCP الأدوات", "add-mcp-server": "MCP إضافة خادم", "market": "السوق", @@ -115,7 +114,14 @@ "warning-google-search-not-configured": "تحذير: بحث Google غير مكوّن", "search-functionality-may-be-limited-without-google-api": "قد تكون وظائف البحث محدودة بدون مفتاح Google API ومعرف محرك البحث. يمكنك تكوين هذه في إعدادات MCP والأدوات.", "search-engine": "محرك البحث", + "allow-agent-to-take-screenshots": "السماح للوكيل بالتقاط لقطات الشاشة", + "allow-agent-to-take-screenshots-description": "السماح للوكيل بالتقاط لقطات شاشة لشاشة الكمبيوتر الخاص بك. يمكن استخدام هذا للدعم أو التشخيص أو أغراض المراقبة. قد تتضمن لقطات الشاشة معلومات شخصية مرئية، لذا يرجى التمكين بحذر.", + "allow-agent-to-access-local-software": "السماح للوكيل بالوصول إلى البرامج المحلية", + "allow-agent-to-access-local-software-description": "منح الوكيل إذناً للتفاعل مع واستخدام البرامج المثبتة على جهازك المحلي. قد يكون هذا ضرورياً لاستكشاف الأخطاء وإصلاحها أو تشغيل التشخيصات أو أداء مهام محددة.", + "allow-agent-to-access-your-address": "السماح للوكيل بالوصول إلى عنوانك", + "allow-agent-to-access-your-address-description": "السماح للوكيل بعرض واستخدام تفاصيل موقعك أو عنوانك. قد يكون هذا مطلوباً للخدمات القائمة على الموقع أو الدعم الشخصي.", "password-storage": "تخزين كلمة المرور", + "password-storage-description": "تحديد كيفية التعامل مع كلمات المرور وتخزينها. يمكنك اختيار تخزين كلمات المرور بأمان على الجهاز أو داخل التطبيق، أو اختيار إدخالها يدوياً في كل مرة. جميع كلمات المرور المخزنة مشفرة.", "notion-mcp-installed-successfully": "تم تثبيت Notion MCP بنجاح", "failed-to-install-notion-mcp": "فشل في تثبيت Notion MCP", "google-calendar-installed-successfully": "تم تثبيت Google Calendar بنجاح", @@ -157,7 +163,6 @@ "proxy-save-failed": "فشل حفظ تكوين الوكيل.", "proxy-invalid-url": "عنوان URL للوكيل غير صالح. يجب أن يبدأ بـ http:// أو https:// أو socks4:// أو socks5://.", "proxy-restart-hint": "يجب إعادة التشغيل لتطبيق تغييرات الوكيل.", - "cloud-not-available-in-local-proxy": "إصدار السحابة غير متاح في وضع الوكيل المحلي", "set-as-default": "تعيين كافتراضي", "api-key-setting": "إعداد مفتاح API", @@ -165,11 +170,9 @@ "model-type-setting": "إعداد نوع النموذج", "please-select": "يرجى الاختيار", "configuring": "جارٍ التكوين...", - "models-default-setting-title": "الإعداد الافتراضي", "models-default-setting-description": "اختر أحد النماذج المكوّنة ليكون النموذج الافتراضي لـ Eigent، وسيتم تطبيقه عالميًا عبر مساحة العمل الخاصة بك.", "models-configuration": "التكوين", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -178,167 +181,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - - "account": "حساب", - "you-are-currently-signed-in-with": "{{email}} أنت مسجل الدخول حاليًا باستخدام", - "manage": "إدارة", - "log-out": "تسجيل الخروج", - "language": "اللغة", - "select-language": "اختر اللغة", - "system-default": "النظام الافتراضي", - "appearance": "المظهر", - "dark": "غامق", - "light": "فاتح", - "transparent": "شفاف", - - "data-privacy": "خصوصية البيانات", - "data-privacy-description": "يعتمد أيجنت على الوضع المحلي الجديد ويضمن خصوصيتك. تبقى بياناتك على جهازك افتراضيًا. أذونات السحابة اختيارية، ويُستخدم حد البيانات لأغراض العمل فقط", - "privacy-policy": "سياسة الخصوصية", - "how-we-handle-your-data": "كيف نتعامل مع بياناتك", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "نحن نستخدم فقط البيانات الأساسية اللازمة لتنفيذ مهامك", - "how-we-handle-your-data-line-1": "نحن نستخدم فقط البيانات الأساسية اللازمة لتنفيذ مهامك", - "how-we-handle-your-data-line-1-line-1": ".يمكنك اختيار لقطات شاشة أيجنت لتحليل عناصر واجهة المستخدم وقراءة النص وتحديد الإجراء التالي، تمامًا كما تفعل", - "how-we-handle-your-data-line-1-line-2": ".يمكن استخدام الماوس ولوحة المفاتيح المحلية للوصول إلى البرامج والملفات المحلية التي تم تنشيطها", - "how-we-handle-your-data-line-1-line-3": "لا يتم توفير سوى الحد الأدنى من البيانات ذات الصلة لنماذج الذكاء الاصطناعي أو عمليات التكامل مع جهات خارجية التي تمكنها؛ وليس لدينا أي احتفاظ بالبيانات", - "how-we-handle-your-data-line-2": ".تبقى ملفات المهام والمخرجات ولقطات الشاشة في مجلد المهمة المخصص لك محليًا", - "how-we-handle-your-data-line-3": ".يتم تخزين بيانات الاعتماد محليًا، وتشفيرها، ولا تُستخدم إلا للخطوات المعتمدة", - "how-we-handle-your-data-line-4": ".لا تُستخدم بياناتك أبدًا لتدريب نماذج الذكاء الاصطناعي الخاصة بنا دون موافقتك الصريحة", - "how-we-handle-your-data-line-5": ".نحن لا نبيع بياناتك لأطراف ثالثة", - "api-key-can-not-be-empty": "!لا يمكن أن يكون مفتاح واجهة برمجة التطبيقات فارغًا", - "api-host-can-not-be-empty": "!لا يمكن أن يكون مضيف واجهة برمجة التطبيقات فارغًا", - "model-type-can-not-be-empty": "!لا يمكن أن يكون نوع النموذج فارغًا", - "validate-success": "التحقق ناجح", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "ِ.تم التحقق من أن النموذج يدعم استدعاء الوظيفة، وهو أمر مطلوب للاستخدام", - "validate-failed": "فشل التحقق", - "copy": "نسخ", - "copied-to-clipboard": "تم النسخ إلى الحافظة", - "endpoint-url-can-not-be-empty": "!لا يمكن أن يكون عنوان يورل لنقطة النهاية فارغًا", - "verification-failed-please-check-endpoint-url": "فشل التحقق، يرجى المراجعة على النقطة النهائية يورل", - "eigent-cloud-version": "إصدار أيجنت السحابي", - "you-are-currently-subscribed-to-the": "أنت مشترك حاليًا في", - "discover-more-about-our": "اكتشف المزيد حول", - "pricing-options": "خيارات التسعير", - "credits": "رصيد", - "select-model-type": "اختر نوع النموذج", - "custom-model": "نموذج مخصص", - "use-your-own-api-keys-or-set-up-a-local-model": ".استخدم مفاتيح واجهة برمجة التطبيقات الخاصة بك أو قم بإعداد نموذج محلي", - "verify": "تحقق", - "local-model": "نموذج محلي", - "model-platform": "منصة النموذج", - "model-endpoint-url": "للنموذج URL النقطة نهاية", - "model-type": "نوع النموذج", - "enter-your-local-model-type": "أدخل نوع نموذجك المحلي", - "you-are-on-selft-host-mode": "أنت في وضع الاستضافة الذاتية", - "you-are-using-self-hosted-mode": ".أنت تستخدم وضع الاستضافة الذاتية. للحصول على أفضل أداء لهذا المنتج، يرجى إدخال مفتاح بحث Google في \"MCP والأدوات\" لضمان عمل Eigent بشكل صحيح", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": ".مفتاح بحث Google ضروري لتقديم نتائج بحث دقيقة. مفتاح بحث Exa اختياري ولكنه موصى به بشدة للحصول على أداء أفضل", - "close": "إغلاق", - "enter-your-api-key": "أدخل مفتاح واجهة برمجة التطبيقات الخاص بك", - "key": "مفتاح", - "enter-your-api-host": "أدخل مضيف واجهة برمجة التطبيقات الخاص بك", - "url": "عنوان URL", - "enter-your-model-type": "أدخل نوع النموذج الخاص بك", - "verifying": "جارٍ التحقق...", - - "mcp-and-tools": "MCP الأدوات", - "add-mcp-server": "MCP إضافة خادم", - "market": "السوق", - "tools": "الأدوات", - "added-external-servers": "تمت إضافة خوادم خارجية", - "loading": "جارٍ التحميل...", - "no-mcp-servers": "MCP لا توجد خوادم", - "environmental-variables-required": "المتغيرات البيئية مطلوبة", - "load-failed": "فشل التحميل", - "save-failed": "فشل الحفظ", - "invalid-json": "غير صالح JSON", - "coming-soon": "قريبًا", - "uninstall": "إلغاء التثبيت", - "install": "تثبيت", - "add-your-agent": "أضف وكيلك", - "add-a-local-mcp-server-by-providing-a-valid-json-configuration": ".أضف مضيف مسيبي محليًا عن طريق توفير جسون صارم صالح", - "learn-more": "اتعلم اكثر", - "installing": "جارٍ التثبيت...", - "edit-mcp-config": "MCP تعديل تكوين", - "name": "الاسم", - "description": "الوصف", - "command": "الأمر", - "args-one-per-line": "الوسائط (واحد في كل سطر)", - "cancel": "إلغاء", - "save": "حفظ", - "confirm-delete": "تأكيد الحذف", - "are-you-sure-you-want-to-delete": "هل أنت متأكد أنك تريد حذف", - "deleting": "جارٍ الحذف...", - "delete": "حذف", - "configure {name} Toolkit": "{name} تكوين مجموعة أدوات", - "get-it-from": "احصل عليها من", - "google-custom-search-api": "Google واجهة برمجة تطبيقات البحث المخصص من", - "google-cloud-console": "Google Cloud وحدة تحكم", - "connect": "اتصال", - "setting": "إعداد", - "all": "الكل", - "mcp-market": "MCP سوق", - "no-mcp-services": "MCP لا توجد خدمات", - "loading-more": "جارٍ تحميل المزيد...", - "no-more-mcp-servers": "MCP لا مزيد من خوادم", - "search-mcp": "MCP بحث", - "installed": "مثبت", - "worker-name-cannot-be-empty": "لا يمكن أن يكون اسم العامل فارغًا", - "worker-name-already-exists": "اسم العامل موجود بالفعل", - "warning-google-search-not-configured": "تحذير: بحث Google غير مكوّن", - "search-functionality-may-be-limited-without-google-api": "قد تكون وظائف البحث محدودة بدون مفتاح Google API ومعرف محرك البحث. يمكنك تكوين هذه في إعدادات MCP والأدوات.", - "search-engine": "محرك البحث", - "password-storage": "تخزين كلمة المرور", - "notion-mcp-installed-successfully": "تم تثبيت Notion MCP بنجاح", - "failed-to-install-notion-mcp": "فشل في تثبيت Notion MCP", - "google-calendar-installed-successfully": "تم تثبيت Google Calendar بنجاح", - "failed-to-install-google-calendar": "فشل في تثبيت Google Calendar", - "notion-workspace-integration": "تكامل مساحة عمل Notion لقراءة وإدارة صفحات Notion", - "google-calendar-integration": "تكامل Google Calendar لإدارة الأحداث والجداول الزمنية", - "mcp-server-already-exists": "خادم MCP \"{{name}}\" موجود بالفعل", - "google-search": "بحث Google", - "select-default-search-engine": "اختر محرك البحث الافتراضي", - "your-own-mcps": "MCPs الخاصة بك", - "get-google-search-api": "احصل على Google Search API", - "get-exa-api": "احصل على Exa API", - "exa-ai": "Exa AI", - "search-engine-integrations": "تكاملات محرك البحث", - "configured": "مكوّن", - "incomplete": "غير مكتمل", - "not-configured": "غير مكوّن", - "saving": "جارٍ الحفظ...", - "save-changes": "حفظ التغييرات", - "enable": "تفعيل", - "search": "بحث", - "test-connection": "اختبار الاتصال", - "your-api-keys-are-stored-securely-and-never-shared-externally": "مفاتيح واجهة برمجة التطبيقات الخاصة بك محفوظة بأمان ولا يتم مشاركتها خارجيًا أبدًا.", - "this-service-is-public-and-does-not-require-credentials": "هذه الخدمة عامة ولا تتطلب بيانات اعتماد.", - "this-service-does-not-require-an-api-key": "هذه الخدمة لا تتطلب مفتاح واجهة برمجة تطبيقات.", - "connection-test-successful": "اختبار الاتصال ناجح!", - "connection-test-failed": "فشل اختبار الاتصال.", - "configuration-saved-successfully": "تم حفظ التكوين بنجاح!", - "failed-to-save-configuration": "فشل في حفظ التكوين.", - "recommended": "موصى به", - "reset": "إعادة تعيين", - "reset-success": "تمت إعادة التعيين بنجاح!", - "reset-failed": "فشل إعادة التعيين!", - - "network-proxy": "وكيل الشبكة", - "network-proxy-description": "قم بتكوين خادم وكيل لطلبات الشبكة. هذا مفيد إذا كنت بحاجة إلى الوصول إلى واجهات برمجة التطبيقات الخارجية عبر وكيل.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "تم حفظ تكوين الوكيل. أعد تشغيل التطبيق لتطبيق التغييرات.", - "proxy-save-failed": "فشل حفظ تكوين الوكيل.", - "proxy-invalid-url": "عنوان URL للوكيل غير صالح. يجب أن يبدأ بـ http:// أو https:// أو socks4:// أو socks5://.", - "proxy-restart-hint": "يجب إعادة التشغيل لتطبيق تغييرات الوكيل.", - "preferred-ide": "IDE المفضل", "preferred-ide-description": "اختر التطبيق الذي سيتم استخدامه عند فتح مجلدات مشاريع الوكيل.", "system-file-manager": "مدير ملفات النظام", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "ساعد في تحسين Eigent", - "help-improve-eigent-description": "اسمح لـ Eigent بجمع سجلات الأخطاء المجهولة وبيانات الاستخدام لتحسين الخدمة. هذا اختياري ويمكن تغييره في أي وقت." + "help-improve-eigent-description": "اسمح لـ Eigent بجمع سجلات الأخطاء المجهولة وبيانات الاستخدام لتحسين الخدمة. هذا اختياري ويمكن تغييره في أي وقت.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "نحن نستخدم فقط البيانات الأساسية اللازمة لتنفيذ مهامك" } diff --git a/src/i18n/locales/de/chat.json b/src/i18n/locales/de/chat.json index 97a3be745..40e67ca49 100644 --- a/src/i18n/locales/de/chat.json +++ b/src/i18n/locales/de/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "Wir erleben hohen Datenverkehr. Bitte versuchen Sie es in wenigen Augenblicken erneut.", "new-project": "Neues Projekt", "no-reply-received-task-continue": "Keine Antwort erhalten, Aufgabe wird fortgesetzt", - "splitting-tasks": "Aufgaben teilen", - "start-task": "Aufgabe starten", - "message-cannot-be-empty": "Nachricht darf nicht leer sein", - "remove-file": "Datei entfernen", - "drop-files-to-attach": "Dateien zum Anhängen ablegen", - "expand-input": "Eingabe erweitern (⌘P)", - "queued-tasks": "Aufgaben in Warteschlange", - "remove-queued-message": "Nachricht aus Warteschlange entfernen", - "no-agents-added": "Keine Agenten hinzugefügt", "open-in-ide": "In IDE öffnen", "open-in-vscode": "In VS Code öffnen", "open-in-cursor": "In Cursor öffnen", "open-in-file-manager": "Im Dateimanager öffnen", "failed-to-open-folder": "Ordner konnte nicht geöffnet werden", - "task-completed-card-title": "Aufgabe abgeschlossen", - "task-completed-card-subtitle": "Automatisieren Sie Ihre Aufgabe mit einem Trigger" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "Dateien zum Anhängen ablegen", + "expand-input": "Eingabe erweitern (⌘P)", + "message-cannot-be-empty": "Nachricht darf nicht leer sein", + "no-agents-added": "Keine Agenten hinzugefügt", + "queued-tasks": "Aufgaben in Warteschlange", + "remove-file": "Datei entfernen", + "remove-queued-message": "Nachricht aus Warteschlange entfernen", + "splitting-tasks": "Aufgaben teilen", + "start-task": "Aufgabe starten", + "task-completed-card-subtitle": "Automatisieren Sie Ihre Aufgabe mit einem Trigger", + "task-completed-card-title": "Aufgabe abgeschlossen" } diff --git a/src/i18n/locales/de/setting.json b/src/i18n/locales/de/setting.json index 9d58d7cf4..1128bbaf3 100644 --- a/src/i18n/locales/de/setting.json +++ b/src/i18n/locales/de/setting.json @@ -7,67 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "Standard", "profile": "Profil", - "account": "Konto", - "you-are-currently-signed-in-with": "Sie sind derzeit angemeldet mit {{email}}", - "manage": "Verwalten", - "log-out": "Abmelden", - "language": "Sprache", - "select-language": "Sprache auswählen", - "system-default": "Systemstandard", - "appearance": "Erscheinungsbild", - "dark": "Dunkel", - "light": "Hell", - "transparent": "Transparent", - - "data-privacy": "Datenschutz", - "data-privacy-description": "Eigent basiert auf einem Local-First-Prinzip, um Ihre Privatsphäre zu gewährleisten. Ihre Daten verbleiben standardmäßig auf Ihrem Gerät. Cloud-Funktionen sind optional und verwenden nur die minimal erforderlichen Daten, um zu funktionieren. Für vollständige Details besuchen Sie bitte unsere", - "privacy-policy": "Datenschutzrichtlinie", - "how-we-handle-your-data": "Wie wir Ihre Daten behandeln", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Wir verwenden nur die für die Ausführung Ihrer Aufgaben erforderlichen Daten", - "how-we-handle-your-data-line-1": "Wir verwenden nur die für die Ausführung Ihrer Aufgaben erforderlichen Daten", - "how-we-handle-your-data-line-1-line-1": "Eigent kann Screenshots erfassen, um UI-Elemente zu analysieren, Text zu lesen und die nächste Aktion zu bestimmen, genau wie Sie es tun würden.", - "how-we-handle-your-data-line-1-line-2": "Eigent kann Ihre Maus und Tastatur verwenden, um auf von Ihnen angegebene lokale Software und Dateien zuzugreifen.", - "how-we-handle-your-data-line-1-line-3": "Nur minimale Aufgabendaten werden an KI-Modellanbieter oder von Ihnen aktivierte Drittanbieter-Integrationen gesendet; wir speichern keine Daten.", - "how-we-handle-your-data-line-2": "Aufgabendateien, Ausgaben und Screenshots verbleiben lokal in Ihrem angegebenen Aufgabenordner.", - "how-we-handle-your-data-line-3": "Anmeldeinformationen werden lokal, verschlüsselt gespeichert und nur für genehmigte Schritte verwendet.", - "how-we-handle-your-data-line-4": "Ihre Daten werden ohne Ihre ausdrückliche Zustimmung niemals zum Trainieren unserer KI-Modelle verwendet.", - "how-we-handle-your-data-line-5": "Wir verkaufen Ihre Daten nicht an Dritte.", - "api-key-can-not-be-empty": "API-Schlüssel darf nicht leer sein!", - "api-host-can-not-be-empty": "API-Host darf nicht leer sein!", - "model-type-can-not-be-empty": "Modelltyp darf nicht leer sein!", - "validate-success": "Validierung erfolgreich", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "Das Modell wurde verifiziert und unterstützt Function Calling, was für die Verwendung von Eigent erforderlich ist.", - "validate-failed": "Validierung fehlgeschlagen", - "copy": "Kopieren", - "copied-to-clipboard": "In die Zwischenablage kopiert", - "failed-to-copy-to-clipboard": "Kopieren in die Zwischenablage fehlgeschlagen", - "endpoint-url-can-not-be-empty": "Endpunkt-URL darf nicht leer sein!", - "verification-failed-please-check-endpoint-url": "Verifizierung fehlgeschlagen, bitte überprüfen Sie die Endpunkt-URL", - "eigent-cloud-version": "Eigent Cloud-Version", - "you-are-currently-subscribed-to-the": "Sie sind derzeit abonniert für das", - "discover-more-about-our": "Entdecken Sie mehr über unsere", - "pricing-options": "Preismodelle", - "credits": "Credits", - "select-model-type": "Modelltyp auswählen", - "custom-model": "Benutzerdefiniertes Modell", - "use-your-own-api-keys-or-set-up-a-local-model": "Verwenden Sie Ihre eigenen API-Schlüssel oder richten Sie ein lokales Modell ein.", - "verify": "Überprüfen", - "local-model": "Lokales Modell", - "model-platform": "Modellplattform", - "model-endpoint-url": "Modell-Endpunkt-URL", - "model-type": "Modelltyp", - "enter-your-local-model-type": "Geben Sie Ihren lokalen Modelltyp ein", - "you-are-on-selft-host-mode": "Sie befinden sich im Self-Host-Modus", - "you-are-using-self-hosted-mode": "Sie verwenden den Self-hosted-Modus. Um die beste Leistung dieses Produkts zu erzielen, geben Sie bitte den Google Search Key unter „MCP und Tools“ ein, um sicherzustellen, dass Eigent ordnungsgemäß funktioniert.", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "Der Google Search Key ist unerlässlich für die Bereitstellung genauer Suchergebnisse. Der Exa Search Key ist optional, aber für eine bessere Leistung sehr empfehlenswert.", - "close": "Schließen", - "enter-your-api-key": "Geben Sie Ihren API-", - "key": "Schlüssel ein", - "enter-your-api-host": "Geben Sie Ihren API-Host ein", - "url": "URL", - "enter-your-model-type": "Geben Sie Ihren Modelltyp ein", - "verifying": "Wird überprüft...", - "account": "Konto", "you-are-currently-signed-in-with": "Sie sind derzeit angemeldet mit {{email}}", "manage": "Verwalten", @@ -79,12 +18,10 @@ "dark": "Dunkel", "light": "Hell", "transparent": "Transparent", - "data-privacy": "Datenschutz", "data-privacy-description": "Eigent basiert auf einem Local-First-Prinzip, um Ihre Privatsphäre zu gewährleisten. Ihre Daten verbleiben standardmäßig auf Ihrem Gerät. Cloud-Funktionen sind optional und verwenden nur die minimal erforderlichen Daten, um zu funktionieren. Für vollständige Details besuchen Sie bitte unsere", "privacy-policy": "Datenschutzrichtlinie", "how-we-handle-your-data": "Wie wir Ihre Daten behandeln", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Wir verwenden nur die für die Ausführung Ihrer Aufgaben erforderlichen Daten", "how-we-handle-your-data-line-1": "Wir verwenden nur die für die Ausführung Ihrer Aufgaben erforderlichen Daten", "how-we-handle-your-data-line-1-line-1": "Eigent kann Screenshots erfassen, um UI-Elemente zu analysieren, Text zu lesen und die nächste Aktion zu bestimmen, genau wie Sie es tun würden.", "how-we-handle-your-data-line-1-line-2": "Eigent kann Ihre Maus und Tastatur verwenden, um auf von Ihnen angegebene lokale Software und Dateien zuzugreifen.", @@ -93,6 +30,8 @@ "how-we-handle-your-data-line-3": "Anmeldeinformationen werden lokal, verschlüsselt gespeichert und nur für genehmigte Schritte verwendet.", "how-we-handle-your-data-line-4": "Ihre Daten werden ohne Ihre ausdrückliche Zustimmung niemals zum Trainieren unserer KI-Modelle verwendet.", "how-we-handle-your-data-line-5": "Wir verkaufen Ihre Daten nicht an Dritte.", + "enable-privacy-permissions-settings": "Datenschutzeinstellungen aktivieren", + "enable-privacy-permissions-settings-description": "Durch die Aktivierung dieser Option bestätigen Sie, dass Sie unsere Datenschutzrichtlinie bezüglich der Erfassung, Verarbeitung und des Schutzes Ihrer Aufgabendaten gelesen und akzeptiert haben.", "api-key-can-not-be-empty": "API-Schlüssel darf nicht leer sein!", "api-host-can-not-be-empty": "API-Host darf nicht leer sein!", "model-type-can-not-be-empty": "Modelltyp darf nicht leer sein!", @@ -101,6 +40,7 @@ "validate-failed": "Validierung fehlgeschlagen", "copy": "Kopieren", "copied-to-clipboard": "In die Zwischenablage kopiert", + "failed-to-copy-to-clipboard": "Kopieren in die Zwischenablage fehlgeschlagen", "endpoint-url-can-not-be-empty": "Endpunkt-URL darf nicht leer sein!", "verification-failed-please-check-endpoint-url": "Verifizierung fehlgeschlagen, bitte überprüfen Sie die Endpunkt-URL", "eigent-cloud-version": "Eigent Cloud-Version", @@ -127,7 +67,6 @@ "url": "URL", "enter-your-model-type": "Geben Sie Ihren Modelltyp ein", "verifying": "Wird überprüft...", - "mcp-and-tools": "MCP & Tools", "add-mcp-server": "MCP-Server hinzufügen", "market": "Markt", @@ -175,7 +114,14 @@ "warning-google-search-not-configured": "Warnung: Google Search nicht konfiguriert", "search-functionality-may-be-limited-without-google-api": "Suchfunktionalität kann ohne Google API-Schlüssel und Search Engine ID eingeschränkt sein. Sie können diese in den MCP & Tools-Einstellungen konfigurieren.", "search-engine": "Suchmaschine", + "allow-agent-to-take-screenshots": "Agent erlauben, Screenshots zu machen", + "allow-agent-to-take-screenshots-description": "Erlauben Sie dem Agenten, Screenshots Ihres Computerbildschirms zu erfassen. Dies kann für Support, Diagnose oder Überwachungszwecke verwendet werden. Screenshots können sichtbare persönliche Informationen enthalten, daher aktivieren Sie dies mit Vorsicht.", + "allow-agent-to-access-local-software": "Agent erlauben, auf lokale Software zuzugreifen", + "allow-agent-to-access-local-software-description": "Gewähren Sie dem Agenten die Berechtigung, mit Software zu interagieren und sie zu nutzen, die auf Ihrem lokalen Computer installiert ist. Dies kann für Fehlerbehebung, Diagnose oder die Ausführung spezifischer Aufgaben erforderlich sein.", + "allow-agent-to-access-your-address": "Agent erlauben, auf Ihre Adresse zuzugreifen", + "allow-agent-to-access-your-address-description": "Autorisieren Sie den Agenten, Ihre Standort- oder Adressdetails anzuzeigen und zu verwenden. Dies kann für standortbasierte Dienste oder personalisierten Support erforderlich sein.", "password-storage": "Passwort-Speicherung", + "password-storage-description": "Bestimmen Sie, wie Passwörter behandelt und gespeichert werden. Sie können wählen, Passwörter sicher auf dem Gerät oder in der Anwendung zu speichern, oder sich dafür entscheiden, sie jedes Mal manuell einzugeben. Alle gespeicherten Passwörter sind verschlüsselt.", "notion-mcp-installed-successfully": "Notion MCP erfolgreich installiert", "failed-to-install-notion-mcp": "Fehler beim Installieren von Notion MCP", "google-calendar-installed-successfully": "Google Calendar erfolgreich installiert", @@ -217,7 +163,6 @@ "proxy-save-failed": "Proxy-Konfiguration konnte nicht gespeichert werden.", "proxy-invalid-url": "Ungültige Proxy-URL. Muss mit http://, https://, socks4:// oder socks5:// beginnen.", "proxy-restart-hint": "Neustart erforderlich, um Proxy-Änderungen anzuwenden.", - "cloud-not-available-in-local-proxy": "Cloud-Version ist im lokalen Proxy-Modus nicht verfügbar", "set-as-default": "Als Standard festlegen", "api-key-setting": "API-Schlüssel-Einstellung", @@ -225,11 +170,9 @@ "model-type-setting": "Modelltyp-Einstellung", "please-select": "Bitte auswählen", "configuring": "Wird konfiguriert...", - "models-default-setting-title": "Standard-Einstellung", "models-default-setting-description": "Wähle eines deiner konfigurierten Modelle als Standardmodell für Eigent. Es wird global in deinem Arbeitsbereich angewendet.", "models-configuration": "Konfiguration", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -238,24 +181,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "Netzwerk-Proxy", - "network-proxy-description": "Konfigurieren Sie einen Proxy-Server für Netzwerkanfragen. Dies ist nützlich, wenn Sie über einen Proxy auf externe APIs zugreifen müssen.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "Proxy-Konfiguration gespeichert. Starten Sie die App neu, um die Änderungen anzuwenden.", - "proxy-save-failed": "Proxy-Konfiguration konnte nicht gespeichert werden.", - "proxy-invalid-url": "Ungültige Proxy-URL. Muss mit http://, https://, socks4:// oder socks5:// beginnen.", - "proxy-restart-hint": "Neustart erforderlich, um Proxy-Änderungen anzuwenden.", - "preferred-ide": "Bevorzugte IDE", "preferred-ide-description": "Wählen Sie die Anwendung aus, die beim Öffnen von Agent-Projektordnern verwendet werden soll.", "system-file-manager": "System-Dateimanager", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Helfen Sie, Eigent zu verbessern", - "help-improve-eigent-description": "Erlauben Sie Eigent, anonyme Fehlerprotokolle und Nutzungsdaten zu sammeln, um den Dienst zu verbessern. Dies ist optional und kann jederzeit geändert werden." + "help-improve-eigent-description": "Erlauben Sie Eigent, anonyme Fehlerprotokolle und Nutzungsdaten zu sammeln, um den Dienst zu verbessern. Dies ist optional und kann jederzeit geändert werden.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "Wir verwenden nur die für die Ausführung Ihrer Aufgaben erforderlichen Daten" } diff --git a/src/i18n/locales/en-us/chat.json b/src/i18n/locales/en-us/chat.json index 628a4e3b9..27511620b 100644 --- a/src/i18n/locales/en-us/chat.json +++ b/src/i18n/locales/en-us/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "We're experiencing high traffic. Please try again in a few moments.", "new-project": "Untitled Project", "no-reply-received-task-continue": "No reply received, task continue", - "splitting-tasks": "Splitting Tasks", - "start-task": "Start Task", - "message-cannot-be-empty": "Message cannot be empty", - "remove-file": "Remove file", - "drop-files-to-attach": "Drop files to attach", - "expand-input": "Expand input (⌘P)", - "queued-tasks": "Queued Tasks", - "remove-queued-message": "Remove queued message", - "no-agents-added": "No agents added", "open-in-ide": "Open in IDE", "open-in-vscode": "Open in VS Code", "open-in-cursor": "Open in Cursor", "open-in-file-manager": "Open in File Manager", "failed-to-open-folder": "Failed to open folder", - "task-completed-card-title": "Task completed", - "task-completed-card-subtitle": "Automate your task with a trigger" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "Drop files to attach", + "expand-input": "Expand input (⌘P)", + "message-cannot-be-empty": "Message cannot be empty", + "no-agents-added": "No agents added", + "queued-tasks": "Queued Tasks", + "remove-file": "Remove file", + "remove-queued-message": "Remove queued message", + "splitting-tasks": "Splitting Tasks", + "start-task": "Start Task", + "task-completed-card-subtitle": "Automate your task with a trigger", + "task-completed-card-title": "Task completed" } diff --git a/src/i18n/locales/en-us/setting.json b/src/i18n/locales/en-us/setting.json index 11f0485c2..379f057ab 100644 --- a/src/i18n/locales/en-us/setting.json +++ b/src/i18n/locales/en-us/setting.json @@ -8,7 +8,7 @@ "default": "Default", "profile": "Profile", "account": "Account", - "you-are-currently-signed-in-with": "You are currently signed in with {{email}}", + "you-are-currently-signed-in-with": "You are currently signed in with {{email}}", "manage": "Manage", "log-out": "Log out", "language": "Language", @@ -18,12 +18,10 @@ "dark": "Dark", "light": "Light", "transparent": "Transparent", - "data-privacy": "Data Privacy", "data-privacy-description": "Eigent is built on a local-first principle to ensure your privacy. Your data remains on your device by default. Cloud features are optional and only use the minimum data necessary to function. For full details, visit our", "privacy-policy": "Privacy Policy", "how-we-handle-your-data": "How we handle your data", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "We only use the essential data needed to run your tasks", "how-we-handle-your-data-line-1": "We only use the essential data needed to run your tasks", "how-we-handle-your-data-line-1-line-1": "Eigent may capture screenshots to analyze UI elements, read text, and determine the next action, just as you would.", "how-we-handle-your-data-line-1-line-2": "Eigent may use your mouse and keyboard to access local software and files you specify.", @@ -32,6 +30,8 @@ "how-we-handle-your-data-line-3": "Credentials are stored locally, encrypted, and used only for approved steps.", "how-we-handle-your-data-line-4": "Your data is never used to train our AI models without your explicit consent.", "how-we-handle-your-data-line-5": "We don’t sell your data to third parties.", + "enable-privacy-permissions-settings": "Enable Privacy Permissions Settings", + "enable-privacy-permissions-settings-description": "By turning this on, you acknowledge that you have read and agree to our Privacy Policy regarding how your task data is collected, processed, and protected.", "api-key-can-not-be-empty": "API Key can not be empty!", "api-host-can-not-be-empty": "API Host can not be empty!", "model-type-can-not-be-empty": "Model Type can not be empty!", @@ -67,7 +67,6 @@ "url": "URL", "enter-your-model-type": "Enter your Model Type", "verifying": "Verifying...", - "mcp-and-tools": "MCP & Tools", "add-mcp-server": "Add MCP Server", "market": "Market", @@ -115,7 +114,14 @@ "warning-google-search-not-configured": "Warning: Google Search not configured", "search-functionality-may-be-limited-without-google-api": "Search functionality may be limited without Google API key and Search Engine ID. You can configure these in MCP & Tools settings.", "search-engine": "Search Engine", + "allow-agent-to-take-screenshots": "Allow Agent to Take Screenshots", + "allow-agent-to-take-screenshots-description": "Permit the agent to capture screenshots of your computer screen. This can be used for support, diagnostics, or monitoring purposes. Screenshots may include visible personal information, so please enable with care.", + "allow-agent-to-access-local-software": "Allow Agent to Access Local Software", + "allow-agent-to-access-local-software-description": "Grant the agent permission to interact with and utilize software installed on your local machine. This may be necessary for troubleshooting, running diagnostics, or performing specific tasks.", + "allow-agent-to-access-your-address": "Allow Agent to Access Your Address", + "allow-agent-to-access-your-address-description": "Authorize the agent to view and use your location or address details. This may be required for location-based services or personalized support.", "password-storage": "Password Storage", + "password-storage-description": "Determine how passwords are handled and stored. You can choose to store passwords securely on the device or within the application, or opt out to manually enter them each time. All stored passwords are encrypted.", "notion-mcp-installed-successfully": "Notion MCP installed successfully", "failed-to-install-notion-mcp": "Failed to install Notion MCP", "google-calendar-installed-successfully": "Google Calendar installed successfully", @@ -150,7 +156,6 @@ "reset-success": "Reset successfully!", "reset-failed": "Reset failed!", "select-default-model": "Select Default Model", - "browser-login": "Browser Login", "browser-login-description": "Open a Chrome browser to log in to your accounts. Your login data will be saved locally in a secure profile.", "open-browser-login": "Open Browser for Login", @@ -158,7 +163,6 @@ "browser-opened-successfully": "Browser opened successfully. Please log in to your accounts.", "failed-to-open-browser": "Failed to open browser. Please try again.", "restart-to-apply": "Restart to Apply", - "cookie-manager": "Cookie Manager", "cookie-manager-description": "Manage cookies saved from your browser sessions. Delete cookies for specific sites or all at once.", "refresh": "Refresh", @@ -170,14 +174,12 @@ "login-to-save-cookies": "Use the browser login feature above to save cookies from your accounts.", "cookies-count": "{{count}} cookies", "last-access": "Last access", - "deleting": "Deleting...", "cookies-deleted-successfully": "Successfully deleted cookies for {{domain}}", "failed-to-load-cookies": "Failed to load cookies. Please try again.", "failed-to-delete-cookies": "Failed to delete cookies. Please try again.", "confirm-delete-all-cookies": "Are you sure you want to delete all cookies? This action cannot be undone.", "all-cookies-deleted": "All cookies have been deleted successfully.", "cookie-delete-warning": "Note: Deleting cookies will log you out of the associated websites. You may need to restart the browser to see changes take effect.", - "network-proxy": "Network Proxy", "network-proxy-description": "Configure a proxy server for network requests. This is useful if you need to access external APIs through a proxy.", "proxy-placeholder": "http://127.0.0.1:7890", @@ -185,7 +187,6 @@ "proxy-save-failed": "Failed to save proxy configuration.", "proxy-invalid-url": "Invalid proxy URL. Must start with http://, https://, socks4://, or socks5://.", "proxy-restart-hint": "Restart required to apply proxy changes.", - "cloud-not-available-in-local-proxy": "Cloud version is not available in local proxy mode", "set-as-default": "Set as Default", "api-key-setting": "API Key Setting", @@ -193,11 +194,9 @@ "model-type-setting": "Model Type Setting", "please-select": "Please select", "configuring": "Configuring...", - "models-default-setting-title": "Default setting", "models-default-setting-description": "Pick one of your configured models as the default model for Eigent. It will be applied globally across your workspace.", "models-configuration": "Configuration", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -206,196 +205,20 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - - "account": "Account", - "you-are-currently-signed-in-with": "You are currently signed in with {{email}}", - "manage": "Manage", - "log-out": "Log out", - "language": "Language", - "select-language": "Select language", - "system-default": "System Default", - "appearance": "Appearance", - "dark": "Dark", - "light": "Light", - "transparent": "Transparent", - - "data-privacy": "Data Privacy", - "data-privacy-description": "Eigent is built on a local-first principle to ensure your privacy. Your data remains on your device by default. Cloud features are optional and only use the minimum data necessary to function. For full details, visit our", - "privacy-policy": "Privacy Policy", - "how-we-handle-your-data": "How we handle your data", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "We only use the essential data needed to run your tasks", - "how-we-handle-your-data-line-1": "We only use the essential data needed to run your tasks", - "how-we-handle-your-data-line-1-line-1": "Eigent may capture screenshots to analyze UI elements, read text, and determine the next action, just as you would.", - "how-we-handle-your-data-line-1-line-2": "Eigent may use your mouse and keyboard to access local software and files you specify.", - "how-we-handle-your-data-line-1-line-3": "Only the minimum task data is sent to AI model providers or the third-party integrations you enable; we have zero data-retention", - "how-we-handle-your-data-line-2": "Task files, outputs and screenshots remain in your designated task folder locally.", - "how-we-handle-your-data-line-3": "Credentials are stored locally, encrypted, and used only for approved steps.", - "how-we-handle-your-data-line-4": "Your data is never used to train our AI models without your explicit consent.", - "how-we-handle-your-data-line-5": "We don’t sell your data to third parties.", - "api-key-can-not-be-empty": "API Key can not be empty!", - "api-host-can-not-be-empty": "API Host can not be empty!", - "model-type-can-not-be-empty": "Model Type can not be empty!", - "validate-success": "Validate success", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "The model has been verified to support function calling, which is required to use Eigent.", - "validate-failed": "Validate failed", - "copy": "Copy", - "copied-to-clipboard": "Copied to clipboard", - "failed-to-copy-to-clipboard": "Failed to copy to clipboard", - "endpoint-url-can-not-be-empty": "Endpoint URL can not be empty!", - "verification-failed-please-check-endpoint-url": "Verification failed, please check Endpoint URL", - "eigent-cloud-version": "Eigent Cloud Version", - "you-are-currently-subscribed-to-the": "You are currently subscribed to the", - "discover-more-about-our": "Discover more about our", - "pricing-options": "pricing options", - "credits": "Credits", - "select-model-type": "Select Model Type", - "custom-model": "Custom Model", - "use-your-own-api-keys-or-set-up-a-local-model": "Use your own API keys or set up a local model.", - "verify": "Verify", - "local-model": "Local Model", - "model-platform": "Model Platform", - "model-endpoint-url": "Model Endpoint URL", - "model-type": "Model Type", - "enter-your-local-model-type": "Enter your local model type", - "you-are-on-selft-host-mode": "You are on Selft Host Mode", - "you-are-using-self-hosted-mode": "You're using Self-hosted mode. To get the best performance from this product, please enter the Google Search Key in \"MCP and Tools\" to ensure Eigent works properly.", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "The Google Search Key is essential for delivering accurate search results. Exa Search Key is optional but highly recommended for better performance.", - "close": "Close", - "enter-your-api-key": "Enter your API", - "key": "Key", - "enter-your-api-host": "Enter your API Host", - "url": "URL", - "enter-your-model-type": "Enter your Model Type", - "verifying": "Verifying...", - - "mcp-and-tools": "MCP & Tools", - "add-mcp-server": "Add MCP Server", - "market": "Market", - "tools": "Tools", - "added-external-servers": "Added external servers", - "loading": "Loading...", - "no-mcp-servers": "No MCP servers", - "environmental-variables-required": "Environmental variables required", - "load-failed": "Load failed", - "save-failed": "Save failed", - "invalid-json": "Invalid JSON", - "coming-soon": "Coming Soon", - "uninstall": "Uninstall", - "install": "Install", - "add-your-agent": "Add Your Agent", - "add-a-local-mcp-server-by-providing-a-valid-json-configuration": "Add a local MCP server by providing a valid JSON configuration.", - "learn-more": "Learn more", - "installing": "Installing...", - "edit-mcp-config": "Edit MCP Config", - "name": "Name", - "description": "Description", - "command": "Command", - "args-one-per-line": "Args (one per line)", - "cancel": "Cancel", - "save": "Save", - "confirm-delete": "Confirm Delete", - "are-you-sure-you-want-to-delete": "Are you sure you want to delete", - "deleting": "Deleting...", - "delete": "Delete", - "configure {name} Toolkit": "Configure {{name}} Toolkit", - "get-it-from": "Get it from", - "google-custom-search-api": "Google Custom Search API", - "google-cloud-console": "Google Cloud Console", - "connect": "Connect", - "setting": "Setting", - "all": "All", - "mcp-market": "MCP Market", - "no-mcp-services": "No MCP services", - "loading-more": "Loading more...", - "no-more-mcp-servers": "No more MCP servers", - "search-mcp": "Search MCPs", - "installed": "Installed", - "worker-name-cannot-be-empty": "Worker name cannot be empty", - "worker-name-already-exists": "Worker name already exists", - "warning-google-search-not-configured": "Warning: Google Search not configured", - "search-functionality-may-be-limited-without-google-api": "Search functionality may be limited without Google API key and Search Engine ID. You can configure these in MCP & Tools settings.", - "search-engine": "Search Engine", - "password-storage": "Password Storage", - "notion-mcp-installed-successfully": "Notion MCP installed successfully", - "failed-to-install-notion-mcp": "Failed to install Notion MCP", - "google-calendar-installed-successfully": "Google Calendar installed successfully", - "failed-to-install-google-calendar": "Failed to install Google Calendar", - "notion-workspace-integration": "Notion workspace integration for reading and managing Notion pages", - "google-calendar-integration": "Google Calendar integration for managing events and schedules", - "mcp-server-already-exists": "MCP server \"{{name}}\" already exists", - "google-search": "Google Search", - "select-default-search-engine": "Select default search engine", - "your-own-mcps": "Your own MCPs", - "get-google-search-api": "Get Google Search API", - "get-exa-api": "Get Exa API", - "exa-ai": "Exa AI", - "search-engine-integrations": "Search Engine Integrations", - "configured": "Configured", - "incomplete": "Incomplete", - "not-configured": "Not Configured", - "saving": "Saving...", - "save-changes": "Save Changes", - "enable": "Enable", - "search": "Search", - "test-connection": "Test Connection", - "your-api-keys-are-stored-securely-and-never-shared-externally": "Your API keys are stored securely and never shared externally.", - "this-service-is-public-and-does-not-require-credentials": "This service is public and does not require credentials.", - "this-service-does-not-require-an-api-key": "This service does not require an API key.", - "connection-test-successful": "Connection test successful!", - "connection-test-failed": "Connection test failed.", - "configuration-saved-successfully": "Configuration saved successfully!", - "failed-to-save-configuration": "Failed to save configuration.", - "recommended": "Recommended", - "reset": "Reset", - "reset-success": "Reset successfully!", - "reset-failed": "Reset failed!", - - "browser-login": "Browser Login", - "browser-login-description": "Open a Chrome browser to log in to your accounts. Your login data will be saved locally in a secure profile.", - "open-browser-login": "Open Browser for Login", - "opening-browser": "Opening Browser...", - "browser-opened-successfully": "Browser opened successfully. Please log in to your accounts.", - "failed-to-open-browser": "Failed to open browser. Please try again.", - "restart-to-apply": "Restart to Apply", - - "cookie-manager": "Cookie Manager", - "cookie-manager-description": "Manage cookies saved from your browser sessions. Delete cookies for specific sites or all at once.", - "refresh": "Refresh", - "delete-all": "Delete All", - "search-domains": "Search domains...", - "loading-cookies": "Loading cookies...", - "no-cookies-found": "No cookies found", - "no-matching-domains": "No matching domains", - "login-to-save-cookies": "Use the browser login feature above to save cookies from your accounts.", - "cookies-count": "{{count}} cookies", - "last-access": "Last access", - "deleting": "Deleting...", - "cookies-deleted-successfully": "Successfully deleted cookies for {{domain}}", - "failed-to-load-cookies": "Failed to load cookies. Please try again.", - "failed-to-delete-cookies": "Failed to delete cookies. Please try again.", - "confirm-delete-all-cookies": "Are you sure you want to delete all cookies? This action cannot be undone.", - "all-cookies-deleted": "All cookies have been deleted successfully.", - "cookie-delete-warning": "Note: Deleting cookies will log you out of the associated websites. You may need to restart the browser to see changes take effect.", - - "network-proxy": "Network Proxy", - "network-proxy-description": "Configure a proxy server for network requests. This is useful if you need to access external APIs through a proxy.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "Proxy configuration saved. Restart the app to apply changes.", - "proxy-save-failed": "Failed to save proxy configuration.", - "proxy-invalid-url": "Invalid proxy URL. Must start with http://, https://, socks4://, or socks5://.", - "proxy-restart-hint": "Restart required to apply proxy changes.", - + "agents": "Agents", "preferred-ide": "Preferred IDE", "preferred-ide-description": "Choose which application to use when opening agent project folders.", "system-file-manager": "System File Manager", - "agents": "Agents", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Help Improve Eigent", - "help-improve-eigent-description": "Allow Eigent to collect anonymous error logs and usage data to improve the service. This is optional and can be changed at any time." + "help-improve-eigent-description": "Allow Eigent to collect anonymous error logs and usage data to improve the service. This is optional and can be changed at any time.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "We only use the essential data needed to run your tasks" } diff --git a/src/i18n/locales/es/chat.json b/src/i18n/locales/es/chat.json index 4c57349fe..2c9eebc9a 100644 --- a/src/i18n/locales/es/chat.json +++ b/src/i18n/locales/es/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "Estamos experimentando mucho tráfico. Inténtalo de nuevo en unos momentos.", "new-project": "Nuevo proyecto", "no-reply-received-task-continue": "No se recibió respuesta, la tarea continúa", - "splitting-tasks": "Dividiendo tareas", - "start-task": "Iniciar tarea", - "message-cannot-be-empty": "El mensaje no puede estar vacío", - "remove-file": "Eliminar archivo", - "drop-files-to-attach": "Arrastra archivos para adjuntar", - "expand-input": "Expandir entrada (⌘P)", - "queued-tasks": "Tareas en cola", - "remove-queued-message": "Eliminar mensaje en cola", - "no-agents-added": "No se han agregado agentes", "open-in-ide": "Abrir en IDE", "open-in-vscode": "Abrir en VS Code", "open-in-cursor": "Abrir en Cursor", "open-in-file-manager": "Abrir en el administrador de archivos", "failed-to-open-folder": "No se pudo abrir la carpeta", - "task-completed-card-title": "Tarea completada", - "task-completed-card-subtitle": "Automatiza tu tarea con un desencadenador" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "Arrastra archivos para adjuntar", + "expand-input": "Expandir entrada (⌘P)", + "message-cannot-be-empty": "El mensaje no puede estar vacío", + "no-agents-added": "No se han agregado agentes", + "queued-tasks": "Tareas en cola", + "remove-file": "Eliminar archivo", + "remove-queued-message": "Eliminar mensaje en cola", + "splitting-tasks": "Dividiendo tareas", + "start-task": "Iniciar tarea", + "task-completed-card-subtitle": "Automatiza tu tarea con un desencadenador", + "task-completed-card-title": "Tarea completada" } diff --git a/src/i18n/locales/es/setting.json b/src/i18n/locales/es/setting.json index 926a8e104..8336eff04 100644 --- a/src/i18n/locales/es/setting.json +++ b/src/i18n/locales/es/setting.json @@ -7,67 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "Predeterminado", "profile": "Perfil", - "account": "Cuenta", - "you-are-currently-signed-in-with": "Estás actualmente conectado con {{email}}", - "manage": "Gestionar", - "log-out": "Cerrar sesión", - "language": "Idioma", - "select-language": "Seleccionar idioma", - "system-default": "Sistema predeterminado", - "appearance": "Apariencia", - "dark": "Oscuro", - "light": "Claro", - "transparent": "Transparente", - - "data-privacy": "Privacidad de datos", - "data-privacy-description": "Eigent está construido sobre un principio local-first para garantizar tu privacidad. Tus datos permanecen en tu dispositivo por defecto. Las características en la nube son opcionales y solo utilizan los datos mínimos necesarios para funcionar. Para obtener más detalles, visita nuestra", - "privacy-policy": "Política de privacidad", - "how-we-handle-your-data": "Cómo manejamos tus datos", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Solo utilizamos los datos esenciales necesarios para ejecutar tus tareas", - "how-we-handle-your-data-line-1": "Solo utilizamos los datos esenciales necesarios para ejecutar tus tareas", - "how-we-handle-your-data-line-1-line-1": "Eigent puede capturar capturas de pantalla para analizar elementos de la interfaz de usuario, leer texto y determinar la siguiente acción, como tú.", - "how-we-handle-your-data-line-1-line-2": "Eigent puede usar tu mouse y teclado para acceder a software y archivos locales que especifiques.", - "how-we-handle-your-data-line-1-line-3": "Solo se envían los datos mínimos de las tareas a proveedores de modelos de IA o a las integraciones de terceros que activas; no tenemos ninguna retención de datos", - "how-we-handle-your-data-line-2": "Los archivos de tareas, salidas y capturas de pantalla permanecen en tu carpeta de tareas designada localmente.", - "how-we-handle-your-data-line-3": "Las credenciales se almacenan localmente, encriptadas, y solo se utilizan para pasos aprobados.", - "how-we-handle-your-data-line-4": "Tus datos nunca se utilizan para entrenar nuestros modelos de IA sin tu consentimiento explícito.", - "how-we-handle-your-data-line-5": "No vendemos tus datos a terceros.", - "api-key-can-not-be-empty": "API Key no puede estar vacío!", - "api-host-can-not-be-empty": "API Host no puede estar vacío!", - "model-type-can-not-be-empty": "Model Type no puede estar vacío!", - "validate-success": "Validación exitosa", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "El modelo ha sido verificado para soportar la llamada de funciones, lo que es necesario para usar Eigent.", - "validate-failed": "Validación fallida", - "copy": "Copiar", - "copied-to-clipboard": "Copiado al portapapeles", - "failed-to-copy-to-clipboard": "Error al copiar al portapapeles", - "endpoint-url-can-not-be-empty": "Endpoint URL no puede estar vacío!", - "verification-failed-please-check-endpoint-url": "Verificación fallida, por favor verifique Endpoint URL", - "eigent-cloud-version": "Eigent Cloud Version", - "you-are-currently-subscribed-to-the": "Actualmente estás suscrito a la", - "discover-more-about-our": "Descubre más sobre nuestra", - "pricing-options": "opciones de precios", - "credits": "Créditos", - "select-model-type": "Seleccionar Model Type", - "custom-model": "Modelo personalizado", - "use-your-own-api-keys-or-set-up-a-local-model": "Usa tus propias API keys o configura un modelo local.", - "verify": "Verificar", - "local-model": "Modelo local", - "model-platform": "Plataforma de modelo", - "model-endpoint-url": "URL de endpoint de modelo", - "model-type": "Tipo de modelo", - "enter-your-local-model-type": "Ingresa tu tipo de modelo local", - "you-are-on-selft-host-mode": "Estás en modo Selft Host", - "you-are-using-self-hosted-mode": "Estás usando modo Self-hosted. Para obtener el mejor rendimiento de este producto, por favor ingresa la Clave de Búsqueda de Google en \"MCP y Herramientas\" para asegurar que Eigent funcione correctamente.", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "La Clave de Búsqueda de Google es esencial para entregar resultados de búsqueda precisos. La Clave de Búsqueda de Exa es opcional pero altamente recomendada para mejor rendimiento.", - "close": "Cerrar", - "enter-your-api-key": "Ingresa tu API", - "key": "Key", - "enter-your-api-host": "Ingresa tu API Host", - "url": "URL", - "enter-your-model-type": "Ingresa tu Model Type", - "verifying": "Verificando...", - "account": "Cuenta", "you-are-currently-signed-in-with": "Estás actualmente conectado con {{email}}", "manage": "Gestionar", @@ -79,12 +18,10 @@ "dark": "Oscuro", "light": "Claro", "transparent": "Transparente", - "data-privacy": "Privacidad de datos", "data-privacy-description": "Eigent está construido sobre un principio local-first para garantizar tu privacidad. Tus datos permanecen en tu dispositivo por defecto. Las características en la nube son opcionales y solo utilizan los datos mínimos necesarios para funcionar. Para obtener más detalles, visita nuestra", "privacy-policy": "Política de privacidad", "how-we-handle-your-data": "Cómo manejamos tus datos", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Solo utilizamos los datos esenciales necesarios para ejecutar tus tareas", "how-we-handle-your-data-line-1": "Solo utilizamos los datos esenciales necesarios para ejecutar tus tareas", "how-we-handle-your-data-line-1-line-1": "Eigent puede capturar capturas de pantalla para analizar elementos de la interfaz de usuario, leer texto y determinar la siguiente acción, como tú.", "how-we-handle-your-data-line-1-line-2": "Eigent puede usar tu mouse y teclado para acceder a software y archivos locales que especifiques.", @@ -93,6 +30,8 @@ "how-we-handle-your-data-line-3": "Las credenciales se almacenan localmente, encriptadas, y solo se utilizan para pasos aprobados.", "how-we-handle-your-data-line-4": "Tus datos nunca se utilizan para entrenar nuestros modelos de IA sin tu consentimiento explícito.", "how-we-handle-your-data-line-5": "No vendemos tus datos a terceros.", + "enable-privacy-permissions-settings": "Habilitar ajustes de permisos de privacidad", + "enable-privacy-permissions-settings-description": "Al activar esta opción, aceptas que has leído y aceptado nuestra Política de privacidad respecto a cómo se recopilan, procesan y protegen tus datos de las tareas.", "api-key-can-not-be-empty": "API Key no puede estar vacío!", "api-host-can-not-be-empty": "API Host no puede estar vacío!", "model-type-can-not-be-empty": "Model Type no puede estar vacío!", @@ -101,6 +40,7 @@ "validate-failed": "Validación fallida", "copy": "Copiar", "copied-to-clipboard": "Copiado al portapapeles", + "failed-to-copy-to-clipboard": "Error al copiar al portapapeles", "endpoint-url-can-not-be-empty": "Endpoint URL no puede estar vacío!", "verification-failed-please-check-endpoint-url": "Verificación fallida, por favor verifique Endpoint URL", "eigent-cloud-version": "Eigent Cloud Version", @@ -127,7 +67,6 @@ "url": "URL", "enter-your-model-type": "Ingresa tu Model Type", "verifying": "Verificando...", - "mcp-and-tools": "MCP & Herramientas", "add-mcp-server": "Agregar MCP Server", "market": "Mercado", @@ -175,7 +114,14 @@ "warning-google-search-not-configured": "Advertencia: Google Search no configurado", "search-functionality-may-be-limited-without-google-api": "La funcionalidad de búsqueda puede estar limitada sin la clave API de Google y el ID del motor de búsqueda. Puedes configurar estos en la configuración de MCP y Herramientas.", "search-engine": "Motor de búsqueda", + "allow-agent-to-take-screenshots": "Permitir que el Agente tome capturas de pantalla", + "allow-agent-to-take-screenshots-description": "Permite que el agente capture capturas de pantalla de tu pantalla de computadora. Esto puede usarse para soporte, diagnósticos o propósitos de monitoreo. Las capturas de pantalla pueden incluir información personal visible, así que habilita con cuidado.", + "allow-agent-to-access-local-software": "Permitir que el Agente acceda al software local", + "allow-agent-to-access-local-software-description": "Otorga al agente permiso para interactuar y utilizar software instalado en tu máquina local. Esto puede ser necesario para resolución de problemas, ejecutar diagnósticos o realizar tareas específicas.", + "allow-agent-to-access-your-address": "Permitir que el Agente acceda a tu dirección", + "allow-agent-to-access-your-address-description": "Autoriza al agente a ver y usar los detalles de tu ubicación o dirección. Esto puede ser requerido para servicios basados en ubicación o soporte personalizado.", "password-storage": "Almacenamiento de contraseñas", + "password-storage-description": "Determina cómo se manejan y almacenan las contraseñas. Puedes elegir almacenar contraseñas de forma segura en el dispositivo o dentro de la aplicación, o optar por ingresarlas manualmente cada vez. Todas las contraseñas almacenadas están encriptadas.", "notion-mcp-installed-successfully": "Notion MCP instalado exitosamente", "failed-to-install-notion-mcp": "Error al instalar Notion MCP", "google-calendar-installed-successfully": "Google Calendar instalado exitosamente", @@ -217,7 +163,6 @@ "proxy-save-failed": "Error al guardar la configuración del proxy.", "proxy-invalid-url": "URL de proxy no válida. Debe comenzar con http://, https://, socks4:// o socks5://.", "proxy-restart-hint": "Es necesario reiniciar para aplicar los cambios del proxy.", - "cloud-not-available-in-local-proxy": "La versión en la nube no está disponible en modo proxy local", "set-as-default": "Establecer como predeterminado", "api-key-setting": "Configuración de clave API", @@ -225,11 +170,9 @@ "model-type-setting": "Configuración de tipo de modelo", "please-select": "Por favor seleccione", "configuring": "Configurando...", - "models-default-setting-title": "Configuración predeterminada", "models-default-setting-description": "Elige uno de tus modelos configurados como modelo predeterminado para Eigent. Se aplicará globalmente en tu espacio de trabajo.", "models-configuration": "Configuración", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -238,24 +181,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "Proxy de red", - "network-proxy-description": "Configure un servidor proxy para las solicitudes de red. Esto es útil si necesita acceder a APIs externas a través de un proxy.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "Configuración de proxy guardada. Reinicie la aplicación para aplicar los cambios.", - "proxy-save-failed": "Error al guardar la configuración del proxy.", - "proxy-invalid-url": "URL de proxy no válida. Debe comenzar con http://, https://, socks4:// o socks5://.", - "proxy-restart-hint": "Es necesario reiniciar para aplicar los cambios del proxy.", - "preferred-ide": "IDE preferido", "preferred-ide-description": "Elija qué aplicación usar al abrir las carpetas de proyectos del agente.", "system-file-manager": "Administrador de archivos del sistema", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Ayuda a mejorar Eigent", - "help-improve-eigent-description": "Permite que Eigent recopile registros de errores anónimos y datos de uso para mejorar el servicio. Esto es opcional y se puede cambiar en cualquier momento." + "help-improve-eigent-description": "Permite que Eigent recopile registros de errores anónimos y datos de uso para mejorar el servicio. Esto es opcional y se puede cambiar en cualquier momento.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "Solo utilizamos los datos esenciales necesarios para ejecutar tus tareas" } diff --git a/src/i18n/locales/fr/chat.json b/src/i18n/locales/fr/chat.json index 06fcfbc23..f5d87b272 100644 --- a/src/i18n/locales/fr/chat.json +++ b/src/i18n/locales/fr/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "Nous connaissons un trafic élevé. Veuillez réessayer dans quelques instants.", "new-project": "Nouveau projet", "no-reply-received-task-continue": "Aucune réponse reçue, la tâche continue", - "splitting-tasks": "Division des tâches", - "start-task": "Démarrer la tâche", - "message-cannot-be-empty": "Le message ne peut pas être vide", - "remove-file": "Supprimer le fichier", - "drop-files-to-attach": "Déposez les fichiers à joindre", - "expand-input": "Développer l'entrée (⌘P)", - "queued-tasks": "Tâches en file d'attente", - "remove-queued-message": "Supprimer le message en file d'attente", - "no-agents-added": "Aucun agent ajouté", "open-in-ide": "Ouvrir dans l'IDE", "open-in-vscode": "Ouvrir dans VS Code", "open-in-cursor": "Ouvrir dans Cursor", "open-in-file-manager": "Ouvrir dans le gestionnaire de fichiers", "failed-to-open-folder": "Impossible d'ouvrir le dossier", - "task-completed-card-title": "Tâche terminée", - "task-completed-card-subtitle": "Automatisez votre tâche avec un déclencheur" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "Déposez les fichiers à joindre", + "expand-input": "Développer l'entrée (⌘P)", + "message-cannot-be-empty": "Le message ne peut pas être vide", + "no-agents-added": "Aucun agent ajouté", + "queued-tasks": "Tâches en file d'attente", + "remove-file": "Supprimer le fichier", + "remove-queued-message": "Supprimer le message en file d'attente", + "splitting-tasks": "Division des tâches", + "start-task": "Démarrer la tâche", + "task-completed-card-subtitle": "Automatisez votre tâche avec un déclencheur", + "task-completed-card-title": "Tâche terminée" } diff --git a/src/i18n/locales/fr/setting.json b/src/i18n/locales/fr/setting.json index 2cdbd4234..611520c33 100644 --- a/src/i18n/locales/fr/setting.json +++ b/src/i18n/locales/fr/setting.json @@ -7,67 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "Par défaut", "profile": "Profil", - "account": "Account", - "you-are-currently-signed-in-with": "You are currently signed in with {{email}}", - "manage": "Manage", - "log-out": "Log out", - "language": "Language", - "select-language": "Select language", - "system-default": "System Default", - "appearance": "Appearance", - "dark": "Dark", - "light": "Light", - "transparent": "Transparent", - - "data-privacy": "Data Privacy", - "data-privacy-description": "Eigent is built on a local-first principle to ensure your privacy. Your data remains on your device by default. Cloud features are optional and only use the minimum data necessary to function. For full details, visit our", - "privacy-policy": "Privacy Policy", - "how-we-handle-your-data": "How we handle your data", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "We only use the essential data needed to run your tasks", - "how-we-handle-your-data-line-1": "We only use the essential data needed to run your tasks", - "how-we-handle-your-data-line-1-line-1": "Eigent may capture screenshots to analyze UI elements, read text, and determine the next action, just as you would.", - "how-we-handle-your-data-line-1-line-2": "Eigent may use your mouse and keyboard to access local software and files you specify.", - "how-we-handle-your-data-line-1-line-3": "Only the minimum task data is sent to AI model providers or the third-party integrations you enable; we have zero data-retention", - "how-we-handle-your-data-line-2": "Task files, outputs and screenshots remain in your designated task folder locally.", - "how-we-handle-your-data-line-3": "Credentials are stored locally, encrypted, and used only for approved steps.", - "how-we-handle-your-data-line-4": "Your data is never used to train our AI models without your explicit consent.", - "how-we-handle-your-data-line-5": "We don’t sell your data to third parties.", - "api-key-can-not-be-empty": "API Key can not be empty!", - "api-host-can-not-be-empty": "API Host can not be empty!", - "model-type-can-not-be-empty": "Model Type can not be empty!", - "validate-success": "Validate success", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "The model has been verified to support function calling, which is required to use Eigent.", - "validate-failed": "Validate failed", - "copy": "Copy", - "copied-to-clipboard": "Copied to clipboard", - "failed-to-copy-to-clipboard": "Échec de la copie dans le presse-papiers", - "endpoint-url-can-not-be-empty": "Endpoint URL can not be empty!", - "verification-failed-please-check-endpoint-url": "Verification failed, please check Endpoint URL", - "eigent-cloud-version": "Eigent Cloud Version", - "you-are-currently-subscribed-to-the": "You are currently subscribed to the", - "discover-more-about-our": "Discover more about our", - "pricing-options": "pricing options", - "credits": "Credits", - "select-model-type": "Select Model Type", - "custom-model": "Custom Model", - "use-your-own-api-keys-or-set-up-a-local-model": "Use your own API keys or set up a local model.", - "verify": "Verify", - "local-model": "Local Model", - "model-platform": "Model Platform", - "model-endpoint-url": "Model Endpoint URL", - "model-type": "Model Type", - "enter-your-local-model-type": "Enter your local model type", - "you-are-on-selft-host-mode": "You are on Selft Host Mode", - "you-are-using-self-hosted-mode": "You're using Self-hosted mode. To get the best performance from this product, please enter the Google Search Key in \"MCP and Tools\" to ensure Eigent works properly.", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "The Google Search Key is essential for delivering accurate search results. Exa Search Key is optional but highly recommended for better performance.", - "close": "Close", - "enter-your-api-key": "Enter your API", - "key": "Key", - "enter-your-api-host": "Enter your API Host", - "url": "URL", - "enter-your-model-type": "Enter your Model Type", - "verifying": "Verifying...", - "account": "Account", "you-are-currently-signed-in-with": "You are currently signed in with {{email}}", "manage": "Manage", @@ -79,12 +18,10 @@ "dark": "Dark", "light": "Light", "transparent": "Transparent", - "data-privacy": "Data Privacy", "data-privacy-description": "Eigent is built on a local-first principle to ensure your privacy. Your data remains on your device by default. Cloud features are optional and only use the minimum data necessary to function. For full details, visit our", "privacy-policy": "Privacy Policy", "how-we-handle-your-data": "How we handle your data", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "We only use the essential data needed to run your tasks", "how-we-handle-your-data-line-1": "We only use the essential data needed to run your tasks", "how-we-handle-your-data-line-1-line-1": "Eigent may capture screenshots to analyze UI elements, read text, and determine the next action, just as you would.", "how-we-handle-your-data-line-1-line-2": "Eigent may use your mouse and keyboard to access local software and files you specify.", @@ -93,6 +30,8 @@ "how-we-handle-your-data-line-3": "Credentials are stored locally, encrypted, and used only for approved steps.", "how-we-handle-your-data-line-4": "Your data is never used to train our AI models without your explicit consent.", "how-we-handle-your-data-line-5": "We don’t sell your data to third parties.", + "enable-privacy-permissions-settings": "Enable Privacy Permissions Settings", + "enable-privacy-permissions-settings-description": "By turning this on, you acknowledge that you have read and agree to our Privacy Policy regarding how your task data is collected, processed, and protected.", "api-key-can-not-be-empty": "API Key can not be empty!", "api-host-can-not-be-empty": "API Host can not be empty!", "model-type-can-not-be-empty": "Model Type can not be empty!", @@ -101,6 +40,7 @@ "validate-failed": "Validate failed", "copy": "Copy", "copied-to-clipboard": "Copied to clipboard", + "failed-to-copy-to-clipboard": "Échec de la copie dans le presse-papiers", "endpoint-url-can-not-be-empty": "Endpoint URL can not be empty!", "verification-failed-please-check-endpoint-url": "Verification failed, please check Endpoint URL", "eigent-cloud-version": "Eigent Cloud Version", @@ -127,7 +67,6 @@ "url": "URL", "enter-your-model-type": "Enter your Model Type", "verifying": "Verifying...", - "mcp-and-tools": "MCP & Tools", "add-mcp-server": "Add MCP Server", "market": "Market", @@ -200,7 +139,6 @@ "proxy-save-failed": "Échec de l'enregistrement de la configuration du proxy.", "proxy-invalid-url": "URL de proxy invalide. Doit commencer par http://, https://, socks4:// ou socks5://.", "proxy-restart-hint": "Redémarrage nécessaire pour appliquer les modifications du proxy.", - "cloud-not-available-in-local-proxy": "La version cloud n'est pas disponible en mode proxy local", "set-as-default": "Définir comme défaut", "api-key-setting": "Paramètre de clé API", @@ -208,11 +146,9 @@ "model-type-setting": "Paramètre de type de modèle", "please-select": "Veuillez sélectionner", "configuring": "Configuration...", - "models-default-setting-title": "Paramètre par défaut", "models-default-setting-description": "Choisissez l'un de vos modèles configurés comme modèle par défaut pour Eigent. Il sera appliqué globalement dans votre espace de travail.", "models-configuration": "Configuration", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -221,24 +157,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "Proxy réseau", - "network-proxy-description": "Configurez un serveur proxy pour les requêtes réseau. Utile si vous devez accéder à des API externes via un proxy.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "Configuration du proxy enregistrée. Redémarrez l'application pour appliquer les modifications.", - "proxy-save-failed": "Échec de l'enregistrement de la configuration du proxy.", - "proxy-invalid-url": "URL de proxy invalide. Doit commencer par http://, https://, socks4:// ou socks5://.", - "proxy-restart-hint": "Redémarrage nécessaire pour appliquer les modifications du proxy.", - "preferred-ide": "IDE préféré", "preferred-ide-description": "Choisissez l'application à utiliser lors de l'ouverture des dossiers de projets d'agent.", "system-file-manager": "Gestionnaire de fichiers système", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Aidez à améliorer Eigent", - "help-improve-eigent-description": "Autorisez Eigent à collecter des journaux d'erreurs anonymes et des données d'utilisation pour améliorer le service. Ceci est facultatif et peut être modifié à tout moment." + "help-improve-eigent-description": "Autorisez Eigent à collecter des journaux d'erreurs anonymes et des données d'utilisation pour améliorer le service. Ceci est facultatif et peut être modifié à tout moment.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "We only use the essential data needed to run your tasks" } diff --git a/src/i18n/locales/it/chat.json b/src/i18n/locales/it/chat.json index 59f0e1e26..af6c118be 100644 --- a/src/i18n/locales/it/chat.json +++ b/src/i18n/locales/it/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "Stiamo riscontrando un traffico elevato. Riprova tra qualche istante.", "new-project": "Nuovo Progetto", "no-reply-received-task-continue": "Nessuna risposta ricevuta, il compito continua", - "splitting-tasks": "Suddivisione dei compiti", - "start-task": "Avvia compito", - "message-cannot-be-empty": "Il messaggio non può essere vuoto", - "remove-file": "Rimuovi file", - "drop-files-to-attach": "Trascina i file da allegare", - "expand-input": "Espandi input (⌘P)", - "queued-tasks": "Compiti in coda", - "remove-queued-message": "Rimuovi messaggio in coda", - "no-agents-added": "Nessun agente aggiunto", "open-in-ide": "Apri in IDE", "open-in-vscode": "Apri in VS Code", "open-in-cursor": "Apri in Cursor", "open-in-file-manager": "Apri nel gestore file", "failed-to-open-folder": "Impossibile aprire la cartella", - "task-completed-card-title": "Compito completato", - "task-completed-card-subtitle": "Automatizza il tuo compito con un trigger" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "Trascina i file da allegare", + "expand-input": "Espandi input (⌘P)", + "message-cannot-be-empty": "Il messaggio non può essere vuoto", + "no-agents-added": "Nessun agente aggiunto", + "queued-tasks": "Compiti in coda", + "remove-file": "Rimuovi file", + "remove-queued-message": "Rimuovi messaggio in coda", + "splitting-tasks": "Suddivisione dei compiti", + "start-task": "Avvia compito", + "task-completed-card-subtitle": "Automatizza il tuo compito con un trigger", + "task-completed-card-title": "Compito completato" } diff --git a/src/i18n/locales/it/setting.json b/src/i18n/locales/it/setting.json index 68d6db58f..b9b220e17 100644 --- a/src/i18n/locales/it/setting.json +++ b/src/i18n/locales/it/setting.json @@ -7,67 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "Predefinito", "profile": "Profilo", - "account": "Account", - "you-are-currently-signed-in-with": "Sei attualmente connesso con {{email}}", - "manage": "Gestisci", - "log-out": "Esci", - "language": "Lingua", - "select-language": "Seleziona lingua", - "system-default": "Predefinito di sistema", - "appearance": "Aspetto", - "dark": "Scuro", - "light": "Chiaro", - "transparent": "Trasparente", - - "data-privacy": "Privacy dei dati", - "data-privacy-description": "Eigent è costruito su un principio local-first per garantire la tua privacy. I tuoi dati rimangono sul tuo dispositivo per impostazione predefinita. Le funzionalità cloud sono opzionali e utilizzano solo i dati minimi necessari per funzionare. Per tutti i dettagli, visita la nostra", - "privacy-policy": "Informativa sulla privacy", - "how-we-handle-your-data": "Come gestiamo i tuoi dati", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Utilizziamo solo i dati essenziali necessari per eseguire le tue attività", - "how-we-handle-your-data-line-1": "Utilizziamo solo i dati essenziali necessari per eseguire le tue attività", - "how-we-handle-your-data-line-1-line-1": "Eigent può acquisire screenshot per analizzare elementi dell'interfaccia utente, leggere testo e determinare l'azione successiva, proprio come faresti tu.", - "how-we-handle-your-data-line-1-line-2": "Eigent può utilizzare il tuo mouse e la tua tastiera per accedere a software e file locali da te specificati.", - "how-we-handle-your-data-line-1-line-3": "Solo i dati minimi necessari per l'attività vengono inviati ai fornitori di modelli AI o alle integrazioni di terze parti da te abilitate; non abbiamo alcuna conservazione dei dati", - "how-we-handle-your-data-line-2": "I file delle attività, gli output e gli screenshot rimangono nella tua cartella attività designata localmente.", - "how-we-handle-your-data-line-3": "Le credenziali sono archiviate localmente, crittografate e utilizzate solo per i passaggi approvati.", - "how-we-handle-your-data-line-4": "I tuoi dati non vengono mai utilizzati per addestrare i nostri modelli AI senza il tuo esplicito consenso.", - "how-we-handle-your-data-line-5": "Non vendiamo i tuoi dati a terzi.", - "api-key-can-not-be-empty": "La chiave API non può essere vuota!", - "api-host-can-not-be-empty": "L'host API non può essere vuoto!", - "model-type-can-not-be-empty": "Il tipo di modello non può essere vuoto!", - "validate-success": "Validazione riuscita", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "Il modello è stato verificato per supportare la chiamata di funzione, necessaria per utilizzare Eigent.", - "validate-failed": "Validazione fallita", - "copy": "Copia", - "copied-to-clipboard": "Copiato negli appunti", - "failed-to-copy-to-clipboard": "Impossibile copiare negli appunti", - "endpoint-url-can-not-be-empty": "L'URL dell'endpoint non può essere vuoto!", - "verification-failed-please-check-endpoint-url": "Verifica fallita, controlla l'URL dell'endpoint", - "eigent-cloud-version": "Versione cloud di Eigent", - "you-are-currently-subscribed-to-the": "Sei attualmente iscritto al", - "discover-more-about-our": "Scopri di più sulle nostre", - "pricing-options": "opzioni di prezzo", - "credits": "Crediti", - "select-model-type": "Seleziona tipo di modello", - "custom-model": "Modello personalizzato", - "use-your-own-api-keys-or-set-up-a-local-model": "Usa le tue chiavi API o imposta un modello locale.", - "verify": "Verifica", - "local-model": "Modello locale", - "model-platform": "Piattaforma modello", - "model-endpoint-url": "URL endpoint modello", - "model-type": "Tipo modello", - "enter-your-local-model-type": "Inserisci il tuo tipo di modello locale", - "you-are-on-selft-host-mode": "Sei in modalità Self Host", - "you-are-using-self-hosted-mode": "Stai usando la modalità Self-hosted. Per ottenere le migliori prestazioni da questo prodotto, inserisci la chiave di ricerca Google in \"MCP e Strumenti\" per garantire il corretto funzionamento di Eigent.", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "La chiave di ricerca Google è essenziale per fornire risultati di ricerca accurati. La chiave di ricerca Exa è opzionale ma altamente raccomandata per prestazioni migliori.", - "close": "Chiudi", - "enter-your-api-key": "Inserisci la tua API", - "key": "Chiave", - "enter-your-api-host": "Inserisci il tuo host API", - "url": "URL", - "enter-your-model-type": "Inserisci il tuo tipo di modello", - "verifying": "Verifica in corso...", - "account": "Account", "you-are-currently-signed-in-with": "Sei attualmente connesso con {{email}}", "manage": "Gestisci", @@ -79,12 +18,10 @@ "dark": "Scuro", "light": "Chiaro", "transparent": "Trasparente", - "data-privacy": "Privacy dei dati", "data-privacy-description": "Eigent è costruito su un principio local-first per garantire la tua privacy. I tuoi dati rimangono sul tuo dispositivo per impostazione predefinita. Le funzionalità cloud sono opzionali e utilizzano solo i dati minimi necessari per funzionare. Per tutti i dettagli, visita la nostra", "privacy-policy": "Informativa sulla privacy", "how-we-handle-your-data": "Come gestiamo i tuoi dati", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Utilizziamo solo i dati essenziali necessari per eseguire le tue attività", "how-we-handle-your-data-line-1": "Utilizziamo solo i dati essenziali necessari per eseguire le tue attività", "how-we-handle-your-data-line-1-line-1": "Eigent può acquisire screenshot per analizzare elementi dell'interfaccia utente, leggere testo e determinare l'azione successiva, proprio come faresti tu.", "how-we-handle-your-data-line-1-line-2": "Eigent può utilizzare il tuo mouse e la tua tastiera per accedere a software e file locali da te specificati.", @@ -93,6 +30,8 @@ "how-we-handle-your-data-line-3": "Le credenziali sono archiviate localmente, crittografate e utilizzate solo per i passaggi approvati.", "how-we-handle-your-data-line-4": "I tuoi dati non vengono mai utilizzati per addestrare i nostri modelli AI senza il tuo esplicito consenso.", "how-we-handle-your-data-line-5": "Non vendiamo i tuoi dati a terzi.", + "enable-privacy-permissions-settings": "Abilita impostazioni di autorizzazione per la privacy", + "enable-privacy-permissions-settings-description": "Attivando questa opzione, riconosci di aver letto e accettato la nostra Informativa sulla privacy riguardo a come i tuoi dati di attività vengono raccolti, elaborati e protetti.", "api-key-can-not-be-empty": "La chiave API non può essere vuota!", "api-host-can-not-be-empty": "L'host API non può essere vuoto!", "model-type-can-not-be-empty": "Il tipo di modello non può essere vuoto!", @@ -101,6 +40,7 @@ "validate-failed": "Validazione fallita", "copy": "Copia", "copied-to-clipboard": "Copiato negli appunti", + "failed-to-copy-to-clipboard": "Impossibile copiare negli appunti", "endpoint-url-can-not-be-empty": "L'URL dell'endpoint non può essere vuoto!", "verification-failed-please-check-endpoint-url": "Verifica fallita, controlla l'URL dell'endpoint", "eigent-cloud-version": "Versione cloud di Eigent", @@ -127,7 +67,6 @@ "url": "URL", "enter-your-model-type": "Inserisci il tuo tipo di modello", "verifying": "Verifica in corso...", - "mcp-and-tools": "MCP e Strumenti", "add-mcp-server": "Aggiungi server MCP", "market": "Mercato", @@ -175,7 +114,14 @@ "warning-google-search-not-configured": "Avviso: Google Search non configurato", "search-functionality-may-be-limited-without-google-api": "La funzionalità di ricerca può essere limitata senza la chiave API Google e l'ID del motore di ricerca. Puoi configurare questi nelle impostazioni MCP e Strumenti.", "search-engine": "Motore di ricerca", + "allow-agent-to-take-screenshots": "Consenti all'Agente di fare screenshot", + "allow-agent-to-take-screenshots-description": "Consenti all'agente di acquisire screenshot del tuo schermo del computer. Questo può essere utilizzato per supporto, diagnostica o scopi di monitoraggio. Gli screenshot possono includere informazioni personali visibili, quindi abilita con cautela.", + "allow-agent-to-access-local-software": "Consenti all'Agente di accedere al software locale", + "allow-agent-to-access-local-software-description": "Concedi all'agente il permesso di interagire e utilizzare software installato sulla tua macchina locale. Questo può essere necessario per la risoluzione dei problemi, l'esecuzione di diagnostica o l'esecuzione di attività specifiche.", + "allow-agent-to-access-your-address": "Consenti all'Agente di accedere al tuo indirizzo", + "allow-agent-to-access-your-address-description": "Autorizza l'agente a visualizzare e utilizzare i dettagli della tua posizione o indirizzo. Questo può essere richiesto per servizi basati sulla posizione o supporto personalizzato.", "password-storage": "Archiviazione password", + "password-storage-description": "Determina come vengono gestite e archiviate le password. Puoi scegliere di archiviare le password in modo sicuro sul dispositivo o all'interno dell'applicazione, o scegliere di inserirle manualmente ogni volta. Tutte le password archiviate sono crittografate.", "notion-mcp-installed-successfully": "Notion MCP installato con successo", "failed-to-install-notion-mcp": "Impossibile installare Notion MCP", "google-calendar-installed-successfully": "Google Calendar installato con successo", @@ -217,7 +163,6 @@ "proxy-save-failed": "Impossibile salvare la configurazione del proxy.", "proxy-invalid-url": "URL proxy non valido. Deve iniziare con http://, https://, socks4:// o socks5://.", "proxy-restart-hint": "Riavvio necessario per applicare le modifiche del proxy.", - "cloud-not-available-in-local-proxy": "La versione cloud non è disponibile in modalità proxy locale", "set-as-default": "Imposta come predefinito", "api-key-setting": "Impostazione chiave API", @@ -225,11 +170,9 @@ "model-type-setting": "Impostazione tipo di modello", "please-select": "Seleziona", "configuring": "Configurazione in corso...", - "models-default-setting-title": "Impostazione predefinita", "models-default-setting-description": "Seleziona uno dei modelli configurati come modello predefinito per Eigent. Verrà applicato globalmente nel tuo spazio di lavoro.", "models-configuration": "Configurazione", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -238,24 +181,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "Proxy di rete", - "network-proxy-description": "Configura un server proxy per le richieste di rete. Utile se devi accedere ad API esterne tramite un proxy.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "Configurazione proxy salvata. Riavvia l'app per applicare le modifiche.", - "proxy-save-failed": "Impossibile salvare la configurazione del proxy.", - "proxy-invalid-url": "URL proxy non valido. Deve iniziare con http://, https://, socks4:// o socks5://.", - "proxy-restart-hint": "Riavvio necessario per applicare le modifiche del proxy.", - "preferred-ide": "IDE preferito", "preferred-ide-description": "Scegli quale applicazione utilizzare per aprire le cartelle dei progetti dell'agente.", "system-file-manager": "Gestione file di sistema", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Aiuta a migliorare Eigent", - "help-improve-eigent-description": "Consenti a Eigent di raccogliere log di errori anonimi e dati di utilizzo per migliorare il servizio. Questo è facoltativo e può essere modificato in qualsiasi momento." + "help-improve-eigent-description": "Consenti a Eigent di raccogliere log di errori anonimi e dati di utilizzo per migliorare il servizio. Questo è facoltativo e può essere modificato in qualsiasi momento.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "Utilizziamo solo i dati essenziali necessari per eseguire le tue attività" } diff --git a/src/i18n/locales/ja/chat.json b/src/i18n/locales/ja/chat.json index 2cae0f472..e0ca2b9c1 100644 --- a/src/i18n/locales/ja/chat.json +++ b/src/i18n/locales/ja/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "トラフィックが多いため、しばらくしてからもう一度お試しください。", "new-project": "新規プロジェクト", "no-reply-received-task-continue": "応答がないため、タスクを続行します", - "splitting-tasks": "タスク分割", - "start-task": "タスク開始", - "message-cannot-be-empty": "メッセージは空にできません", - "remove-file": "ファイルを削除", - "drop-files-to-attach": "ファイルをドロップして添付", - "expand-input": "入力を展開 (⌘P)", - "queued-tasks": "キューに入れたタスク", - "remove-queued-message": "キューに入れたメッセージを削除", - "no-agents-added": "エージェントが追加されていません", "open-in-ide": "IDEで開く", "open-in-vscode": "VS Codeで開く", "open-in-cursor": "Cursorで開く", "open-in-file-manager": "ファイルマネージャーで開く", "failed-to-open-folder": "フォルダを開けませんでした", - "task-completed-card-title": "タスク完了", - "task-completed-card-subtitle": "トリガーでタスクを自動化" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "ファイルをドロップして添付", + "expand-input": "入力を展開 (⌘P)", + "message-cannot-be-empty": "メッセージは空にできません", + "no-agents-added": "エージェントが追加されていません", + "queued-tasks": "キューに入れたタスク", + "remove-file": "ファイルを削除", + "remove-queued-message": "キューに入れたメッセージを削除", + "splitting-tasks": "タスク分割", + "start-task": "タスク開始", + "task-completed-card-subtitle": "トリガーでタスクを自動化", + "task-completed-card-title": "タスク完了" } diff --git a/src/i18n/locales/ja/setting.json b/src/i18n/locales/ja/setting.json index a9ecb59d2..673500f5f 100644 --- a/src/i18n/locales/ja/setting.json +++ b/src/i18n/locales/ja/setting.json @@ -7,67 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "デフォルト", "profile": "プロフィール", - "account": "アカウント", - "you-are-currently-signed-in-with": "{{email}}で現在サインインしています", - "manage": "管理", - "log-out": "ログアウト", - "language": "言語", - "select-language": "言語を選択", - "system-default": "システムデフォルト", - "appearance": "外観", - "dark": "ダーク", - "light": "ライト", - "transparent": "透明", - - "data-privacy": "データプライバシー", - "data-privacy-description": "Eigentはプライバシーを確保するためにローカルファーストの原則に基づいて構築されています。デフォルトでは、データはお客様のデバイスに残ります。クラウド機能はオプションであり、機能するために必要な最小限のデータのみを使用します。詳細については、当社の", - "privacy-policy": "プライバシーポリシー", - "how-we-handle-your-data": "データの取り扱い方法", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "タスクを実行するために必要な最小限のデータのみを使用します", - "how-we-handle-your-data-line-1": "タスクを実行するために必要な最小限のデータのみを使用します", - "how-we-handle-your-data-line-1-line-1": "Eigentは、UI要素を分析し、テキストを読み取り、次のアクションを決定するために、お客様が行うのと同じようにスクリーンショットをキャプチャする場合があります。", - "how-we-handle-your-data-line-1-line-2": "Eigentは、指定したローカルソフトウェアおよびファイルにアクセスするために、マウスとキーボードを使用する場合があります。", - "how-we-handle-your-data-line-1-line-3": "有効にしたAIモデルプロバイダーまたはサードパーティ統合に送信されるのは、タスクの最小限のデータのみです。データ保持はありません。", - "how-we-handle-your-data-line-2": "タスクファイル、出力、およびスクリーンショットは、ローカルの指定されたタスクフォルダに残ります。", - "how-we-handle-your-data-line-3": "認証情報はローカルに保存され、暗号化され、承認されたステップにのみ使用されます。", - "how-we-handle-your-data-line-4": "お客様の明示的な同意なしに、お客様のデータが当社のAIモデルのトレーニングに使用されることはありません。", - "how-we-handle-your-data-line-5": "お客様のデータを第三者に販売することはありません。", - "api-key-can-not-be-empty": "APIキーは空にできません!", - "api-host-can-not-be-empty": "APIホストは空にできません!", - "model-type-can-not-be-empty": "モデルタイプは空にできません!", - "validate-success": "検証成功", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "モデルは関数呼び出しをサポートしていることが確認されました。これはEigentの使用に必要です。", - "validate-failed": "検証失敗", - "copy": "コピー", - "copied-to-clipboard": "クリップボードにコピーしました", - "failed-to-copy-to-clipboard": "クリップボードへのコピーに失敗しました", - "endpoint-url-can-not-be-empty": "エンドポイントURLは空にできません!", - "verification-failed-please-check-endpoint-url": "検証に失敗しました。エンドポイントURLを確認してください", - "eigent-cloud-version": "Eigentクラウドバージョン", - "you-are-currently-subscribed-to-the": "現在、次のプランに登録しています", - "discover-more-about-our": "当社の", - "pricing-options": "料金オプション", - "credits": "クレジット", - "select-model-type": "モデルタイプを選択", - "custom-model": "カスタムモデル", - "use-your-own-api-keys-or-set-up-a-local-model": "独自のAPIキーを使用するか、ローカルモデルを設定します。", - "verify": "検証", - "local-model": "ローカルモデル", - "model-platform": "モデルプラットフォーム", - "model-endpoint-url": "モデルエンドポイントURL", - "model-type": "モデルタイプ", - "enter-your-local-model-type": "ローカルモデルタイプを入力", - "you-are-on-selft-host-mode": "セルフホストモードです", - "you-are-using-self-hosted-mode": "セルフホストモードを使用しています。この製品を最大限に活用するには、「MCP & ツール」にGoogle検索キーを入力して、Eigentが正しく機能するようにしてください。", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "Google検索キーは、正確な検索結果を提供するために不可欠です。Exa検索キーはオプションですが、パフォーマンス向上のために強く推奨されます。", - "close": "閉じる", - "enter-your-api-key": "APIキーを入力", - "key": "キー", - "enter-your-api-host": "APIホストを入力", - "url": "URL", - "enter-your-model-type": "モデルタイプを入力", - "verifying": "検証中...", - "account": "アカウント", "you-are-currently-signed-in-with": "{{email}}で現在サインインしています", "manage": "管理", @@ -79,12 +18,10 @@ "dark": "ダーク", "light": "ライト", "transparent": "透明", - "data-privacy": "データプライバシー", "data-privacy-description": "Eigentはプライバシーを確保するためにローカルファーストの原則に基づいて構築されています。デフォルトでは、データはお客様のデバイスに残ります。クラウド機能はオプションであり、機能するために必要な最小限のデータのみを使用します。詳細については、当社の", "privacy-policy": "プライバシーポリシー", "how-we-handle-your-data": "データの取り扱い方法", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "タスクを実行するために必要な最小限のデータのみを使用します", "how-we-handle-your-data-line-1": "タスクを実行するために必要な最小限のデータのみを使用します", "how-we-handle-your-data-line-1-line-1": "Eigentは、UI要素を分析し、テキストを読み取り、次のアクションを決定するために、お客様が行うのと同じようにスクリーンショットをキャプチャする場合があります。", "how-we-handle-your-data-line-1-line-2": "Eigentは、指定したローカルソフトウェアおよびファイルにアクセスするために、マウスとキーボードを使用する場合があります。", @@ -93,6 +30,8 @@ "how-we-handle-your-data-line-3": "認証情報はローカルに保存され、暗号化され、承認されたステップにのみ使用されます。", "how-we-handle-your-data-line-4": "お客様の明示的な同意なしに、お客様のデータが当社のAIモデルのトレーニングに使用されることはありません。", "how-we-handle-your-data-line-5": "お客様のデータを第三者に販売することはありません。", + "enable-privacy-permissions-settings": "プライバシー権限設定を有効にする", + "enable-privacy-permissions-settings-description": "これをオンにすることで、タスクデータの収集、処理、保護方法に関するプライバシーポリシーを読み、同意したことを認めます。", "api-key-can-not-be-empty": "APIキーは空にできません!", "api-host-can-not-be-empty": "APIホストは空にできません!", "model-type-can-not-be-empty": "モデルタイプは空にできません!", @@ -128,7 +67,6 @@ "url": "URL", "enter-your-model-type": "モデルタイプを入力", "verifying": "検証中...", - "mcp-and-tools": "MCP & ツール", "add-mcp-server": "MCPサーバーを追加", "market": "マーケット", @@ -176,7 +114,14 @@ "warning-google-search-not-configured": "警告:Google検索が設定されていません", "search-functionality-may-be-limited-without-google-api": "Google APIキーと検索エンジンIDがないと、検索機能が制限される可能性があります。MCP & ツール設定でこれらを設定できます。", "search-engine": "検索エンジン", + "allow-agent-to-take-screenshots": "エージェントにスクリーンショットを撮ることを許可", + "allow-agent-to-take-screenshots-description": "エージェントがコンピューター画面のスクリーンショットをキャプチャすることを許可します。これは、サポート、診断、または監視目的で使用できます。スクリーンショットには個人情報が含まれる可能性があるため、注意して有効にしてください。", + "allow-agent-to-access-local-software": "エージェントにローカルソフトウェアへのアクセスを許可", + "allow-agent-to-access-local-software-description": "エージェントに、ローカルマシンにインストールされたソフトウェアと対話し、使用する権限を付与します。これは、トラブルシューティング、診断の実行、または特定のタスクの実行に必要になる場合があります。", + "allow-agent-to-access-your-address": "エージェントにあなたの住所へのアクセスを許可", + "allow-agent-to-access-your-address-description": "エージェントがあなたの場所や住所の詳細を表示し、使用することを許可します。これは、位置ベースのサービスやパーソナライズされたサポートに必要になる場合があります。", "password-storage": "パスワードストレージ", + "password-storage-description": "パスワードの処理と保存方法を決定します。デバイス上またはアプリケーション内でパスワードを安全に保存するか、毎回手動で入力するかを選択できます。保存されたすべてのパスワードは暗号化されています。", "notion-mcp-installed-successfully": "Notion MCPが正常にインストールされました", "failed-to-install-notion-mcp": "Notion MCPのインストールに失敗しました", "google-calendar-installed-successfully": "Googleカレンダーが正常にインストールされました", @@ -218,7 +163,6 @@ "proxy-save-failed": "プロキシ設定の保存に失敗しました。", "proxy-invalid-url": "無効なプロキシURLです。http://、https://、socks4://、またはsocks5://で始まる必要があります。", "proxy-restart-hint": "プロキシの変更を適用するには再起動が必要です。", - "cloud-not-available-in-local-proxy": "ローカルプロキシモードではクラウド版は利用できません", "set-as-default": "デフォルトに設定", "api-key-setting": "APIキー設定", @@ -226,11 +170,9 @@ "model-type-setting": "モデルタイプ設定", "please-select": "選択してください", "configuring": "設定中...", - "models-default-setting-title": "デフォルト設定", "models-default-setting-description": "設定済みモデルの中から、Eigent のデフォルトモデルを1つ選択します。ワークスペース全体にグローバルに適用されます。", "models-configuration": "構成", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -239,24 +181,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "ネットワークプロキシ", - "network-proxy-description": "ネットワークリクエスト用のプロキシサーバーを設定します。プロキシ経由で外部APIにアクセスする必要がある場合に便利です。", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "プロキシ設定が保存されました。変更を適用するにはアプリを再起動してください。", - "proxy-save-failed": "プロキシ設定の保存に失敗しました。", - "proxy-invalid-url": "無効なプロキシURLです。http://、https://、socks4://、またはsocks5://で始まる必要があります。", - "proxy-restart-hint": "プロキシの変更を適用するには再起動が必要です。", - "preferred-ide": "優先IDE", "preferred-ide-description": "エージェントプロジェクトフォルダを開くときに使用するアプリケーションを選択します。", "system-file-manager": "システムファイルマネージャー", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Eigentの改善に協力する", - "help-improve-eigent-description": "サービス向上のため、Eigentが匿名のエラーログと使用状況データを収集することを許可します。これは任意であり、いつでも変更できます。" + "help-improve-eigent-description": "サービス向上のため、Eigentが匿名のエラーログと使用状況データを収集することを許可します。これは任意であり、いつでも変更できます。", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "タスクを実行するために必要な最小限のデータのみを使用します" } diff --git a/src/i18n/locales/ko/chat.json b/src/i18n/locales/ko/chat.json index 72fe22d26..92665f5ea 100644 --- a/src/i18n/locales/ko/chat.json +++ b/src/i18n/locales/ko/chat.json @@ -65,5 +65,10 @@ "open-in-vscode": "VS Code에서 열기", "open-in-cursor": "Cursor에서 열기", "open-in-file-manager": "파일 관리자에서 열기", - "failed-to-open-folder": "폴더를 열 수 없습니다" + "failed-to-open-folder": "폴더를 열 수 없습니다", + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings" } diff --git a/src/i18n/locales/ko/setting.json b/src/i18n/locales/ko/setting.json index 7566dca35..798563200 100644 --- a/src/i18n/locales/ko/setting.json +++ b/src/i18n/locales/ko/setting.json @@ -7,67 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "기본값", "profile": "프로필", - "account": "계정", - "you-are-currently-signed-in-with": "{{email}} 계정으로 로그인되어 있습니다.", - "manage": "관리", - "log-out": "로그아웃", - "language": "언어", - "select-language": "언어 선택", - "system-default": "시스템 기본값", - "appearance": "테마", - "dark": "다크", - "light": "라이트", - "transparent": "투명", - - "data-privacy": "데이터 개인정보 보호", - "data-privacy-description": "Eigent는 개인정보 보호를 위해 로컬 우선 원칙을 기반으로 구축되었습니다. 기본적으로 데이터는 사용자의 기기에 남아 있습니다. 클라우드 기능은 선택 사항이며 작동에 필요한 최소한의 데이터만 사용합니다. 자세한 내용은 당사의", - "privacy-policy": "개인정보 처리방침", - "how-we-handle-your-data": "데이터 처리 방식", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "작업 실행에 필요한 필수 데이터만 사용합니다", - "how-we-handle-your-data-line-1": "작업 실행에 필요한 필수 데이터만 사용합니다", - "how-we-handle-your-data-line-1-line-1": "Eigent는 UI 요소를 분석하고 텍스트를 읽고 다음 작업을 결정하기 위해 스크린샷을 캡처할 수 있습니다. 사용자가 하는 방식과 같습니다.", - "how-we-handle-your-data-line-1-line-2": "Eigent는 사용자가 지정한 로컬 소프트웨어 및 파일에 액세스하기 위해 마우스와 키보드를 사용할 수 있습니다.", - "how-we-handle-your-data-line-1-line-3": "AI 모델 제공업체 또는 사용자가 활성화한 타사 통합에 전송되는 데이터는 최소한의 작업 데이터뿐이며, 데이터 보존은 전혀 없습니다.", - "how-we-handle-your-data-line-2": "작업 파일, 출력 및 스크린샷은 로컬의 지정된 작업 폴더에 유지됩니다.", - "how-we-handle-your-data-line-3": "자격 증명은 로컬에 암호화되어 저장되며 승인된 단계에만 사용됩니다.", - "how-we-handle-your-data-line-4": "귀하의 명시적인 동의 없이 귀하의 데이터는 당사 AI 모델을 학습시키는 데 사용되지 않습니다.", - "how-we-handle-your-data-line-5": "귀하의 데이터를 제3자에게 판매하지 않습니다.", - "api-key-can-not-be-empty": "API 키는 비워둘 수 없습니다!", - "api-host-can-not-be-empty": "API 호스트는 비워둘 수 없습니다!", - "model-type-can-not-be-empty": "모델 유형은 비워둘 수 없습니다!", - "validate-success": "유효성 검사 성공", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "모델이 함수 호출을 지원하는 것으로 확인되었습니다. 이는 Eigent를 사용하는 데 필요합니다.", - "validate-failed": "유효성 검사 실패", - "copy": "복사", - "copied-to-clipboard": "클립보드에 복사됨", - "failed-to-copy-to-clipboard": "클립보드로 복사하지 못했습니다", - "endpoint-url-can-not-be-empty": "엔드포인트 URL은 비워둘 수 없습니다!", - "verification-failed-please-check-endpoint-url": "확인 실패, 엔드포인트 URL을 확인하세요", - "eigent-cloud-version": "Eigent 클라우드 버전", - "you-are-currently-subscribed-to-the": "현재 다음 플랜을 구독 중입니다.", - "discover-more-about-our": "당사의", - "pricing-options": "가격 옵션", - "credits": "크레딧", - "select-model-type": "모델 유형 선택", - "custom-model": "사용자 정의 모델", - "use-your-own-api-keys-or-set-up-a-local-model": "자신의 API 키를 사용하거나 로컬 모델을 설정하십시오.", - "verify": "확인", - "local-model": "로컬 모델", - "model-platform": "모델 플랫폼", - "model-endpoint-url": "모델 엔드포인트 URL", - "model-type": "모델 유형", - "enter-your-local-model-type": "로컬 모델 유형 입력", - "you-are-on-selft-host-mode": "셀프 호스트 모드입니다.", - "you-are-using-self-hosted-mode": "셀프 호스트 모드를 사용 중입니다. 이 제품의 최적 성능을 얻으려면 \"MCP 및 도구\"에 Google 검색 키를 입력하여 Eigent가 올바르게 작동하도록 하세요.", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "Google 검색 키는 정확한 검색 결과를 제공하는 데 필수적입니다. Exa 검색 키는 선택 사항이지만 더 나은 성능을 위해 강력히 권장됩니다.", - "close": "닫기", - "enter-your-api-key": "API 키 입력", - "key": "키", - "enter-your-api-host": "API 호스트 입력", - "url": "URL", - "enter-your-model-type": "모델 유형 입력", - "verifying": "확인 중...", - "account": "계정", "you-are-currently-signed-in-with": "{{email}} 계정으로 로그인되어 있습니다.", "manage": "관리", @@ -79,12 +18,10 @@ "dark": "다크", "light": "라이트", "transparent": "투명", - "data-privacy": "데이터 개인정보 보호", "data-privacy-description": "Eigent는 개인정보 보호를 위해 로컬 우선 원칙을 기반으로 구축되었습니다. 기본적으로 데이터는 사용자의 기기에 남아 있습니다. 클라우드 기능은 선택 사항이며 작동에 필요한 최소한의 데이터만 사용합니다. 자세한 내용은 당사의", "privacy-policy": "개인정보 처리방침", "how-we-handle-your-data": "데이터 처리 방식", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "작업 실행에 필요한 필수 데이터만 사용합니다", "how-we-handle-your-data-line-1": "작업 실행에 필요한 필수 데이터만 사용합니다", "how-we-handle-your-data-line-1-line-1": "Eigent는 UI 요소를 분석하고 텍스트를 읽고 다음 작업을 결정하기 위해 스크린샷을 캡처할 수 있습니다. 사용자가 하는 방식과 같습니다.", "how-we-handle-your-data-line-1-line-2": "Eigent는 사용자가 지정한 로컬 소프트웨어 및 파일에 액세스하기 위해 마우스와 키보드를 사용할 수 있습니다.", @@ -93,6 +30,8 @@ "how-we-handle-your-data-line-3": "자격 증명은 로컬에 암호화되어 저장되며 승인된 단계에만 사용됩니다.", "how-we-handle-your-data-line-4": "귀하의 명시적인 동의 없이 귀하의 데이터는 당사 AI 모델을 학습시키는 데 사용되지 않습니다.", "how-we-handle-your-data-line-5": "귀하의 데이터를 제3자에게 판매하지 않습니다.", + "enable-privacy-permissions-settings": "개인정보 보호 설정 활성화", + "enable-privacy-permissions-settings-description": "이 설정을 켜면 작업 데이터가 수집, 처리 및 보호되는 방식에 관한 개인정보 처리방침을 읽었으며 이에 동의했음을 인정하는 것입니다.", "api-key-can-not-be-empty": "API 키는 비워둘 수 없습니다!", "api-host-can-not-be-empty": "API 호스트는 비워둘 수 없습니다!", "model-type-can-not-be-empty": "모델 유형은 비워둘 수 없습니다!", @@ -128,7 +67,6 @@ "url": "URL", "enter-your-model-type": "모델 유형 입력", "verifying": "확인 중...", - "mcp-and-tools": "MCP 및 도구", "add-mcp-server": "MCP 서버 추가", "market": "마켓", @@ -176,7 +114,14 @@ "warning-google-search-not-configured": "경고: Google 검색이 구성되지 않음", "search-functionality-may-be-limited-without-google-api": "Google API 키와 검색 엔진 ID가 없으면 검색 기능이 제한될 수 있습니다. MCP 및 도구 설정에서 이를 구성할 수 있습니다.", "search-engine": "검색 엔진", + "allow-agent-to-take-screenshots": "에이전트 스크린샷 촬영 허용", + "allow-agent-to-take-screenshots-description": "에이전트가 컴퓨터 화면의 스크린샷을 캡처할 수 있도록 허용합니다. 이는 지원, 진단 또는 모니터링 목적으로 사용될 수 있습니다. 스크린샷에는 보이는 개인 정보가 포함될 수 있으므로 주의해서 활성화하세요.", + "allow-agent-to-access-local-software": "에이전트 로컬 소프트웨어 액세스 허용", + "allow-agent-to-access-local-software-description": "에이전트가 로컬 머신에 설치된 소프트웨어와 상호 작용하고 사용할 수 있는 권한을 부여합니다. 문제 해결, 진단 실행 또는 특정 작업 수행에 필요할 수 있습니다.", + "allow-agent-to-access-your-address": "에이전트 주소 액세스 허용", + "allow-agent-to-access-your-address-description": "에이전트가 위치 또는 주소 세부 정보를 보고 사용할 수 있도록 승인합니다. 위치 기반 서비스 또는 개인화된 지원에 필요할 수 있습니다.", "password-storage": "비밀번호 저장", + "password-storage-description": "비밀번호가 처리되고 저장되는 방식을 결정합니다. 장치나 애플리케이션 내에서 비밀번호를 안전하게 저장하거나 매번 수동으로 입력하도록 선택할 수 있습니다. 모든 저장된 비밀번호는 암호화됩니다.", "notion-mcp-installed-successfully": "Notion MCP가 성공적으로 설치되었습니다", "failed-to-install-notion-mcp": "Notion MCP 설치에 실패했습니다", "google-calendar-installed-successfully": "Google Calendar가 성공적으로 설치되었습니다", @@ -218,7 +163,6 @@ "proxy-save-failed": "프록시 설정 저장에 실패했습니다.", "proxy-invalid-url": "잘못된 프록시 URL입니다. http://, https://, socks4://, 또는 socks5://로 시작해야 합니다.", "proxy-restart-hint": "프록시 변경 사항을 적용하려면 다시 시작해야 합니다.", - "cloud-not-available-in-local-proxy": "로컬 프록시 모드에서는 클라우드 버전을 사용할 수 없습니다", "set-as-default": "기본값으로 설정", "api-key-setting": "API 키 설정", @@ -226,11 +170,9 @@ "model-type-setting": "모델 타입 설정", "please-select": "선택하세요", "configuring": "구성 중...", - "models-default-setting-title": "기본 설정", "models-default-setting-description": "구성된 모델 중 하나를 Eigent의 기본 모델로 선택하세요. 워크스페이스 전체에 전역으로 적용됩니다.", "models-configuration": "구성", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -239,24 +181,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "네트워크 프록시", - "network-proxy-description": "네트워크 요청을 위한 프록시 서버를 구성합니다. 프록시를 통해 외부 API에 접근해야 하는 경우 유용합니다.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "프록시 설정이 저장되었습니다. 변경 사항을 적용하려면 앱을 다시 시작하세요.", - "proxy-save-failed": "프록시 설정 저장에 실패했습니다.", - "proxy-invalid-url": "잘못된 프록시 URL입니다. http://, https://, socks4://, 또는 socks5://로 시작해야 합니다.", - "proxy-restart-hint": "프록시 변경 사항을 적용하려면 다시 시작해야 합니다.", - "preferred-ide": "선호 IDE", "preferred-ide-description": "에이전트 프로젝트 폴더를 열 때 사용할 애플리케이션을 선택합니다.", "system-file-manager": "시스템 파일 관리자", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Eigent 개선에 도움주기", - "help-improve-eigent-description": "서비스 개선을 위해 Eigent가 익명의 오류 로그와 사용 데이터를 수집하도록 허용합니다. 이는 선택 사항이며 언제든지 변경할 수 있습니다." + "help-improve-eigent-description": "서비스 개선을 위해 Eigent가 익명의 오류 로그와 사용 데이터를 수집하도록 허용합니다. 이는 선택 사항이며 언제든지 변경할 수 있습니다.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "작업 실행에 필요한 필수 데이터만 사용합니다" } diff --git a/src/i18n/locales/ru/chat.json b/src/i18n/locales/ru/chat.json index fa58913b6..edbe0325b 100644 --- a/src/i18n/locales/ru/chat.json +++ b/src/i18n/locales/ru/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "Мы испытываем высокую нагрузку. Пожалуйста, попробуйте еще раз через несколько минут.", "new-project": "Новый проект", "no-reply-received-task-continue": "Ответ не получен, задача продолжается", - "splitting-tasks": "Разделение задач", - "start-task": "Начать задачу", - "message-cannot-be-empty": "Сообщение не может быть пустым", - "remove-file": "Удалить файл", - "drop-files-to-attach": "Перетащите файлы для прикрепления", - "expand-input": "Развернуть ввод (⌘P)", - "queued-tasks": "Задачи в очереди", - "remove-queued-message": "Удалить сообщение из очереди", - "no-agents-added": "Агенты не добавлены", "open-in-ide": "Открыть в IDE", "open-in-vscode": "Открыть в VS Code", "open-in-cursor": "Открыть в Cursor", "open-in-file-manager": "Открыть в файловом менеджере", "failed-to-open-folder": "Не удалось открыть папку", - "task-completed-card-title": "Задача выполнена", - "task-completed-card-subtitle": "Автоматизируйте вашу задачу с помощью триггера" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "Перетащите файлы для прикрепления", + "expand-input": "Развернуть ввод (⌘P)", + "message-cannot-be-empty": "Сообщение не может быть пустым", + "no-agents-added": "Агенты не добавлены", + "queued-tasks": "Задачи в очереди", + "remove-file": "Удалить файл", + "remove-queued-message": "Удалить сообщение из очереди", + "splitting-tasks": "Разделение задач", + "start-task": "Начать задачу", + "task-completed-card-subtitle": "Автоматизируйте вашу задачу с помощью триггера", + "task-completed-card-title": "Задача выполнена" } diff --git a/src/i18n/locales/ru/setting.json b/src/i18n/locales/ru/setting.json index 84381dc2e..c317eb534 100644 --- a/src/i18n/locales/ru/setting.json +++ b/src/i18n/locales/ru/setting.json @@ -7,67 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "По умолчанию", "profile": "Профиль", - "account": "Аккаунт", - "you-are-currently-signed-in-with": "Вы вошли с аккаунтом {{email}}", - "manage": "Управление", - "log-out": "Выйти", - "language": "Язык", - "select-language": "Выберите язык", - "system-default": "По умолчанию в системе", - "appearance": "Внешний вид", - "dark": "Тёмный", - "light": "Светлый", - "transparent": "Прозрачный", - - "data-privacy": "Конфиденциальность данных", - "data-privacy-description": "Eigent построен по принципу \"сначала локально\", чтобы обеспечить вашу конфиденциальность. Ваши данные по умолчанию остаются на вашем устройстве. Облачные функции являются необязательными и используют только минимальные необходимые данные для функционирования. Полные сведения см. в нашей", - "privacy-policy": "Политике конфиденциальности", - "how-we-handle-your-data": "Как мы обрабатываем ваши данные", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Мы используем только необходимые данные для выполнения ваших задач", - "how-we-handle-your-data-line-1": "Мы используем только необходимые данные для выполнения ваших задач", - "how-we-handle-your-data-line-1-line-1": "Eigent может делать снимки экрана для анализа элементов пользовательского интерфейса, чтения текста и определения следующего действия, точно так же, как это сделали бы вы.", - "how-we-handle-your-data-line-1-line-2": "Eigent может использовать вашу мышь и клавиатуру для доступа к локальному программному обеспечению и файлам, которые вы указываете.", - "how-we-handle-your-data-line-1-line-3": "Только минимальные данные задачи отправляются поставщикам моделей ИИ или сторонним интеграциям, которые вы включаете; мы не храним данные.", - "how-we-handle-your-data-line-2": "Файлы задач, результаты и снимки экрана остаются в вашей целевой папке задач локально.", - "how-we-handle-your-data-line-3": "Учетные данные хранятся локально, зашифрованы и используются только для одобренных шагов.", - "how-we-handle-your-data-line-4": "Ваши данные никогда не используются для обучения наших моделей ИИ без вашего явного согласия.", - "how-we-handle-your-data-line-5": "Мы не продаем ваши данные третьим лицам.", - "api-key-can-not-be-empty": "API-ключ не может быть пустым!", - "api-host-can-not-be-empty": "API-хост не может быть пустым!", - "model-type-can-not-be-empty": "Тип модели не может быть пустым!", - "validate-success": "Проверка прошла успешно", - "the-model-has-been-verified-to-support-function-calling-which-is-required-to-use-eigent": "Модель была проверена на поддержку вызовов функций, что требуется для использования Eigent.", - "validate-failed": "Проверка не удалась", - "copy": "Копировать", - "copied-to-clipboard": "Скопировано в буфер обмена", - "failed-to-copy-to-clipboard": "Не удалось скопировать в буфер обмена", - "endpoint-url-can-not-be-empty": "URL конечной точки не может быть пустым!", - "verification-failed-please-check-endpoint-url": "Проверка не удалась, проверьте URL конечной точки", - "eigent-cloud-version": "Eigent Cloud Версия", - "you-are-currently-subscribed-to-the": "В настоящее время вы подписаны на", - "discover-more-about-our": "Узнайте больше о наших", - "pricing-options": "вариантах ценообразования", - "credits": "Кредиты", - "select-model-type": "Выберите тип модели", - "custom-model": "Пользовательская модель", - "use-your-own-api-keys-or-set-up-a-local-model": "Используйте свои собственные API-ключи или настройте локальную модель.", - "verify": "Проверить", - "local-model": "Локальная модель", - "model-platform": "Платформа модели", - "model-endpoint-url": "URL конечной точки модели", - "model-type": "Тип модели", - "enter-your-local-model-type": "Введите тип вашей локальной модели", - "you-are-on-selft-host-mode": "Вы находитесь в режиме самостоятельного хостинга", - "you-are-using-self-hosted-mode": "Вы используете режим самостоятельного хостинга. Для достижения наилучшей производительности этого продукта введите ключ поиска Google в разделе \"MCP и Инструменты\", чтобы Eigent работал должным образом.", - "the-google-search-key-is-essential-for-delivering-accurate-search-results": "Ключ поиска Google необходим для предоставления точных результатов поиска. Ключ Exa Search является необязательным, но настоятельно рекомендуется для лучшей производительности.", - "close": "Закрыть", - "enter-your-api-key": "Введите ваш API", - "key": "ключ", - "enter-your-api-host": "Введите ваш API-хост", - "url": "URL", - "enter-your-model-type": "Введите ваш тип модели", - "verifying": "Проверка...", - "account": "Аккаунт", "you-are-currently-signed-in-with": "Вы вошли с аккаунтом {{email}}", "manage": "Управление", @@ -79,12 +18,10 @@ "dark": "Тёмный", "light": "Светлый", "transparent": "Прозрачный", - "data-privacy": "Конфиденциальность данных", "data-privacy-description": "Eigent построен по принципу \"сначала локально\", чтобы обеспечить вашу конфиденциальность. Ваши данные по умолчанию остаются на вашем устройстве. Облачные функции являются необязательными и используют только минимальные необходимые данные для функционирования. Полные сведения см. в нашей", "privacy-policy": "Политике конфиденциальности", "how-we-handle-your-data": "Как мы обрабатываем ваши данные", - "we-only-use-the-essential-data-needed-to-run-your-tasks": "Мы используем только необходимые данные для выполнения ваших задач", "how-we-handle-your-data-line-1": "Мы используем только необходимые данные для выполнения ваших задач", "how-we-handle-your-data-line-1-line-1": "Eigent может делать снимки экрана для анализа элементов пользовательского интерфейса, чтения текста и определения следующего действия, точно так же, как это сделали бы вы.", "how-we-handle-your-data-line-1-line-2": "Eigent может использовать вашу мышь и клавиатуру для доступа к локальному программному обеспечению и файлам, которые вы указываете.", @@ -93,6 +30,8 @@ "how-we-handle-your-data-line-3": "Учетные данные хранятся локально, зашифрованы и используются только для одобренных шагов.", "how-we-handle-your-data-line-4": "Ваши данные никогда не используются для обучения наших моделей ИИ без вашего явного согласия.", "how-we-handle-your-data-line-5": "Мы не продаем ваши данные третьим лицам.", + "enable-privacy-permissions-settings": "Включить настройки разрешений конфиденциальности", + "enable-privacy-permissions-settings-description": "Включив эту опцию, вы подтверждаете, что прочитали и согласны с нашей Политикой конфиденциальности в отношении того, как ваши данные задачи собираются, обрабатываются и защищаются.", "api-key-can-not-be-empty": "API-ключ не может быть пустым!", "api-host-can-not-be-empty": "API-хост не может быть пустым!", "model-type-can-not-be-empty": "Тип модели не может быть пустым!", @@ -101,6 +40,7 @@ "validate-failed": "Проверка не удалась", "copy": "Копировать", "copied-to-clipboard": "Скопировано в буфер обмена", + "failed-to-copy-to-clipboard": "Не удалось скопировать в буфер обмена", "endpoint-url-can-not-be-empty": "URL конечной точки не может быть пустым!", "verification-failed-please-check-endpoint-url": "Проверка не удалась, проверьте URL конечной точки", "eigent-cloud-version": "Eigent Cloud Версия", @@ -127,7 +67,6 @@ "url": "URL", "enter-your-model-type": "Введите ваш тип модели", "verifying": "Проверка...", - "mcp-and-tools": "MCP и Инструменты", "add-mcp-server": "Добавить MCP-сервер", "market": "Рынок", @@ -175,7 +114,14 @@ "warning-google-search-not-configured": "Предупреждение: Google поиск не настроен", "search-functionality-may-be-limited-without-google-api": "Функциональность поиска может быть ограничена без ключа Google API и ID поисковой системы. Вы можете настроить их в настройках MCP и инструментов.", "search-engine": "Поисковая система", + "allow-agent-to-take-screenshots": "Разрешить агенту делать скриншоты", + "allow-agent-to-take-screenshots-description": "Разрешить агенту захватывать скриншоты экрана вашего компьютера. Это может использоваться для поддержки, диагностики или мониторинга. Скриншоты могут содержать видимую личную информацию, поэтому включайте с осторожностью.", + "allow-agent-to-access-local-software": "Разрешить агенту доступ к локальному программному обеспечению", + "allow-agent-to-access-local-software-description": "Предоставить агенту разрешение на взаимодействие с программным обеспечением, установленным на вашей локальной машине. Это может быть необходимо для устранения неполадок, запуска диагностики или выполнения определенных задач.", + "allow-agent-to-access-your-address": "Разрешить агенту доступ к вашему адресу", + "allow-agent-to-access-your-address-description": "Авторизовать агента для просмотра и использования ваших данных о местоположении или адресе. Это может потребоваться для услуг на основе местоположения или персонализированной поддержки.", "password-storage": "Хранение паролей", + "password-storage-description": "Определить, как обрабатываются и хранятся пароли. Вы можете выбрать безопасное хранение паролей на устройстве или в приложении, или отказаться от этого, чтобы вводить их вручную каждый раз. Все сохраненные пароли зашифрованы.", "notion-mcp-installed-successfully": "Notion MCP успешно установлен", "failed-to-install-notion-mcp": "Не удалось установить Notion MCP", "google-calendar-installed-successfully": "Google Calendar успешно установлен", @@ -217,7 +163,6 @@ "proxy-save-failed": "Не удалось сохранить конфигурацию прокси.", "proxy-invalid-url": "Недопустимый URL прокси. Должен начинаться с http://, https://, socks4:// или socks5://.", "proxy-restart-hint": "Для применения изменений прокси требуется перезапуск.", - "cloud-not-available-in-local-proxy": "Облачная версия недоступна в режиме локального прокси", "set-as-default": "Сделать по умолчанию", "api-key-setting": "Настройка API-ключа", @@ -225,11 +170,9 @@ "model-type-setting": "Настройка типа модели", "please-select": "Пожалуйста, выберите", "configuring": "Конфигурирование...", - "models-default-setting-title": "Настройка по умолчанию", "models-default-setting-description": "Выберите одну из настроенных моделей как модель по умолчанию для Eigent. Она будет применяться глобально во всём рабочем пространстве.", "models-configuration": "Конфигурация", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -238,24 +181,19 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "Сетевой прокси", - "network-proxy-description": "Настройте прокси-сервер для сетевых запросов. Это полезно, если вам нужен доступ к внешним API через прокси.", - "proxy-placeholder": "http://127.0.0.1:7890", - "proxy-saved-restart-required": "Конфигурация прокси сохранена. Перезапустите приложение для применения изменений.", - "proxy-save-failed": "Не удалось сохранить конфигурацию прокси.", - "proxy-invalid-url": "Недопустимый URL прокси. Должен начинаться с http://, https://, socks4:// или socks5://.", - "proxy-restart-hint": "Для применения изменений прокси требуется перезапуск.", - "preferred-ide": "Предпочитаемая IDE", "preferred-ide-description": "Выберите приложение для открытия папок проектов агента.", "system-file-manager": "Системный файловый менеджер", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "Помогите улучшить Eigent", - "help-improve-eigent-description": "Разрешите Eigent собирать анонимные журналы ошибок и данные об использовании для улучшения сервиса. Это необязательно и может быть изменено в любое время." + "help-improve-eigent-description": "Разрешите Eigent собирать анонимные журналы ошибок и данные об использовании для улучшения сервиса. Это необязательно и может быть изменено в любое время.", + "we-only-use-the-essential-data-needed-to-run-your-tasks": "Мы используем только необходимые данные для выполнения ваших задач" } diff --git a/src/i18n/locales/zh-Hans/chat.json b/src/i18n/locales/zh-Hans/chat.json index 9a0b6e07e..b7f8544e3 100644 --- a/src/i18n/locales/zh-Hans/chat.json +++ b/src/i18n/locales/zh-Hans/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "我们正在经历高流量。请稍后再试。", "new-project": "新项目", "no-reply-received-task-continue": "没有收到回复,任务继续", - "splitting-tasks": "拆分任务", - "start-task": "开始任务", - "message-cannot-be-empty": "消息不能为空", - "remove-file": "移除文件", - "drop-files-to-attach": "拖放文件以附加", - "expand-input": "展开输入 (⌘P)", - "queued-tasks": "排队任务", - "remove-queued-message": "移除排队消息", - "no-agents-added": "未添加智能体", "open-in-ide": "在 IDE 中打开", "open-in-vscode": "在 VS Code 中打开", "open-in-cursor": "在 Cursor 中打开", "open-in-file-manager": "在文件管理器中打开", "failed-to-open-folder": "无法打开文件夹", - "task-completed-card-title": "任务已完成", - "task-completed-card-subtitle": "使用触发器自动化您的任务" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "拖放文件以附加", + "expand-input": "展开输入 (⌘P)", + "message-cannot-be-empty": "消息不能为空", + "no-agents-added": "未添加智能体", + "queued-tasks": "排队任务", + "remove-file": "移除文件", + "remove-queued-message": "移除排队消息", + "splitting-tasks": "拆分任务", + "start-task": "开始任务", + "task-completed-card-subtitle": "使用触发器自动化您的任务", + "task-completed-card-title": "任务已完成" } diff --git a/src/i18n/locales/zh-Hans/setting.json b/src/i18n/locales/zh-Hans/setting.json index 109ceff52..9bceae92b 100644 --- a/src/i18n/locales/zh-Hans/setting.json +++ b/src/i18n/locales/zh-Hans/setting.json @@ -7,7 +7,6 @@ "eigent-cloud": "Eigent Cloud", "default": "默认", "profile": "个人资料", - "account": "账户", "you-are-currently-signed-in-with": "你当前使用的是 {{email}} 账户", "manage": "管理", @@ -19,7 +18,6 @@ "dark": "深色", "light": "亮色", "transparent": "透明", - "data-privacy": "数据隐私", "data-privacy-description": "Eigent 基于本地优先原则确保您的隐私。您的数据默认存储在您的设备上。云功能是可选的,仅使用最小的数据来实现功能。详细信息请访问我们的", "privacy-policy": "隐私政策", @@ -33,6 +31,8 @@ "how-we-handle-your-data-line-3": "凭据存储在本地,加密,仅用于批准的步骤。", "how-we-handle-your-data-line-4": "您的数据永远不会用于训练我们的 AI 模型,除非您明确同意。", "how-we-handle-your-data-line-5": "我们不会出售您的数据给第三方。", + "enable-privacy-permissions-settings": "启用隐私权限设置", + "enable-privacy-permissions-settings-description": "通过打开此功能,您承认已阅读并同意我们的隐私政策,关于您的任务数据如何被收集、处理和保护。", "api-key-can-not-be-empty": "API Key 不能为空!", "api-host-can-not-be-empty": "API Host 不能为空!", "model-type-can-not-be-empty": "Model Type 不能为空!", @@ -114,7 +114,14 @@ "warning-google-search-not-configured": "警告:Google 搜索未配置", "search-functionality-may-be-limited-without-google-api": "没有 Google API 密钥和搜索引擎 ID,搜索功能可能受限。您可以在 MCP & 工具设置中配置这些。", "search-engine": "搜索引擎", + "allow-agent-to-take-screenshots": "允许智能体截屏", + "allow-agent-to-take-screenshots-description": "允许智能体捕获您计算机屏幕的截图。这可用于支持、诊断或监控目的。截图可能包含可见的个人信息,请谨慎启用。", + "allow-agent-to-access-local-software": "允许智能体访问本地软件", + "allow-agent-to-access-local-software-description": "授予智能体与您本地机器上安装的软件交互和使用的权限。这对于故障排除、运行诊断或执行特定任务可能是必要的。", + "allow-agent-to-access-your-address": "允许智能体访问您的地址", + "allow-agent-to-access-your-address-description": "授权智能体查看和使用您的位置或地址详细信息。这对于基于位置的服务或个性化支持可能是必需的。", "password-storage": "密码存储", + "password-storage-description": "确定如何处理和存储密码。您可以选择在设备或应用程序中安全存储密码,或选择每次手动输入。所有存储的密码都经过加密。", "notion-mcp-installed-successfully": "Notion MCP 安装成功", "failed-to-install-notion-mcp": "Notion MCP 安装失败", "google-calendar-installed-successfully": "Google Calendar 安装成功", @@ -148,7 +155,6 @@ "reset": "重置", "reset-success": "重置成功!", "reset-failed": "重置失败!", - "browser-login": "浏览器登录", "browser-login-description": "打开 Chrome 浏览器以登录您的账户。您的登录数据将安全地保存在本地配置文件中。", "open-browser-login": "打开浏览器登录", @@ -156,7 +162,6 @@ "browser-opened-successfully": "浏览器已成功打开。请登录您的账户。", "failed-to-open-browser": "打开浏览器失败,请重试。", "restart-to-apply": "重启应用", - "cookie-manager": "Cookie 管理器", "cookie-manager-description": "管理从浏览器会话中保存的 Cookie。可以删除特定网站或全部 Cookie。", "refresh": "刷新", @@ -175,7 +180,6 @@ "confirm-delete-all-cookies": "确定要删除所有 Cookie 吗?此操作无法撤销。", "all-cookies-deleted": "所有 Cookie 已成功删除。", "cookie-delete-warning": "注意:删除 Cookie 会使您从相关网站登出。您可能需要重启浏览器才能看到更改生效。", - "cloud-not-available-in-local-proxy": "在本地代理模式下无法使用云端版本", "set-as-default": "设为默认", "api-key-setting": "API 密钥设置", @@ -183,11 +187,9 @@ "model-type-setting": "模型类型设置", "please-select": "请选择", "configuring": "正在配置...", - "models-default-setting-title": "默认设置", "models-default-setting-description": "从已配置的模型中选择一个作为 Eigent 的默认模型,它将全局应用到您的工作区。", "models-configuration": "配置", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -196,17 +198,18 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "preferred-ide": "首选 IDE", "preferred-ide-description": "选择打开智能体项目文件夹时使用的应用程序。", "system-file-manager": "系统文件管理器", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "帮助改进 Eigent", "help-improve-eigent-description": "允许 Eigent 收集匿名错误日志和使用数据以改进服务。此项为可选,可随时更改。" } diff --git a/src/i18n/locales/zh-Hant/chat.json b/src/i18n/locales/zh-Hant/chat.json index e64d3218f..0529280a3 100644 --- a/src/i18n/locales/zh-Hant/chat.json +++ b/src/i18n/locales/zh-Hant/chat.json @@ -52,20 +52,25 @@ "we-re-experiencing-high-traffic-please-try-again-in-a-few-moments": "我們正在經歷高流量。請稍後再試。", "new-project": "新項目", "no-reply-received-task-continue": "沒有收到回复,任務繼續", - "splitting-tasks": "拆分任務", - "start-task": "開始任務", - "message-cannot-be-empty": "訊息不能為空", - "remove-file": "移除文件", - "drop-files-to-attach": "拖放文件以附加", - "expand-input": "展開輸入 (⌘P)", - "queued-tasks": "排隊任務", - "remove-queued-message": "移除排隊訊息", - "no-agents-added": "未添加智能體", "open-in-ide": "在 IDE 中開啟", "open-in-vscode": "在 VS Code 中開啟", "open-in-cursor": "在 Cursor 中開啟", "open-in-file-manager": "在檔案管理器中開啟", "failed-to-open-folder": "無法開啟資料夾", - "task-completed-card-title": "任務已完成", - "task-completed-card-subtitle": "使用觸發器自動化您的任務" + "model-error-go-to-settings": "Model Settings", + "model-error-invalid-api-key": "Your API key is invalid or expired. Please update it in", + "model-error-model-not-found": "The configured model was not found. Please check your settings in", + "model-error-quota-exceeded": "You've exceeded your API quota. Please check your plan or update your key in", + "model-error-open-settings": "Open Model Settings", + "drop-files-to-attach": "拖放文件以附加", + "expand-input": "展開輸入 (⌘P)", + "message-cannot-be-empty": "訊息不能為空", + "no-agents-added": "未添加智能體", + "queued-tasks": "排隊任務", + "remove-file": "移除文件", + "remove-queued-message": "移除排隊訊息", + "splitting-tasks": "拆分任務", + "start-task": "開始任務", + "task-completed-card-subtitle": "使用觸發器自動化您的任務", + "task-completed-card-title": "任務已完成" } diff --git a/src/i18n/locales/zh-Hant/setting.json b/src/i18n/locales/zh-Hant/setting.json index 2a4091eb0..3058b685b 100644 --- a/src/i18n/locales/zh-Hant/setting.json +++ b/src/i18n/locales/zh-Hant/setting.json @@ -4,7 +4,6 @@ "privacy": "隱私", "models": "模型", "mcp": "MCP & 工具", - "account": "帳戶", "you-are-currently-signed-in-with": "您目前使用的是 {{email}} 帳戶", "manage": "管理", @@ -16,7 +15,6 @@ "dark": "深色", "light": "淺色", "transparent": "透明", - "data-privacy": "數據隱私", "data-privacy-description": "Eigent 以本地優先原則確保您的隱私。您的數據預設儲存在您的設備上。雲端功能是可選的,僅使用最少量的數據來實現功能。詳細資訊請參閱我們的", "privacy-policy": "隱私政策", @@ -30,6 +28,8 @@ "how-we-handle-your-data-line-3": "憑證儲存在本地,經過加密,僅用於核准的步驟。", "how-we-handle-your-data-line-4": "您的數據永遠不會用於訓練我們的 AI 模型,除非您明確同意。", "how-we-handle-your-data-line-5": "我們不會將您的數據出售給第三方。", + "enable-privacy-permissions-settings": "啟用隱私權限設定", + "enable-privacy-permissions-settings-description": "透過啟用此功能,您即表示已閱讀並同意我們的隱私權政策,關於您的任務數據如何被收集、處理和保護。", "api-key-can-not-be-empty": "API 金鑰不可為空!", "api-host-can-not-be-empty": "API Host 不可為空!", "model-type-can-not-be-empty": "模型類型不可為空!", @@ -112,7 +112,14 @@ "warning-google-search-not-configured": "警告:Google 搜尋未設定", "search-functionality-may-be-limited-without-google-api": "沒有 Google API 金鑰和搜尋引擎 ID,搜尋功能可能受限。您可以在 MCP & 工具設定中設定這些。", "search-engine": "搜尋引擎", + "allow-agent-to-take-screenshots": "允許智能體截圖", + "allow-agent-to-take-screenshots-description": "允許智能體擷取您電腦螢幕的截圖。這可用於支援、診斷或監控目的。截圖可能包含可見的個人資訊,請謹慎啟用。", + "allow-agent-to-access-local-software": "允許智能體存取本地軟體", + "allow-agent-to-access-local-software-description": "授予智能體與您本地機器上安裝的軟體互動和使用的權限。這對於故障排除、執行診斷或執行特定任務可能是必要的。", + "allow-agent-to-access-your-address": "允許智能體存取您的地址", + "allow-agent-to-access-your-address-description": "授權智能體檢視和使用您的位置或地址詳細資訊。這對於基於位置的服務或個人化支援可能是必需的。", "password-storage": "密碼儲存", + "password-storage-description": "確定如何處理和儲存密碼。您可以選擇在裝置或應用程式中安全儲存密碼,或選擇每次手動輸入。所有儲存的密碼都經過加密。", "notion-mcp-installed-successfully": "Notion MCP 安裝成功", "failed-to-install-notion-mcp": "Notion MCP 安裝失敗", "google-calendar-installed-successfully": "Google Calendar 安裝成功", @@ -154,11 +161,9 @@ "model-type-setting": "模型類型設定", "please-select": "請選擇", "configuring": "正在配置...", - "models-default-setting-title": "預設設定", "models-default-setting-description": "從已配置的模型中選擇一個作為 Eigent 的預設模型,它將全域套用於您的工作區。", "models-configuration": "配置", - "gemini-3-pro-preview-name": "Gemini 3 Pro Preview", "gemini-3.1-pro-preview-name": "Gemini 3.1 Pro Preview", "gemini-3-flash-preview-name": "Gemini 3 Flash Preview", @@ -167,14 +172,12 @@ "gpt-5-name": "GPT-5", "gpt-5.1-name": "GPT-5.1", "gpt-5.2-name": "GPT-5.2", - "gpt-5.4-name": "GPT-5.4", "gpt-5-mini-name": "GPT-5 Mini", "claude-haiku-4-5-name": "Claude Haiku 4.5", "claude-sonnet-4-5-name": "Claude Sonnet 4.5", "claude-sonnet-4-6-name": "Claude Sonnet 4.6", "claude-opus-4-6-name": "Claude Opus 4.6", "minimax-m2-5-name": "Minimax M2.5", - "network-proxy": "網路代理", "network-proxy-description": "設定網路請求的代理伺服器。如果您需要透過代理存取外部 API,這將非常有用。", "proxy-placeholder": "http://127.0.0.1:7890", @@ -185,6 +188,9 @@ "preferred-ide": "偏好 IDE", "preferred-ide-description": "選擇開啟智能體專案資料夾時使用的應用程式。", "system-file-manager": "系統檔案管理器", + "api-key-invalid-or-expired": "API Key Invalid or Expired — please re-verify", + "default-model-unavailable": "Default model unavailable — please select another", + "gpt-5.4-name": "GPT-5.4", "help-improve-eigent": "幫助改進 Eigent", "help-improve-eigent-description": "允許 Eigent 收集匿名錯誤日誌和使用數據以改進服務。此項為可選,可隨時更改。" } diff --git a/src/pages/Agents/Models.tsx b/src/pages/Agents/Models.tsx index 31a2dbacc..2f5862199 100644 --- a/src/pages/Agents/Models.tsx +++ b/src/pages/Agents/Models.tsx @@ -283,7 +283,7 @@ export default function SettingModels() { apiKey: found.api_key || '', // Fall back to provider's default API host if endpoint_url is empty apiHost: found.endpoint_url || item.apiHost, - is_valid: !!found?.is_valid, + is_valid: found?.is_vaild === 2, prefer: found.prefer ?? false, model_type: found.model_type ?? '', externalConfig: fi.externalConfig @@ -405,6 +405,15 @@ export default function SettingModels() { return t('setting.select-default-model'); }; + const isDefaultModelInvalid = (): boolean => { + // Check for custom model preference + const preferredIdx = form.findIndex((f) => f.prefer); + if (preferredIdx !== -1) { + return form[preferredIdx].is_valid === false; + } + return false; + }; + // Check if a model is configured const isModelConfigured = ( category: 'cloud' | 'custom' | 'local', @@ -586,7 +595,7 @@ export default function SettingModels() { provider_name: item.id, api_key: form[idx].apiKey, endpoint_url: form[idx].apiHost, - is_valid: form[idx].is_valid, + is_vaild: 2, model_type: form[idx].model_type, }; if (externalConfig) { @@ -617,7 +626,7 @@ export default function SettingModels() { apiKey: found.api_key || '', // Fall back to provider's default API host if endpoint_url is empty apiHost: found.endpoint_url || item.apiHost, - is_valid: !!found.is_valid, + is_valid: found.is_vaild === 2, prefer: found.prefer ?? false, externalConfig: fi.externalConfig ? fi.externalConfig.map((ec) => { @@ -782,7 +791,7 @@ export default function SettingModels() { provider_name: localPlatform, api_key: 'not-required', endpoint_url: currentEndpoint, // Save base URL without specific endpoints - is_valid: true, + is_vaild: 2, model_type: currentType, encrypted_config: { model_platform: localPlatform, @@ -1093,7 +1102,8 @@ export default function SettingModels() { modelId: string | null, isActive: boolean, isSubItem: boolean = false, - isConfigured: boolean = false + isConfigured: boolean = false, + isValid: boolean = true ) => { const modelImage = getModelImage(modelId); const fallbackIcon = @@ -1134,9 +1144,12 @@ export default function SettingModels() { {label} - {isConfigured && ( + {isConfigured && isValid && (
)} + {isConfigured && !isValid && ( +
+ )} ); }; @@ -1340,8 +1353,10 @@ export default function SettingModels() { : t('setting.set-as-default')} )} - {form[idx].provider_id ? ( + {form[idx].provider_id && form[idx].is_valid !== false ? (
+ ) : form[idx].provider_id && form[idx].is_valid === false ? ( +
) : (
)} @@ -1358,8 +1373,19 @@ export default function SettingModels() { type={showApiKey[idx] ? 'text' : 'password'} size="default" title={t('setting.api-key-setting')} - state={errors[idx]?.apiKey ? 'error' : 'default'} - note={errors[idx]?.apiKey ?? undefined} + state={ + errors[idx]?.apiKey + ? 'error' + : form[idx].provider_id && form[idx].is_valid === false + ? 'error' + : 'default' + } + note={ + errors[idx]?.apiKey ?? + (form[idx].provider_id && form[idx].is_valid === false + ? t('setting.api-key-invalid-or-expired') + : undefined) + } placeholder={` ${t('setting.enter-your-api-key')} ${ item.name } ${t('setting.key')}`} @@ -1773,11 +1799,19 @@ export default function SettingModels() {
- @@ -1821,6 +1855,7 @@ export default function SettingModels() { {items.map((item, idx) => { const isConfigured = !!form[idx]?.provider_id; const isPreferred = form[idx]?.prefer; + const isValid = form[idx]?.is_valid !== false; const modelImage = getModelImage(item.id); return ( @@ -1857,11 +1892,16 @@ export default function SettingModels() {
)} {isPreferred && ( - + )} - {isConfigured && !isPreferred && ( + {isConfigured && !isPreferred && isValid && (
)} + {isConfigured && !isPreferred && !isValid && ( +
+ )}
); @@ -1987,7 +2027,8 @@ export default function SettingModels() { item.id, selectedTab === `byok-${item.id}`, true, - !!form[idx].provider_id + !!form[idx].provider_id, + form[idx].is_valid !== false ) )}
diff --git a/src/store/chatStore.ts b/src/store/chatStore.ts index 3c404ea82..170bbb131 100644 --- a/src/store/chatStore.ts +++ b/src/store/chatStore.ts @@ -24,6 +24,7 @@ import { waitForBackendReady, } from '@/api/http'; import { showCreditsToast } from '@/components/Toast/creditsToast'; +import { showModelErrorToast } from '@/components/Toast/modelErrorToast'; import { showStorageToast } from '@/components/Toast/storageToast'; import { generateUniqueId, uploadLog } from '@/lib'; import { proxyUpdateTriggerExecution } from '@/service/triggerApi'; @@ -619,6 +620,8 @@ const chatStore = (initial?: Partial) => api_url: '', extra_params: {}, }; + let preferredProviderId: number | null = null; + let preferredProvider: any = null; if (modelType === 'custom' || modelType === 'local') { const res = await proxyFetchGet('/api/v1/providers', { prefer: true, @@ -633,6 +636,8 @@ const chatStore = (initial?: Partial) => ); } + preferredProviderId = provider.id ?? null; + preferredProvider = provider; apiModel = { api_key: provider.api_key, model_type: provider.model_type, @@ -2041,13 +2046,36 @@ const chatStore = (initial?: Partial) => throw new Error('Invalid error message format: missing data'); } - // Safely extract error message with fallback chain + // Safely extract error message and error code with fallback chain const errorMessage = agentMessages.data?.message || (typeof agentMessages.data === 'string' ? agentMessages.data : null) || 'An error occurred while processing your request'; + const errorCode = agentMessages.data?.error_code ?? null; + + // Show model error toast with settings link + showModelErrorToast(errorMessage, errorCode); + + // If API key is invalid, mark the provider as invalid on the server + if ( + errorCode === 'invalid_api_key' && + preferredProviderId && + preferredProvider + ) { + proxyFetchPut(`/api/provider/${preferredProviderId}`, { + provider_name: preferredProvider.provider_name, + model_type: preferredProvider.model_type, + api_key: preferredProvider.api_key, + endpoint_url: preferredProvider.endpoint_url || '', + encrypted_config: preferredProvider.encrypted_config || null, + is_vaild: 1, + prefer: preferredProvider.prefer ?? false, + }).catch((err: unknown) => + console.error('Failed to invalidate provider:', err) + ); + } // Mark all incomplete tasks as failed let taskRunning = [...tasks[currentTaskId].taskRunning]; @@ -2090,7 +2118,9 @@ const chatStore = (initial?: Partial) => addMessages(currentTaskId, { id: generateUniqueId(), role: 'agent', - content: `❌ **Error**: ${errorMessage}`, + content: errorMessage, + step: AgentStep.ERROR, + error_code: errorCode, }); uploadLog(currentTaskId, type); // Update trigger execution status to Failed on error diff --git a/src/types/chatbox.d.ts b/src/types/chatbox.d.ts index 40c7d1a72..9c56353e2 100644 --- a/src/types/chatbox.d.ts +++ b/src/types/chatbox.d.ts @@ -114,6 +114,7 @@ declare global { summary?: string; agent_name?: string; attaches?: File[]; + error_code?: string | null; } interface AgentMessage { @@ -146,6 +147,7 @@ declare global { current_length?: number; max_length?: number; text?: string; + error_code?: string | null; }; status?: AgentMessageStatusType; }