From 184ad1ca1179a2ded3e02678319d9d05c1fa88ec Mon Sep 17 00:00:00 2001 From: zerob13 Date: Mon, 25 May 2026 18:58:39 +0800 Subject: [PATCH] feat(i18n): add high-priority languages support Add locale files and registration for: - German (de-DE) - Spanish (es-ES) - Indonesian (id-ID) - Italian (it-IT) - Malay (ms-MY) - Polish (pl-PL) - Turkish (tr-TR) - Vietnamese (vi-VN) Update config presenter, display settings, chat settings tools, and shared types to include the new languages. --- .../high-priority-i18n-languages/plan.md | 27 + .../high-priority-i18n-languages/spec.md | 29 + .../high-priority-i18n-languages/tasks.md | 8 + src/main/presenter/configPresenter/index.ts | 10 +- .../agentTools/chatSettingsTools.ts | 10 +- .../settings/components/DisplaySettings.vue | 10 +- src/renderer/src/i18n/de-DE/about.json | 23 + src/renderer/src/i18n/de-DE/artifacts.json | 52 + src/renderer/src/i18n/de-DE/chat.json | 381 +++ src/renderer/src/i18n/de-DE/common.json | 128 + src/renderer/src/i18n/de-DE/components.json | 70 + src/renderer/src/i18n/de-DE/contextMenu.json | 17 + src/renderer/src/i18n/de-DE/dialog.json | 44 + src/renderer/src/i18n/de-DE/image.json | 9 + src/renderer/src/i18n/de-DE/index.ts | 59 + src/renderer/src/i18n/de-DE/mcp.json | 307 +++ src/renderer/src/i18n/de-DE/model.json | 54 + src/renderer/src/i18n/de-DE/plan.json | 4 + .../src/i18n/de-DE/promptSetting.json | 95 + src/renderer/src/i18n/de-DE/routes.json | 24 + src/renderer/src/i18n/de-DE/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/de-DE/sync.json | 20 + src/renderer/src/i18n/de-DE/thread.json | 46 + src/renderer/src/i18n/de-DE/toolCall.json | 25 + src/renderer/src/i18n/de-DE/traceDialog.json | 17 + src/renderer/src/i18n/de-DE/update.json | 20 + src/renderer/src/i18n/de-DE/welcome.json | 79 + src/renderer/src/i18n/es-ES/about.json | 23 + src/renderer/src/i18n/es-ES/artifacts.json | 52 + src/renderer/src/i18n/es-ES/chat.json | 381 +++ src/renderer/src/i18n/es-ES/common.json | 128 + src/renderer/src/i18n/es-ES/components.json | 70 + src/renderer/src/i18n/es-ES/contextMenu.json | 17 + src/renderer/src/i18n/es-ES/dialog.json | 44 + src/renderer/src/i18n/es-ES/image.json | 9 + src/renderer/src/i18n/es-ES/index.ts | 59 + src/renderer/src/i18n/es-ES/mcp.json | 307 +++ src/renderer/src/i18n/es-ES/model.json | 54 + src/renderer/src/i18n/es-ES/plan.json | 4 + .../src/i18n/es-ES/promptSetting.json | 95 + src/renderer/src/i18n/es-ES/routes.json | 24 + src/renderer/src/i18n/es-ES/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/es-ES/sync.json | 20 + src/renderer/src/i18n/es-ES/thread.json | 46 + src/renderer/src/i18n/es-ES/toolCall.json | 25 + src/renderer/src/i18n/es-ES/traceDialog.json | 17 + src/renderer/src/i18n/es-ES/update.json | 20 + src/renderer/src/i18n/es-ES/welcome.json | 79 + src/renderer/src/i18n/id-ID/about.json | 23 + src/renderer/src/i18n/id-ID/artifacts.json | 52 + src/renderer/src/i18n/id-ID/chat.json | 381 +++ src/renderer/src/i18n/id-ID/common.json | 128 + src/renderer/src/i18n/id-ID/components.json | 70 + src/renderer/src/i18n/id-ID/contextMenu.json | 17 + src/renderer/src/i18n/id-ID/dialog.json | 44 + src/renderer/src/i18n/id-ID/image.json | 9 + src/renderer/src/i18n/id-ID/index.ts | 59 + src/renderer/src/i18n/id-ID/mcp.json | 307 +++ src/renderer/src/i18n/id-ID/model.json | 54 + src/renderer/src/i18n/id-ID/plan.json | 4 + .../src/i18n/id-ID/promptSetting.json | 95 + src/renderer/src/i18n/id-ID/routes.json | 24 + src/renderer/src/i18n/id-ID/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/id-ID/sync.json | 20 + src/renderer/src/i18n/id-ID/thread.json | 46 + src/renderer/src/i18n/id-ID/toolCall.json | 25 + src/renderer/src/i18n/id-ID/traceDialog.json | 17 + src/renderer/src/i18n/id-ID/update.json | 20 + src/renderer/src/i18n/id-ID/welcome.json | 79 + src/renderer/src/i18n/index.ts | 46 +- src/renderer/src/i18n/it-IT/about.json | 23 + src/renderer/src/i18n/it-IT/artifacts.json | 52 + src/renderer/src/i18n/it-IT/chat.json | 381 +++ src/renderer/src/i18n/it-IT/common.json | 128 + src/renderer/src/i18n/it-IT/components.json | 70 + src/renderer/src/i18n/it-IT/contextMenu.json | 17 + src/renderer/src/i18n/it-IT/dialog.json | 44 + src/renderer/src/i18n/it-IT/image.json | 9 + src/renderer/src/i18n/it-IT/index.ts | 59 + src/renderer/src/i18n/it-IT/mcp.json | 307 +++ src/renderer/src/i18n/it-IT/model.json | 54 + src/renderer/src/i18n/it-IT/plan.json | 4 + .../src/i18n/it-IT/promptSetting.json | 95 + src/renderer/src/i18n/it-IT/routes.json | 24 + src/renderer/src/i18n/it-IT/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/it-IT/sync.json | 20 + src/renderer/src/i18n/it-IT/thread.json | 46 + src/renderer/src/i18n/it-IT/toolCall.json | 25 + src/renderer/src/i18n/it-IT/traceDialog.json | 17 + src/renderer/src/i18n/it-IT/update.json | 20 + src/renderer/src/i18n/it-IT/welcome.json | 79 + src/renderer/src/i18n/ms-MY/about.json | 23 + src/renderer/src/i18n/ms-MY/artifacts.json | 52 + src/renderer/src/i18n/ms-MY/chat.json | 381 +++ src/renderer/src/i18n/ms-MY/common.json | 128 + src/renderer/src/i18n/ms-MY/components.json | 70 + src/renderer/src/i18n/ms-MY/contextMenu.json | 17 + src/renderer/src/i18n/ms-MY/dialog.json | 44 + src/renderer/src/i18n/ms-MY/image.json | 9 + src/renderer/src/i18n/ms-MY/index.ts | 59 + src/renderer/src/i18n/ms-MY/mcp.json | 307 +++ src/renderer/src/i18n/ms-MY/model.json | 54 + src/renderer/src/i18n/ms-MY/plan.json | 4 + .../src/i18n/ms-MY/promptSetting.json | 95 + src/renderer/src/i18n/ms-MY/routes.json | 24 + src/renderer/src/i18n/ms-MY/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/ms-MY/sync.json | 20 + src/renderer/src/i18n/ms-MY/thread.json | 46 + src/renderer/src/i18n/ms-MY/toolCall.json | 25 + src/renderer/src/i18n/ms-MY/traceDialog.json | 17 + src/renderer/src/i18n/ms-MY/update.json | 20 + src/renderer/src/i18n/ms-MY/welcome.json | 79 + src/renderer/src/i18n/pl-PL/about.json | 23 + src/renderer/src/i18n/pl-PL/artifacts.json | 52 + src/renderer/src/i18n/pl-PL/chat.json | 381 +++ src/renderer/src/i18n/pl-PL/common.json | 128 + src/renderer/src/i18n/pl-PL/components.json | 70 + src/renderer/src/i18n/pl-PL/contextMenu.json | 17 + src/renderer/src/i18n/pl-PL/dialog.json | 44 + src/renderer/src/i18n/pl-PL/image.json | 9 + src/renderer/src/i18n/pl-PL/index.ts | 59 + src/renderer/src/i18n/pl-PL/mcp.json | 307 +++ src/renderer/src/i18n/pl-PL/model.json | 54 + src/renderer/src/i18n/pl-PL/plan.json | 4 + .../src/i18n/pl-PL/promptSetting.json | 95 + src/renderer/src/i18n/pl-PL/routes.json | 24 + src/renderer/src/i18n/pl-PL/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/pl-PL/sync.json | 20 + src/renderer/src/i18n/pl-PL/thread.json | 46 + src/renderer/src/i18n/pl-PL/toolCall.json | 25 + src/renderer/src/i18n/pl-PL/traceDialog.json | 17 + src/renderer/src/i18n/pl-PL/update.json | 20 + src/renderer/src/i18n/pl-PL/welcome.json | 79 + src/renderer/src/i18n/tr-TR/about.json | 23 + src/renderer/src/i18n/tr-TR/artifacts.json | 52 + src/renderer/src/i18n/tr-TR/chat.json | 381 +++ src/renderer/src/i18n/tr-TR/common.json | 128 + src/renderer/src/i18n/tr-TR/components.json | 70 + src/renderer/src/i18n/tr-TR/contextMenu.json | 17 + src/renderer/src/i18n/tr-TR/dialog.json | 44 + src/renderer/src/i18n/tr-TR/image.json | 9 + src/renderer/src/i18n/tr-TR/index.ts | 59 + src/renderer/src/i18n/tr-TR/mcp.json | 307 +++ src/renderer/src/i18n/tr-TR/model.json | 54 + src/renderer/src/i18n/tr-TR/plan.json | 4 + .../src/i18n/tr-TR/promptSetting.json | 95 + src/renderer/src/i18n/tr-TR/routes.json | 24 + src/renderer/src/i18n/tr-TR/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/tr-TR/sync.json | 20 + src/renderer/src/i18n/tr-TR/thread.json | 46 + src/renderer/src/i18n/tr-TR/toolCall.json | 25 + src/renderer/src/i18n/tr-TR/traceDialog.json | 17 + src/renderer/src/i18n/tr-TR/update.json | 20 + src/renderer/src/i18n/tr-TR/welcome.json | 79 + src/renderer/src/i18n/vi-VN/about.json | 23 + src/renderer/src/i18n/vi-VN/artifacts.json | 52 + src/renderer/src/i18n/vi-VN/chat.json | 381 +++ src/renderer/src/i18n/vi-VN/common.json | 128 + src/renderer/src/i18n/vi-VN/components.json | 70 + src/renderer/src/i18n/vi-VN/contextMenu.json | 17 + src/renderer/src/i18n/vi-VN/dialog.json | 44 + src/renderer/src/i18n/vi-VN/image.json | 9 + src/renderer/src/i18n/vi-VN/index.ts | 59 + src/renderer/src/i18n/vi-VN/mcp.json | 307 +++ src/renderer/src/i18n/vi-VN/model.json | 54 + src/renderer/src/i18n/vi-VN/plan.json | 4 + .../src/i18n/vi-VN/promptSetting.json | 95 + src/renderer/src/i18n/vi-VN/routes.json | 24 + src/renderer/src/i18n/vi-VN/settings.json | 2196 +++++++++++++++++ src/renderer/src/i18n/vi-VN/sync.json | 20 + src/renderer/src/i18n/vi-VN/thread.json | 46 + src/renderer/src/i18n/vi-VN/toolCall.json | 25 + src/renderer/src/i18n/vi-VN/traceDialog.json | 17 + src/renderer/src/i18n/vi-VN/update.json | 20 + src/renderer/src/i18n/vi-VN/welcome.json | 79 + src/shared/i18n.ts | 474 ++++ src/shared/types/chatSettings.ts | 8 + 177 files changed, 29978 insertions(+), 4 deletions(-) create mode 100644 docs/features/high-priority-i18n-languages/plan.md create mode 100644 docs/features/high-priority-i18n-languages/spec.md create mode 100644 docs/features/high-priority-i18n-languages/tasks.md create mode 100644 src/renderer/src/i18n/de-DE/about.json create mode 100644 src/renderer/src/i18n/de-DE/artifacts.json create mode 100644 src/renderer/src/i18n/de-DE/chat.json create mode 100644 src/renderer/src/i18n/de-DE/common.json create mode 100644 src/renderer/src/i18n/de-DE/components.json create mode 100644 src/renderer/src/i18n/de-DE/contextMenu.json create mode 100644 src/renderer/src/i18n/de-DE/dialog.json create mode 100644 src/renderer/src/i18n/de-DE/image.json create mode 100644 src/renderer/src/i18n/de-DE/index.ts create mode 100644 src/renderer/src/i18n/de-DE/mcp.json create mode 100644 src/renderer/src/i18n/de-DE/model.json create mode 100644 src/renderer/src/i18n/de-DE/plan.json create mode 100644 src/renderer/src/i18n/de-DE/promptSetting.json create mode 100644 src/renderer/src/i18n/de-DE/routes.json create mode 100644 src/renderer/src/i18n/de-DE/settings.json create mode 100644 src/renderer/src/i18n/de-DE/sync.json create mode 100644 src/renderer/src/i18n/de-DE/thread.json create mode 100644 src/renderer/src/i18n/de-DE/toolCall.json create mode 100644 src/renderer/src/i18n/de-DE/traceDialog.json create mode 100644 src/renderer/src/i18n/de-DE/update.json create mode 100644 src/renderer/src/i18n/de-DE/welcome.json create mode 100644 src/renderer/src/i18n/es-ES/about.json create mode 100644 src/renderer/src/i18n/es-ES/artifacts.json create mode 100644 src/renderer/src/i18n/es-ES/chat.json create mode 100644 src/renderer/src/i18n/es-ES/common.json create mode 100644 src/renderer/src/i18n/es-ES/components.json create mode 100644 src/renderer/src/i18n/es-ES/contextMenu.json create mode 100644 src/renderer/src/i18n/es-ES/dialog.json create mode 100644 src/renderer/src/i18n/es-ES/image.json create mode 100644 src/renderer/src/i18n/es-ES/index.ts create mode 100644 src/renderer/src/i18n/es-ES/mcp.json create mode 100644 src/renderer/src/i18n/es-ES/model.json create mode 100644 src/renderer/src/i18n/es-ES/plan.json create mode 100644 src/renderer/src/i18n/es-ES/promptSetting.json create mode 100644 src/renderer/src/i18n/es-ES/routes.json create mode 100644 src/renderer/src/i18n/es-ES/settings.json create mode 100644 src/renderer/src/i18n/es-ES/sync.json create mode 100644 src/renderer/src/i18n/es-ES/thread.json create mode 100644 src/renderer/src/i18n/es-ES/toolCall.json create mode 100644 src/renderer/src/i18n/es-ES/traceDialog.json create mode 100644 src/renderer/src/i18n/es-ES/update.json create mode 100644 src/renderer/src/i18n/es-ES/welcome.json create mode 100644 src/renderer/src/i18n/id-ID/about.json create mode 100644 src/renderer/src/i18n/id-ID/artifacts.json create mode 100644 src/renderer/src/i18n/id-ID/chat.json create mode 100644 src/renderer/src/i18n/id-ID/common.json create mode 100644 src/renderer/src/i18n/id-ID/components.json create mode 100644 src/renderer/src/i18n/id-ID/contextMenu.json create mode 100644 src/renderer/src/i18n/id-ID/dialog.json create mode 100644 src/renderer/src/i18n/id-ID/image.json create mode 100644 src/renderer/src/i18n/id-ID/index.ts create mode 100644 src/renderer/src/i18n/id-ID/mcp.json create mode 100644 src/renderer/src/i18n/id-ID/model.json create mode 100644 src/renderer/src/i18n/id-ID/plan.json create mode 100644 src/renderer/src/i18n/id-ID/promptSetting.json create mode 100644 src/renderer/src/i18n/id-ID/routes.json create mode 100644 src/renderer/src/i18n/id-ID/settings.json create mode 100644 src/renderer/src/i18n/id-ID/sync.json create mode 100644 src/renderer/src/i18n/id-ID/thread.json create mode 100644 src/renderer/src/i18n/id-ID/toolCall.json create mode 100644 src/renderer/src/i18n/id-ID/traceDialog.json create mode 100644 src/renderer/src/i18n/id-ID/update.json create mode 100644 src/renderer/src/i18n/id-ID/welcome.json create mode 100644 src/renderer/src/i18n/it-IT/about.json create mode 100644 src/renderer/src/i18n/it-IT/artifacts.json create mode 100644 src/renderer/src/i18n/it-IT/chat.json create mode 100644 src/renderer/src/i18n/it-IT/common.json create mode 100644 src/renderer/src/i18n/it-IT/components.json create mode 100644 src/renderer/src/i18n/it-IT/contextMenu.json create mode 100644 src/renderer/src/i18n/it-IT/dialog.json create mode 100644 src/renderer/src/i18n/it-IT/image.json create mode 100644 src/renderer/src/i18n/it-IT/index.ts create mode 100644 src/renderer/src/i18n/it-IT/mcp.json create mode 100644 src/renderer/src/i18n/it-IT/model.json create mode 100644 src/renderer/src/i18n/it-IT/plan.json create mode 100644 src/renderer/src/i18n/it-IT/promptSetting.json create mode 100644 src/renderer/src/i18n/it-IT/routes.json create mode 100644 src/renderer/src/i18n/it-IT/settings.json create mode 100644 src/renderer/src/i18n/it-IT/sync.json create mode 100644 src/renderer/src/i18n/it-IT/thread.json create mode 100644 src/renderer/src/i18n/it-IT/toolCall.json create mode 100644 src/renderer/src/i18n/it-IT/traceDialog.json create mode 100644 src/renderer/src/i18n/it-IT/update.json create mode 100644 src/renderer/src/i18n/it-IT/welcome.json create mode 100644 src/renderer/src/i18n/ms-MY/about.json create mode 100644 src/renderer/src/i18n/ms-MY/artifacts.json create mode 100644 src/renderer/src/i18n/ms-MY/chat.json create mode 100644 src/renderer/src/i18n/ms-MY/common.json create mode 100644 src/renderer/src/i18n/ms-MY/components.json create mode 100644 src/renderer/src/i18n/ms-MY/contextMenu.json create mode 100644 src/renderer/src/i18n/ms-MY/dialog.json create mode 100644 src/renderer/src/i18n/ms-MY/image.json create mode 100644 src/renderer/src/i18n/ms-MY/index.ts create mode 100644 src/renderer/src/i18n/ms-MY/mcp.json create mode 100644 src/renderer/src/i18n/ms-MY/model.json create mode 100644 src/renderer/src/i18n/ms-MY/plan.json create mode 100644 src/renderer/src/i18n/ms-MY/promptSetting.json create mode 100644 src/renderer/src/i18n/ms-MY/routes.json create mode 100644 src/renderer/src/i18n/ms-MY/settings.json create mode 100644 src/renderer/src/i18n/ms-MY/sync.json create mode 100644 src/renderer/src/i18n/ms-MY/thread.json create mode 100644 src/renderer/src/i18n/ms-MY/toolCall.json create mode 100644 src/renderer/src/i18n/ms-MY/traceDialog.json create mode 100644 src/renderer/src/i18n/ms-MY/update.json create mode 100644 src/renderer/src/i18n/ms-MY/welcome.json create mode 100644 src/renderer/src/i18n/pl-PL/about.json create mode 100644 src/renderer/src/i18n/pl-PL/artifacts.json create mode 100644 src/renderer/src/i18n/pl-PL/chat.json create mode 100644 src/renderer/src/i18n/pl-PL/common.json create mode 100644 src/renderer/src/i18n/pl-PL/components.json create mode 100644 src/renderer/src/i18n/pl-PL/contextMenu.json create mode 100644 src/renderer/src/i18n/pl-PL/dialog.json create mode 100644 src/renderer/src/i18n/pl-PL/image.json create mode 100644 src/renderer/src/i18n/pl-PL/index.ts create mode 100644 src/renderer/src/i18n/pl-PL/mcp.json create mode 100644 src/renderer/src/i18n/pl-PL/model.json create mode 100644 src/renderer/src/i18n/pl-PL/plan.json create mode 100644 src/renderer/src/i18n/pl-PL/promptSetting.json create mode 100644 src/renderer/src/i18n/pl-PL/routes.json create mode 100644 src/renderer/src/i18n/pl-PL/settings.json create mode 100644 src/renderer/src/i18n/pl-PL/sync.json create mode 100644 src/renderer/src/i18n/pl-PL/thread.json create mode 100644 src/renderer/src/i18n/pl-PL/toolCall.json create mode 100644 src/renderer/src/i18n/pl-PL/traceDialog.json create mode 100644 src/renderer/src/i18n/pl-PL/update.json create mode 100644 src/renderer/src/i18n/pl-PL/welcome.json create mode 100644 src/renderer/src/i18n/tr-TR/about.json create mode 100644 src/renderer/src/i18n/tr-TR/artifacts.json create mode 100644 src/renderer/src/i18n/tr-TR/chat.json create mode 100644 src/renderer/src/i18n/tr-TR/common.json create mode 100644 src/renderer/src/i18n/tr-TR/components.json create mode 100644 src/renderer/src/i18n/tr-TR/contextMenu.json create mode 100644 src/renderer/src/i18n/tr-TR/dialog.json create mode 100644 src/renderer/src/i18n/tr-TR/image.json create mode 100644 src/renderer/src/i18n/tr-TR/index.ts create mode 100644 src/renderer/src/i18n/tr-TR/mcp.json create mode 100644 src/renderer/src/i18n/tr-TR/model.json create mode 100644 src/renderer/src/i18n/tr-TR/plan.json create mode 100644 src/renderer/src/i18n/tr-TR/promptSetting.json create mode 100644 src/renderer/src/i18n/tr-TR/routes.json create mode 100644 src/renderer/src/i18n/tr-TR/settings.json create mode 100644 src/renderer/src/i18n/tr-TR/sync.json create mode 100644 src/renderer/src/i18n/tr-TR/thread.json create mode 100644 src/renderer/src/i18n/tr-TR/toolCall.json create mode 100644 src/renderer/src/i18n/tr-TR/traceDialog.json create mode 100644 src/renderer/src/i18n/tr-TR/update.json create mode 100644 src/renderer/src/i18n/tr-TR/welcome.json create mode 100644 src/renderer/src/i18n/vi-VN/about.json create mode 100644 src/renderer/src/i18n/vi-VN/artifacts.json create mode 100644 src/renderer/src/i18n/vi-VN/chat.json create mode 100644 src/renderer/src/i18n/vi-VN/common.json create mode 100644 src/renderer/src/i18n/vi-VN/components.json create mode 100644 src/renderer/src/i18n/vi-VN/contextMenu.json create mode 100644 src/renderer/src/i18n/vi-VN/dialog.json create mode 100644 src/renderer/src/i18n/vi-VN/image.json create mode 100644 src/renderer/src/i18n/vi-VN/index.ts create mode 100644 src/renderer/src/i18n/vi-VN/mcp.json create mode 100644 src/renderer/src/i18n/vi-VN/model.json create mode 100644 src/renderer/src/i18n/vi-VN/plan.json create mode 100644 src/renderer/src/i18n/vi-VN/promptSetting.json create mode 100644 src/renderer/src/i18n/vi-VN/routes.json create mode 100644 src/renderer/src/i18n/vi-VN/settings.json create mode 100644 src/renderer/src/i18n/vi-VN/sync.json create mode 100644 src/renderer/src/i18n/vi-VN/thread.json create mode 100644 src/renderer/src/i18n/vi-VN/toolCall.json create mode 100644 src/renderer/src/i18n/vi-VN/traceDialog.json create mode 100644 src/renderer/src/i18n/vi-VN/update.json create mode 100644 src/renderer/src/i18n/vi-VN/welcome.json diff --git a/docs/features/high-priority-i18n-languages/plan.md b/docs/features/high-priority-i18n-languages/plan.md new file mode 100644 index 000000000..686642c2e --- /dev/null +++ b/docs/features/high-priority-i18n-languages/plan.md @@ -0,0 +1,27 @@ +# High Priority i18n Languages Plan + +## Scope + +Implement the requested locales by following the existing static i18n bundle pattern. The source of truth for required keys is `src/renderer/src/i18n/zh-CN`, with `en-US` as a secondary reference for shorter Latin-script phrasing. + +## Implementation + +- Create one locale directory per target locale under `src/renderer/src/i18n/`. +- Reuse the existing locale `index.ts` import/export shape for each new locale. +- Register new locale modules in `src/renderer/src/i18n/index.ts`. +- Add language options in `src/renderer/settings/components/DisplaySettings.vue`. +- Add new locale codes to `ConfigPresenter.getSystemLanguage()`, `ChatLanguage`, and the DeepChat settings Agent tool schema. +- Extend shared context-menu and error-message translations in `src/shared/i18n.ts`. +- Keep RTL handling unchanged because all requested locales are LTR. + +## Validation + +- Run a structural comparison against `zh-CN` for all target locale JSON files. +- Run `pnpm run format`. +- Run `pnpm run i18n`. +- Run `pnpm run lint`. + +## Risks + +- The largest risk is incomplete or malformed JSON translation files. Mitigation: validate parseability and exact key parity. +- Some UI strings may become long in German, Polish, Turkish, or Vietnamese. Mitigation: prefer natural but concise desktop UI wording and use English as a length reference where appropriate. diff --git a/docs/features/high-priority-i18n-languages/spec.md b/docs/features/high-priority-i18n-languages/spec.md new file mode 100644 index 000000000..506b1a719 --- /dev/null +++ b/docs/features/high-priority-i18n-languages/spec.md @@ -0,0 +1,29 @@ +# High Priority i18n Languages + +## User Stories + +- As a DeepChat desktop user in Spain, Germany, Turkey, Indonesia, Malaysia, Italy, Poland, or Vietnam, I can select my language in Display settings and use the app with readable local UI text. +- As a user whose system locale is one of the supported locales, DeepChat can resolve the matching app language when language is set to System. +- As an Agent Skills user, product and technical names such as DeepChat, Agent, Skills, MCP, Dify, and model/provider names remain recognizable and are not mistranslated. + +## Acceptance Criteria + +- Add full renderer i18n bundles for `es-ES`, `de-DE`, `tr-TR`, `id-ID`, `ms-MY`, `it-IT`, `pl-PL`, and `vi-VN`. +- Each new locale has the same JSON files and key structure as `zh-CN`. +- New locales are registered in renderer, settings renderer, floating renderer, language selector options, system-locale matching, shared chat settings types, and DeepChat settings Agent tool language schema. +- Shared native menu and error-label translations support the new locales where the shared i18n helper is used. +- Translation wording follows the Chinese source meaning, with English used as length/reference for Latin-script languages. +- Product and domain terms stay untranslated where requested: DeepChat, Agent, Skills, MCP, Dify, model/provider brand names, API, JSON, URL, token, prompt, and similar technical identifiers. +- `pnpm run format`, `pnpm run i18n`, and `pnpm run lint` pass. + +## Non-Goals + +- No UI layout redesign. +- No new runtime language-loading architecture. +- No locale-specific date, number, or plural-rule behavior beyond existing vue-i18n support unless needed by validation. + +## Constraints + +- Preserve existing keys, placeholders, interpolation variables, markdown, and JSON syntax. +- Keep translations clear for desktop application users; avoid jargon-heavy or literal machine-style phrasing. +- Resolve implementation without `[NEEDS CLARIFICATION]` markers. diff --git a/docs/features/high-priority-i18n-languages/tasks.md b/docs/features/high-priority-i18n-languages/tasks.md new file mode 100644 index 000000000..2a14ad85e --- /dev/null +++ b/docs/features/high-priority-i18n-languages/tasks.md @@ -0,0 +1,8 @@ +# High Priority i18n Languages Tasks + +- [x] Create SDD artifacts for the i18n expansion. +- [x] Add translated locale bundles for `es-ES`, `de-DE`, `tr-TR`, `id-ID`, `ms-MY`, `it-IT`, `pl-PL`, and `vi-VN`. +- [x] Register all new locales in renderer and main-process language support. +- [x] Extend shared menu/error translations for the new locale codes. +- [x] Validate locale key parity and JSON parseability. +- [x] Run `pnpm run format`, `pnpm run i18n`, and `pnpm run lint`. diff --git a/src/main/presenter/configPresenter/index.ts b/src/main/presenter/configPresenter/index.ts index 43b066ea5..34b0d6ffb 100644 --- a/src/main/presenter/configPresenter/index.ts +++ b/src/main/presenter/configPresenter/index.ts @@ -1757,7 +1757,15 @@ export class ConfigPresenter implements IConfigPresenter { 'fa-IR', 'pt-BR', 'da-DK', - 'he-IL' + 'he-IL', + 'es-ES', + 'de-DE', + 'tr-TR', + 'id-ID', + 'ms-MY', + 'it-IT', + 'pl-PL', + 'vi-VN' ] // Exact match diff --git a/src/main/presenter/toolPresenter/agentTools/chatSettingsTools.ts b/src/main/presenter/toolPresenter/agentTools/chatSettingsTools.ts index ccab337f5..1b5a056dc 100644 --- a/src/main/presenter/toolPresenter/agentTools/chatSettingsTools.ts +++ b/src/main/presenter/toolPresenter/agentTools/chatSettingsTools.ts @@ -35,7 +35,15 @@ const SUPPORTED_LANGUAGES = [ 'fa-IR', 'pt-BR', 'da-DK', - 'he-IL' + 'he-IL', + 'es-ES', + 'de-DE', + 'tr-TR', + 'id-ID', + 'ms-MY', + 'it-IT', + 'pl-PL', + 'vi-VN' ] as const satisfies readonly ChatLanguage[] const SUPPORTED_THEMES = ['dark', 'light', 'system'] as const diff --git a/src/renderer/settings/components/DisplaySettings.vue b/src/renderer/settings/components/DisplaySettings.vue index 9bcdd38fb..555cedc00 100644 --- a/src/renderer/settings/components/DisplaySettings.vue +++ b/src/renderer/settings/components/DisplaySettings.vue @@ -351,7 +351,15 @@ const languageOptions = [ { value: 'fa-IR', label: 'فارسی (ایران)' }, { value: 'pt-BR', label: 'Português (Brasil)' }, { value: 'da-DK', label: 'Dansk' }, - { value: 'he-IL', label: 'עברית (ישראל)' } + { value: 'he-IL', label: 'עברית (ישראל)' }, + { value: 'es-ES', label: 'Español (España)' }, + { value: 'de-DE', label: 'Deutsch (Deutschland)' }, + { value: 'tr-TR', label: 'Türkçe' }, + { value: 'id-ID', label: 'Bahasa Indonesia' }, + { value: 'ms-MY', label: 'Bahasa Melayu' }, + { value: 'it-IT', label: 'Italiano' }, + { value: 'pl-PL', label: 'Polski' }, + { value: 'vi-VN', label: 'Tiếng Việt' } ] watch(selectedLanguage, async (newValue) => { diff --git a/src/renderer/src/i18n/de-DE/about.json b/src/renderer/src/i18n/de-DE/about.json new file mode 100644 index 000000000..e08a56430 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat ist ein plattformübergreifender KI-Client, der KI für mehr Menschen einfach zugänglich macht.", + "website": "Unsere Website besuchen", + "disclaimerButton": "Haftungsausschluss", + "feedbackButton": "Feedback", + "disclaimerTitle": "Nutzungsbedingungen", + "checkUpdateButton": "Nach Updates suchen", + "mockUpdateButton": "Heruntergeladenes Update simulieren", + "clearMockUpdateButton": "Simuliertes Update löschen", + "mockOnboardingButton": "Ersteinrichtungsassistent simulieren", + "updateChannel": "Update-Kanal", + "stableChannel": "Stabil", + "betaChannel": "Beta", + "deviceInfo": { + "title": "Geräteinformationen", + "platform": "Plattform", + "arch": "Architektur", + "cpuModel": "CPU-Modell", + "totalMemory": "Gesamtspeicher", + "osVersion": "Systemversion" + } +} diff --git a/src/renderer/src/i18n/de-DE/artifacts.json b/src/renderer/src/i18n/de-DE/artifacts.json new file mode 100644 index 000000000..0fd88e095 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Zum Öffnen klicken", + "codeSnippet": "Codeausschnitt", + "function": "Funktion", + "class": "Klasse", + "reactComponent": "React-Komponente", + "moduleImport": "Modulimport", + "variableDefinition": "{name} Variablendefinition", + "markdownDocument": "Markdown-Dokument", + "htmlDocument": "HTML-Dokument", + "svgImage": "SVG-Bild", + "flowchart": "Flussdiagramm", + "sequenceDiagram": "Sequenzdiagramm", + "classDiagram": "Klassendiagramm", + "stateDiagram": "Zustandsdiagramm", + "erDiagram": "ER-Diagramm", + "ganttChart": "Gantt-Diagramm", + "pieChart": "Kreisdiagramm", + "mermaidDiagram": "Mermaid-Diagramm", + "flowchartOf": "Flussdiagramm von {name}", + "sequenceDiagramBetween": "Sequenzdiagramm zwischen {participants}", + "classDiagramOf": "Klassendiagramm von {name}", + "stateDiagramOf": "Zustandsdiagramm von {name}", + "erDiagramOf": "ER-Diagramm von {name}", + "pieChartOf": "Kreisdiagramm von {name}", + "unknownDocument": "Unbekanntes Dokument", + "preview": "Vorschau", + "code": "Code", + "export": "Exportieren", + "htmlPreviewTitle": "HTML-Vorschau", + "svgPreviewTitle": "SVG-Vorschau", + "copy": "Kopieren", + "copyAsImage": "Als Bild kopieren", + "copyImageSuccessDesc": "Bild wurde in die Zwischenablage kopiert", + "copyImageFailedDesc": "Bild konnte nicht in die Zwischenablage kopiert werden", + "copySuccess": "Kopiert", + "copySuccessDesc": "Inhalt wurde in die Zwischenablage kopiert", + "copyFailed": "Kopieren fehlgeschlagen", + "copyFailedDesc": "Inhalt konnte nicht in die Zwischenablage kopiert werden", + "desktop": "Desktop", + "tablet": "Tablet", + "mobile": "Mobil", + "responsive": "Responsiv", + "width": "Breite", + "height": "Höhe", + "sanitizingSvg": "SVG-Inhalt wird bereinigt...", + "svgSanitizationFailed": "SVG-Inhalt hat die Sicherheitsprüfung nicht bestanden", + "noSvgContent": "Kein SVG-Inhalt verfügbar", + "mermaid": { + "renderError": "Rendern fehlgeschlagen: {message}" + } +} diff --git a/src/renderer/src/i18n/de-DE/chat.json b/src/renderer/src/i18n/de-DE/chat.json new file mode 100644 index 000000000..3f16bc454 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "Nachricht an DeepChat senden, {'@'} zum Verweisen auf Dateien, / für Befehle", + "fileArea": "Dateibereich", + "inputArea": "Eingabebereich", + "functionSwitch": "Funktionsschalter", + "attach": "Anhang hinzufügen", + "voiceInput": "Lokale Aufnahme", + "voiceInputStop": "Lokale Aufnahme stoppen", + "voiceRecognitionUnsupportedTitle": "Lokale Aufnahme wird in dieser Umgebung nicht unterstützt", + "voiceRecognitionUnsupportedDescription": "Verwenden Sie diese Funktion in einem Browser oder einer Desktop-Umgebung mit Mikrofonaufnahme.", + "voiceRecognitionPermissionDeniedTitle": "Kein Zugriff auf das Mikrofon", + "voiceRecognitionPermissionDeniedDescription": "Erlauben Sie DeepChat die Nutzung des Mikrofons und versuchen Sie es erneut.", + "voiceRecognitionErrorTitle": "Audiotranskription fehlgeschlagen", + "voiceRecognitionErrorDescription": "Die Audiotranskription konnte nicht abgeschlossen werden. Bitte später erneut versuchen.", + "send": "Senden", + "steer": "Steuern", + "queue": "Einreihen", + "stop": "Stoppen", + "fileSelect": "Datei auswählen", + "pasteFiles": "Dateien per Kopieren und Einfügen hinzufügen", + "dropFiles": "Dateien hier ablegen", + "promptFilesAdded": "Prompt-Dateien hinzugefügt", + "promptFilesAddedDesc": "{count} Dateien erfolgreich hinzugefügt", + "promptFilesError": "Fehler bei der Dateiverarbeitung", + "promptFilesErrorDesc": "{count} Dateien konnten nicht verarbeitet werden", + "historyPlaceholder": "(Tab zum Ausfüllen drücken)", + "rateLimitQueue": "Warteschlange {count}", + "rateLimitWait": "{seconds}s warten", + "rateLimitQueueTooltip": "{count} Anfragen in der Warteschlange, Intervall {interval} Sekunden", + "rateLimitReadyTooltip": "Bereit zum Senden, Intervall {interval} Sekunden", + "rateLimitWaitingTooltip": "Noch {seconds} Sekunden warten, Intervall {interval} Sekunden", + "acpWorkdir": "Arbeitsverzeichnis", + "acpWorkdirTooltip": "ACP-Arbeitsverzeichnis festlegen", + "acpWorkdirSelect": "Arbeitsverzeichnis auswählen", + "acpWorkdirCurrent": "Aktuelles Arbeitsverzeichnis: {path}", + "acpMode": "Modus", + "acpModeTooltip": "Aktueller Modus: {mode}", + "agentWorkspaceTooltip": "Agent-Arbeitsverzeichnis festlegen", + "agentWorkspaceSelect": "Arbeitsverzeichnis auswählen", + "agentWorkspaceCurrent": "Aktuelles Arbeitsverzeichnis: {path}", + "workspaceUnavailableTooltip": "Verzeichnis existiert nicht oder ist nicht zugänglich: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "Aktivierte MCP", + "empty": "Keine aktivierten Dienste", + "openSettings": "MCP-Einstellungen öffnen" + }, + "tools": { + "badge": "Tools", + "title": "Tools", + "mcpSection": "MCP", + "pluginSection": "Plugins", + "builtinSection": "Integrierte Tools", + "loading": "Tools werden geladen...", + "builtinEmpty": "Keine integrierten Tools verfügbar", + "groups": { + "agentFilesystem": "Dateisystem", + "agentCore": "Core-Tools", + "agentImageGeneration": "Bilderzeugung", + "agentSkills": "Skill-Tools", + "deepchatSettings": "DeepChat-Einstellungen", + "yobrowser": "YoBrowser" + } + }, + "fileUploadFailed": "Anhang konnte nicht verarbeitet werden", + "fileUploadFailedDesc": "{count} Dateien konnten nicht verarbeitet werden: {names}", + "fileUploadFailedMore": " und {count} weitere", + "unnamedFile": "Unbenannte Datei", + "audioInputUnsupportedTitle": "Das aktuelle Modell unterstützt keine Audioanhänge", + "audioInputUnsupportedDescription": "Modell {model} unterstützt keine Audioeingabe. {count} Audioanhänge wurden ignoriert." + }, + "pendingInput": { + "steer": "Steuern", + "queueCount": "Ausstehend {count}/{max}", + "resumeQueue": "Senden fortsetzen", + "toSteer": "Zu Steuerung wechseln", + "locked": "Gesperrt", + "reorder": "Reihenfolge ändern", + "files": "{count} Dateien", + "attachmentsOnly": "{count} Anhänge", + "empty": "Leere Nachricht", + "limitReached": "Wartebereich ist voll (maximal {max})." + }, + "features": { + "webSearch": "Websuche", + "thoughtForSeconds": "{seconds} Sekunden nachgedacht", + "thoughtForSecondsLoading": "Denkt nach ({seconds}. Sekunde)", + "artifactThinking": "artifact-Denken", + "modeChanged": "Modus gewechselt zu: {mode}" + }, + "search": { + "results": "{0} Webseiten gefunden", + "searching": "Suche läuft...", + "title": "Suchergebnisse", + "description": "{0} relevante Ergebnisse gefunden", + "optimizing": "Suchabsicht wird extrahiert...", + "reading": "Webseiten werden gesucht und gelesen...", + "error": "Suche fehlgeschlagen" + }, + "messages": { + "thinking": "Denkt nach...", + "rateLimitWaiting": "Anfragelimit erreicht, wartet in der Warteschlange...", + "rateLimitCompactLoading": "Rate Limit aktiv ({seconds} Sekunden)", + "rateLimitTitle": "Anfragelimit aktiv", + "rateLimitQueue": "Warteschlangenposition", + "rateLimitEstimated": "Geschätzte Wartezeit", + "rateLimitQuickSettings": "Limit anpassen", + "rateLimitSwitchProvider": "Anbieter wechseln", + "rateLimitImmediately": "Sofort", + "rateLimitSeconds": "Sekunden", + "rateLimitMinutes": "Minuten" + }, + "compaction": { + "compacting": "Kontext wird komprimiert...", + "compacted": "Kontext wurde komprimiert", + "commandDescription": "Chat-Kontext komprimieren", + "noopTitle": "Kein Kontext zum Komprimieren", + "noopDescription": "Es gibt noch keinen neuen Chatverlauf, der komprimiert werden muss.", + "failedTitle": "Komprimierung fehlgeschlagen" + }, + "rateLimit": { + "queueTooltip": "{count} Anfragen in der Warteschlange, Intervall {interval} Sekunden", + "readyTooltip": "Bereit zum Senden, Intervall {interval} Sekunden", + "waitingTooltip": "Noch {seconds} Sekunden warten, Intervall {interval} Sekunden" + }, + "notify": { + "generationComplete": "Generierung abgeschlossen", + "generationError": "Generierung fehlgeschlagen" + }, + "toolCall": { + "title": "Tool-Aufruf", + "calling": "Tool-Aufruf läuft", + "response": "Tool-Antwort", + "end": "Tool-Aufruf abgeschlossen", + "error": "Tool-Aufruf-Fehler", + "clickToView": "Zum Anzeigen der Details klicken", + "functionName": "Funktionsname", + "params": "Parameter", + "responseData": "Antwortdaten", + "subagents": { + "summary": "{mode} · {count} subagents", + "unnamedTask": "Unbenannte Aufgabe", + "mode": { + "parallel": "Parallel", + "chain": "Seriell" + }, + "status": { + "queued": "In Warteschlange", + "running": "Läuft", + "completed": "Abgeschlossen", + "error": "Fehler", + "cancelled": "Abgebrochen", + "waiting_permission": "Wartet auf Berechtigung", + "waiting_question": "Wartet auf Eingabe" + } + } + }, + "mode": { + "current": "Aktueller Modus: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Zur übergeordneten Sitzung zurück", + "share": "Teilen", + "more": "Mehr" + }, + "subagents": { + "label": "subagent" + }, + "advancedSettings": { + "button": "Erweitert", + "title": "Erweiterte Konfiguration", + "closeHint": "Esc zum Schließen", + "systemPrompt": "System-Prompt", + "systemPromptPlaceholder": "Voreinstellung auswählen", + "temperature": "Temperatur", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ist bei aktiviertem Denken fest auf {enabled} und bei deaktiviertem Denken fest auf {disabled} gesetzt.", + "contextLength": "Kontextlänge", + "maxTokens": "Maximale Ausgabe", + "thinkingBudget": "Denkbudget", + "verbosity": "Antwortdetail", + "forceInterleavedThinkingCompat": "Interleaved Thinking", + "forceInterleavedThinkingCompatDescription": "Steuert, ob diese Sitzung reasoning- und tool-call-Nachrichten mit Interleaved Thinking verarbeitet.", + "verbosityPlaceholder": "Detailstufe auswählen", + "currentCustomPrompt": "Aktuell benutzerdefiniert", + "useDefault": "Standard verwenden", + "decreaseValue": "{label} verringern", + "increaseValue": "{label} erhöhen", + "toggleValue": "{label} umschalten", + "validation": { + "finiteNumber": "Muss eine endliche Zahl sein", + "nonNegativeInteger": "Muss eine nicht negative ganze Zahl sein", + "contextLengthAtLeastMaxTokens": "Muss größer oder gleich der maximalen Ausgabe sein", + "maxTokensWithinContextLength": "Muss kleiner oder gleich der Kontextlänge sein" + } + }, + "modelPicker": { + "empty": "Keine Modelle gefunden", + "audioInputSupported": "Audioeingabe unterstützt" + }, + "audio": { + "play": "Abspielen", + "pause": "Pausieren" + }, + "call": { + "title": "Voice.ai-Anruf", + "description": "Klicken Sie, um den Voice.ai-Sprach-Agent zu verbinden. Sprechen Sie, sobald der Anruf verbunden ist.", + "start": "Sprachanruf starten", + "stop": "Anruf beenden", + "end": "Auflegen" + }, + "skills": { + "indicator": { + "active": "{count} angeheftete Skills", + "none": "Keine angehefteten Skills" + }, + "panel": { + "title": "Angeheftete Skills", + "manage": "Verwalten", + "empty": "Keine Skills installiert" + } + }, + "workspace": { + "title": "Arbeitsbereich", + "collapse": "Einklappen", + "sections": { + "files": "Dateien", + "git": "Git", + "artifacts": "Artifacts", + "subagents": "subagent" + }, + "plan": { + "section": "Plan", + "empty": "Noch keine Aufgaben", + "itemAriaLabel": "{status}: {step}", + "status": { + "pending": "Ausstehend", + "in_progress": "In Bearbeitung", + "completed": "Abgeschlossen", + "failed": "Fehlgeschlagen", + "skipped": "Übersprungen" + } + }, + "files": { + "section": "Dateien", + "empty": "Keine Dateien", + "loading": "Dateien werden geladen...", + "noWorkspace": { + "title": "Kein Arbeitsbereich", + "description": "Ordner auswählen oder hierher ziehen, um den Arbeitsbereich festzulegen", + "button": "Ordner auswählen" + }, + "contextMenu": { + "openFile": "Datei öffnen", + "revealInFolder": "Im Dateimanager anzeigen", + "insertPath": "In Eingabe einfügen" + } + }, + "git": { + "empty": "Kein diff verfügbar", + "clean": "Arbeitsbereich sauber", + "staged": "Gestaged", + "unstaged": "Nicht gestaged" + }, + "subagents": { + "empty": "Keine subagent-Sitzungen", + "self": "Aktueller Agent", + "status": { + "working": "Läuft", + "error": "Fehler", + "idle": "Inaktiv" + } + }, + "browser": { + "section": "Browser", + "empty": "Keine Tabs" + }, + "terminal": { + "section": "Terminal", + "empty": "Keine Ausgabe", + "contextMenu": { + "terminate": "Befehl beenden", + "delete": "Eintrag löschen", + "expand": "Erweitert anzeigen", + "collapse": "Einklappen" + }, + "output": { + "truncated": "[gekürzt]" + }, + "noOutput": "Keine Ausgabe", + "status": { + "running": "Läuft", + "completed": "Erfolgreich", + "failed": "Fehlgeschlagen", + "timed_out": "Zeitüberschreitung", + "aborted": "Abgebrochen" + } + } + }, + "newThread": { + "title": "Bauen und erkunden" + }, + "floatingWidget": { + "title": "Aufgabenübersicht", + "collapse": "Schwebende Sitzungsliste einklappen", + "empty": "Noch keine Agent-Sitzungen", + "executing": "Aktiv", + "sessionCount": "{count} Sitzungen", + "untitled": "Neuer Chat", + "status": { + "inProgress": "In Bearbeitung", + "done": "Abgeschlossen", + "error": "Fehler" + } + }, + "permissionMode": { + "default": "Standardberechtigungen", + "fullAccess": "Vollzugriff" + }, + "sidebar": { + "allAgents": "Alle Agents", + "expandSidebar": "Seitenleiste ausklappen", + "collapseSidebar": "Seitenleiste einklappen", + "remoteControlDisabled": "Nicht aktiviert", + "remoteControlStatus": { + "disabled": "Fernsteuerung deaktiviert", + "stopped": "Fernsteuerung gestoppt", + "starting": "Fernsteuerung startet", + "running": "Fernsteuerung läuft", + "backoff": "Fernsteuerung versucht erneut", + "error": "Fehler bei Fernsteuerung" + }, + "groupByDate": "Nach Zeit gruppieren", + "groupByProject": "Nach Projekt gruppieren", + "pinned": "Angeheftete Chats", + "emptyTitle": "Noch keine Chats", + "emptyDescription": "Starten Sie einen neuen Chat", + "searchPlaceholder": "Chat-Titel suchen", + "searchAriaLabel": "Chat-Titel suchen", + "searchEmptyTitle": "Keine passenden Chats gefunden", + "searchEmptyDescription": "Versuchen Sie ein anderes Stichwort" + }, + "spotlight": { + "placeholder": "Chats, Agent, Einstellungen und Aktionen suchen…", + "searching": "Suche läuft…", + "emptyTitle": "Keine Treffer", + "emptyDescription": "Versuchen Sie ein anderes Stichwort oder öffnen Sie eine aktuelle Sitzung.", + "hints": "↑↓ auswählen · Enter öffnen · Esc schließen · Home/Ende springen", + "kind": { + "session": "Sitzung", + "message": "Nachricht", + "agent": "Agent", + "setting": "Einstellung", + "action": "Aktion" + } + }, + "inlineSearch": { + "placeholder": "Aktuellen Chat suchen", + "ariaLabel": "Aktuellen Chat suchen", + "previous": "Vorheriger Treffer", + "next": "Nächster Treffer", + "close": "Suche schließen" + }, + "onboarding": { + "agentSwitch": { + "title": "Zu DeepChat Agent wechseln", + "description": "Wechseln Sie vor dem Chatten vom ACP Agent zurück zum DeepChat-Dialogfluss.", + "caption": "Klicken Sie in der Seitenleiste auf die hervorgehobene Agent-Schaltfläche, um fortzufahren." + }, + "switchModel": { + "description": "Wählen Sie das Modell für Ihren ersten DeepChat-Chat aus.", + "caption": "Verwenden Sie den hervorgehobenen Modellumschalter und wählen Sie ein verfügbares Modell." + }, + "firstChat": { + "description": "Alles ist bereit. Senden Sie hier Ihre erste Nachricht, um die Einführung abzuschließen.", + "caption": "Der Fokus bleibt auf dem Eingabefeld, bis Sie die erste Nachricht wirklich senden." + } + } +} diff --git a/src/renderer/src/i18n/de-DE/common.json b/src/renderer/src/i18n/de-DE/common.json new file mode 100644 index 000000000..8be5efc4c --- /dev/null +++ b/src/renderer/src/i18n/de-DE/common.json @@ -0,0 +1,128 @@ +{ + "loading": "Wird geladen...", + "copy": "Kopieren", + "copied": "Kopiert", + "paste": "Einfügen", + "copySuccess": "Kopiert", + "copySuccessDesc": "Inhalt wurde in die Zwischenablage kopiert", + "copyImageSuccess": "Kopiert", + "copyImageSuccessDesc": "Bild wurde in die Zwischenablage kopiert", + "copyFailed": "Kopieren fehlgeschlagen", + "copyFailedDesc": "Inhalt konnte nicht in die Zwischenablage kopiert werden", + "copyCode": "Code kopieren", + "export": "Exportieren", + "newChat": "Neuer Chat", + "newTopic": "Neues Thema", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "next": "Weiter", + "back": "Zurück", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "disclaimer": "Haftungsausschluss", + "close": "Schließen", + "open": "Öffnen", + "image": "Bild", + "noContent": "Kein Inhalt", + "preview": "Vorschau", + "source": "Quelltext", + "more": "Mehr", + "decrease": "Verringern", + "increase": "Erhöhen", + "fontSmaller": "Schrift verkleinern", + "fontReset": "Schrift zurücksetzen", + "fontLarger": "Schrift vergrößern", + "zoomIn": "Vergrößern", + "zoomOut": "Verkleinern", + "resetZoom": "Zoom zurücksetzen", + "error": { + "requestFailed": "Anfrage fehlgeschlagen...", + "createChatFailed": "Chat konnte nicht erstellt werden", + "selectChatFailed": "Chat konnte nicht ausgewählt werden", + "renameChatFailed": "Chat konnte nicht umbenannt werden", + "deleteChatFailed": "Chat konnte nicht gelöscht werden", + "cleanMessagesFailed": "Chatnachrichten konnten nicht geleert werden", + "userCanceledGeneration": "Der Benutzer hat die Generierung abgebrochen", + "sessionInterrupted": "Die Sitzung wurde unerwartet unterbrochen, die Generierung ist unvollständig", + "noModelResponse": "Das Modell hat keinen Inhalt zurückgegeben, möglicherweise wegen Zeitüberschreitung", + "invalidJson": "Ungültiges JSON-Format", + "maximumToolCallsReached": "Maximale Anzahl an Tool-Aufrufen erreicht", + "causeOfError": "Mögliche Fehlerursachen:", + "error400": "Fehlerhafte Anfrage, möglicherweise Parameter- oder Kompatibilitätsproblem", + "error401": "Authentifizierung fehlgeschlagen, möglicherweise falscher API Key oder falsche Domain", + "error403": "Zugriff auf dieses Modell verweigert, möglicherweise unzureichendes Guthaben oder fehlende Berechtigung", + "error404": "Anfrageadresse nicht gefunden, möglicherweise falsche Domain oder falscher Modellname", + "error429": "Zu viele Anfragen, der Dienstanbieter hat die Zugriffsrate begrenzt", + "error500": "Serverfehler, der Dienst ist möglicherweise instabil. Bitte später erneut versuchen", + "error502": "Gateway-Fehler, der Dienst ist möglicherweise instabil. Bitte später erneut versuchen", + "error503": "Dienst nicht verfügbar, der Dienst ist möglicherweise instabil. Bitte später erneut versuchen", + "error504": "Anfragezeit überschritten, der Dienst ist möglicherweise instabil oder es gibt Netzwerkprobleme. Bitte Proxy- und Netzwerkeinstellungen prüfen und erneut versuchen", + "operationFailed": "Vorgang fehlgeschlagen", + "invalidQuestionRequest": "Ungültige Fragenanfrage" + }, + "resetDataConfirmTitle": "Alle Daten zurücksetzen?", + "resetDataConfirmDescription": "Dadurch werden alle Daten auf die Standardeinstellungen zurückgesetzt. Diese Aktion kann nicht rückgängig gemacht werden.", + "title": "Allgemeine Einstellungen", + "resetData": "Daten zurücksetzen", + "language": "Sprache", + "languageSelect": "Sprache auswählen", + "searchEngine": "Suchmaschine", + "searchEngineSelect": "Suchmaschine auswählen", + "searchPreview": "Suchvorschau", + "searchAssistantModel": "Assistentenmodell", + "selectModel": "Modell auswählen", + "proxyMode": "Proxy-Modus", + "proxyModeSelect": "Proxy-Modus auswählen", + "proxyModeSystem": "System-Proxy", + "proxyModeNone": "Kein Proxy", + "proxyModeCustom": "Benutzerdefinierter Proxy", + "customProxyUrl": "Benutzerdefinierte Proxy-Adresse", + "customProxyUrlPlaceholder": "Beispiel: http://127.0.0.1:7890", + "invalidProxyUrl": "Ungültige Proxy-Adresse. Bitte eine gültige http/https URL eingeben", + "languageSystem": "Systemsprache verwenden", + "watermarkTip": "KI-generierte Inhalte, bitte sorgfältig prüfen", + "collapse": "Einklappen", + "expand": "Ausklappen", + "add": "Hinzufügen", + "reset": "Zurücksetzen", + "format": "Formatieren", + "edit": "Bearbeiten", + "delete": "Löschen", + "save": "Speichern", + "clear": "Leeren", + "saved": "Gespeichert", + "unknownError": "Unbekannter Fehler", + "testing": "Test läuft", + "saving": "Wird gespeichert", + "scrollLeft": "Nach links scrollen", + "scrollRight": "Nach rechts scrollen", + "history": "Verlauf", + "minimize": "Minimieren", + "maximize": "Maximieren", + "restore": "Wiederherstellen", + "browser": { + "back": "Zurück", + "forward": "Vorwärts", + "reload": "Neu laden", + "addressLabel": "Adressleiste", + "addressPlaceholder": "URL eingeben", + "enterUrlToStart": "URL eingeben, um zu starten", + "enterUrlDescription": "Geben Sie oben in der Adressleiste eine URL ein, um eine Website zu öffnen", + "name": "Yo Browser" + }, + "size": { + "bytes": "{count} Byte" + }, + "time": { + "today": "Heute", + "yesterday": "Gestern", + "lastWeek": "Letzte Woche", + "older": "Älter" + }, + "project": { + "select": "Projekt auswählen", + "none": "Kein Projekt", + "recent": "Letzte Projekte", + "openFolder": "Ordner öffnen..." + } +} diff --git a/src/renderer/src/i18n/de-DE/components.json b/src/renderer/src/i18n/de-DE/components.json new file mode 100644 index 000000000..19d8ffcfc --- /dev/null +++ b/src/renderer/src/i18n/de-DE/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Emojis suchen", + "smileys": "Smileys & Emotionen", + "people": "Menschen & Körper", + "animals": "Tiere & Natur", + "food": "Essen & Getränke", + "travel": "Reisen & Orte", + "activities": "Aktivitäten", + "objects": "Objekte", + "symbols": "Symbole", + "flags": "Flaggen" + }, + "messageBlockAction": { + "continue": "Fortfahren", + "continued": "Fortgesetzt" + }, + "messageBlockPermissionRequest": { + "title": "Berechtigung erforderlich", + "allow": "Zulassen", + "allowOnce": "Einmal zulassen", + "allowForSession": "Für diese Sitzung zulassen", + "allowOnceTooltip": "Diesen Befehl nur diesmal ausführen, ohne die Entscheidung zu speichern.", + "allowForSessionTooltip": "Diesen Befehl für die aktuelle Sitzung merken.", + "deny": "Ablehnen", + "rememberChoice": "Diese Auswahl merken", + "granted": "Berechtigung erteilt", + "denied": "Berechtigung abgelehnt", + "riskLabel": "Risiko", + "type": { + "read": "Lesezugriff", + "write": "Schreibzugriff", + "all": "Vollzugriff", + "command": "Befehl ausführen" + }, + "description": { + "read": "Soll '{toolName}' von '{serverName}' Leseoperationen ausführen dürfen?", + "write": "Soll '{toolName}' von '{serverName}' Schreiboperationen ausführen dürfen?", + "all": "Soll '{toolName}' von '{serverName}' Lese- und Schreiboperationen ausführen dürfen?", + "command": "Befehl ausführen: {command}", + "commandWithRisk": "Befehl ausführen: {command}\n\nRisikostufe: {riskLevel}\n\nEmpfehlung: {suggestion}" + }, + "riskLevel": { + "low": "Niedrig", + "medium": "Mittel", + "high": "Hoch", + "critical": "Kritisch" + }, + "suggestion": { + "low": "Dieser Befehl ist schreibgeschützt und hat geringe Auswirkungen.", + "medium": "Dieser Befehl kann Abhängigkeiten installieren oder den Zustand ändern. Bitte vor dem Ausführen prüfen.", + "high": "Dieser Befehl ändert Dateien oder Systemzustand. Bitte vorsichtig fortfahren.", + "critical": "Dieser Befehl kann destruktiv sein oder auf externe Netzwerke zugreifen. Bitte genau prüfen." + } + }, + "promptParamsDialog": { + "title": "{name} Parametereinstellungen", + "description": "Bitte füllen Sie die folgenden Parameter aus. Mit * markierte Felder sind erforderlich.", + "required": "Dieser Parameter ist erforderlich" + }, + "messageBlockQuestionRequest": { + "title": "Frage", + "send": "Senden", + "reject": "Ablehnen", + "selected": "Ausgewählt", + "rejected": "Abgelehnt", + "customPlaceholder": "Antwort eingeben...", + "answerLabel": "Antwort" + } +} diff --git a/src/renderer/src/i18n/de-DE/contextMenu.json b/src/renderer/src/i18n/de-DE/contextMenu.json new file mode 100644 index 000000000..73179bdba --- /dev/null +++ b/src/renderer/src/i18n/de-DE/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "Übersetzen", + "original": "Original", + "translated": "Übersetzung", + "error": "Übersetzung fehlgeschlagen" + }, + "askAI": { + "title": "KI fragen", + "question": "Frage", + "answer": "Antwort", + "error": "KI-Antwort fehlgeschlagen" + }, + "copy": "Kopieren", + "paste": "Einfügen", + "cut": "Ausschneiden" +} diff --git a/src/renderer/src/i18n/de-DE/dialog.json b/src/renderer/src/i18n/de-DE/dialog.json new file mode 100644 index 000000000..eb1a5047a --- /dev/null +++ b/src/renderer/src/i18n/de-DE/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "close": "Schließen", + "ok": "OK", + "delete": { + "title": "Diesen Chat wirklich löschen?", + "description": "Diese Aktion kann nicht rückgängig gemacht werden. Bitte vorsichtig fortfahren.", + "confirm": "Löschen" + }, + "rename": { + "title": "Chat umbenennen", + "description": "Bitte geben Sie einen neuen Chatnamen ein." + }, + "cleanMessages": { + "title": "Chatnachrichten leeren", + "description": "Beim Leeren werden alle Nachrichten und Dateien dieses Chats gelöscht. Fortfahren?", + "confirm": "Leeren" + }, + "fork": { + "title": "Chat-Zweig erstellen", + "description": "Kopiert alle Nachrichten von der ersten bis zur aktuell ausgewählten Nachricht in einen neuen Chat. Dort können Sie die Unterhaltung fortsetzen.", + "confirm": "Zweig erstellen", + "tag": "Zweig" + }, + "error": { + "title": "Fehler" + }, + "mutualExclusive": { + "title": { + "reasoning": "Reasoning aktivieren bestätigen", + "functionCall": "Funktionsaufrufe aktivieren bestätigen" + }, + "message": { + "reasoning": "Das Aktivieren von Reasoning deaktiviert automatisch Funktionsaufrufe. Das ist eine Einschränkung des DeepSeek-V3.1-Modells; beide Funktionen können nicht gleichzeitig verwendet werden. Fortfahren?", + "functionCall": "Das Aktivieren von Funktionsaufrufen deaktiviert automatisch Reasoning. Das ist eine Einschränkung des DeepSeek-V3.1-Modells; beide Funktionen können nicht gleichzeitig verwendet werden. Fortfahren?" + }, + "warningText": { + "reasoning": "Hinweis: Das Aktivieren von Reasoning deaktiviert automatisch Funktionsaufrufe. Dies ist eine Einschränkung des DeepSeek-V3.1-Modells.", + "functionCall": "Hinweis: Das Aktivieren von Funktionsaufrufen deaktiviert automatisch Reasoning. Dies ist eine Einschränkung des DeepSeek-V3.1-Modells." + }, + "confirmEnable": "Aktivieren bestätigen" + } +} diff --git a/src/renderer/src/i18n/de-DE/image.json b/src/renderer/src/i18n/de-DE/image.json new file mode 100644 index 000000000..174a7c251 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "Bild konnte nicht geladen werden", + "loading": "Bild wird geladen...", + "preview": "Bildvorschau", + "save": "Bild speichern", + "saveAs": "Bild speichern unter...", + "saveSuccess": "Bild wurde gespeichert", + "saveFailed": "Bild konnte nicht gespeichert werden" +} diff --git a/src/renderer/src/i18n/de-DE/index.ts b/src/renderer/src/i18n/de-DE/index.ts new file mode 100644 index 000000000..bd802d4d9 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Einzelne Top-Level-Keys +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Qwen Model', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + 'DeepChat ist lediglich ein Hilfswerkzeug. Wenn Benutzer aktiv eine Suche starten, organisiert und fasst DeepChat öffentliche Daten zusammen, die von Suchmaschinen zurückgegeben werden, damit Benutzer Suchergebnisse bequemer anzeigen und verstehen können.\n\n1. **Nutzung öffentlicher Daten** \nDiese Software verarbeitet ausschließlich Daten, die auf Zielwebsites oder in Suchmaschinen öffentlich und ohne Anmeldung zugänglich sind. Bitte lesen und beachten Sie vor der Nutzung unbedingt die Nutzungsbedingungen der Zielwebsite oder Suchmaschine, um sicherzustellen, dass Ihre Nutzung rechtmäßig und regelkonform ist. \n\n2. **Richtigkeit von Informationen und Verantwortung** \nDie von dieser Software organisierten und erzeugten Inhalte dienen nur als Referenz und stellen keinerlei rechtliche, geschäftliche oder sonstige Beratung dar. Die Entwickler übernehmen keine Garantie für Richtigkeit, Vollständigkeit, Aktualität oder Rechtmäßigkeit der Suchergebnisse. Alle Folgen, die aus der Nutzung dieser Software entstehen, trägt der Benutzer selbst. \n\n3. **Haftungsausschluss** \nDiese Software wird im "Ist-Zustand" bereitgestellt. Die Entwickler übernehmen keine ausdrückliche oder stillschweigende Gewährleistung oder Verantwortung für Leistung, Stabilität oder Eignung. Wenn bei der Nutzung dieser Software Streitigkeiten, Verluste oder rechtliche Haftung durch Verstöße gegen geltende Gesetze, Vorschriften oder Regeln der Zielwebsite entstehen, übernehmen die Entwickler keine Verantwortung. \n\n4. **Eigenverantwortung der Benutzer** \nVor der Nutzung dieser Software sollten Benutzer vollständig verstehen und bestätigen, dass ihre Nutzung keine geistigen Eigentumsrechte, Geschäftsgeheimnisse oder sonstigen berechtigten Rechte anderer verletzt. Für rechtliche Streitigkeiten und Folgen, die aus unsachgemäßer Nutzung dieser Software durch Benutzer entstehen, sind ausschließlich die Benutzer selbst verantwortlich. \n\nDie Nutzung dieser Software bedeutet, dass der Benutzer alle Bedingungen dieses Haftungsausschlusses gelesen, verstanden und akzeptiert hat. Bei Fragen wenden Sie sich bitte an einen professionellen Rechtsberater.' +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/de-DE/mcp.json b/src/renderer/src/i18n/de-DE/mcp.json new file mode 100644 index 000000000..a5cb8f3bb --- /dev/null +++ b/src/renderer/src/i18n/de-DE/mcp.json @@ -0,0 +1,307 @@ +{ + "title": "MCP-Einstellungen", + "description": "MCP-Server (Model Context Protocol) und Tools verwalten und konfigurieren", + "enabledTitle": "MCP aktivieren", + "enabledDescription": "Nach dem Aktivieren werden aktivierte Dienste automatisch gestartet", + "enableToAccess": "Bitte aktivieren Sie zuerst MCP, um auf Konfigurationsoptionen zuzugreifen", + "errors": { + "loadConfigFailed": "MCP-Konfiguration konnte nicht geladen werden", + "setEnabledFailed": "MCP-Aktivierungsstatus konnte nicht gesetzt werden", + "getServerStatusFailed": "Status von Server {serverName} konnte nicht abgerufen werden", + "addServerFailed": "Server konnte nicht hinzugefügt werden", + "updateServerFailed": "Server konnte nicht aktualisiert werden", + "removeServerFailed": "Server konnte nicht gelöscht werden", + "maxDefaultServersReached": "Es können höchstens 30 Standardserver festgelegt werden", + "toggleDefaultServerFailed": "Standardserver-Status konnte nicht umgeschaltet werden", + "resetToDefaultFailed": "Standardserver konnten nicht wiederhergestellt werden", + "toggleServerFailed": "Status von Server {serverName} konnte nicht umgeschaltet werden", + "loadToolsFailed": "Tools konnten nicht geladen werden", + "loadPromptsFailed": "Prompt-Vorlagen konnten nicht geladen werden", + "loadResourcesFailed": "Ressourcen konnten nicht geladen werden", + "callToolFailed": "Tool {toolName} konnte nicht aufgerufen werden", + "toolCallError": "Tool-Aufruffehler: {error}", + "mcpDisabled": "MCP ist deaktiviert", + "getPromptFailed": "Prompt-Vorlage konnte nicht abgerufen werden", + "readResourceFailed": "Ressource konnte nicht gelesen werden", + "promptNotFound": "Prompt-Vorlage '{name}' nicht gefunden", + "emptyPromptContent": "Prompt '{name}' ist leer", + "missingParameters": "Fehlende Parameter: {params}", + "invalidParameters": "Ungültige Parameter: {params}" + }, + "tabs": { + "servers": "Server", + "tools": "Tools" + }, + "serverList": "Serverliste", + "addServer": "Server hinzufügen", + "running": "Läuft", + "stopped": "Gestoppt", + "stopServer": "Server stoppen", + "startServer": "Server starten", + "noServersFound": "Keine Server gefunden", + "addServerDialog": { + "title": "Server hinzufügen", + "description": "Neuen MCP-Server konfigurieren" + }, + "editServerDialog": { + "title": "Server bearbeiten", + "description": "MCP-Serverkonfiguration bearbeiten" + }, + "serverForm": { + "name": "Servername", + "namePlaceholder": "Servernamen eingeben", + "nameRequired": "Servername darf nicht leer sein", + "type": "Servertyp", + "typePlaceholder": "Servertyp auswählen", + "typeStdio": "Standard-Ein-/Ausgabe", + "typeSse": "Server-Sent Events", + "typeInMemory": "In-Memory", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Base URL des Servers eingeben (z. B. http://localhost:3000)", + "command": "Befehl", + "commandPlaceholder": "Befehl eingeben", + "commandRequired": "Befehl darf nicht leer sein", + "args": "Argumente", + "argsPlaceholder": "Ein Argument pro Zeile", + "addArg": "Argument hinzufügen", + "argPlaceholder": "Argumentwert eingeben", + "argsRequired": "Argumente dürfen nicht leer sein", + "env": "Umgebungsvariablen", + "envPlaceholder": "Umgebungsvariablen im JSON-Format eingeben", + "envInvalid": "Umgebungsvariablen müssen gültiges JSON sein", + "description": "Beschreibung", + "descriptionPlaceholder": "Serverbeschreibung eingeben", + "descriptions": "Beschreibung", + "descriptionsPlaceholder": "Serverbeschreibung eingeben", + "icon": "Symbol", + "iconPlaceholder": "Symbol eingeben", + "icons": "Symbole", + "iconsPlaceholder": "Symbol eingeben", + "autoApprove": "Automatisch autorisieren", + "autoApproveAll": "Alle", + "autoApproveRead": "Lesen", + "autoApproveWrite": "Schreiben", + "autoApproveHelp": "Wählen Sie die Vorgangstypen aus, die ohne Benutzerbestätigung automatisch autorisiert werden", + "submit": "Absenden", + "add": "Hinzufügen", + "update": "Aktualisieren", + "cancel": "Abbrechen", + "jsonConfigIntro": "Sie können eine JSON-Konfiguration direkt einfügen oder den Server manuell konfigurieren.", + "jsonConfig": "JSON-Konfiguration", + "jsonConfigPlaceholder": "Bitte MCP-Serverkonfiguration im JSON-Format einfügen", + "jsonConfigExample": "Beispiel für JSON-Konfiguration", + "parseSuccess": "Konfiguration erfolgreich geparst", + "configImported": "Konfiguration erfolgreich importiert", + "parseError": "Parse-Fehler", + "skipToManual": "Zur manuellen Konfiguration springen", + "parseAndContinue": "Parsen und fortfahren", + "folders": "Ordnerliste", + "addFolder": "Ordner hinzufügen", + "selectFolder": "Ordner auswählen", + "selectFolderError": "Ordnerauswahl fehlgeschlagen", + "noFoldersSelected": "Keine Ordner ausgewählt" + }, + "deleteServer": "Server löschen", + "editServer": "Server bearbeiten", + "setDefault": "Als Standard festlegen", + "removeDefault": "Standard entfernen", + "isDefault": "Standardserver", + "default": "Standard", + "setAsDefault": "Als Standardserver festlegen", + "removeServer": "Server löschen", + "confirmRemoveServer": "Server {name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "removeServerDialog": { + "title": "Server löschen" + }, + "confirmDelete": { + "title": "Löschen bestätigen", + "description": "Server {name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "confirm": "Löschen", + "cancel": "Abbrechen" + }, + "resetToDefault": "Standarddienste wiederherstellen", + "resetConfirmTitle": "Standarddienste wiederherstellen", + "resetConfirmDescription": "Dadurch werden alle Standardserver wiederhergestellt, während Ihre benutzerdefinierten Server erhalten bleiben. Änderungen an Standardservern gehen verloren.", + "resetConfirm": "Wiederherstellen", + "tools": { + "searchPlaceholder": "Tools suchen...", + "noToolsAvailable": "Keine Tools verfügbar", + "selectToolToDebug": "Tool zum Debuggen auswählen", + "dialogDescription": "Von MCP-Servern bereitgestellte Tools debuggen und testen", + "toolsCount": "Tools", + "availableTools": "Verfügbare Tools", + "toolList": "Tool-Liste", + "functionDescription": "Funktionsbeschreibung", + "invalidJson": "Ungültiges JSON-Format", + "inputHint": "Bitte Parameter im JSON-Format eingeben", + "required": "Erforderlich", + "noDescription": "Keine Beschreibung", + "input": "Eingabeparameter", + "path": "Pfad", + "pathPlaceholder": "Dateipfad eingeben", + "searchPattern": "Suchmuster", + "searchPatternPlaceholder": "Regulären Ausdruck eingeben", + "filePattern": "Dateimuster", + "filePatternPlaceholder": "Dateimuster eingeben, z. B.: *.md", + "executeButton": "Tool ausführen", + "resultTitle": "Ausführungsergebnis", + "runningTool": "Tool wird ausgeführt", + "loading": "Wird geladen...", + "error": "Laden fehlgeschlagen", + "available": "{count} Tools verfügbar", + "none": "Keine Tools verfügbar", + "title": "MCP-Tools", + "description": "Von MCP-Servern bereitgestellte Tools", + "loadError": "Tools konnten nicht geladen werden", + "parameters": "Parameter", + "refresh": "Aktualisieren", + "disabled": "MCP ist deaktiviert", + "enableToUse": "Bitte aktivieren Sie MCP, um Tools zu verwenden", + "enabled": "MCP aktivieren", + "enabledDescription": "MCP-Funktion aktivieren, um Tool-Aufrufe zu verwenden", + "acpManagedHint": "MCP-Tools werden vom „ACP Agent“ verwaltet", + "acpServersSelected": "{count} MCP ausgewählt", + "acpServersNone": "Dieser Agent hat kein MCP konfiguriert", + "jsonInputPlaceholder": "Parameter im JSON-Format eingeben", + "type": "Typ", + "annotations": "Annotationen", + "empty": "Leer", + "invalidJsonFormat": "JSON-Format ist ungültig", + "allowedValues": "Erlaubte Werte", + "arrayItemValues": "Array-Elementwerte" + }, + "inmemory": { + "bochaSearch": { + "name": "Bocha Search", + "desc": "Bocha Search API https://open.bochaai.com/" + }, + "buildInFileSystem": { + "name": "Dateisystem", + "desc": "Ermöglicht DeepChat den Zugriff auf lokale Dateien" + }, + "Artifacts": { + "name": "Artifacts", + "desc": "Ermöglicht vielfältigere Artifacts-Inhalte in DeepChat-Ausgaben" + }, + "braveSearch": { + "name": "Brave Search", + "desc": "Brave Search API https://brave.com/search/api/" + }, + "difyKnowledge": { + "name": "Dify-Wissensdatenbanksuche", + "desc": "Dify-Wissensdatenbanksuche zum Abrufen von Inhalten aus Dify-Wissensdatenbanken" + }, + "ragflowKnowledge": { + "name": "RAGFlow-Wissensdatenbanksuche", + "desc": "RAGFlow-Wissensdatenbanksuche zum Durchsuchen von RAGFlow-Wissensdatenbanken" + }, + "fastGptKnowledge": { + "name": "FastGPT-Wissensdatenbanksuche", + "desc": "FastGPT-Wissensdatenbanksuche zum Durchsuchen von FastGPT-Wissensdatenbanken" + }, + "builtinKnowledge": { + "name": "Integrierte Wissensdatenbanksuche", + "desc": "Integrierte DeepChat-Wissensdatenbanksuche zum Durchsuchen integrierter DeepChat-Wissensdatenbanken" + }, + "deepchat-inmemory/custom-prompts-server": { + "name": "Benutzerdefinierte Prompts", + "desc": "Integrierter DeepChat-Dienst für benutzerdefinierte Prompts" + }, + "deepchat-inmemory/deep-research-server": { + "name": "DeepResearch", + "desc": "Integrierter DeepChat-Dienst für Deep Research auf Basis von Bocha Search. Modelle mit langem Kontext werden empfohlen." + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Automatische Prompt-Vorlagen", + "desc": "Wählt automatisch den passendsten benutzerdefinierten Prompt anhand der Eingabe aus und füllt die Prompt-Vorlage intelligent aus" + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Chatverlaufssuche", + "desc": "Integrierte DeepChat-Suche für frühere Chats und Nachrichteninhalte" + }, + "deepchat/apple-server": { + "name": "macOS-Systemassistent", + "desc": "Ermöglicht dem Modell die Nutzung von macOS-Systemfunktionen wie Kalender, Kontakte, Mail, Karten, Notizen und Erinnerungen" + } + }, + "prompts": { + "noPromptsAvailable": "Keine Prompts verfügbar", + "noDescription": "Keine Beschreibung", + "selectPrompt": "Der ausgewählte Prompt wird hier angezeigt", + "parameters": "Prompt-Parameter", + "input": "Eingabeparameter", + "runningPrompt": "Prompt wird abgerufen", + "executeButton": "Abrufen", + "resultTitle": "Prompt-Details", + "resetToDefault": "Auf Standardparameter zurücksetzen", + "invalidJson": "Ungültiges JSON-Format", + "parametersHint": "Bitte Parameter im JSON-Format eingeben; automatische Formatierung wird unterstützt", + "dialogDescription": "Von MCP-Servern bereitgestellte Prompt-Vorlagen debuggen und testen" + }, + "resources": { + "noResourcesAvailable": "Keine Resources verfügbar", + "selectResource": "Resource-Inhalt wird hier angezeigt", + "loading": "Wird geladen", + "loadContent": "Resource-Inhalt abrufen", + "pleaseSelect": "Klicken, um Resource-Details anzuzeigen", + "dialogDescription": "Von MCP-Servern bereitgestellte Ressourcen durchsuchen und anzeigen" + }, + "market": { + "browseBuiltin": "Integrierten MCP-Markt durchsuchen", + "builtinTitle": "MCP-Markt", + "poweredBy": "Powered by MCPRouter", + "keyGuide": "Schlüssel abrufen", + "keyHelpText": "Bitte gehen Sie zu", + "keyHelpEnd": "um einen API Key zu beantragen, und tragen Sie ihn oben ein", + "apiKeyPlaceholder": "MCPRouter API Key eingeben", + "apiKeyRequiredTitle": "API Key erforderlich", + "apiKeyRequiredDesc": "Bitte tragen Sie vor der Installation den MCPRouter API Key ein", + "install": "Installieren", + "installed": "Installiert", + "installSuccess": "Installation erfolgreich", + "installFailed": "Installation fehlgeschlagen", + "noMore": "Keine weiteren Einträge", + "empty": "Keine Dienste", + "loadMore": "Mehr laden", + "pullDownToLoad": "Weiter nach unten ziehen, um mehr zu laden" + }, + "sampling": { + "approve": "Zustimmen", + "confirming": "Wird bestätigt...", + "confirm": "Modellantwort senden", + "sendResponse": "Antwort senden", + "selectModel": "Modell auswählen", + "respondWith": "Antwortmodell:", + "maxTokensInfo": "Maximale Antwortlänge: {maxTokens} tokens", + "contentType": { + "audio": "Audio", + "image": "Bild", + "text": "Text" + }, + "description": "Vom MCP-Server geteilten Kontext prüfen und auswählen, ob eine Antwort generiert werden soll.", + "imageAlt": "Bild {index}", + "messagesTitle": "Chat-Kontext", + "noModels": "Keine passenden Modelle aktiviert.\nAktivieren Sie ein geeignetes Modell in den Einstellungen, um fortzufahren.", + "noVisionModels": "Keine Modelle mit Vision-Funktion aktiviert.\nAktivieren Sie ein Vision-Modell in den Einstellungen, um fortzufahren.", + "preference": { + "cost": "Kosten priorisieren", + "hints": "Modellhinweise", + "intelligence": "Intelligenz priorisieren", + "speed": "Geschwindigkeit priorisieren" + }, + "preferencesTitle": "Modellpräferenzen", + "reject": "Ablehnen", + "selectedModelLabel": "Antwort mit {model} ({provider})", + "systemPrompt": "System-Prompt", + "title": "Sampling-Anfrage von {server}", + "unknownHint": "Unbenannter Hinweis", + "unknownMime": "Unbekannter MIME-Typ", + "unknownServer": "Unbekannter Server", + "unsupportedMessage": "Dieser Inhaltstyp wird nicht unterstützt.", + "visionWarning": "Das ausgewählte Modell unterstützt keine Vision-Eingabe.\nBitte wählen Sie zuerst ein Modell mit Vision-Funktion aus.", + "autoApproving": "MCP-Sampling-Anfrage von {server}", + "autoApproveIn": "Automatische Freigabe mit {model} in {seconds} Sekunden", + "reviewRequest": "Details ansehen", + "sessionActive": "Sitzung aktiv - Anfrage wird automatisch genehmigt" + } +} diff --git a/src/renderer/src/i18n/de-DE/model.json b/src/renderer/src/i18n/de-DE/model.json new file mode 100644 index 000000000..4791698c7 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Modelle suchen..." + }, + "error": { + "loadFailed": "Modelle konnten nicht geladen werden" + }, + "type": { + "custom": "Benutzerdefiniertes Modell", + "official": "Offizielles Modell" + }, + "add": { + "namePlaceholder": "Modellname", + "idPlaceholder": "Modell-ID", + "contextLengthPlaceholder": "Kontextlänge", + "maxTokensPlaceholder": "Maximale token" + }, + "actions": { + "add": "Modell hinzufügen", + "enableAll": "Alle aktivieren", + "disableAll": "Alle deaktivieren" + }, + "sort": { + "status": "Nach Status", + "name": "Nach Name" + }, + "filter": { + "label": "Filter", + "clearAll": "Filter löschen", + "visibleCount": "{visible} / {total} anzeigen", + "capabilities": "Fähigkeiten", + "types": "Typen", + "capabilityOptions": { + "vision": "Vision", + "functionCall": "Funktionsaufrufe", + "reasoning": "Reasoning", + "search": "Websuche" + }, + "typeOptions": { + "chat": "Chat", + "embedding": "Embedding", + "rerank": "Rerank", + "imageGeneration": "Bilderzeugung", + "videoGeneration": "Videoerzeugung" + } + }, + "tags": { + "reasoning": "Reasoning", + "chat": "Chat", + "code": "Code", + "writing": "Schreiben", + "analysis": "Analyse" + } +} diff --git a/src/renderer/src/i18n/de-DE/plan.json b/src/renderer/src/i18n/de-DE/plan.json new file mode 100644 index 000000000..44bb53450 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/plan.json @@ -0,0 +1,4 @@ +{ + "title": "Aufgabenplan", + "completed": "Abgeschlossen" +} diff --git a/src/renderer/src/i18n/de-DE/promptSetting.json b/src/renderer/src/i18n/de-DE/promptSetting.json new file mode 100644 index 000000000..130b4dea5 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "Prompt-Verwaltung", + "addTitle": "Prompt hinzufügen", + "addDescription": "Eine neue benutzerdefinierte Prompt-Vorlage erstellen", + "editTitle": "Prompt bearbeiten", + "editDescription": "Ausgewählte Prompt-Vorlage ändern", + "name": "Name", + "namePlaceholder": "Prompt-Namen eingeben", + "description": "Beschreibung", + "descriptionPlaceholder": "Beschreibung eingeben (optional)", + "promptContent": "Prompt", + "contentPlaceholder": "Prompt-Inhalt eingeben", + "basicInfo": "Basisinformationen", + "contentTip": "Unterstützt Variablenplatzhalter wie {openBrace}{openBrace}variable{closeBrace}{closeBrace}; passende Parameter können im Parameterbereich definiert werden", + "noPrompt": "Noch keine Prompts. Klicken Sie oben rechts auf Hinzufügen", + "noPromptDesc": "Klicken Sie oben rechts auf die Schaltfläche zum Hinzufügen, um Ihren ersten Prompt zu erstellen", + "active": "Aktiv", + "noDescription": "Keine Beschreibung", + "customDate": "Benutzerdefiniert", + "showMore": "Mehr anzeigen", + "showLess": "Weniger anzeigen", + "export": "Exportieren", + "import": "Importieren", + "exportSuccess": "Export erfolgreich", + "exportFailed": "Export fehlgeschlagen", + "importSuccess": "Import erfolgreich", + "importFailed": "Import fehlgeschlagen", + "importStats": "{added} Prompts hinzugefügt, {updated} aktualisiert", + "parameters": "Parameter", + "addParameter": "Parameter hinzufügen", + "noParameters": "Keine Parameter", + "noParametersDesc": "Klicken Sie oben auf die Schaltfläche, um Parameter hinzuzufügen. Parameter können als Variablenplatzhalter in Prompts verwendet werden", + "parameterName": "Parametername", + "parameterDescription": "Parameterbeschreibung", + "parameterNamePlaceholder": "Parametername eingeben", + "parameterDescriptionPlaceholder": "Parameterbeschreibung eingeben", + "required": "Erforderlich", + "characters": "Zeichen", + "fileManagement": "Dateiverwaltung", + "uploadFromDevice": "Vom Gerät hochladen", + "uploadFromDeviceDesc": "Unterstützt Text, Dokumente, CSV und weitere Formate", + "uploadedFiles": "Hochgeladene Dateien", + "noFiles": "Keine Dateien", + "noFilesUploadDesc": "Klicken Sie oben, um Dateien hochzuladen", + "uploadSuccess": "Upload erfolgreich", + "uploadedCount": "{count} Dateien hochgeladen", + "confirmDelete": "Prompt \"{name}\" wirklich löschen?", + "confirmDeleteDescription": "Diese Aktion kann nicht rückgängig gemacht werden. Der Prompt wird dauerhaft gelöscht.", + "confirmDeleteSystemPrompt": "System-Prompt \"{name}\" wirklich löschen?", + "confirmDeleteSystemPromptDescription": "Diese Aktion kann nicht rückgängig gemacht werden. Der System-Prompt wird dauerhaft gelöscht.", + "deleteSuccess": "Löschen erfolgreich", + "deleteFailed": "Löschen fehlgeschlagen", + "inactive": "Deaktiviert", + "clickToEnable": "Zum Aktivieren klicken", + "clickToDisable": "Zum Deaktivieren klicken", + "enableSuccess": "Aktiviert", + "disableSuccess": "Deaktiviert", + "toggleFailed": "Status konnte nicht geändert werden", + "enablePrompt": "Diesen Prompt aktivieren", + "sourceLocal": "Lokal", + "sourceImported": "Importiert", + "sourceBuiltin": "Integriert", + "defaultSystemPrompt": "Standard-System-Prompt", + "defaultSystemPromptPlaceholder": "Standard-System-Prompt eingeben, der für alle neuen Chats verwendet wird...", + "defaultSystemPromptDescription": "Dieser Prompt wird als Standard-System-Prompt für alle neuen Chats verwendet. Sie können ihn beim Erstellen eines Chats ändern. Änderungen an dieser Einstellung gelten erst beim nächsten neuen Chat.", + "typing": "Eingabe läuft", + "saving": "Wird gespeichert", + "saved": "Gespeichert", + "saveDefaultPromptFailed": "Standard-System-Prompt konnte nicht gespeichert werden", + "systemPrompts": "System-Prompts", + "customPrompts": "Benutzerdefinierte Prompts", + "addSystemPrompt": "System-Prompt hinzufügen", + "addCustomPrompt": "Benutzerdefinierten Prompt hinzufügen", + "editSystemPrompt": "System-Prompt bearbeiten", + "addSystemPromptDesc": "Einen neuen System-Prompt erstellen", + "editSystemPromptDesc": "Ausgewählten System-Prompt ändern", + "selectSystemPrompt": "System-Prompt auswählen", + "systemPromptDescription": "Der ausgewählte System-Prompt wird als Standard für neue Chats verwendet", + "emptySystemPromptOption": "Leerer System-Prompt", + "emptySystemPromptDescription": "Bei Auswahl dieser Option enthalten neue Chats keinen System-Prompt.", + "preview": "Vorschau", + "systemPromptChanged": "System-Prompt wurde geändert", + "systemPromptChangeFailed": "System-Prompt konnte nicht geändert werden", + "systemPromptAdded": "System-Prompt erfolgreich hinzugefügt", + "systemPromptAddedAndSwitched": "System-Prompt erfolgreich hinzugefügt und automatisch als Standard festgelegt", + "systemPromptUpdated": "System-Prompt erfolgreich aktualisiert", + "systemPromptSaveFailed": "System-Prompt konnte nicht gespeichert werden", + "systemPromptDeleted": "System-Prompt erfolgreich gelöscht", + "systemPromptDeleteFailed": "System-Prompt konnte nicht gelöscht werden", + "systemPromptEditTip": "Änderungen werden automatisch gespeichert, sobald der Fokus verloren geht", + "resetToDefault": "Auf Standard zurücksetzen", + "resetToDefaultSuccess": "Auf Standardinhalt zurückgesetzt", + "resetToDefaultFailed": "Zurücksetzen fehlgeschlagen", + "parameterRequired": "Erforderliche Parameter" +} diff --git a/src/renderer/src/i18n/de-DE/routes.json b/src/renderer/src/i18n/de-DE/routes.json new file mode 100644 index 000000000..504200102 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "Chat", + "welcome": "Willkommen", + "settings": "Einstellungen", + "settings-common": "Allgemeine Einstellungen", + "settings-provider": "Anbietereinstellungen", + "settings-mcp": "MCP-Einstellungen", + "settings-deepchat-agents": "DeepChat Agent", + "settings-database": "Dateneinstellungen", + "settings-about": "Über", + "settings-shortcut": "Tastenkürzel", + "settings-display": "Anzeigeeinstellungen", + "settings-knowledge-base": "Wissensdatenbank", + "settings-prompt": "Prompt-Verwaltung", + "settings-mcp-market": "MCP-Markt", + "settings-acp": "ACP Agent", + "settings-skills": "Skills-Einstellungen", + "settings-notifications-hooks": "Hooks", + "settings-dashboard": "Datenübersicht", + "settings-environments": "Verzeichnisumgebungen", + "settings-remote": "Remote", + "settings-plugins": "Plugins", + "settings-overview": "Einstellungsübersicht" +} diff --git a/src/renderer/src/i18n/de-DE/settings.json b/src/renderer/src/i18n/de-DE/settings.json new file mode 100644 index 000000000..32e2726a0 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "Einstellungen", + "common": { + "title": "Allgemeine Einstellungen", + "resetData": "Daten zurücksetzen", + "language": "Sprache", + "languageSelect": "Sprache auswählen", + "searchEngine": "Suchmaschine", + "searchEngineSelect": "Suchmaschine auswählen", + "searchPreview": "Suchvorschau", + "launchAtLoginEnabled": "DeepChat beim Anmelden starten", + "autoScrollEnabled": "Beim Generieren automatisch scrollen", + "privacyMode": "Privatsphärenmodus", + "privacyModeDescription": "Nach dem Aktivieren des Privatsphärenmodus startet DeepChat die folgenden Anfragen nicht automatisch:", + "privacyModeAutoUpdate": "Updateprüfung der App", + "privacyModeProviderDb": "Aktualisierung von Anbieter- und Modellmetadaten", + "privacyModeAcpRegistry": "Aktualisierung der ACP Registry und Symbol-Synchronisierung", + "privacyModeNpmRegistry": "Automatische Erkennung der MCP npm Registry", + "privacyModeManualActions": "Manuelle Prüfungen und manuelle Aktualisierungen bleiben verfügbar.", + "privacyModeIntegrations": "Selbst konfigurierte Drittanbieter-Integrationen wie MCP / Remote bleiben unberührt", + "autoCompaction": { + "title": "Automatische Komprimierung", + "enabled": "Automatische Komprimierung aktivieren", + "description": "Wenn sich ein Chat dem Kontextfensterlimit des Modells nähert, fasst DeepChat ältere Verläufe automatisch zusammen, damit die Sitzung fortgesetzt werden kann. Bei Deaktivierung werden Verläufe außerhalb des Budgets direkt verworfen und nicht zusammengefasst.", + "thresholdLabel": "Auslöseschwelle", + "thresholdMin": "Früher ({value}%)", + "thresholdMax": "Später ({value}%)", + "thresholdDescription": "Komprimierung starten, wenn die prompt-Nutzung diesen Anteil des effektiven Verlaufsbudgets erreicht. Niedrigere Werte schaffen mehr Puffer, höhere Werte behalten mehr Rohkontext.", + "retainPairsLabel": "Neueste Nachrichtenpaare behalten", + "retainPairsValue": "{count} Paare", + "retainPairsDescription": "Die zuletzt abgeschlossenen user- und assistant-Nachrichtenpaare immer behalten und nicht komprimieren. Die aktuelle letzte query zählt nicht dazu." + }, + "searchAssistantModel": "Assistentenmodell", + "selectModel": "Modell auswählen", + "proxyMode": "Proxy-Modus", + "proxyModeSelect": "Proxy-Modus auswählen", + "proxyModeSystem": "System-Proxy", + "proxyModeNone": "Kein Proxy", + "proxyModeCustom": "Benutzerdefinierter Proxy", + "customProxyUrl": "Benutzerdefinierte Proxy-Adresse", + "customProxyUrlPlaceholder": "Beispiel: http://127.0.0.1:7890", + "invalidProxyUrl": "Ungültige Proxy-Adresse. Bitte eine gültige http/https URL eingeben", + "addCustomSearchEngine": "Benutzerdefinierte Suchmaschine hinzufügen", + "addCustomSearchEngineDesc": "Fügen Sie eine neue Suchmaschine hinzu. Name und Such-URL sind erforderlich. Die URL muss {query} als Platzhalter für die Suchanfrage enthalten.", + "searchEngineName": "Name der Suchmaschine", + "searchEngineNamePlaceholder": "Name der Suchmaschine eingeben", + "searchEngineUrl": "Such-URL", + "searchEngineUrlPlaceholder": "Z. B.: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "URL muss {'{'}query{'}'} als Platzhalter für die Suchanfrage enthalten", + "deleteCustomSearchEngine": "Benutzerdefinierte Suchmaschine löschen", + "deleteCustomSearchEngineDesc": "Benutzerdefinierte Suchmaschine \"{name}\" wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "testSearchEngine": "Suchmaschine testen", + "testSearchEngineDesc": "Es wird eine Testsuche mit der Suchmaschine {engine} und dem Suchbegriff \"Wetter\" durchgeführt.", + "testSearchEngineNote": "Wenn die Suchseite eine Anmeldung oder weitere Aktionen erfordert, können Sie diese im Testfenster ausführen. Schließen Sie das Testfenster nach Abschluss des Tests.", + "theme": "Design", + "themeSelect": "Design auswählen", + "themeLight": "Hell", + "themeDark": "Dunkel", + "themeSystem": "System folgen", + "closeToQuit": "App beim Klick auf Schließen beenden", + "shortcut": { + "title": "Tastenkürzel-Einstellungen", + "newChat": "Neuen Chat erstellen" + }, + "contentProtection": "Schutz bei Bildschirmfreigabe", + "contentProtectionDialogTitle": "Änderung des Schutzes bei Bildschirmfreigabe bestätigen", + "contentProtectionEnableDesc": "Der Schutz bei Bildschirmfreigabe kann verhindern, dass Screen-Sharing-Software das DeepChat-Hauptfenster erfasst, um Ihre Inhalte zu schützen. Beachten Sie, dass diese Funktion nicht alle Oberflächen vollständig ausblendet. Bitte verwenden Sie sie angemessen und rechtskonform. Nicht jede Screen-Sharing-Software beachtet Privatsphäreneinstellungen; bei manchen Programmen kann die Funktion wirkungslos sein, und in einigen Umgebungen kann ein schwarzes Fenster zurückbleiben.", + "contentProtectionDisableDesc": "Das Deaktivieren des Schutzes erlaubt Screen-Sharing-Software, das DeepChat-Fenster zu erfassen.", + "contentProtectionRestartNotice": "Das Ändern dieser Einstellung startet die App neu. Fortfahren?", + "copyWithCotEnabled": "COT-Informationen kopieren", + "traceDebugEnabled": "Aufruf-Trace", + "loggingEnabled": "Protokollierung aktivieren", + "loggingDialogTitle": "Änderung der Protokolleinstellung bestätigen", + "loggingEnableDesc": "Das Aktivieren der Protokollierung hilft uns, Probleme zu diagnostizieren und die App zu verbessern. Protokolldateien können sensible Informationen enthalten.", + "loggingDisableDesc": "Das Deaktivieren der Protokollierung beendet das Sammeln von App-Protokollen.", + "charactersUnit": "Zeichen", + "loggingRestartNotice": "Das Ändern dieser Einstellung startet die App neu. Fortfahren?", + "openLogFolder": "Protokollordner öffnen", + "notifications": "Systembenachrichtigungen", + "notificationsDesc": "Wenn DeepChat nicht im Vordergrund ist, wird bei abgeschlossener Generierung einer Sitzung eine Systembenachrichtigung gesendet", + "fileMaxSize": "Maximale Dateigröße", + "fileMaxSizeHint": "Begrenzt die maximale Uploadgröße einer einzelnen Datei", + "defaultModel": { + "title": "Standardmodell", + "chatModel": "Standard-Chatmodell" + } + }, + "deepchatAgents": { + "title": "DeepChat Agents", + "description": "DeepChat Agent und ihre Standardwerte für neue Sitzungen verwalten.", + "builtIn": "Integriert", + "editTitle": "DeepChat Agent bearbeiten", + "createTitle": "Neuen DeepChat Agent erstellen", + "unnamed": "Unbenannter Agent", + "name": "Name", + "namePlaceholder": "Z. B. Writer / Research / Translate", + "enabledLabel": "Aktivierungsstatus", + "descriptionLabel": "Beschreibung", + "descriptionPlaceholder": "Optional, beschreibt den Zweck dieses Agent", + "avatarTitle": "Avatar", + "avatarDefault": "Standard", + "avatarDefaultDesc": "DeepChat verwendet das Standardsymbol, andere Agent verwenden einen Textavatar.", + "avatarLucide": "Lucide-Symbol", + "avatarLucideDesc": "Ein Lucide-Symbol auswählen und helle/dunkle Farben getrennt festlegen.", + "avatarMonogram": "Textavatar", + "avatarMonogramDesc": "Die ersten zwei lateinischen Buchstaben oder das erste CJK-Zeichen zur Unterscheidung des Agent verwenden.", + "lucideIcon": "Lucide-Symbolname", + "lightColor": "Helle Farbe", + "darkColor": "Dunkle Farbe", + "monogramText": "Textavatar", + "monogramPlaceholder": "Z. B. WR / 研", + "backgroundColor": "Hintergrundfarbe", + "modelsTitle": "Modell-Standardwerte", + "chatModel": "Standard-Chatmodell", + "assistantModel": "Assistentenmodell", + "visionModel": "Vision-Modell", + "imageGenerationModel": "Bilderzeugungsmodell", + "temperature": "Temperatur", + "contextLength": "Kontextlänge", + "maxTokens": "Maximale token-Anzahl", + "thinkingBudget": "Denkbudget", + "reasoningEffort": "Reasoning-Stärke", + "verbosity": "Detailgrad", + "interleaved": "Interleaved Thinking-Kompatibilität erzwingen", + "systemPrompt": "Standard-System-prompt", + "systemPromptPlaceholder": "Leer lassen, um einen leeren System-prompt zu verwenden", + "defaultProjectPath": "Standardverzeichnis (optional)", + "defaultProjectPathPlaceholder": "Leer lassen, um das globale Standardverzeichnis zu verwenden", + "permissionMode": "Standardberechtigung", + "permissionFullAccess": "Alle aktivieren", + "permissionDefault": "Standardberechtigung", + "subagentsTitle": "subagent", + "subagentsDescription": "Wiederverwendbare subagent-Sitzungsplätze für `subagent_orchestrator` konfigurieren.", + "subagentsEnabled": "subagent aktivieren", + "subagentTargetType": "Zieltyp", + "subagentTargetSelf": "Aktueller Agent", + "subagentTargetAgent": "Bestimmter Agent", + "subagentDisplayName": "Anzeigename", + "subagentDescription": "Platzbeschreibung", + "subagentTargetAgentLabel": "Ziel-Agent", + "subagentLimit": "{count}/{max} Plätze", + "addSubagentSlot": "+ Platz hinzufügen", + "toolsTitle": "Integrierte Tools", + "compactionTitle": "Automatische Komprimierung", + "compactionEnabled": "Automatische Komprimierung aktivieren", + "compactionDescription": "Diese Einstellungen wirken sich nur auf später neu erstellte DeepChat-Sitzungen aus.", + "compactionThreshold": "Auslöseschwelle", + "compactionRetainPairs": "Neueste Nachrichtenpaare behalten", + "deleteConfirm": "Agent „{name}“ wirklich löschen? Seine historischen Sitzungen fallen automatisch auf den integrierten DeepChat zurück." + }, + "notificationsHooks": { + "title": "Hooks", + "description": "Lifecycle-Hook-Befehle konfigurieren.", + "events": { + "title": "Ereignisse", + "SessionStart": "Sitzungsstart", + "UserPromptSubmit": "Benutzereingabe", + "PreToolUse": "Vor Tool-Aufruf", + "PostToolUse": "Nach Tool-Aufruf", + "PostToolUseFailure": "Tool-Aufruf fehlgeschlagen", + "PermissionRequest": "Berechtigungsanfrage", + "Stop": "Stop", + "SessionEnd": "Sitzungsende" + }, + "commands": { + "title": "Hooks Commands", + "description": "Benutzerdefinierte Befehle für ausgewählte Lifecycle-Ereignisse ausführen.", + "hint": "Das vollständige payload wird als JSON an stdin geschrieben.", + "commandPlaceholder": "Auszuführender Befehl", + "commandLabel": "Befehl", + "name": "Name", + "namePlaceholder": "Hook-Name", + "newHook": "Neuer Hook", + "empty": "Noch keine Hook. Oben rechts eine neue erstellen.", + "defaultName": "Hook {index}", + "guideTitle": "Anleitung", + "guideDescription": "Nachdem ein markiertes Ereignis ausgelöst wurde, führt DeepChat diesen Befehl aus. Das aktuelle Ereignis kann über stdin JSON, Umgebungsvariablen und Befehlszeilenplatzhalter gelesen werden.", + "deliveryTitle": "Parameterübergabe", + "deliveryStdin": "Das vollständige payload wird als JSON an stdin geschrieben.", + "deliveryPlaceholder": "Befehlszeilenplatzhalter können direkt in der Befehlszeile verwendet werden.", + "deliveryEnv": "Dieselbe Gruppe grundlegender Metadaten wird auch als Umgebungsvariablen geschrieben.", + "metadataOnly": "Befehlszeilenplatzhalter eignen sich für kleine Metadaten; prompt-, tool-, permission-, usage-, stop- und error-Inhalte bitte aus stdin JSON lesen.", + "stdinPreviewLabel": "stdin-Beispiel", + "placeholdersTitle": "Befehlszeilenplatzhalter", + "placeholdersDescription": "Platzhalter werden vor der Ausführung erweitert und können direkt als Parameter hinter dem Befehl stehen.", + "envTitle": "Umgebungsvariablen", + "examplesTitle": "Beispielbefehle", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Python", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Aktueller Ereignisname", + "time": "Ereigniszeit im ISO-8601-Format", + "isTest": "Ob durch den Test-Button ausgelöst", + "conversationId": "Aktuelle Sitzungs-ID", + "workdir": "Für die aktuelle Sitzung ermitteltes Arbeitsverzeichnis", + "agentId": "Aktuelle Agent-ID (falls vorhanden)", + "providerId": "Aktuelle Provider-ID (falls vorhanden)", + "modelId": "Aktuelle Model-ID (falls vorhanden)", + "messageId": "Aktuelle Benutzer-Nachrichten-ID (falls vorhanden)", + "toolName": "Aktueller Tool-Name (falls vorhanden)", + "toolCallId": "Aktuelle Tool-Aufruf-ID (falls vorhanden)" + } + }, + "test": { + "button": "Test", + "testing": "Test läuft...", + "success": "Erfolgreich", + "failed": "Fehlgeschlagen", + "duration": "{ms} ms", + "statusCode": "HTTP {code}", + "exitCode": "Exit-Code {code}", + "retryAfter": "Wiederholen nach {ms} ms", + "stdout": "stdout", + "stderr": "stderr" + } + }, + "data": { + "title": "Dateneinstellungen", + "syncEnable": "Datensynchronisierung aktivieren", + "syncFolder": "Synchronisierungsordner", + "openSyncFolder": "Synchronisierungsordner öffnen", + "lastSyncTime": "Letzte Synchronisierung", + "never": "Nie", + "startBackup": "Jetzt sichern", + "backingUp": "Sicherung läuft...", + "importData": "Daten importieren", + "incrementImport": "Inkrementell importieren", + "overwriteImport": "Überschreibend importieren", + "backupSelectLabel": "Backup-Zeitpunkt auswählen", + "backupSelectDescription": "Bitte wählen Sie das zu importierende Backup aus.", + "selectBackupPlaceholder": "Backup auswählen", + "noBackupsAvailable": "Aktuell sind keine Backups verfügbar. Führen Sie zuerst eine Sicherung aus.", + "importConfirmTitle": "Datenimport bestätigen", + "importConfirmDescription": "Der Import überschreibt alle aktuellen Daten, einschließlich Chatverlauf und Einstellungen. Stellen Sie sicher, dass wichtige Daten gesichert wurden. Nach dem Import werden die Daten automatisch aktualisiert.", + "importing": "Import läuft...", + "confirmImport": "Import bestätigen", + "importSuccessTitle": "Import erfolgreich", + "importErrorTitle": "Import fehlgeschlagen", + "resetData": "Daten zurücksetzen", + "resetConfirmTitle": "Datenrücksetzung bestätigen", + "resetConfirmDescription": "Bitte wählen Sie den Datentyp aus, der zurückgesetzt werden soll. Diese Aktion kann nicht rückgängig gemacht werden; die App wird danach automatisch neu gestartet.", + "resetChatData": "Chatdaten zurücksetzen", + "resetChatDataDesc": "Alle Chatverläufe und Sitzungsverläufe löschen", + "resetKnowledgeData": "Wissensdatenbankdaten zurücksetzen", + "resetKnowledgeDataDesc": "Alle Wissensdatenbankdateien und Vektordaten löschen", + "resetConfig": "Konfiguration zurücksetzen", + "resetConfigDesc": "Alle App-Einstellungen, Modellkonfigurationen und benutzerdefinierten prompts löschen", + "resetAll": "Vollständig zurücksetzen", + "resetAllDesc": "Alle Daten löschen, einschließlich Chatverlauf, Konfiguration und Cache-Dateien", + "resetting": "Wird zurückgesetzt...", + "confirmReset": "Zurücksetzen bestätigen", + "resetCompleteDevTitle": "Datenrücksetzung abgeschlossen", + "resetCompleteDevMessage": "Bitte starten Sie die App in der Entwicklungsumgebung manuell neu, um die Wirkung zu sehen. Stoppen Sie den aktuellen Prozess und führen Sie pnpm run dev erneut aus", + "toast": { + "backupSuccessTitle": "Sicherung erfolgreich", + "backupSuccessMessage": "Daten erfolgreich gesichert" + }, + "syncSectionTitle": "Datensicherung und Synchronisierung", + "operationsSectionTitle": "Datenvorgänge", + "resetDataDescription": "Chat-, Wissensdatenbank-, Konfigurations- oder alle Daten nach Typ zurücksetzen.", + "databaseRepair": { + "title": "Datenbankreparatur", + "description": "Datenbank prüfen und automatisch reparieren", + "button": "Datenbank prüfen und reparieren", + "running": "Prüfung und Reparatur läuft...", + "lastResultLabel": "Letztes Ergebnis: {result}", + "summaryHealthy": "Struktur in Ordnung", + "summaryRepaired": "{count} Probleme repariert", + "summaryRepairedWithManual": "{repaired} Probleme repariert, {manual} müssen noch manuell behandelt werden", + "summaryManualOnly": "{manual} Probleme müssen manuell behandelt werden", + "manualHint": "{count} Probleme konnten nicht automatisch repariert werden und müssen manuell behandelt werden.", + "toastSuggestedTitle": "Datenbankreparatur empfohlen", + "toastSuggestedDescription": "DeepChat hat ein Datenbankschema-Problem erkannt ({reason}); Sie können die Datenbankreparatur jetzt ausführen.", + "toastAction": "Reparieren", + "toastHealthyTitle": "Datenbankstruktur in Ordnung", + "toastHealthyDescription": "Keine zu reparierenden schema-Probleme gefunden.", + "toastCompletedTitle": "Datenbankreparatur abgeschlossen", + "toastRepairedDescription": "{count} Probleme repariert.", + "toastManualDescription": "{repaired} Probleme repariert, {manual} müssen noch manuell behandelt werden.", + "toastFailedTitle": "Datenbankreparatur fehlgeschlagen", + "toastFailedDescription": "Die Datenbankreparatur konnte vorübergehend nicht abgeschlossen werden. Bitte Protokolle prüfen und erneut versuchen.", + "reasons": { + "missing-table": "Tabelle fehlt", + "missing-column": "Spalte fehlt", + "column-count-mismatch": "Spaltenanzahl stimmt nicht überein", + "type-mismatch": "Spaltentyp stimmt nicht überein" + } + }, + "databaseEncryption": { + "title": "SQLite-Datenbankverschlüsselung", + "description": "agent.db mit SQLCipher verschlüsseln; wenn Systementsperrung nicht verfügbar ist, muss ein SQLite-Passwort eingegeben werden.", + "enabled": "Aktiviert", + "disabled": "Nicht aktiviert", + "cipher": "Verschlüsselungsmethode", + "systemUnlock": "Systementsperrung", + "startupUnlock": "Entsperrung beim Start", + "lastMigration": "Letzte Migration", + "loading": "Wird geladen", + "never": "Nie", + "notRequired": "Nicht erforderlich", + "systemUnlockAvailable": "Verfügbar", + "systemUnlockUnavailable": "Nicht verfügbar", + "systemUnlockMode": "Systementsperrung", + "manualUnlock": "Passwort manuell eingeben", + "currentPassword": "Aktuelles Passwort", + "newPassword": "Neues SQLite-Passwort", + "confirmPassword": "Passwort bestätigen", + "passwordMismatch": "Die beiden Passwörter stimmen nicht überein", + "systemCredentialStore": "Wenn der sichere Systemspeicher verfügbar ist, speichert DeepChat das SQLite-Passwort verschlüsselt im Anmeldeinformationsspeicher des Systems (z. B. macOS Keychain, Windows-Anmeldeinformationsverwaltung oder Linux secret store). Nach einer erfolgreichen Entsperrung öffnen spätere Starts normalerweise automatisch; nur nach Datenmigration, fehlenden oder nicht entschlüsselbaren Systemanmeldeinformationen oder nicht verfügbarer sicherer Speicherung muss der Verschlüsselungsschlüssel erneut eingegeben werden.", + "safeStorageUnavailable": "Electron safeStorage ist auf diesem System nicht verfügbar. Nach Aktivierung muss das Passwort bei jedem Start manuell eingegeben werden.", + "enableButton": "Verschlüsselung aktivieren", + "changeButton": "Passwort ändern", + "disableButton": "Verschlüsselung deaktivieren", + "enabledTitle": "Datenbankverschlüsselung aktiviert", + "changedTitle": "SQLite-Passwort geändert", + "disabledTitle": "Datenbankverschlüsselung deaktiviert", + "failedTitle": "Datenbankverschlüsselung fehlgeschlagen", + "failedDescription": "Bitte Passwort prüfen und erneut versuchen.", + "setPasswordButton": "Passwort festlegen", + "enableDialogTitle": "SQLite-Passwort festlegen", + "changeDialogTitle": "SQLite-Passwort ändern", + "disableDialogTitle": "Datenbankverschlüsselung deaktivieren", + "enableDialogDescription": "Eine verschlüsselte SQLite-Datenbank erstellen und die aktuellen lokalen Daten dorthin migrieren.", + "changeDialogDescription": "Die aktuelle verschlüsselte Datenbank in eine neue verschlüsselte Datenbank mit neuem Passwort migrieren.", + "disableDialogDescription": "Die aktuelle verschlüsselte Datenbank zurück in eine lokale Klartextdatenbank migrieren.", + "cancelButton": "Abbrechen", + "unknown": "Unbekannt" + }, + "modelConfigUpdate": { + "title": "Modellkonfiguration aktualisieren", + "descriptionPrefix": "Modelldaten aus ", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": " synchronisieren", + "button": "Jetzt aktualisieren", + "updating": "Aktualisierung läuft...", + "updatedTitle": "Modellkonfiguration aktualisiert", + "updatedDescription": "Aktuelle Anbietermetadaten wurden aktualisiert.", + "upToDateTitle": "Bereits aktuell", + "upToDateDescription": "Die lokale Modellkonfiguration verwendet bereits die neuesten Anbietermetadaten.", + "failedTitle": "Aktualisierung fehlgeschlagen", + "failedDescription": "Modellkonfiguration kann vorübergehend nicht aktualisiert werden. Bitte später erneut versuchen." + }, + "yoBrowser": { + "title": "YoBrowser-Sandbox", + "description": "Unabhängige Browser-Sandbox, die Cookies und lokalen Speicher nicht mit der Haupt-App teilt. YoBrowser-Daten können hier mit einem Klick gelöscht werden.", + "clearButton": "YoBrowser-Daten löschen", + "confirmTitle": "YoBrowser-Daten wirklich löschen?", + "confirmDescription": "Cookies, Cache, LocalStorage, IndexedDB und weitere Daten der YoBrowser-Sitzung werden gelöscht. Möglicherweise müssen Sie sich auf Websites erneut anmelden.", + "confirmAction": "Jetzt löschen", + "clearing": "Wird bereinigt...", + "clearedTitle": "YoBrowser-Daten gelöscht", + "clearedDescription": "Die Sandbox-Sitzung wurde zurückgesetzt; zugehörige Tabs werden neu geladen.", + "clearFailedTitle": "Löschen fehlgeschlagen", + "clearFailedDescription": "Bitte erneut versuchen oder Protokolle für weitere Informationen prüfen." + }, + "privacyTitle": "Data & Privacy", + "privacyDescription": "Backup-Synchronisierung, Privatsphärenmodus, Datenwartung und gefährliche Aktionen verwalten.", + "dangerZone": { + "title": "Danger Zone", + "description": "Chat-, Wissensdatenbank- oder alle Daten zurücksetzen. Diese Aktion kann nicht rückgängig gemacht werden." + }, + "providerImport": { + "entryTitle": "Andere Agent-Konfiguration importieren", + "entryDescription": "Lokale provider-Konfigurationen von CC Switch, Alma, Cherry Studio, Hermes und OpenClaw scannen, um Schlüssel und Modelllisten schnell zu migrieren.", + "entryButton": "Aus anderen Agent importieren", + "dialogTitle": "Aus anderen Agent importieren", + "dialogDescription": "Wählen Sie zuerst erkannte Apps aus und bestätigen Sie dann nacheinander die provider, die in DeepChat importiert werden sollen.", + "toastTitle": "Provider-Import abgeschlossen", + "toastDescription": "{count} provider importiert.", + "steps": { + "scan": "Scannen", + "providers": "Provider", + "done": "Fertig" + }, + "scanningTitle": "Installierte Agent werden gescannt", + "scanningDescription": "DeepChat liest nur bekannte lokale Konfigurationsdateien und lädt keine Daten hoch.", + "scanFailedTitle": "Scan fehlgeschlagen", + "sourcesTitle": "Erkannte Quellen", + "sourcesDescription": "Sie können einen oder mehrere Agent auswählen. DeepChat verarbeitet sie in der angezeigten Reihenfolge.", + "selectedSources": "{selected}/{total} ausgewählt", + "noSourcesTitle": "Keine importierbare provider-Konfiguration gefunden", + "noSourcesDescription": "Installieren Sie zuerst einen unterstützten Agent oder konfigurieren Sie provider-Schlüssel im entsprechenden Agent.", + "providersFound": "{count} provider", + "sourceProgress": "{current}/{total}", + "overwriteNote": "Wenn mehrere ausgewählte provider demselben DeepChat provider zugeordnet sind, überschreibt die spätere Quelle die frühere.", + "noProvidersTitle": "Diese Quelle enthält keine provider-Daten", + "noProvidersDescription": "Dieser Agent wurde ausgewählt, aber es wurden keine importierbaren provider-Einträge gefunden.", + "apiKey": "Schlüssel {value}", + "noModels": "Keine Modellliste", + "modelsImported": "{count} Modelle", + "importingTitle": "provider werden importiert", + "importingDescription": "DeepChat schreibt die ausgewählten provider- und benutzerdefinierten Modelleinträge.", + "doneTitle": "Importübersicht", + "doneDescription": "{count} provider importiert. Unten sehen Sie das Ergebnis für jeden provider.", + "badges": { + "configured": "Konfiguriert" + }, + "sourceStatus": { + "found": "Gefunden", + "not_found": "Nicht gefunden", + "error": "Lesen fehlgeschlagen", + "unsupported_platform": "Aktuelle Plattform nicht unterstützt" + }, + "targetKind": { + "builtin": "Integriert", + "custom": "Benutzerdefiniert", + "unsupported": "Nicht unterstützt" + }, + "warnings": { + "already_configured": "In DeepChat bereits konfiguriert, standardmäßig nicht ausgewählt.", + "missing_api_key": "API Key oder erforderlicher endpoint fehlt.", + "unsupported_provider": "DeepChat kann diesen provider derzeit nicht automatisch importieren.", + "overwrites_previous_selection": "Diese Auswahl steht in Konflikt mit einer früheren Quelle.", + "credential_only_import": "Nur API Key wird importiert; DeepChat behält endpoint und runtime des integrierten provider bei." + }, + "conflicts": { + "overridesPrevious": "Diese Auswahl überschreibt einen zuvor ausgewählten gleichnamigen DeepChat provider.", + "overwrittenByLater": "Eine später ausgewählte Quelle überschreibt diesen provider." + }, + "summary": { + "imported": "Importiert", + "created": "Neu erstellt", + "updated": "Aktualisiert", + "overwritten": "Überschrieben", + "models": "Modelle", + "skipped": "Übersprungen" + }, + "resultStatus": { + "created": "Neu erstellt", + "updated": "Aktualisiert", + "skipped": "Übersprungen", + "overwritten": "Überschrieben" + }, + "actions": { + "rescan": "Erneut scannen", + "selectAll": "Alle auswählen", + "clearSelected": "Leeren", + "import": "Ausgewählte importieren" + }, + "apiTypes": { + "openaiCompletions": "OpenAI Chat Completions", + "openai": "OpenAI", + "openaiResponses": "OpenAI Responses", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "Mistral AI" + }, + "applyFailed": "Import fehlgeschlagen: {message}" + } + }, + "dashboard": { + "badge": "Nutzungsübersicht", + "title": "Nutzungsübersicht", + "description": "Statistiken zu token-Verbrauch, Cache-Treffern und geschätzten Kosten. token- und Kostendaten basieren auf öffentlich verfügbaren Informationen; bei manchen Anbietern oder älteren Nachrichten können Daten fehlen und dienen nur als Referenz.", + "actions": { + "refresh": "Aktualisieren" + }, + "backfill": { + "runningTitle": "Nutzungsdaten werden aktualisiert", + "runningDescription": "Nutzungsdaten werden noch im Hintergrund aufbereitet; aktuelle Ergebnisse können bereits angezeigt werden.", + "failedTitle": "Aktualisierung der Nutzungsdaten fehlgeschlagen", + "failedDescription": "Bitte diese Seite aktualisieren oder später erneut versuchen." + }, + "error": { + "title": "Übersicht konnte nicht geladen werden", + "description": "Bitte später erneut versuchen." + }, + "empty": { + "title": "Noch keine Statistikdaten", + "description": "Sobald Nutzungsdaten vorhanden sind, werden hier token-Verbrauch, Cache-Treffer und geschätzte Kosten angezeigt.", + "historyNote": "token- und Kostendaten basieren auf öffentlich verfügbaren Informationen; bei manchen Anbietern oder älteren Nachrichten können Daten fehlen und dienen nur als Referenz." + }, + "summary": { + "totalTokens": "Token gesamt", + "totalTokensDescription": "Zeigt den Anteil von Eingabe- und Ausgabe-token an der Gesamtsumme.", + "inputTokensLabel": "Eingabe", + "outputTokensLabel": "Ausgabe", + "cachedTokens": "Cache-token", + "cachedTokensDescription": "prompt-token, die durch den provider-Cache getroffen wurden.", + "cachedTokensCachedLabel": "Cache-Treffer", + "cachedTokensUncachedLabel": "Nicht getroffen", + "cacheHitRate": "Cache-Trefferrate", + "cacheHitRateDescription": "Anteil der gecachten prompt-token an den gesamten Eingabe-token.", + "estimatedCost": "Geschätzte Kosten", + "estimatedCostDescription": "Geschätzte USD-Kosten anhand aktueller provider-Preise oder AIHubMix-Fallbackpreise.", + "estimatedCostTrendLabel": "Trend der letzten 30 Tage", + "estimatedCostTrendEmpty": "In den letzten 30 Tagen wurden noch keine Kosten erfasst.", + "recordingStartedAt": "Statistik seit", + "recordingStartedAtDescription": "Zeitpunkt des frühesten usage-Eintrags in der aktuellen Übersicht.", + "withDeepChatDaysLabel": "Tage gemeinsam", + "withDeepChatDaysValue": "{days} Tage", + "withDeepChatDaysSentence": "Sie haben bereits {days} Tage mit DeepChat verbracht", + "withDeepChatDaysDescription": "Basierend auf Ihrem frühesten Nutzungseintrag: {date}.", + "withDeepChatDaysDescriptionUnavailable": "Noch keine Nutzungseinträge vorhanden.", + "tokenUsage": "Token-Verbrauch", + "nostalgiaLabel": "Rückblick", + "nostalgiaDaysValue": "{days} Tage", + "nostalgiaSessionsValue": "{count} Sitzungen", + "nostalgiaMessagesValue": "{count} Nachrichten", + "nostalgiaDaysDetailLabel": "Gemeinsame Zeit", + "nostalgiaDaysDetail": "Sie haben bereits {days} Tage mit DeepChat verbracht.", + "nostalgiaSessionsDetailLabel": "Sitzungen gesamt", + "nostalgiaSessionsDetail": "Sie haben zusammen {count} Sitzungen geführt.", + "nostalgiaMessagesDetailLabel": "Nachrichten gesamt", + "nostalgiaMessagesDetail": "Es wurden {count} Nachrichten ausgetauscht.", + "nostalgiaMostActiveDayLabel": "Aktivster Tag", + "nostalgiaMostActiveDayDetail": "{date} war Ihr aktivster Tag mit insgesamt {count} Nachrichten." + }, + "calendar": { + "title": "Beitragskalender", + "description": "Token-Verbrauch pro Tag in den letzten 365 Tagen.", + "legend": "Wenig bis viel", + "tooltip": "{date}: {tokens} token" + }, + "breakdown": { + "providerTitle": "Anbieter-Ranking", + "providerDescription": "Zuerst nach geschätzten Kosten, danach nach gesamten token sortiert.", + "modelTitle": "Modell-Ranking", + "modelDescription": "Top 10 Modelle nach geschätzten Kosten und gesamten token.", + "messages": "{count} Nachrichten", + "empty": "Noch keine Detaildaten zum Anzeigen." + }, + "rtk": { + "title": "RTK-Einsparungen", + "description": "Zeigt geschätzte token, die RTK in der nativen DeepChat-Befehlsausführungskette abgefangen hat, bevor sie in den Modellkontext gelangten.", + "actions": { + "retry": "Prüfung wiederholen" + }, + "status": { + "disabled": "Deaktiviert", + "checking": "Prüfung läuft", + "healthy": "Verfügbar", + "unhealthy": "Nicht verfügbar" + }, + "descriptionDisabled": "RTK ist in der aktuellen App-Sitzung deaktiviert; Befehle verwenden weiter den ursprünglichen Ausführungspfad.", + "descriptionChecking": "DeepChat prüft, ob RTK in der aktuellen Umgebung korrekt ausgeführt werden kann.", + "descriptionHealthy": "RTK ist in die native DeepChat-Befehlsausführung eingebunden.", + "descriptionUnhealthy": "RTK-Startprüfung fehlgeschlagen; in der aktuellen App-Sitzung automatisch deaktiviert.", + "sourceLabel": "Runtime-Quelle: {source}", + "source": { + "bundled": "Integriert", + "system": "System", + "none": "Nicht verfügbar" + }, + "summary": { + "savedTokens": "Gesparte token", + "commands": "Verfolgte Befehle", + "avgSavingsPct": "Durchschnittliche Ersparnis", + "outputTokens": "Gefilterte Ausgabe" + } + }, + "unavailable": "Nicht verfügbar" + }, + "modelConfigItem": { + "chatFallbackWarning": "Schwache Agent-Fähigkeit: unterstützt nur legacy fallback Tool-Aufrufe" + }, + "model": { + "title": "Modelleinstellungen", + "systemPrompt": { + "label": "System-prompt", + "placeholder": "System-prompt eingeben...", + "description": "System-prompt des KI-Assistenten festlegen, um Verhalten und Rolle zu definieren" + }, + "temperature": { + "label": "Modelltemperatur", + "description": "Steuert die Zufälligkeit der Ausgabe; höhere Werte erzeugen kreativere Antworten" + }, + "contextLength": { + "label": "Kontextlänge", + "description": "Maximale Länge des Chatkontexts festlegen" + }, + "responseLength": { + "label": "Antwortlänge", + "description": "Maximale Länge der KI-Antwort festlegen" + }, + "artifacts": { + "title": "Artifacts-Effekt", + "description": "Animationseffekt bei der Codeblock-Generierung" + }, + "provider": "Anbieter", + "modelList": "Modellliste", + "selectModel": "Modell auswählen", + "providerSetting": "Anbietereinstellungen", + "configureModel": "Modell konfigurieren", + "addModel": "Modell hinzufügen", + "form": { + "id": { + "label": "Kennung" + } + }, + "modelConfig": { + "title": "Benutzerdefinierte Modellparameter", + "description": "Bitte beachten: Diese Konfiguration gilt nur für das aktuelle Modell und beeinflusst keine anderen Modelle. Ändern Sie sie vorsichtig; falsche Parameter können dazu führen, dass das Modell nicht korrekt funktioniert.", + "name": { + "label": "Modellname", + "description": "Anzeigename des Modells in der Oberfläche", + "placeholder": "Modellname eingeben", + "required": "Modellname ist erforderlich", + "readonly": "Modellname (schreibgeschützt)" + }, + "id": { + "label": "Modell-ID", + "description": "Eindeutige ID zur Identifizierung des Modells", + "placeholder": "Modell-ID eingeben", + "required": "Modell-ID ist erforderlich", + "readonly": "Modell-ID (schreibgeschützt)", + "duplicate": "Eine identische Modell-ID existiert bereits" + }, + "createTitle": "Benutzerdefiniertes Modell hinzufügen", + "editTitle": "Modellkonfiguration bearbeiten - {name}", + "maxTokens": { + "label": "Maximale Ausgabelänge", + "description": "Maximale token-Anzahl für eine einzelne Modellausgabe festlegen" + }, + "contextLength": { + "label": "Kontextlänge", + "description": "Kontextlänge festlegen, die das Modell verarbeiten kann" + }, + "temperature": { + "label": "Temperatur", + "description": "Steuert die Zufälligkeit der Ausgabe. Die meisten Modelle nutzen 0-1, manche unterstützen 0-2; je höher, desto zufälliger.", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ist bei aktiviertem Denken fest auf {enabled} und bei deaktiviertem Denken fest auf {disabled} gesetzt." + }, + "vision": { + "label": "Vision-Fähigkeit", + "description": "Ob das Modell Vision-Funktionen unterstützt" + }, + "speechRecognition": { + "label": "Spracherkennung", + "description": "Steuert, ob dieses Modell lokale Spracherkennung in Texteingabe erlaubt." + }, + "functionCall": { + "label": "Funktionsaufrufe", + "description": "Ob das Modell Funktionsaufrufe nativ unterstützt (nach Deaktivierung simuliert DeepChat Funktionsaufrufe automatisch)" + }, + "reasoning": { + "label": "Reasoning-Fähigkeit", + "description": "Dieses Modell unterstützt Reasoning" + }, + "reasoningToggle": { + "label": "Reasoning aktivieren", + "description": "Steuert, ob Reasoning für dieses Modell standardmäßig aktiviert ist" + }, + "interleavedThinking": { + "label": "Interleaved Thinking", + "description": "Steuert, ob dieses Modell reasoning- und tool-call-Nachrichten mit Interleaved Thinking verarbeitet. Wenn der provider Unterstützung deklariert, wird dies standardmäßig automatisch aktiviert." + }, + "thinkingBudget": { + "label": "Denkbudget", + "description": "Maximale token-Länge des Denkprozesses festlegen, um die Reasoning-Tiefe des Modells zu steuern", + "placeholder": "Wert für Denkbudget eingeben", + "range": "Bereich: {min} - {max}", + "validation": { + "required": "Bitte Wert für Denkbudget eingeben", + "minValue": "Denkbudget ist kleiner als der Minimalwert", + "maxValue": "Denkbudget darf {max} nicht überschreiten" + } + }, + "type": { + "label": "Modelltyp", + "description": "Modelltyp auswählen", + "options": { + "chat": "Sprachmodell", + "embedding": "Embedding-Modell", + "rerank": "Rerank-Modell", + "imageGeneration": "Bilderzeugungsmodell", + "videoGeneration": "Videoerzeugungsmodell" + } + }, + "apiEndpoint": { + "label": "API-Endpunkt", + "description": "OpenAI API-Endpunkt auswählen, den dieses Modell verwendet.", + "options": { + "chat": "Texterzeugung", + "image": "Bilderzeugung", + "video": "Videoerzeugung" + } + }, + "resetToDefault": "Auf Standard zurücksetzen", + "saveConfig": "Konfiguration speichern", + "cancel": "Abbrechen", + "useModelDefault": "Modellstandard verwenden", + "currentUsingModelDefault": "Aktuell wird der Modellstandard verwendet", + "resetConfirm": { + "title": "Zurücksetzen bestätigen", + "message": "Konfiguration dieses Modells wirklich auf Standardwerte zurücksetzen? Diese Aktion kann nicht rückgängig gemacht werden.", + "confirm": "Zurücksetzen bestätigen" + }, + "reasoningEffort": { + "label": "Reasoning-Aufwand", + "description": "Steuert die Reasoning-Tiefe des Modells; höherer Aufwand kann bessere Ergebnisse liefern, antwortet aber langsamer", + "placeholder": "Reasoning-Aufwand auswählen", + "options": { + "none": "None - kein Reasoning", + "minimal": "Minimal - schnellste Antwort", + "low": "Low - geringer Aufwand", + "medium": "Medium - mittlerer Aufwand", + "high": "High - hoher Aufwand", + "xhigh": "XHigh - maximaler Aufwand", + "max": "Max - äußerster Aufwand" + } + }, + "verbosity": { + "label": "Detailgrad", + "description": "Steuert Detailgrad und Länge der Modellantwort", + "placeholder": "Detailgrad auswählen", + "options": { + "low": "Low - knappe Antwort", + "medium": "Medium - ausgewogene Details", + "high": "High - ausführliche Antwort" + } + }, + "validation": { + "maxTokensRequired": "Maximale Ausgabelänge darf nicht leer sein", + "maxTokensMin": "Maximale Ausgabelänge muss größer als 0 sein", + "maxTokensMax": "Maximale Ausgabelänge darf 1000000 nicht überschreiten", + "contextLengthRequired": "Kontextlänge darf nicht leer sein", + "contextLengthMin": "Kontextlänge muss größer als 0 sein", + "contextLengthMax": "Kontextlänge darf 10000000 nicht überschreiten", + "temperatureRequired": "Temperatur darf nicht leer sein", + "temperatureMin": "Temperatur muss größer oder gleich 0 sein", + "temperatureMax": "Temperatur muss kleiner oder gleich 2 sein", + "timeoutMin": "Anfrage-Timeout darf nicht kleiner als 1000 Millisekunden sein", + "timeoutMax": "Anfrage-Timeout darf 3600000 Millisekunden nicht überschreiten" + }, + "endpointType": { + "label": "Protokolltyp", + "description": "Wählen Sie das Upstream-Protokoll aus, das New API für dieses Modell verwenden soll.", + "placeholder": "Protokolltyp auswählen", + "required": "Protokolltyp ist erforderlich", + "options": { + "openai": "OpenAI Chat", + "openai-response": "OpenAI Responses", + "anthropic": "Anthropic Messages", + "gemini": "Gemini Native", + "image-generation": "Image Generation", + "video-generation": "Video Generation" + } + }, + "reasoningVisibility": { + "label": "Reasoning-Inhalt anzeigen", + "description": "Steuert bei aktiviertem Reasoning, ob Reasoning-Inhalt verborgen oder als Zusammenfassung angezeigt wird", + "placeholder": "Anzeigeart für Reasoning-Inhalt auswählen", + "options": { + "omitted": "Omitted - Reasoning-Inhalt ausblenden", + "summarized": "Summarized - Reasoning-Zusammenfassung anzeigen" + } + }, + "timeout": { + "label": "Anfrage-Timeout (Millisekunden)", + "description": "Timeout für eine einzelne Modellanfrage festlegen. Nach Überschreitung wird die Anfrage automatisch abgebrochen." + }, + "imageGeneration": { + "default": "Standard", + "size": { + "label": "Bildgröße", + "custom": "Benutzerdefiniert", + "placeholder": "Z. B. 2048x2048", + "experimental": "Diese Größe überschreitet 2560x1440 und wird von OpenAI als experimentelle Ausgabe markiert.", + "validation": { + "invalid_format": "Bitte Format {width}x{height} verwenden.", + "invalid_multiple": "Breite und Höhe müssen Vielfache von 16 sein.", + "side_too_large": "Breite und Höhe dürfen 3840px nicht überschreiten.", + "aspect_ratio_too_large": "Die lange Seite darf höchstens das 3-Fache der kurzen Seite betragen.", + "pixel_count_out_of_range": "Die Gesamtpixelzahl muss zwischen 655360 und 8294400 liegen." + } + }, + "quality": { + "label": "Bildqualität", + "options": { + "low": "Niedrig", + "medium": "Mittel", + "high": "Hoch", + "auto": "Automatisch" + } + }, + "outputFormat": { + "label": "Ausgabeformat", + "options": { + "png": "PNG", + "jpeg": "JPEG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "Kompressionsqualität", + "placeholder": "Standard: 100", + "validation": "Kompressionsqualität muss eine ganze Zahl von 0 bis 100 sein." + }, + "background": { + "label": "Hintergrund", + "options": { + "auto": "Automatisch", + "opaque": "Deckend" + } + }, + "moderation": { + "label": "Inhaltsfilter", + "options": { + "auto": "Automatisch", + "low": "Niedrig" + } + } + }, + "videoGeneration": { + "size": { + "label": "Videogröße", + "placeholder": "Z. B. 1280x720" + }, + "seconds": { + "label": "Sekunden", + "placeholder": "Z. B. 5" + }, + "duration": { + "label": "Dauer", + "placeholder": "Z. B. 5", + "description": "Wird über extra_body.duration an kompatible Video-Schnittstellen gesendet." + }, + "ratio": { + "label": "Seitenverhältnis", + "placeholder": "Z. B. 16:9" + }, + "resolution": { + "label": "Auflösung", + "placeholder": "Z. B. 720p" + }, + "watermark": { + "label": "Wasserzeichen", + "description": "Wenn die Upstream-Schnittstelle dies unterstützt, wird der Server gebeten, dem Ergebnis ein Wasserzeichen hinzuzufügen." + }, + "generateAudio": { + "label": "Audio erzeugen", + "description": "Wenn die Upstream-Schnittstelle dies unterstützt, wird gleichzeitig eine Tonspur für das Video erzeugt." + } + } + } + }, + "provider": { + "search": "Anbieterplattformen suchen…", + "enable": "Dienst aktivieren", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "urlPlaceholder": "API URL eingeben", + "keyPlaceholder": "API Key eingeben", + "accessKeyIdPlaceholder": "AWS Access Key ID eingeben", + "secretAccessKeyPlaceholder": "AWS Secret Access Key eingeben", + "regionPlaceholder": "AWS-Region eingeben", + "vertexProjectId": "Projekt-ID", + "vertexProjectIdPlaceholder": "Google Cloud-Projekt-ID eingeben", + "vertexLocation": "Region", + "vertexLocationPlaceholder": "Region eingeben (z. B. us-central1)", + "vertexServiceEmail": "Dienstkonto-E-Mail", + "vertexServiceEmailPlaceholder": "Dienstkonto-E-Mail eingeben", + "vertexPrivateKey": "Privater Schlüssel des Dienstkontos", + "vertexPrivateKeyPlaceholder": "Privaten Schlüssel einfügen (einzeiliges \\n wird unterstützt)", + "vertexApiVersion": "API-Version", + "vertexEndpointMode": "Endpunktmodus", + "vertexEndpointStandard": "Standard (regionaler Endpunkt)", + "vertexEndpointExpress": "Express (globaler Endpunkt)", + "verifyKey": "Schlüssel prüfen", + "howToGet": "So erhalten Sie ihn", + "refreshingModels": "Aktualisierung läuft...", + "getKeyTip": "Bitte gehen Sie zu", + "getKeyTipEnd": "um einen API Key zu erhalten", + "urlFormat": "API-Beispiel: {defaultUrl}", + "urlFormatFill": "In API URL einfügen", + "openaiResponsesNotice": "Der offizielle OpenAI-Dienst verwendet standardmäßig die Responses API; wenn ein Drittanbieter nur Chat Completions unterstützt, verwenden Sie den OpenAI Completions provider.", + "modifyBaseUrl": "Ändern", + "baseUrlLockedHint": "Dieser provider-Typ ist standardmäßig auf die empfohlene Base URL festgelegt, um Fehlkonfigurationen zu vermeiden.", + "refreshModelsWithMetadataHint": "Beim Aktualisieren dieses Anbieters werden zuerst Upstream-Metadaten synchronisiert und dann die lokale Modellliste neu erstellt.", + "modelList": "Modellliste", + "enableModels": "Modelle aktivieren", + "disableAllModels": "Alle deaktivieren", + "modelsEnabled": "Modelle wurden aktiviert", + "noModelsEnabled": { + "title": "Keine aktivierten Modelle", + "description": "Bitte klicken Sie auf „Modelle aktivieren“, um die benötigten Modelle manuell auszuwählen." + }, + "verifyLink": "Link prüfen", + "syncModelsFailed": "Modelle konnten nicht synchronisiert werden...", + "addCustomProvider": "Benutzerdefinierten Anbieter hinzufügen", + "delete": "Löschen", + "stopModel": "Modell stoppen", + "pulling": "Wird abgerufen...", + "runModel": "Modell ausführen", + "configurationUpdated": "Konfiguration aktualisiert", + "configurationSaved": "Konfiguration gespeichert", + "operationSuccess": "Vorgang erfolgreich", + "operationFailed": "Vorgang fehlgeschlagen", + "dataRefreshed": "Daten aktualisiert", + "settingsApplied": "Einstellungen angewendet", + "toast": { + "modelRunning": "Modell läuft", + "modelRunningDesc": "Bitte stoppen Sie zuerst Modell {model} und löschen Sie es danach.", + "backupSuccessTitle": "Sicherung abgeschlossen", + "backupSuccessMessage": "Backup gespeichert (Zeit: {time}, Größe: {size})", + "importSuccessTitle": "Import abgeschlossen", + "importSuccessMessage": "{count} Sitzungen erfolgreich importiert", + "refreshModelsSuccessTitle": "Modelle aktualisiert", + "refreshModelsSuccessDescription": "Die aktuelle Modellliste dieses Anbieters wurde synchronisiert.", + "refreshModelsSuccessDescriptionWithMetadata": "Upstream-Metadaten und aktuelle Modellliste dieses Anbieters wurden synchronisiert.", + "refreshModelsFailedTitle": "Aktualisierung fehlgeschlagen", + "refreshModelsFailedDescription": "Die Modellliste dieses Anbieters kann derzeit nicht aktualisiert werden. Bitte später erneut versuchen.", + "refreshModelsFailedDescriptionWithMetadata": "Upstream-Metadaten und Modellliste dieses Anbieters können derzeit nicht aktualisiert werden. Bitte später erneut versuchen." + }, + "modelscope": { + "name": "ModelScope", + "description": "ModelScope ist eine von Alibaba DAMO Academy gestartete Model-as-a-Service-Sharing-Plattform", + "apiKey": "API Key", + "apiKeyPlaceholder": "ModelScope API Key eingeben", + "apiKeyHelper": "Holen Sie Ihren API Key in der ModelScope-Konsole", + "baseUrl": "API-Adresse", + "baseUrlHelper": "Adresse des ModelScope API-Dienstes", + "connected": "Verbunden", + "notConnected": "Nicht verbunden", + "connecting": "Verbindung wird hergestellt...", + "verifySuccess": "Prüfung erfolgreich", + "verifyFailed": "Prüfung fehlgeschlagen", + "keyRequired": "Bitte API Key eingeben", + "invalidKey": "Ungültiger API Key", + "networkError": "Netzwerkverbindungsfehler", + "mcpSync": { + "title": "MCP-Dienste synchronisieren", + "description": "MCP-Server aus ModelScope in die lokale Konfiguration synchronisieren, um häufig verwendete MCP-Tools schnell hinzuzufügen. Alle Dienste sind standardmäßig deaktiviert und können nach dem Import manuell aktiviert werden.", + "sync": "Synchronisierung starten", + "syncing": "Synchronisierung läuft...", + "pageSize": "Einträge pro Seite", + "pageNumber": "Seitennummer", + "pageNumberPlaceholder": "Seitennummer eingeben", + "imported": "{count} Dienste importiert", + "skipped": "{count} Dienste übersprungen", + "errors": "{count} Fehler", + "errorDetails": "Fehlerdetails", + "noApiKey": "Bitte zuerst ModelScope API Key konfigurieren", + "noServersFound": "Keine verfügbaren MCP-Dienste gefunden", + "fetchingServers": "MCP-Serverliste wird abgerufen...", + "convertingServers": "Serverkonfiguration wird konvertiert...", + "importingServers": "Serverkonfiguration wird importiert...", + "syncComplete": "Synchronisierung abgeschlossen", + "serverAlreadyExists": "Server existiert bereits, Import übersprungen", + "noOperationalUrls": "Keine verfügbaren Betriebsadressen gefunden", + "invalidServerData": "Ungültige Serverdaten", + "authenticationFailed": "Authentifizierung fehlgeschlagen, bitte API Key prüfen" + }, + "details": { + "title": "Details der Anbietereinstellungen", + "apiConfig": "API-Konfiguration", + "rateLimitConfig": "Rate-Limit-Konfiguration", + "modelManagement": "Modellverwaltung", + "safetySettings": "Sicherheitseinstellungen", + "specialConfig": "Sonderkonfiguration", + "mcpSync": "MCP-Synchronisierung", + "operationalServers": "Betriebsserver", + "syncFromModelScope": "Aus ModelScope synchronisieren", + "operationalDescription": "MCP-Server synchronisieren, die direkt auf der ModelScope-Plattform verwendet werden können" + } + }, + "tts": { + "title": "Text-to-Speech (TTS)", + "description": "Text in Sprache umwandeln; voice wird in der Modellliste unten angezeigt.", + "audioFormat": { + "label": "Audioformat", + "placeholder": "Format auswählen", + "helper": "MP3 wird in den meisten Fällen empfohlen." + }, + "language": { + "label": "Sprache", + "placeholder": "Z. B. en", + "helper": "Unterstützte Sprachen: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "TTS-Modell", + "placeholder": "voiceai-tts-v1-latest", + "helper": "Verfügbare Modelle finden Sie in der Voice.ai-Dokumentation." + }, + "agentId": { + "label": "Voice Agent ID", + "placeholder": "voice agent id einfügen", + "helper": "Diese ID ist für Echtzeitanrufe erforderlich." + }, + "temperature": { + "label": "Temperatur", + "helper": "Zufallsparameter (0-2)." + }, + "topP": { + "label": "Top P", + "helper": "Nucleus Sampling (0-1)." + } + }, + "dialog": { + "disableModel": { + "title": "Modell deaktivieren bestätigen", + "content": "Modell \"{name}\" wirklich deaktivieren?", + "confirm": "Deaktivieren" + }, + "disableAllModels": { + "title": "Alle Modelle deaktivieren bestätigen", + "content": "Wirklich alle Modelle von \"{name}\" deaktivieren?", + "confirm": "Alle deaktivieren" + }, + "configModels": { + "title": "Modellliste konfigurieren", + "description": "Modelle zum Aktivieren oder Deaktivieren auswählen" + }, + "verify": { + "missingFields": "Bitte API Key und API URL eingeben", + "failed": "Prüfung fehlgeschlagen", + "success": "Prüfung erfolgreich", + "failedDesc": "API Key oder Konfiguration konnte nicht geprüft werden. Bitte Konfiguration prüfen", + "successDesc": "API Key und Konfiguration wurden erfolgreich geprüft und können verwendet werden", + "unauthorized": "Authentifizierung fehlgeschlagen, API Key ungültig oder abgelaufen", + "serverError": "Serverfehler, bitte später erneut versuchen", + "connectionError": "Verbindungsfehler, bitte Netzwerkverbindung und API-Adresse prüfen" + }, + "addCustomProvider": { + "title": "Benutzerdefinierten Anbieter hinzufügen", + "description": "Bitte erforderliche Anbieterinformationen ausfüllen", + "name": "Name", + "namePlaceholder": "Anbietername eingeben", + "apiType": "API-Typ", + "apiTypePlaceholder": "API-Typ auswählen", + "apiKey": "API Key", + "apiKeyPlaceholder": "API Key eingeben", + "baseUrl": "API-Adresse", + "baseUrlPlaceholder": "API-Basisadresse eingeben", + "enable": "Anbieter aktivieren" + }, + "providerDeeplinkImport": { + "title": "Anbieter importieren", + "description": "Bitte die geparste Anbieterkonfiguration vor dem Import bestätigen.", + "type": "Typ", + "url": "Adresse", + "key": "Schlüssel", + "overwriteWarning": "Dieser Import überschreibt die aktuelle Anbieterkonfiguration.", + "confirming": "Import läuft..." + }, + "baseUrlUnlock": { + "title": "Änderung der Base URL bestätigen", + "description": "Für diesen provider-Typ wird das Ändern der Base URL nicht empfohlen; eine falsche Adresse kann zu Anfragefehlern oder unerwartetem Verhalten führen. Nach Bestätigung können Sie sie trotzdem manuell ändern.", + "confirm": "Weiter ändern" + }, + "deleteProvider": { + "title": "Anbieter löschen bestätigen", + "content": "Anbieter \"{name}\" wirklich löschen? Diese Aktion kann nicht wiederhergestellt werden.", + "confirm": "Löschen" + }, + "deleteModel": { + "title": "Modell löschen bestätigen", + "content": "Modell \"{name}\" wirklich löschen? Diese Aktion kann nicht wiederhergestellt werden.", + "confirm": "Löschen" + }, + "pullModel": { + "title": "Modell abrufen", + "description": "Modell zum lokalen Download auswählen", + "pull": "Abrufen" + }, + "modelCheck": { + "title": "Modellprüfung", + "description": "Wählen Sie ein Modell für Verbindungs- und Verfügbarkeitstest aus", + "model": "Modell auswählen", + "modelPlaceholder": "Zu testendes Modell auswählen", + "test": "Test starten", + "checking": "Test läuft...", + "success": "Modelltest erfolgreich", + "failed": "Modelltest fehlgeschlagen", + "noModels": "Dieser Anbieter hat keine verfügbaren Modelle" + } + }, + "pullModels": "Modelle abrufen", + "refreshModels": "Modelle aktualisieren", + "modelsRunning": "Laufende Modelle", + "runningModels": "Laufende Modelle", + "noRunningModels": "Keine laufenden Modelle", + "deleteModel": "Modell löschen", + "deleteModelConfirm": "Modell \"{name}\" wirklich löschen? Diese Aktion kann nicht wiederhergestellt werden.", + "noLocalModels": "Keine lokalen Modelle", + "localModels": "Lokale Modelle", + "azureApiVersion": "API-Version", + "safety": { + "title": "Sicherheitseinstellungen", + "blockNone": "Nicht blockieren", + "blockSome": "Geringes Risiko blockieren", + "blockMost": "Mittleres Risiko blockieren", + "blockHighest": "Hohes Risiko blockieren" + }, + "serverList": "Serverliste", + "totalServers": "Server gesamt", + "addServer": "Server hinzufügen", + "autoStart": "Autostart", + "githubCopilotAuth": "GitHub Copilot-Authentifizierung", + "githubCopilotConnected": "GitHub Copilot verbunden", + "githubCopilotNotConnected": "GitHub Copilot nicht verbunden", + "loginWithGitHub": "Mit GitHub anmelden", + "loggingIn": "Anmeldung läuft...", + "githubCopilotClientId": "Benutzerdefinierte Client ID", + "githubCopilotClientIdHint": "Optional, leer lassen, um die Standard-Client ID zu verwenden; betrifft nur GitHub Copilot-Autorisierung.", + "githubCopilotLoginTip": "Klicken Sie, um DeepChat Zugriff auf Ihr GitHub Copilot-Abonnement zu erlauben", + "loginSuccess": "Anmeldung erfolgreich", + "loginFailed": "Anmeldung fehlgeschlagen", + "tokenValid": "Token gültig", + "tokenInvalid": "Token ungültig", + "disconnect": "Verbindung trennen", + "disconnected": "Verbindung erfolgreich getrennt", + "disconnectFailed": "Trennen der Verbindung fehlgeschlagen", + "keyStatus": { + "usage": "Verwendet", + "remaining": "Verbleibendes Kontingent" + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "bedrockLimitTip": "* Unterstützt nur Anthropic Claude (einschließlich Opus-, Sonnet- und Haiku-Modelle)", + "bedrockVerifyTip": "DeepChat verwendet Claude 3.5 Sonnet zur Prüfung. Wenn Sie keine Aufrufberechtigung für dieses Modell haben, schlägt die Prüfung fehl. Dies wirkt sich nicht auf die Nutzung anderer Modelle aus.", + "center": { + "title": "Provider Center", + "description": "Anbieterverbindungen, Modelle und erweiterte Konfiguration verwalten.", + "noApiUrl": "Keine API URL konfiguriert", + "enabledModels": "{count} Modelle aktiviert", + "noAdvancedConfig": "Dieser Anbieter hat keine zusätzliche erweiterte Konfiguration.", + "status": { + "connected": "Connected", + "keyMissing": "Key missing", + "disabled": "Disabled", + "local": "Local" + }, + "tabs": { + "connection": "Connect", + "models": "Models", + "advanced": "Advanced" + } + } + }, + "knowledgeBase": { + "title": "Wissensdatenbank-Einstellungen", + "addKnowledgeBase": "Wissensdatenbank hinzufügen", + "selectKnowledgeBaseType": "Bitte Typ der hinzuzufügenden Wissensdatenbank auswählen", + "difyDescription": "Dify-Wissensdatenbanken helfen Ihnen, Dokumentdaten zu verwalten und zu nutzen.", + "comingSoon": "Demnächst verfügbar", + "featureNotAvailable": "Diese Funktion ist noch nicht verfügbar. Bitte haben Sie etwas Geduld.", + "addDifyConfig": "Dify-Konfiguration hinzufügen", + "apiKey": "API Key", + "datasetId": "Dataset-ID", + "endpoint": "API-Adresse", + "configAdded": "Konfiguration hinzugefügt", + "configAddedDesc": "{name}-Konfiguration erfolgreich hinzugefügt", + "addConfig": "Konfiguration hinzufügen", + "moreComingSoon": "Weitere Wissensdatenbanktypen folgen demnächst", + "configUpdated": "Konfiguration aktualisiert", + "configUpdatedDesc": "{name}-Konfiguration erfolgreich aktualisiert", + "descriptionPlaceholder": "Z. B.: Wissensdatenbank für Produktdokumentation des Unternehmens", + "ragflowTitle": "RAGFlow-Wissensdatenbank", + "ragflowDescription": "RAGFlow ist ein leistungsfähiges Wissensdatenbank-Managementsystem mit Unterstützung für verschiedene Abrufmethoden und Dokumentverwaltung.", + "addRagflowConfig": "RAGFlow-Konfiguration hinzufügen", + "editRagflowConfig": "RAGFlow-Konfiguration bearbeiten", + "dify": "Dify-Wissensdatenbank", + "editDifyConfig": "Dify-Konfiguration bearbeiten", + "fastgptTitle": "FastGPT-Wissensdatenbank", + "fastgptDescription": "FastGPT ist ein leistungsfähiges Wissensdatenbank-Managementsystem mit Unterstützung für verschiedene Abrufmethoden und Dokumentverwaltung.", + "addFastGptConfig": "FastGPT-Konfiguration hinzufügen", + "editFastGptConfig": "FastGPT-Konfiguration bearbeiten", + "builtInKnowledgeTitle": "Integrierte Wissensdatenbank", + "builtInKnowledgeDescription": "Die integrierte Wissensdatenbank bietet einfache Implementierungen, die offline einige grundlegende Funktionen ermöglichen.", + "addBuiltinKnowledgeConfig": "Integrierte Wissensdatenbank-Konfiguration hinzufügen", + "editBuiltinKnowledgeConfig": "Integrierte Wissensdatenbank-Konfiguration bearbeiten", + "descriptionDesc": "Beschreibung der Wissensdatenbank, damit die KI entscheiden kann, ob diese Wissensdatenbank abgerufen werden soll", + "embeddingModel": "Embedding-Modell", + "selectEmbeddingModel": "Embedding-Modell auswählen", + "selectEmbeddingModelHelper": "Das Embedding-Modell kann nach Erstellung der Wissensdatenbank nicht geändert werden", + "rerankModel": "Rerank-Modell", + "selectRerankModel": "Rerank-Modell auswählen", + "chunkSize": "Chunk-Größe", + "chunkOverlap": "Überlappungsgröße", + "fragmentsNumber": "Anzahl angeforderter Dokumentfragmente", + "chunkSizeHelper": "Dokument in Abschnitte schneiden; die Größe jedes Abschnitts darf das Kontextlimit des Modells nicht überschreiten", + "chunkOverlapHelper": "Menge wiederholter Inhalte zwischen benachbarten Textblöcken, damit segmentierte Textblöcke weiterhin Kontextbezug behalten und das Modell lange Texte besser verarbeiten kann", + "fragmentsNumberHelper": "Je mehr Dokumentfragmente angefordert werden, desto mehr Informationen werden beigefügt, aber desto mehr token werden verbraucht", + "modelNotFound": "Anbieter {provider} oder Modell {model} nicht gefunden", + "modelNotFoundDesc": "Bitte stellen Sie sicher, dass das Modell korrekt konfiguriert und aktiviert ist. Sie können die Modellkonfiguration in den Anbietereinstellungen prüfen.", + "removeBuiltinKnowledgeConfirmTitle": "Integrierte Wissensdatenbank {name} wirklich löschen?", + "removeBuiltinKnowledgeConfirmDesc": "Das Löschen der integrierten Wissensdatenbank-Konfiguration löscht alle zugehörigen Daten und kann nicht rückgängig gemacht werden. Bitte vorsichtig fortfahren.", + "advanced": "Erweiterte Optionen", + "dimensions": "Embedding-Dimensionen", + "dimensionsPlaceholder": "Größe der Embedding-Dimensionen, z. B. 1024", + "autoDetectDimensions": "Embedding-Dimensionen automatisch erkennen", + "autoDetectHelper": "Automatische Erkennung der Embedding-Dimensionen verbraucht eine kleine Menge Tokens", + "dimensionsHelper": "Bitte sicherstellen, dass das Modell die festgelegte Embedding-Dimensionsgröße unterstützt", + "autoDetectDimensionsError": "Automatische Erkennung der Embedding-Dimensionen fehlgeschlagen", + "normalized": "L2-Normalisierung", + "normalizedHelper": "Bitte prüfen, ob das Modell L2-Normalisierung der Ausgabevektoren unterstützt", + "chunkSizePlaceholder": "Standardwert, Änderung nicht empfohlen", + "chunkOverlapPlaceholder": "Standardwert, Änderung nicht empfohlen", + "return": "Zurück", + "uploadHelper": "Zum Hochladen klicken oder Datei hierher ziehen", + "fileSupport": "Unterstützt {accept} und {count} weitere Formate", + "searchKnowledge": "Wissensdatenbank suchen", + "searchKnowledgePlaceholder": "Suchanfrage eingeben", + "noData": "Keine Daten", + "file": "Datei", + "uploadProcessing": "Upload läuft", + "uploadCompleted": "Upload abgeschlossen", + "reAdd": "Erneut hochladen", + "uploadError": "Upload fehlgeschlagen", + "processing": "Upload läuft", + "paused": "Pausiert", + "unknown": "Unbekannter Status", + "delete": "Löschen", + "reason": "Grund", + "deleteSuccess": "Löschen erfolgreich", + "copy": "Kopieren", + "copySuccess": "Kopieren erfolgreich", + "source": "Quelle", + "resumeAllPausedTasks": "Alle fortsetzen", + "pauseAllRunningTasks": "Alle pausieren", + "reAddFile": { + "title": "Erneutes Hochladen bestätigen", + "content": "Datei \"{fileName}\" wirklich erneut hochladen?" + }, + "deleteFile": { + "title": "Dateilöschung bestätigen", + "content": "Datei \"{fileName}\" wirklich löschen? Diese Aktion kann nicht wiederhergestellt werden." + }, + "dialog": { + "beforequit": { + "title": "Beenden bestätigen", + "description": "Es laufen Wissensdatenbankaufgaben. Software wirklich beenden?\nAbgebrochene Aufgaben können nach dem Neustart der Software fortgesetzt werden.", + "cancel": "Abbrechen", + "confirm": "Bestätigen" + } + }, + "searchError": "Abfrage fehlgeschlagen", + "separators": "Block-Trennzeichen", + "separatorsHelper": "Dokument-Segmentierungstrennzeichen: Ein einzelnes Trennzeichen wird mit ASCII-Doppelanfuehrungszeichen (\"\") umschlossen, mehrere Trennzeichen werden mit ASCII-Komma (,) getrennt", + "invalidSeparators": "Ungültige Trennzeichen", + "selectLanguage": "Voreinstellung auswählen", + "separatorsPreset": "Voreinstellung laden", + "nowledgeMem": { + "apiKey": "API Key", + "apiKeyHint": "Optional.\nWenn Ihr Dienst einen API Key erfordert, geben Sie ihn hier ein.", + "baseUrl": "Base URL", + "configuration": "Konfiguration", + "description": "Sitzung nach Nowledge Mem exportieren", + "resetConfig": "Konfiguration zurücksetzen", + "saveConfig": "Speichern", + "seconds": "Sekunden", + "testConnection": "Verbindung testen", + "timeout": "Timeout", + "title": "Nowledge Mem Exportkonfiguration" + } + }, + "mcp": { + "title": "MCP-Einstellungen", + "description": "MCP-Server und Tools verwalten und konfigurieren", + "enabledTitle": "MCP aktivieren", + "enabledDescription": "MCP-Funktionen und Tools aktivieren oder deaktivieren", + "enableToAccess": "Bitte aktivieren Sie zuerst MCP, um auf Konfigurationsoptionen zuzugreifen", + "marketplace": "Zum MCP-Markt für Ein-Klick-Installation", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Technische Details", + "httpServer": "HTTP-Server", + "localProcess": "Lokaler Prozess", + "restartServer": "Server neu starten", + "viewLogs": "Protokolle anzeigen", + "starting": "Startet", + "error": "Fehler", + "tabs": { + "servers": "Server", + "tools": "Tools", + "prompts": "Prompts", + "resources": "Ressourcen" + }, + "serverList": "Serverliste", + "addServer": "Server hinzufügen", + "running": "Läuft", + "stopped": "Gestoppt", + "stopServer": "Server stoppen", + "startServer": "Server starten", + "noServersFound": "Keine Server gefunden", + "addServerDialog": { + "title": "Server hinzufügen", + "description": "Neuen MCP-Server konfigurieren" + }, + "editServerDialog": { + "title": "Server bearbeiten", + "description": "MCP-Serverkonfiguration bearbeiten" + }, + "serverForm": { + "name": "Servername", + "namePlaceholder": "Servernamen eingeben", + "nameRequired": "Servername darf nicht leer sein", + "type": "Servertyp", + "typePlaceholder": "Servertyp auswählen", + "typeStdio": "Standard-Ein-/Ausgabe (Stdio)", + "typeSse": "Server-Sent Events (SSE)", + "typeInMemory": "In-Memory (InMemory)", + "typeHttp": "Streamingfähige HTTP-Anfragen (HTTP)", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Server-Base URL eingeben (z. B. http://localhost:3000)", + "command": "Befehl", + "commandPlaceholder": "Befehl eingeben", + "commandRequired": "Befehl darf nicht leer sein", + "args": "Argumente", + "argsPlaceholder": "Ein Argument pro Zeile", + "addArg": "Argument hinzufügen", + "argPlaceholder": "Argumentwert eingeben", + "argsRequired": "Argumente dürfen nicht leer sein", + "env": "Umgebungsvariablen", + "envPlaceholder": "Umgebungsvariablen im JSON-Format eingeben", + "envInvalid": "Umgebungsvariablen müssen gültiges JSON sein", + "description": "Beschreibung", + "descriptionPlaceholder": "Serverbeschreibung eingeben", + "descriptions": "Beschreibung", + "descriptionsPlaceholder": "Serverbeschreibung eingeben", + "icon": "Symbol", + "iconPlaceholder": "Symbol eingeben", + "icons": "Symbole", + "iconsPlaceholder": "Symbol eingeben", + "autoApprove": "Automatisch autorisieren", + "autoApproveAll": "Alle", + "autoApproveRead": "Lesen", + "autoApproveWrite": "Schreiben", + "autoApproveHelp": "Vorgangstypen auswählen, die ohne Benutzerbestätigung automatisch autorisiert werden", + "submit": "Absenden", + "add": "Hinzufügen", + "update": "Aktualisieren", + "cancel": "Abbrechen", + "jsonConfigIntro": "Sie können eine JSON-Konfiguration direkt einfügen oder den Server manuell konfigurieren.", + "jsonConfig": "JSON-Konfiguration", + "jsonConfigPlaceholder": "Bitte MCP-Serverkonfiguration im JSON-Format einfügen", + "jsonConfigExample": "JSON-Konfigurationsbeispiel", + "parseSuccess": "Konfiguration erfolgreich geparst", + "configImported": "Konfiguration erfolgreich importiert", + "parseError": "Parse-Fehler", + "skipToManual": "Zur manuellen Konfiguration springen", + "parseAndContinue": "Parsen und fortfahren", + "jsonParseError": "JSON-Parsing fehlgeschlagen", + "browseMarketplace": "MCP-Dienstmarkt durchsuchen", + "imageModel": "Vision-Modell", + "customHeadersParseError": "Benutzerdefinierte Header konnten nicht geparst werden", + "customHeaders": "Benutzerdefinierte Anfrage-Header", + "clickToEdit": "Zum Bearbeiten klicken, um den vollständigen Inhalt anzuzeigen", + "invalidKeyValueFormat": "Ungültiges Header-Format. Bitte Eingabe prüfen.", + "npmRegistry": "Benutzerdefinierte NPM Registry", + "npmRegistryPlaceholder": "Benutzerdefinierte NPM Registry festlegen; leer lassen, damit das System automatisch die schnellste auswählt", + "browseHigress": "Higress MCP-Markt durchsuchen", + "selectFolderError": "Fehler bei der Ordnerauswahl", + "folders": "Zugelassene Ordner", + "addFolder": "Ordner hinzufügen", + "noFoldersSelected": "Keine Ordner ausgewählt", + "useE2B": "E2B-Sandbox aktivieren", + "e2bDescription": "Python-Code mit E2B-Sandbox ausführen", + "e2bApiKey": "E2B ApiKey", + "e2bApiKeyPlaceholder": "Geben Sie hier Ihre E2B Api Keys ein, z. B. e2b_1111xx*****", + "e2bApiKeyHelp": "Auf e2b.dev erhalten Sie Ihren ApiKey", + "e2bApiKeyRequired": "Zum Aktivieren der E2B-Funktion muss ein ApiKey eingegeben werden" + }, + "deleteServer": "Server löschen", + "editServer": "Server bearbeiten", + "setDefault": "Als Standard festlegen", + "removeDefault": "Standard entfernen", + "isDefault": "Standardserver", + "default": "Standard", + "setAsDefault": "Als Standardserver festlegen", + "removeServer": "Server löschen", + "autoStart": "Autostart", + "confirmRemoveServer": "Server {name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "removeServerDialog": { + "title": "Server löschen" + }, + "confirmDelete": { + "title": "Löschen bestätigen", + "description": "Server {name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "confirm": "Löschen", + "cancel": "Abbrechen" + }, + "resetToDefault": "Standarddienste wiederherstellen", + "resetConfirmTitle": "Standarddienste wiederherstellen", + "resetConfirmDescription": "Dadurch werden alle Standardserver wiederhergestellt, während Ihre benutzerdefinierten Server erhalten bleiben. Änderungen an Standardservern gehen verloren.", + "resetConfirm": "Wiederherstellen", + "builtInServers": "Integrierte Dienste", + "customServers": "Benutzerdefinierte Dienste", + "builtIn": "Integriert", + "cannotRemoveBuiltIn": "Integrierter Dienst kann nicht gelöscht werden", + "builtInServerCannotBeRemoved": "Integrierte Dienste können nicht gelöscht werden; nur Parameter und Umgebungsvariablen können geändert werden", + "maxDefaultServersReached": "Es können höchstens 3 Standardserver festgelegt werden", + "removeDefaultFirst": "Bitte zuerst einige Standardserver entfernen", + "higressMarket": "Zur Higress MCP-Installation", + "totalServers": "Server gesamt", + "npmRegistry": { + "title": "NPM-Quelle", + "currentSource": "Aktuelle Quelle", + "cached": "Cache", + "lastChecked": "Letzte Prüfung", + "refresh": "Aktualisieren", + "advanced": "Erweitert", + "advancedSettings": "Erweiterte Einstellungen", + "advancedSettingsDesc": "Erweiterte Optionen für NPM-Quellen konfigurieren, einschließlich automatischer Erkennung und benutzerdefinierter Quellen", + "autoDetect": "Optimale Quelle automatisch erkennen", + "autoDetectDesc": "Beim Start automatisch die schnellste NPM-Quelle erkennen und verwenden", + "customSource": "Benutzerdefinierte Quelle", + "customSourcePlaceholder": "Benutzerdefinierte NPM-Quelladresse eingeben", + "currentCustom": "Aktuelle benutzerdefinierte Quelle", + "justNow": "Gerade eben", + "minutesAgo": "vor {minutes} Minuten", + "hoursAgo": "vor {hours} Stunden", + "daysAgo": "vor {days} Tagen", + "refreshSuccess": "NPM-Quelle erfolgreich aktualisiert", + "refreshSuccessDesc": "Optimale NPM-Quelle wurde erneut erkannt und aktualisiert", + "refreshFailed": "Aktualisierung der NPM-Quelle fehlgeschlagen", + "autoDetectUpdated": "Automatische Erkennung aktualisiert", + "autoDetectEnabled": "Automatische Erkennung der optimalen NPM-Quelle aktiviert", + "autoDetectDisabled": "Automatische Erkennung deaktiviert; Standardquelle wird verwendet", + "updateFailed": "Aktualisierung der Einstellung fehlgeschlagen", + "customSourceSet": "Benutzerdefinierte Quelle festgelegt", + "customSourceSetDesc": "Benutzerdefinierte NPM-Quelle festgelegt: {registry}", + "customSourceCleared": "Benutzerdefinierte Quelle gelöscht", + "customSourceClearedDesc": "Benutzerdefinierte NPM-Quelle gelöscht; automatische Erkennung wird verwendet", + "invalidUrl": "Ungültige URL", + "invalidUrlDesc": "Bitte gültige HTTP- oder HTTPS-Adresse eingeben", + "testing": "NPM-Quelle wird getestet", + "testingDesc": "Verbindung zu Quelle {registry} wird getestet...", + "testFailed": "Test der NPM-Quelle fehlgeschlagen", + "testFailedDesc": "Verbindung zu {registry} nicht möglich, Fehler: {error}. Bitte URL oder Netzwerkverbindung prüfen.", + "redetectingOptimal": "Optimale NPM-Quelle wird erneut erkannt...", + "redetectComplete": "Erneute Erkennung abgeschlossen", + "redetectCompleteDesc": "Aktuell optimale NPM-Quelle wurde erkannt und festgelegt", + "redetectFailed": "Erneute Erkennung fehlgeschlagen", + "redetectFailedDesc": "Optimale Quelle konnte nicht erneut erkannt werden; Standardkonfiguration wird verwendet" + }, + "managedServerReadOnly": "DeepChat-verwalteter Dienst", + "managedServerReadOnlyDesc": "Aktivierung und Berechtigungen bitte in den Einstellungen des zugehörigen Plugins verwalten", + "center": { + "title": "MCP Center", + "running": "Running", + "builtIn": "Built-in", + "custom": "Custom", + "searchPlaceholder": "MCP servers suchen...", + "noResults": "Keine passenden MCP server", + "command": "Command / URL", + "filters": { + "all": "All", + "running": "Running", + "stopped": "Stopped", + "builtIn": "Built-in", + "custom": "Custom" + } + } + }, + "about": { + "title": "Über uns", + "version": "Version", + "checkUpdate": "Nach Updates suchen", + "checking": "Prüfung läuft...", + "latestVersion": "Bereits neueste Version" + }, + "display": { + "fontTitle": "Schrift", + "fontFamily": "Oberflächenschrift", + "fontFamilyDesc": "Primäre Schrift der Oberfläche auswählen. Leer lassen, um den integrierten Schriftstapel zu verwenden.", + "codeFontFamily": "Monospace-Schrift", + "codeFontFamilyDesc": "Für Codeblöcke und Monospace-Bereiche.", + "fontDefaultLabel": "Standard (integrierter Schriftstapel)", + "fontSearchPlaceholder": "Schriften suchen", + "fontSearchEmpty": "Keine passende Schrift", + "fontReset": "Auf Standard zurücksetzen", + "fontSystemLoading": "Systemschriften werden geladen...", + "fontUsageHint": "Einige Oberflächen benötigen einen Neustart der App, damit die Änderung wirkt. Ist die Schrift nicht verfügbar, wird automatisch auf die Standardschrift zurückgegriffen.", + "fontSize": "Textgröße", + "text-sm": "Klein", + "text-base": "Standard", + "text-lg": "Groß", + "text-xl": "Sehr groß", + "text-2xl": "Extra groß", + "floatingButton": "Schwebende Schaltfläche", + "floatingButtonDesc": "Eine schwebende Schaltfläche auf dem Desktop anzeigen, um das App-Fenster schnell zu öffnen" + }, + "shortcuts": { + "title": "Tastenkürzel-Einstellungen", + "pressKeys": "Tastenkürzel eingeben", + "pressEnterToSave": "Enter zum Speichern, Esc zum Abbrechen", + "noModifierOnly": "Ein Tastenkürzel darf nicht nur aus Modifikatortasten bestehen", + "keyConflict": "Tastenkürzelkonflikt, bitte andere Kombination wählen", + "clearShortcut": "Tastenkürzel löschen", + "zoomIn": "Schrift vergrößern", + "zoomOut": "Schrift verkleinern", + "zoomReset": "Schrift zurücksetzen", + "goSettings": "Einstellungen öffnen", + "cleanHistory": "Chatverlauf löschen", + "deleteConversation": "Sitzung löschen", + "hideWindow": "Fenster ausblenden", + "quitApp": "App beenden", + "toggleSidebar": "Seitenleiste umschalten", + "toggleWorkspace": "Arbeitsbereich umschalten", + "newWindow": "Neues Fenster öffnen", + "showHideWindow": "Fenster anzeigen/ausblenden", + "newConversation": "Neue Sitzung", + "quickSearch": "Suche fokussieren", + "closeWindow": "Aktuelles Fenster schließen" + }, + "acp": { + "title": "ACP Agent", + "description": "Lokale ACP Agent verwalten, die von DeepChat gestartet werden.", + "enabledTitle": "ACP aktivieren", + "enabledDescription": "Nach Aktivierung erscheinen konfigurierte ACP Agent in der Modellliste.", + "useBuiltinRuntimeTitle": "Integrierte DeepChat-Umgebung verwenden", + "useBuiltinRuntimeDescription": "Wenn aktiviert, werden die Systembefehle node und uv umgangen und die mit DeepChat gebündelten Versionen verwendet.", + "enableToAccess": "ACP aktivieren, um Agent zu konfigurieren.", + "registryInstallEntry": "Agent installieren", + "registryInstallEntryDescription": "In ACP Registry nach Agent suchen und installieren; danach hierher zurückkehren, um sie zu aktivieren und zu konfigurieren.", + "addCustomAgent": "Benutzerdefinierten Agent hinzufügen", + "customEmpty": "Noch keine benutzerdefinierten Agent.", + "customDeleteConfirm": "Benutzerdefinierten Agent „{name}“ löschen?", + "builtinSectionTitle": "Registry ACP Agent", + "builtinSectionDescription": "Agent dynamisch aus ACP Registry laden, mit lokalem Cache, automatischer Installation und Runtime-Reparatur.", + "builtinHint": "{name} mit den folgenden Einstellungen starten.", + "disabledBadge": "Nicht aktiviert", + "manageProfiles": "Konfigurationen", + "addProfile": "Konfiguration hinzufügen", + "activeProfile": "Aktive Konfiguration", + "profilePlaceholder": "Konfiguration auswählen", + "profileSwitched": "Konfiguration gewechselt", + "customSectionTitle": "Benutzerdefinierter Agent", + "customSectionDescription": "Jeden ACP-kompatiblen Kommandozeilenbefehl als wiederverwendbaren Agent verpacken.", + "mcpAccessTitle": "Verfügbare MCP", + "mcpAccessEmpty": "Keine auswählbaren MCP.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "Gemeinsame MCP", + "sharedMcpDescription": "Alle ACP Agent teilen dieselbe MCP-Zugriffskonfiguration.", + "installedSectionTitle": "Installierte Agent", + "installedSectionDescription": "Nur installierte Registry Agent erscheinen hier zur Aktivierung, Fehleranalyse und Überschreibung von Umgebungsvariablen.", + "installedCount": "{count} installiert", + "installedEmptyTitle": "Noch keine installierten Registry Agent", + "installedEmptyDescription": "Installieren Sie zuerst einen Agent aus ACP Registry; danach wird hier die konfigurierbare Oberfläche angezeigt.", + "registryCount": "{count} Agent", + "registryEmpty": "Unter den aktuellen Filtern sind keine Registry Agent verfügbar.", + "registryOverlayEmpty": "Unter den aktuellen Filtern sind keine installierbaren Agent verfügbar.", + "registryRefresh": "Registry aktualisieren", + "registryRepair": "Reparieren", + "registryInstallAction": "Installieren", + "registryUninstallAction": "Deinstallieren", + "registryUninstallConfirm": "„{name}“ deinstallieren?", + "registryUninstallDescription": "DeepChat deaktiviert diesen Agent und bereinigt bei Bedarf lokal verwaltete Installationsdaten. Danach kann er weiterhin aus ACP Registry neu installiert werden.", + "registryUninstallFailed": "Agent-Deinstallation fehlgeschlagen", + "registryInstallTitle": "ACP Registry", + "registryInstallDescription": "ACP Agent suchen, filtern und installieren. Nach der Installation zur Einstellungsseite zurückkehren und konfigurieren.", + "registryLearnMore": "Mehr erfahren", + "registryRepository": "Repository", + "registrySearchPlaceholder": "ACP Registry Agent suchen...", + "installFilters": { + "all": "Alle", + "installed": "Installiert", + "notInstalled": "Nicht installiert" + }, + "filters": { + "all": "Alle Status", + "enabled": "Nur aktiviert", + "installed": "Nur installiert", + "attention": "Nur zu prüfen" + }, + "envOverrideTitle": "Umgebungsvariablen überschreiben", + "envOverridePlaceholder": "Ein KEY=VALUE pro Zeile", + "installState": { + "installed": "Installiert", + "installing": "Installation läuft", + "error": "Installation fehlgeschlagen", + "notInstalled": "Nicht installiert" + }, + "loading": "ACP-Daten werden geladen...", + "none": "Keine", + "saveSuccess": "Konfiguration gespeichert", + "saveFailed": "Speichern fehlgeschlagen", + "deleteSuccess": "Löschen erfolgreich", + "initialize": "Initialisieren", + "initializing": "Initialisierung läuft...", + "initializeDescription": "Terminal geöffnet und Initialisierungsbefehl ausgeführt", + "initializeSuccess": "Initialisierung gestartet", + "initializeFailed": "Initialisierung fehlgeschlagen", + "missingFieldsTitle": "Name und Befehl sind erforderlich", + "missingFieldsDesc": "Bitte zuerst Name und Befehl ausfüllen.", + "command": "Befehl", + "commandPlaceholder": "Ausführbare Datei oder Skriptpfad", + "args": "Argumente", + "argsPlaceholder": "Optional, durch Leerzeichen getrennt; bei Bedarf in Anführungszeichen setzen.", + "env": "Umgebungsvariablen", + "addEnv": "Variable hinzufügen", + "envKeyPlaceholder": "KEY", + "envValuePlaceholder": "VALUE", + "profileDialog": { + "addBuiltinTitle": "{name}-Konfiguration hinzufügen", + "editBuiltinTitle": "{name}-Konfiguration bearbeiten", + "addCustomTitle": "Benutzerdefinierten Agent hinzufügen", + "editCustomTitle": "Benutzerdefinierten Agent bearbeiten", + "builtinHint": "Mehrere Voreinstellungen für verschiedene Szenarien vorbereiten und im Modellauswähler schnell wechseln.", + "customHint": "Befehl, Argumente und Umgebungsvariablen eingeben, die zum Starten des Agent benötigt werden.", + "profileName": "Konfigurationsname", + "profileNamePlaceholder": "Z. B.: Workstation", + "agentName": "Agent-Name", + "agentNamePlaceholder": "Z. B.: My ACP Agent" + }, + "profileManager": { + "title": "Konfigurationsliste", + "description": "Gespeicherte Startkonfigurationen wechseln, bearbeiten oder löschen.", + "count": "{count} Konfigurationen", + "empty": "Keine Konfigurationen.", + "active": "Aktuell aktiv", + "setActive": "Als aktiv festlegen", + "deleteConfirm": "Konfiguration „{name}“ löschen?", + "cannotDeleteTitle": "Mindestens eine Konfiguration behalten", + "cannotDeleteDesc": "Integrierte Agent benötigen mindestens eine Konfiguration.", + "noAgent": "Bitte Agent auswählen, der verwaltet werden soll." + }, + "terminal": { + "title": "Initialisierungsterminal", + "waiting": "Warten auf Start der Initialisierung...", + "starting": "Initialisierung wird gestartet...", + "close": "Schließen", + "closing": "Wird geschlossen...", + "exitSuccess": "Prozess erfolgreich abgeschlossen (Exit-Code: {code})", + "exitError": "Prozess mit Fehler beendet (Exit-Code: {code})", + "processError": "Prozessfehler", + "paste": "Einfügen", + "pasteError": "Einfügen aus der Zwischenablage fehlgeschlagen", + "status": { + "idle": "Inaktiv", + "running": "Läuft", + "completed": "Abgeschlossen", + "error": "Fehler" + } + }, + "dependency": { + "title": "Externe Abhängigkeiten fehlen", + "description": "Vor der Initialisierung müssen die folgenden Abhängigkeiten installiert werden.", + "installCommands": "Installationsbefehle", + "downloadUrl": "Download-Link", + "copy": "Kopieren", + "copied": "In die Zwischenablage kopiert", + "copyFailed": "Kopieren fehlgeschlagen" + }, + "debug": { + "title": "ACP Inspector", + "description": "Gesundheitsstatus von „{name}“ prüfen und rohe ACP-Anfragen senden, um den Ereignisstrom anzuzeigen.", + "entry": "Inspector", + "healthCheck": "Health Check", + "healthChecking": "Prüfung läuft...", + "healthCheckFailed": "Health Check fehlgeschlagen", + "workdirPlaceholder": "Leer lassen, um Standardarbeitsverzeichnis zu verwenden", + "close": "Schließen", + "customMethod": "Benutzerdefinierter Methodenname", + "customMethodPlaceholder": "Z. B. session/ping", + "payloadHint": "JSON kann vor dem Senden angepasst werden.", + "format": "JSON formatieren", + "resetTemplate": "Vorlage wiederherstellen", + "clearHistory": "Einträge leeren", + "send": "Anfrage senden", + "sending": "Wird gesendet...", + "processReady": "Prozess bereit", + "processNotReady": "Bitte zuerst Health Check ausführen", + "needInitialize": "Bitte zuerst Health Check ausführen", + "events": "Ereignisse", + "eventCount": "{count} Einträge", + "empty": "Keine Debug-Ereignisse.", + "parseError": "JSON-Parsing fehlgeschlagen", + "customMethodRequired": "Bitte Erweiterungsmethodennamen eingeben", + "requestFailed": "Anfrage fehlgeschlagen", + "methods": { + "initialize": "initialize", + "newSession": "session/new", + "loadSession": "session/load", + "prompt": "session/prompt", + "cancel": "session/cancel", + "setSessionMode": "session/setMode", + "setSessionModel": "session/setModel", + "extMethod": "ext/method", + "extNotification": "ext/notification" + }, + "eventKinds": { + "request": "Anfrage", + "response": "Antwort", + "notification": "Benachrichtigung", + "permission": "Berechtigung", + "lifecycle": "Lifecycle", + "stderr": "stderr", + "error": "Fehler" + } + } + }, + "rateLimit": { + "title": "Rate Limit", + "description": "Anfrageintervall steuern, um API-Limits nicht zu überschreiten", + "intervalLimit": "Anfrageintervall", + "intervalUnit": "Sekunden", + "intervalHelper": "Mindestintervall zwischen zwei Anfragen; deaktivieren Sie Rate Limit, wenn es nicht benötigt wird", + "lastRequestTime": "Letzte Anfrage", + "queueLength": "Warteschlangenlänge", + "nextAllowedTime": "Nächste erlaubte Anfrage", + "never": "Nie", + "justNow": "Gerade eben", + "secondsAgo": "Sekunden zuvor", + "minutesAgo": "Minuten zuvor", + "immediately": "Sofort", + "secondsLater": "Sekunden später", + "confirmDisableTitle": "Deaktivieren des Rate Limit bestätigen", + "confirmDisableMessage": "Dieser Wert darf nicht kleiner oder gleich 0 sein. Rate Limit deaktivieren?", + "confirmDisable": "Limit deaktivieren", + "disabled": "Rate Limit deaktiviert", + "disabledDescription": "Rate-Limit-Funktion wurde deaktiviert" + }, + "promptSetting": { + "resetToDefault": "Auf Standard-prompt zurücksetzen", + "resetToDefaultSuccess": "Auf Standard-System-prompt zurückgesetzt", + "resetToDefaultFailed": "Zurücksetzen fehlgeschlagen, bitte erneut versuchen" + }, + "skills": { + "title": "Skills-Einstellungen", + "description": "Skill-Module des KI-Assistenten verwalten und konfigurieren", + "draftSuggestions": { + "title": "Skill Draft nach Aufgabenende vorschlagen", + "description": "Nach Abschluss einer Aufgabe darf der Agent temporäre skill draft-Vorschläge erstellen, wenn wiederverwendbare Abläufe erkannt werden. draft wird zunächst in einem temporären Ordner gespeichert; Sie entscheiden manuell, ob er importiert und installiert wird." + }, + "openFolder": "Ordner öffnen", + "addSkill": "skill hinzufügen", + "empty": "Keine skill", + "emptyHint": "Klicken Sie auf „skill hinzufügen“, um einen neuen skill zu installieren", + "noResults": "Kein passender skill gefunden", + "search": "skill suchen...", + "count": "Insgesamt {count} skill", + "install": { + "title": "skill installieren", + "description": "Installationsmethode für skill auswählen", + "tabFolder": "Ordner", + "tabZip": "ZIP", + "tabUrl": "URL", + "fromFolder": "Aus Ordner installieren", + "selectFolder": "skill-Ordner auswählen", + "folderHint": "Klicken, um skill-Ordner auszuwählen", + "folderTip": "Direkter Import aus anderen Clients wie ~/.claude/skills/ wird unterstützt", + "zipHint": "Klicken, um ZIP-Datei auszuwählen", + "urlPlaceholder": "Download-URL für skill-ZIP eingeben", + "urlHint": "Download-Link des skill-Pakets eingeben", + "installButton": "Installieren", + "installing": "Installation läuft...", + "success": "Installation erfolgreich", + "successMessage": "skill {name} wurde erfolgreich installiert", + "failed": "Installation fehlgeschlagen", + "dragNotSupported": "Drag-and-drop wird derzeit nicht unterstützt. Bitte klicken Sie zur Auswahl" + }, + "delete": { + "title": "skill löschen", + "description": "skill {name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "success": "Löschen erfolgreich", + "successMessage": "skill {name} wurde erfolgreich gelöscht", + "failed": "Löschen fehlgeschlagen" + }, + "card": { + "scripts": "{count} Skripte", + "env": "{count} Umgebungsvariablen", + "pythonShort": "Py", + "nodeShort": "Node" + }, + "edit": { + "title": "skill bearbeiten", + "placeholder": "skill-Inhalt hier bearbeiten...", + "readFailed": "Lesen fehlgeschlagen", + "success": "Speichern erfolgreich", + "failed": "Speichern fehlgeschlagen", + "name": "Name", + "namePlaceholder": "skill-Name", + "nameHint": "skill-Name kann nach Erstellung nicht geändert werden", + "description": "Beschreibung", + "descriptionPlaceholder": "skill-Beschreibung", + "allowedTools": "Zusätzliche Tools", + "allowedToolsPlaceholder": "Read, Grep, Bash", + "allowedToolsHint": "Kommagetrennte Liste von Tool-Namen", + "content": "skill-Inhalt", + "runtimeTitle": "Runtime", + "runtimeHint": "Auflösungsstrategie für Python und Node integrierter Skripte auswählen.", + "pythonRuntime": "Python-Runtime", + "nodeRuntime": "Node-Runtime", + "envTitle": "Umgebungsvariablen", + "envWarning": "Nur in der UI maskiert; tatsächlich als Klartext in die skill sidecar-Datei geschrieben.", + "scriptsTitle": "Integrierte Skripte", + "scriptsHint": "Nur Skripte unter scripts/ werden über skill_run für agent verfügbar gemacht.", + "noScripts": "Keine ausführbaren Skripte gefunden", + "scriptEnabled": "Aktiviert", + "scriptDescription": "Beschreibung überschreiben", + "scriptDescriptionPlaceholder": "Optional, Skriptbeschreibung, die dem agent angezeigt wird", + "runtime": { + "auto": "Automatischer Fallback", + "system": "System-Runtime", + "builtin": "Integrierte Runtime" + }, + "files": "Ordnerinhalt", + "noFiles": "Keine Dateien" + }, + "conflict": { + "title": "skill existiert bereits", + "description": "Ein skill namens \"{name}\" existiert bereits. Überschreiben?", + "overwrite": "Überschreiben" + }, + "sync": { + "title": "Synchronisieren", + "import": "Aus anderen Tools importieren...", + "export": "Exportieren", + "importTitle": "Skills aus anderen Tools importieren", + "exportTitle": "Skills in andere Tools exportieren", + "importDescription": "Skills aus Claude Code, Cursor und anderen Tools importieren", + "exportDescription": "Skills in andere KI-Assistenten-Tools exportieren", + "step1Title": "Quelltool auswählen", + "step2Title": "Zu importierende Skills auswählen", + "step3Title": "Import bestätigen", + "exportStep1Title": "Zu exportierende Skills auswählen", + "exportStep2Title": "Zieltool auswählen", + "exportStep3Title": "Export bestätigen", + "scanning": "Scan läuft...", + "noToolsFound": "Keine installierten Tools erkannt", + "skillCount": "{count} Skills erkannt", + "notInstalled": "Nicht installiert", + "selectedCount": "{count} ausgewählt", + "selectAll": "Alle auswählen", + "deselectAll": "Alle abwählen", + "conflict": "Konflikt", + "conflictDescription": "skill \"{name}\" mit gleichem Namen existiert bereits", + "batchAction": "Stapelaktion", + "skip": "Überspringen", + "skipAll": "Alle überspringen", + "overwrite": "Überschreiben", + "overwriteAll": "Alle überschreiben", + "rename": "Umbenennen", + "renameAll": "Alle umbenennen", + "warnings": "Konvertierungswarnungen", + "previewing": "Vorschau wird erstellt...", + "importing": "Import läuft ({current}/{total})...", + "exporting": "Export läuft ({current}/{total})...", + "importButton": "Importieren", + "exportButton": "Exportieren", + "exportWarnings": "Exportwarnungen", + "noConflicts": "Keine Konflikte", + "readyToExport": "{count} Skills bereit zum Export", + "kiroOptions": "Kiro-Exportoptionen", + "kiroInclusion": "Einbindungsmodus", + "kiroOnDemand": "Bei Bedarf", + "kiroOnDemandDesc": "Nur verwenden, wenn der Benutzer es ausdrücklich anfordert", + "kiroAlways": "Immer", + "kiroAlwaysDesc": "Automatisch in jedem Chat enthalten", + "kiroConditional": "Bedingt", + "kiroConditionalDesc": "Automatisch anhand von Dateimustern einbinden", + "kiroFilePatterns": "Dateimuster", + "kiroFilePatternsPlaceholder": "Z. B.: **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Kommagetrennte glob-Muster", + "scanError": "Scan fehlgeschlagen", + "previewError": "Vorschau fehlgeschlagen", + "loadToolsError": "Tool-Liste konnte nicht geladen werden", + "importSuccess": "Import erfolgreich", + "importSuccessMessage": "{count} Skills erfolgreich importiert", + "importPartial": "Teilweise erfolgreich importiert", + "importPartialMessage": "{success} erfolgreich, {skipped} übersprungen, {failed} fehlgeschlagen", + "importError": "Import fehlgeschlagen", + "exportSuccess": "Export erfolgreich", + "exportSuccessMessage": "{count} Skills erfolgreich exportiert", + "exportPartial": "Teilweise erfolgreich exportiert", + "exportPartialMessage": "{success} erfolgreich, {skipped} übersprungen, {failed} fehlgeschlagen", + "exportError": "Export fehlgeschlagen", + "resultSuccess": "Vorgang erfolgreich", + "resultPartial": "Teilweise erfolgreich", + "imported": "Importiert", + "exported": "Exportiert", + "skipped": "Übersprungen", + "failed": "Fehlgeschlagen", + "failedItems": "Fehlgeschlagene Einträge" + }, + "syncStatus": { + "title": "Externe Tools", + "description": "Skills aus anderen KI-Programmierassistenten importieren", + "scanning": "Tools werden gescannt...", + "noToolsFound": "Keine externen Tools erkannt", + "skillCount": "{count} Skills", + "notInstalled": "Nicht installiert", + "notAvailable": "Nicht verfügbar", + "noSkills": "Keine Skills", + "import": "Importieren", + "syncing": "Import läuft..." + }, + "syncPrompt": { + "title": "Neue Skills gefunden", + "description": "Wir haben neue Skills in anderen KI-Programmierassistenten gefunden. Importieren?", + "dontShowAgain": "Diesen Hinweis nicht mehr anzeigen", + "skip": "Überspringen", + "importSelected": "Ausgewählte importieren" + } + }, + "environments": { + "title": "Verzeichnisumgebungen", + "description": "Projektverzeichnisse ansehen, die Sitzungen verwendet haben, und sie schnell öffnen oder als Standardverzeichnis festlegen.", + "default": { + "title": "Standardverzeichnis", + "description": "Neue Sitzungen wählen dieses Verzeichnis bevorzugt vor, ohne Ihre manuelle Auswahl zu erzwingen.", + "empty": "Aktuell ist kein Standardverzeichnis festgelegt." + }, + "history": { + "title": "Verzeichnisverlauf", + "description": "Hier werden nur Verzeichnisse angezeigt, die tatsächlich von Sitzungen verwendet wurden." + }, + "temp": { + "title": "Temp-Verzeichnis", + "description": "Umgebungen im System-Temp-Verzeichnis oder in appverwalteten Arbeitsbereichen werden hier gesammelt und standardmäßig eingeklappt." + }, + "actions": { + "refresh": "Aktualisieren", + "showMissing": "Nicht vorhandene Verzeichnisse anzeigen", + "open": "Öffnen", + "setDefault": "Als Standard festlegen", + "clearDefault": "Standard löschen", + "showTemp": "Temp anzeigen", + "hideTemp": "Temp einklappen" + }, + "badges": { + "default": "Standard", + "temp": "Temp", + "missing": "Verzeichnis existiert nicht", + "notInHistory": "Nicht im Verlauf" + }, + "meta": { + "sessions": "{count} Sitzungen", + "lastUsed": "Zuletzt verwendet: {value}", + "never": "Nie" + }, + "empty": { + "regular": "Keine Verzeichnisumgebungen zum Anzeigen.", + "temp": "Aktuell keine Temp-Verzeichnisumgebungen." + }, + "errors": { + "openTitle": "Verzeichnis konnte nicht geöffnet werden" + } + }, + "remote": { + "title": "Remote", + "description": "Telegram, Feishu / Lark, QQBot, Discord und WeChat iLink für Fernsteuerung zentral konfigurieren.", + "telegram": { + "title": "Telegram", + "description": "Telegram Bot anbinden, unterstützt Fernsteuerung über Direktnachrichten, Gruppen und Themen-Threads.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Telegram Bot Token", + "botTokenDescription": "Bot Token für die Telegram-Fernsteuerung eintragen." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Feishu Bot anbinden, unterstützt Fernsteuerung über Direktnachrichten, Gruppen und Themen-Threads.", + "brand": "Marke", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "App-ID", + "appIdPlaceholder": "Feishu-App-ID", + "appSecret": "App Secret", + "appSecretPlaceholder": "Feishu-App Secret", + "verificationToken": "Verifizierungstoken", + "verificationTokenPlaceholder": "Feishu-Ereignisabo-Verifizierungstoken", + "encryptKey": "Verschlüsselungsschlüssel (optional)", + "encryptKeyPlaceholder": "Leer lassen, wenn Ereignisverschlüsselung nicht aktiviert ist", + "botUser": "Bot-Konto: {name} ({openId})", + "bindings": "Bindungen: {count}, gekoppelte Benutzer: {pairedUserCount}", + "pairedUserOpenIds": "Gekoppelte Benutzer-Open ID", + "pairedUserOpenIdsPlaceholder": "Z. B. ou_xxx, ou_yyy", + "accessRulesDescription": "Zuerst per Direktnachricht koppeln. In Gruppen können nur gekoppelte Benutzer, die den Bot mit {'@'} erwähnen, Sitzungen steuern.", + "accessRule1": "Zuerst dem Bot per Direktnachricht /pair [Kopplungscode] senden, um die Kopplung abzuschließen.", + "accessRule2": "In Gruppen und Themen-Threads gelangen nur Nachrichten von gekoppelten Benutzern in die Sitzung, wenn sie den Bot mit {'@'} erwähnen." + }, + "discord": { + "title": "Discord", + "description": "Discord Bot anbinden, unterstützt Fernsteuerung über Direktnachrichten, Kanal-Erwähnungen und Slash Commands.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Discord Bot Token", + "remoteControlDescription": "Discord-Fernsteuerung verwendet einen eigenen Bot Token, Gateway- und REST-Ablauf.", + "accessRule1": "Senden Sie /pair [Kopplungscode] in einer Direktnachricht oder im Zielkanal, um den aktuellen DM oder Kanal für DeepChat zu autorisieren.", + "accessRule2": "Kanalnachrichten gelangen nur bei Bot-Erwähnung in die Sitzung, um normale Chats nicht versehentlich zu verarbeiten." + }, + "sections": { + "credentials": "Zugangsdaten", + "remoteControl": "Fernsteuerung", + "notifications": "Benachrichtigungen", + "accessRules": "Zugriffsregeln" + }, + "remoteControl": { + "description": "Jeden Remote-Einstieg an eine Sitzung binden und diese Sitzung über verschiedene Befehle hinweg weiterverwenden.", + "allowedUserIds": "Zugelassene Benutzer-IDs", + "allowedUserIdsPlaceholder": "Z. B. 123456789, 987654321", + "defaultAgent": "Standard-Agent", + "defaultAgentPlaceholder": "Agent auswählen", + "defaultWorkdir": "Standardverzeichnis", + "defaultWorkdirPlaceholder": "Standardverzeichnis auswählen", + "defaultWorkdirHelper": "Arbeitsverzeichnis der Fernsteuerungssitzung. Wenn der Standard-Agent ACP ist, muss es ausgewählt werden.", + "openPairDialog": "Koppeln", + "manageBindings": "Bindungen verwalten", + "pairCode": "Kopplungscode", + "noPairCode": "Aktuell kein gültiger Kopplungscode", + "pairCodeExpiresAt": "Ablaufzeit: {time}", + "pairDialogTitle": "{channel}-Kopplung", + "pairDialogDescription": "Nach dem Erzeugen des Kopplungscodes bitte im entsprechenden {channel}-Bot koppeln.", + "pairDialogInstructionTelegram": "Diese Anweisung an den Telegram-Bot senden:", + "pairDialogInstructionFeishu": "Diese Anweisung per Direktnachricht an den Feishu-Bot senden:", + "pairDialogInstructionDiscord": "Diese Anweisung per Direktnachricht oder im Zielkanal an den Discord-Bot senden:", + "bindingsDialogTitle": "{channel}-Bindungen", + "bindingsDialogDescription": "Remote-Einstiege einzeln von DeepChat-Sitzungen lösen.", + "bindingsEmpty": "Aktuell keine gebundenen Sitzungen.", + "pairingSuccessTitle": "Kopplung erfolgreich", + "pairingSuccessDescription": "Liste der gekoppelten Subjekte wurde aktualisiert.", + "pairDialogInstructionQQBot": "Diese Anweisung im QQ-Bot-Direktchat oder in einer autorisierten Gruppe senden:", + "authorizedPrincipalsTitle": "Autorisierte Subjekte", + "authorizedPrincipalsDescription": "Diese {channel}-Konten sind autorisiert und können Sitzungen koppeln und steuern.", + "authorizedPrincipalsEmpty": "Aktuell keine autorisierten Subjekte.", + "sessionBindingsTitle": "Sitzungsbindungen", + "sessionBindingsDescription": "Jeder Remote-Einstieg unten ist aktuell an eine DeepChat-Sitzung gebunden." + }, + "hooks": { + "title": "Telegram Hook-Benachrichtigungen", + "description": "Denselben Telegram Bot für Hook-Benachrichtigungen wiederverwenden.", + "chatId": "Chat-ID", + "chatIdPlaceholder": "Z. B. 123456789", + "threadId": "Themen-ID (optional)", + "threadIdPlaceholder": "Optionale Themen-ID" + }, + "status": { + "title": "Laufzeitstatus", + "botUser": "Bot-Benutzer: {username} ({id})", + "bindings": "Bindungen: {count}, Polling-Offset: {pollOffset}", + "states": { + "disabled": "Deaktiviert", + "stopped": "Gestoppt", + "starting": "Startet", + "running": "Läuft", + "backoff": "Wiederholung nach Fehler", + "error": "Fehler" + }, + "bindingOnly": "Bindungen: {count}, gekoppelte Subjekte: {paired}" + }, + "overview": { + "telegram": "{bindingCount} Bindungen, {pairedCount} gekoppelte Benutzer", + "feishu": "{bindingCount} Bindungen, {pairedCount} gekoppelte Benutzer", + "hooksOn": "Ein", + "hooksOff": "Aus", + "qqbot": "{bindingCount} Bindungen, {pairedCount} gekoppelte Benutzer", + "discord": "{bindingCount} Bindungen, {pairedCount} gekoppelte Kanäle", + "weixinIlink": "{bindingCount} Bindungen, {accountCount} Konten, {connectedCount} verbunden" + }, + "bindingKinds": { + "dm": "Direktchat", + "group": "Gruppe", + "topic": "Thema" + }, + "qqbot": { + "title": "QQBot", + "description": "QQ-Roboterplattform-Bot anbinden, unterstützt Einzelchat und autorisierte Gruppenchats mit Bot-Erwähnung.", + "appId": "App-ID", + "appIdPlaceholder": "QQBot-App-ID", + "clientSecret": "Client Secret", + "clientSecretPlaceholder": "QQBot Client Secret", + "remoteControlDescription": "Offizielle QQ user_openid für Einzelchats und member_openid für Gruppen gehören nicht zum selben Identitätsraum. Daher werden Benutzer per Einzelchat gekoppelt, Gruppen müssen separat in der Gruppe mit /pair autorisiert werden.", + "pairedUserIds": "Gekoppelte Benutzer-OpenID", + "pairedUserIdsPlaceholder": "Z. B. user_openid_xxx, user_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Offiziellen WeChat iLink Bot per QR-Scan anbinden und Fernsteuerungssitzungen über den integrierten Adapter weiterleiten.", + "loginDescription": "Nach Klick auf die Schaltfläche unten öffnet DeepChat das offizielle WeChat-Anmeldefenster. Schließen Sie dort die iLink Bot-Autorisierung per QR-Scan ab. Erfolgreich verbundene Konten erscheinen automatisch in der Liste unten.", + "ownerOnlyNotice": "In der ersten Version darf nur der Kontoinhaber des QR-Logins DeepChat steuern.", + "connectButton": "Anmeldefenster öffnen", + "refreshQrCode": "Anmeldefenster erneut öffnen", + "loginDialogTitle": "WeChat iLink verbinden", + "loginDialogDescription": "Die offizielle WeChat-Anmeldeseite wird in einem separaten Fenster geöffnet. Bitte dort die QR-Autorisierung abschließen und diesen Dialog bis zum Verbindungsabschluss geöffnet lassen.", + "loginFailed": "WeChat iLink-Anmeldung fehlgeschlagen.", + "loginSuccessTitle": "WeChat iLink verbunden", + "loginSuccessDescription": "Konto {accountId} ist verfügbar.", + "accountsTitle": "Konten", + "accountsDescription": "Jedes verbundene iLink Bot-Konto läuft unabhängig und verwaltet eigene Bindungen und Laufzeitstatus.", + "noAccounts": "Noch keine WeChat iLink-Konten verbunden.", + "ownerUserId": "Besitzer-Benutzer-ID: {ownerUserId}", + "baseUrl": "Dienstadresse: {baseUrl}", + "accountBindings": "Bindungen: {count}", + "remoteControlDescription": "Gemeinsamen Standard-Agent für WeChat iLink-Konten festlegen und die von diesen Konten erzeugten Sitzungsbindungen verwalten.", + "removeAccount": "Konto entfernen", + "restartAccount": "Konto neu starten", + "statusSummary": "{accounts} Konten, {connected} verbunden, {bindings} Bindungen", + "qrcodeAlt": "WeChat iLink-QR-Code", + "loginWindowOpened": "Offizielles WeChat-Anmeldefenster wurde geöffnet. Bitte dort QR-Autorisierung abschließen.", + "loginSessionExpired": "Diese Anmeldesitzung ist abgelaufen. Bitte Anmeldefenster erneut öffnen und nochmals versuchen.", + "loginResponseIncomplete": "Antwort der WeChat iLink-Anmeldung war unvollständig. Bitte erneut versuchen.", + "loginTimedOut": "Zeitüberschreitung beim Warten auf WeChat iLink-Autorisierung. Bitte Anmeldefenster erneut öffnen und nochmals versuchen.", + "loginConnected": "WeChat iLink-Konto verbunden." + } + }, + "plugins": { + "title": "Plugins", + "officialOnly": "Aktivierungsstatus der in dieser DeepChat-Version integrierten offiziellen Plugins verwalten", + "refresh": "Aktualisieren", + "empty": "Keine offiziellen Plugins verfügbar", + "emptyTitle": "Keine integrierten Plugins", + "emptyDescription": "Auf dieser Plattform sind in dieser DeepChat-Version keine integrierten offiziellen Plugins verfügbar.", + "loadFailed": "Plugins konnten nicht geladen werden", + "actionFailed": "Plugin-Aktion fehlgeschlagen", + "install": "Installieren", + "installFromFile": ".dcplugin auswählen", + "openRelease": "GitHub Release", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "openSettings": "Einstellungen", + "runtime": "Runtime", + "version": "Version", + "command": "Befehl", + "status": { + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "available": "Verfügbar" + }, + "runtimeStates": { + "missing": "Nicht installiert", + "installed": "Installiert", + "running": "Läuft", + "error": "Fehler" + } + }, + "controlCenter": { + "groups": { + "overview": "Übersicht", + "setup": "Grundlagen", + "models": "Agent-Einstellungen", + "tools": "Fähigkeitserweiterungen", + "knowledge": "Kontext-Engineering", + "system": "System" + }, + "overview": { + "title": "Settings Overview", + "description": "Status von Anbietern, MCP, Agent, Daten und Nutzung zentral anzeigen.", + "searchPlaceholder": "Einstellungen, Anbieter, Modelle, Agent, MCP suchen...", + "providers": "Providers", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agents", + "data": "Letzte Sicherung", + "enabledCount": "{count} aktiviert", + "runningCount": "{count} laufen", + "enabledAgentCount": "{count} Agent aktiviert", + "providersDescription": "Verbindungsstatus der Anbieter", + "deepchatAgentsDescription": "Einstieg zur Agent-Konfiguration", + "mcpOn": "MCP aktiviert", + "mcpOff": "MCP deaktiviert", + "syncOn": "Synchronisierung aktiviert", + "syncOff": "Synchronisierung nicht aktiviert", + "backupNever": "Noch nie gesichert" + }, + "quickStart": { + "title": "Quick start", + "addApiKey": "API Key hinzufügen", + "addApiKeyDesc": "Anbieterverbindung konfigurieren", + "enableModel": "Modell aktivieren", + "enableModelDesc": "Verfügbares Modell aktivieren", + "startMcp": "MCP Server starten", + "startMcpDesc": "Tool-Dienst starten", + "backupNow": "Jetzt sichern", + "backupNowDesc": "Daten sofort sichern" + }, + "needsAttention": { + "title": "Needs attention", + "empty": "Aktuell keine Elemente, die bearbeitet werden müssen", + "noModels": "Noch keine Modelle aktiviert", + "privacyOff": "Privatsphärenmodus ist nicht aktiviert", + "backupNever": "Daten wurden noch nie gesichert" + }, + "activity": { + "title": "Letzte Einstellungsänderungen", + "description": "Zeigt nur die letzten 200 Einstellungsänderungen; die Datenbank behält die letzten 2000 Einträge.", + "when": "Zeit", + "category": "Typ", + "change": "Änderung", + "empty": "Keine Änderungsaufzeichnungen", + "emptyDescription": "Erfolgreiche Einstellungsänderungen erscheinen hier.", + "settingUpdated": "Einstellung aktualisiert: {key}", + "providerUpdated": "Anbieter aktualisiert: {name}", + "providerCreated": "Anbieter hinzugefügt: {name}", + "providerRemoved": "Anbieter entfernt: {name}", + "providerModelsRefreshed": "Anbietermodelle aktualisiert: {name}", + "modelStatusChanged": "Modellstatus aktualisiert: {model}", + "modelBatchUpdated": "{count} Modelle stapelweise aktualisiert", + "mcpServerCreated": "MCP Server hinzugefügt: {name}", + "mcpServerUpdated": "MCP Server aktualisiert: {name}", + "mcpServerRemoved": "MCP Server entfernt: {name}", + "mcpServerStatusChanged": "MCP Server umgeschaltet: {name}", + "mcpGlobalStatusChanged": "Globalen MCP-Status umgeschaltet: {status}", + "mcpServerStarted": "MCP Server gestartet: {name}", + "mcpServerStopped": "MCP Server gestoppt: {name}", + "mcpRegistryRefreshed": "MCP NPM registry aktualisiert", + "backupCreated": "Backup erstellt: {name}", + "backupImported": "Backup importiert: {name}", + "databaseRepaired": "Datenbankreparatur abgeschlossen: {status}" + } + } +} diff --git a/src/renderer/src/i18n/de-DE/sync.json b/src/renderer/src/i18n/de-DE/sync.json new file mode 100644 index 000000000..d4a9f5649 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "{count} Chats erfolgreich importiert" + }, + "error": { + "notEnabled": "Synchronisierung ist nicht aktiviert", + "folderNotExists": "Synchronisierungsordner existiert nicht", + "noValidBackup": "Im Synchronisierungsordner wurde kein gültiges Backup gefunden", + "unsupportedBackupVersion": "Dieses Backup wurde von einer neueren DeepChat-Version erstellt und kann von der aktuellen Version nicht importiert werden", + "dbNotExists": "Datenbankdatei existiert nicht", + "configNotExists": "Konfigurationsdatei existiert nicht", + "tempDbFailed": "Temporäre Datenbank-Backupdatei konnte nicht erstellt werden", + "tempConfigFailed": "Temporäre Konfigurations-Backupdatei konnte nicht erstellt werden", + "importFailed": "Import fehlgeschlagen, ursprüngliche Daten wurden wiederhergestellt", + "importProcess": "Fehler während des Imports", + "unknown": "Unbekannter Fehler", + "encryptedBackupPasswordMissing": "Dieses Backup ist verschlüsselt, aber der lokale Datenbankschlüssel ist nicht verfügbar. Entsperren Sie zuerst die verschlüsselte Datenbank und importieren Sie dann erneut.", + "overwriteEncryptionMismatch": "Beim überschreibenden Import müssen Backup und aktuelle Datenbank denselben Verschlüsselungsstatus haben." + } +} diff --git a/src/renderer/src/i18n/de-DE/thread.json b/src/renderer/src/i18n/de-DE/thread.json new file mode 100644 index 000000000..9c10b89fc --- /dev/null +++ b/src/renderer/src/i18n/de-DE/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Umbenennen", + "delete": "Löschen", + "cleanMessages": "Nachrichten leeren", + "pin": "Anheften", + "unpin": "Lösen", + "export": "Exportieren", + "exportText": "Nur Text", + "exportNowledgeMem": "Nowledge-mem" + }, + "export": { + "failed": "Export fehlgeschlagen", + "failedDesc": "Beim Export ist ein Fehler aufgetreten. Bitte erneut versuchen", + "nowledgeMemSubmitFailed": "Übermittlung an Nowledge-mem fehlgeschlagen", + "nowledgeMemSubmitFailedDesc": "Chat konnte nicht an nowledge-mem übermittelt werden", + "nowledgeMemSubmitPrompt": "Aktuellen Chat wirklich nach nowledge-mem exportieren?", + "nowledgeMemSubmitSuccess": "Erfolgreich an Nowledge-mem übermittelt", + "nowledgeMemSubmitSuccessDesc": "Chat erfolgreich an Nowledge-mem übermittelt", + "nowledgeMemSuccessDesc": "Chat erfolgreich im Nowledge-mem-Format exportiert", + "success": "Export erfolgreich", + "nowledgeMemSuccess": "Erfolgreich nach Nowledge-mem exportiert ", + "successDesc": "Chat erfolgreich exportiert" + }, + "message": { + "toolbar": { + "save": "Speichern" + } + }, + "toolbar": { + "save": "Speichern", + "cancel": "Abbrechen", + "previousVariant": "Zur vorherigen Version wechseln", + "nextVariant": "Zur nächsten Version wechseln", + "copy": "Antwort als Markdown kopieren", + "copyImage": "Als Bild kopieren", + "copyImageWithLongPress": "Als Bild kopieren (lang drücken, um von oben zu erfassen)", + "copyFromTopSuccess": "Vollständiges Chatbild kopiert", + "capturing": "Screenshot wird erstellt...", + "retry": "Neu generieren", + "fork": "In neuen Chat verzweigen", + "edit": "Nachricht bearbeiten", + "delete": "Nachricht löschen", + "trace": "Anfrageparameter anzeigen" + } +} diff --git a/src/renderer/src/i18n/de-DE/toolCall.json b/src/renderer/src/i18n/de-DE/toolCall.json new file mode 100644 index 000000000..4f0343322 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Wird aufgerufen", + "response": "Wird ausgeführt", + "end": "Abgeschlossen", + "error": "Fehler", + "title": "Tool-Aufruf", + "clickToView": "Zum Anzeigen der Details klicken", + "functionName": "Funktionsname", + "permission": "Berechtigung wird angefragt", + "params": "Funktionsparameter", + "responseData": "Funktionsantwort", + "imagePreview": "Bildvorschau", + "imagePreviewCount": "Keine Bildvorschau | {count} Bildvorschau | {count} Bildvorschauen", + "terminalOutput": "Terminalausgabe", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "{count} Ersetzungen abgeschlossen", + "fileOperation": "Dateivorgang", + "fileRead": "Datei lesen", + "fileWrite": "Datei schreiben", + "filePath": "Dateipfad", + "success": "Erfolgreich", + "failed": "Fehlgeschlagen" +} diff --git a/src/renderer/src/i18n/de-DE/traceDialog.json b/src/renderer/src/i18n/de-DE/traceDialog.json new file mode 100644 index 000000000..f863240f2 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Vorschau der Anfrageparameter", + "provider": "Anbieter", + "model": "Modell", + "endpoint": "API Endpoint", + "headers": "Anfrage-Header", + "body": "Anfrage-Body", + "copyJson": "JSON kopieren", + "copySuccess": "In die Zwischenablage kopiert", + "close": "Schließen", + "loading": "Wird geladen...", + "error": "Laden fehlgeschlagen", + "errorDesc": "Vorschauinformationen konnten nicht abgerufen werden. Bitte erneut versuchen", + "notImplemented": "Noch nicht unterstützt", + "notImplementedDesc": "Für diesen Anbieter ist die Vorschau noch nicht verfügbar", + "mayNotMatch": "Hinweis: Diese Vorschau wird aus den aktuellen Sitzungseinstellungen rekonstruiert und stimmt möglicherweise nicht vollständig mit den tatsächlich gesendeten Parametern überein" +} diff --git a/src/renderer/src/i18n/de-DE/update.json b/src/renderer/src/i18n/de-DE/update.json new file mode 100644 index 000000000..d2186fa36 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "Neue Version gefunden", + "version": "Version", + "releaseDate": "Veröffentlichungsdatum", + "releaseNotes": "Änderungen", + "later": "Später", + "githubDownload": "GitHub-Download", + "officialDownload": "Offizieller Download", + "checkUpdate": "Nach Updates suchen", + "downloading": "Wird heruntergeladen", + "installNow": "Jetzt installieren", + "installUpdate": "Update installieren", + "versionAvailable": "{version} verfügbar", + "autoUpdateFailed": "Automatisches Update fehlgeschlagen. Bitte verwenden Sie die manuellen Download-Links unten.", + "topbarButton": "Update", + "autoUpdate": "Automatisches Update", + "restarting": "Wird neu gestartet", + "alreadyUpToDate": "Bereits aktuell", + "alreadyUpToDateDesc": "Ihr DeepChat ist bereits auf dem neuesten Stand. Kein Update erforderlich." +} diff --git a/src/renderer/src/i18n/de-DE/welcome.json b/src/renderer/src/i18n/de-DE/welcome.json new file mode 100644 index 000000000..1bf336d99 --- /dev/null +++ b/src/renderer/src/i18n/de-DE/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "Willkommen", + "description": "Richten wir DeepChat ein" + }, + "provider": { + "title": "Modellanbieter", + "description": "Wählen Sie Ihren bevorzugten Modellanbieter" + }, + "configuration": { + "title": "Modellkonfiguration", + "description": "Konfigurieren Sie das Modell, das Sie verwenden möchten" + }, + "complete": { + "title": "Fertig", + "description": "Alles bereit. Sie können loslegen!" + } + }, + "title": "Willkommen bei DeepChat", + "description": "Lassen Sie uns die Einrichtung gemeinsam abschließen", + "provider": { + "select": "Anbieter auswählen", + "apiUrl": "API-Adresse", + "apiKey": "API Key", + "verifyLink": "Link prüfen" + }, + "complete": { + "title": "Alles erledigt!", + "description": "Die Einrichtung ist abgeschlossen. Los geht's!" + }, + "buttons": { + "getStarted": "Loslegen", + "next": "Weiter", + "back": "Zurück" + }, + "page": { + "title": "Willkommen bei DeepChat Agent", + "description": "Verbinden Sie einen Modellanbieter, um zu starten", + "guide": { + "title": "Einrichtungsfortschritt", + "description": "Aktueller Schritt: {step}", + "or": "oder", + "coreProgress": "Fortschritt der Grundeinrichtung", + "optional": "Optionaler nächster Schritt", + "actions": { + "continueSetup": "Einrichtung fortsetzen", + "goToChat": "Zum Chat" + }, + "steps": { + "provider": "Anbieter", + "first-chat": "Erster Chat", + "switch-model": "Modell wechseln", + "mcp": "MCP", + "skills": "Skills", + "plugins": "Plugins" + } + }, + "browseProviders": "Alle Anbieter durchsuchen...", + "connectAgent": "Oder einen Agent verbinden", + "acpTitle": "ACP Agent einrichten", + "acpDescription": "Claude Code, Codex, Kimi oder Ihr eigener Agent", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "DeepSeek", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "OpenRouter" + }, + "importProviders": "Aus anderen Agents importieren" + }, + "agentPage": { + "title": "Agent auswählen und loslegen", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "DeepChat Agent verwalten" + } +} diff --git a/src/renderer/src/i18n/es-ES/about.json b/src/renderer/src/i18n/es-ES/about.json new file mode 100644 index 000000000..608dffd35 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat es un cliente de IA multiplataforma pensado para que más personas puedan usar la IA con facilidad.", + "website": "Visitar nuestro sitio web", + "disclaimerButton": "Aviso legal", + "feedbackButton": "Enviar comentarios", + "disclaimerTitle": "Declaración de condiciones de uso", + "checkUpdateButton": "Buscar actualizaciones", + "mockUpdateButton": "Simular actualización descargada", + "clearMockUpdateButton": "Borrar actualización simulada", + "mockOnboardingButton": "Simular guía inicial", + "updateChannel": "Canal de actualización", + "stableChannel": "Estable", + "betaChannel": "Beta", + "deviceInfo": { + "title": "Información del dispositivo", + "platform": "Plataforma", + "arch": "Arquitectura", + "cpuModel": "Modelo de procesador", + "totalMemory": "Memoria total", + "osVersion": "Versión del sistema" + } +} diff --git a/src/renderer/src/i18n/es-ES/artifacts.json b/src/renderer/src/i18n/es-ES/artifacts.json new file mode 100644 index 000000000..ac57b9bd1 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Haz clic para abrir", + "codeSnippet": "Fragmento de código", + "function": "Función", + "class": "Clase", + "reactComponent": "Componente React", + "moduleImport": "Importación de módulo", + "variableDefinition": "Definición de variable {name}", + "markdownDocument": "Documento Markdown", + "htmlDocument": "Documento HTML", + "svgImage": "Imagen SVG", + "flowchart": "Diagrama de flujo", + "sequenceDiagram": "Diagrama de secuencia", + "classDiagram": "Diagrama de clases", + "stateDiagram": "Diagrama de estado", + "erDiagram": "Diagrama ER", + "ganttChart": "Diagrama de Gantt", + "pieChart": "Gráfico circular", + "mermaidDiagram": "Diagrama Mermaid", + "flowchartOf": "Diagrama de flujo de {name}", + "sequenceDiagramBetween": "Diagrama de secuencia entre {participants}", + "classDiagramOf": "Diagrama de clases de {name}", + "stateDiagramOf": "Diagrama de estado de {name}", + "erDiagramOf": "Diagrama ER de {name}", + "pieChartOf": "Gráfico circular de {name}", + "unknownDocument": "Documento desconocido", + "preview": "Vista previa", + "code": "Código", + "export": "Exportar", + "htmlPreviewTitle": "Vista previa HTML", + "svgPreviewTitle": "Vista previa SVG", + "copy": "Copiar", + "copyAsImage": "Copiar como imagen", + "copyImageSuccessDesc": "Imagen copiada al portapapeles", + "copyImageFailedDesc": "No se pudo copiar la imagen al portapapeles.", + "copySuccess": "Copiado", + "copySuccessDesc": "Contenido copiado al portapapeles", + "copyFailed": "Copia fallida", + "copyFailedDesc": "No se pudo copiar el contenido al portapapeles", + "desktop": "Escritorio", + "tablet": "Tableta", + "mobile": "Móvil", + "responsive": "Responsive", + "width": "Ancho", + "height": "Alto", + "sanitizingSvg": "Depurando contenido SVG...", + "svgSanitizationFailed": "El contenido SVG no superó la validación de seguridad", + "noSvgContent": "No hay contenido SVG disponible", + "mermaid": { + "renderError": "Error de renderizado: {message}" + } +} diff --git a/src/renderer/src/i18n/es-ES/chat.json b/src/renderer/src/i18n/es-ES/chat.json new file mode 100644 index 000000000..449d42bd8 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "Envía un mensaje a DeepChat, {'@'} para mencionar archivos, / para comandos", + "fileArea": "Área de archivos", + "inputArea": "Área de entrada", + "functionSwitch": "Selector de funciones", + "attach": "Adjuntar", + "voiceInput": "Grabación local", + "voiceInputStop": "Detener grabación local", + "voiceRecognitionUnsupportedTitle": "La grabación local no está disponible aquí", + "voiceRecognitionUnsupportedDescription": "Usa esta función en un navegador o entorno de escritorio que admita grabación con micrófono.", + "voiceRecognitionPermissionDeniedTitle": "No se puede acceder al micrófono", + "voiceRecognitionPermissionDeniedDescription": "Permite que DeepChat use el micrófono e inténtalo de nuevo.", + "voiceRecognitionErrorTitle": "La transcripción de audio ha fallado", + "voiceRecognitionErrorDescription": "No se ha podido completar la transcripción de audio. Inténtalo de nuevo más tarde.", + "send": "Enviar", + "steer": "Guiar", + "queue": "Encolar", + "stop": "Detener", + "fileSelect": "Seleccionar archivo", + "pasteFiles": "Pegar archivos desde el portapapeles", + "dropFiles": "Suelta los archivos aquí", + "promptFilesAdded": "Archivos de prompt añadidos", + "promptFilesAddedDesc": "Se han añadido {count} archivos", + "promptFilesError": "Error de procesamiento de archivos", + "promptFilesErrorDesc": "No se han podido procesar {count} archivos", + "historyPlaceholder": "(Pulsa Tab para autocompletar)", + "rateLimitQueue": "Cola {count}", + "rateLimitWait": "Espera {seconds}s", + "rateLimitQueueTooltip": "{count} peticiones en cola, intervalo de {interval}s", + "rateLimitReadyTooltip": "Listo para enviar, intervalo de {interval}s", + "rateLimitWaitingTooltip": "Espera {seconds}s más, intervalo de {interval}s", + "acpWorkdir": "Directorio de trabajo ACP", + "acpWorkdirTooltip": "Configurar el directorio de trabajo ACP", + "acpWorkdirSelect": "Selecciona una carpeta para usarla como directorio de trabajo ACP", + "acpWorkdirCurrent": "Directorio de trabajo actual: {path}", + "acpMode": "Modo", + "acpModeTooltip": "Modo actual: {mode}", + "agentWorkspaceTooltip": "Configurar el directorio de trabajo del Agent", + "agentWorkspaceSelect": "Selecciona una carpeta para usarla como espacio de trabajo", + "agentWorkspaceCurrent": "Espacio de trabajo actual: {path}", + "workspaceUnavailableTooltip": "El directorio no existe o no se puede acceder a él: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "MCP activado", + "empty": "No hay servicios activados", + "openSettings": "Abrir ajustes de MCP" + }, + "tools": { + "badge": "Herramientas", + "title": "Herramientas", + "mcpSection": "MCP", + "pluginSection": "Plugins", + "builtinSection": "Herramientas integradas", + "loading": "Cargando herramientas...", + "builtinEmpty": "No hay herramientas integradas disponibles", + "groups": { + "agentFilesystem": "Sistema de archivos del Agent", + "agentCore": "Núcleo del Agent", + "agentImageGeneration": "Generación de imágenes", + "agentSkills": "Agent Skills", + "deepchatSettings": "Ajustes de DeepChat", + "yobrowser": "YoBrowser" + } + }, + "fileUploadFailed": "No se ha podido adjuntar", + "fileUploadFailedDesc": "No se han podido procesar {count} archivos: {names}", + "fileUploadFailedMore": " y {count} más", + "unnamedFile": "archivo sin nombre", + "audioInputUnsupportedTitle": "El modelo actual no admite adjuntos de audio", + "audioInputUnsupportedDescription": "El modelo {model} no admite entrada de audio. Se han ignorado {count} adjuntos de audio." + }, + "pendingInput": { + "steer": "Guiar", + "queueCount": "En cola {count}/{max}", + "resumeQueue": "Reanudar envío", + "toSteer": "Convertir en guía", + "locked": "Bloqueado", + "reorder": "Reordenar", + "files": "{count} archivos", + "attachmentsOnly": "{count} adjuntos", + "empty": "Mensaje vacío", + "limitReached": "La zona de espera está llena (máx. {max})." + }, + "features": { + "webSearch": "Búsqueda web", + "thoughtForSeconds": "Ha pensado durante {seconds}s", + "thoughtForSecondsLoading": "Pensando durante {seconds}s...", + "artifactThinking": "Razonamiento de Artifact", + "modeChanged": "Modo cambiado a: {mode}" + }, + "search": { + "results": "Se encontraron {0} páginas web", + "searching": "Buscando...", + "title": "Resultados de la búsqueda", + "description": "Se han encontrado {0} resultados relacionados", + "optimizing": "Extrayendo la intención de búsqueda...", + "reading": "Buscando y leyendo páginas web...", + "error": "La búsqueda ha fallado" + }, + "messages": { + "thinking": "Pensando...", + "rateLimitWaiting": "Límite de frecuencia alcanzado; esperando en cola...", + "rateLimitCompactLoading": "Límite de frecuencia durante {seconds}s...", + "rateLimitTitle": "Límite de frecuencia activo", + "rateLimitQueue": "Posición en la cola", + "rateLimitEstimated": "Espera estimada", + "rateLimitQuickSettings": "Ajustar límite", + "rateLimitSwitchProvider": "Cambiar de proveedor", + "rateLimitImmediately": "Ahora", + "rateLimitSeconds": "s", + "rateLimitMinutes": "m" + }, + "compaction": { + "compacting": "Compactando el contexto...", + "compacted": "El contexto se ha compactado", + "commandDescription": "Compactar el contexto de la conversación", + "noopTitle": "Sin contexto para compactar", + "noopDescription": "Aún no hay historial de conversación nuevo que compactar.", + "failedTitle": "La compactación ha fallado" + }, + "rateLimit": { + "queueTooltip": "{count} peticiones en cola, intervalo de {interval}s", + "readyTooltip": "Listo para enviar, intervalo de {interval}s", + "waitingTooltip": "Espera {seconds}s más, intervalo de {interval}s" + }, + "notify": { + "generationComplete": "Generación completada", + "generationError": "La generación ha fallado" + }, + "toolCall": { + "title": "Llamada a herramienta", + "calling": "Llamada a herramienta en curso", + "response": "Respuesta de la herramienta", + "end": "Llamada a herramienta finalizada", + "error": "Error en la llamada a herramienta", + "clickToView": "Haz clic para ver los detalles", + "functionName": "Función", + "params": "Parámetros", + "responseData": "Datos de respuesta", + "subagents": { + "summary": "{mode} · {count} subagents", + "unnamedTask": "Tarea sin nombre", + "mode": { + "parallel": "Paralelo", + "chain": "Cadena" + }, + "status": { + "queued": "En cola", + "running": "En ejecución", + "completed": "Completado", + "error": "Error", + "cancelled": "Cancelado", + "waiting_permission": "Esperando permiso", + "waiting_question": "Esperando entrada" + } + } + }, + "mode": { + "current": "Modo actual: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Volver a la sesión principal", + "share": "Compartir", + "more": "Más" + }, + "subagents": { + "label": "Subagents" + }, + "advancedSettings": { + "button": "Avanzado", + "title": "Configuración avanzada", + "closeHint": "Esc para cerrar", + "systemPrompt": "Prompt del sistema", + "systemPromptPlaceholder": "Seleccionar preajuste", + "temperature": "Temperatura", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 fija la temperatura en {enabled} cuando el razonamiento está activado y en {disabled} cuando está desactivado.", + "contextLength": "Longitud del contexto", + "maxTokens": "Tokens máximos", + "thinkingBudget": "Presupuesto de razonamiento", + "verbosity": "Nivel de detalle", + "forceInterleavedThinkingCompat": "Interleaved Thinking", + "forceInterleavedThinkingCompatDescription": "Controla si esta sesión gestiona los mensajes de reasoning y tool-call con Interleaved Thinking.", + "verbosityPlaceholder": "Seleccionar nivel de detalle", + "currentCustomPrompt": "Personalizado actual", + "useDefault": "Usar valor predeterminado", + "decreaseValue": "Disminuir {label}", + "increaseValue": "Aumentar {label}", + "toggleValue": "Cambiar {label}", + "validation": { + "finiteNumber": "Debe ser un número finito", + "nonNegativeInteger": "Debe ser un número entero no negativo", + "contextLengthAtLeastMaxTokens": "Debe ser mayor o igual que Tokens máximos", + "maxTokensWithinContextLength": "Debe ser menor o igual que la longitud del contexto" + } + }, + "modelPicker": { + "empty": "No se han encontrado modelos", + "audioInputSupported": "Admite entrada de audio" + }, + "audio": { + "play": "Reproducir", + "pause": "Pausar" + }, + "call": { + "title": "Llamada de Voice.ai", + "description": "Haz clic para conectar con el Agent de voz de Voice.ai. Cuando se conecte la llamada, empieza a hablar.", + "start": "Iniciar llamada de voz", + "stop": "Finalizar llamada", + "end": "Colgar" + }, + "skills": { + "indicator": { + "active": "{count} Skills fijadas", + "none": "No hay Skills fijadas" + }, + "panel": { + "title": "Skills fijadas", + "manage": "Gestionar", + "empty": "No hay Skills instaladas" + } + }, + "workspace": { + "title": "Espacio de trabajo", + "collapse": "Contraer", + "sections": { + "files": "Archivos", + "git": "Git", + "artifacts": "Artifacts", + "subagents": "Subagents" + }, + "plan": { + "section": "Plan", + "empty": "Aún no hay tareas", + "itemAriaLabel": "{status}: {step}", + "status": { + "pending": "Pendiente", + "in_progress": "En curso", + "completed": "Completado", + "failed": "Fallido", + "skipped": "Omitido" + } + }, + "files": { + "section": "Archivos", + "empty": "Sin archivos", + "loading": "Cargando archivos...", + "noWorkspace": { + "title": "Sin espacio de trabajo", + "description": "Selecciona o arrastra una carpeta para configurar el espacio de trabajo", + "button": "Seleccionar carpeta" + }, + "contextMenu": { + "openFile": "Abrir archivo", + "revealInFolder": "Mostrar en el administrador de archivos", + "insertPath": "Insertar en el campo de entrada" + } + }, + "git": { + "empty": "No hay diff disponible", + "clean": "Árbol de trabajo limpio", + "staged": "Preparado", + "unstaged": "Sin preparar" + }, + "subagents": { + "empty": "Aún no hay sesiones secundarias", + "self": "Agent actual", + "status": { + "working": "En ejecución", + "error": "Error", + "idle": "Inactivo" + } + }, + "browser": { + "section": "Navegador", + "empty": "Aún no hay pestañas" + }, + "terminal": { + "section": "Terminal", + "empty": "Aún no hay salida", + "contextMenu": { + "terminate": "Finalizar comando", + "delete": "Eliminar registro", + "expand": "Expandir", + "collapse": "Contraer" + }, + "output": { + "truncated": "[truncado]" + }, + "noOutput": "Sin salida", + "status": { + "running": "En ejecución", + "completed": "Éxito", + "failed": "Fallido", + "timed_out": "Tiempo agotado", + "aborted": "Abortado" + } + } + }, + "newThread": { + "title": "Construir y explorar" + }, + "floatingWidget": { + "title": "Resumen de tareas", + "collapse": "Contraer lista flotante de sesiones", + "empty": "Aún no hay sesiones de Agent", + "executing": "en curso", + "sessionCount": "{count} sesiones", + "untitled": "Nuevo chat", + "status": { + "inProgress": "En curso", + "done": "Completado", + "error": "Error" + } + }, + "permissionMode": { + "default": "Permisos predeterminados", + "fullAccess": "Acceso completo" + }, + "sidebar": { + "allAgents": "Todos los Agents", + "expandSidebar": "Expandir barra lateral", + "collapseSidebar": "Contraer barra lateral", + "remoteControlDisabled": "Desactivado", + "remoteControlStatus": { + "disabled": "Control remoto desactivado", + "stopped": "Control remoto detenido", + "starting": "Iniciando control remoto", + "running": "Control remoto en ejecución", + "backoff": "Reintentando control remoto", + "error": "Error de control remoto" + }, + "groupByDate": "Agrupar por fecha", + "groupByProject": "Agrupar por proyecto", + "pinned": "Fijado", + "emptyTitle": "Aún no hay conversaciones", + "emptyDescription": "Inicia un nuevo chat para empezar", + "searchPlaceholder": "Buscar chats", + "searchAriaLabel": "Buscar chats", + "searchEmptyTitle": "No hay conversaciones coincidentes", + "searchEmptyDescription": "Prueba con otra palabra clave del título" + }, + "spotlight": { + "placeholder": "Buscar chats, Agents, ajustes y acciones…", + "searching": "Buscando…", + "emptyTitle": "No hay resultados coincidentes", + "emptyDescription": "Prueba con otra palabra clave o abre una sesión reciente.", + "hints": "↑↓ seleccionar · Enter abrir · Esc cerrar · Inicio/Fin saltar", + "kind": { + "session": "Sesión", + "message": "Mensaje", + "agent": "Agent", + "setting": "Ajuste", + "action": "Acción" + } + }, + "inlineSearch": { + "placeholder": "Buscar en conversación", + "ariaLabel": "Buscar en la conversación actual", + "previous": "Coincidencia anterior", + "next": "Coincidencia siguiente", + "close": "Cerrar búsqueda" + }, + "onboarding": { + "agentSwitch": { + "title": "Cambiar a DeepChat Agent", + "description": "Antes de chatear, vuelve de ACP Agent al flujo de conversación de DeepChat.", + "caption": "Haz clic en el botón de Agent resaltado en la barra lateral para continuar." + }, + "switchModel": { + "description": "Elige el modelo que quieres usar para tu primera conversación en DeepChat.", + "caption": "Usa el selector de modelo resaltado y elige cualquier modelo disponible." + }, + "firstChat": { + "description": "Todo está listo. Escribe aquí tu primer mensaje para completar la introducción.", + "caption": "El foco permanece en el cuadro de entrada hasta que envíes el primer mensaje." + } + } +} diff --git a/src/renderer/src/i18n/es-ES/common.json b/src/renderer/src/i18n/es-ES/common.json new file mode 100644 index 000000000..04e9c952b --- /dev/null +++ b/src/renderer/src/i18n/es-ES/common.json @@ -0,0 +1,128 @@ +{ + "loading": "Cargando...", + "copy": "Copiar", + "copied": "Copiado", + "paste": "Pegar", + "copySuccess": "Copia exitosa", + "copySuccessDesc": "Contenido copiado al portapapeles", + "copyImageSuccess": "Copia exitosa", + "copyImageSuccessDesc": "Imagen copiada al portapapeles", + "copyFailed": "Copia fallida", + "copyFailedDesc": "No se pudo copiar el contenido al portapapeles", + "copyCode": "Copiar código", + "export": "Exportar", + "newChat": "Nuevo chat", + "newTopic": "Nuevo tema", + "cancel": "Cancelar", + "confirm": "Confirmar", + "next": "Siguiente", + "back": "Atrás", + "enabled": "Habilitado", + "disabled": "Deshabilitado", + "disclaimer": "Aviso legal", + "close": "Cerrar", + "open": "Abrir", + "image": "Imagen", + "noContent": "Sin contenido", + "preview": "Vista previa", + "source": "Fuente", + "more": "Más", + "decrease": "Reducir", + "increase": "Aumentar", + "fontSmaller": "Reducir tamaño de fuente", + "fontReset": "Restablecer fuente", + "fontLarger": "Aumentar tamaño de fuente", + "zoomIn": "Acercar", + "zoomOut": "Alejar", + "resetZoom": "Restablecer zoom", + "error": { + "requestFailed": "La solicitud ha fallado...", + "createChatFailed": "No se pudo crear el chat", + "selectChatFailed": "No se pudo seleccionar el chat", + "renameChatFailed": "No se pudo cambiar el nombre del chat", + "deleteChatFailed": "No se pudo eliminar el chat", + "cleanMessagesFailed": "No se pudieron borrar los mensajes", + "userCanceledGeneration": "El usuario canceló la generación", + "sessionInterrupted": "La sesión se interrumpió de forma inesperada; la generación no se completó", + "noModelResponse": "El modelo no devolvió ningún contenido; puede que se haya agotado el tiempo de espera.", + "invalidJson": "Formato JSON no válido", + "maximumToolCallsReached": "Se alcanzó el máximo de llamadas a herramientas", + "causeOfError": "Posibles causas de error:", + "error400": "Solicitud incorrecta: puede haber un problema de parámetros o compatibilidad", + "error401": "Error de autenticación: puede que la API Key o el dominio sean incorrectos", + "error403": "Acceso al modelo denegado: puede que el saldo sea insuficiente o que no tengas permiso", + "error404": "URL solicitada no encontrada: puede que el dominio o el nombre del modelo sean incorrectos", + "error429": "Demasiadas solicitudes: puede que el servicio haya limitado la frecuencia", + "error500": "Error del servidor, el servicio puede ser inestable, inténtalo de nuevo más tarde", + "error502": "Error de gateway; el servicio puede estar inestable, inténtalo de nuevo más tarde", + "error503": "Servicio no disponible; el servicio puede estar inestable, inténtalo de nuevo más tarde", + "error504": "Tiempo de espera agotado en la solicitud; el servicio puede estar inestable o puede haber problemas de red. Comprueba la configuración del proxy e inténtalo de nuevo", + "operationFailed": "Operación fallida", + "invalidQuestionRequest": "Solicitud de pregunta no válida" + }, + "resetDataConfirmTitle": "¿Restablecer todos los datos?", + "resetDataConfirmDescription": "Esto restablecerá todos tus datos a la configuración predeterminada. Esta acción no se puede deshacer.", + "title": "Configuración general", + "resetData": "Restablecer datos", + "language": "Idioma", + "languageSelect": "Selecciona un idioma", + "searchEngine": "Motor de búsqueda", + "searchEngineSelect": "Selecciona un motor de búsqueda", + "searchPreview": "Vista previa de búsqueda", + "searchAssistantModel": "Modelo asistente", + "selectModel": "Selecciona un modelo", + "proxyMode": "Modo proxy", + "proxyModeSelect": "Selecciona el modo proxy", + "proxyModeSystem": "Proxy del sistema", + "proxyModeNone": "Sin proxy", + "proxyModeCustom": "Proxy personalizado", + "customProxyUrl": "URL de proxy personalizado", + "customProxyUrlPlaceholder": "Ejemplo: http://127.0.0.1:7890", + "invalidProxyUrl": "URL de proxy no válida; introduce una URL http/https válida", + "languageSystem": "Seguir el sistema", + "watermarkTip": "Generado por IA", + "collapse": "Contraer", + "expand": "Expandir", + "add": "Añadir", + "reset": "Restablecer", + "format": "Formatear", + "edit": "Editar", + "delete": "Eliminar", + "save": "Guardar", + "clear": "Borrar", + "saved": "Guardado", + "unknownError": "Error desconocido", + "testing": "Prueba en curso", + "saving": "Guardando", + "scrollLeft": "Desplazarse hacia la izquierda", + "scrollRight": "Desplazarse hacia la derecha", + "history": "Historial", + "minimize": "Minimizar", + "maximize": "Maximizar", + "restore": "Restaurar", + "browser": { + "back": "Atrás", + "forward": "Adelante", + "reload": "Recargar", + "addressLabel": "Barra de direcciones", + "addressPlaceholder": "Introduce una URL", + "enterUrlToStart": "Introduce una URL para empezar a navegar", + "enterUrlDescription": "Escribe una URL en la barra de direcciones superior para visitar un sitio web", + "name": "Yo Browser" + }, + "size": { + "bytes": "{count} bytes" + }, + "time": { + "today": "Hoy", + "yesterday": "Ayer", + "lastWeek": "Semana pasada", + "older": "Anteriores" + }, + "project": { + "select": "Seleccionar proyecto", + "none": "Sin proyecto", + "recent": "Proyectos recientes", + "openFolder": "Abrir carpeta..." + } +} diff --git a/src/renderer/src/i18n/es-ES/components.json b/src/renderer/src/i18n/es-ES/components.json new file mode 100644 index 000000000..2d81a2efb --- /dev/null +++ b/src/renderer/src/i18n/es-ES/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Buscar emojis", + "smileys": "Emoticonos y emociones", + "people": "Personas y cuerpo", + "animals": "Animales y naturaleza", + "food": "Comida y bebida", + "travel": "Viajes y lugares", + "activities": "Actividades", + "objects": "Objetos", + "symbols": "Símbolos", + "flags": "Banderas" + }, + "messageBlockAction": { + "continue": "Continuar", + "continued": "Continuado" + }, + "messageBlockPermissionRequest": { + "title": "Permiso requerido", + "allow": "Permitir", + "allowOnce": "Permitir una vez", + "allowForSession": "Permitir en la sesión", + "allowOnceTooltip": "Ejecuta este comando una vez sin guardar la decisión.", + "allowForSessionTooltip": "Recordar este comando solo en esta conversación.", + "deny": "Denegar", + "rememberChoice": "Recordar esta elección", + "granted": "Permiso concedido", + "denied": "Permiso denegado", + "riskLabel": "Riesgo", + "type": { + "read": "Acceso de lectura", + "write": "Acceso de escritura", + "all": "Acceso completo", + "command": "Ejecutar comando" + }, + "description": { + "read": "¿Permitir que '{toolName}' de '{serverName}' realice operaciones de lectura?", + "write": "¿Permitir que '{toolName}' de '{serverName}' realice operaciones de escritura?", + "all": "¿Permitir que '{toolName}' de '{serverName}' realice operaciones de lectura y escritura?", + "command": "Ejecutar comando: {command}", + "commandWithRisk": "Ejecutar comando: {command}\n\nNivel de riesgo: {riskLevel}\n\nSugerencia: {suggestion}" + }, + "riskLevel": { + "low": "Bajo", + "medium": "Medio", + "high": "Alto", + "critical": "Crítico" + }, + "suggestion": { + "low": "Este comando es de solo lectura y tiene un impacto mínimo.", + "medium": "Este comando puede cambiar el estado o instalar dependencias. Revísalo antes de ejecutarlo.", + "high": "Este comando modifica archivos o el estado del sistema. Procede con cuidado.", + "critical": "Este comando puede ser destructivo o acceder a redes externas. Verifica la intención." + } + }, + "promptParamsDialog": { + "title": "{name}: configuración de parámetros", + "description": "Rellena los parámetros siguientes. Los campos marcados con * son obligatorios.", + "required": "Este campo es obligatorio." + }, + "messageBlockQuestionRequest": { + "title": "Pregunta", + "send": "Enviar", + "reject": "Rechazar", + "selected": "Seleccionado", + "rejected": "Rechazado", + "customPlaceholder": "Escribe tu respuesta...", + "answerLabel": "Respuesta" + } +} diff --git a/src/renderer/src/i18n/es-ES/contextMenu.json b/src/renderer/src/i18n/es-ES/contextMenu.json new file mode 100644 index 000000000..265103683 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "Traducir", + "original": "Original", + "translated": "Traducción", + "error": "No se pudo traducir" + }, + "askAI": { + "title": "Preguntar a la IA", + "question": "Pregunta", + "answer": "Respuesta", + "error": "No se pudo obtener respuesta de la IA" + }, + "copy": "Copiar", + "paste": "Pegar", + "cut": "Cortar" +} diff --git a/src/renderer/src/i18n/es-ES/dialog.json b/src/renderer/src/i18n/es-ES/dialog.json new file mode 100644 index 000000000..334ff2611 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "Cancelar", + "confirm": "Confirmar", + "close": "Cerrar", + "ok": "OK", + "delete": { + "title": "¿Estás seguro de que deseas eliminar esta conversación?", + "description": "Esta acción no se puede deshacer.", + "confirm": "Eliminar" + }, + "rename": { + "title": "Cambiar el nombre de la conversación", + "description": "Introduce un nuevo nombre para la conversación." + }, + "cleanMessages": { + "title": "Borrar todos los mensajes", + "description": "Esto eliminará todos los mensajes y archivos de esta conversación. ¿Estás seguro de que quieres continuar?", + "confirm": "Borrar" + }, + "fork": { + "title": "Crear rama", + "description": "Esto copiará todos los mensajes desde el primer mensaje hasta el mensaje actual en una nueva conversación, donde podrás continuar el diálogo.", + "confirm": "Crear rama", + "tag": "Rama" + }, + "error": { + "title": "Error" + }, + "mutualExclusive": { + "title": { + "reasoning": "Confirmar activación del razonamiento", + "functionCall": "Confirmar activación de llamadas a funciones" + }, + "message": { + "reasoning": "Habilitar el razonamiento deshabilitará automáticamente las llamadas a funciones. Esta es una limitación de los modelos DeepSeek-V3.1; ambas funciones no pueden usarse a la vez. ¿Continuar?", + "functionCall": "Habilitar las llamadas a funciones deshabilitará automáticamente el razonamiento. Esta es una limitación de los modelos DeepSeek-V3.1; ambas funciones no pueden usarse a la vez. ¿Continuar?" + }, + "warningText": { + "reasoning": "Nota: habilitar el razonamiento deshabilitará automáticamente las llamadas a funciones; es un requisito de los modelos DeepSeek-V3.1.", + "functionCall": "Nota: habilitar las llamadas a funciones deshabilitará automáticamente el razonamiento; es un requisito de los modelos DeepSeek-V3.1." + }, + "confirmEnable": "Confirmar activación" + } +} diff --git a/src/renderer/src/i18n/es-ES/image.json b/src/renderer/src/i18n/es-ES/image.json new file mode 100644 index 000000000..e203cc8b5 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "La imagen no pudo cargarse", + "loading": "Cargando imagen...", + "preview": "Vista previa de la imagen", + "save": "Guardar imagen", + "saveAs": "Guardar imagen como...", + "saveSuccess": "Imagen guardada", + "saveFailed": "No se pudo guardar la imagen" +} diff --git a/src/renderer/src/i18n/es-ES/index.ts b/src/renderer/src/i18n/es-ES/index.ts new file mode 100644 index 000000000..962cbb128 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Individual top-level keys +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Qwen Model', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + 'DeepChat actúa únicamente como herramienta auxiliar: cuando el usuario inicia una búsqueda, organiza y resume los datos públicos devueltos por los motores de búsqueda para que los resultados sean más fáciles de consultar y comprender.\n\n1. **Uso de datos públicos** \nEste software solo procesa datos disponibles públicamente en sitios web de destino o motores de búsqueda, sin requerir inicio de sesión. Antes de usarlo, revisa y cumple las condiciones de servicio del sitio web o motor de búsqueda correspondiente para garantizar un uso legal y conforme. \n\n2. **Exactitud de la información y responsabilidad** \nEl contenido organizado y generado por este software es solo de referencia y no constituye asesoramiento legal, comercial ni de ningún otro tipo. Los desarrolladores no garantizan la exactitud, integridad, actualidad ni legalidad de los resultados de búsqueda; cualquier consecuencia derivada del uso de este software será responsabilidad exclusiva del usuario. \n\n3. **Exención de responsabilidad** \nEste software se proporciona "tal cual". Los desarrolladores no asumen ninguna garantía ni responsabilidad, expresa o implícita, sobre su rendimiento, estabilidad o idoneidad. Durante el uso de este software, los desarrolladores no asumirán responsabilidad por disputas, pérdidas o responsabilidades legales derivadas del incumplimiento de leyes, normas o reglas del sitio web de destino. \n\n4. **Responsabilidad del usuario** \nAntes de usar este software, el usuario debe comprender y confirmar que su uso no infringirá derechos de propiedad intelectual, secretos comerciales ni otros derechos legítimos de terceros. Cualquier disputa legal o consecuencia causada por un uso inadecuado del software será responsabilidad exclusiva del usuario. \n\nEl uso de este software implica que el usuario ha leído, comprendido y aceptado todos los términos de este aviso legal. Si tienes dudas, consulta con un asesor legal profesional.' +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/es-ES/mcp.json b/src/renderer/src/i18n/es-ES/mcp.json new file mode 100644 index 000000000..d88b69a14 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/mcp.json @@ -0,0 +1,307 @@ +{ + "title": "MCP Configuración", + "description": "Administrar y configurar servidores y herramientas MCP (Protocolo de contexto modelo)", + "enabledTitle": "Habilitar MCP", + "enabledDescription": "Cuando está habilitado, todos los servicios habilitados se inician automáticamente.", + "enableToAccess": "Habilite MCP para acceder a las opciones de configuración.", + "errors": { + "loadConfigFailed": "No se pudo cargar la configuración MCP", + "setEnabledFailed": "No se pudo establecer el estado habilitado de MCP", + "getServerStatusFailed": "No se pudo obtener el estado del servidor {serverName}", + "addServerFailed": "No se pudo agregar el servidor", + "updateServerFailed": "No se pudo actualizar el servidor", + "removeServerFailed": "No se pudo eliminar el servidor", + "maxDefaultServersReached": "Se alcanzó el número máximo de servidores predeterminados (30)", + "toggleDefaultServerFailed": "No se pudo alternar el estado del servidor predeterminado", + "resetToDefaultFailed": "No se pudo restablecer los servidores predeterminados", + "toggleServerFailed": "No se pudo alternar el servidor {serverName}", + "loadToolsFailed": "No se pudieron cargar las herramientas", + "loadPromptsFailed": "No se pudieron cargar los prompts", + "loadResourcesFailed": "No se pudieron cargar los recursos", + "callToolFailed": "No se pudo llamar a la herramienta {toolName}", + "toolCallError": "Error de llamada de herramienta: {error}", + "mcpDisabled": "MCP está deshabilitado", + "getPromptFailed": "No se pudo obtener el prompt", + "readResourceFailed": "No se pudo leer el recurso", + "promptNotFound": "No se ha encontrado el prompt '{name}'", + "emptyPromptContent": "El prompt '{name}' no tiene contenido", + "missingParameters": "Faltan parámetros requeridos: {params}", + "invalidParameters": "Parámetros no válidos para: {params}" + }, + "tabs": { + "servers": "Servidores", + "tools": "Herramientas" + }, + "serverList": "Lista de servidores", + "addServer": "Agregar servidor", + "running": "corriendo", + "stopped": "Detenido", + "stopServer": "detener el servidor", + "startServer": "Iniciar el servidor", + "noServersFound": "Servidor no encontrado", + "addServerDialog": { + "title": "Agregar servidor", + "description": "Configurar un nuevo servidor MCP" + }, + "editServerDialog": { + "title": "Editar servidor", + "description": "Editar la configuración del servidor MCP" + }, + "serverForm": { + "name": "Nombre del servidor", + "namePlaceholder": "Introduzca el nombre del servidor", + "nameRequired": "El nombre del servidor no puede estar vacío.", + "type": "Tipo de servidor", + "typePlaceholder": "Seleccione un tipo de servidor", + "typeStdio": "Entrada y salida estándar", + "typeSse": "Eventos enviados por el servidor (SSE)", + "typeInMemory": "Memoria", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Ingrese el servidor básico URL (por ejemplo: http://localhost:3000)", + "command": "Comando", + "commandPlaceholder": "Introduzca un comando", + "commandRequired": "El comando no puede estar vacío.", + "args": "Argumentos", + "argsPlaceholder": "Introduzca un argumento por línea", + "addArg": "Agregar argumento", + "argPlaceholder": "Introduzca el valor del argumento", + "argsRequired": "Los parámetros no pueden estar vacíos.", + "env": "Variables de entorno", + "envPlaceholder": "Ingrese las variables de entorno en formato JSON", + "envInvalid": "Las variables de entorno deben tener un formato JSON válido", + "description": "Descripción", + "descriptionPlaceholder": "Ingrese la descripción del servidor", + "descriptions": "Descripción", + "descriptionsPlaceholder": "Ingrese la descripción del servidor", + "icon": "Icono", + "iconPlaceholder": "Ingresar icono", + "icons": "Iconos", + "iconsPlaceholder": "Introducir iconos", + "autoApprove": "Aprobar automáticamente", + "autoApproveAll": "Todos", + "autoApproveRead": "leer", + "autoApproveWrite": "escribir", + "autoApproveHelp": "Seleccione el tipo de operación que requiere autorización automática y ejecútela sin confirmación del usuario", + "submit": "Enviar", + "add": "Añadir", + "update": "Actualizar", + "cancel": "Cancelar", + "jsonConfigIntro": "Puede pegar directamente la configuración JSON o elegir configurar el servidor manualmente.", + "jsonConfig": "Configuración JSON", + "jsonConfigPlaceholder": "Pegue la configuración del formato JSON del servidor MCP", + "jsonConfigExample": "Ejemplo de configuración JSON", + "parseSuccess": "Configuración analizada correctamente", + "configImported": "La importación de la configuración se realizó correctamente.", + "parseError": "error de análisis", + "skipToManual": "Saltar a configuración manual", + "parseAndContinue": "Analizar y continuar", + "folders": "Lista de carpetas", + "addFolder": "Agregar carpeta", + "selectFolder": "Seleccionar carpeta", + "selectFolderError": "No se pudo seleccionar la carpeta", + "noFoldersSelected": "No hay carpetas seleccionadas" + }, + "deleteServer": "Eliminar servidor", + "editServer": "Editar servidor", + "setDefault": "Establecer como predeterminado", + "removeDefault": "Eliminar valor predeterminado", + "isDefault": "Servidor predeterminado", + "default": "predeterminado", + "setAsDefault": "Establecer como servidor predeterminado", + "removeServer": "Quitar servidor", + "confirmRemoveServer": "¿Está seguro de que desea eliminar el servidor {name}? \nEsta operación no se puede cancelar.", + "removeServerDialog": { + "title": "Eliminar servidor" + }, + "confirmDelete": { + "title": "Confirmar eliminación", + "description": "¿Está seguro de que desea eliminar el servidor {name}? \nEsta operación no se puede cancelar.", + "confirm": "Eliminar", + "cancel": "Cancelar" + }, + "resetToDefault": "Restaurar el servicio predeterminado", + "resetConfirmTitle": "Restaurar el servicio predeterminado", + "resetConfirmDescription": "Esta acción restaura todos los servidores predeterminados y conserva sus servidores personalizados. \nSe perderán todas las modificaciones realizadas en el servidor predeterminado.", + "resetConfirm": "Restaurar", + "tools": { + "searchPlaceholder": "Herramientas de búsqueda...", + "noToolsAvailable": "No hay herramientas disponibles", + "selectToolToDebug": "Seleccione una herramienta para depurar", + "dialogDescription": "Herramientas de depuración y prueba proporcionadas por los servidores MCP", + "toolsCount": "{count} herramientas", + "availableTools": "Herramientas disponibles", + "toolList": "Lista de herramientas", + "functionDescription": "Descripción de la función", + "invalidJson": "Formato JSON no válido", + "inputHint": "Introduzca los parámetros en formato JSON", + "required": "Requerido", + "noDescription": "Sin descripción", + "input": "Argumentos", + "path": "Camino", + "pathPlaceholder": "Introduzca la ruta del archivo", + "searchPattern": "Patrón de búsqueda", + "searchPatternPlaceholder": "Introduzca la expresión regular", + "filePattern": "Patrón de archivo", + "filePatternPlaceholder": "Introduzca el patrón del archivo, por ejemplo: *.md", + "executeButton": "Ejecutar herramienta", + "resultTitle": "Resultado", + "runningTool": "Herramienta de ejecución...", + "loading": "Cargando...", + "error": "Error al cargar", + "available": "{count} disponible", + "none": "No hay herramientas disponibles", + "title": "MCP Herramientas", + "description": "Herramientas proporcionadas por el servidor MCP", + "loadError": "No se pudieron cargar las herramientas", + "parameters": "Parámetros", + "refresh": "Actualizar", + "disabled": "MCP está deshabilitado", + "enableToUse": "Habilite MCP para usar herramientas", + "enabled": "Habilitar MCP", + "enabledDescription": "Habilite la funcionalidad MCP para usar llamadas a herramientas", + "acpManagedHint": "Modo ACP: el acceso MCP se gestiona en los ajustes de ACP Agent (solo lectura aquí).", + "acpServersSelected": "{count} MCPs seleccionados", + "acpServersNone": "No hay servidores MCP configurados", + "jsonInputPlaceholder": "Ingrese los parámetros en formato JSON", + "type": "Tipo", + "annotations": "Anotaciones", + "empty": "vacio", + "invalidJsonFormat": "El formato JSON es incorrecto", + "allowedValues": "Valores permitidos", + "arrayItemValues": "Valores de elementos de matriz" + }, + "inmemory": { + "bochaSearch": { + "name": "Bocha Search", + "desc": "Bocha Search API https://open.bochaai.com/" + }, + "buildInFileSystem": { + "name": "Sistema de archivos", + "desc": "Permita que DeepChat interactúe con el sistema de archivos local." + }, + "Artifacts": { + "name": "Artefactos", + "desc": "Produzca artefactos más ricos en DeepChat" + }, + "braveSearch": { + "name": "Brave Search", + "desc": "Brave Search API https://brave.com/search/api/" + }, + "difyKnowledge": { + "name": "Dify Búsqueda en la base de conocimientos", + "desc": "Dify Servicio de búsqueda de la base de conocimientos, que puede recuperar contenido en la base de conocimientos Dify" + }, + "ragflowKnowledge": { + "name": "RAGFlow Búsqueda en la base de conocimientos", + "desc": "RAGFlow servicio de búsqueda de base de conocimientos, puede buscar contenido de la base de conocimientos RAGFlow" + }, + "fastGptKnowledge": { + "name": "FastGPT Búsqueda en la base de conocimientos", + "desc": "FastGPT servicio de búsqueda de base de conocimientos, puede buscar contenido de la base de conocimientos FastGPT" + }, + "builtinKnowledge": { + "name": "Búsqueda integrada en la base de conocimientos", + "desc": "Búsqueda en la base de conocimientos integrada de DeepChat para documentos y guías de DeepChat." + }, + "deepchat-inmemory/custom-prompts-server": { + "name": "Prompts personalizados", + "desc": "Servicio integrado de prompts personalizados de DeepChat" + }, + "deepchat-inmemory/deep-research-server": { + "name": "Investigación profunda", + "desc": "Investigación profunda incorporada en DeepChat impulsada por Bocha Search. Se recomiendan modelos de contexto largo." + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Prompts automáticos por plantilla", + "desc": "Selecciona automáticamente el prompt personalizado más adecuado según la entrada y rellena la plantilla de forma inteligente." + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Búsqueda del historial de conversaciones", + "desc": "Búsqueda del historial de conversaciones integrada de DeepChat para chats y mensajes pasados." + }, + "deepchat/apple-server": { + "name": "macOS Asistente del sistema", + "desc": "Permita que los modelos operen aplicaciones macOS como Calendario, Contactos, Correo, Mapas, Notas y Recordatorios." + } + }, + "prompts": { + "noPromptsAvailable": "No hay prompts disponibles", + "noDescription": "Aún no hay descripción", + "selectPrompt": "Aquí se mostrarán los detalles del prompt seleccionado.", + "parameters": "Parámetros", + "input": "Parámetros", + "runningPrompt": "Obteniendo prompt...", + "executeButton": "Obtener prompt", + "resultTitle": "Detalles del prompt", + "resetToDefault": "Restablecer los parámetros predeterminados", + "invalidJson": "Formato JSON no válido", + "parametersHint": "Ingrese los parámetros en formato JSON, admite formato automático", + "dialogDescription": "Depura y prueba los prompts proporcionados por servidores MCP" + }, + "resources": { + "noResourcesAvailable": "No hay recursos disponibles", + "selectResource": "Seleccione un recurso para ver su contenido.", + "loading": "Cargando...", + "loadContent": "Cargar contenido", + "pleaseSelect": "Haga clic para ver los detalles del recurso.", + "dialogDescription": "Explorar y ver recursos proporcionados por los servidores MCP" + }, + "market": { + "browseBuiltin": "Explorar el mercado MCP incorporado", + "builtinTitle": "MCP Mercado", + "poweredBy": "Desarrollado por MCPRouter", + "keyGuide": "Obtenga API Key", + "keyHelpText": "Por favor ve a", + "keyHelpEnd": "para solicitar un API Key y completarlo en el cuadro de entrada de arriba", + "apiKeyPlaceholder": "Introduzca MCPRouter API Key", + "apiKeyRequiredTitle": "API Key Requerido", + "apiKeyRequiredDesc": "Complete el MCPRouter API Key antes de la instalación.", + "install": "Instalar", + "installed": "Instalado", + "installSuccess": "Instalación exitosa", + "installFailed": "La instalación falló", + "noMore": "No más", + "empty": "Sin servicios", + "loadMore": "Cargar más", + "pullDownToLoad": "Continúe bajando para cargar más" + }, + "sampling": { + "approve": "Aprobar", + "confirming": "confirmando…", + "confirm": "Enviar respuesta", + "sendResponse": "Enviar respuesta", + "selectModel": "Seleccionar modelo", + "respondWith": "Responde con:", + "maxTokensInfo": "Longitud máxima de respuesta: {maxTokens} tokens", + "contentType": { + "audio": "Audio", + "image": "Imagen", + "text": "Texto" + }, + "description": "Revise el contexto compartido por el servidor MCP y elija si desea generar una respuesta.", + "imageAlt": "Imagen {index}", + "messagesTitle": "Contexto de la conversación", + "noModels": "No hay modelos elegibles habilitados. Habilite un modelo aplicable en Configuración para continuar.", + "noVisionModels": "No hay modelos con capacidad de visión habilitados. Habilite un modelo de visión en Configuración para continuar.", + "preference": { + "cost": "Prioridad de costos", + "hints": "Consejos de modelo", + "intelligence": "Prioridad de inteligencia", + "speed": "Prioridad de velocidad" + }, + "preferencesTitle": "Preferencias de modelo", + "reject": "Rechazar", + "selectedModelLabel": "Respondiendo con {model} ({provider})", + "systemPrompt": "Prompt del sistema", + "title": "Solicitud de muestreo de {server}", + "unknownHint": "Pista sin nombre", + "unknownMime": "Tipo MIME desconocido", + "unknownServer": "Servidor desconocido", + "unsupportedMessage": "Este tipo de contenido no es compatible.", + "visionWarning": "El modelo seleccionado no admite entrada de visión. Elija un modelo con capacidad de visión antes de continuar.", + "autoApproving": "MCP Solicitud de muestreo de {server}", + "autoApproveIn": "Aprobación automática en {seconds}s usando {model}", + "reviewRequest": "Revisión", + "sessionActive": "Sesión activa: las solicitudes se aprobarán automáticamente" + } +} diff --git a/src/renderer/src/i18n/es-ES/model.json b/src/renderer/src/i18n/es-ES/model.json new file mode 100644 index 000000000..796839c57 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Buscar modelos..." + }, + "error": { + "loadFailed": "No se pudieron cargar los modelos" + }, + "type": { + "custom": "Modelo personalizado", + "official": "Modelo Oficial" + }, + "add": { + "namePlaceholder": "Nombre del modelo", + "idPlaceholder": "ID del modelo", + "contextLengthPlaceholder": "Longitud del contexto", + "maxTokensPlaceholder": "Fichas máximas" + }, + "actions": { + "add": "Agregar modelo", + "enableAll": "Habilitar todo", + "disableAll": "Deshabilitar todo" + }, + "sort": { + "status": "Por estado", + "name": "Por nombre" + }, + "filter": { + "label": "Filtrar", + "clearAll": "Borrar filtros", + "visibleCount": "Mostrando {visible} / {total}", + "capabilities": "Capacidades", + "types": "Tipos", + "capabilityOptions": { + "vision": "Visión", + "functionCall": "Llamada de función", + "reasoning": "Razonamiento", + "search": "Búsqueda web" + }, + "typeOptions": { + "chat": "Charla", + "embedding": "incrustar", + "rerank": "Reclasificar", + "imageGeneration": "Generación de imágenes", + "videoGeneration": "Generación de vídeo" + } + }, + "tags": { + "reasoning": "Razonamiento", + "chat": "Charla", + "code": "Código", + "writing": "escribiendo", + "analysis": "Análisis" + } +} diff --git a/src/renderer/src/i18n/es-ES/plan.json b/src/renderer/src/i18n/es-ES/plan.json new file mode 100644 index 000000000..71bc31669 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/plan.json @@ -0,0 +1,4 @@ +{ + "title": "Plan de tareas", + "completed": "completado" +} diff --git a/src/renderer/src/i18n/es-ES/promptSetting.json b/src/renderer/src/i18n/es-ES/promptSetting.json new file mode 100644 index 000000000..60fdce82e --- /dev/null +++ b/src/renderer/src/i18n/es-ES/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "Gestión de prompts", + "addTitle": "Añadir prompt", + "addDescription": "Crear una nueva plantilla de prompt personalizada", + "editTitle": "Editar prompt", + "editDescription": "Modificar la plantilla de prompt seleccionada", + "name": "Nombre", + "namePlaceholder": "Introduce un nombre para el prompt", + "description": "Descripción", + "descriptionPlaceholder": "Por favor ingrese la descripción (opcional)", + "promptContent": "Prompt", + "contentPlaceholder": "Introduce el contenido del prompt", + "basicInfo": "Información básica", + "contentTip": "Admite marcadores de posición variables como {openBrace}{openBrace}variable{closeBrace}{closeBrace}, puede definir los parámetros correspondientes en la sección de parámetros", + "noPrompt": "Aún no hay prompts", + "noPromptDesc": "Haz clic en el botón \"+\" de la esquina superior derecha para crear tu primer prompt.", + "active": "Activo", + "noDescription": "Sin descripción", + "customDate": "personalizado", + "showMore": "Mostrar más", + "showLess": "Mostrar menos", + "export": "Exportar", + "import": "Importar", + "exportSuccess": "Exportación exitosa", + "exportFailed": "Exportación fallida", + "importSuccess": "Importación exitosa", + "importFailed": "Importación fallida", + "importStats": "Se han añadido {added} y actualizado {updated} prompts", + "parameters": "Parámetros", + "addParameter": "Agregar parámetro", + "noParameters": "Sin parámetros", + "noParametersDesc": "Haz clic en el botón superior para añadir parámetros, que pueden usarse para crear variables dentro de los prompts", + "parameterName": "Nombre del parámetro", + "parameterDescription": "Descripción del parámetro", + "parameterNamePlaceholder": "Por favor ingrese el nombre del parámetro", + "parameterDescriptionPlaceholder": "Por favor ingrese la descripción del parámetro", + "required": "Requerido", + "characters": "Personajes", + "fileManagement": "Gestión de archivos", + "uploadFromDevice": "Subir desde el dispositivo", + "uploadFromDeviceDesc": "Admite texto, documentos, CSV y más.", + "uploadedFiles": "Archivos cargados", + "noFiles": "Sin archivos", + "noFilesUploadDesc": "Haga clic arriba para cargar archivos", + "uploadSuccess": "Subida exitosa", + "uploadedCount": "Archivos {count} cargados", + "confirmDelete": "¿Seguro que quieres eliminar el prompt \"{name}\"?", + "confirmDeleteDescription": "Esta acción no se puede deshacer. El prompt se eliminará de forma permanente.", + "confirmDeleteSystemPrompt": "¿Seguro que quieres eliminar el prompt del sistema \"{name}\"?", + "confirmDeleteSystemPromptDescription": "Esta acción no se puede deshacer. El prompt del sistema se eliminará de forma permanente.", + "deleteSuccess": "Prompt eliminado", + "deleteFailed": "No se pudo eliminar el prompt", + "inactive": "Inactivo", + "clickToEnable": "Haga clic para habilitar", + "clickToDisable": "Haga clic para desactivar", + "enableSuccess": "Prompt activado", + "disableSuccess": "Prompt desactivado", + "toggleFailed": "No se pudo cambiar el estado", + "enablePrompt": "Activar este prompt", + "sourceLocal": "locales", + "sourceImported": "Importado", + "sourceBuiltin": "Incorporado", + "defaultSystemPrompt": "Prompt del sistema predeterminado", + "defaultSystemPromptPlaceholder": "Introduce el prompt del sistema predeterminado que se usará en todas las conversaciones nuevas...", + "defaultSystemPromptDescription": "Este prompt se aplicará a todas las conversaciones nuevas. Puedes modificarlo al crear una conversación. Este ajuste surtirá efecto la próxima vez que crees una conversación nueva.", + "typing": "Escribiendo...", + "saving": "Guardando...", + "saved": "Guardado", + "saveDefaultPromptFailed": "No se pudo guardar el prompt del sistema predeterminado", + "systemPrompts": "Prompts del sistema", + "customPrompts": "Prompts personalizados", + "addSystemPrompt": "Añadir prompt del sistema", + "addCustomPrompt": "Añadir prompt personalizado", + "editSystemPrompt": "Editar prompt del sistema", + "addSystemPromptDesc": "Crear un nuevo prompt del sistema", + "editSystemPromptDesc": "Modificar el prompt del sistema seleccionado", + "selectSystemPrompt": "Seleccionar prompt del sistema", + "systemPromptDescription": "El prompt del sistema seleccionado se usará como predeterminado en las conversaciones nuevas", + "emptySystemPromptOption": "Sin prompt del sistema", + "emptySystemPromptDescription": "Al seleccionar esta opción, las conversaciones nuevas empezarán sin prompt del sistema.", + "preview": "Vista previa", + "systemPromptChanged": "Prompt del sistema cambiado correctamente", + "systemPromptChangeFailed": "No se pudo cambiar el prompt del sistema", + "systemPromptAdded": "Prompt del sistema añadido correctamente", + "systemPromptAddedAndSwitched": "Prompt del sistema añadido y configurado automáticamente como predeterminado", + "systemPromptUpdated": "Prompt del sistema actualizado correctamente", + "systemPromptSaveFailed": "No se pudo guardar el prompt del sistema", + "systemPromptDeleted": "Prompt del sistema eliminado correctamente", + "systemPromptDeleteFailed": "No se pudo eliminar el prompt del sistema", + "systemPromptEditTip": "Se guarda automáticamente al perder el foco después de editar", + "resetToDefault": "Restablecer los valores predeterminados", + "resetToDefaultSuccess": "Restablecer el contenido predeterminado correctamente", + "resetToDefaultFailed": "No se pudo restablecer los valores predeterminados", + "parameterRequired": "Parámetros requeridos" +} diff --git a/src/renderer/src/i18n/es-ES/routes.json b/src/renderer/src/i18n/es-ES/routes.json new file mode 100644 index 000000000..ba1caab4a --- /dev/null +++ b/src/renderer/src/i18n/es-ES/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "Charla", + "welcome": "Bienvenido", + "settings": "Configuración", + "settings-common": "Configuraciones comunes", + "settings-provider": "Proveedores", + "settings-mcp": "MCP Configuración", + "settings-deepchat-agents": "DeepChat Agents", + "settings-database": "Datos", + "settings-about": "Acerca de", + "settings-shortcut": "Atajos", + "settings-display": "Pantalla", + "settings-knowledge-base": "Base de conocimientos", + "settings-prompt": "Prompts", + "settings-mcp-market": "MCP Mercado", + "settings-acp": "ACP Agents", + "settings-skills": "Skills", + "settings-notifications-hooks": "Ganchos", + "settings-dashboard": "Panel de control", + "settings-environments": "Ambientes", + "settings-remote": "Remoto", + "settings-plugins": "Complementos", + "settings-overview": "Descripción general de la configuración" +} diff --git a/src/renderer/src/i18n/es-ES/settings.json b/src/renderer/src/i18n/es-ES/settings.json new file mode 100644 index 000000000..5738001e7 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "Ajustes", + "common": { + "title": "Ajustes generales", + "resetData": "Restablecer datos", + "language": "Idioma", + "languageSelect": "Seleccionar idioma", + "searchEngine": "Motor de búsqueda", + "searchEngineSelect": "Seleccionar motor de búsqueda", + "searchPreview": "Vista previa de búsqueda", + "launchAtLoginEnabled": "Iniciar DeepChat al iniciar sesión", + "autoScrollEnabled": "Desplazamiento automático durante la generación", + "privacyMode": "Modo de privacidad", + "privacyModeDescription": "Evitar las solicitudes salientes automáticas de DeepChat:", + "privacyModeAutoUpdate": "Comprobaciones de actualización de aplicaciones", + "privacyModeProviderDb": "Actualización de metadatos de proveedores y modelos", + "privacyModeAcpRegistry": "Actualización del registro ACP y sincronización de iconos", + "privacyModeNpmRegistry": "Detección automática del registro npm de MCP", + "privacyModeManualActions": "Las comprobaciones manuales y las acciones de actualización manual permanecen disponibles.", + "privacyModeIntegrations": "Las integraciones de terceros configuradas permanecen disponibles.", + "autoCompaction": { + "title": "Compactación automática", + "enabled": "Habilitar compactación automática", + "description": "Cuando una conversación se acerca al límite de contexto del modelo, DeepChat puede resumir automáticamente el historial anterior para que la sesión continúe. Si está desactivado, el historial que supere el límite se descarta directamente en lugar de resumirse.", + "thresholdLabel": "Umbral de activación", + "thresholdMin": "Temprano ({value}%)", + "thresholdMax": "Tarde ({value}%)", + "thresholdDescription": "Inicia la compactación cuando el uso del prompt alcanza esta proporción del presupuesto efectivo de historial. Los valores más bajos dejan más margen; los más altos conservan más contexto original.", + "retainPairsLabel": "Conservar pares de mensajes recientes", + "retainPairsValue": "{count} pares", + "retainPairsDescription": "Mantiene fuera de la compactación los pares recientes ya completados de usuario y asistente. La consulta actual no se incluye." + }, + "searchAssistantModel": "Modelo asistente", + "selectModel": "Seleccionar modelo", + "proxyMode": "Modo proxy", + "proxyModeSelect": "Selecciona el modo proxy", + "proxyModeSystem": "Proxy del sistema", + "proxyModeNone": "Sin proxy", + "proxyModeCustom": "Proxy personalizado", + "customProxyUrl": "URL de proxy personalizado", + "customProxyUrlPlaceholder": "Ejemplo: http://127.0.0.1:7890", + "invalidProxyUrl": "URL de proxy no válida. Introduce una URL http/https válida", + "addCustomSearchEngine": "Añadir motor de búsqueda personalizado", + "addCustomSearchEngineDesc": "Añade un motor de búsqueda indicando un nombre y una URL de búsqueda. La URL debe incluir {query} como marcador de posición de la consulta.", + "searchEngineName": "Nombre del motor de búsqueda", + "searchEngineNamePlaceholder": "Introduce el nombre del motor de búsqueda", + "searchEngineUrl": "URL de búsqueda", + "searchEngineUrlPlaceholder": "Ejemplo: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "La URL debe incluir {'{'}query{'}'} como marcador de posición de la consulta", + "deleteCustomSearchEngine": "Eliminar motor de búsqueda personalizado", + "deleteCustomSearchEngineDesc": "¿Seguro que quieres eliminar el motor de búsqueda personalizado \"{name}\"? Esta acción no se puede deshacer.", + "testSearchEngine": "Probar motor de búsqueda", + "testSearchEngineDesc": "Se realizará una búsqueda de prueba de \"clima\" utilizando el motor de búsqueda {engine}.", + "testSearchEngineNote": "Si la página de búsqueda requiere iniciar sesión u otras acciones, puede realizarlas en la ventana de prueba. Cierra la ventana de prueba cuando hayas terminado.", + "theme": "Tema", + "themeSelect": "Seleccionar tema", + "themeLight": "Claro", + "themeDark": "Oscuro", + "themeSystem": "Seguir sistema", + "closeToQuit": "Salir de la aplicación al cerrar la ventana", + "shortcut": { + "title": "Ajustes de atajos de teclado", + "newChat": "Crear un nuevo chat" + }, + "contentProtection": "Protección contra capturas de pantalla", + "contentProtectionDialogTitle": "Confirmar cambio de protección de pantalla", + "contentProtectionEnableDesc": "Evita que las apps de pantalla compartida capturen la ventana de DeepChat para ayudar a proteger tu privacidad. No todas las apps respetan este ajuste; en algunos entornos puede quedar una ventana negra.", + "contentProtectionDisableDesc": "Permite que las apps de pantalla compartida capturen la ventana de DeepChat.", + "contentProtectionRestartNotice": "Cambiar esta configuración reiniciará la aplicación. ¿Quieres continuar?", + "copyWithCotEnabled": "Copiar detalles de COT", + "traceDebugEnabled": "Rastrear llamada", + "loggingEnabled": "Habilitar registros", + "loggingDialogTitle": "Confirmar cambio en los ajustes de registros", + "loggingEnableDesc": "Habilitar los registros nos ayudará a diagnosticar problemas y mejorar la aplicación. Los archivos de registro pueden contener información confidencial.", + "loggingDisableDesc": "Al deshabilitar los registros se dejarán de recopilar registros de la aplicación.", + "charactersUnit": "caracteres", + "loggingRestartNotice": "Cambiar esta configuración reiniciará la aplicación. ¿Quieres continuar?", + "openLogFolder": "Abrir carpeta de registro", + "notifications": "Notificaciones del sistema", + "notificationsDesc": "Cuando DeepChat no está en primer plano, si se genera una sesión, se enviará una notificación del sistema", + "fileMaxSize": "Tamaño máximo de archivo", + "fileMaxSizeHint": "Limita el tamaño máximo de un único archivo cargado", + "defaultModel": { + "title": "Modelo predeterminado", + "chatModel": "Modelo de chat predeterminado" + } + }, + "deepchatAgents": { + "title": "DeepChat Agents", + "description": "Gestiona DeepChat Agents y los valores predeterminados que aplican a las sesiones nuevas.", + "builtIn": "Integrado", + "editTitle": "Editar DeepChat Agent", + "createTitle": "Crear DeepChat Agent", + "unnamed": "Agent sin nombre", + "name": "Nombre", + "namePlaceholder": "Por ejemplo: Writer / Research / Translate", + "enabledLabel": "Habilitado", + "descriptionLabel": "Descripción", + "descriptionPlaceholder": "Opcional, para explicar para qué sirve este Agent", + "avatarTitle": "Avatar", + "avatarDefault": "Predeterminado", + "avatarDefaultDesc": "DeepChat mantiene el icono integrado. Otros Agents usan un avatar de texto.", + "avatarLucide": "Icono Lucide", + "avatarLucideDesc": "Elige un icono Lucide y configura los colores claro y oscuro.", + "avatarMonogram": "Avatar de texto", + "avatarMonogramDesc": "Usa dos letras latinas o el primer carácter CJK.", + "lucideIcon": "Nombre del icono Lucide", + "lightColor": "Color claro", + "darkColor": "Color oscuro", + "monogramText": "Avatar de texto", + "monogramPlaceholder": "Por ejemplo: WR / 研", + "backgroundColor": "Color de fondo", + "modelsTitle": "Valores predeterminados del modelo", + "chatModel": "Modelo de chat predeterminado", + "assistantModel": "Modelo asistente", + "visionModel": "Modelo de visión", + "imageGenerationModel": "Modelo de generación de imágenes", + "temperature": "Temperatura", + "contextLength": "Longitud del contexto", + "maxTokens": "Tokens máximos", + "thinkingBudget": "Presupuesto de pensamiento", + "reasoningEffort": "Esfuerzo de razonamiento", + "verbosity": "Nivel de detalle", + "interleaved": "Forzar compatibilidad con pensamiento intercalado", + "systemPrompt": "Prompt del sistema predeterminado", + "systemPromptPlaceholder": "Déjalo en blanco para usar un prompt del sistema vacío", + "defaultProjectPath": "Directorio predeterminado (opcional)", + "defaultProjectPathPlaceholder": "Déjalo en blanco para usar el directorio global predeterminado", + "permissionMode": "Permiso predeterminado", + "permissionFullAccess": "Acceso completo", + "permissionDefault": "Permiso predeterminado", + "subagentsTitle": "Subagents", + "subagentsDescription": "Configura los espacios de sesión secundaria reutilizables expuestos a subagent_orchestrator.", + "subagentsEnabled": "Habilitar subagents", + "subagentTargetType": "Tipo de destino", + "subagentTargetSelf": "Este Agent", + "subagentTargetAgent": "Agent", + "subagentDisplayName": "Nombre para mostrar", + "subagentDescription": "Descripción del espacio", + "subagentTargetAgentLabel": "Agent de destino", + "subagentLimit": "{count}/{max} espacios", + "addSubagentSlot": "+ Añadir espacio", + "toolsTitle": "Herramientas integradas", + "compactionTitle": "Compactación automática", + "compactionEnabled": "Habilitar compactación automática", + "compactionDescription": "Estos valores predeterminados solo afectan a las futuras sesiones de DeepChat.", + "compactionThreshold": "Umbral de activación", + "compactionRetainPairs": "Conservar pares recientes", + "deleteConfirm": "¿Eliminar el Agent “{name}”? Sus sesiones anteriores volverán automáticamente al DeepChat integrado." + }, + "notificationsHooks": { + "title": "Hooks", + "description": "Configura comandos de Hooks para el ciclo de vida.", + "events": { + "title": "Eventos", + "SessionStart": "Inicio de sesión", + "UserPromptSubmit": "Envío de prompt del usuario", + "PreToolUse": "Antes de usar herramienta", + "PostToolUse": "Después de usar herramienta", + "PostToolUseFailure": "Fallo en el uso de herramientas", + "PermissionRequest": "Solicitud de permiso", + "Stop": "Detener", + "SessionEnd": "Fin de sesión" + }, + "commands": { + "title": "Comandos de Hooks", + "description": "Ejecuta comandos personalizados para los eventos del ciclo de vida seleccionados.", + "hint": "El payload completo se envía a stdin como JSON.", + "commandPlaceholder": "Comando para ejecutar", + "commandLabel": "Comando", + "name": "Nombre", + "namePlaceholder": "Nombre del Hook", + "newHook": "Nuevo Hook", + "empty": "Aún no hay Hooks. Añade uno para empezar.", + "defaultName": "Hook {index}", + "guideTitle": "Cómo usarlo", + "guideDescription": "Cuando se activa un evento marcado, DeepChat ejecuta el comando. El evento actual está disponible como JSON en stdin, variables de entorno y marcadores de posición de comando.", + "deliveryTitle": "Cómo se pasan los datos", + "deliveryStdin": "El payload completo se escribe en stdin como JSON.", + "deliveryPlaceholder": "Puedes colocar marcadores de posición de comando directamente en la línea de comandos.", + "deliveryEnv": "Los mismos metadatos centrales también se exponen como variables de entorno.", + "metadataOnly": "Los marcadores de posición de línea de comandos son adecuados para metadatos pequeños. Lee los detalles de prompt, herramienta, permisos, usage, stop y error desde el JSON de stdin.", + "stdinPreviewLabel": "Ejemplo stdin", + "placeholdersTitle": "Marcadores de posición de comando", + "placeholdersDescription": "Los marcadores de posición se expanden antes de la ejecución, para que puedan pasarse como argumentos de comando.", + "envTitle": "Variables de entorno", + "examplesTitle": "Ejemplos", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Python", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Nombre del evento actual", + "time": "Hora del evento en formato ISO-8601", + "isTest": "Si esta ejecución proviene del botón Probar", + "conversationId": "ID de conversación/sesión actual", + "workdir": "Directorio de trabajo resuelto para la sesión.", + "agentId": "ID del Agent actual cuando esté disponible", + "providerId": "ID del proveedor actual cuando esté disponible", + "modelId": "ID del modelo actual cuando esté disponible", + "messageId": "ID de mensaje de usuario actual cuando esté disponible", + "toolName": "Nombre de la herramienta actual cuando esté disponible", + "toolCallId": "ID de llamada de herramienta actual cuando esté disponible" + } + }, + "test": { + "button": "Probar", + "testing": "Probando...", + "success": "Éxito", + "failed": "Error", + "duration": "{ms} ms", + "statusCode": "HTTP {code}", + "exitCode": "Código de salida {code}", + "retryAfter": "Reintentar después de {ms} ms", + "stdout": "stdout", + "stderr": "stderr" + } + }, + "data": { + "title": "Configuración de datos", + "syncEnable": "Habilitar sincronización de datos", + "syncFolder": "Carpeta de sincronización", + "openSyncFolder": "Abrir carpeta de sincronización", + "lastSyncTime": "Hora de la última sincronización", + "never": "nunca", + "startBackup": "Copia de seguridad ahora", + "backingUp": "Retrocediendo...", + "importData": "Importar datos", + "incrementImport": "Importación incremental", + "overwriteImport": "Sobrescribir importación", + "backupSelectLabel": "Seleccionar copia de seguridad", + "backupSelectDescription": "Elija la instantánea de respaldo para importar.", + "selectBackupPlaceholder": "Seleccione una copia de seguridad", + "noBackupsAvailable": "No hay copias de seguridad disponibles. Primero ejecute una copia de seguridad.", + "importConfirmTitle": "Confirmar importación de datos", + "importConfirmDescription": "La importación sobrescribirá todos los datos actuales, incluido el historial y la configuración del chat. Asegúrese de haber realizado una copia de seguridad de los datos importantes. Los datos se actualizarán automáticamente después de la importación.", + "importing": "Importando...", + "confirmImport": "Confirmar importación", + "importSuccessTitle": "Importación exitosa", + "importErrorTitle": "Importación fallida", + "resetData": "Restablecer datos", + "resetConfirmTitle": "Confirmar restablecimiento de datos", + "resetConfirmDescription": "Seleccione el tipo de datos a restablecer. Esta operación no se puede deshacer y la aplicación se reiniciará automáticamente después del reinicio.", + "resetChatData": "Restablecer datos de chat", + "resetChatDataDesc": "Eliminar todo el historial de chat y registros de conversaciones", + "resetKnowledgeData": "Restablecer datos de la base de conocimientos", + "resetKnowledgeDataDesc": "Eliminar todos los archivos de la base de conocimientos y datos vectoriales", + "resetConfig": "Restablecer configuración", + "resetConfigDesc": "Eliminar todos los ajustes de la aplicación, configuraciones de modelos y prompts personalizados", + "resetAll": "Restablecimiento completo", + "resetAllDesc": "Elimine todos los datos, incluido el historial de chat, las configuraciones y los archivos de caché", + "resetting": "Restableciendo...", + "confirmReset": "Confirmar reinicio", + "resetCompleteDevTitle": "Restablecimiento de datos completo", + "resetCompleteDevMessage": "Reinicie manualmente la aplicación en modo de desarrollo. Detenga el proceso actual y ejecute pnpm run dev nuevamente", + "toast": { + "backupSuccessTitle": "Copia de seguridad exitosa", + "backupSuccessMessage": "Datos respaldados exitosamente" + }, + "syncSectionTitle": "Copia de seguridad y sincronización", + "operationsSectionTitle": "Operaciones de datos", + "resetDataDescription": "Restablecer el chat, el conocimiento, la configuración o todos los datos por tipo.", + "databaseRepair": { + "title": "Reparación de bases de datos", + "description": "Detectar y reparar automáticamente la base de datos.", + "button": "Comprobar y reparar la base de datos", + "running": "Comprobando y reparando...", + "lastResultLabel": "Último resultado: {result}", + "summaryHealthy": "saludable", + "summaryRepaired": "Problemas {count} reparados", + "summaryRepairedWithManual": "Problemas {repaired} reparados, problemas del manual {manual}", + "summaryManualOnly": "Los problemas del manual {manual} requieren atención", + "manualHint": "Los problemas {count} aún requieren manejo manual.", + "toastSuggestedTitle": "Se recomienda reparar la base de datos", + "toastSuggestedDescription": "DeepChat detectó un problema schema ({reason}). Puede ejecutar la reparación de la base de datos ahora.", + "toastAction": "ir a reparar", + "toastHealthyTitle": "La base de datos está en buen estado.", + "toastHealthyDescription": "No se encontró ningún problema schema.", + "toastCompletedTitle": "Reparación de base de datos finalizada", + "toastRepairedDescription": "Problemas {count} reparados.", + "toastManualDescription": "Problemas {repaired} reparados. Los problemas {manual} aún necesitan manejo manual.", + "toastFailedTitle": "Error en la reparación de la base de datos", + "toastFailedDescription": "No se puede completar la reparación de la base de datos en este momento. Verifique los registros e inténtelo nuevamente.", + "reasons": { + "missing-table": "mesa faltante", + "missing-column": "columna faltante", + "column-count-mismatch": "el recuento de columnas no coincide", + "type-mismatch": "el tipo de columna no coincide" + } + }, + "databaseEncryption": { + "title": "SQLite cifrado de base de datos", + "description": "Cifre agent.db con SQLCipher y solicite una contraseña SQLite cuando no se pueda utilizar el desbloqueo del sistema.", + "enabled": "Habilitado", + "disabled": "Discapacitado", + "cipher": "cifrar", + "systemUnlock": "Desbloqueo del sistema", + "startupUnlock": "Desbloqueo de inicio", + "lastMigration": "Última migración", + "loading": "Cargando", + "never": "nunca", + "notRequired": "No requerido", + "systemUnlockAvailable": "Disponible", + "systemUnlockUnavailable": "No disponible", + "systemUnlockMode": "Desbloqueo del sistema", + "manualUnlock": "Contraseña manual", + "currentPassword": "Contraseña actual", + "newPassword": "Nueva contraseña SQLite", + "confirmPassword": "Confirmar contraseña", + "passwordMismatch": "Las contraseñas no coinciden", + "systemCredentialStore": "Cuando el almacenamiento seguro del sistema está disponible, DeepChat almacena la contraseña SQLite en la bóveda de credenciales del sistema operativo (macOS Keychain, Windows Credential Vault o Linux secret store). Después de un desbloqueo exitoso, los inicios posteriores generalmente se abren automáticamente; solo necesita ingresar la clave de cifrado nuevamente después de la migración de datos, cuando falta la credencial del sistema operativo o no se puede descifrar, o cuando el almacenamiento seguro no está disponible.", + "safeStorageUnavailable": "Electron safeStorage no está disponible en este sistema. Después de habilitar el cifrado, debe ingresar la contraseña en cada inicio.", + "enableButton": "Habilitar cifrado", + "changeButton": "Cambiar contraseña", + "disableButton": "Deshabilitar el cifrado", + "enabledTitle": "Cifrado de base de datos habilitado", + "changedTitle": "SQLite contraseña cambiada", + "disabledTitle": "Cifrado de base de datos deshabilitado", + "failedTitle": "Falló el cifrado de la base de datos", + "failedDescription": "Verifique la contraseña e inténtelo nuevamente.", + "setPasswordButton": "Establecer contraseña", + "enableDialogTitle": "Establecer contraseña SQLite", + "changeDialogTitle": "Cambiar la contraseña SQLite", + "disableDialogTitle": "Deshabilitar el cifrado de la base de datos", + "enableDialogDescription": "Cree una base de datos cifrada SQLite y migre los datos locales actuales a ella.", + "changeDialogDescription": "Migre la base de datos cifrada actual a una nueva base de datos cifrada con la nueva contraseña.", + "disableDialogDescription": "Migre la base de datos cifrada actual nuevamente a una base de datos local de texto sin formato.", + "cancelButton": "Cancelar", + "unknown": "Desconocido" + }, + "modelConfigUpdate": { + "title": "Actualizar configuración del modelo", + "descriptionPrefix": "Sincronizar datos del modelo desde", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": ".", + "button": "Actualizar ahora", + "updating": "Actualizando...", + "updatedTitle": "Configuración del modelo actualizada", + "updatedDescription": "Se han actualizado los últimos metadatos provider.", + "upToDateTitle": "Ya al día", + "upToDateDescription": "La configuración de su modelo local ya utiliza los últimos metadatos provider.", + "failedTitle": "La actualización falló", + "failedDescription": "No se puede actualizar la configuración del modelo en este momento. Inténtelo de nuevo más tarde." + }, + "yoBrowser": { + "title": "YoBrowser Caja de arena", + "description": "Un entorno limitado de navegador independiente que no comparte cookies ni almacenamiento local con la aplicación principal. \nLos datos YoBrowser se pueden borrar con un clic aquí.", + "clearButton": "Borrar datos YoBrowser", + "confirmTitle": "¿Confirmar para borrar los datos YoBrowser?", + "confirmDescription": "Las cookies, el caché, LocalStorage, IndexedDB y otros datos de la sesión YoBrowser se eliminarán y es posible que deba iniciar sesión en el sitio web nuevamente.", + "confirmAction": "Limpiar ahora", + "clearing": "Limpiando...", + "clearedTitle": "YoBrowser datos borrados", + "clearedDescription": "La sesión de sandbox se restableció y se recargará la pestaña asociada.", + "clearFailedTitle": "Error al borrar", + "clearFailedDescription": "Inténtelo de nuevo o consulte los registros para obtener más información." + }, + "privacyTitle": "Datos y privacidad", + "privacyDescription": "Administre copias de seguridad, sincronización, modo de privacidad, mantenimiento y operaciones peligrosas.", + "dangerZone": { + "title": "Zona de peligro", + "description": "Restablecer el chat, el conocimiento o todos los datos. Esto no se puede deshacer." + }, + "providerImport": { + "entryTitle": "Importar configuración provider", + "entryDescription": "Escanee CC Switch, Alma, Cherry Studio, Hermes y OpenClaw para obtener credenciales y listas de modelos de provider.", + "entryButton": "Importar desde agents", + "dialogTitle": "Importar desde otro agents", + "dialogDescription": "Primero seleccione las aplicaciones detectadas y luego revise el providers que DeepChat puede importar.", + "toastTitle": "Importación de proveedores finalizada", + "toastDescription": "Importado {count} provider(s).", + "steps": { + "scan": "Escanear", + "providers": "Proveedores", + "done": "hecho" + }, + "scanningTitle": "Escaneo instalado agents", + "scanningDescription": "DeepChat verifica los archivos de configuración locales conocidos sin enviar datos a ninguna parte.", + "scanFailedTitle": "Error de escaneo", + "sourcesTitle": "Fuentes detectadas", + "sourcesDescription": "Elija uno o más agents. Los agents seleccionados se procesan en el orden que se muestra.", + "selectedSources": "{selected}/{total} seleccionado", + "noSourcesTitle": "No se encontró ninguna configuración provider importable", + "noSourcesDescription": "Instale uno de los agents compatibles o configure las credenciales provider allí primero.", + "providersFound": "{count} provider(s)", + "sourceProgress": "{current} de {total}", + "overwriteNote": "Si varios providers seleccionados se asignan al mismo DeepChat provider, la fuente posterior sobrescribe la anterior.", + "noProvidersTitle": "No hay datos provider en esta fuente", + "noProvidersDescription": "Se seleccionó este agent, pero no se encontró ninguna entrada provider importable.", + "apiKey": "Clave {value}", + "noModels": "Sin lista de modelos", + "modelsImported": "{count} modelo(s)", + "importingTitle": "Importando providers", + "importingDescription": "DeepChat está escribiendo providers seleccionados y entradas de modelos personalizados.", + "doneTitle": "Resumen de importación", + "doneDescription": "Importado {count} provider(s). Revise el resultado per-provider a continuación.", + "badges": { + "configured": "Configurado" + }, + "sourceStatus": { + "found": "Encontrado", + "not_found": "No encontrado", + "error": "error", + "unsupported_platform": "Plataforma no compatible" + }, + "targetKind": { + "builtin": "Incorporado", + "custom": "personalizado", + "unsupported": "No compatible" + }, + "warnings": { + "already_configured": "Ya configurado en DeepChat, por lo que no está seleccionado por defecto.", + "missing_api_key": "Falta la clave API o el punto final requerido.", + "unsupported_provider": "DeepChat no puede importar este provider automáticamente.", + "overwrites_previous_selection": "Esta selección entra en conflicto con una fuente anterior.", + "credential_only_import": "Sólo se importará la clave API; DeepChat mantiene su punto final y tiempo de ejecución integrados." + }, + "conflicts": { + "overridesPrevious": "Esta selección sobrescribirá un provider seleccionado anteriormente.", + "overwrittenByLater": "Una fuente seleccionada posteriormente sobrescribirá este provider." + }, + "summary": { + "imported": "Importado", + "created": "Creado", + "updated": "Actualizado", + "overwritten": "Sobrescrito", + "models": "Modelos", + "skipped": "Saltado" + }, + "resultStatus": { + "created": "Creado", + "updated": "Actualizado", + "skipped": "Saltado", + "overwritten": "Sobrescrito" + }, + "actions": { + "rescan": "Volver a escanear", + "selectAll": "Seleccionar todo", + "clearSelected": "Borrar", + "import": "Importar seleccionado" + }, + "apiTypes": { + "openaiCompletions": "OpenAI Chat Completions", + "openai": "OpenAI", + "openaiResponses": "OpenAI Responses", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "Mistral AI" + }, + "applyFailed": "Error de importación: {message}" + } + }, + "dashboard": { + "badge": "Panel de uso", + "title": "Panel de uso", + "description": "Realice un seguimiento del uso de token, los accesos a la caché y el costo estimado. Las cifras de tokens y costos se estiman a partir de información pública, y algunos mensajes providers o anteriores pueden estar incompletos, así que trate estas cifras solo como referencia.", + "actions": { + "refresh": "Actualizar" + }, + "backfill": { + "runningTitle": "Actualización de datos de uso", + "runningDescription": "Los datos de uso todavía se actualizan en segundo plano. Los resultados actuales ya están disponibles.", + "failedTitle": "No se pudieron actualizar los datos de uso", + "failedDescription": "Actualiza esta página o inténtalo de nuevo más tarde." + }, + "error": { + "title": "No se pudo cargar el panel", + "description": "Inténtelo de nuevo más tarde." + }, + "empty": { + "title": "Aún no hay estadísticas de uso", + "description": "El uso de tokens, los aciertos de caché y el costo estimado aparecerán aquí una vez que los datos de uso estén disponibles.", + "historyNote": "Las cifras de tokens y costos se estiman a partir de información pública. Algunos mensajes providers o anteriores pueden estar incompletos, así que trate estas cifras sólo como referencia." + }, + "summary": { + "totalTokens": "Total tokens", + "totalTokensDescription": "Muestra cómo la entrada y la salida tokens contribuyen al total.", + "inputTokensLabel": "Entrada", + "outputTokensLabel": "Salida", + "cachedTokens": "En caché tokens", + "cachedTokensDescription": "token de prompt servidos desde la caché del provider.", + "cachedTokensCachedLabel": "En caché", + "cachedTokensUncachedLabel": "sin caché", + "cacheHitRate": "Tasa de aciertos de caché", + "cacheHitRateDescription": "token de prompt en caché divididos por el total de token de entrada.", + "estimatedCost": "Costo estimado", + "estimatedCostDescription": "Estimado en USD utilizando el precio provider o el precio alternativo de AIHubMix.", + "estimatedCostTrendLabel": "Tendencia de los últimos 30 días", + "estimatedCostTrendEmpty": "No se registró ningún costo en los últimos 30 días.", + "recordingStartedAt": "Grabación iniciada", + "recordingStartedAtDescription": "El registro de uso más antiguo almacenado actualmente en este panel.", + "withDeepChatDaysLabel": "dias juntos", + "withDeepChatDaysValue": "{days} días", + "withDeepChatDaysSentence": "Estás en el día {days} con DeepChat.", + "withDeepChatDaysDescription": "Basado en su registro de uso más antiguo de {date}.", + "withDeepChatDaysDescriptionUnavailable": "Aún no hay registro de uso.", + "tokenUsage": "Uso de tokens", + "nostalgiaLabel": "ecos", + "nostalgiaDaysValue": "{days} días", + "nostalgiaSessionsValue": "{count} sesiones", + "nostalgiaMessagesValue": "{count} mensajes", + "nostalgiaDaysDetailLabel": "dias juntos", + "nostalgiaDaysDetail": "Tú y DeepChat habéis pasado {days} días juntos.", + "nostalgiaSessionsDetailLabel": "Sesiones", + "nostalgiaSessionsDetail": "Han compartido {count} sesiones juntos.", + "nostalgiaMessagesDetailLabel": "Mensajes", + "nostalgiaMessagesDetail": "Ha intercambiado {count} mensajes.", + "nostalgiaMostActiveDayLabel": "Día más activo", + "nostalgiaMostActiveDayDetail": "{date} fue su día más activo, con mensajes {count}." + }, + "calendar": { + "title": "Calendario de contribuciones", + "description": "Uso diario de token durante los últimos 365 días.", + "legend": "menos a más", + "tooltip": "{date}: {tokens} tokens" + }, + "breakdown": { + "providerTitle": "Arriba providers", + "providerDescription": "Clasificados por costo estimado y luego por total tokens.", + "modelTitle": "Mejores modelos", + "modelDescription": "Los 10 modelos principales por costo estimado, luego por total tokens.", + "messages": "{count} mensajes", + "empty": "Aún no hay datos desglosados." + }, + "rtk": { + "title": "RTK Ahorros", + "description": "Se estima que tokens impidió que RTK alcanzara el contexto del modelo durante la ejecución del comando nativo de DeepChat.", + "actions": { + "retry": "Reintentar verificación" + }, + "status": { + "disabled": "Discapacitado", + "checking": "comprobando", + "healthy": "saludable", + "unhealthy": "No disponible" + }, + "descriptionDisabled": "RTK está desactivado para esta sesión de aplicación, por lo que los comandos se ejecutan a través de la ruta de ejecución normal.", + "descriptionChecking": "DeepChat está verificando si RTK puede ejecutarse correctamente en el entorno actual.", + "descriptionHealthy": "RTK está activo para la ejecución de comandos nativos de DeepChat.", + "descriptionUnhealthy": "RTK falló su verificación de estado de inicio y se deshabilitó para esta sesión de aplicación.", + "sourceLabel": "Fuente de tiempo de ejecución: {source}", + "source": { + "bundled": "incluido", + "system": "Sistema", + "none": "No disponible" + }, + "summary": { + "savedTokens": "Guardado tokens", + "commands": "Comandos rastreados", + "avgSavingsPct": "Ahorro promedio", + "outputTokens": "Salida filtrada" + } + }, + "unavailable": "N/A" + }, + "modelConfigItem": { + "chatFallbackWarning": "Capacidad débil de Agent: solo admite llamadas a herramientas de respaldo heredadas" + }, + "model": { + "title": "Configuración del modelo", + "systemPrompt": { + "label": "Prompt del sistema", + "placeholder": "Introduce el prompt del sistema...", + "description": "Define el prompt del sistema del asistente de IA para fijar su comportamiento y rol" + }, + "temperature": { + "label": "Modelo Temperatura", + "description": "Controla la aleatoriedad de la salida; Los valores más altos producen respuestas más creativas." + }, + "contextLength": { + "label": "Longitud del contexto", + "description": "Establecer la duración máxima del contexto de la conversación" + }, + "responseLength": { + "label": "Longitud de la respuesta", + "description": "Establecer la duración máxima de la respuesta de la IA" + }, + "artifacts": { + "title": "Artefactos", + "description": "Habilitar la función Artefactos permite a la IA generar contenido más rico" + }, + "provider": "Servicio provider", + "modelList": "Lista de modelos", + "selectModel": "Selecciona un modelo", + "providerSetting": "Configuración del servicio provider", + "configureModel": "Configurar modelo", + "addModel": "Agregar modelo", + "form": { + "id": { + "label": "Identificador" + } + }, + "modelConfig": { + "title": "Parámetros del modelo personalizado", + "description": "Tenga en cuenta que esta configuración solo es válida para el modelo actual y no afectará a otros modelos. Modifíquelo con precaución. Los parámetros incorrectos pueden hacer que el modelo no funcione correctamente.", + "name": { + "label": "Nombre del modelo", + "description": "El nombre para mostrar del modelo.", + "placeholder": "Introduzca el nombre del modelo", + "required": "El nombre del modelo es obligatorio.", + "readonly": "Nombre del modelo (solo lectura)" + }, + "id": { + "label": "ID del modelo", + "description": "El identificador único del modelo.", + "placeholder": "Introduce el ID del modelo", + "required": "Se requiere identificación del modelo", + "readonly": "ID de modelo (solo lectura)", + "duplicate": "Ya existe un modelo con este ID" + }, + "createTitle": "Agregar modelo personalizado", + "editTitle": "Editar configuración del modelo: {name}", + "maxTokens": { + "label": "Longitud máxima de salida", + "description": "Establezca el número máximo de tokens para una sola salida del modelo" + }, + "contextLength": { + "label": "Longitud del contexto", + "description": "Establecer la longitud del contexto que el modelo puede manejar" + }, + "temperature": { + "label": "Temperatura", + "description": "Controlar la aleatoriedad de la salida. La mayoría de los modelos son 0-1 y algunos admiten entre 0-2. Los valores más altos aumentan la aleatoriedad.", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 fija la temperatura en {enabled} cuando el pensamiento está habilitado y en {disabled} cuando está deshabilitado." + }, + "vision": { + "label": "Habilidad visual", + "description": "¿El modelo admite la capacidad visual?" + }, + "speechRecognition": { + "label": "Reconocimiento de voz", + "description": "Controla si este modelo permite la entrada de voz con transcripción local de voz a texto." + }, + "functionCall": { + "label": "Llamadas a funciones", + "description": "Si el modelo admite llamadas a funciones de forma nativa (DeepChat simulará automáticamente las llamadas a funciones después de desactivar esta opción)" + }, + "reasoning": { + "label": "capacidad de razonamiento", + "description": "Este modelo apoya el razonamiento." + }, + "reasoningToggle": { + "label": "Habilitar razonamiento", + "description": "Controla si el razonamiento está habilitado de forma predeterminada para este modelo." + }, + "interleavedThinking": { + "label": "Pensamiento entrelazado", + "description": "Controla si este modelo maneja mensajes de razonamiento y llamadas de herramientas con pensamiento intercalado. Los valores predeterminados del proveedor se aplican automáticamente." + }, + "thinkingBudget": { + "label": "Pensando en el presupuesto", + "description": "Establezca la duración máxima token del proceso de pensamiento para controlar la profundidad del razonamiento", + "placeholder": "Introduzca el valor del presupuesto pensando", + "range": "Rango: {min} - {max}", + "validation": { + "required": "Por favor ingrese el valor del presupuesto pensando", + "minValue": "Pensar que el valor del presupuesto está por debajo del mínimo", + "maxValue": "El valor del presupuesto de pensamiento no puede exceder {max}" + } + }, + "type": { + "label": "Tipo de modelo", + "description": "Seleccione el tipo de modelo", + "options": { + "chat": "Modelo de lenguaje", + "embedding": "Modelo de incrustación", + "rerank": "Modelo de reclasificación", + "imageGeneration": "Modelo de generación de imágenes", + "videoGeneration": "Modelo de generación de vídeo" + } + }, + "apiEndpoint": { + "label": "API punto final", + "description": "Seleccione el punto final OpenAI API utilizado por este modelo.", + "options": { + "chat": "Generación de texto", + "image": "Generación de imágenes", + "video": "Generación de vídeo" + } + }, + "resetToDefault": "Restablecer los valores predeterminados", + "saveConfig": "Guardar configuración", + "cancel": "Cancelar", + "useModelDefault": "Usar la configuración predeterminada del modelo", + "currentUsingModelDefault": "Actualmente usando la configuración predeterminada del modelo", + "resetConfirm": { + "title": "Confirmar reinicio", + "message": "¿Está seguro de que desea restablecer la configuración predeterminada de este modelo? \nEsta operación es irrevocable.", + "confirm": "Confirmar reinicio" + }, + "reasoningEffort": { + "label": "Esfuerzo de razonamiento", + "description": "Controla la profundidad del razonamiento del modelo; Un mayor esfuerzo produce mejores resultados pero respuestas más lentas.", + "placeholder": "Seleccionar esfuerzo de razonamiento", + "options": { + "none": "Ninguno - Sin razonamiento", + "minimal": "Mínimo: respuesta más rápida", + "low": "Bajo - Bajo esfuerzo", + "medium": "Esfuerzo medio - moderado", + "high": "Alto - Alto esfuerzo", + "xhigh": "XAlto - Esfuerzo máximo", + "max": "Max - Esfuerzo máximo" + } + }, + "verbosity": { + "label": "Verbosidad", + "description": "Controla el nivel de detalle y la longitud de las respuestas del modelo.", + "placeholder": "Seleccionar nivel de detalle", + "options": { + "low": "Bajo - Respuestas concisas", + "medium": "Medio: detalle equilibrado", + "high": "Alto - Respuestas detalladas" + } + }, + "validation": { + "maxTokensRequired": "La longitud máxima de salida no puede estar vacía", + "maxTokensMin": "La longitud máxima de salida debe ser mayor que 0.", + "maxTokensMax": "La longitud máxima de salida no puede exceder 1000000", + "contextLengthRequired": "La longitud del contexto no puede estar vacía.", + "contextLengthMin": "La longitud del contexto debe ser mayor que 0.", + "contextLengthMax": "La longitud del contexto no puede exceder 10000000", + "temperatureRequired": "La temperatura no puede estar vacía.", + "temperatureMin": "La temperatura debe ser mayor o igual a 0", + "temperatureMax": "La temperatura debe ser menor o igual a 2", + "timeoutMin": "El tiempo de espera de la solicitud debe ser de al menos 1000 ms.", + "timeoutMax": "El tiempo de espera de la solicitud no puede exceder los 3600000 ms" + }, + "endpointType": { + "label": "Tipo de punto final", + "description": "Seleccione qué protocolo ascendente debe utilizar el nuevo API para este modelo.", + "placeholder": "Seleccionar tipo de punto final", + "required": "Se requiere el tipo de punto final", + "options": { + "openai": "OpenAI Chat", + "openai-response": "OpenAI Responses", + "anthropic": "Anthropic Messages", + "gemini": "Gemini Native", + "image-generation": "Generación de imágenes", + "video-generation": "Generación de vídeo" + } + }, + "reasoningVisibility": { + "label": "Visibilidad del razonamiento", + "description": "Controla si el contenido del razonamiento se omite o se muestra como notas resumidas cuando el razonamiento está habilitado", + "placeholder": "Seleccionar visibilidad de razonamiento", + "options": { + "omitted": "Omitido: ocultar contenido de razonamiento", + "summarized": "Resumido: muestra el razonamiento resumido" + } + }, + "timeout": { + "label": "Tiempo de espera de solicitud (ms)", + "description": "Establezca el tiempo de espera para una solicitud de modelo único. Si se excede, la solicitud será cancelada." + }, + "imageGeneration": { + "default": "Predeterminado", + "size": { + "label": "Tamaño de imagen", + "custom": "personalizado", + "placeholder": "por ej. 2048x2048", + "experimental": "Los tamaños superiores a 2560 x 1440 están marcados como experimentales con OpenAI.", + "validation": { + "invalid_format": "Utilice el formato {width}x{height}.", + "invalid_multiple": "El ancho y el alto deben ser múltiplos de 16.", + "side_too_large": "El ancho y el alto deben ser 3840 px o menos.", + "aspect_ratio_too_large": "El lado largo no puede ser más de 3 veces el lado corto.", + "pixel_count_out_of_range": "El total de píxeles debe estar entre 655360 y 8294400." + } + }, + "quality": { + "label": "Calidad", + "options": { + "low": "Bajo", + "medium": "Medio", + "high": "Alto", + "auto": "Automático" + } + }, + "outputFormat": { + "label": "Formato de salida", + "options": { + "png": "PNG", + "jpeg": "JPEG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "Compresión", + "placeholder": "Predeterminado: 100", + "validation": "La compresión debe ser un número entero de 0 a 100." + }, + "background": { + "label": "Antecedentes", + "options": { + "auto": "Automático", + "opaque": "opaco" + } + }, + "moderation": { + "label": "Moderación", + "options": { + "auto": "Automático", + "low": "Bajo" + } + } + }, + "videoGeneration": { + "size": { + "label": "Tamaño del marco", + "placeholder": "por ej. 1280x720" + }, + "seconds": { + "label": "Segundos", + "placeholder": "por ej. 5" + }, + "duration": { + "label": "Duración", + "placeholder": "por ej. 5", + "description": "Enviado a través de extra_body.duration para terminales de video compatibles." + }, + "ratio": { + "label": "relación de aspecto", + "placeholder": "por ej. 16:9" + }, + "resolution": { + "label": "Resolución", + "placeholder": "por ej. 720p" + }, + "watermark": { + "label": "marca de agua", + "description": "Solicite una marca de agua del lado provider cuando el punto final ascendente la admita." + }, + "generateAudio": { + "label": "generar audio", + "description": "Solicite una pista de audio junto con el video generado cuando sea compatible." + } + } + } + }, + "provider": { + "search": "Buscar plataformas provider...", + "enable": "Habilitar servicio", + "enabled": "Habilitado", + "disabled": "Discapacitado", + "urlPlaceholder": "Por favor ingrese API URL", + "keyPlaceholder": "Por favor ingrese API Key", + "accessKeyIdPlaceholder": "Por favor ingrese AWS ID de clave de acceso", + "secretAccessKeyPlaceholder": "Ingrese AWS Clave de acceso secreta", + "regionPlaceholder": "Por favor ingrese AWS región", + "vertexProjectId": "ID del proyecto", + "vertexProjectIdPlaceholder": "Por favor ingrese su ID de proyecto Google Cloud", + "vertexLocation": "zona", + "vertexLocationPlaceholder": "Ingrese una región (por ejemplo, us-central1)", + "vertexServiceEmail": "Correo electrónico de la cuenta de servicio", + "vertexServiceEmailPlaceholder": "Por favor ingrese el correo electrónico de la cuenta de servicio", + "vertexPrivateKey": "Clave privada de la cuenta de servicio", + "vertexPrivateKeyPlaceholder": "Pegue la clave privada (admite una sola línea \\n)", + "vertexApiVersion": "Versión API", + "vertexEndpointMode": "modo de punto final", + "vertexEndpointStandard": "Estándar (punto final de región)", + "vertexEndpointExpress": "Express (punto final global)", + "verifyKey": "Verificar clave", + "howToGet": "como llegar", + "refreshingModels": "Refrescante...", + "getKeyTip": "Por favor visita", + "getKeyTipEnd": "para obtener API Key", + "urlFormat": "API Ejemplo: {defaultUrl}", + "urlFormatFill": "Complete en API URL", + "openaiResponsesNotice": "OpenAI tiene como valor predeterminado las Respuestas API. Si un punto final de terceros solo admite Chat Completions, utilice OpenAI Completions provider.", + "modifyBaseUrl": "Modificar", + "baseUrlLockedHint": "Este provider está fijado al Base URL recomendado para reducir la configuración incorrecta.", + "refreshModelsWithMetadataHint": "Al actualizar este provider, primero se sincronizarán los metadatos ascendentes y luego se reconstruirá la lista de modelos locales.", + "modelList": "Lista de modelos", + "enableModels": "Habilitar modelos", + "disableAllModels": "Deshabilitar todos los modelos", + "modelsEnabled": "Los modelos han sido habilitados.", + "noModelsEnabled": { + "title": "No hay modelos habilitados", + "description": "Haga clic en el botón \"Habilitar modelos\" para seleccionar manualmente los modelos que desea utilizar." + }, + "verifyLink": "Verificar enlace", + "syncModelsFailed": "No se pudieron sincronizar los modelos...", + "addCustomProvider": "Agregar proveedor personalizado", + "delete": "Eliminar", + "stopModel": "Detener modelo", + "pulling": "Tirando...", + "runModel": "Ejecutar modelo", + "configurationUpdated": "Configuración actualizada", + "configurationSaved": "Configuración guardada", + "operationSuccess": "La operación es exitosa", + "operationFailed": "Operación fallida", + "dataRefreshed": "Los datos han sido actualizados.", + "settingsApplied": "Configuración aplicada", + "toast": { + "modelRunning": "El modelo esta funcionando", + "modelRunningDesc": "Primero detenga el modelo {model} y luego elimínelo.", + "backupSuccessTitle": "Copia de seguridad completada", + "backupSuccessMessage": "Copia de seguridad guardada en {time} ({size})", + "importSuccessTitle": "Importación completada", + "importSuccessMessage": "Conversaciones {count} importadas correctamente", + "refreshModelsSuccessTitle": "Modelos actualizados", + "refreshModelsSuccessDescription": "La lista de modelos más reciente se ha sincronizado para este provider.", + "refreshModelsSuccessDescriptionWithMetadata": "Los metadatos ascendentes y la lista de modelos más recientes se han sincronizado para este provider.", + "refreshModelsFailedTitle": "Error al actualizar", + "refreshModelsFailedDescription": "No se pueden actualizar los modelos para este provider en este momento. Inténtelo de nuevo más tarde.", + "refreshModelsFailedDescriptionWithMetadata": "No se pueden actualizar los metadatos y modelos ascendentes para este provider en este momento. Inténtelo de nuevo más tarde." + }, + "modelscope": { + "name": "ModelScope", + "description": "ModelScope es una plataforma para compartir modelo como servicio lanzada por Alibaba Damo Academy", + "apiKey": "API Key", + "apiKeyPlaceholder": "Por favor ingrese ModelScope API Key", + "apiKeyHelper": "Obtenga su API Key en la consola ModelScope", + "baseUrl": "API Dirección", + "baseUrlHelper": "ModelScope API dirección de servicio", + "connected": "Conectado", + "notConnected": "No conectado", + "connecting": "Conectando...", + "verifySuccess": "La verificación es exitosa", + "verifyFailed": "La verificación falló", + "keyRequired": "Por favor ingrese API Key", + "invalidKey": "API Key no válido", + "networkError": "Error de conexión de red", + "mcpSync": { + "title": "Sincronizar servicios MCP", + "description": "Sincronice los servidores MCP desde ModelScope con la configuración local, lo que permite agregar rápidamente herramientas MCP comunes.", + "sync": "Iniciar sincronización", + "syncing": "Sincronizando...", + "pageSize": "Tamaño de página", + "pageNumber": "número de página", + "pageNumberPlaceholder": "Por favor ingrese el número de página", + "imported": "Servicios {count} importados", + "skipped": "Servicios {count} omitidos", + "errors": "{count} errores", + "errorDetails": "Detalles del error", + "noApiKey": "Configure ModelScope API Key primero", + "noServersFound": "No se encontraron servicios MCP disponibles", + "fetchingServers": "Obteniendo la lista de servidores MCP...", + "convertingServers": "Convirtiendo la configuración del servidor...", + "importingServers": "Importando configuración del servidor...", + "syncComplete": "Finalización sincrónica", + "serverAlreadyExists": "El servidor ya existe, omita la importación.", + "noOperationalUrls": "No se encontró ninguna dirección operativa disponible", + "invalidServerData": "Datos del servidor no válidos", + "authenticationFailed": "Error de autenticación, verifique API Key" + }, + "details": { + "title": "Detalles de configuración del proveedor", + "apiConfig": "API Configuración", + "rateLimitConfig": "Configuración del límite de velocidad", + "modelManagement": "Gestión de modelos", + "safetySettings": "Configuraciones de seguridad", + "specialConfig": "Configuración especial", + "mcpSync": "MCP Sincronización", + "operationalServers": "Operar un servidor", + "syncFromModelScope": "Sincronización desde ModelScope", + "operationalDescription": "Sincronice servidores MCP que se pueden usar directamente en la plataforma ModelScope" + } + }, + "tts": { + "title": "Texto a voz (TTS)", + "description": "Generar voz a partir de texto. Las voces aparecen en la lista de modelos a continuación.", + "audioFormat": { + "label": "Formato de audio", + "placeholder": "Seleccionar formato", + "helper": "Se recomienda MP3 en la mayoría de los casos." + }, + "language": { + "label": "Idioma", + "placeholder": "por ej. es", + "helper": "Compatible: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "Modelo TTS", + "placeholder": "voiceai-tts-v1-último", + "helper": "Consulte los documentos Voice.ai para conocer los modelos compatibles." + }, + "agentId": { + "label": "Voz Agent ID", + "placeholder": "Pegar voz agent ID", + "helper": "Requerido para llamadas de voz en tiempo real." + }, + "temperature": { + "label": "Temperatura", + "helper": "Controla la aleatoriedad (0-2)." + }, + "topP": { + "label": "P superior", + "helper": "Muestreo de núcleos (0-1)." + } + }, + "dialog": { + "disableModel": { + "title": "Confirmar deshabilitar modelo", + "content": "¿Está seguro de que desea desactivar el modelo \"{name}\"?", + "confirm": "Desactivar" + }, + "disableAllModels": { + "title": "Confirmar Desactivar todos los modelos", + "content": "¿Está seguro de que desea desactivar todos los modelos de \"{name}\"?", + "confirm": "Deshabilitar todo" + }, + "configModels": { + "title": "Configurar lista de modelos", + "description": "Seleccione modelos para habilitar o deshabilitar" + }, + "verify": { + "missingFields": "Por favor ingrese API Key y API URL", + "failed": "La verificación falló", + "success": "Verificación exitosa", + "failedDesc": "API clave o verificación de configuración falló, verifique su configuración", + "successDesc": "API clave y configuración verificadas exitosamente, listas para usar", + "unauthorized": "Error de autenticación, API Key no es válido o ha caducado", + "serverError": "Error del servidor, inténtalo de nuevo más tarde.", + "connectionError": "Error de conexión, verifique la conexión de red y la dirección API" + }, + "addCustomProvider": { + "title": "Agregar proveedor personalizado", + "description": "Por favor complete la información necesaria para el provider", + "name": "Nombre", + "namePlaceholder": "Por favor ingrese el nombre provider", + "apiType": "API Tipo", + "apiTypePlaceholder": "Seleccione el tipo API", + "apiKey": "API Key", + "apiKeyPlaceholder": "Por favor ingrese la clave API", + "baseUrl": "API Base URL", + "baseUrlPlaceholder": "Por favor ingrese la base API URL", + "enable": "Habilitar proveedor" + }, + "providerDeeplinkImport": { + "title": "Proveedor de importación", + "description": "Revise la configuración provider analizada antes de aplicarla.", + "type": "Tipo", + "url": "URL", + "key": "clave", + "overwriteWarning": "Esta importación sobrescribirá la configuración actual de provider.", + "confirming": "Importando..." + }, + "baseUrlUnlock": { + "title": "Confirmar cambio Base URL", + "description": "No se recomienda cambiar el Base URL por este provider. Un punto final incorrecto puede provocar errores en las solicitudes u otro comportamiento inesperado. Aún puede continuar si comprende el riesgo.", + "confirm": "Continuar" + }, + "deleteProvider": { + "title": "Confirmar eliminar proveedor", + "content": "¿Está seguro de que desea eliminar provider \"{name}\"? Esta acción no se puede deshacer.", + "confirm": "Eliminar" + }, + "deleteModel": { + "title": "Confirmar eliminar modelo", + "content": "¿Está seguro de que desea eliminar el modelo \"{name}\"? Esta acción no se puede deshacer.", + "confirm": "Eliminar" + }, + "pullModel": { + "title": "Modelo de tracción", + "description": "Seleccione modelos para descargar localmente", + "pull": "tirar" + }, + "modelCheck": { + "title": "Verificación de modelo", + "description": "Seleccione un modelo para probar la conectividad y la disponibilidad", + "model": "Seleccionar modelo", + "modelPlaceholder": "Por favor seleccione un modelo para probar", + "test": "Iniciar prueba", + "checking": "Probando...", + "success": "Prueba del modelo exitosa", + "failed": "La prueba del modelo falló", + "noModels": "No hay modelos disponibles para este provider" + } + }, + "pullModels": "Modelos de tracción", + "refreshModels": "Actualizar modelos", + "modelsRunning": "Modelos en ejecución", + "runningModels": "Modelos en ejecución", + "noRunningModels": "Sin modelos en ejecución", + "deleteModel": "Eliminar modelo", + "deleteModelConfirm": "¿Está seguro de que desea eliminar el modelo \"{name}\"? Esta acción no se puede deshacer.", + "noLocalModels": "Sin modelos locales", + "localModels": "Modelos locales", + "azureApiVersion": "Versión API", + "safety": { + "title": "Configuraciones de seguridad", + "blockNone": "No bloqueado", + "blockSome": "Bloquear bajo riesgo", + "blockMost": "Bloquear riesgos medios", + "blockHighest": "Bloquear alto riesgo" + }, + "serverList": "Lista de servidores", + "totalServers": "Servidores totales", + "addServer": "Agregar servidor", + "autoStart": "Inicio automático", + "githubCopilotAuth": "GitHub Copilot Autenticación", + "githubCopilotConnected": "GitHub Copilot Conectado", + "githubCopilotNotConnected": "GitHub Copilot No conectado", + "loginWithGitHub": "Iniciar sesión con GitHub", + "loggingIn": "Iniciando sesión...", + "githubCopilotClientId": "Personalizado Client ID", + "githubCopilotClientIdHint": "Opcional. Déjelo vacío para usar el valor predeterminado integrado Client ID. Solo afecta a la autenticación GitHub Copilot.", + "githubCopilotLoginTip": "Autorice a DeepChat a acceder a su suscripción GitHub Copilot. Se requieren permisos 'read:user' y 'read:org' para acceder al Copilot API.", + "loginSuccess": "Iniciar sesión exitosamente", + "loginFailed": "Error al iniciar sesión", + "tokenValid": "El token es válido", + "tokenInvalid": "El token no es válido", + "disconnect": "Desconectar", + "disconnected": "Desconectado exitosamente", + "disconnectFailed": "Falló la desconexión", + "keyStatus": { + "usage": "Usado", + "remaining": "Cuota restante" + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "bedrockLimitTip": "* Solo se admite Anthropic Claude (incluidos los modelos Opus, Sonnet y Haiku)", + "bedrockVerifyTip": "DeepChat utiliza Claude 3.5 Sonnet para verificación. Si no tiene permiso para invocar, la verificación fallará. Esto no afectará el uso de otros modelos.", + "center": { + "title": "Centro de proveedores", + "description": "Administre conexiones, modelos y configuración avanzada de provider.", + "noApiUrl": "No hay API URL configurado", + "enabledModels": "Modelos {count} habilitados", + "noAdvancedConfig": "Este provider no tiene configuración avanzada adicional.", + "status": { + "connected": "Conectado", + "keyMissing": "Falta la llave", + "disabled": "Discapacitado", + "local": "locales" + }, + "tabs": { + "connection": "Conectar", + "models": "Modelos", + "advanced": "Avanzado" + } + } + }, + "knowledgeBase": { + "title": "Configuración de la base de conocimientos", + "addKnowledgeBase": "Agregar base de conocimientos", + "selectKnowledgeBaseType": "Por favor seleccione el tipo de base de conocimientos para agregar", + "difyDescription": "La base de conocimientos Dify le ayuda a gestionar y utilizar datos de documentos", + "comingSoon": "Próximamente", + "featureNotAvailable": "Esta función aún no está disponible", + "addDifyConfig": "Agregar configuración Dify", + "apiKey": "API Key", + "datasetId": "ID del conjunto de datos", + "endpoint": "API Endpoint", + "configAdded": "Configuración agregada", + "configAddedDesc": "La configuración {name} se ha agregado correctamente", + "addConfig": "Agregar configuración", + "moreComingSoon": "Próximamente más tipos de bases de conocimientos", + "configUpdated": "Configuración actualizada", + "configUpdatedDesc": "La configuración {name} se ha actualizado correctamente", + "descriptionPlaceholder": "Ejemplo: base de conocimientos de documentación de productos de la empresa", + "ragflowTitle": "RAGFlow Base de conocimientos", + "ragflowDescription": "RAGFlow es un potente sistema de gestión de base de conocimientos que admite múltiples métodos de recuperación y funciones de gestión de documentos.", + "addRagflowConfig": "Agregar configuración RAGFlow", + "editRagflowConfig": "Editar configuración RAGFlow", + "dify": "Dify Base de conocimientos", + "editDifyConfig": "Modificar la configuración Dify", + "fastgptTitle": "FastGPT Base de conocimientos", + "fastgptDescription": "FastGPT es un potente sistema de gestión de base de conocimientos que admite múltiples métodos de recuperación y funciones de gestión de documentos.", + "addFastGptConfig": "Agregar configuración FastGPT", + "editFastGptConfig": "Editar configuración FastGPT", + "builtInKnowledgeTitle": "Base de conocimientos incorporada", + "builtInKnowledgeDescription": "La base de conocimientos integrada proporciona algunas implementaciones simples que habilitan algunas funciones básicas en un entorno fuera de línea.", + "addBuiltinKnowledgeConfig": "Agregar configuración de base de conocimientos integrada", + "editBuiltinKnowledgeConfig": "Editar la configuración de la base de conocimientos integrada", + "descriptionDesc": "Descripción de la base de conocimientos para que la IA decida si recupera esta base de conocimientos", + "embeddingModel": "Insertar modelo", + "selectEmbeddingModel": "Seleccione un modelo para insertar", + "selectEmbeddingModelHelper": "Está prohibido incrustar modelos después de la creación de la base de conocimientos.", + "rerankModel": "Reordenar el modelo", + "selectRerankModel": "Seleccione el modelo de rerank", + "chunkSize": "Tamaño del bloque", + "chunkOverlap": "Tamaño superpuesto", + "fragmentsNumber": "Número de fragmentos de documentos solicitados", + "chunkSizeHelper": "Corte el documento en segmentos, el tamaño de cada segmento no puede exceder el límite de contexto del modelo", + "chunkOverlapHelper": "La cantidad de contenido repetido entre bloques de texto adyacentes garantiza que todavía exista una conexión contextual entre bloques de texto segmentados, mejorando el efecto general del procesamiento del modelo de textos largos.", + "fragmentsNumberHelper": "Cuantos más fragmentos del documento solicitado, más información contiene, pero más tokens debe consumirse", + "modelNotFound": "Proveedor de servicios {provider} o modelo {model} no encontrado", + "modelNotFoundDesc": "Asegúrese de que el modelo esté configurado correctamente y que esté habilitado. \nPuede verificar la configuración del modelo en la configuración del servicio provider.", + "removeBuiltinKnowledgeConfirmTitle": "¿Confirmar para eliminar la base de conocimientos integrada {name}?", + "removeBuiltinKnowledgeConfirmDesc": "Al eliminar la configuración de la base de conocimientos integrada, se eliminarán todos los datos relevantes y no se podrán restaurar. Por favor tenga cuidado.", + "advanced": "Opciones avanzadas", + "dimensions": "Incrustar dimensiones", + "dimensionsPlaceholder": "Insertar tamaño de dimensión, como 1024", + "autoDetectDimensions": "Detectar automáticamente dimensiones incrustadas", + "autoDetectHelper": "Detecta automáticamente dimensiones incrustadas, consume una pequeña cantidad de tokens.", + "dimensionsHelper": "Asegúrese de que el modelo admita el tamaño de dimensión de inserción establecido", + "autoDetectDimensionsError": "Detectar automáticamente fallas en las dimensiones integradas", + "normalized": "Normalización L2", + "normalizedHelper": "Confirme que el modelo admite la normalización L2 de los vectores de salida.", + "chunkSizePlaceholder": "Valor predeterminado, no se recomienda ninguna modificación", + "chunkOverlapPlaceholder": "Valor predeterminado, no se recomienda ninguna modificación", + "return": "volver", + "uploadHelper": "Haga clic para cargar o arrastre el archivo aquí", + "fileSupport": "Admite otros formatos {accept} y {count}", + "searchKnowledge": "Buscar en la base de conocimientos", + "searchKnowledgePlaceholder": "Por favor ingrese el contenido de la consulta", + "noData": "Aún no hay datos", + "file": "documento", + "uploadProcessing": "Subiendo", + "uploadCompleted": "Carga completada", + "reAdd": "Volver a subir", + "uploadError": "Error al subir", + "processing": "Subiendo", + "paused": "Pausa de carga", + "unknown": "Estado desconocido", + "delete": "eliminar", + "reason": "razón", + "deleteSuccess": "Eliminar exitosamente", + "copy": "copiar", + "copySuccess": "Copiar con éxito", + "source": "fuente", + "resumeAllPausedTasks": "Recuperación con un clic", + "pauseAllRunningTasks": "Pausa con un clic", + "reAddFile": { + "title": "Confirmación de recarga", + "content": "¿Estás seguro de volver a cargar el archivo \"{fileName}\"?" + }, + "deleteFile": { + "title": "Eliminar archivo de confirmación", + "content": "¿Está seguro de eliminar el archivo \"{fileName}\"? \nEsta operación no se restablece." + }, + "dialog": { + "beforequit": { + "title": "Confirmación de salida", + "description": "Hay una tarea de base de conocimientos en ejecución. ¿Está seguro de salir del software? \nLas tareas canceladas se pueden restaurar después de reiniciar el software.", + "cancel": "Cancelar", + "confirm": "confirmar" + } + }, + "searchError": "Consulta fallida", + "separators": "Separador de bloques", + "separatorsHelper": "Delimitador de segmentación de documentos, un delimitador único está entre comillas dobles (\"\") y los delimitadores están separados por comas (,)", + "invalidSeparators": "Separador no válido", + "selectLanguage": "Seleccione un preajuste", + "separatorsPreset": "Cargando ajustes preestablecidos", + "nowledgeMem": { + "apiKey": "API Key", + "apiKeyHint": "Opcional. Si su servicio requiere una clave API, ingrésela aquí.", + "baseUrl": "Base URL", + "configuration": "Configuración", + "description": "Exportar conversaciones al servicio Nowledge Mem.", + "resetConfig": "Reiniciar", + "saveConfig": "Guardar", + "seconds": "segundos", + "testConnection": "Conexión de prueba", + "timeout": "Tiempo de espera", + "title": "Nowledge Mem Exportar" + } + }, + "mcp": { + "title": "MCP Configuración", + "description": "Administrar y configurar servidores y herramientas MCP (Protocolo de contexto modelo)", + "enabledTitle": "Habilitar MCP", + "enabledDescription": "Habilitar o deshabilitar la funcionalidad y herramientas MCP", + "enableToAccess": "Habilite MCP para acceder a las opciones de configuración", + "marketplace": "Vaya al MCP Market para realizar la instalación con un solo clic", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Detalles técnicos", + "httpServer": "Servidor HTTP", + "localProcess": "Proceso local", + "restartServer": "Reiniciar el servidor", + "viewLogs": "Ver registros", + "starting": "Comenzando", + "error": "error", + "tabs": { + "servers": "Servidores", + "tools": "Herramientas", + "prompts": "Prompts", + "resources": "Recursos" + }, + "serverList": "Lista de servidores", + "addServer": "Agregar servidor", + "running": "corriendo", + "stopped": "Detenido", + "stopServer": "Detener servidor", + "startServer": "Iniciar servidor", + "noServersFound": "No se encontraron servidores", + "addServerDialog": { + "title": "Agregar servidor", + "description": "Configurar un nuevo servidor MCP" + }, + "editServerDialog": { + "title": "Editar servidor", + "description": "Editar la configuración del servidor MCP" + }, + "serverForm": { + "name": "Nombre del servidor", + "namePlaceholder": "Introduzca el nombre del servidor", + "nameRequired": "El nombre del servidor es obligatorio.", + "type": "Tipo de servidor", + "typePlaceholder": "Seleccione el tipo de servidor", + "typeStdio": "Entrada y salida estándar (Stdio)", + "typeSse": "Eventos enviados por el servidor (SSE)", + "typeInMemory": "En memoria", + "typeHttp": "Transmisión de solicitudes HTTP (HTTP)", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Ingrese la base del servidor URL (por ejemplo, http://localhost:3000)", + "command": "Comando", + "commandPlaceholder": "Introduzca el comando", + "commandRequired": "Se requiere comando", + "args": "Argumentos", + "argsPlaceholder": "Introduzca un argumento por línea", + "addArg": "Agregar argumento", + "argPlaceholder": "Introduzca el valor del argumento", + "argsRequired": "Se requieren argumentos", + "env": "Variables de entorno", + "envPlaceholder": "Ingrese las variables de entorno en formato JSON", + "envInvalid": "Las variables de entorno deben ser válidas JSON", + "description": "Descripción", + "descriptionPlaceholder": "Ingrese la descripción del servidor", + "descriptions": "Descripción", + "descriptionsPlaceholder": "Ingrese la descripción del servidor", + "icon": "Icono", + "iconPlaceholder": "Ingresar icono", + "icons": "Icono", + "iconsPlaceholder": "Ingresar icono", + "autoApprove": "Aprobación automática", + "autoApproveAll": "Todos", + "autoApproveRead": "leer", + "autoApproveWrite": "escribir", + "autoApproveHelp": "Seleccione tipos de operación para aprobar automáticamente sin confirmación del usuario", + "submit": "Enviar", + "add": "Añadir", + "update": "Actualizar", + "cancel": "Cancelar", + "jsonConfigIntro": "Puede pegar una configuración JSON directamente o elegir configurar el servidor manualmente.", + "jsonConfig": "JSON Configuración", + "jsonConfigPlaceholder": "Pegue la configuración de su servidor MCP en formato JSON", + "jsonConfigExample": "JSON Ejemplo de configuración", + "parseSuccess": "Configuración analizada", + "configImported": "Configuración importada exitosamente", + "parseError": "Error de análisis", + "skipToManual": "Saltar a configuración manual", + "parseAndContinue": "Analizar y continuar", + "jsonParseError": "JSON error en el análisis", + "browseMarketplace": "Explorar el mercado MCP", + "imageModel": "Modelo de visión", + "customHeadersParseError": "Error al analizar el encabezado personalizado", + "customHeaders": "Encabezados de solicitud personalizados", + "clickToEdit": "Haga clic para editar y ver el contenido completo.", + "invalidKeyValueFormat": "Formato de encabezado de solicitud incorrecto; verifique si la entrada es correcta.", + "npmRegistry": "Personalizado NPM Registry", + "npmRegistryPlaceholder": "Configure un NPM Registry personalizado, deje que el sistema seleccione automáticamente el más rápido", + "browseHigress": "Ver Higress MCP Mercado", + "selectFolderError": "Error de selección de carpeta", + "folders": "Carpetas permitidas", + "addFolder": "Agregar carpeta", + "noFoldersSelected": "No se seleccionaron carpetas", + "useE2B": "Habilitar zona de pruebas E2B", + "e2bDescription": "Ejecute el código Python usando la zona de pruebas E2B", + "e2bApiKey": "E2B Clave API", + "e2bApiKeyPlaceholder": "Ingrese aquí sus claves de API E2B, como e2b_1111xx*******", + "e2bApiKeyHelp": "Vaya a e2b.dev para obtener su ApiKey", + "e2bApiKeyRequired": "Se debe ingresar ApiKey para habilitar la función E2B" + }, + "deleteServer": "Eliminar servidor", + "editServer": "Editar servidor", + "setDefault": "Establecer como predeterminado", + "removeDefault": "Eliminar valor predeterminado", + "isDefault": "Servidor predeterminado", + "default": "Predeterminado", + "setAsDefault": "Establecer como predeterminado", + "removeServer": "Quitar servidor", + "autoStart": "Inicio automático", + "confirmRemoveServer": "¿Está seguro de que desea eliminar el servidor {name}? Esta acción no se puede deshacer.", + "removeServerDialog": { + "title": "Eliminar servidor" + }, + "confirmDelete": { + "title": "Confirmar eliminación", + "description": "¿Está seguro de que desea eliminar el servidor {name}? Esta acción no se puede deshacer.", + "confirm": "Eliminar", + "cancel": "Cancelar" + }, + "resetToDefault": "Restablecer los valores predeterminados", + "resetConfirmTitle": "Restablecer los servidores predeterminados", + "resetConfirmDescription": "Esto restaurará todos los servidores predeterminados y mantendrá sus servidores personalizados. Se perderán todas las modificaciones realizadas a los servidores predeterminados.", + "resetConfirm": "Reiniciar", + "builtInServers": "Servidores incorporados", + "customServers": "Servidores personalizados", + "builtIn": "Incorporado", + "cannotRemoveBuiltIn": "No se puede eliminar el servidor integrado", + "builtInServerCannotBeRemoved": "Los servidores integrados no se pueden eliminar, solo se pueden modificar los parámetros y las variables de entorno", + "maxDefaultServersReached": "Sólo se pueden configurar 3 servidores predeterminados como máximo", + "removeDefaultFirst": "Primero elimine algunos servidores predeterminados", + "higressMarket": "Vaya a Higress MCP Instalación", + "totalServers": "Servidores totales", + "npmRegistry": { + "title": "NPM Fuente", + "currentSource": "Fuente actual", + "cached": "En caché", + "lastChecked": "Última comprobación", + "refresh": "Actualizar", + "advanced": "Avanzado", + "advancedSettings": "Configuración avanzada", + "advancedSettingsDesc": "Configure las opciones avanzadas del NPM registry, incluida la detección automática y la configuración de fuente personalizada", + "autoDetect": "Detectar automáticamente la fuente óptima", + "autoDetectDesc": "Detecta y utiliza automáticamente el NPM registry más rápido al iniciar", + "customSource": "Fuente personalizada", + "customSourcePlaceholder": "Introduzca personalizado NPM registry URL", + "currentCustom": "Fuente personalizada actual", + "justNow": "Justo ahora", + "minutesAgo": "Hace {minutes} minutos", + "hoursAgo": "Hace {hours} horas", + "daysAgo": "{days} hace días", + "refreshSuccess": "NPM registry actualizado exitosamente", + "refreshSuccessDesc": "NPM registry óptimo redestectado y actualizado", + "refreshFailed": "NPM registry error de actualización", + "autoDetectUpdated": "Configuración de detección automática actualizada", + "autoDetectEnabled": "Detección automática óptima NPM registry habilitada", + "autoDetectDisabled": "Detección automática deshabilitada, usará el registro predeterminado", + "updateFailed": "Error al actualizar la configuración", + "customSourceSet": "Conjunto de fuentes personalizado", + "customSourceSetDesc": "Conjunto NPM registry personalizado: {registry}", + "customSourceCleared": "Fuente personalizada borrada", + "customSourceClearedDesc": "Personalizado NPM registry borrado, utilizará la detección automática", + "invalidUrl": "URL no válido", + "invalidUrlDesc": "Ingrese una dirección HTTP o HTTPS válida", + "testing": "Prueba NPM registry", + "testingDesc": "Probando la conectividad a {registry}...", + "testFailed": "NPM registry prueba fallida", + "testFailedDesc": "No se puede conectar a {registry}, error: {error}. Verifique si el URL es correcto o si la conexión de red.", + "redetectingOptimal": "Re-detectando el NPM registry óptimo...", + "redetectComplete": "Redetección completada", + "redetectCompleteDesc": "Detectado y establecido el NPM registry óptimo actual", + "redetectFailed": "La redetección falló", + "redetectFailedDesc": "No se puede volver a detectar el registro óptimo; utilizará la configuración predeterminada" + }, + "managedServerReadOnly": "Servicio gestionado DeepChat", + "managedServerReadOnlyDesc": "Administre la habilitación y los permisos desde la configuración del complemento propietario.", + "center": { + "title": "MCP Centro", + "running": "corriendo", + "builtIn": "Incorporado", + "custom": "personalizado", + "searchPlaceholder": "Buscar servidores MCP...", + "noResults": "No hay servidores MCP coincidentes", + "command": "Comando / URL", + "filters": { + "all": "Todos", + "running": "corriendo", + "stopped": "Detenido", + "builtIn": "Incorporado", + "custom": "personalizado" + } + } + }, + "about": { + "title": "Sobre nosotros", + "version": "Versión", + "checkUpdate": "Verificar actualización", + "checking": "Comprobando...", + "latestVersion": "Última versión" + }, + "display": { + "fontTitle": "Fuentes", + "fontFamily": "Fuente de interfaz", + "fontFamilyDesc": "Seleccione la fuente principal de la interfaz de usuario. Déjelo vacío para usar la pila integrada.", + "codeFontFamily": "fuente monoespaciada", + "codeFontFamilyDesc": "Se aplica a bloques de código y cualquier área monoespaciada.", + "fontDefaultLabel": "Predeterminado (pila incorporada)", + "fontSearchPlaceholder": "Buscar fuentes", + "fontSearchEmpty": "No hay fuentes coincidentes", + "fontReset": "Restablecer los valores predeterminados", + "fontSystemLoading": "Cargando fuentes del sistema...", + "fontUsageHint": "Algunas interfaces requieren reiniciar la aplicación para que surta efecto. Si la fuente no está disponible, automáticamente volverá a la fuente predeterminada.", + "fontSize": "Tamaño del texto", + "text-sm": "Pequeño", + "text-base": "Medio", + "text-lg": "Grande", + "text-xl": "XL", + "text-2xl": "XXL", + "floatingButton": "Botón flotante", + "floatingButtonDesc": "Muestre un botón flotante en el escritorio para activar rápidamente la ventana de la aplicación" + }, + "shortcuts": { + "title": "Configuración de teclas de acceso directo", + "pressKeys": "Presione las teclas", + "pressEnterToSave": "Presione Enter para guardar, Esc para cancelar", + "noModifierOnly": "No se puede usar la tecla modificadora sola como atajo", + "keyConflict": "Conflicto de teclas de acceso directo, elija otra combinación", + "clearShortcut": "Borrar acceso directo", + "zoomIn": "Acercar", + "zoomOut": "alejar", + "zoomReset": "Restablecer zoom", + "goSettings": "Abrir configuración", + "cleanHistory": "Borrar historial de chat", + "deleteConversation": "Eliminar conversación", + "hideWindow": "Ocultar ventana", + "quitApp": "Salir de la aplicación", + "toggleSidebar": "Alternar barra lateral", + "toggleWorkspace": "Alternar espacio de trabajo", + "newWindow": "Abrir una nueva ventana", + "showHideWindow": "Mostrar/Ocultar ventana", + "newConversation": "Nueva conversación", + "quickSearch": "Búsqueda destacada", + "closeWindow": "Cerrar la ventana actual" + }, + "acp": { + "title": "ACP Agents", + "description": "Administrar Agent Client Protocol agents local iniciado por DeepChat.", + "enabledTitle": "Habilitar ACP", + "enabledDescription": "Cuando esté habilitado, los ACP agents configurados aparecerán como modelos en el selector.", + "useBuiltinRuntimeTitle": "Utilice el tiempo de ejecución integrado de DeepChat", + "useBuiltinRuntimeDescription": "Cuando está habilitado, omite los comandos uv y de nodo del sistema, utilizando las versiones incluidas de DeepChat.", + "enableToAccess": "Habilite ACP para configurar agents.", + "registryInstallEntry": "Instalar Agent", + "registryInstallEntryDescription": "Busque e instale agents desde el Registro ACP, luego regrese aquí para habilitarlos y configurarlos.", + "addCustomAgent": "Agregar Agent personalizado", + "customEmpty": "Aún no hay agents personalizado.", + "customDeleteConfirm": "¿Eliminar agent \"{name}\" personalizado?", + "builtinSectionTitle": "Incorporado Agents", + "builtinSectionDescription": "Cada agent integrado puede tener múltiples perfiles de inicio. Solo los agents habilitados con un perfil activo aparecen en la lista de modelos.", + "builtinHint": "Inicie {name} con esta configuración.", + "disabledBadge": "Discapacitado", + "manageProfiles": "Perfiles", + "addProfile": "Agregar perfil", + "activeProfile": "Perfil activo", + "profilePlaceholder": "Seleccione un perfil", + "profileSwitched": "Perfil cambiado", + "customSectionTitle": "Personalizado Agents", + "customSectionDescription": "Envuelva cualquier comando compatible con ACP como una entrada de modelo reutilizable.", + "mcpAccessTitle": "Servidores MCP permitidos", + "mcpAccessEmpty": "Actualmente no existe ningún MCP opcional.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "Compartido MCP", + "sharedMcpDescription": "Todos los ACP agents comparten la misma selección de acceso MCP.", + "installedSectionTitle": "Instalado Agents", + "installedSectionDescription": "Aquí solo aparece el registro instalado agents para habilitación, inspección y anulaciones de entorno.", + "installedCount": "{count} instalado", + "installedEmptyTitle": "Aún no hay registro instalado agents", + "installedEmptyDescription": "Primero instale un agent desde el Registro ACP, luego configúrelo aquí.", + "registryCount": "{count} agents", + "registryEmpty": "No hay ningún registro agents disponible para los filtros actuales.", + "registryOverlayEmpty": "Ningún agents coincide con los filtros actuales.", + "registryRefresh": "Actualizar registro", + "registryRepair": "Reparación", + "registryInstallAction": "Instalar", + "registryUninstallAction": "Desinstalar", + "registryUninstallConfirm": "¿Desinstalar \"{name}\"?", + "registryUninstallDescription": "DeepChat desactivará este agent y borrará los datos de instalación administrados localmente cuando corresponda. Puede instalarlo nuevamente más tarde desde el Registro ACP.", + "registryUninstallFailed": "No se pudo desinstalar agent", + "registryInstallTitle": "ACP Registro", + "registryInstallDescription": "Busque, filtre e instale ACP agents. Vuelva a configurarlos en la configuración después de la instalación.", + "registryLearnMore": "Más información", + "registryRepository": "Repositorio", + "registrySearchPlaceholder": "Buscar ACP Registry Agents...", + "installFilters": { + "all": "Todos", + "installed": "Instalado", + "notInstalled": "No instalado" + }, + "filters": { + "all": "Todos los estados", + "enabled": "Solo habilitado", + "installed": "Solo instalado", + "attention": "necesita atencion" + }, + "envOverrideTitle": "Anulaciones de variables de entorno", + "envOverridePlaceholder": "Un KEY=VALUE por línea", + "installState": { + "installed": "Instalado", + "installing": "Instalación", + "error": "La instalación falló", + "notInstalled": "No instalado" + }, + "loading": "Cargando datos ACP...", + "none": "Ninguno", + "saveSuccess": "Configuración guardada", + "saveFailed": "No se pudo guardar agent", + "deleteSuccess": "Eliminado exitosamente", + "initialize": "Inicializar", + "initializing": "Inicializando...", + "initializeDescription": "Terminal abierta con comandos de inicialización", + "initializeSuccess": "Inicialización iniciada", + "initializeFailed": "La inicialización falló", + "missingFieldsTitle": "El nombre y el comando son obligatorios.", + "missingFieldsDesc": "Complete el nombre y el comando antes de guardar.", + "command": "Comando", + "commandPlaceholder": "Ruta ejecutable o script", + "args": "Argumentos", + "argsPlaceholder": "Opcional, separado por espacios. Utilice comillas para mantener unidos los argumentos.", + "env": "Variables de entorno", + "addEnv": "Agregar variable", + "envKeyPlaceholder": "KEY", + "envValuePlaceholder": "VALUE", + "profileDialog": { + "addBuiltinTitle": "Agregar perfil {name}", + "editBuiltinTitle": "Editar perfil {name}", + "addCustomTitle": "Agregar Agent personalizado", + "editCustomTitle": "Editar personalizado Agent", + "builtinHint": "Utilice diferentes ajustes preestablecidos para cada escenario y cámbielos en el selector.", + "customHint": "Proporcione el comando, los argumentos y las variables de entorno para iniciar su agent.", + "profileName": "Nombre del perfil", + "profileNamePlaceholder": "por ej. Estación de trabajo", + "agentName": "Agent Nombre", + "agentNamePlaceholder": "por ej. Mi local ACP" + }, + "profileManager": { + "title": "Perfiles", + "description": "Cambie, edite o elimine perfiles de inicio guardados.", + "count": "{count} Perfiles", + "empty": "Aún no hay perfiles.", + "active": "Activo", + "setActive": "Establecer activo", + "deleteConfirm": "¿Eliminar perfil \"{name}\"?", + "cannotDeleteTitle": "Mantenga al menos un perfil", + "cannotDeleteDesc": "El agents integrado requiere al menos una configuración.", + "noAgent": "Seleccione un agent para administrar sus perfiles." + }, + "terminal": { + "title": "Terminal de inicialización", + "waiting": "Esperando a que comience la inicialización...", + "starting": "Iniciando inicialización...", + "close": "Cerrar", + "closing": "Cerrando...", + "exitSuccess": "Proceso completado exitosamente (código de salida: {code})", + "exitError": "El proceso salió con error (código de salida: {code})", + "processError": "error de proceso", + "paste": "Pegar", + "pasteError": "No se pudo pegar desde el portapapeles", + "status": { + "idle": "inactivo", + "running": "corriendo", + "completed": "Completado", + "error": "error" + } + }, + "dependency": { + "title": "Dependencias externas faltantes", + "description": "Es necesario instalar las siguientes dependencias antes de la inicialización.", + "installCommands": "Comandos de instalación", + "downloadUrl": "Enlace de descarga", + "copy": "Copiar", + "copied": "Copiado al portapapeles", + "copyFailed": "No se pudo copiar" + }, + "debug": { + "title": "ACP Depurar", + "description": "Envíe llamadas ACP sin procesar a \"{name}\" y observe las respuestas.", + "entry": "Depurar", + "healthCheck": "Control de salud", + "healthChecking": "Comprobando...", + "healthCheckFailed": "Error en el control de salud", + "workdirPlaceholder": "Use agent predeterminado si está vacío", + "close": "Cerrar", + "customMethod": "Nombre del método personalizado", + "customMethodPlaceholder": "por ej. sesión/ping", + "payloadHint": "Edite el cuerpo JSON antes de enviarlo.", + "format": "Formato JSON", + "resetTemplate": "Restablecer plantilla", + "clearHistory": "Borrar historial", + "send": "Enviar solicitud", + "sending": "Enviando...", + "processReady": "Proceso listo", + "processNotReady": "Inicializar para comenzar", + "needInitialize": "Ejecute inicializar primero", + "events": "Eventos", + "eventCount": "{count} artículos", + "empty": "Aún no hay eventos de depuración.", + "parseError": "Carga útil JSON no válida", + "customMethodRequired": "Proporcionar un nombre de método para llamadas de extensión", + "requestFailed": "Solicitud fallida", + "methods": { + "initialize": "inicializar", + "newSession": "sesión/nuevo", + "loadSession": "sesión/carga", + "prompt": "sesión/prompt", + "cancel": "sesión/cancelar", + "setSessionMode": "sesión/establecer modo", + "setSessionModel": "sesión/setModel", + "extMethod": "extensión/método", + "extNotification": "extensión/notificación" + }, + "eventKinds": { + "request": "Solicitar", + "response": "Respuesta", + "notification": "Notificación", + "permission": "Permiso", + "lifecycle": "Ciclo de vida", + "stderr": "stderr", + "error": "error" + } + } + }, + "rateLimit": { + "title": "Límite de tarifa", + "description": "Intervalo de solicitud de control para evitar exceder los límites de API", + "intervalLimit": "Intervalo de solicitud", + "intervalUnit": "segundos", + "intervalHelper": "Intervalo mínimo entre solicitudes, deshabilite la limitación de velocidad si no es necesario", + "lastRequestTime": "Última solicitud", + "queueLength": "Longitud de la cola", + "nextAllowedTime": "Siguiente permitido", + "never": "nunca", + "justNow": "Justo ahora", + "secondsAgo": "hace s", + "minutesAgo": "hace m", + "immediately": "ahora", + "secondsLater": "s más tarde", + "confirmDisableTitle": "Confirmar deshabilitar límite de tarifa", + "confirmDisableMessage": "El valor no puede ser menor o igual a 0. ¿Quiere desactivar la limitación de velocidad?", + "confirmDisable": "Desactivar límite", + "disabled": "Límite de velocidad deshabilitado", + "disabledDescription": "La limitación de velocidad ha sido deshabilitada" + }, + "promptSetting": { + "resetToDefault": "Restablecer al prompt predeterminado", + "resetToDefaultSuccess": "Se ha restablecido el prompt del sistema predeterminado", + "resetToDefaultFailed": "No se pudo restablecer. Inténtalo de nuevo" + }, + "skills": { + "title": "Skills", + "description": "Gestiona y configura los módulos Skills del asistente de IA", + "draftSuggestions": { + "title": "Sugerir Skill Drafts después de la tarea", + "description": "Cuando termine una tarea, permite que el Agent sugiera Skill Drafts temporales al detectar flujos reutilizables. Los drafts se guardan primero en un directorio temporal y debes decidir manualmente si importarlos e instalarlos." + }, + "openFolder": "Abrir carpeta", + "addSkill": "Agregar Skill", + "empty": "Aún no hay Skills", + "emptyHint": "Haz clic en \"Añadir Skill\" para instalar una nueva Skill", + "noResults": "No se han encontrado Skills coincidentes", + "search": "Buscar Skills...", + "count": "{count} skills", + "install": { + "title": "Instalar Skill", + "description": "Elige cómo instalar la Skill", + "tabFolder": "Carpeta", + "tabZip": "ZIP", + "tabUrl": "URL", + "fromFolder": "Instalar desde carpeta", + "selectFolder": "Seleccionar carpeta de Skill", + "folderHint": "Haz clic para seleccionar una carpeta de Skill", + "folderTip": "Permite importar directamente desde otros clientes, como ~/.claude/skills/", + "zipHint": "Haga clic para seleccionar un archivo ZIP", + "urlPlaceholder": "Introduce la URL de descarga ZIP de la Skill", + "urlHint": "Introduce el enlace de descarga del paquete de Skill", + "installButton": "Instalar", + "installing": "Instalando...", + "success": "Instalación exitosa", + "successMessage": "La Skill {name} se ha instalado correctamente", + "failed": "Instalación fallida", + "dragNotSupported": "No se admite el arrastre, haga clic para seleccionar" + }, + "delete": { + "title": "Eliminar Skill", + "description": "¿Seguro que quieres eliminar la Skill {name}? Esta acción no se puede deshacer.", + "success": "Eliminación exitosa", + "successMessage": "La Skill {name} se ha eliminado correctamente", + "failed": "Eliminación fallida" + }, + "card": { + "scripts": "{count} guiones", + "env": "{count} entorno", + "pythonShort": "Py", + "nodeShort": "Nodo" + }, + "edit": { + "title": "Editar Skill", + "placeholder": "Edita aquí el contenido de la Skill...", + "readFailed": "No se pudo leer", + "success": "Guardado exitosamente", + "failed": "No se pudo guardar", + "name": "Nombre", + "namePlaceholder": "Nombre de la Skill", + "nameHint": "El nombre de la Skill no se puede cambiar después de crearla", + "description": "Descripción", + "descriptionPlaceholder": "Descripción de la Skill", + "allowedTools": "Herramientas permitidas", + "allowedToolsPlaceholder": "Leer, Grep, Bash", + "allowedToolsHint": "Lista de nombres de herramientas separados por comas", + "content": "Contenido de la Skill", + "runtimeTitle": "Tiempo de ejecución", + "runtimeHint": "Elige cómo resuelven Python y Node los scripts integrados.", + "pythonRuntime": "Python Tiempo de ejecución", + "nodeRuntime": "Tiempo de ejecución del nodo", + "envTitle": "Variables de entorno", + "envWarning": "Solo se enmascaran en la UI. Los valores se guardan como texto plano en el archivo sidecar de la Skill.", + "scriptsTitle": "Guiones incluidos", + "scriptsHint": "Solo los scripts de scripts/ se exponen al Agent mediante skill_run.", + "noScripts": "No se detectaron scripts ejecutables", + "scriptEnabled": "Habilitado", + "scriptDescription": "Anulación de descripción", + "scriptDescriptionPlaceholder": "Descripción opcional mostrada al agent", + "runtime": { + "auto": "Respaldo automático", + "system": "Tiempo de ejecución del sistema", + "builtin": "Tiempo de ejecución incorporado" + }, + "files": "Contenido de la carpeta", + "noFiles": "Sin archivos" + }, + "conflict": { + "title": "La Skill ya existe", + "description": "Ya existe una Skill llamada \"{name}\". ¿Quieres sobrescribirla?", + "overwrite": "Sobrescribir" + }, + "sync": { + "title": "Sincronizar", + "import": "Importar desde otras herramientas...", + "export": "Exportar", + "importTitle": "Importar Skills desde otras herramientas", + "exportTitle": "Exportar Skills a otras herramientas", + "importDescription": "Importar Skills desde Claude Code, Cursor y otras herramientas", + "exportDescription": "Exportar Skills a otras herramientas de asistente de IA", + "step1Title": "Seleccionar herramienta de origen", + "step2Title": "Seleccionar Skills para importar", + "step3Title": "Confirmar importación", + "exportStep1Title": "Seleccionar Skills para exportar", + "exportStep2Title": "Seleccionar herramienta de destino", + "exportStep3Title": "Confirmar exportación", + "scanning": "Escaneando...", + "noToolsFound": "No se detectaron herramientas instaladas", + "skillCount": "{count} Skills detectadas", + "notInstalled": "No instalado", + "selectedCount": "{count} seleccionado", + "selectAll": "Seleccionar todo", + "deselectAll": "Deseleccionar todo", + "conflict": "Conflicto", + "conflictDescription": "Ya existe una Skill llamada \"{name}\"", + "batchAction": "Acción por lotes", + "skip": "Saltar", + "skipAll": "Saltar todo", + "overwrite": "Sobrescribir", + "overwriteAll": "Sobrescribir todo", + "rename": "Cambiar nombre", + "renameAll": "Cambiar nombre a todo", + "warnings": "Advertencias de conversión", + "previewing": "Vista previa...", + "importing": "Importando ({current}/{total})...", + "exporting": "Exportando ({current}/{total})...", + "importButton": "Importar", + "exportButton": "Exportar", + "exportWarnings": "Advertencias de exportación", + "noConflicts": "Sin conflictos", + "readyToExport": "Listo para exportar {count} Skills", + "kiroOptions": "Kiro Opciones de exportación", + "kiroInclusion": "Modo de inclusión", + "kiroOnDemand": "Bajo demanda", + "kiroOnDemandDesc": "Sólo se utiliza cuando el usuario lo solicita explícitamente", + "kiroAlways": "siempre", + "kiroAlwaysDesc": "Incluido automáticamente en cada conversación.", + "kiroConditional": "Condicional", + "kiroConditionalDesc": "Incluido automáticamente según la coincidencia de patrones de archivos", + "kiroFilePatterns": "Patrones de archivos", + "kiroFilePatternsPlaceholder": "por ejemplo, **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Patrones globales separados por comas", + "scanError": "Error de escaneo", + "previewError": "Error en la vista previa", + "loadToolsError": "No se pudo cargar la lista de herramientas", + "importSuccess": "Importación exitosa", + "importSuccessMessage": "Se han importado correctamente {count} Skills", + "importPartial": "Éxito de importación parcial", + "importPartialMessage": "{success} tuvo éxito, {skipped} se omitió, {failed} falló", + "importError": "Importación fallida", + "exportSuccess": "Exportación exitosa", + "exportSuccessMessage": "Se han exportado correctamente {count} Skills", + "exportPartial": "Éxito parcial de exportación", + "exportPartialMessage": "{success} tuvo éxito, {skipped} se omitió, {failed} falló", + "exportError": "Exportación fallida", + "resultSuccess": "Operación exitosa", + "resultPartial": "Éxito parcial", + "imported": "Importado", + "exported": "Exportado", + "skipped": "Saltado", + "failed": "Fallido", + "failedItems": "Artículos fallidos" + }, + "syncStatus": { + "title": "Herramientas externas", + "description": "Importar Skills desde otros asistentes de programación con IA", + "scanning": "Buscando herramientas...", + "noToolsFound": "No se detectaron herramientas externas", + "skillCount": "{count} Skills", + "notInstalled": "No instalado", + "notAvailable": "No disponible", + "noSkills": "Sin Skills", + "import": "Importar", + "syncing": "Importando..." + }, + "syncPrompt": { + "title": "Nuevas Skills detectadas", + "description": "Hemos encontrado nuevas Skills en otros asistentes de programación con IA. ¿Quieres importarlas?", + "dontShowAgain": "No vuelvas a mostrar esto", + "skip": "Saltar", + "importSelected": "Importar seleccionado" + } + }, + "environments": { + "title": "Ambientes", + "description": "Revise los directorios de proyectos utilizados en sus sesiones, ábralos rápidamente o establezca uno como predeterminado para nuevos chats.", + "default": { + "title": "Directorio predeterminado", + "description": "Los chats nuevos preseleccionan este directorio a menos que elijas manualmente uno diferente.", + "empty": "No se establece ningún directorio predeterminado." + }, + "history": { + "title": "Historia", + "description": "Aquí solo se enumeran los directorios que realmente fueron utilizados por las sesiones." + }, + "temp": { + "title": "Directorios temporales", + "description": "Los directorios bajo raíces temporales o espacios de trabajo administrados por aplicaciones se agrupan aquí y se ocultan de forma predeterminada." + }, + "actions": { + "refresh": "Actualizar", + "showMissing": "Mostrar faltante", + "open": "Abierto", + "setDefault": "Establecer predeterminado", + "clearDefault": "Borrar valor predeterminado", + "showTemp": "Mostrar temperatura", + "hideTemp": "Ocultar temperatura" + }, + "badges": { + "default": "Predeterminado", + "temp": "temperatura", + "missing": "desaparecido", + "notInHistory": "No en la historia" + }, + "meta": { + "sessions": "{count} sesiones", + "lastUsed": "Último uso: {value}", + "never": "nunca" + }, + "empty": { + "regular": "No hay entornos para mostrar.", + "temp": "Aún no hay entornos temporales." + }, + "errors": { + "openTitle": "No se pudo abrir el directorio" + } + }, + "remote": { + "title": "Remoto", + "description": "Configure el control remoto Telegram, Feishu / Lark, QQBot, Discord y WeChat iLink en un solo lugar.", + "telegram": { + "title": "Telegram", + "description": "Conecte un bot Telegram para mensajes directos, grupos y control remoto de temas.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Telegram robot token", + "botTokenDescription": "Ingrese el bot Telegram token usado para el control remoto Telegram." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Conecte un bot Feishu para mensajes directos, chats grupales e hilos temáticos.", + "brand": "Marca", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "App ID", + "appIdPlaceholder": "Feishu ID de aplicación", + "appSecret": "Secreto de la aplicación", + "appSecretPlaceholder": "Feishu secreto de la aplicación", + "verificationToken": "Ficha de verificación", + "verificationTokenPlaceholder": "Feishu verificación token", + "encryptKey": "Clave de cifrado (opcional)", + "encryptKeyPlaceholder": "Dejar vacío a menos que el cifrado de eventos esté habilitado", + "botUser": "Usuario del robot: {name} ({openId})", + "bindings": "Enlaces: {count}, usuarios emparejados: {pairedUserCount}", + "pairedUserOpenIds": "Usuario emparejado Open IDs", + "pairedUserOpenIdsPlaceholder": "por ej. ou_xxx, ou_yyy", + "accessRulesDescription": "Empareje primero un mensaje directo. En los grupos, solo los usuarios emparejados que {'@'} mencionen el bot pueden iniciar una sesión.", + "accessRule1": "Emparejar en un mensaje directo con /pair [código].", + "accessRule2": "En grupos y temas, el bot solo reacciona cuando un usuario emparejado {'@'} lo menciona." + }, + "discord": { + "title": "Discord", + "description": "Conecte un bot Discord para DMs, menciones de canales y control remoto con comando de barra.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Discord robot token", + "remoteControlDescription": "El control remoto Discord utiliza su propio bot token, puerta de enlace y flujo REST.", + "accessRule1": "Envíe /pair [código] en un DM o canal de destino para autorizar el punto final Discord actual.", + "accessRule2": "Los mensajes del canal solo entran en la conversación cuando se menciona el bot, lo que evita absorber el chat habitual." + }, + "sections": { + "credentials": "Credenciales", + "remoteControl": "Control remoto", + "notifications": "Notificaciones", + "accessRules": "Reglas de acceso" + }, + "remoteControl": { + "description": "Vincule cada punto final remoto a una sesión y mantenga la sesión disponible entre comandos.", + "allowedUserIds": "ID de usuario permitidos", + "allowedUserIdsPlaceholder": "por ej. 123456789, 987654321", + "defaultAgent": "Predeterminado Agent", + "defaultAgentPlaceholder": "Seleccione un agent", + "defaultWorkdir": "Directorio predeterminado", + "defaultWorkdirPlaceholder": "Seleccione un directorio predeterminado", + "defaultWorkdirHelper": "Directorio de trabajo para sesiones remotas. Obligatorio cuando el Agent predeterminado es ACP.", + "openPairDialog": "par", + "manageBindings": "Administrar enlaces", + "pairCode": "Código de par", + "noPairCode": "Ningún código de par activo", + "pairCodeExpiresAt": "Vence en {time}", + "pairDialogTitle": "{channel} Emparejamiento", + "pairDialogDescription": "Genere un código de emparejamiento y finalice el emparejamiento desde su chat de bot {channel}.", + "pairDialogInstructionTelegram": "Envíe este comando al bot Telegram:", + "pairDialogInstructionFeishu": "Envíe este comando al bot Feishu en un mensaje directo:", + "pairDialogInstructionDiscord": "Envíe este comando al bot Discord en un DM o canal de destino:", + "bindingsDialogTitle": "{channel} Encuadernaciones", + "bindingsDialogDescription": "Elimine los enlaces de puntos finales remotos uno por uno.", + "bindingsEmpty": "Aún no hay ataduras.", + "pairingSuccessTitle": "Emparejamiento completo", + "pairingSuccessDescription": "La lista de principales emparejados se ha actualizado.", + "pairDialogInstructionQQBot": "Envíe este comando al chat del bot QQ o al grupo QQ autorizado:", + "authorizedPrincipalsTitle": "Directores autorizados", + "authorizedPrincipalsDescription": "Estas cuentas {channel} están autorizadas para emparejar y controlar sesiones.", + "authorizedPrincipalsEmpty": "Aún no hay directores autorizados.", + "sessionBindingsTitle": "Enlaces de sesión", + "sessionBindingsDescription": "Cada punto final remoto a continuación está actualmente vinculado a una sesión de DeepChat." + }, + "hooks": { + "title": "Telegram Ganchos", + "description": "Reutilice el mismo bot Telegram para notificaciones de gancho.", + "chatId": "ID de chat", + "chatIdPlaceholder": "por ej. 123456789", + "threadId": "ID del hilo (opcional)", + "threadIdPlaceholder": "ID de hilo opcional" + }, + "status": { + "title": "Estado de tiempo de ejecución", + "botUser": "Usuario del robot: {username} ({id})", + "bindings": "Enlaces: {count}, compensación de encuesta: {pollOffset}", + "states": { + "disabled": "Discapacitado", + "stopped": "Detenido", + "starting": "Comenzando", + "running": "corriendo", + "backoff": "Reintentar después del error", + "error": "error" + }, + "bindingOnly": "Enlaces: {count}, principales emparejados: {paired}" + }, + "overview": { + "telegram": "{bindingCount} enlaces, {pairedCount} usuarios emparejados", + "feishu": "{bindingCount} enlaces, {pairedCount} usuarios emparejados", + "hooksOn": "en", + "hooksOff": "apagado", + "qqbot": "{bindingCount} enlaces, {pairedCount} usuarios emparejados", + "discord": "{bindingCount} enlaces, {pairedCount} canales emparejados", + "weixinIlink": "{bindingCount} enlaces, {accountCount} cuentas, {connectedCount} conectados" + }, + "bindingKinds": { + "dm": "DM", + "group": "grupo", + "topic": "Tema" + }, + "qqbot": { + "title": "QQBot", + "description": "Conecte un QQ Bot oficial para chats C2C y control de bots autorizados basados en menciones grupales.", + "appId": "App ID", + "appIdPlaceholder": "Robot QQ App ID", + "clientSecret": "Secreto del cliente", + "clientSecretPlaceholder": "Secreto del cliente QQ Bot", + "remoteControlDescription": "Los identificadores openid oficiales de QQ difieren entre C2C y grupos, por lo que los mensajes directos emparejan a los usuarios mientras que los grupos se autorizan por separado con /pair.", + "pairedUserIds": "Usuario emparejado OpenIDs", + "pairedUserIdsPlaceholder": "por ej. user_openid_xxx, user_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Conecte un robot WeChat iLink oficial mediante el inicio de sesión QR y luego enrute las sesiones de control remoto a través del adaptador incorporado.", + "loginDescription": "Haga clic en el botón a continuación para abrir la ventana de inicio de sesión oficial WeChat. Complete la autorización del Bot iLink allí y la cuenta conectada se agregará aquí automáticamente.", + "ownerOnlyNotice": "Esta primera versión solo permite que la cuenta del propietario de inicio de sesión QR controle DeepChat.", + "connectButton": "Abrir ventana de inicio de sesión", + "refreshQrCode": "Reabrir la ventana de inicio de sesión", + "loginDialogTitle": "Conecte WeChat iLink", + "loginDialogDescription": "La página de inicio de sesión oficial WeChat se abre en una ventana separada. Complete la autorización QR allí y mantenga este cuadro de diálogo abierto hasta que finalice la conexión.", + "loginFailed": "WeChat iLink error al iniciar sesión.", + "loginSuccessTitle": "WeChat iLink conectado", + "loginSuccessDescription": "La cuenta {accountId} está lista.", + "accountsTitle": "Cuentas", + "accountsDescription": "Cada cuenta de Bot iLink conectada se ejecuta de forma independiente y mantiene sus propios enlaces y estado de tiempo de ejecución.", + "noAccounts": "Aún no hay cuentas WeChat iLink conectadas.", + "ownerUserId": "ID de usuario del propietario: {ownerUserId}", + "baseUrl": "Base URL: {baseUrl}", + "accountBindings": "Encuadernaciones: {count}", + "remoteControlDescription": "Define el Agent predeterminado compartido por las cuentas de WeChat iLink y gestiona las vinculaciones que generen las sesiones entrantes.", + "removeAccount": "Eliminar cuenta", + "restartAccount": "Reiniciar cuenta", + "statusSummary": "{accounts} cuentas, {connected} conectadas, {bindings} enlaces", + "qrcodeAlt": "WeChat iLink Código QR", + "loginWindowOpened": "Se ha abierto la ventana de inicio de sesión oficial de WeChat. Complete la autorización QR allí.", + "loginSessionExpired": "Esta sesión de inicio de sesión ha caducado. Vuelva a abrir la ventana de inicio de sesión e inténtelo de nuevo.", + "loginResponseIncomplete": "La respuesta de inicio de sesión WeChat iLink estaba incompleta. Por favor inténtalo de nuevo.", + "loginTimedOut": "Se agotó el tiempo de espera de la autorización WeChat iLink. Vuelva a abrir la ventana de inicio de sesión e inténtelo de nuevo.", + "loginConnected": "La cuenta WeChat iLink ha sido conectada." + } + }, + "plugins": { + "title": "Complementos", + "officialOnly": "Administre los complementos oficiales integrados incluidos con esta versión de DeepChat.", + "refresh": "Actualizar", + "empty": "No hay complementos oficiales disponibles", + "emptyTitle": "No hay complementos integrados disponibles", + "emptyDescription": "Esta plataforma no tiene complementos oficiales integrados en esta versión de DeepChat.", + "loadFailed": "No se pudieron cargar los complementos", + "actionFailed": "La operación del complemento falló", + "install": "Instalar", + "installFromFile": "Elija .dcplugin", + "openRelease": "GitHub Release", + "enable": "Habilitar", + "disable": "Desactivar", + "openSettings": "Configuración", + "runtime": "Tiempo de ejecución", + "version": "Versión", + "command": "Comando", + "status": { + "enabled": "Habilitado", + "disabled": "Discapacitado", + "available": "Disponible" + }, + "runtimeStates": { + "missing": "desaparecido", + "installed": "Instalado", + "running": "corriendo", + "error": "error" + } + }, + "controlCenter": { + "groups": { + "overview": "Descripción general", + "setup": "Configuración", + "models": "Ajustes de Agent", + "tools": "Extensiones de capacidad", + "knowledge": "conocimiento", + "system": "Sistema" + }, + "overview": { + "title": "Descripción general de la configuración", + "description": "Consulta en un solo lugar el estado de providers, MCP, DeepChat Agents, datos y uso.", + "searchPlaceholder": "Buscar ajustes, providers, modelos, Agents, MCP...", + "providers": "Proveedores", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agents", + "data": "Hora de la última copia de seguridad", + "enabledCount": "{count} habilitado", + "runningCount": "{count} funcionando", + "enabledAgentCount": "{count} Agents activados", + "providersDescription": "Estado de conexión del proveedor", + "deepchatAgentsDescription": "Entrada de configuración de Agents", + "mcpOn": "MCP habilitado", + "mcpOff": "MCP deshabilitado", + "syncOn": "Sincronización habilitada", + "syncOff": "Sincronización deshabilitada", + "backupNever": "Copia de seguridad: nunca" + }, + "quickStart": { + "title": "Inicio rápido", + "addApiKey": "Agregar API Key", + "addApiKeyDesc": "Configurar el acceso provider", + "enableModel": "Habilitar modelo", + "enableModelDesc": "Activar un modelo utilizable", + "startMcp": "Iniciar el servidor MCP", + "startMcpDesc": "Iniciar servidores de herramientas", + "backupNow": "Copia de seguridad ahora", + "backupNowDesc": "Crear una copia de seguridad de datos" + }, + "needsAttention": { + "title": "necesita atencion", + "empty": "Nada necesita atención", + "noModels": "Ningún modelo está habilitado", + "privacyOff": "El modo de privacidad está desactivado", + "backupNever": "La copia de seguridad nunca se ha ejecutado" + }, + "activity": { + "title": "Cambios de configuración recientes", + "description": "Muestra los 200 cambios de configuración más recientes y conserva los 2000 registros más recientes.", + "when": "tiempo", + "category": "Categoría", + "change": "Cambiar", + "empty": "Sin cambios recientes", + "emptyDescription": "Los cambios de configuración exitosos aparecerán aquí.", + "settingUpdated": "Configuración actualizada: {key}", + "providerUpdated": "Actualizado provider: {name}", + "providerCreated": "Añadido provider: {name}", + "providerRemoved": "Eliminado provider: {name}", + "providerModelsRefreshed": "Modelos provider actualizados: {name}", + "modelStatusChanged": "Estado del modelo actualizado: {model}", + "modelBatchUpdated": "Modelos {count} actualizados", + "mcpServerCreated": "Se agregó el servidor MCP: {name}", + "mcpServerUpdated": "Servidor MCP actualizado: {name}", + "mcpServerRemoved": "Se eliminó el servidor MCP: {name}", + "mcpServerStatusChanged": "Servidor MCP alternado: {name}", + "mcpGlobalStatusChanged": "Estado global MCP alternado: {status}", + "mcpServerStarted": "Servidor MCP iniciado: {name}", + "mcpServerStopped": "Servidor MCP detenido: {name}", + "mcpRegistryRefreshed": "Actualizado MCP NPM registry", + "backupCreated": "Copia de seguridad creada: {name}", + "backupImported": "Copia de seguridad importada: {name}", + "databaseRepaired": "Reparación de base de datos finalizada: {status}" + } + } +} diff --git a/src/renderer/src/i18n/es-ES/sync.json b/src/renderer/src/i18n/es-ES/sync.json new file mode 100644 index 000000000..9eaeb91f8 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "Se importaron correctamente {count} conversaciones." + }, + "error": { + "notEnabled": "La sincronización no está habilitada", + "folderNotExists": "La carpeta de sincronización no existe", + "noValidBackup": "No se encontraron archivos de copia de seguridad válidos en la carpeta de sincronización.", + "unsupportedBackupVersion": "Esta copia de seguridad fue creada por una versión más reciente de DeepChat y no se puede importar.", + "dbNotExists": "El archivo de base de datos no existe", + "configNotExists": "El archivo de configuración no existe", + "tempDbFailed": "No se pudo crear el archivo de copia de seguridad de la base de datos temporal", + "tempConfigFailed": "No se pudo crear el archivo de copia de seguridad de configuración temporal", + "importFailed": "La importación falló, los datos originales han sido restaurados", + "importProcess": "Se produjo un error durante el proceso de importación.", + "unknown": "Error desconocido", + "encryptedBackupPasswordMissing": "Esta copia de seguridad está cifrada, pero la clave de la base de datos local no está disponible. Primero desbloquee la base de datos cifrada y luego importe nuevamente.", + "overwriteEncryptionMismatch": "La importación sobrescrita requiere que la copia de seguridad y la base de datos actual utilicen el mismo estado de cifrado." + } +} diff --git a/src/renderer/src/i18n/es-ES/thread.json b/src/renderer/src/i18n/es-ES/thread.json new file mode 100644 index 000000000..e1a938a49 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Cambiar nombre", + "delete": "Eliminar", + "cleanMessages": "Borrar mensajes", + "pin": "Alfiler", + "unpin": "Desanclar", + "export": "Exportar", + "exportText": "Texto sin formato", + "exportNowledgeMem": "Nowledge-mem" + }, + "export": { + "failed": "Exportación fallida", + "failedDesc": "Se produjo un error durante el proceso de exportación, inténtelo nuevamente.", + "nowledgeMemSubmitFailed": "Nowledge-mem Error en el envío", + "nowledgeMemSubmitFailedDesc": "No se pudo enviar la conversación a nowledge-mem", + "nowledgeMemSubmitPrompt": "¿Quieres enviar esta conversación a nowledge-mem?", + "nowledgeMemSubmitSuccess": "Nowledge-mem Envío exitoso", + "nowledgeMemSubmitSuccessDesc": "La conversación se ha enviado correctamente a nowledge-mem.", + "nowledgeMemSuccessDesc": "La conversación se ha exportado correctamente al formato de memoria de conocimiento.", + "success": "Exportación exitosa", + "nowledgeMemSuccess": "Nowledge-mem Exportación exitosa", + "successDesc": "La conversación se ha exportado correctamente." + }, + "message": { + "toolbar": { + "save": "Guardar" + } + }, + "toolbar": { + "save": "Guardar", + "cancel": "Cancelar", + "previousVariant": "Variante anterior", + "nextVariant": "Siguiente variante", + "copy": "Copiar como descuento", + "copyImage": "Copiar como imagen", + "copyImageWithLongPress": "Copiar como imagen (mantenga presionado para capturar desde arriba)", + "copyFromTopSuccess": "Imagen de conversación completa copiada", + "capturing": "Capturando...", + "retry": "regenerar", + "fork": "Rama a nuevo chat", + "edit": "Editar mensaje", + "delete": "Eliminar mensaje", + "trace": "Solicitud de seguimiento" + } +} diff --git a/src/renderer/src/i18n/es-ES/toolCall.json b/src/renderer/src/i18n/es-ES/toolCall.json new file mode 100644 index 000000000..f189a272b --- /dev/null +++ b/src/renderer/src/i18n/es-ES/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Llamando...", + "response": "Corriendo...", + "end": "hecho", + "error": "error", + "title": "Llamada de herramienta", + "clickToView": "Haga clic para ver detalles", + "functionName": "Nombre de la función", + "permission": "Solicitando permiso...", + "params": "Parámetros de función", + "responseData": "Respuesta", + "imagePreview": "Vista previa de imagen", + "imagePreviewCount": "No hay vistas previas de imágenes | Vista previa de una imagen | {count} vistas previas de imágenes", + "terminalOutput": "Salida terminal", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "Reemplazos {count} completados", + "fileOperation": "Operación de archivos", + "fileRead": "Leer archivo", + "fileWrite": "Escribir archivo", + "filePath": "Ruta del archivo", + "success": "Éxito", + "failed": "Fallido" +} diff --git a/src/renderer/src/i18n/es-ES/traceDialog.json b/src/renderer/src/i18n/es-ES/traceDialog.json new file mode 100644 index 000000000..dc5e8211d --- /dev/null +++ b/src/renderer/src/i18n/es-ES/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Solicitar vista previa", + "provider": "Proveedor", + "model": "modelo", + "endpoint": "API Endpoint", + "headers": "Encabezados", + "body": "Cuerpo de solicitud", + "copyJson": "Copia JSON", + "copySuccess": "Copiado al portapapeles", + "close": "Cerrar", + "loading": "Cargando...", + "error": "No se pudo cargar", + "errorDesc": "No se puede obtener la vista previa de la solicitud. Inténtelo de nuevo.", + "notImplemented": "No compatible", + "notImplementedDesc": "Este provider aún no ha implementado la vista previa de la solicitud.", + "mayNotMatch": "Nota: Esta vista previa se reconstruye a partir de la configuración de conversación actual y es posible que no coincida exactamente con los parámetros de solicitud reales." +} diff --git a/src/renderer/src/i18n/es-ES/update.json b/src/renderer/src/i18n/es-ES/update.json new file mode 100644 index 000000000..cf568c8a7 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "Nueva versión encontrada", + "version": "Versión", + "releaseDate": "Fecha de lanzamiento", + "releaseNotes": "Notas de la versión", + "later": "Más tarde", + "githubDownload": "GitHub Descargar", + "officialDownload": "Descarga oficial", + "checkUpdate": "Buscar actualizaciones", + "downloading": "Descargando", + "installNow": "Instalar ahora", + "installUpdate": "Instalar actualización", + "versionAvailable": "{version} está disponible", + "autoUpdateFailed": "La actualización automática falló. Utilice los enlaces de descarga del manual que aparecen a continuación.", + "topbarButton": "Actualizar", + "autoUpdate": "Actualización automática", + "restarting": "Reiniciando", + "alreadyUpToDate": "Ya actualizado", + "alreadyUpToDateDesc": "Su DeepChat ya está actualizado a la última versión, no se requiere ninguna actualización." +} diff --git a/src/renderer/src/i18n/es-ES/welcome.json b/src/renderer/src/i18n/es-ES/welcome.json new file mode 100644 index 000000000..70faa2838 --- /dev/null +++ b/src/renderer/src/i18n/es-ES/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "Bienvenido", + "description": "Comencemos a configurar DeepChat" + }, + "provider": { + "title": "Proveedor", + "description": "Elige tu modelo preferido provider" + }, + "configuration": { + "title": "Configuración", + "description": "Configura los modelos que quieres utilizar" + }, + "complete": { + "title": "completo", + "description": "¡Todo listo y listo para funcionar!" + } + }, + "title": "Bienvenido a DeepChat", + "description": "Vamos a guiarte a través de la configuración.", + "provider": { + "select": "Seleccione un proveedor", + "apiUrl": "API URL", + "apiKey": "API Key", + "verifyLink": "Verificar enlace" + }, + "complete": { + "title": "¡Todo listo!", + "description": "Ya está todo listo. ¡Empecemos!" + }, + "buttons": { + "getStarted": "Empezar", + "next": "Siguiente", + "back": "Atrás" + }, + "page": { + "title": "Bienvenido a DeepChat Agent", + "description": "Conecte un modelo provider para comenzar", + "guide": { + "title": "Guía de configuración", + "description": "Paso actual: {step}", + "or": "o", + "coreProgress": "Progreso de la configuración principal", + "optional": "Próximos pasos opcionales", + "actions": { + "continueSetup": "Continuar con la configuración", + "goToChat": "ir a chatear" + }, + "steps": { + "provider": "Proveedor", + "first-chat": "Primera charla", + "switch-model": "Cambiar modelo", + "mcp": "MCP", + "skills": "Skills", + "plugins": "Complementos" + } + }, + "browseProviders": "Explorar todos los providers...", + "connectAgent": "o conecte un agent", + "acpTitle": "Configurar un ACP agent", + "acpDescription": "Claude Code, Codex, Kimi o el suyo propio", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "DeepSeek", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "OpenRouter" + }, + "importProviders": "Importar desde otro agents" + }, + "agentPage": { + "title": "Elige un Agent para empezar a crear", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "Administrar DeepChat Agents" + } +} diff --git a/src/renderer/src/i18n/id-ID/about.json b/src/renderer/src/i18n/id-ID/about.json new file mode 100644 index 000000000..b4c282283 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat adalah klien AI lintas platform yang didedikasikan untuk memungkinkan lebih banyak orang menggunakan AI dengan nyaman.", + "website": "Kunjungi situs web kami", + "disclaimerButton": "Penafian", + "feedbackButton": "Umpan balik", + "disclaimerTitle": "Pernyataan ketentuan penggunaan", + "checkUpdateButton": "Periksa pembaruan", + "mockUpdateButton": "Simulasi mengunduh pembaruan", + "clearMockUpdateButton": "Hapus pembaruan simulasi", + "mockOnboardingButton": "Simulasikan booting untuk pertama kalinya", + "updateChannel": "Perbarui saluran", + "stableChannel": "Versi resmi", + "betaChannel": "Versi beta internal", + "deviceInfo": { + "title": "Informasi perangkat", + "platform": "Peron", + "arch": "Arsitektur", + "cpuModel": "model prosesor", + "totalMemory": "memori keseluruhan", + "osVersion": "Versi sistem" + } +} diff --git a/src/renderer/src/i18n/id-ID/artifacts.json b/src/renderer/src/i18n/id-ID/artifacts.json new file mode 100644 index 000000000..51ebd03d1 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Klik untuk membuka", + "codeSnippet": "cuplikan kode", + "function": " fungsi", + "class": " kelas", + "reactComponent": "Bereaksi komponen", + "moduleImport": "impor modul", + "variableDefinition": "{name} definisi variabel", + "markdownDocument": "Dokumentasi penurunan harga", + "htmlDocument": "dokumen HTML", + "svgImage": "gambar SVG", + "flowchart": "diagram alur", + "sequenceDiagram": "Diagram waktu", + "classDiagram": "Diagram kelas", + "stateDiagram": "diagram keadaan", + "erDiagram": "diagram UGD", + "ganttChart": "Bagan Gantt", + "pieChart": "diagram lingkaran", + "mermaidDiagram": "Bagan Putri Duyung", + "flowchartOf": "Diagram alur {name}", + "sequenceDiagramBetween": "Diagram waktu antara {participants}", + "classDiagramOf": "Diagram kelas {name}", + "stateDiagramOf": "Diagram keadaan {name}", + "erDiagramOf": "Diagram ER dari {name}", + "pieChartOf": "Diagram lingkaran {name}", + "unknownDocument": "Dokumen tidak dikenal", + "preview": "Pratinjau", + "code": "kode", + "export": "Ekspor", + "htmlPreviewTitle": "Pratinjau HTML", + "svgPreviewTitle": "Pratinjau SVG", + "copy": "Salin", + "copyAsImage": "Salin seperti gambar", + "copyImageSuccessDesc": "Gambar disalin ke papan klip", + "copyImageFailedDesc": "Tidak dapat menyalin gambar ke papan klip", + "copySuccess": "Berhasil disalin", + "copySuccessDesc": "Konten disalin ke papan klip", + "copyFailed": "Penyalinan gagal", + "copyFailedDesc": "Tidak dapat menyalin konten ke papan klip", + "desktop": "Desktop", + "tablet": "tablet", + "mobile": "telepon genggam", + "responsive": "Responsif", + "width": "Lebar", + "height": "tinggi", + "sanitizingSvg": "Membersihkan konten SVG...", + "svgSanitizationFailed": "Konten SVG gagal verifikasi keamanan", + "noSvgContent": "Tidak ada konten SVG yang tersedia", + "mermaid": { + "renderError": "Gagal merender: {message}" + } +} diff --git a/src/renderer/src/i18n/id-ID/chat.json b/src/renderer/src/i18n/id-ID/chat.json new file mode 100644 index 000000000..2eda9bb3a --- /dev/null +++ b/src/renderer/src/i18n/id-ID/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "Kirim pesan ke DeepChat, {'@'} bisa referensi filenya, / bisa pakai perintah", + "fileArea": "wilayah berkas", + "inputArea": "daerah masukan", + "functionSwitch": "Sakelar fungsi", + "attach": "Tambahkan lampiran", + "voiceInput": "rekaman lokal", + "voiceInputStop": "Hentikan rekaman lokal", + "voiceRecognitionUnsupportedTitle": "Lingkungan saat ini tidak mendukung perekaman lokal", + "voiceRecognitionUnsupportedDescription": "Silakan gunakan fitur ini di browser atau lingkungan desktop yang mendukung perekaman mikrofon.", + "voiceRecognitionPermissionDeniedTitle": "Tidak dapat mengakses mikrofon", + "voiceRecognitionPermissionDeniedDescription": "Izinkan DeepChat menggunakan mikrofon dan coba lagi.", + "voiceRecognitionErrorTitle": "Transkripsi audio gagal", + "voiceRecognitionErrorDescription": "Gagal menyelesaikan transkripsi audio, coba lagi nanti.", + "send": "kirim", + "steer": "panduan", + "queue": "bergabung dalam antrian", + "stop": "berhenti", + "fileSelect": "Pilih berkas", + "pasteFiles": "Mendukung salin dan tempel file", + "dropFiles": "Seret dan letakkan file di sini", + "promptFilesAdded": "File Prompt ditambahkan", + "promptFilesAddedDesc": "Berhasil menambahkan file {count}", + "promptFilesError": "Kesalahan pemrosesan file", + "promptFilesErrorDesc": "Pemrosesan file {count} gagal", + "historyPlaceholder": "(Tekan Tab untuk mengisi)", + "rateLimitQueue": "Antrian {count}", + "rateLimitWait": "Menunggu {seconds}s", + "rateLimitQueueTooltip": "Ada {count} permintaan dalam antrean, dengan selang waktu {interval} detik", + "rateLimitReadyTooltip": "Permintaan dapat dikirim setiap {interval} detik", + "rateLimitWaitingTooltip": "Perlu menunggu {seconds} detik, interval {interval} detik", + "acpWorkdir": "direktori kerja", + "acpWorkdirTooltip": "Atur direktori kerja ACP", + "acpWorkdirSelect": "Pilih direktori kerja", + "acpWorkdirCurrent": "Direktori kerja saat ini: {path}", + "acpMode": "modus", + "acpModeTooltip": "Modus saat ini: {mode}", + "agentWorkspaceTooltip": "Setel direktori kerja Agent", + "agentWorkspaceSelect": "Pilih direktori kerja", + "agentWorkspaceCurrent": "Direktori kerja saat ini: {path}", + "workspaceUnavailableTooltip": "Direktori tidak ada atau tidak dapat diakses: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "Diaktifkan MCP", + "empty": "Belum ada layanan yang diaktifkan", + "openSettings": "Buka pengaturan MCP" + }, + "tools": { + "badge": "Tools", + "title": "Tools", + "mcpSection": "MCP", + "pluginSection": "plugin", + "builtinSection": "Alat bawaan", + "loading": "Memuat alat...", + "builtinEmpty": "Belum ada alat bawaan yang tersedia", + "groups": { + "agentFilesystem": "sistem file", + "agentCore": "alat inti", + "agentImageGeneration": "generasi gambar", + "agentSkills": "Alat Skills", + "deepchatSettings": "DeepChat Pengaturan", + "yobrowser": "YoBrowser" + } + }, + "fileUploadFailed": "Pemrosesan lampiran gagal", + "fileUploadFailedDesc": "Tidak dapat memproses file {count}: {names}", + "fileUploadFailedMore": " Tunggu {count}", + "unnamedFile": "file tanpa nama", + "audioInputUnsupportedTitle": "Model saat ini tidak mendukung lampiran audio", + "audioInputUnsupportedDescription": "Model {model} tidak mendukung input audio, lampiran audio {count} telah diabaikan." + }, + "pendingInput": { + "steer": "panduan", + "queueCount": "Siap dikirim {count}/{max}", + "resumeQueue": "terus mengirim", + "toSteer": "giliran untuk boot", + "locked": "terkunci", + "reorder": "Sesuaikan pesanan", + "files": "{count} file", + "attachmentsOnly": "{count} lampiran", + "empty": "pesan kosong", + "limitReached": "Ruang tunggu penuh (maks {max} entri)." + }, + "features": { + "webSearch": "Pencarian internet", + "thoughtForSeconds": "Berpikir selama {seconds} detik", + "thoughtForSecondsLoading": "Berpikir (kedua {seconds})", + "artifactThinking": "pemikiran artefak", + "modeChanged": "Mode dialihkan ke: {mode}" + }, + "search": { + "results": "{0} halaman web telah dicari", + "searching": "Mencari...", + "title": "Hasil pencarian", + "description": "Ditemukan total {0} hasil terkait", + "optimizing": "Mengekstrak maksud pencarian...", + "reading": "Mencari dan membaca halaman web...", + "error": "Pencarian gagal" + }, + "messages": { + "thinking": "Berpikir...", + "rateLimitWaiting": "Minta batas frekuensi, menunggu dalam antrian...", + "rateLimitCompactLoading": "Batas kecepatan ({seconds} detik)", + "rateLimitTitle": "Batas frekuensi permintaan", + "rateLimitQueue": "posisi antrian", + "rateLimitEstimated": "Berharap untuk menunggu", + "rateLimitQuickSettings": "Sesuaikan batas", + "rateLimitSwitchProvider": "Ganti penyedia layanan", + "rateLimitImmediately": "segera", + "rateLimitSeconds": "detik", + "rateLimitMinutes": "menit" + }, + "compaction": { + "compacting": "Mengompresi konteks...", + "compacted": "Konteks dikompresi", + "commandDescription": "Kompres konteks sesi", + "noopTitle": "Tidak ada konteks yang dapat dikompres", + "noopDescription": "Saat ini tidak ada riwayat percakapan baru untuk dikompres.", + "failedTitle": "Kompresi gagal" + }, + "rateLimit": { + "queueTooltip": "Ada {count} permintaan dalam antrean, dengan selang waktu {interval} detik", + "readyTooltip": "Permintaan dapat dikirim setiap {interval} detik", + "waitingTooltip": "Perlu menunggu {seconds} detik, interval {interval} detik" + }, + "notify": { + "generationComplete": "Generasi selesai", + "generationError": "Pembuatan gagal" + }, + "toolCall": { + "title": "Panggilan alat", + "calling": "Panggilan alat", + "response": "respon alat", + "end": "Panggilan alat selesai", + "error": "Kesalahan panggilan alat", + "clickToView": "Klik untuk melihat detailnya", + "functionName": "nama fungsi", + "params": "parameter", + "responseData": "data respons", + "subagents": { + "summary": "{mode} · {count} subagent", + "unnamedTask": "Tugas tanpa nama", + "mode": { + "parallel": "Paralel", + "chain": "serial" + }, + "status": { + "queued": "Mengantri", + "running": "Berlari", + "completed": "Selesai", + "error": "Kesalahan", + "cancelled": "Dibatalkan", + "waiting_permission": "Menunggu persetujuan izin", + "waiting_question": "Menunggu masukan tambahan" + } + } + }, + "mode": { + "current": "Modus saat ini: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Kembali ke sesi orang tua", + "share": "Bagikan", + "more": "Lebih lanjut" + }, + "subagents": { + "label": "subagent" + }, + "advancedSettings": { + "button": "Konfigurasi lanjutan", + "title": "Konfigurasi lanjutan", + "closeHint": "Tekan Esc untuk menutup", + "systemPrompt": "system prompt", + "systemPromptPlaceholder": "Pilih preset", + "temperature": "suhu", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ditetapkan ke {enabled} saat pemikiran diaktifkan, dan ditetapkan ke {disabled} saat pemikiran dimatikan.", + "contextLength": "panjang konteks", + "maxTokens": "keluaran maksimal", + "thinkingBudget": "Pikirkan tentang anggaran", + "verbosity": "Jawab secara detail", + "forceInterleavedThinkingCompat": "Pemikiran Disisipkan", + "forceInterleavedThinkingCompatDescription": "Mengontrol apakah sesi saat ini menangani pesan penalaran dan panggilan alat dalam mode Berpikir Interleaved.", + "verbosityPlaceholder": "Pilih tingkat verbositas", + "currentCustomPrompt": "Kustomisasi saat ini", + "useDefault": "Gunakan nilai default", + "decreaseValue": "Kurangi {label}", + "increaseValue": "Ditambahkan {label}", + "toggleValue": "Beralih {label}", + "validation": { + "finiteNumber": "Harus berupa angka yang terbatas", + "nonNegativeInteger": "Harus berupa bilangan bulat non-negatif", + "contextLengthAtLeastMaxTokens": "Harus lebih besar atau sama dengan output maksimum", + "maxTokensWithinContextLength": "Harus kurang dari atau sama dengan panjang konteks" + } + }, + "modelPicker": { + "empty": "Model tidak ditemukan", + "audioInputSupported": "Mendukung masukan audio" + }, + "audio": { + "play": "bermain", + "pause": "jeda" + }, + "call": { + "title": "Panggilan suara.ai", + "description": "Klik untuk terhubung ke Agent suara Voice.ai, lalu bicara setelah panggilan dijawab.", + "start": "Mulai panggilan suara", + "stop": "mengakhiri panggilan", + "end": "Tutup telepon" + }, + "skills": { + "indicator": { + "active": "{count} Skills yang dipin", + "none": "Tidak ada Skills yang dipin" + }, + "panel": { + "title": "Skills yang dipin", + "manage": "manajemen", + "empty": "Belum ada Skills yang dipasang" + } + }, + "workspace": { + "title": "ruang kerja", + "collapse": "dekat", + "sections": { + "files": "Mengajukan", + "git": "Git", + "artifacts": "Artifacts", + "subagents": "subagent" + }, + "plan": { + "section": "rencana", + "empty": "Belum ada tugas", + "itemAriaLabel": "{status}: {step}", + "status": { + "pending": "Tertunda", + "in_progress": "Sedang berlangsung", + "completed": "Selesai", + "failed": "gagal", + "skipped": "dilewati" + } + }, + "files": { + "section": "Mengajukan", + "empty": "Belum ada file", + "loading": "Memuat file...", + "noWorkspace": { + "title": "Belum ada ruang kerja", + "description": "Pilih atau seret folder untuk menyiapkan ruang kerja Anda", + "button": "Pilih map" + }, + "contextMenu": { + "openFile": "membuka berkas", + "revealInFolder": "Buka di pengelola file", + "insertPath": "Masukkan ke dalam kotak masukan" + } + }, + "git": { + "empty": "Belum ada perbedaan untuk ditampilkan", + "clean": "Bersihkan area kerja", + "staged": "Disimpan sementara", + "unstaged": "Tidak dipentaskan" + }, + "subagents": { + "empty": "Belum ada sesi subagent", + "self": "Agent saat ini", + "status": { + "working": "Berlari", + "error": "Kesalahan", + "idle": "gratis" + } + }, + "browser": { + "section": "Peramban", + "empty": "Belum ada halaman tab" + }, + "terminal": { + "section": "terminal", + "empty": "Belum ada keluaran", + "contextMenu": { + "terminate": "Hentikan perintah", + "delete": "menghapus catatan", + "expand": "Perluas untuk melihat", + "collapse": "lipat" + }, + "output": { + "truncated": "[dipotong]" + }, + "noOutput": "Tidak ada keluaran", + "status": { + "running": "Berlari", + "completed": "sukses", + "failed": "gagal", + "timed_out": "Waktu habis", + "aborted": "dibatalkan" + } + } + }, + "newThread": { + "title": "Bangun dan jelajahi" + }, + "floatingWidget": { + "title": "Ikhtisar tugas", + "collapse": "Tutup daftar percakapan mengambang", + "empty": "Saat ini tidak ada sesi Agent", + "executing": "Sedang berlangsung", + "sessionCount": "{count} sesi", + "untitled": "sesi baru", + "status": { + "inProgress": "Sedang berlangsung", + "done": "Selesai", + "error": "Kesalahan" + } + }, + "permissionMode": { + "default": "Izin bawaan", + "fullAccess": "akses penuh" + }, + "sidebar": { + "allAgents": "Semua Agent", + "expandSidebar": "Luaskan bilah sisi", + "collapseSidebar": "Ciutkan bilah sisi", + "remoteControlDisabled": "Tidak diaktifkan", + "remoteControlStatus": { + "disabled": "Kendali jarak jauh dinonaktifkan", + "stopped": "Kendali jarak jauh telah berhenti", + "starting": "Kendali jarak jauh dimulai", + "running": "Kendali jarak jauh berjalan", + "backoff": "Mencoba kembali kendali jarak jauh", + "error": "kesalahan kendali jarak jauh" + }, + "groupByDate": "Kelompokkan berdasarkan waktu", + "groupByProject": "Kelompokkan berdasarkan proyek", + "pinned": "Sematkan percakapan", + "emptyTitle": "Belum ada sesi", + "emptyDescription": "Mulai sesi baru", + "searchPlaceholder": "Judul sesi pencarian", + "searchAriaLabel": "Judul sesi pencarian", + "searchEmptyTitle": "Tidak ditemukan sesi yang cocok", + "searchEmptyDescription": "Coba ubah kata kunci judul" + }, + "spotlight": { + "placeholder": "Sesi pencarian, Agent, pengaturan dan tindakan…", + "searching": "Mencari…", + "emptyTitle": "Tidak ada hasil yang cocok", + "emptyDescription": "Coba kata kunci lain, atau buka percakapan terkini secara langsung.", + "hints": "↑↓ Pilih · Enter untuk membuka · Esc untuk menutup · Home/End Lompat", + "kind": { + "session": "sesi", + "message": "berita", + "agent": "Agent", + "setting": "pengaturan", + "action": "tindakan" + } + }, + "inlineSearch": { + "placeholder": "Cari sesi saat ini", + "ariaLabel": "Cari sesi saat ini", + "previous": "Pertandingan sebelumnya", + "next": "pertandingan berikutnya", + "close": "Tutup pencarian" + }, + "onboarding": { + "agentSwitch": { + "title": "Beralih ke DeepChat Agent", + "description": "Sebelum memulai obrolan, beralih kembali ke alur percakapan DeepChat dari ACP Agent.", + "caption": "Klik tombol Agent yang disorot di sidebar untuk melanjutkan." + }, + "switchModel": { + "description": "Pilih model yang ingin Anda gunakan untuk percakapan DeepChat pertama Anda.", + "caption": "Gunakan pengalih model yang disorot untuk memilih model apa pun yang tersedia." + }, + "firstChat": { + "description": "Sekarang Anda siap, kirim pesan pertama Anda ke sini untuk menyelesaikan boot.", + "caption": "Sorotan akan tetap berada di kotak masukan hingga Anda benar-benar mengirim pesan pertama." + } + } +} diff --git a/src/renderer/src/i18n/id-ID/common.json b/src/renderer/src/i18n/id-ID/common.json new file mode 100644 index 000000000..bb2bed5c3 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/common.json @@ -0,0 +1,128 @@ +{ + "loading": "Memuat...", + "copy": "Salin", + "copied": "Disalin", + "paste": "Tempel", + "copySuccess": "Berhasil disalin", + "copySuccessDesc": "Konten disalin ke papan klip", + "copyImageSuccess": "Berhasil disalin", + "copyImageSuccessDesc": "Gambar disalin ke papan klip", + "copyFailed": "Penyalinan gagal", + "copyFailedDesc": "Tidak dapat menyalin konten ke papan klip", + "copyCode": "Salin kode", + "export": "Ekspor", + "newChat": "sesi baru", + "newTopic": "topik baru", + "cancel": "Batalkan", + "confirm": "Konfirmasikan", + "next": "Langkah selanjutnya", + "back": "Langkah sebelumnya", + "enabled": "Diaktifkan", + "disabled": "Dinonaktifkan", + "disclaimer": "Penafian", + "close": "Tutup", + "open": "terbuka", + "image": "gambar", + "noContent": "Belum ada konten", + "preview": "Pratinjau", + "source": "Kode sumber", + "more": "Lebih lanjut", + "decrease": "mengurangi", + "increase": "meningkat", + "fontSmaller": "Kurangi ukuran font", + "fontReset": "Setel ulang ukuran font", + "fontLarger": "Tingkatkan ukuran font", + "zoomIn": "Perbesar", + "zoomOut": "memperkecil", + "resetZoom": "Setel ulang zoom", + "error": { + "requestFailed": "Permintaan gagal...", + "createChatFailed": "Gagal membuat sesi", + "selectChatFailed": "Gagal memilih sesi", + "renameChatFailed": "Gagal mengganti nama sesi", + "deleteChatFailed": "Gagal menghapus sesi", + "cleanMessagesFailed": "Gagal menghapus pesan sesi", + "userCanceledGeneration": "Pembuatan yang dibatalkan pengguna", + "sessionInterrupted": "Sesi ini tiba-tiba terputus dan pembangunan tidak selesai", + "noModelResponse": "Model tidak mengembalikan apa pun, mungkin waktunya habis.", + "invalidJson": "Format JSON tidak valid", + "maximumToolCallsReached": "Jumlah maksimum panggilan alat tercapai", + "causeOfError": "Kemungkinan penyebab kesalahan:", + "error400": "Kesalahan permintaan, parameter, atau masalah kompatibilitas", + "error401": "Otentikasi gagal, API Key atau nama domain salah dikonfigurasi", + "error403": "Akses ke model ini dilarang. Hal ini mungkin disebabkan oleh kurangnya keseimbangan atau kurangnya izin untuk mengakses model.", + "error404": "Alamat permintaan tidak ada, dan nama domain atau nama model yang dikonfigurasi salah.", + "error429": "Kecepatan permintaan terlalu cepat dan frekuensi akses dibatasi oleh penyedia layanan.", + "error500": "Terjadi kesalahan server. Layanan yang diminta mungkin tidak stabil saat ini. Anda dapat mencoba lagi nanti.", + "error502": "Kesalahan gerbang. Layanan yang diminta mungkin tidak stabil saat ini. Anda dapat mencoba lagi nanti.", + "error503": "Layanan ini tidak tersedia. Layanan yang diminta mungkin tidak stabil saat ini. Anda dapat mencoba lagi nanti.", + "error504": "Waktu permintaan telah habis. Layanan yang diminta mungkin tidak stabil atau tautan jaringan rusak. Silakan periksa proxy dan konfigurasi jaringan lainnya dan coba lagi.", + "operationFailed": "Operasi gagal", + "invalidQuestionRequest": "Permintaan pertanyaan tidak valid" + }, + "resetDataConfirmTitle": "Apakah Anda yakin ingin mengatur ulang semua data?", + "resetDataConfirmDescription": "Ini akan mengembalikan semua data ke pengaturan default. Tindakan ini tidak dapat dibatalkan.", + "title": "Pengaturan umum", + "resetData": "Setel ulang data", + "language": "Bahasa", + "languageSelect": "Pilih bahasa", + "searchEngine": "mesin pencari", + "searchEngineSelect": "Pilih mesin pencari", + "searchPreview": "Pratinjau pencarian", + "searchAssistantModel": "model pembantu", + "selectModel": "Pilih modelnya", + "proxyMode": "mode proksi", + "proxyModeSelect": "Pilih mode proksi", + "proxyModeSystem": "Proksi sistem", + "proxyModeNone": "Tidak menggunakan proksi", + "proxyModeCustom": "Proksi khusus", + "customProxyUrl": "Alamat proksi khusus", + "customProxyUrlPlaceholder": "Misalnya: http://127.0.0.1:7890", + "invalidProxyUrl": "Alamat proxy tidak valid, masukkan http/https URL yang valid", + "languageSystem": "Ikuti sistemnya", + "watermarkTip": "Konten yang dihasilkan AI, harap merujuknya dengan hati-hati", + "collapse": "dekat", + "expand": "Perluas", + "add": "Baru", + "reset": "mengatur ulang", + "format": "Format", + "edit": "Sunting", + "delete": "Hapus", + "save": "simpan", + "clear": "Jelas", + "saved": "disimpan", + "unknownError": "kesalahan yang tidak diketahui", + "testing": "Sedang diuji", + "saving": "Menyimpan", + "scrollLeft": "gulir ke kiri", + "scrollRight": "gulir ke kanan", + "history": "sejarah", + "minimize": "meminimalkan", + "maximize": "maksimalkan", + "restore": "memulihkan", + "browser": { + "back": "Kembali", + "forward": "bergerak maju", + "reload": "Segarkan", + "addressLabel": "bilah alamat", + "addressPlaceholder": "Masukkan URL", + "enterUrlToStart": "Masukkan URL untuk mulai mengunjungi", + "enterUrlDescription": "Masukkan URL di bilah alamat di atas untuk mengakses situs web", + "name": "Yo Browser" + }, + "size": { + "bytes": "{count} bita" + }, + "time": { + "today": "hari ini", + "yesterday": "kemarin", + "lastWeek": "minggu lalu", + "older": "sebelumnya" + }, + "project": { + "select": "Pilih barang", + "none": "Tidak ada proyek terkait", + "recent": "Proyek terbaru", + "openFolder": "Buka map..." + } +} diff --git a/src/renderer/src/i18n/id-ID/components.json b/src/renderer/src/i18n/id-ID/components.json new file mode 100644 index 000000000..8b5af204c --- /dev/null +++ b/src/renderer/src/i18n/id-ID/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Cari emotikon", + "smileys": "Ekspresi dan emosi", + "people": "Angka dan tubuh", + "animals": "hewan dan alam", + "food": "makanan dan minuman", + "travel": "Perjalanan dan Tempat", + "activities": "Kegiatan", + "objects": "Barang", + "symbols": "simbol", + "flags": "bendera" + }, + "messageBlockAction": { + "continue": "lanjutkan", + "continued": "Lanjutan" + }, + "messageBlockPermissionRequest": { + "title": "Izin diperlukan", + "allow": "mengizinkan", + "allowOnce": "diperbolehkan satu kali", + "allowForSession": "Jalankan sesi saat ini secara otomatis", + "allowOnceTooltip": "Perintah ini hanya dijalankan kali ini dan keputusan tidak disimpan.", + "allowForSessionTooltip": "Ingat perintah ini dalam sesi saat ini.", + "deny": "menolak", + "rememberChoice": "Ingat pilihan ini", + "granted": "Izin diberikan", + "denied": "Izin ditolak", + "riskLabel": "risiko", + "type": { + "read": "Izin baca", + "write": "Izin menulis", + "all": "izin penuh", + "command": "jalankan perintah" + }, + "description": { + "read": "Izinkan '{toolName}' dari '{serverName}' melakukan operasi baca?", + "write": "Izinkan '{toolName}' dari '{serverName}' menulis?", + "all": "Izinkan '{toolName}' dari '{serverName}' melakukan operasi baca dan tulis?", + "command": "Perintah eksekusi: {command}", + "commandWithRisk": "Perintah eksekusi: {command}\n\nTingkat risiko: {riskLevel}\n\nSaran: {suggestion}" + }, + "riskLevel": { + "low": "rendah", + "medium": "di", + "high": "tinggi", + "critical": "serius" + }, + "suggestion": { + "low": "Perintah ini merupakan operasi read-only dan memiliki dampak yang kecil.", + "medium": "Perintah ini dapat menginstal dependensi atau mengubah status, harap konfirmasi sebelum menjalankan.", + "high": "Perintah ini akan mengubah file atau status sistem, jadi harap berhati-hati.", + "critical": "Perintah ini mungkin merusak atau mengakses jaringan eksternal, harap verifikasi." + } + }, + "promptParamsDialog": { + "title": "{name} Pengaturan parameter", + "description": "Silakan isi parameter berikut, item dengan * wajib diisi.", + "required": "Parameter ini diperlukan" + }, + "messageBlockQuestionRequest": { + "title": "pertanyaan", + "send": "kirim", + "reject": "menolak", + "selected": "Dipilih", + "rejected": "Ditolak", + "customPlaceholder": "Masukkan jawaban Anda...", + "answerLabel": "jawaban" + } +} diff --git a/src/renderer/src/i18n/id-ID/contextMenu.json b/src/renderer/src/i18n/id-ID/contextMenu.json new file mode 100644 index 000000000..dbc677a72 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "Terjemahkan", + "original": "Teks asli", + "translated": "Hasil terjemahan", + "error": "Terjemahan gagal" + }, + "askAI": { + "title": "Permintaan AI", + "question": "pertanyaan", + "answer": "jawaban", + "error": "AI gagal menjawab" + }, + "copy": "Salin", + "paste": "Tempel", + "cut": "potong" +} diff --git a/src/renderer/src/i18n/id-ID/dialog.json b/src/renderer/src/i18n/id-ID/dialog.json new file mode 100644 index 000000000..d88bf5990 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "Batalkan", + "confirm": "Konfirmasikan", + "close": "Tutup", + "ok": "Oke", + "delete": { + "title": "Apakah Anda yakin ingin menghapus percakapan ini?", + "description": "Operasi ini tidak dapat dibatalkan, harap lanjutkan dengan hati-hati.", + "confirm": "Hapus" + }, + "rename": { + "title": "Ganti nama sesi", + "description": "Silakan masukkan nama sesi baru." + }, + "cleanMessages": { + "title": "Hapus pesan percakapan", + "description": "Menghapus pesan akan menghapus semua pesan dan file dalam sesi tersebut. Apakah Anda yakin ingin melanjutkan?", + "confirm": "Jelas" + }, + "fork": { + "title": "Buat cabang sesi", + "description": "Menyalin pesan pertama ke pesan yang dipilih saat ini ke dalam percakapan baru di mana Anda dapat melanjutkan percakapan.", + "confirm": "Buat cabang", + "tag": "cabang" + }, + "error": { + "title": "Kesalahan" + }, + "mutualExclusive": { + "title": { + "reasoning": "Konfirmasikan untuk mengaktifkan kemampuan penalaran", + "functionCall": "Konfirmasikan untuk mengaktifkan panggilan fungsi" + }, + "message": { + "reasoning": "Mengaktifkan kemampuan inferensi akan secara otomatis mematikan fungsi pemanggilan fungsi. Ini adalah batasan model DeepSeek-V3.1, dan kedua fungsi tidak dapat digunakan secara bersamaan. Melanjutkan?", + "functionCall": "Mengaktifkan panggilan fungsi akan secara otomatis mematikan kemampuan inferensi. Ini adalah batasan model DeepSeek-V3.1, dan kedua fungsi tidak dapat digunakan secara bersamaan. Melanjutkan?" + }, + "warningText": { + "reasoning": "Catatan: Mengaktifkan kemampuan inferensi akan secara otomatis mematikan fungsi pemanggilan fungsi, yang merupakan batasan model DeepSeek-V3.1.", + "functionCall": "Catatan: Mengaktifkan panggilan fungsi akan secara otomatis mematikan kemampuan inferensi, yang merupakan batasan model DeepSeek-V3.1." + }, + "confirmEnable": "Konfirmasikan untuk membuka" + } +} diff --git a/src/renderer/src/i18n/id-ID/image.json b/src/renderer/src/i18n/id-ID/image.json new file mode 100644 index 000000000..6912a81e6 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "Gagal memuat gambar", + "loading": "Gambar sedang dimuat...", + "preview": "Pratinjau gambar", + "save": "simpan gambar", + "saveAs": "Simpan gambar sebagai...", + "saveSuccess": "Gambar disimpan", + "saveFailed": "Penyimpanan gambar gagal" +} diff --git a/src/renderer/src/i18n/id-ID/index.ts b/src/renderer/src/i18n/id-ID/index.ts new file mode 100644 index 000000000..cc7215fc8 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Kunci tingkat atas terpisah +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Qwen Model', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + 'DeepChat hanya berfungsi sebagai alat bantu. Saat pengguna secara aktif memulai pencarian, DeepChat menyusun dan merangkum data publik yang dikembalikan oleh mesin pencari agar hasil pencarian lebih mudah dilihat dan dipahami.\n\n1. **Penggunaan Data Publik** \nPerangkat lunak ini hanya memproses data dari situs web target atau mesin pencari yang tersedia untuk publik dan dapat diakses tanpa login. Sebelum menggunakan, pastikan Anda membaca dan mematuhi ketentuan layanan situs web target atau mesin pencari agar penggunaan Anda sah dan sesuai aturan. \n\n2. **Akurasi Informasi dan Tanggung Jawab** \nKonten yang disusun dan dihasilkan oleh perangkat lunak ini hanya untuk referensi, dan bukan merupakan nasihat hukum, bisnis, atau bentuk nasihat lainnya. Pengembang tidak memberikan jaminan apa pun atas akurasi, kelengkapan, ketepatan waktu, atau legalitas hasil pencarian. Segala konsekuensi yang timbul dari penggunaan perangkat lunak ini menjadi tanggung jawab pengguna sepenuhnya. \n\n3. **Klausul Penafian** \nPerangkat lunak ini disediakan "sebagaimana adanya". Pengembang tidak menanggung jaminan atau tanggung jawab tersurat maupun tersirat atas kinerja, stabilitas, atau kesesuaiannya. Jika selama penggunaan perangkat lunak ini timbul sengketa, kerugian, atau tanggung jawab hukum akibat pelanggaran hukum, peraturan, atau ketentuan situs web target, pengembang tidak bertanggung jawab atas hal tersebut. \n\n4. **Tanggung Jawab Pengguna** \nSebelum menggunakan perangkat lunak ini, pengguna harus memahami dan memastikan bahwa penggunaan mereka tidak melanggar hak kekayaan intelektual, rahasia dagang, atau hak sah pihak lain. Setiap sengketa hukum dan konsekuensi akibat penggunaan perangkat lunak ini secara tidak tepat menjadi tanggung jawab pengguna sepenuhnya. \n\nDengan menggunakan perangkat lunak ini, pengguna dianggap telah membaca, memahami, dan menyetujui semua ketentuan dalam penafian ini. Jika ada pertanyaan, konsultasikan dengan penasihat hukum profesional.' +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/id-ID/mcp.json b/src/renderer/src/i18n/id-ID/mcp.json new file mode 100644 index 000000000..5bdc79a56 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/mcp.json @@ -0,0 +1,307 @@ +{ + "title": "Pengaturan MCP", + "description": "Kelola dan konfigurasikan server dan alat MCP (Model Context Protocol).", + "enabledTitle": "Aktifkan MCP", + "enabledDescription": "Setelah diaktifkan, layanan yang diaktifkan akan dimulai secara otomatis", + "enableToAccess": "Harap aktifkan MCP terlebih dahulu untuk mengakses opsi konfigurasi", + "errors": { + "loadConfigFailed": "Gagal memuat konfigurasi MCP", + "setEnabledFailed": "Pengaturan status diaktifkan MCP gagal", + "getServerStatusFailed": "Gagal mendapatkan status server {serverName}", + "addServerFailed": "Gagal menambahkan server", + "updateServerFailed": "Pembaruan server gagal", + "removeServerFailed": "Gagal menghapus server", + "maxDefaultServersReached": "Hanya maksimal 30 server default yang dapat diatur", + "toggleDefaultServerFailed": "Gagal mengganti status server default", + "resetToDefaultFailed": "Gagal memulihkan server default", + "toggleServerFailed": "Beralih status server {serverName} gagal", + "loadToolsFailed": "Gagal memuat alat", + "loadPromptsFailed": "Gagal memuat prompt template", + "loadResourcesFailed": "Gagal memuat sumber daya", + "callToolFailed": "Gagal memanggil alat {toolName}", + "toolCallError": "Kesalahan panggilan alat: {error}", + "mcpDisabled": "Fungsi MCP dinonaktifkan", + "getPromptFailed": "Gagal mendapatkan prompt template", + "readResourceFailed": "Gagal membaca sumber daya", + "promptNotFound": "prompt template '{name}' tidak ditemukan", + "emptyPromptContent": "'{name}' Prompt kosong", + "missingParameters": "Parameter tidak ada: {params}", + "invalidParameters": "Parameter tidak valid: {params}" + }, + "tabs": { + "servers": "server", + "tools": "Alat" + }, + "serverList": "Daftar server", + "addServer": "Tambahkan server", + "running": "Berlari", + "stopped": "Berhenti", + "stopServer": "Hentikan servernya", + "startServer": "Mulai servernya", + "noServersFound": "Server tidak ditemukan", + "addServerDialog": { + "title": "Tambahkan server", + "description": "Konfigurasikan server MCP baru" + }, + "editServerDialog": { + "title": "Sunting server", + "description": "Edit konfigurasi server MCP" + }, + "serverForm": { + "name": "Nama server", + "namePlaceholder": "Masukkan nama server", + "nameRequired": "Nama server tidak boleh kosong", + "type": "Jenis server", + "typePlaceholder": "Pilih jenis server", + "typeStdio": "standar masukan dan keluaran", + "typeSse": "acara terkirim server", + "typeInMemory": "memori", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Masukkan Base URL server (misalnya: http://localhost:3000)", + "command": "perintah", + "commandPlaceholder": "Masukkan perintah", + "commandRequired": "Perintah tidak boleh kosong", + "args": "parameter", + "argsPlaceholder": "Satu parameter per baris", + "addArg": "Tambahkan parameter", + "argPlaceholder": "Masukkan nilai parameter", + "argsRequired": "Parameter tidak boleh kosong", + "env": "variabel lingkungan", + "envPlaceholder": "Masukkan variabel lingkungan dalam format JSON", + "envInvalid": "Variabel lingkungan harus dalam format JSON yang valid", + "description": "Deskripsi", + "descriptionPlaceholder": "Masukkan deskripsi server", + "descriptions": "Deskripsi", + "descriptionsPlaceholder": "Masukkan deskripsi server", + "icon": "ikon", + "iconPlaceholder": "ikon masukan", + "icons": "ikon", + "iconsPlaceholder": "ikon masukan", + "autoApprove": "Otorisasi otomatis", + "autoApproveAll": "Semua", + "autoApproveRead": "membaca", + "autoApproveWrite": "menulis", + "autoApproveHelp": "Pilih jenis operasi yang memerlukan otorisasi otomatis dan dapat dilakukan tanpa konfirmasi pengguna", + "submit": "Kirim", + "add": "tambahkan", + "update": "memperbarui", + "cancel": "Batalkan", + "jsonConfigIntro": "Anda dapat menempelkan konfigurasi JSON secara langsung atau memilih untuk mengkonfigurasi server secara manual.", + "jsonConfig": "Konfigurasi JSON", + "jsonConfigPlaceholder": "Silakan tempel konfigurasi format JSON dari server MCP", + "jsonConfigExample": "JSON Contoh Konfigurasi", + "parseSuccess": "Penguraian konfigurasi berhasil", + "configImported": "Konfigurasi berhasil diimpor", + "parseError": "Kesalahan penguraian", + "skipToManual": "Lewati ke konfigurasi manual", + "parseAndContinue": "menguraikan dan melanjutkan", + "folders": "daftar folder", + "addFolder": "Tambahkan map", + "selectFolder": "Pilih map", + "selectFolderError": "Gagal memilih folder", + "noFoldersSelected": "Tidak ada folder yang dipilih" + }, + "deleteServer": "Hapus server", + "editServer": "Sunting server", + "setDefault": "Tetapkan sebagai bawaan", + "removeDefault": "Hapus bawaan", + "isDefault": "Server bawaan", + "default": "Bawaan", + "setAsDefault": "Tetapkan sebagai server default", + "removeServer": "Hapus server", + "confirmRemoveServer": "Apakah Anda yakin ingin menghapus server {name}? Tindakan ini tidak dapat dibatalkan.", + "removeServerDialog": { + "title": "Hapus server" + }, + "confirmDelete": { + "title": "Konfirmasikan penghapusan", + "description": "Apakah Anda yakin ingin menghapus server {name}? Tindakan ini tidak dapat dibatalkan.", + "confirm": "Hapus", + "cancel": "Batalkan" + }, + "resetToDefault": "Pulihkan layanan default", + "resetConfirmTitle": "Pulihkan layanan default", + "resetConfirmDescription": "Tindakan ini akan memulihkan semua server default sambil mempertahankan server khusus Anda. Modifikasi apa pun pada server default akan hilang.", + "resetConfirm": "memulihkan", + "tools": { + "searchPlaceholder": "Alat pencarian...", + "noToolsAvailable": "Belum ada alat yang tersedia", + "selectToolToDebug": "Pilih alat untuk di-debug", + "dialogDescription": "Alat debugging dan pengujian disediakan oleh server MCP", + "toolsCount": "alat", + "availableTools": "Alat yang tersedia", + "toolList": "Daftar alat", + "functionDescription": "Deskripsi fungsi", + "invalidJson": "Format JSON tidak valid", + "inputHint": "Silakan masukkan parameter dalam format JSON", + "required": "diperlukan", + "noDescription": "Belum ada deskripsi", + "input": "parameter masukan", + "path": "jalan", + "pathPlaceholder": "jalur file masukan", + "searchPattern": "Modus pencarian", + "searchPatternPlaceholder": "Masukkan ekspresi reguler", + "filePattern": "modus berkas", + "filePatternPlaceholder": "Masuk ke mode file, misalnya: *.md", + "executeButton": "Alat eksekusi", + "resultTitle": "Hasil eksekusi", + "runningTool": "Alat pelaksana", + "loading": "Memuat...", + "error": "Gagal memuat", + "available": "{count} alat tersedia", + "none": "Tidak ada alat yang tersedia", + "title": "Alat MCP", + "description": "MCP Alat yang disediakan oleh server", + "loadError": "Gagal memuat alat", + "parameters": "parameter", + "refresh": "Segarkan", + "disabled": "MCP dinonaktifkan", + "enableToUse": "Harap aktifkan MCP terlebih dahulu untuk menggunakan alat ini", + "enabled": "Aktifkan MCP", + "enabledDescription": "Aktifkan fungsionalitas MCP untuk menggunakan panggilan alat", + "acpManagedHint": "Alat MCP dikelola oleh \"ACP Agent\"", + "acpServersSelected": "{count} MCP dipilih", + "acpServersNone": "Agent tidak dikonfigurasi MCP", + "jsonInputPlaceholder": "Masukkan parameter dalam format JSON", + "type": "Ketik", + "annotations": "anotasi", + "empty": "kosong", + "invalidJsonFormat": "Format JSON salah", + "allowedValues": "nilai yang diperbolehkan", + "arrayItemValues": "Nilai elemen array" + }, + "inmemory": { + "bochaSearch": { + "name": "Pencarian Bocha", + "desc": "API Pencarian Bocha https://open.bochaai.com/" + }, + "buildInFileSystem": { + "name": "sistem file", + "desc": "Aktifkan DeepChat untuk beroperasi pada file lokal" + }, + "Artifacts": { + "name": "Artifacts", + "desc": "Jadikan keluaran DeepChat Anda beragam dengan konten Artifacts" + }, + "braveSearch": { + "name": "Pencarian Brave", + "desc": "API Pencarian Brave https://brave.com/search/api/" + }, + "difyKnowledge": { + "name": "Pencarian Basis Pengetahuan Dify", + "desc": "Layanan pencarian basis pengetahuan Dify, dapat mencari konten di basis pengetahuan Dify" + }, + "ragflowKnowledge": { + "name": "Pencarian basis pengetahuan RAGFlow", + "desc": "Layanan pencarian basis pengetahuan RAGFlow, yang dapat mencari konten basis pengetahuan RAGFlow" + }, + "fastGptKnowledge": { + "name": "Pencarian basis pengetahuan FastGPT", + "desc": "Layanan pencarian basis pengetahuan FastGPT, yang dapat mencari konten basis pengetahuan FastGPT" + }, + "builtinKnowledge": { + "name": "Pencarian basis pengetahuan bawaan", + "desc": "Layanan pencarian basis pengetahuan bawaan DeepChat, dapat mencari konten di basis pengetahuan bawaan DeepChat" + }, + "deepchat-inmemory/custom-prompts-server": { + "name": "Prompt kustom", + "desc": "DeepChat layanan prompt kustom bawaan" + }, + "deepchat-inmemory/deep-research-server": { + "name": "DeepResearch", + "desc": "DeepChat layanan penelitian mendalam bawaan berdasarkan pencarian Bocha, (perhatikan bahwa model konteks panjang diperlukan untuk digunakan, model dengan konteks yang tidak memadai mungkin gagal)" + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Template prompt otomatis", + "desc": "Secara otomatis memilih prompt kustom yang paling sesuai berdasarkan masukan pengguna dan secara cerdas mengisi template prompt" + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Pencarian riwayat percakapan", + "desc": "DeepChat Layanan pencarian riwayat percakapan bawaan, yang dapat mencari catatan riwayat percakapan dan konten pesan" + }, + "deepchat/apple-server": { + "name": "asisten sistem macOS", + "desc": "Izinkan model mengoperasikan fungsi sistem macOS seperti kalender, kontak, mail, peta, memo, pengingat, dll." + } + }, + "prompts": { + "noPromptsAvailable": "Belum ada Prompts yang tersedia", + "noDescription": "Belum ada deskripsi", + "selectPrompt": "Prompt yang dipilih ditampilkan di sini", + "parameters": "Prompt Parameter", + "input": "parameter masukan", + "runningPrompt": "Prompt Mendapatkan", + "executeButton": "Klik untuk mendapatkan", + "resultTitle": "Prompt Detail", + "resetToDefault": "Reset ke parameter default", + "invalidJson": "Format JSON tidak valid", + "parametersHint": "Silakan masukkan parameter dalam format JSON, pemformatan otomatis didukung", + "dialogDescription": "Debugging dan pengujian MCP Server disediakan prompt template" + }, + "resources": { + "noResourcesAvailable": "Tidak ada Sumber Daya", + "selectResource": "Tampilkan konten Sumber Daya di sini", + "loading": "Memuat", + "loadContent": "Dapatkan konten Sumber Daya", + "pleaseSelect": "Klik untuk menampilkan detail Sumber Daya", + "dialogDescription": "Telusuri dan lihat sumber daya yang disediakan oleh server MCP" + }, + "market": { + "browseBuiltin": "Jelajahi pasar MCP bawaan", + "builtinTitle": "MCP Pasar", + "poweredBy": "Didukung oleh MCPRouter", + "keyGuide": "Dapatkan kuncinya", + "keyHelpText": "Silakan datang dulu", + "keyHelpEnd": "Ajukan permohonan API Key dan isi kotak masukan di atas", + "apiKeyPlaceholder": "Masukan MCPRouter API Key", + "apiKeyRequiredTitle": "Membutuhkan API Key", + "apiKeyRequiredDesc": "Silakan isi MCPRouter API Key sebelum pemasangan", + "install": "Instalasi", + "installed": "Dipasang", + "installSuccess": "Instalasi berhasil", + "installFailed": "Instalasi gagal", + "noMore": "tidak lebih", + "empty": "Belum ada layanan", + "loadMore": "memuat lebih banyak", + "pullDownToLoad": "Lanjutkan gulir ke bawah untuk memuat lebih banyak" + }, + "sampling": { + "approve": "Setuju", + "confirming": "Mengonfirmasi...", + "confirm": "Kirim respons model", + "sendResponse": "Kirim tanggapan", + "selectModel": "Pilih modelnya", + "respondWith": "Model respons:", + "maxTokensInfo": "Panjang respons maksimum: {maxTokens} tokens", + "contentType": { + "audio": "Audio", + "image": "gambar", + "text": "teks" + }, + "description": "Lihat konteks berbagi server MCP dan pilih apakah akan menghasilkan respons.", + "imageAlt": "Gambar{索引}", + "messagesTitle": "konteks percakapan", + "noModels": "Tidak ada model yang cocok yang diaktifkan.\nAktifkan model yang berlaku di Pengaturan untuk melanjutkan.", + "noVisionModels": "Tidak ada model yang diaktifkan secara visual yang diaktifkan.\nAktifkan model visual di Pengaturan untuk melanjutkan.", + "preference": { + "cost": "Prioritas biaya", + "hints": "Prompt model", + "intelligence": "Intelijen dulu", + "speed": "Prioritas kecepatan" + }, + "preferencesTitle": "Preferensi model", + "reject": "menolak", + "selectedModelLabel": "Tanggapi dengan {model} ({provider})", + "systemPrompt": "System prompt", + "title": "Contoh permintaan dari {server}", + "unknownHint": "Prompt tanpa nama", + "unknownMime": "Jenis MIME tidak dikenal", + "unknownServer": "server yang tidak dikenal", + "unsupportedMessage": "Tipe konten ini tidak didukung.", + "visionWarning": "Model yang dipilih tidak mendukung masukan visual.\nSilakan pilih model yang mampu secara visual sebelum melanjutkan.", + "autoApproving": "MCP contoh permintaan dari {server}", + "autoApproveIn": "Secara otomatis digunakan setelah {seconds} detik {model} disetujui", + "reviewRequest": "Lihat detailnya", + "sessionActive": "Sesi aktif - permintaan akan disetujui secara otomatis" + } +} diff --git a/src/renderer/src/i18n/id-ID/model.json b/src/renderer/src/i18n/id-ID/model.json new file mode 100644 index 000000000..a5c914241 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Cari model..." + }, + "error": { + "loadFailed": "Gagal memuat model" + }, + "type": { + "custom": "model khusus", + "official": "model resmi" + }, + "add": { + "namePlaceholder": "Nama model", + "idPlaceholder": "ID Model", + "contextLengthPlaceholder": "panjang konteks", + "maxTokensPlaceholder": "Token maksimum" + }, + "actions": { + "add": "Tambahkan model", + "enableAll": "Aktifkan semua", + "disableAll": "Nonaktifkan semua" + }, + "sort": { + "status": "berdasarkan status", + "name": "berdasarkan nama" + }, + "filter": { + "label": "Menyaring", + "clearAll": "Hapus penyaring", + "visibleCount": "Tampilkan {visible} / {total}", + "capabilities": "Kemampuan", + "types": "Ketik", + "capabilityOptions": { + "vision": "Visi", + "functionCall": "panggilan fungsi", + "reasoning": "penalaran", + "search": "Pencarian internet" + }, + "typeOptions": { + "chat": "dialog", + "embedding": "vektor", + "rerank": "mengatur ulang", + "imageGeneration": "generasi gambar", + "videoGeneration": "generasi video" + } + }, + "tags": { + "reasoning": "penalaran", + "chat": "dialog", + "code": "kode", + "writing": "menulis", + "analysis": "analisis" + } +} diff --git a/src/renderer/src/i18n/id-ID/plan.json b/src/renderer/src/i18n/id-ID/plan.json new file mode 100644 index 000000000..58958dd1b --- /dev/null +++ b/src/renderer/src/i18n/id-ID/plan.json @@ -0,0 +1,4 @@ +{ + "title": "perencanaan misi", + "completed": "Selesai" +} diff --git a/src/renderer/src/i18n/id-ID/promptSetting.json b/src/renderer/src/i18n/id-ID/promptSetting.json new file mode 100644 index 000000000..8cda928c8 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "Manajemen prompt", + "addTitle": "Tambah prompt", + "addDescription": "Buat templat prompt khusus baru", + "editTitle": "Sunting prompt", + "editDescription": "Ubah templat prompt yang dipilih", + "name": "Nama", + "namePlaceholder": "Silakan masukkan nama prompt", + "description": "Deskripsi", + "descriptionPlaceholder": "Silakan masukkan deskripsi (opsional)", + "promptContent": "prompt", + "contentPlaceholder": "Silakan masukkan konten prompt", + "basicInfo": "Informasi dasar", + "contentTip": "Mendukung penggunaan placeholder variabel, seperti {openBrace}{openBrace}variable{closeBrace}{closeBrace}, dan parameter terkait dapat ditentukan di bagian parameter", + "noPrompt": "Saat ini tidak ada prompt, silakan klik di pojok kanan atas untuk menambahkan", + "noPromptDesc": "Klik tombol Baru di sudut kanan atas untuk membuat prompt pertama Anda", + "active": "aktifkan", + "noDescription": "Belum ada deskripsi", + "customDate": "Sesuaikan", + "showMore": "Tampilkan lebih banyak", + "showLess": "dekat", + "export": "Ekspor", + "import": "impor", + "exportSuccess": "Ekspor berhasil", + "exportFailed": "Ekspor gagal", + "importSuccess": "Impor berhasil", + "importFailed": "Impor gagal", + "importStats": "{added} ditambahkan, {updated} diperbarui prompt", + "parameters": "parameter", + "addParameter": "Tambahkan parameter", + "noParameters": "Belum ada parameter", + "noParametersDesc": "Klik tombol di atas untuk menambahkan parameter. Parameter dapat digunakan untuk membuat placeholder variabel di prompt", + "parameterName": "Nama parameter", + "parameterDescription": "Deskripsi parameter", + "parameterNamePlaceholder": "Silakan masukkan nama parameter", + "parameterDescriptionPlaceholder": "Silakan masukkan deskripsi parameter", + "required": "Diperlukan", + "characters": "karakter", + "fileManagement": "Manajemen file", + "uploadFromDevice": "Unggah dari perangkat", + "uploadFromDeviceDesc": "Mendukung teks, dokumen, CSV, dan format lainnya", + "uploadedFiles": "Berkas diunggah", + "noFiles": "Belum ada file", + "noFilesUploadDesc": "Klik di atas untuk mengunggah file", + "uploadSuccess": "Unggahan berhasil", + "uploadedCount": "{count} file diunggah", + "confirmDelete": "Apakah Anda yakin ingin menghapus prompt \"{name}\"?", + "confirmDeleteDescription": "Operasi ini tidak dapat diubah dan prompt tidak dapat dipulihkan setelah penghapusan.", + "confirmDeleteSystemPrompt": "Apakah Anda yakin ingin menghapus system prompt \"{name}\"?", + "confirmDeleteSystemPromptDescription": "Operasi ini tidak dapat diubah dan system prompt tidak dapat dipulihkan setelah penghapusan.", + "deleteSuccess": "Hapus berhasil", + "deleteFailed": "Penghapusan gagal", + "inactive": "Dinonaktifkan", + "clickToEnable": "Klik untuk mengaktifkan", + "clickToDisable": "Klik untuk menonaktifkan", + "enableSuccess": "Berhasil diaktifkan", + "disableSuccess": "Berhasil dinonaktifkan", + "toggleFailed": "Gagal beralih status", + "enablePrompt": "Aktifkan prompt ini", + "sourceLocal": "lokal", + "sourceImported": "impor", + "sourceBuiltin": "Bawaan", + "defaultSystemPrompt": "Bawaan system prompt", + "defaultSystemPromptPlaceholder": "Silakan masukkan system prompt default, yang akan digunakan sebagai system prompt default untuk semua percakapan baru...", + "defaultSystemPromptDescription": "prompt ini akan berfungsi sebagai system prompt default untuk semua percakapan baru. Anda dapat memodifikasinya saat membuat percakapan. Perhatikan bahwa pengaturan ini akan berlaku saat Anda membuat percakapan baru lagi.", + "typing": "Masuk", + "saving": "Menyimpan", + "saved": "disimpan", + "saveDefaultPromptFailed": "Gagal menyimpan system prompt default", + "systemPrompts": "system prompt", + "customPrompts": "Prompt kustom", + "addSystemPrompt": "Ditambahkan system prompt", + "addCustomPrompt": "Menambahkan prompt khusus", + "editSystemPrompt": "Sunting system prompt", + "addSystemPromptDesc": "Buat system prompt baru", + "editSystemPromptDesc": "Ubah system prompt yang dipilih", + "selectSystemPrompt": "Pilih system prompt", + "systemPromptDescription": "system prompt yang dipilih akan digunakan sebagai system prompt default untuk percakapan baru", + "emptySystemPromptOption": "System prompt kosong", + "emptySystemPromptDescription": "Jika dipilih, sesi baru tidak akan berisi system prompt.", + "preview": "Pratinjau", + "systemPromptChanged": "system prompt berubah", + "systemPromptChangeFailed": "Perubahan system prompt gagal", + "systemPromptAdded": "system prompt berhasil ditambahkan", + "systemPromptAddedAndSwitched": "system prompt berhasil ditambahkan dan secara otomatis dialihkan ke default", + "systemPromptUpdated": "system prompt berhasil diperbarui", + "systemPromptSaveFailed": "Gagal menyimpan system prompt", + "systemPromptDeleted": "system prompt berhasil dihapus", + "systemPromptDeleteFailed": "Gagal menghapus system prompt", + "systemPromptEditTip": "Simpan secara otomatis ketika fokus hilang setelah modifikasi", + "resetToDefault": "Kembalikan default", + "resetToDefaultSuccess": "Dipulihkan ke konten default", + "resetToDefaultFailed": "Pemulihan default gagal", + "parameterRequired": "Parameter yang diperlukan" +} diff --git a/src/renderer/src/i18n/id-ID/routes.json b/src/renderer/src/i18n/id-ID/routes.json new file mode 100644 index 000000000..89c1f5990 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "mengobrol", + "welcome": "selamat datang", + "settings": "pengaturan", + "settings-common": "Pengaturan umum", + "settings-provider": "Pengaturan penyedia layanan", + "settings-mcp": "Pengaturan MCP", + "settings-deepchat-agents": "DeepChat Agent", + "settings-database": "Pengaturan data", + "settings-about": "Tentang", + "settings-shortcut": "Tombol pintas", + "settings-display": "pengaturan tampilan", + "settings-knowledge-base": "basis pengetahuan", + "settings-prompt": "Prompt Manajemen", + "settings-mcp-market": "MCP Pasar", + "settings-acp": "ACP Agent", + "settings-skills": "Pengaturan Skills", + "settings-notifications-hooks": "Kait", + "settings-dashboard": "Dasbor data", + "settings-environments": "lingkungan direktori", + "settings-remote": "terpencil", + "settings-plugins": "plugin", + "settings-overview": "Ikhtisar pengaturan" +} diff --git a/src/renderer/src/i18n/id-ID/settings.json b/src/renderer/src/i18n/id-ID/settings.json new file mode 100644 index 000000000..08f5b3509 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "pengaturan", + "common": { + "title": "Pengaturan umum", + "resetData": "Setel ulang data", + "language": "Bahasa", + "languageSelect": "Pilih bahasa", + "searchEngine": "mesin pencari", + "searchEngineSelect": "Pilih mesin pencari", + "searchPreview": "Pratinjau pencarian", + "launchAtLoginEnabled": "Mulai saat boot DeepChat", + "autoScrollEnabled": "Gulir secara otomatis saat dibuat", + "privacyMode": "modus privasi", + "privacyModeDescription": "Setelah mode privasi diaktifkan, DeepChat tidak akan secara otomatis memulai permintaan berikut:", + "privacyModeAutoUpdate": "Pemeriksaan pembaruan aplikasi", + "privacyModeProviderDb": "Penyegaran metadata penyedia layanan dan model", + "privacyModeAcpRegistry": "Penyegaran registri ACP dan sinkronisasi ikon", + "privacyModeNpmRegistry": "MCP npm Deteksi otomatis registri", + "privacyModeManualActions": "Pemeriksaan manual dan penyegaran manual terus tersedia.", + "privacyModeIntegrations": "Integrasi pihak ketiga seperti MCP/Remote yang dikonfigurasi sendiri tidak terpengaruh", + "autoCompaction": { + "title": "kompresi otomatis", + "enabled": "Aktifkan kompresi otomatis", + "description": "Saat percakapan mendekati batas jendela konteks model, DeepChat secara otomatis merangkum riwayat lama untuk membantu melanjutkan percakapan. Setelah penutupan, riwayat kelebihan anggaran akan langsung dibuang dan tidak ada ringkasan yang akan dibuat.", + "thresholdLabel": "ambang batas pemicu", + "thresholdMin": "Muka ({value}%)", + "thresholdMax": "Ditunda ({value}%)", + "thresholdDescription": "Kompresi dimulai ketika tingkat hunian prompt mencapai proporsi anggaran historis efektif ini. Nilai yang lebih rendah menghasilkan buffer yang lebih besar, dan nilai yang lebih tinggi mempertahankan lebih banyak konteks aslinya.", + "retainPairsLabel": "Simpan pesan terbaru", + "retainPairsValue": "{count} Ya", + "retainPairsDescription": "Pasangan pesan pengguna dan asisten yang paling baru diselesaikan selalu disimpan dan tidak berpartisipasi dalam kompresi. Kueri terakhir saat ini tidak dihitung." + }, + "searchAssistantModel": "model pembantu", + "selectModel": "Pilih modelnya", + "proxyMode": "mode proksi", + "proxyModeSelect": "Pilih mode proksi", + "proxyModeSystem": "agen sistem", + "proxyModeNone": "Tidak menggunakan proksi", + "proxyModeCustom": "Proksi khusus", + "customProxyUrl": "Alamat proksi khusus", + "customProxyUrlPlaceholder": "Misalnya: http://127.0.0.1:7890", + "invalidProxyUrl": "Alamat proxy tidak valid, masukkan http/https URL yang valid", + "addCustomSearchEngine": "Tambahkan mesin pencari khusus", + "addCustomSearchEngineDesc": "Untuk menambahkan mesin pencari baru, berikan nama dan cari URL. {query} harus disertakan dalam URL sebagai placeholder kueri.", + "searchEngineName": "Nama mesin pencari", + "searchEngineNamePlaceholder": "Silakan masukkan nama mesin pencari", + "searchEngineUrl": "Telusuri URL", + "searchEngineUrlPlaceholder": "Misalnya: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "URL harus berisi {'{'}query{'}'} sebagai placeholder kueri", + "deleteCustomSearchEngine": "Hapus mesin pencari khusus", + "deleteCustomSearchEngineDesc": "Apakah Anda yakin ingin menghapus mesin pencari khusus \"{name}\"? Tindakan ini tidak dapat dibatalkan.", + "testSearchEngine": "Uji mesin pencari", + "testSearchEngineDesc": "Pencarian uji coba akan dilakukan menggunakan mesin pencari {engine}, yang akan mencari kata kunci \"cuaca\".", + "testSearchEngineNote": "Jika halaman pencarian memerlukan login atau operasi lainnya, Anda dapat melakukannya di jendela pengujian. Silakan tutup jendela tes setelah menyelesaikan tes.", + "theme": "Topik", + "themeSelect": "Pilih tema", + "themeLight": "warna terang", + "themeDark": "Gelap", + "themeSystem": "Ikuti sistemnya", + "closeToQuit": "Keluar dari program ketika mengklik tombol tutup", + "shortcut": { + "title": "Pengaturan tombol pintas", + "newChat": "Obrolan baru" + }, + "contentProtection": "Perlindungan proyeksi layar", + "contentProtectionDialogTitle": "Konfirmasi sakelar perlindungan proyeksi layar", + "contentProtectionEnableDesc": "Mengaktifkan perlindungan screencast dapat mencegah perangkat lunak screencasting menangkap jendela utama DeepChat untuk melindungi privasi konten Anda. Harap dicatat bahwa fungsi ini tidak akan sepenuhnya menyembunyikan semua antarmuka, harap gunakan secara wajar dan patuh. Selain itu, tidak semua perangkat lunak screencasting menghormati pengaturan privasi pengguna. Fungsi ini mungkin gagal pada beberapa perangkat lunak screencasting yang tidak mematuhi pengaturan privasi, dan jendela hitam mungkin tetap ada di beberapa lingkungan.", + "contentProtectionDisableDesc": "Menonaktifkan perlindungan proyeksi akan memungkinkan perangkat lunak proyeksi menangkap jendela DeepChat.", + "contentProtectionRestartNotice": "Mengalihkan pengaturan ini akan menyebabkan program dimulai ulang. Apakah Anda yakin ingin melanjutkan?", + "copyWithCotEnabled": "Salin informasi COT", + "traceDebugEnabled": "Lacak panggilan", + "loggingEnabled": "Aktifkan pencatatan", + "loggingDialogTitle": "Konfirmasikan perubahan pengaturan log", + "loggingEnableDesc": "Mengaktifkan logging akan membantu kami mendiagnosis masalah dan meningkatkan aplikasi. File log mungkin berisi informasi sensitif.", + "loggingDisableDesc": "Menonaktifkan logging akan menghentikan pengumpulan log aplikasi.", + "charactersUnit": "karakter", + "loggingRestartNotice": "Mengalihkan pengaturan ini akan menyebabkan program dimulai ulang. Apakah Anda yakin ingin melanjutkan?", + "openLogFolder": "Buka folder log", + "notifications": "Pemberitahuan sistem", + "notificationsDesc": "Ketika DeepChat tidak berada di latar depan, pemberitahuan sistem akan dikirim jika sesi dibuat.", + "fileMaxSize": "ukuran file maksimum", + "fileMaxSizeHint": "Batasi ukuran unggahan maksimum satu file", + "defaultModel": { + "title": "Model bawaan", + "chatModel": "Model obrolan bawaan" + } + }, + "deepchatAgents": { + "title": "DeepChat Agents", + "description": "Kelola DeepChat Agent dan default sesi barunya.", + "builtIn": "Bawaan", + "editTitle": "Sunting DeepChat Agent", + "createTitle": "DeepChat Agent baru", + "unnamed": "Tanpa nama Agent", + "name": "Nama", + "namePlaceholder": "Misalnya Penulis/Penelitian/Penerjemah", + "enabledLabel": "Status diaktifkan", + "descriptionLabel": "Deskripsi", + "descriptionPlaceholder": "Opsional, digunakan untuk menjelaskan tujuan Agent ini", + "avatarTitle": "avatar", + "avatarDefault": "Bawaan", + "avatarDefaultDesc": "DeepChat menggunakan ikon default, dan Agent lainnya menggunakan avatar teks.", + "avatarLucide": "Ikon Lucida", + "avatarLucideDesc": "Pilih dari ikon Lucide dan atur warna terang/gelap masing-masing.", + "avatarMonogram": "Avatar teks", + "avatarMonogramDesc": "Gunakan dua huruf bahasa Inggris pertama atau karakter Cina pertama untuk membedakan Agent.", + "lucideIcon": "Nama ikon Lucide", + "lightColor": "warna terang", + "darkColor": "warna gelap", + "monogramText": "Avatar teks", + "monogramPlaceholder": "Misalnya WR / giling", + "backgroundColor": "warna latar belakang", + "modelsTitle": "bawaan model", + "chatModel": "Model dialog default", + "assistantModel": "model pembantu", + "visionModel": "model visual", + "imageGenerationModel": "Model pembuatan gambar", + "temperature": "suhu", + "contextLength": "panjang konteks", + "maxTokens": "Jumlah maksimum Token", + "thinkingBudget": "Pikirkan tentang anggaran", + "reasoningEffort": "Kekuatan penalaran", + "verbosity": "tingkat detail", + "interleaved": "Kompatibilitas yang dipaksakan dan pemikiran yang disisipkan", + "systemPrompt": "Bawaan system prompt", + "systemPromptPlaceholder": "Biarkan kosong untuk menggunakan blanksystem prompt", + "defaultProjectPath": "Direktori default (opsional)", + "defaultProjectPathPlaceholder": "Biarkan kosong untuk menggunakan direktori default global", + "permissionMode": "Izin bawaan", + "permissionFullAccess": "Aktifkan semua", + "permissionDefault": "Izin bawaan", + "subagentsTitle": "subagent", + "subagentsDescription": "Konfigurasikan slot sesi `subagent_orchestrator` yang dapat digunakan kembali.", + "subagentsEnabled": "Aktifkan subagent", + "subagentTargetType": "tipe sasaran", + "subagentTargetSelf": "Saat iniAgent", + "subagentTargetAgent": "Tentukan Agent", + "subagentDisplayName": "nama tampilan", + "subagentDescription": "Deskripsi slot", + "subagentTargetAgentLabel": "TargetAgent", + "subagentLimit": "slot {count}/{max}", + "addSubagentSlot": "+ tambahkan slot", + "toolsTitle": "Alat bawaan", + "compactionTitle": "kompresi otomatis", + "compactionEnabled": "Aktifkan kompresi otomatis", + "compactionDescription": "Pengaturan ini hanya memengaruhi sesi DeepChat berikutnya yang baru dibuat.", + "compactionThreshold": "ambang batas pemicu", + "compactionRetainPairs": "Simpan pesan terbaru", + "deleteConfirm": "Apakah Anda yakin ingin menghapus Agent \"{name}\"? Riwayat sesinya secara otomatis kembali ke DeepChat bawaan." + }, + "notificationsHooks": { + "title": "Kait", + "description": "Konfigurasikan perintah Hook siklus hidup.", + "events": { + "title": "acara", + "SessionStart": "Sesi dimulai", + "UserPromptSubmit": "Kiriman Pengguna", + "PreToolUse": "Sebelum alat dipanggil", + "PostToolUse": "Setelah alat dipanggil", + "PostToolUseFailure": "Panggilan alat gagal", + "PermissionRequest": "permintaan izin", + "Stop": "berhenti", + "SessionEnd": "sesi berakhir" + }, + "commands": { + "title": "Perintah Kait", + "description": "Jalankan perintah khusus berdasarkan peristiwa siklus hidup yang dipilih.", + "hint": "Payload lengkap akan ditulis ke stdin sebagai JSON.", + "commandPlaceholder": "perintah untuk dieksekusi", + "commandLabel": "perintah", + "name": "Nama", + "namePlaceholder": "Nama kait", + "newHook": "Kait Baru", + "empty": "Belum ada Hooknya, klik pojok kanan atas untuk membuat yang baru.", + "defaultName": "Kait {index}", + "guideTitle": "Petunjuk penggunaan", + "guideDescription": "Setelah peristiwa yang dicentang dipicu, DeepChat akan menjalankan perintah ini. Peristiwa saat ini dapat dibaca melalui stdin JSON, variabel lingkungan, dan placeholder baris perintah.", + "deliveryTitle": "Metode transfer parameter", + "deliveryStdin": "Payload lengkap akan ditulis ke stdin sebagai JSON.", + "deliveryPlaceholder": "Placeholder baris perintah dapat digunakan langsung pada baris perintah.", + "deliveryEnv": "Kumpulan metadata dasar yang sama juga ditulis ke variabel lingkungan secara bersamaan.", + "metadataOnly": "Placeholder baris perintah lebih cocok untuk metadata kecil; prompt, detail alat, izin, penggunaan, penghentian, kesalahan, dll. harus dibaca dari stdin JSON.", + "stdinPreviewLabel": "contoh stdin", + "placeholdersTitle": "command line placeholder", + "placeholdersDescription": "Placeholder akan diperluas sebelum eksekusi dan dapat ditempatkan langsung setelah perintah sebagai parameter.", + "envTitle": "variabel lingkungan", + "examplesTitle": "Contoh perintah", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Python", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Nama acara saat ini", + "time": "Waktu acara, format ISO-8601", + "isTest": "Apakah dipicu oleh tombol tes", + "conversationId": "ID sesi saat ini", + "workdir": "Direktori kerja diselesaikan oleh sesi saat ini", + "agentId": "ID Agent saat ini (jika ada)", + "providerId": "ID Provider saat ini (jika ada)", + "modelId": "ID Model Saat Ini (jika ada)", + "messageId": "ID pesan pengguna saat ini (jika ada)", + "toolName": "Nama alat saat ini (jika ada)", + "toolCallId": "ID panggilan alat saat ini (jika ada)" + } + }, + "test": { + "button": "tes", + "testing": "Menguji...", + "success": "sukses", + "failed": "gagal", + "duration": "{ms} ms", + "statusCode": "HTTP {code}", + "exitCode": "Kode keluar {code}", + "retryAfter": "Coba lagi tunggu {ms} ms", + "stdout": "stdout", + "stderr": "stderr" + } + }, + "data": { + "title": "Pengaturan data", + "syncEnable": "Aktifkan sinkronisasi data", + "syncFolder": "Sinkronkan folder", + "openSyncFolder": "Buka folder sinkronisasi", + "lastSyncTime": "Waktu sinkronisasi terakhir", + "never": "Tidak pernah disinkronkan", + "startBackup": "Cadangkan sekarang", + "backingUp": "Mencadangkan...", + "importData": "Impor data", + "incrementImport": "Impor tambahan", + "overwriteImport": "Ganti impor", + "backupSelectLabel": "Pilih titik waktu pencadangan", + "backupSelectDescription": "Silakan pilih cadangan yang ingin Anda impor.", + "selectBackupPlaceholder": "Silakan pilih cadangan", + "noBackupsAvailable": "Saat ini tidak ada cadangan yang tersedia, harap lakukan pencadangan terlebih dahulu.", + "importConfirmTitle": "Konfirmasi impor data", + "importConfirmDescription": "Impor akan menimpa semua data saat ini, termasuk riwayat obrolan dan pengaturan. Harap pastikan Anda telah membuat cadangan data penting. Data akan otomatis di-refresh setelah impor selesai.", + "importing": "Mengimpor...", + "confirmImport": "Konfirmasikan impor", + "importSuccessTitle": "Impor berhasil", + "importErrorTitle": "Impor gagal", + "resetData": "Setel ulang data", + "resetConfirmTitle": "Konfirmasikan pengaturan ulang data", + "resetConfirmDescription": "Silakan pilih jenis data yang akan diatur ulang. Operasi ini tidak dapat diubah dan aplikasi akan dimulai ulang secara otomatis setelah pengaturan ulang.", + "resetChatData": "Setel ulang data obrolan", + "resetChatDataDesc": "Hapus semua riwayat obrolan dan riwayat percakapan", + "resetKnowledgeData": "Setel ulang data basis pengetahuan", + "resetKnowledgeDataDesc": "Hapus semua file basis pengetahuan dan data vektor", + "resetConfig": "Setel ulang konfigurasi", + "resetConfigDesc": "Hapus semua pengaturan aplikasi, konfigurasi model, dan penyesuaianprompt", + "resetAll": "pengaturan ulang penuh", + "resetAllDesc": "Hapus semua data termasuk riwayat obrolan, konfigurasi, dan file cache", + "resetting": "Menyetel ulang...", + "confirmReset": "Konfirmasikan pengaturan ulang", + "resetCompleteDevTitle": "Penyetelan ulang data selesai", + "resetCompleteDevMessage": "Di lingkungan pengembangan, silakan restart aplikasi secara manual untuk melihat efeknya. Harap hentikan proses saat ini dan jalankan kembali pnpm run dev", + "toast": { + "backupSuccessTitle": "Pencadangan berhasil", + "backupSuccessMessage": "Data berhasil dicadangkan" + }, + "syncSectionTitle": "Pencadangan dan sinkronisasi data", + "operationsSectionTitle": "Operasi data", + "resetDataDescription": "Setel ulang obrolan, basis pengetahuan, konfigurasi, atau semua data berdasarkan jenis.", + "databaseRepair": { + "title": "Perbaikan basis data", + "description": "Deteksi dan perbaiki database secara otomatis", + "button": "Periksa dan perbaiki database", + "running": "Memeriksa dan memperbaiki...", + "lastResultLabel": "Hasil terkini: {result}", + "summaryHealthy": "Secara struktural normal", + "summaryRepaired": "Memperbaiki masalah {count}", + "summaryRepairedWithManual": "Masalah {repaired} telah diperbaiki, {manual} masih perlu ditangani secara manual", + "summaryManualOnly": "Masih ada masalah {manual} yang memerlukan pemrosesan manual", + "manualHint": "Masih terdapat masalah {count} yang belum diperbaiki secara otomatis dan memerlukan pemrosesan manual.", + "toastSuggestedTitle": "Disarankan untuk memperbaiki database", + "toastSuggestedDescription": "DeepChat Masalah struktur database telah terdeteksi ({reason}), perbaikan database dapat dilakukan sekarang.", + "toastAction": "untuk memperbaiki", + "toastHealthyTitle": "Struktur databasenya normal", + "toastHealthyDescription": "Tidak ditemukan masalah skema yang perlu diperbaiki.", + "toastCompletedTitle": "Perbaikan basis data selesai", + "toastRepairedDescription": "Memperbaiki masalah {count}.", + "toastManualDescription": "Masalah {repaired} telah diperbaiki dan masalah {manual} masih harus ditangani secara manual.", + "toastFailedTitle": "Perbaikan basis data gagal", + "toastFailedDescription": "Perbaikan basis data tidak dapat diselesaikan untuk sementara, silakan periksa log dan coba lagi.", + "reasons": { + "missing-table": "meja yang hilang", + "missing-column": "Kolom tidak ada", + "column-count-mismatch": "Jumlah kolom tidak cocok", + "type-mismatch": "Jenis kolom tidak cocok" + } + }, + "databaseEncryption": { + "title": "Enkripsi basis data SQLite", + "description": "Enkripsi agent.db menggunakan SQLCipher; Kata sandi SQLite diperlukan ketika buka kunci sistem tidak tersedia.", + "enabled": "Diaktifkan", + "disabled": "Tidak diaktifkan", + "cipher": "Metode enkripsi", + "systemUnlock": "Buka kunci sistem", + "startupUnlock": "Mulai Buka Kunci", + "lastMigration": "Migrasi terakhir", + "loading": "Memuat", + "never": "tidak pernah", + "notRequired": "Tidak perlu", + "systemUnlockAvailable": "Tersedia", + "systemUnlockUnavailable": "Tidak tersedia", + "systemUnlockMode": "Buka kunci sistem", + "manualUnlock": "Masukkan kata sandi secara manual", + "currentPassword": "kata sandi saat ini", + "newPassword": "Kata sandi SQLite baru", + "confirmPassword": "Konfirmasikan kata sandi", + "passwordMismatch": "Kata sandi yang dimasukkan dua kali tidak konsisten", + "systemCredentialStore": "Ketika penyimpanan aman sistem tersedia, DeepChat akan menyimpan kata sandi SQLite yang dienkripsi ke penyimpanan kredensial sistem (seperti MacOS Keychain, Windows Credential Vault, atau penyimpanan rahasia Linux). Setelah pembukaan kunci awal berhasil, peluncuran berikutnya biasanya terbuka secara otomatis; Anda hanya perlu memasukkan kunci enkripsi lagi ketika data dimigrasi, kredensial sistem hilang atau tidak dapat didekripsi, dan penyimpanan aman tidak tersedia.", + "safeStorageUnavailable": "Penyimpanan aman elektron tidak tersedia pada sistem saat ini. Setelah diaktifkan, Anda harus memasukkan kata sandi secara manual setiap kali Anda memulai.", + "enableButton": "Aktifkan enkripsi", + "changeButton": "Ubah kata sandi", + "disableButton": "Matikan enkripsi", + "enabledTitle": "Enkripsi basis data diaktifkan", + "changedTitle": "Kata sandi SQLite telah diubah", + "disabledTitle": "Enkripsi basis data dimatikan", + "failedTitle": "Operasi enkripsi basis data gagal", + "failedDescription": "Silakan periksa kata sandi Anda dan coba lagi.", + "setPasswordButton": "Tetapkan kata sandi", + "enableDialogTitle": "Tetapkan kata sandi SQLite", + "changeDialogTitle": "Ubah kata sandi SQLite", + "disableDialogTitle": "Matikan enkripsi basis data", + "enableDialogDescription": "Buat database SQLite terenkripsi dan migrasikan data lokal saat ini ke dalamnya.", + "changeDialogDescription": "Migrasikan database terenkripsi saat ini ke database terenkripsi baru dengan kata sandi baru.", + "disableDialogDescription": "Migrasikan database terenkripsi saat ini kembali ke database teks asli lokal.", + "cancelButton": "Batalkan", + "unknown": "tidak diketahui" + }, + "modelConfigUpdate": { + "title": "Perbarui konfigurasi model", + "descriptionPrefix": "dari ", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": " Data model sinkronisasi proyek", + "button": "Perbarui sekarang", + "updating": "Memperbarui...", + "updatedTitle": "Konfigurasi model diperbarui", + "updatedDescription": "Disegarkan ke metadata penyedia layanan terbaru.", + "upToDateTitle": "Sudah yang terbaru", + "upToDateDescription": "Konfigurasi model lokal saat ini sudah menggunakan metadata penyedia terbaru.", + "failedTitle": "Pembaruan gagal", + "failedDescription": "Konfigurasi model tidak dapat di-refresh saat ini, silakan coba lagi nanti." + }, + "yoBrowser": { + "title": "YoBrowser Kotak Pasir", + "description": "Kotak pasir browser independen yang tidak berbagi cookie dan penyimpanan lokal dengan aplikasi utama. Anda dapat menghapus data YoBrowser dengan satu klik di sini.", + "clearButton": "Hapus data YoBrowser", + "confirmTitle": "Konfirmasi untuk menghapus data YoBrowser?", + "confirmDescription": "Cookie, cache, LocalStorage, IndexedDB, dan data lain dari sesi YoBrowser akan dihapus, dan Anda mungkin perlu masuk lagi ke situs web.", + "confirmAction": "Hapus sekarang", + "clearing": "Membersihkan...", + "clearedTitle": "Menghapus data YoBrowser", + "clearedDescription": "Sesi sandbox telah disetel ulang dan tab terkait akan dimuat ulang.", + "clearFailedTitle": "Pembersihan gagal", + "clearFailedDescription": "Silakan coba lagi atau periksa log untuk informasi lebih lanjut." + }, + "privacyTitle": "Data & Privasi", + "privacyDescription": "Kelola sinkronisasi cadangan, mode privasi, pemeliharaan data, dan operasi berbahaya.", + "dangerZone": { + "title": "Zona Bahaya", + "description": "Setel ulang obrolan, basis pengetahuan, atau semua data. Tindakan ini tidak dapat dibatalkan." + }, + "providerImport": { + "entryTitle": "Impor konfigurasi Agent lainnya", + "entryDescription": "Pindai konfigurasi provider lokal untuk CC Switch, Alma, Cherry Studio, Hermes, dan OpenClaw untuk memigrasikan kunci dan daftar model dengan cepat.", + "entryButton": "Impor dari Agent lainnya", + "dialogTitle": "Impor dari Agent lainnya", + "dialogDescription": "Pertama pilih aplikasi yang terdeteksi, lalu konfirmasikan provider yang akan diimpor ke DeepChat satu per satu.", + "toastTitle": "Provider Impor selesai", + "toastDescription": "{count} provider telah diimpor.", + "steps": { + "scan": "memindai", + "providers": "Provider", + "done": "Lengkap" + }, + "scanningTitle": "Pemindaian diinstal Agent", + "scanningDescription": "DeepChat hanya membaca file konfigurasi lokal yang diketahui dan tidak mengunggah data apa pun.", + "scanFailedTitle": "Pemindaian gagal", + "sourcesTitle": "Sumber terdeteksi", + "sourcesDescription": "Satu atau lebih Agent dapat dipilih, dan DeepChat akan diproses sesuai urutan daftar.", + "selectedSources": "{selected}/{total} yang dipilih", + "noSourcesTitle": "Tidak ditemukan konfigurasi provider yang dapat diimpor", + "noSourcesDescription": "Silakan instal Agent yang didukung terlebih dahulu, atau konfigurasikan kunci provider di Agent yang sesuai.", + "providersFound": "{count} provider", + "sourceProgress": "{current}/{total}", + "overwriteNote": "Jika beberapa provider yang dipilih dipetakan ke DeepChat provider yang sama, sumber selanjutnya akan menimpa sumber sebelumnya.", + "noProvidersTitle": "Tidak ada data provider di sumber ini", + "noProvidersDescription": "Agent dipilih, tetapi tidak ada entri provider yang dapat diimpor yang diselesaikan.", + "apiKey": "Kunci {value}", + "noModels": "Tidak ada daftar model", + "modelsImported": "model {count}", + "importingTitle": "Mengimpor provider", + "importingDescription": "DeepChat sedang menulis provider yang dipilih dan entri model khusus.", + "doneTitle": "Situasi umum impor", + "doneDescription": "{count} provider telah diimpor. Hasil setiap provider dapat dilihat di bawah.", + "badges": { + "configured": "dikonfigurasi" + }, + "sourceStatus": { + "found": "Ditemukan", + "not_found": "tidak ditemukan", + "error": "Gagal membaca", + "unsupported_platform": "Platform saat ini tidak didukung" + }, + "targetKind": { + "builtin": "Bawaan", + "custom": "Sesuaikan", + "unsupported": "Tidak didukung" + }, + "warnings": { + "already_configured": "Ini sudah dikonfigurasi di DeepChat dan tidak akan dipilih secara default.", + "missing_api_key": "API Key tidak ada atau titik akhir diperlukan.", + "unsupported_provider": "DeepChat provider ini tidak dapat diimpor secara otomatis saat ini.", + "overwrites_previous_selection": "Pilihan ini bertentangan dengan sumber sebelumnya.", + "credential_only_import": "Hanya mengimpor API Key, DeepChat yang akan mempertahankan titik akhir dan waktu proses provider bawaan." + }, + "conflicts": { + "overridesPrevious": "Pilihan ini akan menimpa DeepChat provider yang dipilih sebelumnya dengan nama yang sama.", + "overwrittenByLater": "Selanjutnya sumber yang dipilih akan menimpa provider ini." + }, + "summary": { + "imported": "Diimpor", + "created": "Baru", + "updated": "memperbarui", + "overwritten": "Penutup", + "models": "model", + "skipped": "lewati" + }, + "resultStatus": { + "created": "Dibuat", + "updated": "diperbarui", + "skipped": "dilewati", + "overwritten": "Tertutup" + }, + "actions": { + "rescan": "Pindai ulang", + "selectAll": "Pilih semua", + "clearSelected": "Jelas", + "import": "Impor item yang dipilih" + }, + "apiTypes": { + "openaiCompletions": "OpenAI Chat Completions", + "openai": "OpenAI", + "openaiResponses": "OpenAI Responses", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "Mistral AI" + }, + "applyFailed": "Impor gagal: {message}" + } + }, + "dashboard": { + "badge": "Gunakan Kanban", + "title": "Gunakan Kanban", + "description": "Statistik konsumsi token, cache hits, dan perkiraan harga. token dan data biaya diperkirakan berdasarkan informasi publik. Beberapa pemasok atau data berita sebelumnya mungkin hilang dan hanya untuk referensi.", + "actions": { + "refresh": "Segarkan" + }, + "backfill": { + "runningTitle": "Memperbarui data penggunaan", + "runningDescription": "Data penggunaan masih diurutkan di latar belakang, dan hasil saat ini dapat dilihat terlebih dahulu.", + "failedTitle": "Pembaruan data penggunaan gagal", + "failedDescription": "Silakan segarkan halaman ini atau coba lagi nanti." + }, + "error": { + "title": "Gagal memuat dasbor", + "description": "Silakan coba lagi nanti." + }, + "empty": { + "title": "Belum ada statistik", + "description": "Setelah data penggunaan tersedia, konsumsi token, cache hits, dan perkiraan harga ditampilkan di sini.", + "historyNote": "token dan data biaya diperkirakan berdasarkan informasi publik. Beberapa pemasok atau data berita sebelumnya mungkin hilang dan hanya untuk referensi." + }, + "summary": { + "totalTokens": "Jumlahnya Token", + "totalTokensDescription": "Tunjukkan proporsi input dan output token secara total.", + "inputTokensLabel": "masukan", + "outputTokensLabel": "keluaran", + "cachedTokens": "Tembolok Token", + "cachedTokensDescription": "prompt token oleh provider cache tercapai.", + "cachedTokensCachedLabel": "cache terkena", + "cachedTokensUncachedLabel": "rindu", + "cacheHitRate": "Tingkat keberhasilan cache", + "cacheHitRateDescription": "Cache prompt token sebagai proporsi total input token.", + "estimatedCost": "perkiraan harga", + "estimatedCostDescription": "Perkiraan biaya dalam USD dengan harga provider saat ini atau harga pengganti AIHubMix.", + "estimatedCostTrendLabel": "Tren dalam 30 hari terakhir", + "estimatedCostTrendEmpty": "Tidak ada biaya yang dicatat dalam 30 hari terakhir.", + "recordingStartedAt": "Statistik waktu mulai", + "recordingStartedAtDescription": "Waktu catatan penggunaan paling awal di dasbor saat ini.", + "withDeepChatDaysLabel": "Jumlah hari persahabatan", + "withDeepChatDaysValue": "{days} hari", + "withDeepChatDaysSentence": "Anda telah menghabiskan {days} hari dengan DeepChat", + "withDeepChatDaysDescription": "Berdasarkan catatan penggunaan paling awal Anda: {date}.", + "withDeepChatDaysDescriptionUnavailable": "Belum ada catatan penggunaan.", + "tokenUsage": "Token konsumsi", + "nostalgiaLabel": "peristiwa masa lalu", + "nostalgiaDaysValue": "{days} hari", + "nostalgiaSessionsValue": "{count} sesi", + "nostalgiaMessagesValue": "{count} pesan", + "nostalgiaDaysDetailLabel": "Berjalan bersama", + "nostalgiaDaysDetail": "Anda telah menghabiskan {days} hari dengan DeepChat.", + "nostalgiaSessionsDetailLabel": "Jumlah total sesi", + "nostalgiaSessionsDetail": "Anda telah menjalani sesi {count} bersama.", + "nostalgiaMessagesDetailLabel": "Jumlah total pesan", + "nostalgiaMessagesDetail": "Mengirim pesan {count} satu sama lain.", + "nostalgiaMostActiveDayLabel": "hari paling aktif", + "nostalgiaMostActiveDayDetail": "{date} adalah hari Anda yang paling aktif, dengan total {count} pesan." + }, + "calendar": { + "title": "Kalender Kontribusi", + "description": "Konsumsi harian token selama 365 hari terakhir.", + "legend": "lebih sedikit ke lebih banyak", + "tooltip": "{date}:{tokens} token" + }, + "breakdown": { + "providerTitle": "Peringkat penyedia", + "providerDescription": "Urutkan berdasarkan perkiraan harga terlebih dahulu, lalu total token.", + "modelTitle": "Peringkat model", + "modelDescription": "10 model teratas diurutkan berdasarkan perkiraan harga dan total token.", + "messages": "{count} pesan", + "empty": "Belum ada data detail untuk ditampilkan." + }, + "rtk": { + "title": "RTK Simpan", + "description": "Tampilkan RTK di tautan eksekusi perintah asli DeepChat, dan perkirakan berapa banyak token yang belum memasuki konteks model yang diblokir.", + "actions": { + "retry": "Coba lagi deteksi" + }, + "status": { + "disabled": "Dinonaktifkan", + "checking": "Sedang terdeteksi", + "healthy": "Tersedia", + "unhealthy": "Tidak tersedia" + }, + "descriptionDisabled": "RTK ditutup pada sesi aplikasi saat ini, dan perintah akan terus mengikuti jalur eksekusi asli.", + "descriptionChecking": "DeepChat sedang memeriksa apakah RTK dapat berjalan normal di lingkungan saat ini.", + "descriptionHealthy": "RTK telah terhubung ke DeepChat eksekusi perintah asli.", + "descriptionUnhealthy": "RTK Pemeriksaan kesehatan startup gagal dan secara otomatis dinonaktifkan pada sesi aplikasi saat ini.", + "sourceLabel": "Sumber waktu proses: {source}", + "source": { + "bundled": "Bawaan", + "system": "sistem", + "none": "Tidak tersedia" + }, + "summary": { + "savedTokens": "Simpan Token", + "commands": "Perintah yang dilacak", + "avgSavingsPct": "tingkat tabungan rata-rata", + "outputTokens": "Keluaran yang difilter" + } + }, + "unavailable": "Belum ada" + }, + "modelConfigItem": { + "chatFallbackWarning": "Kemampuan Agent yang lemah: hanya mendukung panggilan alat fallback lama" + }, + "model": { + "title": "Pengaturan model", + "systemPrompt": { + "label": "system prompt", + "placeholder": "Silakan masukkan system prompt...", + "description": "Atur system prompt asisten AI untuk menentukan perilaku dan perannya" + }, + "temperature": { + "label": "suhu model", + "description": "Mengontrol keacakan keluaran, nilai yang lebih tinggi menghasilkan respons yang lebih kreatif" + }, + "contextLength": { + "label": "panjang konteks", + "description": "Tetapkan durasi maksimum konteks percakapan" + }, + "responseLength": { + "label": "Kembalikan panjang teks", + "description": "Tetapkan durasi maksimum respons AI" + }, + "artifacts": { + "title": "Efek Artifacts", + "description": "Blok kode menghasilkan efek animasi" + }, + "provider": "penyedia layanan", + "modelList": "Daftar model", + "selectModel": "Pilih modelnya", + "providerSetting": "Pengaturan penyedia layanan", + "configureModel": "Konfigurasikan modelnya", + "addModel": "Tambahkan model", + "form": { + "id": { + "label": "pengidentifikasi" + } + }, + "modelConfig": { + "title": "Parameter model khusus", + "description": "Harap dicatat bahwa konfigurasi ini hanya berlaku untuk model saat ini dan tidak akan mempengaruhi model lainnya. Harap memodifikasinya dengan hati-hati. Parameter yang salah dapat menyebabkan model tidak berfungsi dengan baik.", + "name": { + "label": "Nama model", + "description": "Nama tampilan model di antarmuka", + "placeholder": "Silakan masukkan nama model", + "required": "Nama model wajib diisi", + "readonly": "Nama model (hanya baca)" + }, + "id": { + "label": "ID Model", + "description": "ID unik yang digunakan oleh model untuk mengidentifikasi", + "placeholder": "Silakan masukkan ID model", + "required": "ID model diperlukan", + "readonly": "ID Model (hanya baca)", + "duplicate": "ID model yang sama sudah ada" + }, + "createTitle": "Tambahkan model khusus", + "editTitle": "Edit konfigurasi model - {name}", + "maxTokens": { + "label": "Panjang keluaran maksimum", + "description": "Tetapkan jumlah maksimum Token yang dapat dihasilkan model dalam satu waktu" + }, + "contextLength": { + "label": "panjang konteks", + "description": "Tetapkan panjang konteks yang dapat ditangani oleh model" + }, + "temperature": { + "label": "suhu", + "description": "Kontrol keacakan output. Kebanyakan model mendukung 0-1, dan beberapa mendukung 0-2. Semakin tinggi nilainya, semakin acak.", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ditetapkan ke {enabled} saat pemikiran diaktifkan, dan ditetapkan ke {disabled} saat pemikiran dimatikan." + }, + "vision": { + "label": "kemampuan visual", + "description": "Apakah model tersebut mendukung kemampuan visual?" + }, + "speechRecognition": { + "label": "pengenalan suara", + "description": "Mengontrol apakah model ini mengizinkan konversi ke input teks melalui pengenalan ucapan asli." + }, + "functionCall": { + "label": "panggilan fungsi", + "description": "Apakah model secara asli mendukung pemanggilan fungsi (DeepChat akan secara otomatis menyimulasikan pemanggilan fungsi setelah menonaktifkan opsi ini)" + }, + "reasoning": { + "label": "kemampuan penalaran", + "description": "Model tersebut mendukung kemampuan penalaran" + }, + "reasoningToggle": { + "label": "Aktifkan inferensi", + "description": "Mengontrol apakah model mengaktifkan inferensi secara default" + }, + "interleavedThinking": { + "label": "Pemikiran Disisipkan", + "description": "Mengontrol apakah model menangani pesan penalaran dan pemanggilan alat dengan cara Berpikir Interleaved. Jika provider telah dinyatakan didukung, maka secara otomatis akan diaktifkan secara default." + }, + "thinkingBudget": { + "label": "Pikirkan tentang anggaran", + "description": "Tetapkan panjang proses berpikir maksimum token, yang digunakan untuk mengontrol kedalaman berpikir selama inferensi model.", + "placeholder": "Masukkan nilai anggaran pemikiran", + "range": "Rentang: {min} - {max}", + "validation": { + "required": "Silakan masukkan nilai anggaran pemikiran", + "minValue": "Anggaplah nilai anggaran kurang dari nilai minimum", + "maxValue": "Nilai anggaran pemikiran tidak boleh melebihi {max}" + } + }, + "type": { + "label": "Tipe model", + "description": "Pilih jenis model", + "options": { + "chat": "model bahasa", + "embedding": "model tertanam", + "rerank": "menata ulang model", + "imageGeneration": "Model pembuatan gambar", + "videoGeneration": "Model pembuatan video" + } + }, + "apiEndpoint": { + "label": "API titik akhir", + "description": "Pilih titik akhir OpenAI API yang digunakan oleh model ini.", + "options": { + "chat": "pembuatan teks", + "image": "Pembuatan gambar", + "video": "generasi video" + } + }, + "resetToDefault": "atur ulang ke default", + "saveConfig": "Simpan konfigurasi", + "cancel": "Batalkan", + "useModelDefault": "Gunakan konfigurasi default model", + "currentUsingModelDefault": "Saat ini menggunakan konfigurasi default model", + "resetConfirm": { + "title": "Konfirmasikan pengaturan ulang", + "message": "Apakah Anda yakin ingin menyetel ulang konfigurasi model ini ke default? Tindakan ini tidak dapat dibatalkan.", + "confirm": "Konfirmasikan pengaturan ulang" + }, + "reasoningEffort": { + "label": "upaya penalaran", + "description": "Mengontrol kedalaman inferensi model, upaya yang lebih tinggi menghasilkan hasil yang lebih baik tetapi responsnya lebih lambat", + "placeholder": "Pilih upaya penalaran", + "options": { + "none": "Tidak ada - jangan gunakan inferensi", + "minimal": "Minimal - respons tercepat", + "low": "Rendah - usaha rendah", + "medium": "Sedang – upaya sedang", + "high": "Tinggi – tinggi usaha", + "xhigh": "XTinggi - tingkat upaya maksimal", + "max": "Maks - Tingkat upaya ekstrem" + } + }, + "verbosity": { + "label": "tingkat detail", + "description": "Kontrol detail dan panjang jawaban model", + "placeholder": "Pilih tingkat detail", + "options": { + "low": "Jawaban singkat dan singkat", + "medium": "Sedang - Detail Seimbang", + "high": "Jawaban yang sangat rinci" + } + }, + "validation": { + "maxTokensRequired": "Panjang keluaran maksimum tidak boleh kosong", + "maxTokensMin": "Panjang keluaran maksimum harus lebih besar dari 0", + "maxTokensMax": "Panjang keluaran maksimum tidak boleh melebihi 1000000", + "contextLengthRequired": "Panjang konteks tidak boleh kosong", + "contextLengthMin": "Panjang konteks harus lebih besar dari 0", + "contextLengthMax": "Panjang konteks tidak boleh melebihi 10.000.000", + "temperatureRequired": "Suhu tidak boleh kosong", + "temperatureMin": "Suhu harus lebih besar dari atau sama dengan 0", + "temperatureMax": "Suhu harus kurang dari atau sama dengan 2", + "timeoutMin": "Batas waktu permintaan tidak boleh kurang dari 1000 milidetik", + "timeoutMax": "Batas waktu permintaan tidak boleh melebihi 3600000 milidetik" + }, + "endpointType": { + "label": "jenis protokol", + "description": "Pilih New API sebagai protokol upstream yang digunakan oleh model saat ini.", + "placeholder": "Pilih jenis protokol", + "required": "Jenis perjanjian wajib diisi", + "options": { + "openai": "OpenAI Chat", + "openai-response": "OpenAI Responses", + "anthropic": "Anthropic Messages", + "gemini": "Gemini Native", + "image-generation": "Image Generation", + "video-generation": "Video Generation" + } + }, + "reasoningVisibility": { + "label": "Tampilan konten inferensi", + "description": "Saat inferensi diaktifkan, kontrol apakah konten inferensi disembunyikan atau ditampilkan dalam bentuk ringkasan", + "placeholder": "Pilih cara menampilkan konten inferensi", + "options": { + "omitted": "Dihilangkan - Sembunyikan konten inferensi", + "summarized": "Diringkas - menampilkan ringkasan alasannya" + } + }, + "timeout": { + "label": "Batas waktu permintaan (milidetik)", + "description": "Tetapkan batas waktu untuk satu permintaan model. Setelah batas waktu terlampaui, permintaan akan otomatis terputus." + }, + "imageGeneration": { + "default": "Bawaan", + "size": { + "label": "Ukuran gambar", + "custom": "Sesuaikan", + "placeholder": "Misalnya 2048x2048", + "experimental": "Ukuran ini melebihi 2560x1440, dan OpenAI ditandai sebagai keluaran eksperimental.", + "validation": { + "invalid_format": "Silakan gunakan format {width}x{height}.", + "invalid_multiple": "Lebar dan tinggi harus kelipatan 16.", + "side_too_large": "Lebar dan tinggi keduanya tidak boleh melebihi 3840 piksel.", + "aspect_ratio_too_large": "Sisi panjangnya tidak boleh melebihi 3 kali sisi pendeknya.", + "pixel_count_out_of_range": "Total piksel harus antara 655360 dan 8294400." + } + }, + "quality": { + "label": "Kualitas gambar", + "options": { + "low": "rendah", + "medium": "di", + "high": "tinggi", + "auto": "otomatis" + } + }, + "outputFormat": { + "label": "Format keluaran", + "options": { + "png": "PNG", + "jpeg": "JPEG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "Kualitas kompresi", + "placeholder": "Bawaan: 100", + "validation": "Kualitas kompresi harus berupa bilangan bulat dari 0 hingga 100." + }, + "background": { + "label": "latar belakang", + "options": { + "auto": "otomatis", + "opaque": "Buram" + } + }, + "moderation": { + "label": "Pemfilteran konten", + "options": { + "auto": "otomatis", + "low": "rendah" + } + } + }, + "videoGeneration": { + "size": { + "label": "Ukuran video", + "placeholder": "Misalnya 1280x720" + }, + "seconds": { + "label": "detik", + "placeholder": "Misalnya 5" + }, + "duration": { + "label": "durasi", + "placeholder": "Misalnya 5", + "description": "Ini akan dikirim ke upstream melalui extra_body.duration dari antarmuka video yang kompatibel." + }, + "ratio": { + "label": "rasio aspek", + "placeholder": "Misalnya 16:9" + }, + "resolution": { + "label": "resolusi", + "placeholder": "Misalnya 720p" + }, + "watermark": { + "label": "tanda air", + "description": "Jika antarmuka upstream mendukungnya, mintalah server untuk menambahkan tanda air ke hasil yang dihasilkan." + }, + "generateAudio": { + "label": "Hasilkan audio", + "description": "Jika didukung oleh antarmuka upstream, trek audio juga dibuat untuk video tersebut." + } + } + } + }, + "provider": { + "search": "Platform penyedia layanan pencarian…", + "enable": "Mulai layanan", + "enabled": "Diaktifkan", + "disabled": "Dinonaktifkan", + "urlPlaceholder": "Silakan masukkan API URL", + "keyPlaceholder": "Silakan masukkan API Key", + "accessKeyIdPlaceholder": "Silakan masukkan ID Kunci Akses AWS", + "secretAccessKeyPlaceholder": "Silakan masukkan Kunci Akses Rahasia AWS", + "regionPlaceholder": "Silakan masukkan wilayah AWS", + "vertexProjectId": "ID Proyek", + "vertexProjectIdPlaceholder": "Silakan masukkan ID proyek Google Cloud Anda", + "vertexLocation": "daerah", + "vertexLocationPlaceholder": "Silakan masukkan wilayah (misalnya us-central1)", + "vertexServiceEmail": "Email akun layanan", + "vertexServiceEmailPlaceholder": "Silakan masukkan email akun layanan", + "vertexPrivateKey": "Kunci pribadi akun layanan", + "vertexPrivateKeyPlaceholder": "Tempelkan kunci pribadi (mendukung satu baris \\n)", + "vertexApiVersion": "Versi API", + "vertexEndpointMode": "modus titik akhir", + "vertexEndpointStandard": "Standar (titik akhir wilayah)", + "vertexEndpointExpress": "Ekspres (titik akhir global)", + "verifyKey": "Kunci verifikasi", + "howToGet": "Bagaimana cara mendapatkan", + "refreshingModels": "Menyegarkan...", + "getKeyTip": "Silakan pergi ke", + "getKeyTipEnd": "DapatkanAPI Key", + "urlFormat": "API contoh: {defaultUrl}", + "urlFormatFill": "Isi ke API URL", + "openaiResponsesNotice": "OpenAI Layanan resmi menggunakan Responses API secara default; jika pihak ketiga hanya mendukung Penyelesaian Obrolan, silakan gunakan penyedia layanan Penyelesaian OpenAI.", + "modifyBaseUrl": "Ubah", + "baseUrlLockedHint": "Jenis provider ini ditetapkan ke Base URL yang direkomendasikan secara default untuk menghindari modifikasi yang salah yang menyebabkan pengecualian permintaan.", + "refreshModelsWithMetadataHint": "Saat menyegarkan penyedia layanan, metadata upstream akan disinkronkan terlebih dahulu, dan kemudian daftar model lokal akan dibuat ulang.", + "modelList": "Daftar model", + "enableModels": "aktifkan modelnya", + "disableAllModels": "Nonaktifkan semua", + "modelsEnabled": "Model sudah diaktifkan", + "noModelsEnabled": { + "title": "Belum ada model yang diaktifkan", + "description": "Silakan klik tombol \"Aktifkan Model\" untuk memilih secara manual model yang ingin Anda gunakan." + }, + "verifyLink": "Tautan verifikasi", + "syncModelsFailed": "Model sinkronisasi gagal...", + "addCustomProvider": "Tambahkan penyedia layanan khusus", + "delete": "Hapus", + "stopModel": "Hentikan modelnya", + "pulling": "Mengambil...", + "runModel": "Jalankan modelnya", + "configurationUpdated": "Konfigurasi telah diperbarui", + "configurationSaved": "Konfigurasi disimpan", + "operationSuccess": "Operasi berhasil", + "operationFailed": "Operasi gagal", + "dataRefreshed": "Data telah disegarkan", + "settingsApplied": "Pengaturan diterapkan", + "toast": { + "modelRunning": "Model sedang berjalan", + "modelRunningDesc": "Harap hentikan model {model} sebelum menghapusnya.", + "backupSuccessTitle": "Pencadangan selesai", + "backupSuccessMessage": "Cadangan disimpan (waktu: {time}, ukuran: {size})", + "importSuccessTitle": "Impor selesai", + "importSuccessMessage": "Berhasil mengimpor sesi {count}", + "refreshModelsSuccessTitle": "Model telah disegarkan", + "refreshModelsSuccessDescription": "Daftar model terbaru penyedia layanan telah disinkronkan.", + "refreshModelsSuccessDescriptionWithMetadata": "Metadata hulu penyedia dan daftar model terbaru disinkronkan.", + "refreshModelsFailedTitle": "Penyegaran gagal", + "refreshModelsFailedDescription": "Daftar model penyedia layanan ini tidak dapat disegarkan saat ini, silakan coba lagi nanti.", + "refreshModelsFailedDescriptionWithMetadata": "Metadata hulu dan daftar model penyedia layanan tidak dapat di-refresh saat ini. Silakan coba lagi nanti." + }, + "modelscope": { + "name": "ModelScope", + "description": "ModelScope adalah platform berbagi model sebagai layanan yang diluncurkan oleh Alibaba DAMO Academy", + "apiKey": "Kunci API", + "apiKeyPlaceholder": "Silakan masukkan ModelScope API Key", + "apiKeyHelper": "Dapatkan API Key Anda di konsol ModelScope", + "baseUrl": "API alamat", + "baseUrlHelper": "ModelScope API Alamat layanan", + "connected": "Terhubung", + "notConnected": "Tidak terhubung", + "connecting": "Menghubungkan...", + "verifySuccess": "Verifikasi berhasil", + "verifyFailed": "Otentikasi gagal", + "keyRequired": "Silakan masukkan API Key", + "invalidKey": "API Key tidak valid", + "networkError": "Kesalahan koneksi jaringan", + "mcpSync": { + "title": "Layanan MCP sinkron", + "description": "Sinkronkan server MCP dari ModelScope ke konfigurasi lokal untuk menambahkan alat MCP yang umum digunakan dengan cepat. Semua layanan dinonaktifkan secara default dan dapat diaktifkan secara manual setelah diimpor.", + "sync": "Mulai sinkronisasi", + "syncing": "Menyinkronkan...", + "pageSize": "Jumlah per halaman", + "pageNumber": "Nomor halaman", + "pageNumberPlaceholder": "Silakan masukkan nomor halaman", + "imported": "{count} layanan diimpor", + "skipped": "Melewatkan layanan {count}", + "errors": "Kesalahan {count}", + "errorDetails": "Detail kesalahan", + "noApiKey": "Harap konfigurasikan ModelScope API Key terlebih dahulu", + "noServersFound": "Tidak ditemukan layanan MCP yang tersedia", + "fetchingServers": "Mendapatkan daftar server MCP...", + "convertingServers": "Mengonversi konfigurasi server...", + "importingServers": "Mengimpor konfigurasi server...", + "syncComplete": "Sinkronisasi selesai", + "serverAlreadyExists": "Server sudah ada, lewati impor", + "noOperationalUrls": "Tidak ditemukan alamat operasional yang tersedia", + "invalidServerData": "Data server tidak valid", + "authenticationFailed": "Otentikasi gagal, harap periksa API Key" + }, + "details": { + "title": "Detail pengaturan penyedia", + "apiConfig": "Konfigurasi API", + "rateLimitConfig": "Konfigurasi batas tarif", + "modelManagement": "Manajemen model", + "safetySettings": "Pengaturan keamanan", + "specialConfig": "Konfigurasi khusus", + "mcpSync": "MCP Sinkronisasi", + "operationalServers": "Server operasi", + "syncFromModelScope": "Sinkronisasi dari ModelScope", + "operationalDescription": "Sinkronkan server MCP secara langsung pada platform ModelScope" + } + }, + "tts": { + "title": "Teks-ke-ucapan (TTS)", + "description": "Hasilkan teks menjadi ucapan, dan suara akan ditampilkan dalam daftar model di bawah.", + "audioFormat": { + "label": "format audio", + "placeholder": "Pilih format", + "helper": "MP3 direkomendasikan untuk sebagian besar skenario." + }, + "language": { + "label": "Bahasa", + "placeholder": "Misalnya en", + "helper": "Bahasa yang didukung: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "model TTS", + "placeholder": "voiceai-tts-v1-latest", + "helper": "Silakan lihat dokumentasi Voice.ai untuk model opsional." + }, + "agentId": { + "label": "Suara Agent ID", + "placeholder": "Tempelkan id suara agent", + "helper": "ID ini diperlukan untuk panggilan langsung." + }, + "temperature": { + "label": "suhu", + "helper": "Parameter keacakan (0-2)." + }, + "topP": { + "label": "Top P", + "helper": "Pengambilan sampel inti (0-1)." + } + }, + "dialog": { + "disableModel": { + "title": "Konfirmasikan model yang dinonaktifkan", + "content": "Apakah Anda yakin ingin menonaktifkan model \"{name}\"?", + "confirm": "Nonaktifkan" + }, + "disableAllModels": { + "title": "Konfirmasikan untuk menonaktifkan semua model", + "content": "Apakah Anda yakin ingin menonaktifkan semua model dengan \"{name}\"?", + "confirm": "Nonaktifkan semua" + }, + "configModels": { + "title": "Konfigurasikan daftar model", + "description": "Pilih model untuk diaktifkan atau dinonaktifkan" + }, + "verify": { + "missingFields": "Silakan masukkan API Key dan API URL", + "failed": "Otentikasi gagal", + "success": "Verifikasi berhasil", + "failedDesc": "API Verifikasi kunci atau konfigurasi gagal, harap periksa informasi konfigurasi", + "successDesc": "API Verifikasi kunci dan konfigurasi berhasil dan dapat digunakan secara normal", + "unauthorized": "Otentikasi gagal, API Key tidak valid atau kedaluwarsa", + "serverError": "Kesalahan server, silakan coba lagi nanti", + "connectionError": "Kesalahan koneksi, harap periksa koneksi jaringan dan alamat API" + }, + "addCustomProvider": { + "title": "Tambahkan penyedia layanan khusus", + "description": "Silakan isi informasi yang diperlukan untuk penyedia layanan", + "name": "Nama", + "namePlaceholder": "Silakan masukkan nama penyedia layanan", + "apiType": "Tipe API", + "apiTypePlaceholder": "Silakan pilih jenis API", + "apiKey": "Kunci API", + "apiKeyPlaceholder": "Silakan masukkan kunci API", + "baseUrl": "API alamat", + "baseUrlPlaceholder": "Silakan masukkan alamat dasar API", + "enable": "Aktifkan penyedia layanan" + }, + "providerDeeplinkImport": { + "title": "Penyedia layanan impor", + "description": "Harap konfirmasikan konfigurasi penyedia layanan yang diuraikan sebelum mengimpornya.", + "type": "Ketik", + "url": "alamat", + "key": "kunci", + "overwriteWarning": "Impor ini akan menimpa konfigurasi penyedia layanan saat ini.", + "confirming": "Mengimpor..." + }, + "baseUrlUnlock": { + "title": "Konfirmasi modifikasi Base URL", + "description": "Tidak disarankan untuk mengubah Base URL untuk kelas provider ini. Alamat yang salah dapat menyebabkan permintaan gagal atau berperilaku tidak normal. Anda masih dapat terus memodifikasi secara manual setelah konfirmasi.", + "confirm": "Lanjutkan memodifikasi" + }, + "deleteProvider": { + "title": "Konfirmasikan untuk menghapus penyedia layanan", + "content": "Apakah Anda yakin akan menghapus penyedia layanan \"{name}\"? Operasi ini tidak dapat diubah.", + "confirm": "Hapus" + }, + "deleteModel": { + "title": "Konfirmasikan untuk menghapus model", + "content": "Apakah Anda yakin akan menghapus model \"{name}\"? Operasi ini tidak dapat diubah.", + "confirm": "Hapus" + }, + "pullModel": { + "title": "Model tarik", + "description": "Pilih model yang akan diunduh ke lokal", + "pull": "tarik" + }, + "modelCheck": { + "title": "Pemeriksaan model", + "description": "Pilih model untuk pengujian konektivitas dan kegunaan", + "model": "Pilih modelnya", + "modelPlaceholder": "Silakan pilih model untuk diuji", + "test": "Mulai pengujian", + "checking": "Menguji...", + "success": "Uji model berhasil", + "failed": "Uji model gagal", + "noModels": "Tidak ada model yang tersedia untuk penyedia ini" + } + }, + "pullModels": "Model tarik", + "refreshModels": "Segarkan model", + "modelsRunning": "Model lari", + "runningModels": "Model lari", + "noRunningModels": "Tidak ada model yang berjalan", + "deleteModel": "Hapus modelnya", + "deleteModelConfirm": "Apakah Anda yakin akan menghapus model \"{name}\"? Operasi ini tidak dapat diubah.", + "noLocalModels": "Tidak ada model lokal", + "localModels": "model lokal", + "azureApiVersion": "Versi API", + "safety": { + "title": "Pengaturan keamanan", + "blockNone": "Tidak diblokir", + "blockSome": "Melindungi risiko rendah", + "blockMost": "Melindungi risiko", + "blockHighest": "Melindungi risiko tinggi" + }, + "serverList": "Daftar server", + "totalServers": "Jumlah total server", + "addServer": "Tambahkan server", + "autoStart": "memulai sendiri", + "githubCopilotAuth": "GitHub Copilot Sertifikasi", + "githubCopilotConnected": "GitHub Copilot terhubung", + "githubCopilotNotConnected": "GitHub Copilot tidak terhubung", + "loginWithGitHub": "Masuk menggunakan GitHub", + "loggingIn": "Masuk...", + "githubCopilotClientId": "ID Klien Khusus", + "githubCopilotClientIdHint": "Opsional, biarkan kosong untuk menggunakan ID Klien default, yang hanya memengaruhi otorisasi GitHub Copilot.", + "githubCopilotLoginTip": "Klik untuk mengotorisasi DeepChat untuk mengakses langganan GitHub Copilot Anda", + "loginSuccess": "Masuk berhasil", + "loginFailed": "Gagal masuk", + "tokenValid": "token valid", + "tokenInvalid": "token tidak valid", + "disconnect": "Putuskan sambungan", + "disconnected": "Berhasil terputus", + "disconnectFailed": "Pemutusan sambungan gagal", + "keyStatus": { + "usage": "Sudah digunakan", + "remaining": "sisa saldo" + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "bedrockLimitTip": "* Hanya mendukung Anthropic Claude (termasuk model Opus, Soneta, Haiku)", + "bedrockVerifyTip": "DeepChat menggunakan Claude 3.5 verifikasi model Soneta. Jika Anda tidak memiliki izin menelepon untuk model ini, verifikasi akan gagal. Hal ini tidak mempengaruhi penggunaan model lainnya.", + "center": { + "title": "Provider Pusat", + "description": "Kelola koneksi penyedia, model, dan konfigurasi lanjutan.", + "noApiUrl": "Tidak dikonfigurasi API URL", + "enabledModels": "Model {count} diaktifkan", + "noAdvancedConfig": "Tidak ada konfigurasi lanjutan tambahan yang tersedia untuk penyedia ini.", + "status": { + "connected": "Terhubung", + "keyMissing": "Kunci hilang", + "disabled": "Dinonaktifkan", + "local": "Lokal" + }, + "tabs": { + "connection": "Hubungkan", + "models": "Model", + "advanced": "Lanjutan" + } + } + }, + "knowledgeBase": { + "title": "Pengaturan basis pengetahuan", + "addKnowledgeBase": "Tambahkan basis pengetahuan", + "selectKnowledgeBaseType": "Silakan pilih jenis basis pengetahuan yang akan ditambahkan", + "difyDescription": "Basis pengetahuan Dify dapat membantu Anda mengelola dan menggunakan data dokumen.", + "comingSoon": "Segera hadir", + "featureNotAvailable": "Fungsi ini belum tersedia, harap pantau terus", + "addDifyConfig": "Tambahkan konfigurasi Dify", + "apiKey": "Kunci API", + "datasetId": "ID kumpulan data", + "endpoint": "API alamat", + "configAdded": "Konfigurasi telah ditambahkan", + "configAddedDesc": "Konfigurasi {name} telah berhasil ditambahkan", + "addConfig": "Tambahkan konfigurasi", + "moreComingSoon": "Jenis basis pengetahuan lainnya segera hadir", + "configUpdated": "Konfigurasi telah diperbarui", + "configUpdatedDesc": "Konfigurasi {name} berhasil diperbarui", + "descriptionPlaceholder": "Misalnya: Basis pengetahuan dokumentasi produk perusahaan", + "ragflowTitle": "Basis pengetahuan RAGFlow", + "ragflowDescription": "RAGFlow adalah sistem manajemen basis pengetahuan yang kuat yang mendukung berbagai metode pencarian dan fungsi manajemen dokumen.", + "addRagflowConfig": "Tambahkan konfigurasi RAGFlow", + "editRagflowConfig": "Edit konfigurasi RAGFlow", + "dify": "DifyBasis Pengetahuan", + "editDifyConfig": "Ubah konfigurasi Dify", + "fastgptTitle": "Basis pengetahuan FastGPT", + "fastgptDescription": "FastGPT adalah sistem manajemen basis pengetahuan yang kuat yang mendukung berbagai metode pencarian dan fungsi manajemen dokumen.", + "addFastGptConfig": "Tambahkan konfigurasi FastGPT", + "editFastGptConfig": "Edit konfigurasi FastGPT", + "builtInKnowledgeTitle": "Basis pengetahuan bawaan", + "builtInKnowledgeDescription": "Basis pengetahuan bawaan menyediakan beberapa implementasi sederhana yang dapat mengimplementasikan beberapa fungsi dasar dalam lingkungan offline.", + "addBuiltinKnowledgeConfig": "Tambahkan konfigurasi basis pengetahuan bawaan", + "editBuiltinKnowledgeConfig": "Edit konfigurasi basis pengetahuan bawaan", + "descriptionDesc": "Deskripsi basis pengetahuan sehingga AI dapat memutuskan apakah akan mengambilnya atau tidak", + "embeddingModel": "model tertanam", + "selectEmbeddingModel": "Pilih model penyematan", + "selectEmbeddingModelHelper": "Model tertanam dilarang dimodifikasi setelah basis pengetahuan dibuat.", + "rerankModel": "menata ulang model", + "selectRerankModel": "Pilih model pemesanan ulang", + "chunkSize": "Ukuran potongan", + "chunkOverlap": "ukuran tumpang tindih", + "fragmentsNumber": "Jumlah fragmen dokumen yang diminta", + "chunkSizeHelper": "Potong dokumen menjadi beberapa bagian. Ukuran setiap segmen tidak boleh melebihi batas konteks model.", + "chunkOverlapHelper": "Jumlah konten berulang antara blok teks yang berdekatan memastikan bahwa masih ada hubungan kontekstual antara blok teks tersegmentasi, sehingga meningkatkan efek keseluruhan model dalam memproses teks panjang.", + "fragmentsNumberHelper": "Semakin banyak fragmen dokumen yang diminta, semakin banyak informasi yang dimasukkan, namun semakin banyak token yang akan digunakan.", + "modelNotFound": "Penyedia {provider} atau model {model} tidak ditemukan", + "modelNotFoundDesc": "Harap pastikan bahwa model dikonfigurasi dengan benar dan diaktifkan. Anda dapat memeriksa konfigurasi model di pengaturan penyedia.", + "removeBuiltinKnowledgeConfirmTitle": "Konfirmasikan untuk menghapus basis pengetahuan bawaan {name}?", + "removeBuiltinKnowledgeConfirmDesc": "Menghapus konfigurasi basis pengetahuan bawaan akan menghapus semua data terkait dan tidak dapat dipulihkan, jadi harap pengoperasiannya dengan hati-hati.", + "advanced": "Opsi lanjutan", + "dimensions": "dimensi tertanam", + "dimensionsPlaceholder": "Sematkan ukuran dimensi, seperti 1024", + "autoDetectDimensions": "Secara otomatis mendeteksi dimensi penyematan", + "autoDetectHelper": "Secara otomatis mendeteksi dimensi penyematan, yang akan menggunakan sejumlah kecil Tokens", + "dimensionsHelper": "Pastikan model Anda mendukung ukuran dimensi penyematan yang Anda tetapkan", + "autoDetectDimensionsError": "Deteksi otomatis dimensi tersemat gagal", + "normalized": "Normalisasi L2", + "normalizedHelper": "Harap konfirmasi bahwa model mendukung normalisasi L2 dari vektor keluaran", + "chunkSizePlaceholder": "Nilai default, modifikasi tidak disarankan", + "chunkOverlapPlaceholder": "Nilai default, modifikasi tidak disarankan", + "return": "Kembali", + "uploadHelper": "Klik untuk mengunggah atau menyeret file ke sini", + "fileSupport": "Mendukung format {accept} dan {count} lainnya", + "searchKnowledge": "Cari basis pengetahuan", + "searchKnowledgePlaceholder": "Silakan masukkan konten kueri", + "noData": "Belum ada datanya", + "file": "Mengajukan", + "uploadProcessing": "Mengunggah", + "uploadCompleted": "Pengunggahan selesai", + "reAdd": "Unggah ulang", + "uploadError": "Gagal mengunggah", + "processing": "Mengunggah", + "paused": "Ditangguhkan", + "unknown": "statusnya tidak diketahui", + "delete": "Hapus", + "reason": "Alasan", + "deleteSuccess": "Hapus berhasil", + "copy": "Salin", + "copySuccess": "Berhasil disalin", + "source": "Sumber", + "resumeAllPausedTasks": "Pemulihan sekali klik", + "pauseAllRunningTasks": "Satu klik untuk menjeda", + "reAddFile": { + "title": "Konfirmasi unggah ulang", + "content": "Apakah Anda yakin akan mengunggah ulang file \"{fileName}\"?" + }, + "deleteFile": { + "title": "Hapus konfirmasi file", + "content": "Apakah Anda yakin ingin menghapus berkas \"{fileName}\"? Operasi ini tidak dapat diubah." + }, + "dialog": { + "beforequit": { + "title": "Keluar dari konfirmasi", + "description": "Ada tugas basis pengetahuan yang sedang berjalan. Apakah Anda yakin untuk keluar dari perangkat lunak?\nTugas yang dibatalkan dapat dilanjutkan setelah perangkat lunak dimulai ulang.", + "cancel": "Batalkan", + "confirm": "Konfirmasikan" + } + }, + "searchError": "Kueri gagal", + "separators": "pemisah blok", + "separatorsHelper": "Pembatas pemisahan dokumen, pembatas tunggal diapit dengan tanda kutip ganda lebar setengah (\"\"), dan pembatas dipisahkan dengan koma setengah lebar (,)", + "invalidSeparators": "Pembatas tidak valid", + "selectLanguage": "Pilih preset", + "separatorsPreset": "Muat preset", + "nowledgeMem": { + "apiKey": "Kunci API", + "apiKeyHint": "Opsional.\nJika layanan Anda memerlukan kunci API, masukkan di sini.", + "baseUrl": "Base URL", + "configuration": "Konfigurasi", + "description": "Ekspor percakapan ke Nowledge Mem", + "resetConfig": "Setel ulang konfigurasi", + "saveConfig": "simpan", + "seconds": "detik", + "testConnection": "koneksi uji", + "timeout": "batas waktu", + "title": "Konfigurasi ekspor Nowledge Mem" + } + }, + "mcp": { + "title": "Pengaturan MCP", + "description": "Kelola dan konfigurasikan server dan alat MCP (Model Control Protocol).", + "enabledTitle": "Aktifkan MCP", + "enabledDescription": "Mengaktifkan atau menonaktifkan fitur dan alat MCP", + "enableToAccess": "Harap aktifkan MCP terlebih dahulu untuk mengakses opsi konfigurasi", + "marketplace": "Kunjungi pasar MCP untuk instalasi sekali klik", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Detail teknis", + "httpServer": "server HTTP", + "localProcess": "proses lokal", + "restartServer": "Mulai ulang servernya", + "viewLogs": "Lihat catatan", + "starting": "Mulai", + "error": "Kesalahan", + "tabs": { + "servers": "server", + "tools": "Alat", + "prompts": "prompt", + "resources": "Sumber daya" + }, + "serverList": "Daftar server", + "addServer": "Tambahkan server", + "running": "Berlari", + "stopped": "Berhenti", + "stopServer": "Hentikan servernya", + "startServer": "Mulai servernya", + "noServersFound": "Server tidak ditemukan", + "addServerDialog": { + "title": "Tambahkan server", + "description": "Konfigurasikan server MCP baru" + }, + "editServerDialog": { + "title": "Sunting server", + "description": "Edit konfigurasi server MCP" + }, + "serverForm": { + "name": "Nama server", + "namePlaceholder": "Masukkan nama server", + "nameRequired": "Nama server tidak boleh kosong", + "type": "Jenis server", + "typePlaceholder": "Pilih jenis server", + "typeStdio": "Input dan output standar (Stdio)", + "typeSse": "Acara Terkirim Server (SSE)", + "typeInMemory": "Jenis memori (InMemory)", + "typeHttp": "Permintaan HTTP yang dapat dialirkan (HTTP)", + "baseUrl": "DasarURL", + "baseUrlPlaceholder": "Masukkan basis server URL (misalnya: http://localhost:3000)", + "command": "perintah", + "commandPlaceholder": "Masukkan perintah", + "commandRequired": "Perintah tidak boleh kosong", + "args": "parameter", + "argsPlaceholder": "Satu parameter per baris", + "addArg": "Tambahkan parameter", + "argPlaceholder": "Masukkan nilai parameter", + "argsRequired": "Parameter tidak boleh kosong", + "env": "variabel lingkungan", + "envPlaceholder": "Masukkan variabel lingkungan dalam format JSON", + "envInvalid": "Variabel lingkungan harus dalam format JSON yang valid", + "description": "Deskripsi", + "descriptionPlaceholder": "Masukkan deskripsi server", + "descriptions": "Deskripsi", + "descriptionsPlaceholder": "Masukkan deskripsi server", + "icon": "ikon", + "iconPlaceholder": "ikon masukan", + "icons": "ikon", + "iconsPlaceholder": "ikon masukan", + "autoApprove": "Otorisasi otomatis", + "autoApproveAll": "Semua", + "autoApproveRead": "membaca", + "autoApproveWrite": "menulis", + "autoApproveHelp": "Pilih jenis operasi yang memerlukan otorisasi otomatis dan dapat dilakukan tanpa konfirmasi pengguna", + "submit": "Kirim", + "add": "tambahkan", + "update": "memperbarui", + "cancel": "Batalkan", + "jsonConfigIntro": "Anda dapat menempelkan konfigurasi JSON secara langsung atau memilih untuk mengkonfigurasi server secara manual.", + "jsonConfig": "Konfigurasi JSON", + "jsonConfigPlaceholder": "Silakan tempel konfigurasi format JSON dari server MCP", + "jsonConfigExample": "JSON Contoh Konfigurasi", + "parseSuccess": "Penguraian konfigurasi berhasil", + "configImported": "Konfigurasi berhasil diimpor", + "parseError": "Kesalahan penguraian", + "skipToManual": "Lewati ke konfigurasi manual", + "parseAndContinue": "menguraikan dan melanjutkan", + "jsonParseError": "Penguraian JSON gagal", + "browseMarketplace": "Telusuri pasar layanan MCP", + "imageModel": "model visual", + "customHeadersParseError": "Penguraian Header Kustom gagal", + "customHeaders": "Tajuk permintaan khusus", + "clickToEdit": "Klik edit untuk melihat konten lengkap", + "invalidKeyValueFormat": "Format header permintaan salah, harap periksa apakah inputnya benar", + "npmRegistry": "Registri NPM Khusus", + "npmRegistryPlaceholder": "Tetapkan Registri NPM khusus, biarkan kosong dan sistem akan secara otomatis memilih yang tercepat", + "browseHigress": "Telusuri Pasar Higress MCP", + "selectFolderError": "Kesalahan pemilihan folder", + "folders": "Mengizinkan akses ke folder", + "addFolder": "Tambahkan map", + "noFoldersSelected": "Tidak ada folder yang dipilih", + "useE2B": "Aktifkan kotak pasir E2B", + "e2bDescription": "Jalankan kode Python menggunakan kotak pasir E2B", + "e2bApiKey": "E2B ApiKey", + "e2bApiKeyPlaceholder": "Masukkan E2B Api Key Anda di sini, seperti e2b_1111xx*****", + "e2bApiKeyHelp": "Buka e2b.dev untuk mendapatkan ApiKey Anda", + "e2bApiKeyRequired": "ApiKey harus dimasukkan untuk mengaktifkan fungsi E2B" + }, + "deleteServer": "Hapus server", + "editServer": "Sunting server", + "setDefault": "Tetapkan sebagai bawaan", + "removeDefault": "Hapus bawaan", + "isDefault": "Server bawaan", + "default": "Bawaan", + "setAsDefault": "Tetapkan sebagai server default", + "removeServer": "Hapus server", + "autoStart": "memulai sendiri", + "confirmRemoveServer": "Apakah Anda yakin ingin menghapus server {name}? Tindakan ini tidak dapat dibatalkan.", + "removeServerDialog": { + "title": "Hapus server" + }, + "confirmDelete": { + "title": "Konfirmasikan penghapusan", + "description": "Apakah Anda yakin ingin menghapus server {name}? Tindakan ini tidak dapat dibatalkan.", + "confirm": "Hapus", + "cancel": "Batalkan" + }, + "resetToDefault": "Pulihkan layanan default", + "resetConfirmTitle": "Pulihkan layanan default", + "resetConfirmDescription": "Tindakan ini akan memulihkan semua server default sambil mempertahankan server khusus Anda. Modifikasi apa pun pada server default akan hilang.", + "resetConfirm": "memulihkan", + "builtInServers": "Layanan bawaan", + "customServers": "Layanan khusus", + "builtIn": "Bawaan", + "cannotRemoveBuiltIn": "Tidak dapat menghapus layanan bawaan", + "builtInServerCannotBeRemoved": "Layanan bawaan tidak dapat dihapus, hanya parameter dan variabel lingkungan yang dapat diubah.", + "maxDefaultServersReached": "Hanya maksimal 3 server default yang dapat diatur", + "removeDefaultFirst": "Harap hapus beberapa server default terlebih dahulu", + "higressMarket": "Buka Higress MCP untuk menginstal", + "totalServers": "Jumlah total server", + "npmRegistry": { + "title": "NPM sumber", + "currentSource": "sumber saat ini", + "cached": "tembolok", + "lastChecked": "Deteksi terakhir", + "refresh": "Segarkan", + "advanced": "Lanjutan", + "advancedSettings": "Pengaturan lanjutan", + "advancedSettingsDesc": "Opsi lanjutan untuk mengonfigurasi sumber NPM, termasuk deteksi otomatis dan pengaturan sumber khusus", + "autoDetect": "Secara otomatis mendeteksi sumber optimal", + "autoDetectDesc": "Secara otomatis mendeteksi dan menggunakan sumber NPM tercepat saat startup", + "customSource": "sumber khusus", + "customSourcePlaceholder": "Masukkan alamat sumber NPM khusus", + "currentCustom": "Sumber khusus saat ini", + "justNow": "sekarang", + "minutesAgo": "{minutes} menit yang lalu", + "hoursAgo": "{hours} jam yang lalu", + "daysAgo": "{days} hari yang lalu", + "refreshSuccess": "NPM sumber berhasil disegarkan", + "refreshSuccessDesc": "Mendeteksi ulang dan memperbarui sumber NPM optimal", + "refreshFailed": "NPM penyegaran sumber gagal", + "autoDetectUpdated": "Pengaturan deteksi otomatis diperbarui", + "autoDetectEnabled": "Deteksi otomatis sumber NPM optimal diaktifkan", + "autoDetectDisabled": "Deteksi otomatis dinonaktifkan, sumber default akan digunakan", + "updateFailed": "Pembaruan pengaturan gagal", + "customSourceSet": "Sumber khusus telah ditetapkan", + "customSourceSetDesc": "Kumpulan sumber NPM khusus: {registry}", + "customSourceCleared": "Sumber khusus dihapus", + "customSourceClearedDesc": "Sumber NPM khusus dihapus, deteksi otomatis akan digunakan", + "invalidUrl": "URL tidak valid", + "invalidUrlDesc": "Silakan masukkan alamat HTTP atau HTTPS yang valid", + "testing": "Menguji sumber NPM", + "testingDesc": "Menguji konektivitas untuk sumber {registry}...", + "testFailed": "Tes sumber NPM gagal", + "testFailedDesc": "Tidak dapat terhubung ke {registry}, kesalahan: {error}. Silakan periksa apakah URL benar atau jaringan terhubung.", + "redetectingOptimal": "Mendeteksi ulang sumber NPM optimal...", + "redetectComplete": "Tes ulang selesai", + "redetectCompleteDesc": "Sumber NPM optimal saat ini telah terdeteksi dan disetel", + "redetectFailed": "Tes ulang gagal", + "redetectFailedDesc": "Tidak dapat mendeteksi ulang sumber optimal, konfigurasi default akan digunakan" + }, + "managedServerReadOnly": "DeepChat Layanan Terkelola", + "managedServerReadOnlyDesc": "Silakan kelola aktivasi dan izin di pengaturan plugin yang sesuai", + "center": { + "title": "MCP Center", + "running": "Berlari", + "builtIn": "Bawaan", + "custom": "Adat", + "searchPlaceholder": "Telusuri MCP servers...", + "noResults": "Tidak ada MCP server yang cocok", + "command": "Perintah/URL", + "filters": { + "all": "Semua", + "running": "Berlari", + "stopped": "Berhenti", + "builtIn": "Bawaan", + "custom": "Adat" + } + } + }, + "about": { + "title": "Tentang kami", + "version": "versi", + "checkUpdate": "Periksa pembaruan", + "checking": "Memeriksa...", + "latestVersion": "Sudah versi terbaru" + }, + "display": { + "fontTitle": "font", + "fontFamily": "Font antarmuka", + "fontFamilyDesc": "Pilih font utama antarmuka. Jika dibiarkan kosong, gunakan tumpukan font bawaan.", + "codeFontFamily": "font monospasi", + "codeFontFamilyDesc": "Digunakan untuk blok kode dan area dengan lebar konstan.", + "fontDefaultLabel": "Default (tumpukan font bawaan)", + "fontSearchPlaceholder": "Cari font", + "fontSearchEmpty": "Tidak ada font yang cocok", + "fontReset": "atur ulang ke default", + "fontSystemLoading": "Memuat font sistem...", + "fontUsageHint": "Beberapa antarmuka memerlukan memulai ulang aplikasi agar dapat diterapkan. Jika font tidak tersedia, maka secara otomatis akan kembali ke font default.", + "fontSize": "ukuran teks", + "text-sm": "kecil", + "text-base": "Standar", + "text-lg": "Besar", + "text-xl": "ekstra besar", + "text-2xl": "Ekstra besar", + "floatingButton": "tombol mengambang", + "floatingButtonDesc": "Tampilkan tombol mengambang di desktop untuk memunculkan jendela aplikasi dengan cepat" + }, + "shortcuts": { + "title": "Pengaturan tombol pintas", + "pressKeys": "Masukkan tombol pintas", + "pressEnterToSave": "Tekan Enter untuk menyimpan, Esc untuk membatalkan", + "noModifierOnly": "Anda tidak bisa hanya menggunakan tombol pengubah sebagai tombol pintas", + "keyConflict": "Konflik tombol pintasan, harap pilih kombinasi lain", + "clearShortcut": "Hapus tombol pintas", + "zoomIn": "memperbesar font", + "zoomOut": "Kurangi ukuran font", + "zoomReset": "Setel ulang font", + "goSettings": "Buka pengaturan", + "cleanHistory": "Hapus riwayat obrolan", + "deleteConversation": "Hapus sesi", + "hideWindow": "Sembunyikan jendela", + "quitApp": "Keluar dari program", + "toggleSidebar": "Alihkan bilah sisi", + "toggleWorkspace": "Ganti ruang kerja", + "newWindow": "Buka jendela baru", + "showHideWindow": "Tampilkan/sembunyikan jendela", + "newConversation": "sesi baru", + "quickSearch": "Pencarian terfokus", + "closeWindow": "Tutup jendela saat ini" + }, + "acp": { + "title": "ACP Agent", + "description": "Mengelola ACP Agent lokal yang dimulai oleh DeepChat.", + "enabledTitle": "Aktifkan ACP", + "enabledDescription": "Setelah diaktifkan, ACP Agent yang dikonfigurasi akan muncul di daftar model.", + "useBuiltinRuntimeTitle": "Gunakan lingkungan bawaan DeepChat", + "useBuiltinRuntimeDescription": "Jika dicentang, perintah node dan uv sistem akan dilewati dan versi yang disertakan dengan DeepChat akan digunakan.", + "enableToAccess": "Agent tidak dapat dikonfigurasi sampai ACP diaktifkan.", + "registryInstallEntry": "Instal Agent", + "registryInstallEntryDescription": "Cari dan instal Agent dari ACP Registry dan kembali ke sini untuk mengaktifkan dan mengkonfigurasinya setelah instalasi selesai.", + "addCustomAgent": "Menambahkan Agent khusus", + "customEmpty": "Agent belum dikustomisasi.", + "customDeleteConfirm": "Hapus Agent \"{name}\" khusus?", + "builtinSectionTitle": "Registry ACP Agent", + "builtinSectionDescription": "Memuat Agent secara dinamis dari ACP Registry, mendukung caching lokal, instalasi otomatis, dan perbaikan runtime.", + "builtinHint": "Mulai {name} dengan pengaturan berikut.", + "disabledBadge": "Tidak diaktifkan", + "manageProfiles": "Konfigurasi", + "addProfile": "Konfigurasi baru", + "activeProfile": "Aktifkan konfigurasi", + "profilePlaceholder": "Silakan pilih konfigurasi", + "profileSwitched": "Konfigurasi dialihkan", + "customSectionTitle": "Kustom Agent", + "customSectionDescription": "Enkapsulasi baris perintah apa pun yang kompatibel dengan ACP ke dalam Agent yang dapat digunakan kembali.", + "mcpAccessTitle": "Tersedia MCP", + "mcpAccessEmpty": "Saat ini tidak ada opsi untuk MCP.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "Bagikan MCP", + "sharedMcpDescription": "Semua ACP Agent berbagi satu konfigurasi akses MCP.", + "installedSectionTitle": "Terpasang Agent", + "installedSectionDescription": "Hanya Registri Agent yang terinstal yang akan muncul di sini untuk mengaktifkan, melakukan debug, dan mengganti variabel lingkungan.", + "installedCount": "{count} terpasang", + "installedEmptyTitle": "Belum ada Registri Agent yang terinstal", + "installedEmptyDescription": "Instal Agent dari ACP Registry terlebih dahulu, dan antarmuka yang dapat dikonfigurasi akan ditampilkan di sini setelah instalasi.", + "registryCount": "{count} Agent", + "registryEmpty": "Tidak ada Registri Agent yang tersedia di bawah filter saat ini.", + "registryOverlayEmpty": "Tidak ada Agent yang dapat diinstal pada filter saat ini.", + "registryRefresh": "Segarkan Registri", + "registryRepair": "Perbaikan", + "registryInstallAction": "Instalasi", + "registryUninstallAction": "Copot pemasangan", + "registryUninstallConfirm": "Copot pemasangan \"{name}\"?", + "registryUninstallDescription": "DeepChat menonaktifkan Agent dan membersihkan data instalasi yang dihosting secara lokal bila berlaku, sehingga masih dapat diinstal ulang di ACP Registry.", + "registryUninstallFailed": "Pencopotan pemasangan Agent gagal", + "registryInstallTitle": "ACP Registry", + "registryInstallDescription": "Cari, filter, dan instal ACP Agent. Setelah instalasi selesai, kembali ke halaman pengaturan untuk konfigurasi.", + "registryLearnMore": "Pelajari lebih lanjut", + "registryRepository": "gudang", + "registrySearchPlaceholder": "Cari Registri ACP Agent...", + "installFilters": { + "all": "Semua", + "installed": "Dipasang", + "notInstalled": "Tidak dipasang" + }, + "filters": { + "all": "Semua status", + "enabled": "Lihat hanya diaktifkan", + "installed": "Lihat hanya diinstal", + "attention": "Perlakukan saja" + }, + "envOverrideTitle": "Penggantian variabel lingkungan", + "envOverridePlaceholder": "Satu KEY=VALUE per baris", + "installState": { + "installed": "Dipasang", + "installing": "Menginstal", + "error": "Instalasi gagal", + "notInstalled": "Tidak dipasang" + }, + "loading": "Memuat data ACP...", + "none": "Tidak ada", + "saveSuccess": "Konfigurasi disimpan", + "saveFailed": "Gagal menyimpan", + "deleteSuccess": "Hapus berhasil", + "initialize": "inisialisasi", + "initializing": "Menginisialisasi...", + "initializeDescription": "Dibuka di terminal dan menjalankan perintah inisialisasi", + "initializeSuccess": "Inisialisasi dimulai", + "initializeFailed": "Inisialisasi gagal", + "missingFieldsTitle": "Nama dan perintah diperlukan", + "missingFieldsDesc": "Silakan isi nama dan perintahnya terlebih dahulu.", + "command": "perintah", + "commandPlaceholder": "File atau jalur skrip yang dapat dieksekusi", + "args": "parameter", + "argsPlaceholder": "Opsional, dipisahkan dengan spasi dan diapit tanda kutip jika perlu.", + "env": "variabel lingkungan", + "addEnv": "Tambahkan variabel", + "envKeyPlaceholder": "KEY", + "envValuePlaceholder": "VALUE", + "profileDialog": { + "addBuiltinTitle": "Menambahkan konfigurasi {name}", + "editBuiltinTitle": "Edit konfigurasi {name}", + "addCustomTitle": "Menambahkan Agent khusus", + "editCustomTitle": "Edit Agent khusus", + "builtinHint": "Siapkan beberapa set preset untuk berbagai skenario dan dengan cepat beralih di antara preset tersebut di pemilih model.", + "customHint": "Isi perintah, parameter, dan variabel lingkungan yang diperlukan untuk memulai Agent.", + "profileName": "Nama konfigurasi", + "profileNamePlaceholder": "Seperti: stasiun kerja", + "agentName": "Agent Nama", + "agentNamePlaceholder": "Misalnya: ACP Agent saya" + }, + "profileManager": { + "title": "Daftar konfigurasi", + "description": "Beralih, edit, atau hapus konfigurasi peluncuran yang disimpan.", + "count": "konfigurasi {count}", + "empty": "Belum ada konfigurasi.", + "active": "Saat ini aktif", + "setActive": "Tetapkan sebagai aktif", + "deleteConfirm": "Hapus konfigurasi \"{name}\"?", + "cannotDeleteTitle": "Simpan setidaknya satu konfigurasi", + "cannotDeleteDesc": "Agent bawaan memerlukan setidaknya satu konfigurasi.", + "noAgent": "Silakan pilih Agent untuk dikelola." + }, + "terminal": { + "title": "Inisialisasi terminal", + "waiting": "Menunggu inisialisasi dimulai...", + "starting": "Memulai inisialisasi...", + "close": "Tutup", + "closing": "Menutup...", + "exitSuccess": "Proses berhasil diselesaikan (kode keluar: {code})", + "exitError": "Terjadi kesalahan saat proses keluar (kode keluar: {code})", + "processError": "kesalahan proses", + "paste": "Tempel", + "pasteError": "Gagal menempel dari papan klip", + "status": { + "idle": "gratis", + "running": "Berlari", + "completed": "Selesai", + "error": "Kesalahan" + } + }, + "dependency": { + "title": "Ketergantungan eksternal tidak ada", + "description": "Dependensi berikut perlu diinstal sebelum inisialisasi.", + "installCommands": "Perintah instalasi", + "downloadUrl": "Tautan unduhan", + "copy": "Salin", + "copied": "Disalin ke papan klip", + "copyFailed": "Penyalinan gagal" + }, + "debug": { + "title": "ACP Inspector", + "description": "Periksa status kesehatan \"{name}\" dan kirim permintaan ACP mentah untuk melihat aliran peristiwa.", + "entry": "Inspector", + "healthCheck": "Pemeriksaan Kesehatan", + "healthChecking": "Memeriksa...", + "healthCheckFailed": "Pemeriksaan kesehatan gagal", + "workdirPlaceholder": "Biarkan kosong untuk menggunakan direktori kerja default", + "close": "Tutup", + "customMethod": "Nama metode khusus", + "customMethodPlaceholder": "Misalnya session/ping", + "payloadHint": "JSON dapat disesuaikan sebelum dikirim.", + "format": "Formatnya JSON", + "resetTemplate": "Templat pemulihan", + "clearHistory": "catatan yang jelas", + "send": "Kirim permintaan", + "sending": "Mengirim...", + "processReady": "Proses sudah siap", + "processNotReady": "Silakan lakukan Pemeriksaan Kesehatan terlebih dahulu", + "needInitialize": "Silakan lakukan Pemeriksaan Kesehatan terlebih dahulu", + "events": "acara", + "eventCount": "{count} item", + "empty": "Belum ada peristiwa debug.", + "parseError": "JSON Penguraian gagal", + "customMethodRequired": "Silakan isi nama metode ekstensi", + "requestFailed": "Permintaan gagal", + "methods": { + "initialize": "initialize", + "newSession": "session/new", + "loadSession": "session/load", + "prompt": "session/prompt", + "cancel": "session/cancel", + "setSessionMode": "session/setMode", + "setSessionModel": "session/setModel", + "extMethod": "ext/method", + "extNotification": "ext/notification" + }, + "eventKinds": { + "request": "Permintaan", + "response": "tanggapan", + "notification": "Pemberitahuan", + "permission": "Izin", + "lifecycle": "siklus hidup", + "stderr": "stderr", + "error": "Kesalahan" + } + } + }, + "rateLimit": { + "title": "batas tarif", + "description": "Kontrol waktu interval permintaan untuk mencegah melebihi batas API", + "intervalLimit": "Interval permintaan", + "intervalUnit": "detik", + "intervalHelper": "Interval minimum antara dua permintaan, harap matikan pembatasan tarif bila tidak diperlukan", + "lastRequestTime": "permintaan terakhir", + "queueLength": "panjang antrian", + "nextAllowedTime": "Bisa diminta lain kali", + "never": "tidak pernah", + "justNow": "sekarang", + "secondsAgo": "beberapa detik yang lalu", + "minutesAgo": "beberapa menit yang lalu", + "immediately": "segera", + "secondsLater": "beberapa detik kemudian", + "confirmDisableTitle": "Konfirmasikan untuk menonaktifkan pembatasan tarif", + "confirmDisableMessage": "Nilai ini tidak boleh kurang dari atau sama dengan 0. Apakah Anda ingin menonaktifkan fungsi pembatasan laju?", + "confirmDisable": "Matikan pembatasan", + "disabled": "Pembatasan tarif tidak aktif", + "disabledDescription": "Fitur pembatasan tarif dimatikan" + }, + "promptSetting": { + "resetToDefault": "Setel ulang ke default prompt", + "resetToDefaultSuccess": "Setel ulang ke default system prompt", + "resetToDefaultFailed": "Penyetelan ulang gagal, coba lagi" + }, + "skills": { + "title": "Pengaturan Skills", + "description": "Modul skill untuk mengelola dan mengonfigurasi asisten AI", + "draftSuggestions": { + "title": "Disarankan curah hujan setelah misi Skill Draf", + "description": "Setelah tugas selesai, izinkan Agent menyarankan pembuatan draf skill sementara ketika proses yang dapat digunakan kembali diidentifikasi. Draf akan disimpan di direktori sementara terlebih dahulu, dan Anda perlu memutuskan secara manual apakah akan mengimpornya untuk instalasi." + }, + "openFolder": "buka folder", + "addSkill": "Tambahkan skill", + "empty": "Tidak ada skill", + "emptyHint": "Klik tombol \"Tambahkan skill\" untuk menginstal skill baru", + "noResults": "Tidak ditemukan skill yang cocok", + "search": "Telusuri skill...", + "count": "Jumlah {count} skill", + "install": { + "title": "Instal skill", + "description": "Pilih metode instalasi skill", + "tabFolder": "folder", + "tabZip": "ZIP", + "tabUrl": "URL", + "fromFolder": "Instal dari folder", + "selectFolder": "Pilih folder skill", + "folderHint": "Klik untuk memilih folder skill", + "folderTip": "Mendukung impor langsung dari klien lain seperti ~/.claude/skills/", + "zipHint": "Klik untuk memilih file ZIP", + "urlPlaceholder": "Masukkan skill ZIP alamat unduhan", + "urlHint": "Masukkan tautan unduhan untuk paket skill", + "installButton": "Instalasi", + "installing": "Memasang...", + "success": "Instalasi berhasil", + "successMessage": "skill {name} berhasil diinstal", + "failed": "Instalasi gagal", + "dragNotSupported": "Seret dan lepas belum didukung, silakan klik untuk memilih" + }, + "delete": { + "title": "Hapus skill", + "description": "Apakah Anda yakin ingin menghapus skill {name}? Tindakan ini tidak dapat dibatalkan.", + "success": "Hapus berhasil", + "successMessage": "skill {name} berhasil dihapus", + "failed": "Penghapusan gagal" + }, + "card": { + "scripts": "skrip {count}", + "env": "{count} variabel lingkungan", + "pythonShort": "Py", + "nodeShort": "Node" + }, + "edit": { + "title": "Sunting skill", + "placeholder": "Edit konten skill di sini...", + "readFailed": "Gagal membaca", + "success": "Berhasil disimpan", + "failed": "Gagal menyimpan", + "name": "Nama", + "namePlaceholder": "skill Nama", + "nameHint": "skill Nama tidak dapat diubah setelah pembuatan.", + "description": "Deskripsi", + "descriptionPlaceholder": "skill Deskripsi", + "allowedTools": "Alat tambahan", + "allowedToolsPlaceholder": "Read, Grep, Bash", + "allowedToolsHint": "Daftar nama alat yang dipisahkan koma", + "content": "skill Isi", + "runtimeTitle": "waktu proses", + "runtimeHint": "Pilih strategi penguraian untuk Python dan Node untuk skrip bawaan.", + "pythonRuntime": "Python waktu proses", + "nodeRuntime": "Waktu proses simpul", + "envTitle": "variabel lingkungan", + "envWarning": "Hanya tampilan topeng yang dilakukan di UI, dan file sespan skill sebenarnya akan ditulis dalam teks biasa.", + "scriptsTitle": "Skrip bawaan", + "scriptsHint": "Hanya skrip di bawah scripts/ yang akan diekspos ke agent melalui skill_run.", + "noScripts": "Tidak ditemukan skrip yang dapat dijalankan", + "scriptEnabled": "aktifkan", + "scriptDescription": "Cakupan deskripsi", + "scriptDescriptionPlaceholder": "Opsional, instruksi skrip untuk ditampilkan untuk agent", + "runtime": { + "auto": "Kembalikan otomatis", + "system": "waktu berjalan sistem", + "builtin": "Waktu proses bawaan" + }, + "files": "Isi map", + "noFiles": "Tidak ada berkas" + }, + "conflict": { + "title": "skill sudah ada", + "description": "skill bernama \"{name}\" sudah ada. Apakah Anda ingin menimpa?", + "overwrite": "Penutup" + }, + "sync": { + "title": "sinkronisasi", + "import": "Impor dari alat lain...", + "export": "Ekspor", + "importTitle": "Impor Skills dari alat lain", + "exportTitle": "Ekspor Skills ke alat lain", + "importDescription": "Impor Skills dari Claude Code, Kursor, dan alat lainnya", + "exportDescription": "Ekspor Skills ke alat asisten AI lainnya", + "step1Title": "Pilih alat sumber", + "step2Title": "Pilih Skills untuk diimpor", + "step3Title": "Konfirmasikan impor", + "exportStep1Title": "Pilih Skills untuk mengekspor", + "exportStep2Title": "Pilih alat target", + "exportStep3Title": "Konfirmasikan ekspor", + "scanning": "Memindai...", + "noToolsFound": "Alat yang dipasang tidak terdeteksi", + "skillCount": "{count} Skills terdeteksi", + "notInstalled": "Tidak dipasang", + "selectedCount": "{count} dipilih", + "selectAll": "Pilih semua", + "deselectAll": "Batalkan pilihan semua", + "conflict": "konflik", + "conflictDescription": "Sudah ada dengan nama yang sama skill \"{name}\"", + "batchAction": "Pemrosesan batch", + "skip": "lewati", + "skipAll": "Lewati semuanya", + "overwrite": "Penutup", + "overwriteAll": "Semua tertutup", + "rename": "Ganti nama", + "renameAll": "Ganti nama semua", + "warnings": "peringatan konversi", + "previewing": "Pratinjau...", + "importing": "Mengimpor ({current}/{total})...", + "exporting": "Mengekspor ({current}/{total})...", + "importButton": "impor", + "exportButton": "Ekspor", + "exportWarnings": "Peringatan ekspor", + "noConflicts": "Tidak ada konflik", + "readyToExport": "Bersiap untuk mengekspor {count} Skills", + "kiroOptions": "Opsi ekspor Kiro", + "kiroInclusion": "Perkenalkan pola", + "kiroOnDemand": "Perkenalkan sesuai permintaan", + "kiroOnDemandDesc": "Hanya digunakan jika diminta secara eksplisit oleh pengguna", + "kiroAlways": "selalu perkenalkan", + "kiroAlwaysDesc": "Secara otomatis disertakan dalam setiap percakapan", + "kiroConditional": "Pengenalan bersyarat", + "kiroConditionalDesc": "Diimpor secara otomatis berdasarkan pola pencocokan file", + "kiroFilePatterns": "Pola pencocokan file", + "kiroFilePatternsPlaceholder": "Misalnya: **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Pola glob yang dipisahkan koma", + "scanError": "Pemindaian gagal", + "previewError": "Pratinjau gagal", + "loadToolsError": "Gagal memuat daftar alat", + "importSuccess": "Impor berhasil", + "importSuccessMessage": "Berhasil mengimpor {count} Skills", + "importPartial": "Berhasil diimpor sebagian", + "importPartialMessage": "{success} item berhasil, melewatkan {skipped} item, gagal {failed} item", + "importError": "Impor gagal", + "exportSuccess": "Ekspor berhasil", + "exportSuccessMessage": "Berhasil mengekspor {count} Skills", + "exportPartial": "Berhasil diekspor sebagian", + "exportPartialMessage": "{success} item berhasil, melewatkan {skipped} item, gagal {failed} item", + "exportError": "Ekspor gagal", + "resultSuccess": "Operasi berhasil", + "resultPartial": "Berhasil sebagian", + "imported": "Diimpor", + "exported": "Diekspor", + "skipped": "dilewati", + "failed": "gagal", + "failedItems": "proyek gagal" + }, + "syncStatus": { + "title": "alat eksternal", + "description": "Impor Skills dari asisten pemrograman AI lainnya", + "scanning": "Alat pemindaian...", + "noToolsFound": "Tidak ada alat eksternal yang terdeteksi", + "skillCount": "{count} Skills", + "notInstalled": "Tidak dipasang", + "notAvailable": "Tidak tersedia", + "noSkills": "Tidak adaSkills", + "import": "impor", + "syncing": "Mengimpor..." + }, + "syncPrompt": { + "title": "Temukan yang baruSkills", + "description": "Kami menemukan Skills baru di antara asisten pemrograman AI lainnya. Apakah Anda ingin mengimpor?", + "dontShowAgain": "Jangan tampilkan prompt ini lagi", + "skip": "lewati", + "importSelected": "Impor dipilih" + } + }, + "environments": { + "title": "lingkungan direktori", + "description": "Lihat direktori proyek yang digunakan oleh sesi tersebut dan dengan cepat membuka atau mengaturnya sebagai direktori default.", + "default": { + "title": "direktori bawaan", + "description": "Sesi baru akan memilih ini untuk dipilih sebelumnya daripada dipaksa untuk menimpa pilihan manual Anda.", + "empty": "Saat ini tidak ada kumpulan direktori default." + }, + "history": { + "title": "Direktori sejarah", + "description": "Hanya direktori yang benar-benar digunakan oleh sesi tersebut yang ditampilkan di sini." + }, + "temp": { + "title": "Temp Daftar Isi", + "description": "Lingkungan yang terletak di direktori sementara sistem atau ruang kerja hosting aplikasi akan disimpan di sini dan diciutkan secara default." + }, + "actions": { + "refresh": "Segarkan", + "showMissing": "Tampilkan direktori tidak ada", + "open": "terbuka", + "setDefault": "Tetapkan sebagai bawaan", + "clearDefault": "jelas bawaannya", + "showTemp": "Tampilan Temp", + "hideTemp": "Tutup Temp" + }, + "badges": { + "default": "Bawaan", + "temp": "Temp", + "missing": "Direktori tidak ada", + "notInHistory": "tidak dalam sejarah" + }, + "meta": { + "sessions": "{count} sesi", + "lastUsed": "Baru-baru ini digunakan: {value}", + "never": "tidak pernah" + }, + "empty": { + "regular": "Saat ini tidak ada lingkungan direktori untuk ditampilkan.", + "temp": "Saat ini tidak ada lingkungan direktori Temp." + }, + "errors": { + "openTitle": "Gagal membuka direktori" + } + }, + "remote": { + "title": "terpencil", + "description": "Konfigurasi terpadu Telegram, Feishu/Lark, QQBot, Discord dan remote control WeChat iLink.", + "telegram": { + "title": "Telegram", + "description": "Akses ke Telegram Bot dan dukung obrolan pribadi, obrolan grup, dan kendali jarak jauh topik.", + "botToken": "Robot Token", + "botTokenPlaceholder": "Telegram Robot Token", + "botTokenDescription": "Isi robot Token untuk remote control Telegram." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Hubungkan ke Feishu Bot dan dukung obrolan pribadi, obrolan grup, dan kendali jarak jauh topik.", + "brand": "Merek", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "ID Aplikasi", + "appIdPlaceholder": "ID Aplikasi Feishu", + "appSecret": "kunci aplikasi", + "appSecretPlaceholder": "Kunci aplikasi Feishu", + "verificationToken": "Verifikasitoken", + "verificationTokenPlaceholder": "Verifikasi langganan acara Feishutoken", + "encryptKey": "Kunci enkripsi (opsional)", + "encryptKeyPlaceholder": "Dapat dikosongkan jika enkripsi acara tidak diaktifkan", + "botUser": "Akun robot: {name} ({openId})", + "bindings": "Jumlah pengikatan: {count}, pengguna berpasangan: {pairedUserCount}", + "pairedUserOpenIds": "ID Terbuka pengguna berpasangan", + "pairedUserOpenIdsPlaceholder": "Misalnya ou_xxx, ou_yyy", + "accessRulesDescription": "Selesaikan pencocokan di obrolan pribadi terlebih dahulu. Hanya pengguna yang cocok dan menyebutkan bot dengan {'@'} di obrolan grup yang dapat mengoperasikan percakapan.", + "accessRule1": "Pertama, ngobrol secara pribadi dengan bot dan kirim /pair [kode penyandingan] untuk menyelesaikan penyandingan.", + "accessRule2": "Dalam obrolan grup dan rangkaian topik, pesan hanya akan masuk ke percakapan jika pengguna yang dipasangkan menyebutkan bot dengan {'@'}." + }, + "discord": { + "title": "Discord", + "description": "Akses ke Discord Bot, mendukung obrolan pribadi, penyebutan saluran, dan kendali jarak jauh Perintah Slash.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Discord Bot Token", + "remoteControlDescription": "Remote control Discord menggunakan proses Bot independen Token, Gateway, dan REST.", + "accessRule1": "Kirim /pasangkan [kode penyandingan] dalam obrolan atau saluran pribadi untuk mengotorisasi DM atau saluran saat ini ke DeepChat.", + "accessRule2": "Pesan saluran hanya akan memasuki percakapan ketika bot disebutkan, untuk menghindari kesalahan penanganan obrolan normal." + }, + "sections": { + "credentials": "voucher", + "remoteControl": "kendali jarak jauh", + "notifications": "Pemberitahuan", + "accessRules": "aturan akses" + }, + "remoteControl": { + "description": "Ikat setiap portal jarak jauh ke sebuah sesi dan terus gunakan kembali sesi tersebut di antara perintah yang berbeda.", + "allowedUserIds": "ID pengguna yang diizinkan", + "allowedUserIdsPlaceholder": "Misalnya 123456789, 987654321", + "defaultAgent": "Bawaan Agent", + "defaultAgentPlaceholder": "Pilih Agent", + "defaultWorkdir": "direktori bawaan", + "defaultWorkdirPlaceholder": "Pilih direktori default", + "defaultWorkdirHelper": "Direktori kerja sesi kendali jarak jauh. Defaultnya Agent adalah ACP dan harus dipilih.", + "openPairDialog": "berpasangan", + "manageBindings": "Kelola pengikatan", + "pairCode": "kode berpasangan", + "noPairCode": "Saat ini tidak ada kode penyandingan yang valid", + "pairCodeExpiresAt": "Tanggal kedaluwarsa: {time}", + "pairDialogTitle": "{channel} Memasangkan", + "pairDialogDescription": "Setelah membuat kode pemasangan, silakan buka robot {channel} yang sesuai untuk menyelesaikan pemasangan.", + "pairDialogInstructionTelegram": "Buka robot Telegram dan kirimkan perintah ini:", + "pairDialogInstructionFeishu": "Buka obrolan pribadi Robot Feishu dan kirimkan perintah ini:", + "pairDialogInstructionDiscord": "Buka obrolan pribadi atau saluran target bot Discord dan kirimkan perintah ini:", + "bindingsDialogTitle": "{channel} mengikat", + "bindingsDialogDescription": "Hapus hubungan yang mengikat antara portal jarak jauh dan sesi DeepChat satu per satu.", + "bindingsEmpty": "Saat ini tidak ada sesi terikat.", + "pairingSuccessTitle": "Penyandingan berhasil", + "pairingSuccessDescription": "Daftar kepala sekolah yang dipasangkan telah disegarkan.", + "pairDialogInstructionQQBot": "Buka obrolan pribadi robot QQ atau obrolan grup resmi dan kirimkan perintah ini:", + "authorizedPrincipalsTitle": "Subjek yang berwenang", + "authorizedPrincipalsDescription": "Akun {channel} ini diberi wewenang untuk memasangkan dan mengoperasikan sesi.", + "authorizedPrincipalsEmpty": "Saat ini tidak ada prinsipal yang berwenang.", + "sessionBindingsTitle": "pengikatan sesi", + "sessionBindingsDescription": "Setiap portal jarak jauh di bawah saat ini terikat pada sesi DeepChat." + }, + "hooks": { + "title": "Telegram Pemberitahuan kait", + "description": "Gunakan kembali Bot Telegram yang sama untuk mengirim notifikasi Hook.", + "chatId": "ID Obrolan", + "chatIdPlaceholder": "Misalnya 123456789", + "threadId": "ID Topik (opsional)", + "threadIdPlaceholder": "ID topik opsional" + }, + "status": { + "title": "Status berjalan", + "botUser": "Pengguna robot: {username} ({id})", + "bindings": "Nomor pengikatan: {count}, offset polling: {pollOffset}", + "states": { + "disabled": "Dinonaktifkan", + "stopped": "Berhenti", + "starting": "Mulai", + "running": "Berlari", + "backoff": "Mencoba lagi setelah gagal", + "error": "Kesalahan" + }, + "bindingOnly": "Jumlah pengikatan: {count}, prinsipal berpasangan: {paired}" + }, + "overview": { + "telegram": "{bindingCount} binding, {pairedCount} pengguna berpasangan", + "feishu": "{bindingCount} binding, {pairedCount} pengguna berpasangan", + "hooksOn": "nyalakan", + "hooksOff": "Tutup", + "qqbot": "{bindingCount} binding, {pairedCount} pengguna berpasangan", + "discord": "Obligasi {bindingCount}, saluran berpasangan {pairedCount}", + "weixinIlink": "{bindingCount} terikat, {accountCount} akun, {connectedCount} terhubung" + }, + "bindingKinds": { + "dm": "obrolan pribadi", + "group": "obrolan grup", + "topic": "topik" + }, + "qqbot": { + "title": "QQBot", + "description": "Akses ke platform terbuka robot QQ Bot, mendukung obrolan tunggal dan obrolan grup resmi yang menyebutkan kontrol robot.", + "appId": "ID Aplikasi", + "appIdPlaceholder": "QQBot ID Aplikasi", + "clientSecret": "kunci klien", + "clientSecretPlaceholder": "QQBot kunci klien", + "remoteControlDescription": "Obrolan tunggal resmi QQ user_openid dan obrolan grup member_openid tidak berada dalam ruang identitas yang sama, jadi obrolan tunggal cocok dengan pengguna yang berwenang, dan obrolan grup memerlukan otorisasi /pasangan terpisah dalam grup.", + "pairedUserIds": "OpenID pengguna berpasangan", + "pairedUserIdsPlaceholder": "Misalnya pengguna_openid_xxx, pengguna_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Pindai kode QR untuk terhubung ke Bot iLink WeChat resmi, dan gunakan adaptor internal untuk mengambil alih sesi kendali jarak jauh.", + "loginDescription": "Setelah mengklik tombol di bawah, DeepChat akan membuka jendela login resmi WeChat. Silakan selesaikan otorisasi kode pindaian iLink Bot di jendela ini. Akun yang berhasil terhubung secara otomatis akan ditambahkan ke daftar di bawah.", + "ownerOnlyNotice": "Versi pertama saat ini hanya memungkinkan pemindaian kode QR untuk masuk ke pemilik akun terkait untuk mengontrol DeepChat.", + "connectButton": "Buka jendela masuk", + "refreshQrCode": "Buka kembali jendela masuk", + "loginDialogTitle": "Hubungkan ke WeChat iLink", + "loginDialogDescription": "Halaman login resmi WeChat akan terbuka di jendela terpisah. Harap selesaikan otorisasi kode pemindaian di jendela ini dan biarkan kotak dialog ini tetap terbuka hingga koneksi selesai.", + "loginFailed": "Login WeChat iLink gagal.", + "loginSuccessTitle": "WeChat iLink terhubung", + "loginSuccessDescription": "Nomor rekening {accountId} tersedia.", + "accountsTitle": "Nomor rekening", + "accountsDescription": "Setiap akun iLink Bot yang terhubung akan berjalan secara independen dan mempertahankan status pengikatan dan pengoperasiannya sendiri.", + "noAccounts": "Belum ada akun WeChat iLink yang terhubung.", + "ownerUserId": "ID Pengguna Pemilik: {ownerUserId}", + "baseUrl": "Alamat layanan: {baseUrl}", + "accountBindings": "Jumlah pengikatan: {count}", + "remoteControlDescription": "Tetapkan Agent default bersama untuk akun WeChat iLink dan kelola pengikatan sesi yang dihasilkan oleh akun ini.", + "removeAccount": "Hapus akun", + "restartAccount": "Mulai ulang akun", + "statusSummary": "Ada {accounts} akun, {connected} terhubung, dan {bindings} terikat", + "qrcodeAlt": "Kode QR WeChat iLink", + "loginWindowOpened": "Jendela login resmi WeChat telah dibuka. Silakan selesaikan otorisasi kode pemindaian di jendela ini.", + "loginSessionExpired": "Sesi login ini telah berakhir, silakan buka kembali jendela login dan coba lagi.", + "loginResponseIncomplete": "Pengembalian login WeChat iLink tidak lengkap, silakan coba lagi.", + "loginTimedOut": "Menunggu waktu otorisasi WeChat iLink habis, silakan buka kembali jendela login dan coba lagi.", + "loginConnected": "Akun WeChat iLink telah terhubung." + } + }, + "plugins": { + "title": "plugin", + "officialOnly": "Kelola status aktivasi plug-in resmi yang ada di versi DeepChat saat ini", + "refresh": "Segarkan", + "empty": "Belum ada plugin resmi yang tersedia", + "emptyTitle": "Belum ada plugin bawaan", + "emptyDescription": "Platform saat ini tidak memiliki plug-in resmi bawaan dalam versi DeepChat ini.", + "loadFailed": "Gagal memuat plugin", + "actionFailed": "Operasi plugin gagal", + "install": "Instalasi", + "installFromFile": "Pilih.dcplugin", + "openRelease": "GitHub Release", + "enable": "aktifkan", + "disable": "nonaktifkan", + "openSettings": "pengaturan", + "runtime": "waktu proses", + "version": "versi", + "command": "perintah", + "status": { + "enabled": "Diaktifkan", + "disabled": "Dinonaktifkan", + "available": "Tersedia" + }, + "runtimeStates": { + "missing": "Tidak dipasang", + "installed": "Dipasang", + "running": "Berlari", + "error": "Kesalahan" + } + }, + "controlCenter": { + "groups": { + "overview": "Ikhtisar", + "setup": "Dasar-dasar", + "models": "Pengaturan Agent", + "tools": "Perluasan kemampuan", + "knowledge": "rekayasa konteks", + "system": "sistem" + }, + "overview": { + "title": "Ikhtisar Pengaturan", + "description": "Melihat penyedia layanan secara terpusat, MCP, Agent, data dan status penggunaan.", + "searchPlaceholder": "Pengaturan pencarian, penyedia, model, Agent, MCP...", + "providers": "Providers", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agents", + "data": "Waktu pencadangan terakhir", + "enabledCount": "{count} diaktifkan", + "runningCount": "{count} berjalan", + "enabledAgentCount": "{count} Agent diaktifkan", + "providersDescription": "Status koneksi penyedia layanan", + "deepchatAgentsDescription": "Entri konfigurasi Agent", + "mcpOn": "MCP diaktifkan", + "mcpOff": "MCP ditutup", + "syncOn": "Sinkronisasi diaktifkan", + "syncOff": "Sinkronisasi tidak diaktifkan", + "backupNever": "tidak pernah membuat cadangan" + }, + "quickStart": { + "title": "Mulai cepat", + "addApiKey": "Tambahkan API Key", + "addApiKeyDesc": "Konfigurasikan koneksi penyedia layanan", + "enableModel": "Aktifkan Model", + "enableModelDesc": "Aktifkan model yang tersedia", + "startMcp": "Mulai MCP Server", + "startMcpDesc": "Mulai layanan alat", + "backupNow": "Cadangkan Sekarang", + "backupNowDesc": "Cadangkan data sekarang" + }, + "needsAttention": { + "title": "Perlu perhatian", + "empty": "Saat ini tidak ada proyek untuk dikerjakan", + "noModels": "Modelnya belum diaktifkan", + "privacyOff": "Mode privasi tidak diaktifkan", + "backupNever": "Data tidak pernah dicadangkan" + }, + "activity": { + "title": "Perubahan pengaturan terkini", + "description": "Hanya 200 perubahan pengaturan terbaru yang ditampilkan, dan database menyimpan 2.000 perubahan terbaru.", + "when": "waktu", + "category": "Ketik", + "change": "Ubah", + "empty": "Belum ada catatan modifikasi", + "emptyDescription": "Itu akan muncul di sini setelah berhasil mengubah pengaturan.", + "settingUpdated": "Pengaturan pembaruan: {key}", + "providerUpdated": "Perbarui penyedia layanan: {name}", + "providerCreated": "Penyedia layanan baru: {name}", + "providerRemoved": "Hapus penyedia layanan: {name}", + "providerModelsRefreshed": "Segarkan model penyedia layanan: {name}", + "modelStatusChanged": "Perbarui status model: {model}", + "modelBatchUpdated": "Pembaruan batch model {count}", + "mcpServerCreated": "MCP Server baru: {name}", + "mcpServerUpdated": "Pembaruan MCP Server: {name}", + "mcpServerRemoved": "Hapus MCP Server: {name}", + "mcpServerStatusChanged": "Alihkan MCP Server: {name}", + "mcpGlobalStatusChanged": "Alihkan MCP Status global: {status}", + "mcpServerStarted": "Mulai MCP Server: {name}", + "mcpServerStopped": "Hentikan MCP Server: {name}", + "mcpRegistryRefreshed": "Segarkan registri MCP NPM", + "backupCreated": "Buat cadangan: {name}", + "backupImported": "Impor cadangan: {name}", + "databaseRepaired": "Perbaikan basis data selesai: {status}" + } + } +} diff --git a/src/renderer/src/i18n/id-ID/sync.json b/src/renderer/src/i18n/id-ID/sync.json new file mode 100644 index 000000000..d05dfdb13 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "Berhasil mengimpor percakapan {count}" + }, + "error": { + "notEnabled": "Sinkronisasi tidak diaktifkan", + "folderNotExists": "Folder sinkronisasi tidak ada", + "noValidBackup": "Tidak ada file cadangan yang valid di folder sinkronisasi", + "unsupportedBackupVersion": "Cadangan ini dibuat oleh versi DeepChat yang lebih baru dan versi saat ini tidak dapat diimpor", + "dbNotExists": "File basis data tidak ada", + "configNotExists": "File konfigurasi tidak ada", + "tempDbFailed": "Pembuatan file cadangan database sementara gagal", + "tempConfigFailed": "Pembuatan file cadangan konfigurasi sementara gagal", + "importFailed": "Impor gagal, data asli dipulihkan", + "importProcess": "Kesalahan saat mengimpor", + "unknown": "kesalahan yang tidak diketahui", + "encryptedBackupPasswordMissing": "Cadangan dienkripsi, namun kunci database lokal tidak tersedia. Harap buka kunci basis data terenkripsi terlebih dahulu lalu impor lagi.", + "overwriteEncryptionMismatch": "Impor penimpaan mengharuskan database cadangan dan database saat ini berada dalam status enkripsi yang sama." + } +} diff --git a/src/renderer/src/i18n/id-ID/thread.json b/src/renderer/src/i18n/id-ID/thread.json new file mode 100644 index 000000000..848e596af --- /dev/null +++ b/src/renderer/src/i18n/id-ID/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Ganti nama", + "delete": "Hapus", + "cleanMessages": "Hapus pesan", + "pin": "sematkan ke atas", + "unpin": "Lepas sematan", + "export": "Ekspor", + "exportText": "teks biasa", + "exportNowledgeMem": "Nowledge-mem" + }, + "export": { + "failed": "Ekspor gagal", + "failedDesc": "Terjadi kesalahan saat mengekspor, silakan coba lagi", + "nowledgeMemSubmitFailed": "Kirim ke Nowledge-mem gagal", + "nowledgeMemSubmitFailedDesc": "Gagal mengkomit sesi ke nowledge-mem", + "nowledgeMemSubmitPrompt": "Apakah Anda yakin perlu mengekspor sesi saat ini ke nowledge-mem?", + "nowledgeMemSubmitSuccess": "Berhasil dikirim ke Nowledge-mem", + "nowledgeMemSubmitSuccessDesc": "Sesi berhasil dikirimkan ke Nowledge-mem", + "nowledgeMemSuccessDesc": "Sesi berhasil diekspor ke format Nowledge-mem", + "success": "Ekspor berhasil", + "nowledgeMemSuccess": "Berhasil diekspor ke Nowledge-mem ", + "successDesc": "Ekspor sesi berhasil" + }, + "message": { + "toolbar": { + "save": "simpan" + } + }, + "toolbar": { + "save": "simpan", + "cancel": "Batalkan", + "previousVariant": "Beralih ke versi sebelumnya", + "nextVariant": "Beralih ke versi berikutnya", + "copy": "Salin jawaban sebagai penurunan harga", + "copyImage": "Salin seperti gambar", + "copyImageWithLongPress": "Salin sebagai gambar (tekan lama untuk mengambil dari atas)", + "copyFromTopSuccess": "Gambar sesi lengkap disalin", + "capturing": "Mengambil tangkapan layar...", + "retry": "Regenerasi", + "fork": "Beralih ke sesi baru", + "edit": "Sunting pesan", + "delete": "Hapus pesan", + "trace": "Lihat parameter permintaan" + } +} diff --git a/src/renderer/src/i18n/id-ID/toolCall.json b/src/renderer/src/i18n/id-ID/toolCall.json new file mode 100644 index 000000000..419872df9 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Menelepon", + "response": "Berlari", + "end": "Lengkap", + "error": "Kesalahan", + "title": "Panggilan alat", + "clickToView": "Klik untuk melihat detailnya", + "functionName": "nama fungsi", + "permission": "Meminta izin", + "params": "Parameter fungsi", + "responseData": "respon fungsi", + "imagePreview": "Pratinjau gambar", + "imagePreviewCount": "Tidak ada pratinjau gambar | {count} pratinjau gambar | {count} pratinjau gambar", + "terminalOutput": "Keluaran terminal", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "Penggantian selesai di {count}", + "fileOperation": "Operasi berkas", + "fileRead": "membaca berkas", + "fileWrite": "tulis berkas", + "filePath": "jalur file", + "success": "sukses", + "failed": "gagal" +} diff --git a/src/renderer/src/i18n/id-ID/traceDialog.json b/src/renderer/src/i18n/id-ID/traceDialog.json new file mode 100644 index 000000000..a65b2b360 --- /dev/null +++ b/src/renderer/src/i18n/id-ID/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Minta pratinjau parameter", + "provider": "pemasok", + "model": "model", + "endpoint": "API Endpoint", + "headers": "Judul permintaan", + "body": "Permintaan tubuh", + "copyJson": "SalinJSON", + "copySuccess": "Disalin ke papan klip", + "close": "Tutup", + "loading": "Memuat...", + "error": "Gagal memuat", + "errorDesc": "Tidak dapat memperoleh informasi pratinjau permintaan, silakan coba lagi", + "notImplemented": "Belum didukung", + "notImplementedDesc": "Pemasok ini belum tersedia untuk pratinjau", + "mayNotMatch": "Catatan: Pratinjau ini dibuat ulang berdasarkan pengaturan sesi saat ini dan mungkin tidak sama persis dengan parameter yang sebenarnya dikirim." +} diff --git a/src/renderer/src/i18n/id-ID/update.json b/src/renderer/src/i18n/id-ID/update.json new file mode 100644 index 000000000..12b98139c --- /dev/null +++ b/src/renderer/src/i18n/id-ID/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "versi baru ditemukan", + "version": "versi", + "releaseDate": "Tanggal rilis", + "releaseNotes": "Perbarui konten", + "later": "Bicaralah denganmu nanti", + "githubDownload": "Gitpengunduhan hub", + "officialDownload": "Pengunduhan situs web resmi", + "checkUpdate": "Periksa pembaruan", + "downloading": "Mengunduh", + "installNow": "Instal sekarang", + "installUpdate": "Instal pembaruan", + "versionAvailable": "{version} tersedia", + "autoUpdateFailed": "Pembaruan otomatis gagal, silakan gunakan tautan unduh manual di bawah.", + "topbarButton": "memperbarui", + "autoUpdate": "Pembaruan otomatis", + "restarting": "Memulai ulang", + "alreadyUpToDate": "Sudah versi terbaru", + "alreadyUpToDateDesc": "DeepChat Anda saat ini adalah versi terbaru dan tidak perlu diperbarui." +} diff --git a/src/renderer/src/i18n/id-ID/welcome.json b/src/renderer/src/i18n/id-ID/welcome.json new file mode 100644 index 000000000..1bd27dd0c --- /dev/null +++ b/src/renderer/src/i18n/id-ID/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "selamat datang", + "description": "Mari mulai menyiapkan DeepChat" + }, + "provider": { + "title": "Penyedia layanan model", + "description": "Pilih penyedia layanan model pilihan Anda" + }, + "configuration": { + "title": "Konfigurasi model", + "description": "Konfigurasikan model yang ingin Anda gunakan" + }, + "complete": { + "title": "Lengkap", + "description": "Semuanya siap untuk mulai digunakan!" + } + }, + "title": "Selamat datang di DeepChat", + "description": "Mari kita melalui proses penyiapan bersama", + "provider": { + "select": "Pilih penyedia layanan", + "apiUrl": "API alamat", + "apiKey": "API Key", + "verifyLink": "Tautan verifikasi" + }, + "complete": { + "title": "Semuanya selesai!", + "description": "Anda telah menyelesaikan proses penyiapan, mari kita mulai!" + }, + "buttons": { + "getStarted": "Mulailah", + "next": "Langkah selanjutnya", + "back": "Kembali" + }, + "page": { + "title": "Selamat datang di DeepChat Agent", + "description": "Hubungkan ke penyedia layanan model untuk memulai", + "guide": { + "title": "kemajuan booting", + "description": "Langkah saat ini: {step}", + "or": "atau", + "coreProgress": "Kemajuan konfigurasi inti", + "optional": "Langkah opsional berikutnya", + "actions": { + "continueSetup": "Lanjutkan konfigurasi", + "goToChat": "Pergi ke obrolan" + }, + "steps": { + "provider": "penyedia layanan", + "first-chat": "obrolan pertama", + "switch-model": "Ganti model", + "mcp": "MCP", + "skills": "Skills", + "plugins": "plugin" + } + }, + "browseProviders": "Telusuri semua penyedia...", + "connectAgent": "Atau sambungkan Agent", + "acpTitle": "Setel ACP Agent", + "acpDescription": "Claude Code, Codex, Kimi, atau Agent Anda sendiri", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "DeepSeek", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "OpenRouter" + }, + "importProviders": "Impor dari Agent lainnya" + }, + "agentPage": { + "title": "Pilih Agent untuk mulai membuat", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "Kelola DeepChat Agent" + } +} diff --git a/src/renderer/src/i18n/index.ts b/src/renderer/src/i18n/index.ts index e6c2a0572..4027bc88a 100644 --- a/src/renderer/src/i18n/index.ts +++ b/src/renderer/src/i18n/index.ts @@ -10,6 +10,14 @@ import faIR from './fa-IR' import ptBR from './pt-BR' import daDK from './da-DK' import heIL from './he-IL' +import esES from './es-ES' +import deDE from './de-DE' +import trTR from './tr-TR' +import idID from './id-ID' +import msMY from './ms-MY' +import itIT from './it-IT' +import plPL from './pl-PL' +import viVN from './vi-VN' const locales = { 'zh-CN': zhCN, @@ -24,12 +32,28 @@ const locales = { 'pt-BR': ptBR, 'da-DK': daDK, 'he-IL': heIL, + 'es-ES': esES, + 'de-DE': deDE, + 'tr-TR': trTR, + 'id-ID': idID, + 'ms-MY': msMY, + 'it-IT': itIT, + 'pl-PL': plPL, + 'vi-VN': viVN, zh: zhCN, en: enUS, fr: frFR, pt: ptBR, da: daDK, - he: heIL + he: heIL, + es: esES, + de: deDE, + tr: trTR, + id: idID, + ms: msMY, + it: itIT, + pl: plPL, + vi: viVN } export const pluralRules = { @@ -52,6 +76,26 @@ export const pluralRules = { return 2 } return 3 + }, + 'pl-PL': (choice: number, choicesLength: number) => { + if (choicesLength !== 4) { + return Math.min(Math.abs(choice), choicesLength - 1) + } + + const absoluteChoice = Math.abs(choice) + if (absoluteChoice === 0) { + return 0 + } + + const mod10 = absoluteChoice % 10 + const mod100 = absoluteChoice % 100 + if (absoluteChoice === 1) { + return 1 + } + if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) { + return 2 + } + return 3 } } diff --git a/src/renderer/src/i18n/it-IT/about.json b/src/renderer/src/i18n/it-IT/about.json new file mode 100644 index 000000000..1a48a70be --- /dev/null +++ b/src/renderer/src/i18n/it-IT/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat è un client AI multipiattaforma pensato per rendere l'AI più accessibile a tutti.", + "website": "Visita il nostro sito", + "disclaimerButton": "Disclaimer", + "feedbackButton": "Feedback", + "disclaimerTitle": "Dichiarazione sui termini d'uso", + "checkUpdateButton": "Controlla aggiornamenti", + "mockUpdateButton": "Simula aggiornamento scaricato", + "clearMockUpdateButton": "Rimuovi aggiornamento simulato", + "mockOnboardingButton": "Simula guida iniziale", + "updateChannel": "Canale di aggiornamento", + "stableChannel": "Stabile", + "betaChannel": "Beta", + "deviceInfo": { + "title": "Informazioni dispositivo", + "platform": "Piattaforma", + "arch": "Architettura", + "cpuModel": "Modello CPU", + "totalMemory": "Memoria totale", + "osVersion": "Versione sistema" + } +} diff --git a/src/renderer/src/i18n/it-IT/artifacts.json b/src/renderer/src/i18n/it-IT/artifacts.json new file mode 100644 index 000000000..f33558911 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Fai clic per aprire", + "codeSnippet": "Frammento di codice", + "function": "Funzione", + "class": "Classe", + "reactComponent": "Componente React", + "moduleImport": "Import modulo", + "variableDefinition": "Definizione variabile {name}", + "markdownDocument": "Documento Markdown", + "htmlDocument": "Documento HTML", + "svgImage": "Immagine SVG", + "flowchart": "Diagramma di flusso", + "sequenceDiagram": "Diagramma di sequenza", + "classDiagram": "Diagramma delle classi", + "stateDiagram": "Diagramma di stato", + "erDiagram": "Diagramma ER", + "ganttChart": "Diagramma di Gantt", + "pieChart": "Grafico a torta", + "mermaidDiagram": "Diagramma Mermaid", + "flowchartOf": "Diagramma di flusso di {name}", + "sequenceDiagramBetween": "Diagramma di sequenza tra {participants}", + "classDiagramOf": "Diagramma delle classi di {name}", + "stateDiagramOf": "Diagramma di stato di {name}", + "erDiagramOf": "Diagramma ER di {name}", + "pieChartOf": "Grafico a torta di {name}", + "unknownDocument": "Documento sconosciuto", + "preview": "Anteprima", + "code": "Codice", + "export": "Esporta", + "htmlPreviewTitle": "Anteprima HTML", + "svgPreviewTitle": "Anteprima SVG", + "copy": "Copia", + "copyAsImage": "Copia come immagine", + "copyImageSuccessDesc": "Immagine copiata negli appunti", + "copyImageFailedDesc": "Impossibile copiare l'immagine negli appunti", + "copySuccess": "Copia riuscita", + "copySuccessDesc": "Contenuto copiato negli appunti", + "copyFailed": "Copia non riuscita", + "copyFailedDesc": "Impossibile copiare il contenuto negli appunti", + "desktop": "Desktop", + "tablet": "Tablet", + "mobile": "Telefono", + "responsive": "Responsive", + "width": "Larghezza", + "height": "Altezza", + "sanitizingSvg": "Pulizia del contenuto SVG...", + "svgSanitizationFailed": "Il contenuto SVG non ha superato la verifica di sicurezza", + "noSvgContent": "Nessun contenuto SVG disponibile", + "mermaid": { + "renderError": "Rendering non riuscito: {message}" + } +} diff --git a/src/renderer/src/i18n/it-IT/chat.json b/src/renderer/src/i18n/it-IT/chat.json new file mode 100644 index 000000000..075ab8e72 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "Invia un messaggio a DeepChat, {'@'} per citare file, / per usare comandi", + "fileArea": "Area file", + "inputArea": "Area input", + "functionSwitch": "Interruttore funzioni", + "attach": "Aggiungi allegato", + "voiceInput": "Registrazione locale", + "voiceInputStop": "Ferma registrazione locale", + "voiceRecognitionUnsupportedTitle": "La registrazione locale non è supportata nell'ambiente corrente", + "voiceRecognitionUnsupportedDescription": "Usa questa funzione in un browser o ambiente desktop che supporti la registrazione dal microfono.", + "voiceRecognitionPermissionDeniedTitle": "Impossibile accedere al microfono", + "voiceRecognitionPermissionDeniedDescription": "Consenti a DeepChat di usare il microfono e riprova.", + "voiceRecognitionErrorTitle": "Trascrizione audio non riuscita", + "voiceRecognitionErrorDescription": "Impossibile completare la trascrizione audio. Riprova più tardi.", + "send": "Invia", + "steer": "Guida", + "queue": "Metti in coda", + "stop": "Ferma", + "fileSelect": "Seleziona file", + "pasteFiles": "Supporta copia e incolla di file", + "dropFiles": "Trascina qui i file", + "promptFilesAdded": "File prompt aggiunti", + "promptFilesAddedDesc": "{count} file aggiunti correttamente", + "promptFilesError": "Errore elaborazione file", + "promptFilesErrorDesc": "Elaborazione non riuscita per {count} file", + "historyPlaceholder": "(premi Tab per completare)", + "rateLimitQueue": "Coda {count}", + "rateLimitWait": "Attendi {seconds}s", + "rateLimitQueueTooltip": "{count} richieste in coda, intervallo di {interval} secondi", + "rateLimitReadyTooltip": "Puoi inviare la richiesta, intervallo di {interval} secondi", + "rateLimitWaitingTooltip": "Attendi ancora {seconds} secondi, intervallo di {interval} secondi", + "acpWorkdir": "Directory di lavoro", + "acpWorkdirTooltip": "Imposta directory di lavoro ACP", + "acpWorkdirSelect": "Seleziona directory di lavoro", + "acpWorkdirCurrent": "Directory di lavoro corrente: {path}", + "acpMode": "Modalità", + "acpModeTooltip": "Modalità corrente: {mode}", + "agentWorkspaceTooltip": "Imposta directory di lavoro Agent", + "agentWorkspaceSelect": "Seleziona directory di lavoro", + "agentWorkspaceCurrent": "Directory di lavoro corrente: {path}", + "workspaceUnavailableTooltip": "Directory inesistente o non accessibile: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "MCP attivi", + "empty": "Nessun servizio attivo", + "openSettings": "Apri impostazioni MCP" + }, + "tools": { + "badge": "Tools", + "title": "Tools", + "mcpSection": "MCP", + "pluginSection": "Plugin", + "builtinSection": "Strumenti integrati", + "loading": "Caricamento strumenti...", + "builtinEmpty": "Nessuno strumento integrato disponibile", + "groups": { + "agentFilesystem": "File system", + "agentCore": "Strumenti principali", + "agentImageGeneration": "Generazione immagini", + "agentSkills": "Strumenti Skills", + "deepchatSettings": "Impostazioni DeepChat", + "yobrowser": "YoBrowser" + } + }, + "fileUploadFailed": "Elaborazione allegati non riuscita", + "fileUploadFailedDesc": "Impossibile elaborare {count} file: {names}", + "fileUploadFailedMore": " e altri {count}", + "unnamedFile": "file senza nome", + "audioInputUnsupportedTitle": "Il modello corrente non supporta allegati audio", + "audioInputUnsupportedDescription": "Il modello {model} non supporta input audio. {count} allegati audio ignorati." + }, + "pendingInput": { + "steer": "Guida", + "queueCount": "In attesa {count}/{max}", + "resumeQueue": "Riprendi invio", + "toSteer": "Converti in guida", + "locked": "Bloccato", + "reorder": "Riordina", + "files": "{count} file", + "attachmentsOnly": "{count} allegati", + "empty": "Messaggio vuoto", + "limitReached": "Area di attesa piena (max {max})." + }, + "features": { + "webSearch": "Ricerca web", + "thoughtForSeconds": "Ha ragionato per {seconds} secondi", + "thoughtForSecondsLoading": "Ragionamento in corso ({seconds}° secondo)", + "artifactThinking": "Ragionamento artifact", + "modeChanged": "Modalità cambiata in: {mode}" + }, + "search": { + "results": "Trovate {0} pagine web", + "searching": "Ricerca in corso...", + "title": "Risultati ricerca", + "description": "Trovati {0} risultati pertinenti", + "optimizing": "Estrazione dell'intento di ricerca...", + "reading": "Ricerca e lettura pagine web...", + "error": "Ricerca non riuscita" + }, + "messages": { + "thinking": "Ragionamento in corso...", + "rateLimitWaiting": "Limite di frequenza raggiunto, attesa in coda...", + "rateLimitCompactLoading": "Limitazione attiva ({seconds} secondi)", + "rateLimitTitle": "Limite di frequenza richieste", + "rateLimitQueue": "Posizione in coda", + "rateLimitEstimated": "Attesa stimata", + "rateLimitQuickSettings": "Regola limite", + "rateLimitSwitchProvider": "Cambia provider", + "rateLimitImmediately": "Subito", + "rateLimitSeconds": "secondi", + "rateLimitMinutes": "minuti" + }, + "compaction": { + "compacting": "Compressione contesto...", + "compacted": "Contesto compresso", + "commandDescription": "Comprimi il contesto della sessione", + "noopTitle": "Nessun contesto da comprimere", + "noopDescription": "Non c'è ancora nuova cronologia della conversazione da comprimere.", + "failedTitle": "Compressione non riuscita" + }, + "rateLimit": { + "queueTooltip": "{count} richieste in coda, intervallo di {interval} secondi", + "readyTooltip": "Puoi inviare la richiesta, intervallo di {interval} secondi", + "waitingTooltip": "Attendi ancora {seconds} secondi, intervallo di {interval} secondi" + }, + "notify": { + "generationComplete": "Generazione completata", + "generationError": "Generazione non riuscita" + }, + "toolCall": { + "title": "Chiamata strumento", + "calling": "Chiamata strumento in corso", + "response": "Risposta strumento", + "end": "Chiamata strumento completata", + "error": "Errore chiamata strumento", + "clickToView": "Fai clic per vedere i dettagli", + "functionName": "Nome funzione", + "params": "Parametri", + "responseData": "Dati risposta", + "subagents": { + "summary": "{mode} · {count} subagent", + "unnamedTask": "Attività senza nome", + "mode": { + "parallel": "Parallelo", + "chain": "Sequenziale" + }, + "status": { + "queued": "In coda", + "running": "In esecuzione", + "completed": "Completato", + "error": "Errore", + "cancelled": "Annullato", + "waiting_permission": "In attesa di autorizzazione", + "waiting_question": "In attesa di input" + } + } + }, + "mode": { + "current": "Modalità corrente: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Torna alla conversazione padre", + "share": "Condividi", + "more": "Altro" + }, + "subagents": { + "label": "subagent" + }, + "advancedSettings": { + "button": "Configurazione avanzata", + "title": "Configurazione avanzata", + "closeHint": "Premi Esc per chiudere", + "systemPrompt": "Prompt di sistema", + "systemPromptPlaceholder": "Seleziona preset", + "temperature": "Temperatura", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 usa {enabled} quando il ragionamento è attivo e {disabled} quando è disattivo.", + "contextLength": "Lunghezza contesto", + "maxTokens": "Output massimo", + "thinkingBudget": "Budget ragionamento", + "verbosity": "Dettaglio risposta", + "forceInterleavedThinkingCompat": "Interleaved Thinking", + "forceInterleavedThinkingCompatDescription": "Controlla se la sessione corrente gestisce i messaggi di reasoning e tool-call con Interleaved Thinking.", + "verbosityPlaceholder": "Seleziona livello di dettaglio", + "currentCustomPrompt": "Personalizzato corrente", + "useDefault": "Usa predefinito", + "decreaseValue": "Diminuisci {label}", + "increaseValue": "Aumenta {label}", + "toggleValue": "Cambia {label}", + "validation": { + "finiteNumber": "Deve essere un numero finito", + "nonNegativeInteger": "Deve essere un intero non negativo", + "contextLengthAtLeastMaxTokens": "Deve essere maggiore o uguale all'output massimo", + "maxTokensWithinContextLength": "Deve essere minore o uguale alla lunghezza contesto" + } + }, + "modelPicker": { + "empty": "Nessun modello trovato", + "audioInputSupported": "Input audio supportato" + }, + "audio": { + "play": "Riproduci", + "pause": "Pausa" + }, + "call": { + "title": "Chiamata Voice.ai", + "description": "Fai clic per connetterti all'Agent vocale Voice.ai; parla dopo che la chiamata è connessa.", + "start": "Avvia chiamata vocale", + "stop": "Termina chiamata", + "end": "Riaggancia" + }, + "skills": { + "indicator": { + "active": "{count} Skills fissate", + "none": "Nessuna Skill fissata" + }, + "panel": { + "title": "Skills fissate", + "manage": "Gestisci", + "empty": "Nessuna Skill installata" + } + }, + "workspace": { + "title": "Workspace", + "collapse": "Comprimi", + "sections": { + "files": "File", + "git": "Git", + "artifacts": "Artifacts", + "subagents": "subagent" + }, + "plan": { + "section": "Piano", + "empty": "Nessuna attività", + "itemAriaLabel": "{status}: {step}", + "status": { + "pending": "Da fare", + "in_progress": "In corso", + "completed": "Completato", + "failed": "Non riuscito", + "skipped": "Saltato" + } + }, + "files": { + "section": "File", + "empty": "Nessun file", + "loading": "Caricamento file...", + "noWorkspace": { + "title": "Nessun workspace", + "description": "Seleziona o trascina una cartella per impostare il workspace", + "button": "Seleziona cartella" + }, + "contextMenu": { + "openFile": "Apri file", + "revealInFolder": "Mostra nel file manager", + "insertPath": "Inserisci nell'input" + } + }, + "git": { + "empty": "Nessun diff da mostrare", + "clean": "Workspace pulito", + "staged": "In staging", + "unstaged": "Non in staging" + }, + "subagents": { + "empty": "Nessuna sessione subagent", + "self": "Agent corrente", + "status": { + "working": "In esecuzione", + "error": "Errore", + "idle": "Inattivo" + } + }, + "browser": { + "section": "Browser", + "empty": "Nessuna scheda" + }, + "terminal": { + "section": "Terminale", + "empty": "Nessun output", + "contextMenu": { + "terminate": "Termina comando", + "delete": "Elimina record", + "expand": "Espandi vista", + "collapse": "Comprimi" + }, + "output": { + "truncated": "[troncato]" + }, + "noOutput": "Nessun output", + "status": { + "running": "In esecuzione", + "completed": "Riuscito", + "failed": "Non riuscito", + "timed_out": "Timeout", + "aborted": "Interrotto" + } + } + }, + "newThread": { + "title": "Costruisci ed esplora" + }, + "floatingWidget": { + "title": "Panoramica attività", + "collapse": "Comprimi elenco sessioni flottante", + "empty": "Nessuna sessione Agent al momento", + "executing": "In corso", + "sessionCount": "{count} sessioni", + "untitled": "Nuova chat", + "status": { + "inProgress": "In corso", + "done": "Completato", + "error": "Errore" + } + }, + "permissionMode": { + "default": "Permessi predefiniti", + "fullAccess": "Accesso completo" + }, + "sidebar": { + "allAgents": "Tutti gli Agents", + "expandSidebar": "Espandi barra laterale", + "collapseSidebar": "Comprimi barra laterale", + "remoteControlDisabled": "Non attivo", + "remoteControlStatus": { + "disabled": "Controllo remoto disattivato", + "stopped": "Controllo remoto fermo", + "starting": "Avvio controllo remoto", + "running": "Controllo remoto in esecuzione", + "backoff": "Nuovo tentativo controllo remoto", + "error": "Errore controllo remoto" + }, + "groupByDate": "Raggruppa per data", + "groupByProject": "Raggruppa per progetto", + "pinned": "Conversazioni fissate", + "emptyTitle": "Ancora nessuna conversazione", + "emptyDescription": "Avvia una nuova conversazione", + "searchPlaceholder": "Cerca titolo conversazione", + "searchAriaLabel": "Cerca titolo conversazione", + "searchEmptyTitle": "Nessuna conversazione corrispondente", + "searchEmptyDescription": "Prova con un'altra parola chiave nel titolo" + }, + "spotlight": { + "placeholder": "Cerca conversazioni, Agent, impostazioni e azioni…", + "searching": "Ricerca…", + "emptyTitle": "Nessun risultato", + "emptyDescription": "Prova un'altra parola chiave o apri una sessione recente.", + "hints": "↑↓ seleziona · Enter apre · Esc chiude · Home/End salta", + "kind": { + "session": "Sessione", + "message": "Messaggio", + "agent": "Agent", + "setting": "Impostazione", + "action": "Azione" + } + }, + "inlineSearch": { + "placeholder": "Cerca nella conversazione corrente", + "ariaLabel": "Cerca nella conversazione corrente", + "previous": "Corrispondenza precedente", + "next": "Corrispondenza successiva", + "close": "Chiudi ricerca" + }, + "onboarding": { + "agentSwitch": { + "title": "Passa a DeepChat Agent", + "description": "Prima di chattare, torna da ACP Agent al flusso conversazione DeepChat.", + "caption": "Fai clic sul pulsante Agent evidenziato nella barra laterale per continuare." + }, + "switchModel": { + "description": "Scegli il modello da usare per la tua prima conversazione DeepChat.", + "caption": "Usa il selettore modello evidenziato e scegli un modello disponibile." + }, + "firstChat": { + "description": "Ora è tutto pronto. Invia qui il primo messaggio per completare la guida.", + "caption": "L'evidenziazione resterà sul campo di input finché non invii il primo messaggio." + } + } +} diff --git a/src/renderer/src/i18n/it-IT/common.json b/src/renderer/src/i18n/it-IT/common.json new file mode 100644 index 000000000..6859f9694 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/common.json @@ -0,0 +1,128 @@ +{ + "loading": "Caricamento...", + "copy": "Copia", + "copied": "Copiato", + "paste": "Incolla", + "copySuccess": "Copia riuscita", + "copySuccessDesc": "Contenuto copiato negli appunti", + "copyImageSuccess": "Copia riuscita", + "copyImageSuccessDesc": "Immagine copiata negli appunti", + "copyFailed": "Copia non riuscita", + "copyFailedDesc": "Impossibile copiare il contenuto negli appunti", + "copyCode": "Copia codice", + "export": "Esporta", + "newChat": "Nuova chat", + "newTopic": "Nuovo argomento", + "cancel": "Annulla", + "confirm": "Conferma", + "next": "Avanti", + "back": "Indietro", + "enabled": "Attivato", + "disabled": "Disattivato", + "disclaimer": "Disclaimer", + "close": "Chiudi", + "open": "Apri", + "image": "Immagine", + "noContent": "Nessun contenuto", + "preview": "Anteprima", + "source": "Sorgente", + "more": "Altro", + "decrease": "Riduci", + "increase": "Aumenta", + "fontSmaller": "Riduci font", + "fontReset": "Ripristina font", + "fontLarger": "Aumenta font", + "zoomIn": "Aumenta zoom", + "zoomOut": "Riduci zoom", + "resetZoom": "Ripristina zoom", + "error": { + "requestFailed": "Richiesta non riuscita...", + "createChatFailed": "Creazione chat non riuscita", + "selectChatFailed": "Selezione chat non riuscita", + "renameChatFailed": "Rinomina chat non riuscita", + "deleteChatFailed": "Eliminazione chat non riuscita", + "cleanMessagesFailed": "Cancellazione messaggi della chat non riuscita", + "userCanceledGeneration": "Generazione annullata dall'utente", + "sessionInterrupted": "Sessione interrotta in modo imprevisto, generazione incompleta", + "noModelResponse": "Il modello non ha restituito contenuti, potrebbe essere scaduto il timeout", + "invalidJson": "Formato JSON non valido", + "maximumToolCallsReached": "Raggiunto il numero massimo di chiamate agli strumenti", + "causeOfError": "Possibili cause dell'errore:", + "error400": "Richiesta errata, possibile problema di parametri o compatibilità", + "error401": "Autenticazione non riuscita, API Key o dominio errati", + "error403": "Accesso al modello vietato, possibile credito insufficiente o permessi mancanti", + "error404": "URL richiesto inesistente, dominio o nome modello errato", + "error429": "Troppe richieste, limite di frequenza imposto dal servizio", + "error500": "Errore del server, il servizio potrebbe essere instabile. Riprova più tardi", + "error502": "Errore gateway, il servizio potrebbe essere instabile. Riprova più tardi", + "error503": "Servizio non disponibile, il servizio potrebbe essere instabile. Riprova più tardi", + "error504": "Timeout della richiesta, il servizio potrebbe essere instabile o la rete avere problemi. Controlla proxy e rete, poi riprova", + "operationFailed": "Operazione non riuscita", + "invalidQuestionRequest": "Richiesta domanda non valida" + }, + "resetDataConfirmTitle": "Vuoi davvero ripristinare tutti i dati?", + "resetDataConfirmDescription": "Tutti i dati verranno riportati alle impostazioni predefinite. Questa operazione non può essere annullata.", + "title": "Impostazioni generali", + "resetData": "Ripristina dati", + "language": "Lingua", + "languageSelect": "Seleziona lingua", + "searchEngine": "Motore di ricerca", + "searchEngineSelect": "Seleziona motore di ricerca", + "searchPreview": "Anteprima ricerca", + "searchAssistantModel": "Modello assistente", + "selectModel": "Seleziona modello", + "proxyMode": "Modalità proxy", + "proxyModeSelect": "Seleziona modalità proxy", + "proxyModeSystem": "Proxy di sistema", + "proxyModeNone": "Nessun proxy", + "proxyModeCustom": "Proxy personalizzato", + "customProxyUrl": "URL proxy personalizzato", + "customProxyUrlPlaceholder": "Esempio: http://127.0.0.1:7890", + "invalidProxyUrl": "URL proxy non valido, inserisci un URL http/https valido", + "languageSystem": "Segui il sistema", + "watermarkTip": "Contenuto generato da AI, verifica con attenzione", + "collapse": "Comprimi", + "expand": "Espandi", + "add": "Aggiungi", + "reset": "Ripristina", + "format": "Formatta", + "edit": "Modifica", + "delete": "Elimina", + "save": "Salva", + "clear": "Cancella", + "saved": "Salvato", + "unknownError": "Errore sconosciuto", + "testing": "Test in corso", + "saving": "Salvataggio", + "scrollLeft": "Scorri a sinistra", + "scrollRight": "Scorri a destra", + "history": "Cronologia", + "minimize": "Riduci a icona", + "maximize": "Ingrandisci", + "restore": "Ripristina", + "browser": { + "back": "Indietro", + "forward": "Avanti", + "reload": "Ricarica", + "addressLabel": "Barra degli indirizzi", + "addressPlaceholder": "Inserisci un URL", + "enterUrlToStart": "Inserisci un URL per iniziare", + "enterUrlDescription": "Digita un URL nella barra degli indirizzi in alto per visitare un sito", + "name": "Yo Browser" + }, + "size": { + "bytes": "{count} byte" + }, + "time": { + "today": "Oggi", + "yesterday": "Ieri", + "lastWeek": "Ultima settimana", + "older": "Più vecchi" + }, + "project": { + "select": "Seleziona progetto", + "none": "Nessun progetto associato", + "recent": "Progetti recenti", + "openFolder": "Apri cartella..." + } +} diff --git a/src/renderer/src/i18n/it-IT/components.json b/src/renderer/src/i18n/it-IT/components.json new file mode 100644 index 000000000..3c8b6d889 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Cerca emoji", + "smileys": "Faccine ed emozioni", + "people": "Persone e corpo", + "animals": "Animali e natura", + "food": "Cibo e bevande", + "travel": "Viaggi e luoghi", + "activities": "Attività", + "objects": "Oggetti", + "symbols": "Simboli", + "flags": "Bandiere" + }, + "messageBlockAction": { + "continue": "Continua", + "continued": "Continuato" + }, + "messageBlockPermissionRequest": { + "title": "Autorizzazione richiesta", + "allow": "Consenti", + "allowOnce": "Consenti una volta", + "allowForSession": "Consenti per la sessione", + "allowOnceTooltip": "Esegue questo comando una sola volta senza salvare la scelta.", + "allowForSessionTooltip": "Ricorda questo comando nella sessione corrente.", + "deny": "Rifiuta", + "rememberChoice": "Ricorda questa scelta", + "granted": "Autorizzazione concessa", + "denied": "Autorizzazione negata", + "riskLabel": "Rischio", + "type": { + "read": "Accesso in lettura", + "write": "Accesso in scrittura", + "all": "Accesso completo", + "command": "Esegui comando" + }, + "description": { + "read": "Consentire a '{toolName}' di '{serverName}' di eseguire operazioni di lettura?", + "write": "Consentire a '{toolName}' di '{serverName}' di eseguire operazioni di scrittura?", + "all": "Consentire a '{toolName}' di '{serverName}' di eseguire operazioni di lettura e scrittura?", + "command": "Esegui comando: {command}", + "commandWithRisk": "Esegui comando: {command}\n\nLivello di rischio: {riskLevel}\n\nSuggerimento: {suggestion}" + }, + "riskLevel": { + "low": "Basso", + "medium": "Medio", + "high": "Alto", + "critical": "Critico" + }, + "suggestion": { + "low": "Questo comando è di sola lettura e ha impatto ridotto.", + "medium": "Questo comando può installare dipendenze o modificare lo stato. Verifica prima di eseguirlo.", + "high": "Questo comando modifica file o stato del sistema. Procedi con cautela.", + "critical": "Questo comando può essere distruttivo o accedere a reti esterne. Verifica l'intento." + } + }, + "promptParamsDialog": { + "title": "Impostazioni parametri {name}", + "description": "Compila i parametri seguenti. I campi contrassegnati con * sono obbligatori.", + "required": "Questo parametro è obbligatorio" + }, + "messageBlockQuestionRequest": { + "title": "Domanda", + "send": "Invia", + "reject": "Rifiuta", + "selected": "Selezionato", + "rejected": "Rifiutato", + "customPlaceholder": "Inserisci la tua risposta...", + "answerLabel": "Risposta" + } +} diff --git a/src/renderer/src/i18n/it-IT/contextMenu.json b/src/renderer/src/i18n/it-IT/contextMenu.json new file mode 100644 index 000000000..70d3025b7 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "Traduci", + "original": "Originale", + "translated": "Traduzione", + "error": "Traduzione non riuscita" + }, + "askAI": { + "title": "Chiedi all'AI", + "question": "Domanda", + "answer": "Risposta", + "error": "Risposta AI non riuscita" + }, + "copy": "Copia", + "paste": "Incolla", + "cut": "Taglia" +} diff --git a/src/renderer/src/i18n/it-IT/dialog.json b/src/renderer/src/i18n/it-IT/dialog.json new file mode 100644 index 000000000..18e9086c4 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "Annulla", + "confirm": "Conferma", + "close": "Chiudi", + "ok": "OK", + "delete": { + "title": "Vuoi davvero eliminare questa conversazione?", + "description": "Questa operazione non può essere annullata. Procedi con cautela.", + "confirm": "Elimina" + }, + "rename": { + "title": "Rinomina conversazione", + "description": "Inserisci il nuovo nome della conversazione." + }, + "cleanMessages": { + "title": "Cancella messaggi della conversazione", + "description": "La cancellazione rimuoverà tutti i messaggi e i file della conversazione. Vuoi continuare?", + "confirm": "Cancella" + }, + "fork": { + "title": "Crea ramo della conversazione", + "description": "I messaggi dal primo a quello selezionato verranno copiati in una nuova conversazione, dove potrai continuare il dialogo.", + "confirm": "Crea ramo", + "tag": "Ramo" + }, + "error": { + "title": "Errore" + }, + "mutualExclusive": { + "title": { + "reasoning": "Conferma attivazione reasoning", + "functionCall": "Conferma attivazione chiamata funzione" + }, + "message": { + "reasoning": "L'attivazione del reasoning disattiverà automaticamente la chiamata funzione. È una limitazione dei modelli DeepSeek-V3.1: le due funzioni non possono essere usate insieme. Continuare?", + "functionCall": "L'attivazione della chiamata funzione disattiverà automaticamente il reasoning. È una limitazione dei modelli DeepSeek-V3.1: le due funzioni non possono essere usate insieme. Continuare?" + }, + "warningText": { + "reasoning": "Nota: l'attivazione del reasoning disattiverà automaticamente la chiamata funzione, come richiesto dai modelli DeepSeek-V3.1.", + "functionCall": "Nota: l'attivazione della chiamata funzione disattiverà automaticamente il reasoning, come richiesto dai modelli DeepSeek-V3.1." + }, + "confirmEnable": "Conferma attivazione" + } +} diff --git a/src/renderer/src/i18n/it-IT/image.json b/src/renderer/src/i18n/it-IT/image.json new file mode 100644 index 000000000..500bcc221 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "Caricamento immagine non riuscito", + "loading": "Caricamento immagine...", + "preview": "Anteprima immagine", + "save": "Salva immagine", + "saveAs": "Salva immagine con nome...", + "saveSuccess": "Immagine salvata", + "saveFailed": "Salvataggio immagine non riuscito" +} diff --git a/src/renderer/src/i18n/it-IT/index.ts b/src/renderer/src/i18n/it-IT/index.ts new file mode 100644 index 000000000..849c2358a --- /dev/null +++ b/src/renderer/src/i18n/it-IT/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Chiavi top-level separate +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Qwen Model', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + "DeepChat è solo uno strumento di supporto: quando l'utente avvia attivamente una ricerca, organizza e riassume i dati pubblici restituiti dai motori di ricerca, aiutando l'utente a consultare e comprendere più comodamente i risultati.\n\n1. **Uso di dati pubblici** \nQuesto software tratta solo dati pubblicamente disponibili su siti target o motori di ricerca e accessibili senza login. Prima dell'uso, consulta e rispetta i termini di servizio del sito target o del motore di ricerca, assicurandoti che l'uso sia legale e conforme. \n\n2. **Accuratezza delle informazioni e responsabilità** \nI contenuti organizzati e generati da questo software sono solo a scopo di riferimento e non costituiscono alcun tipo di consulenza legale, commerciale o di altro genere. Gli sviluppatori non garantiscono accuratezza, completezza, tempestività o legalità dei risultati di ricerca; qualsiasi conseguenza derivante dall'uso del software resta a carico dell'utente. \n\n3. **Clausola di esclusione di responsabilità** \nQuesto software è fornito \"così com'è\"; gli sviluppatori non assumono garanzie o responsabilità espresse o implicite su prestazioni, stabilità o idoneità. Se durante l'uso del software sorgono controversie, perdite o responsabilità legali causate dalla violazione di leggi, regolamenti o regole del sito target, gli sviluppatori non assumono alcuna responsabilità. \n\n4. **Autodisciplina dell'utente** \nPrima di usare questo software, l'utente deve comprendere e confermare che il proprio uso non violi diritti di proprietà intellettuale, segreti commerciali o altri diritti legittimi di terzi. Qualsiasi controversia legale o conseguenza causata da un uso improprio del software da parte dell'utente resta esclusivamente a carico dell'utente. \n\nL'uso di questo software indica che l'utente ha letto, compreso e accettato tutti i termini di questo disclaimer. In caso di dubbi, consulta un consulente legale professionista." +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/it-IT/mcp.json b/src/renderer/src/i18n/it-IT/mcp.json new file mode 100644 index 000000000..673e6953c --- /dev/null +++ b/src/renderer/src/i18n/it-IT/mcp.json @@ -0,0 +1,307 @@ +{ + "title": "Impostazioni MCP", + "description": "Gestisci e configura server e strumenti MCP (Model Context Protocol)", + "enabledTitle": "Attiva MCP", + "enabledDescription": "Dopo l'attivazione, i servizi abilitati si avvieranno automaticamente", + "enableToAccess": "Attiva prima MCP per accedere alle opzioni di configurazione", + "errors": { + "loadConfigFailed": "Caricamento configurazione MCP non riuscito", + "setEnabledFailed": "Impostazione stato MCP non riuscita", + "getServerStatusFailed": "Recupero stato server {serverName} non riuscito", + "addServerFailed": "Aggiunta server non riuscita", + "updateServerFailed": "Aggiornamento server non riuscito", + "removeServerFailed": "Rimozione server non riuscita", + "maxDefaultServersReached": "Puoi impostare al massimo 30 server predefiniti", + "toggleDefaultServerFailed": "Cambio stato server predefinito non riuscito", + "resetToDefaultFailed": "Ripristino server predefiniti non riuscito", + "toggleServerFailed": "Cambio stato server {serverName} non riuscito", + "loadToolsFailed": "Caricamento strumenti non riuscito", + "loadPromptsFailed": "Caricamento template prompt non riuscito", + "loadResourcesFailed": "Caricamento risorse non riuscito", + "callToolFailed": "Chiamata allo strumento {toolName} non riuscita", + "toolCallError": "Errore chiamata strumento: {error}", + "mcpDisabled": "La funzione MCP è disattivata", + "getPromptFailed": "Recupero template prompt non riuscito", + "readResourceFailed": "Lettura risorsa non riuscita", + "promptNotFound": "Template prompt '{name}' non trovato", + "emptyPromptContent": "Il Prompt '{name}' è vuoto", + "missingParameters": "Parametri mancanti: {params}", + "invalidParameters": "Parametri non validi: {params}" + }, + "tabs": { + "servers": "Server", + "tools": "Strumenti" + }, + "serverList": "Elenco server", + "addServer": "Aggiungi server", + "running": "In esecuzione", + "stopped": "Arrestato", + "stopServer": "Arresta server", + "startServer": "Avvia server", + "noServersFound": "Nessun server trovato", + "addServerDialog": { + "title": "Aggiungi server", + "description": "Configura un nuovo server MCP" + }, + "editServerDialog": { + "title": "Modifica server", + "description": "Modifica configurazione server MCP" + }, + "serverForm": { + "name": "Nome server", + "namePlaceholder": "Inserisci nome server", + "nameRequired": "Il nome server non può essere vuoto", + "type": "Tipo server", + "typePlaceholder": "Seleziona tipo server", + "typeStdio": "Input/output standard", + "typeSse": "Server-Sent Events", + "typeInMemory": "In memoria", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Inserisci Base URL del server (es.: http://localhost:3000)", + "command": "Comando", + "commandPlaceholder": "Inserisci comando", + "commandRequired": "Il comando non può essere vuoto", + "args": "Argomenti", + "argsPlaceholder": "Un argomento per riga", + "addArg": "Aggiungi argomento", + "argPlaceholder": "Inserisci valore argomento", + "argsRequired": "Gli argomenti non possono essere vuoti", + "env": "Variabili d'ambiente", + "envPlaceholder": "Inserisci variabili d'ambiente in formato JSON", + "envInvalid": "Le variabili d'ambiente devono essere in formato JSON valido", + "description": "Descrizione", + "descriptionPlaceholder": "Inserisci descrizione server", + "descriptions": "Descrizione", + "descriptionsPlaceholder": "Inserisci descrizione server", + "icon": "Icona", + "iconPlaceholder": "Inserisci icona", + "icons": "Icone", + "iconsPlaceholder": "Inserisci icone", + "autoApprove": "Autorizzazione automatica", + "autoApproveAll": "Tutto", + "autoApproveRead": "Lettura", + "autoApproveWrite": "Scrittura", + "autoApproveHelp": "Seleziona i tipi di operazione da autorizzare automaticamente senza conferma dell'utente", + "submit": "Invia", + "add": "Aggiungi", + "update": "Aggiorna", + "cancel": "Annulla", + "jsonConfigIntro": "Puoi incollare direttamente una configurazione JSON o scegliere la configurazione manuale del server.", + "jsonConfig": "Configurazione JSON", + "jsonConfigPlaceholder": "Incolla la configurazione del server MCP in formato JSON", + "jsonConfigExample": "Esempio configurazione JSON", + "parseSuccess": "Configurazione analizzata correttamente", + "configImported": "Configurazione importata correttamente", + "parseError": "Errore di analisi", + "skipToManual": "Passa alla configurazione manuale", + "parseAndContinue": "Analizza e continua", + "folders": "Elenco cartelle", + "addFolder": "Aggiungi cartella", + "selectFolder": "Seleziona cartella", + "selectFolderError": "Selezione cartella non riuscita", + "noFoldersSelected": "Nessuna cartella selezionata" + }, + "deleteServer": "Elimina server", + "editServer": "Modifica server", + "setDefault": "Imposta come predefinito", + "removeDefault": "Rimuovi predefinito", + "isDefault": "Server predefinito", + "default": "Predefinito", + "setAsDefault": "Imposta come server predefinito", + "removeServer": "Rimuovi server", + "confirmRemoveServer": "Vuoi davvero eliminare il server {name}? Questa operazione non può essere annullata.", + "removeServerDialog": { + "title": "Elimina server" + }, + "confirmDelete": { + "title": "Conferma eliminazione", + "description": "Vuoi davvero eliminare il server {name}? Questa operazione non può essere annullata.", + "confirm": "Elimina", + "cancel": "Annulla" + }, + "resetToDefault": "Ripristina servizi predefiniti", + "resetConfirmTitle": "Ripristina servizi predefiniti", + "resetConfirmDescription": "Questa operazione ripristinerà tutti i server predefiniti mantenendo i server personalizzati. Qualsiasi modifica ai server predefiniti andrà persa.", + "resetConfirm": "Ripristina", + "tools": { + "searchPlaceholder": "Cerca strumenti...", + "noToolsAvailable": "Nessuno strumento disponibile", + "selectToolToDebug": "Seleziona uno strumento da debuggare", + "dialogDescription": "Debug e test degli strumenti forniti dai server MCP", + "toolsCount": "strumenti", + "availableTools": "Strumenti disponibili", + "toolList": "Elenco strumenti", + "functionDescription": "Descrizione funzione", + "invalidJson": "Formato JSON non valido", + "inputHint": "Inserisci i parametri in formato JSON", + "required": "Obbligatorio", + "noDescription": "Nessuna descrizione", + "input": "Parametri di input", + "path": "Percorso", + "pathPlaceholder": "Inserisci percorso file", + "searchPattern": "Pattern di ricerca", + "searchPatternPlaceholder": "Inserisci espressione regolare", + "filePattern": "Pattern file", + "filePatternPlaceholder": "Inserisci pattern file, es.: *.md", + "executeButton": "Esegui strumento", + "resultTitle": "Risultato esecuzione", + "runningTool": "Esecuzione strumento", + "loading": "Caricamento...", + "error": "Caricamento non riuscito", + "available": "{count} strumenti disponibili", + "none": "Nessuno strumento disponibile", + "title": "Strumenti MCP", + "description": "Strumenti forniti dal server MCP", + "loadError": "Caricamento strumenti non riuscito", + "parameters": "Parametri", + "refresh": "Aggiorna", + "disabled": "MCP disattivato", + "enableToUse": "Attiva prima MCP per usare gli strumenti", + "enabled": "Attiva MCP", + "enabledDescription": "Attiva la funzione MCP per usare le chiamate agli strumenti", + "acpManagedHint": "Gli strumenti MCP sono gestiti da \"ACP Agent\"", + "acpServersSelected": "{count} MCP selezionati", + "acpServersNone": "Questo Agent non ha MCP configurati", + "jsonInputPlaceholder": "Inserisci parametri in formato JSON", + "type": "Tipo", + "annotations": "Annotazioni", + "empty": "Vuoto", + "invalidJsonFormat": "Il formato JSON non è corretto", + "allowedValues": "Valori consentiti", + "arrayItemValues": "Valori elementi array" + }, + "inmemory": { + "bochaSearch": { + "name": "Bocha Search", + "desc": "Bocha Search API https://open.bochaai.com/" + }, + "buildInFileSystem": { + "name": "File system", + "desc": "Permette a DeepChat di operare sui file locali" + }, + "Artifacts": { + "name": "Artifacts", + "desc": "Permette a DeepChat di produrre contenuti Artifacts più vari" + }, + "braveSearch": { + "name": "Brave Search", + "desc": "Brave Search API https://brave.com/search/api/" + }, + "difyKnowledge": { + "name": "Ricerca base di conoscenza Dify", + "desc": "Servizio di ricerca base di conoscenza Dify, può recuperare contenuti dalla base di conoscenza Dify" + }, + "ragflowKnowledge": { + "name": "Ricerca base di conoscenza RAGFlow", + "desc": "Servizio di ricerca base di conoscenza RAGFlow, può cercare nei contenuti della base di conoscenza RAGFlow" + }, + "fastGptKnowledge": { + "name": "Ricerca base di conoscenza FastGPT", + "desc": "Servizio di ricerca base di conoscenza FastGPT, può cercare nei contenuti della base di conoscenza FastGPT" + }, + "builtinKnowledge": { + "name": "Ricerca base di conoscenza integrata", + "desc": "Servizio di ricerca base di conoscenza integrato in DeepChat, può cercare nei contenuti della base di conoscenza integrata di DeepChat" + }, + "deepchat-inmemory/custom-prompts-server": { + "name": "Prompt personalizzati", + "desc": "Servizio prompt personalizzati integrato in DeepChat" + }, + "deepchat-inmemory/deep-research-server": { + "name": "DeepResearch", + "desc": "Servizio di ricerca approfondita integrato in DeepChat basato su Bocha Search (richiede un modello con contesto lungo; i modelli con contesto insufficiente potrebbero fallire)" + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Prompt template automatico", + "desc": "Seleziona automaticamente il prompt personalizzato più adatto in base all'input utente e compila in modo intelligente il template del prompt" + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Ricerca cronologia conversazioni", + "desc": "Servizio di ricerca cronologia conversazioni integrato in DeepChat, può cercare conversazioni e messaggi precedenti" + }, + "deepchat/apple-server": { + "name": "Assistente di sistema macOS", + "desc": "Permette al modello di usare funzioni di sistema macOS come Calendario, Contatti, Mail, Mappe, Note e Promemoria" + } + }, + "prompts": { + "noPromptsAvailable": "Nessun Prompt disponibile", + "noDescription": "Nessuna descrizione", + "selectPrompt": "Qui viene mostrato il Prompt selezionato", + "parameters": "Parametri Prompt", + "input": "Parametri di input", + "runningPrompt": "Recupero Prompt", + "executeButton": "Fai clic per recuperare", + "resultTitle": "Dettagli Prompt", + "resetToDefault": "Ripristina parametri predefiniti", + "invalidJson": "Formato JSON non valido", + "parametersHint": "Inserisci parametri in formato JSON, con supporto alla formattazione automatica", + "dialogDescription": "Debug e test dei template prompt forniti dai server MCP" + }, + "resources": { + "noResourcesAvailable": "Nessuna Resource disponibile", + "selectResource": "Qui viene mostrato il contenuto della Resource", + "loading": "Caricamento", + "loadContent": "Ottieni contenuto Resource", + "pleaseSelect": "Fai clic per visualizzare i dettagli delle Resources", + "dialogDescription": "Sfoglia e visualizza le risorse fornite dai server MCP" + }, + "market": { + "browseBuiltin": "Sfoglia mercato MCP integrato", + "builtinTitle": "Mercato MCP", + "poweredBy": "Powered by MCPRouter", + "keyGuide": "Ottieni chiave", + "keyHelpText": "Vai prima su", + "keyHelpEnd": "per richiedere una API Key, poi inseriscila nel campo sopra", + "apiKeyPlaceholder": "Inserisci MCPRouter API Key", + "apiKeyRequiredTitle": "API Key richiesta", + "apiKeyRequiredDesc": "Inserisci prima la MCPRouter API Key per installare", + "install": "Installa", + "installed": "Installato", + "installSuccess": "Installazione riuscita", + "installFailed": "Installazione non riuscita", + "noMore": "Non c'è altro", + "empty": "Nessun servizio", + "loadMore": "Carica altro", + "pullDownToLoad": "Continua a scorrere verso il basso per caricare altro" + }, + "sampling": { + "approve": "Approva", + "confirming": "Conferma...", + "confirm": "Invia risposta modello", + "sendResponse": "Invia risposta", + "selectModel": "Seleziona modello", + "respondWith": "Rispondi con modello:", + "maxTokensInfo": "Lunghezza massima risposta: {maxTokens} tokens", + "contentType": { + "audio": "Audio", + "image": "Immagine", + "text": "Testo" + }, + "description": "Controlla il contesto condiviso dal server MCP e scegli se generare una risposta.", + "imageAlt": "Immagine {索引}", + "messagesTitle": "Contesto conversazione", + "noModels": "Nessun modello idoneo attivo.\nAttiva un modello adatto in \"Impostazioni\" per continuare.", + "noVisionModels": "Nessun modello con capacità visive attivo.\nAttiva un modello vision in \"Impostazioni\" per continuare.", + "preference": { + "cost": "Priorità al costo", + "hints": "Suggerimenti modello", + "intelligence": "Priorità all'intelligenza", + "speed": "Priorità alla velocità" + }, + "preferencesTitle": "Preferenze modello", + "reject": "Rifiuta", + "selectedModelLabel": "Risposta con {model} ({provider})", + "systemPrompt": "Prompt di sistema", + "title": "Richiesta di sampling da {server}", + "unknownHint": "Suggerimento senza nome", + "unknownMime": "Tipo MIME sconosciuto", + "unknownServer": "Server sconosciuto", + "unsupportedMessage": "Tipo di contenuto non supportato.", + "visionWarning": "Il modello selezionato non supporta input visivo.\nSeleziona un modello con capacità visive prima di continuare.", + "autoApproving": "Richiesta di sampling MCP da {server}", + "autoApproveIn": "Approvazione automatica con {model} tra {seconds} secondi", + "reviewRequest": "Vedi dettagli", + "sessionActive": "Sessione attiva - la richiesta verrà approvata automaticamente" + } +} diff --git a/src/renderer/src/i18n/it-IT/model.json b/src/renderer/src/i18n/it-IT/model.json new file mode 100644 index 000000000..674ba8c1f --- /dev/null +++ b/src/renderer/src/i18n/it-IT/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Cerca modelli..." + }, + "error": { + "loadFailed": "Caricamento modelli non riuscito" + }, + "type": { + "custom": "Modello personalizzato", + "official": "Modello ufficiale" + }, + "add": { + "namePlaceholder": "Nome modello", + "idPlaceholder": "ID modello", + "contextLengthPlaceholder": "Lunghezza contesto", + "maxTokensPlaceholder": "Token massimi" + }, + "actions": { + "add": "Aggiungi modello", + "enableAll": "Attiva tutti", + "disableAll": "Disattiva tutti" + }, + "sort": { + "status": "Per stato", + "name": "Per nome" + }, + "filter": { + "label": "Filtro", + "clearAll": "Cancella filtri", + "visibleCount": "Mostra {visible} / {total}", + "capabilities": "Capacità", + "types": "Tipi", + "capabilityOptions": { + "vision": "Visione", + "functionCall": "Chiamata funzione", + "reasoning": "Reasoning", + "search": "Ricerca web" + }, + "typeOptions": { + "chat": "Chat", + "embedding": "Embedding", + "rerank": "Rerank", + "imageGeneration": "Generazione immagini", + "videoGeneration": "Generazione video" + } + }, + "tags": { + "reasoning": "Reasoning", + "chat": "Chat", + "code": "Codice", + "writing": "Scrittura", + "analysis": "Analisi" + } +} diff --git a/src/renderer/src/i18n/it-IT/plan.json b/src/renderer/src/i18n/it-IT/plan.json new file mode 100644 index 000000000..1ebf17e6c --- /dev/null +++ b/src/renderer/src/i18n/it-IT/plan.json @@ -0,0 +1,4 @@ +{ + "title": "Piano attività", + "completed": "completato" +} diff --git a/src/renderer/src/i18n/it-IT/promptSetting.json b/src/renderer/src/i18n/it-IT/promptSetting.json new file mode 100644 index 000000000..e56a81fd8 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "Gestione prompt", + "addTitle": "Aggiungi prompt", + "addDescription": "Crea un nuovo template di prompt personalizzato", + "editTitle": "Modifica prompt", + "editDescription": "Modifica il template di prompt selezionato", + "name": "Nome", + "namePlaceholder": "Inserisci il nome del prompt", + "description": "Descrizione", + "descriptionPlaceholder": "Inserisci una descrizione (opzionale)", + "promptContent": "Prompt", + "contentPlaceholder": "Inserisci il contenuto del prompt", + "basicInfo": "Informazioni di base", + "contentTip": "Supporta placeholder di variabili come {openBrace}{openBrace}variable{closeBrace}{closeBrace}; puoi definire i parametri corrispondenti nella sezione parametri", + "noPrompt": "Nessun prompt. Fai clic in alto a destra per aggiungerne uno", + "noPromptDesc": "Fai clic sul pulsante di aggiunta in alto a destra per creare il tuo primo prompt", + "active": "Attivo", + "noDescription": "Nessuna descrizione", + "customDate": "Personalizzato", + "showMore": "Mostra altro", + "showLess": "Mostra meno", + "export": "Esporta", + "import": "Importa", + "exportSuccess": "Esportazione riuscita", + "exportFailed": "Esportazione non riuscita", + "importSuccess": "Importazione riuscita", + "importFailed": "Importazione non riuscita", + "importStats": "Aggiunti {added} prompt, aggiornati {updated}", + "parameters": "Parametri", + "addParameter": "Aggiungi parametro", + "noParameters": "Nessun parametro", + "noParametersDesc": "Fai clic sul pulsante sopra per aggiungere parametri, utilizzabili come placeholder di variabili nei prompt", + "parameterName": "Nome parametro", + "parameterDescription": "Descrizione parametro", + "parameterNamePlaceholder": "Inserisci il nome del parametro", + "parameterDescriptionPlaceholder": "Inserisci la descrizione del parametro", + "required": "Obbligatorio", + "characters": "caratteri", + "fileManagement": "Gestione file", + "uploadFromDevice": "Carica dal dispositivo", + "uploadFromDeviceDesc": "Supporta testo, documenti, CSV e altri formati", + "uploadedFiles": "File caricati", + "noFiles": "Nessun file", + "noFilesUploadDesc": "Fai clic sopra per caricare file", + "uploadSuccess": "Caricamento riuscito", + "uploadedCount": "{count} file caricati", + "confirmDelete": "Vuoi davvero eliminare il prompt \"{name}\"?", + "confirmDeleteDescription": "Questa operazione non può essere annullata. Il prompt non potrà essere recuperato.", + "confirmDeleteSystemPrompt": "Vuoi davvero eliminare il prompt di sistema \"{name}\"?", + "confirmDeleteSystemPromptDescription": "Questa operazione non può essere annullata. Il prompt di sistema non potrà essere recuperato.", + "deleteSuccess": "Eliminazione riuscita", + "deleteFailed": "Eliminazione non riuscita", + "inactive": "Disattivato", + "clickToEnable": "Fai clic per attivare", + "clickToDisable": "Fai clic per disattivare", + "enableSuccess": "Attivazione riuscita", + "disableSuccess": "Disattivazione riuscita", + "toggleFailed": "Cambio stato non riuscito", + "enablePrompt": "Attiva questo prompt", + "sourceLocal": "Locale", + "sourceImported": "Importato", + "sourceBuiltin": "Integrato", + "defaultSystemPrompt": "Prompt di sistema predefinito", + "defaultSystemPromptPlaceholder": "Inserisci il prompt di sistema predefinito, usato come prompt di sistema per tutte le nuove conversazioni...", + "defaultSystemPromptDescription": "Questo prompt sarà usato come prompt di sistema predefinito per tutte le nuove conversazioni. Puoi modificarlo quando crei una conversazione. La modifica avrà effetto alla prossima nuova conversazione.", + "typing": "Digitazione", + "saving": "Salvataggio", + "saved": "Salvato", + "saveDefaultPromptFailed": "Salvataggio del prompt di sistema predefinito non riuscito", + "systemPrompts": "Prompt di sistema", + "customPrompts": "Prompt personalizzati", + "addSystemPrompt": "Aggiungi prompt di sistema", + "addCustomPrompt": "Aggiungi prompt personalizzato", + "editSystemPrompt": "Modifica prompt di sistema", + "addSystemPromptDesc": "Crea un nuovo prompt di sistema", + "editSystemPromptDesc": "Modifica il prompt di sistema selezionato", + "selectSystemPrompt": "Seleziona prompt di sistema", + "systemPromptDescription": "Il prompt di sistema selezionato sarà usato come predefinito per le nuove conversazioni", + "emptySystemPromptOption": "Prompt di sistema vuoto", + "emptySystemPromptDescription": "Selezionando questa opzione, le nuove conversazioni non includeranno un prompt di sistema.", + "preview": "Anteprima", + "systemPromptChanged": "Prompt di sistema modificato", + "systemPromptChangeFailed": "Modifica del prompt di sistema non riuscita", + "systemPromptAdded": "Prompt di sistema aggiunto correttamente", + "systemPromptAddedAndSwitched": "Prompt di sistema aggiunto e impostato automaticamente come predefinito", + "systemPromptUpdated": "Prompt di sistema aggiornato correttamente", + "systemPromptSaveFailed": "Salvataggio prompt di sistema non riuscito", + "systemPromptDeleted": "Prompt di sistema eliminato correttamente", + "systemPromptDeleteFailed": "Eliminazione prompt di sistema non riuscita", + "systemPromptEditTip": "Salvataggio automatico quando esci dal campo dopo la modifica", + "resetToDefault": "Ripristina predefinito", + "resetToDefaultSuccess": "Contenuto predefinito ripristinato", + "resetToDefaultFailed": "Ripristino predefinito non riuscito", + "parameterRequired": "Parametri obbligatori" +} diff --git a/src/renderer/src/i18n/it-IT/routes.json b/src/renderer/src/i18n/it-IT/routes.json new file mode 100644 index 000000000..51a57d30d --- /dev/null +++ b/src/renderer/src/i18n/it-IT/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "Chat", + "welcome": "Benvenuto", + "settings": "Impostazioni", + "settings-common": "Impostazioni generali", + "settings-provider": "Impostazioni provider", + "settings-mcp": "Impostazioni MCP", + "settings-deepchat-agents": "DeepChat Agent", + "settings-database": "Dati", + "settings-about": "Informazioni", + "settings-shortcut": "Scorciatoie", + "settings-display": "Visualizzazione", + "settings-knowledge-base": "Base di conoscenza", + "settings-prompt": "Gestione prompt", + "settings-mcp-market": "Mercato MCP", + "settings-acp": "ACP Agent", + "settings-skills": "Impostazioni Skills", + "settings-notifications-hooks": "Hooks", + "settings-dashboard": "Dashboard", + "settings-environments": "Ambienti directory", + "settings-remote": "Remoto", + "settings-plugins": "Plugin", + "settings-overview": "Panoramica impostazioni" +} diff --git a/src/renderer/src/i18n/it-IT/settings.json b/src/renderer/src/i18n/it-IT/settings.json new file mode 100644 index 000000000..8546d34d2 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "Impostazioni", + "common": { + "title": "Impostazioni generali", + "resetData": "Ripristina dati", + "language": "Lingua", + "languageSelect": "Seleziona lingua", + "searchEngine": "Motore di ricerca", + "searchEngineSelect": "Seleziona motore di ricerca", + "searchPreview": "Anteprima ricerca", + "launchAtLoginEnabled": "Avvia DeepChat all'accesso", + "autoScrollEnabled": "Scorrimento automatico durante la generazione", + "privacyMode": "Modalità privacy", + "privacyModeDescription": "Quando la modalità privacy è attiva, DeepChat non avvierà automaticamente queste richieste:", + "privacyModeAutoUpdate": "Controllo aggiornamenti app", + "privacyModeProviderDb": "Aggiornamento metadati provider e modelli", + "privacyModeAcpRegistry": "Aggiornamento ACP Registry e sincronizzazione icone", + "privacyModeNpmRegistry": "Rilevamento automatico registry npm MCP", + "privacyModeManualActions": "Controlli e aggiornamenti manuali restano disponibili.", + "privacyModeIntegrations": "Le integrazioni di terze parti configurate, come MCP / Remote, non sono interessate", + "autoCompaction": { + "title": "Compressione automatica", + "enabled": "Attiva compressione automatica", + "description": "Quando una conversazione si avvicina al limite della finestra di contesto del modello, DeepChat riassume automaticamente la cronologia più vecchia per permettere alla sessione di continuare. Se disattivata, la cronologia fuori budget viene scartata direttamente senza generare un riepilogo.", + "thresholdLabel": "Soglia di attivazione", + "thresholdMin": "Prima ({value}%)", + "thresholdMax": "Dopo ({value}%)", + "thresholdDescription": "Avvia la compressione quando il prompt raggiunge questa quota del budget effettivo di cronologia. Valori più bassi creano più margine; valori più alti mantengono più contesto originale.", + "retainPairsLabel": "Mantieni coppie messaggi recenti", + "retainPairsValue": "{count} coppie", + "retainPairsDescription": "Mantiene sempre le coppie user e assistant completate più recenti fuori dalla compressione. L'ultima query corrente non è inclusa." + }, + "searchAssistantModel": "Modello assistente", + "selectModel": "Seleziona modello", + "proxyMode": "Modalità proxy", + "proxyModeSelect": "Seleziona modalità proxy", + "proxyModeSystem": "Proxy di sistema", + "proxyModeNone": "Nessun proxy", + "proxyModeCustom": "Proxy personalizzato", + "customProxyUrl": "URL proxy personalizzato", + "customProxyUrlPlaceholder": "Esempio: http://127.0.0.1:7890", + "invalidProxyUrl": "URL proxy non valido, inserisci un URL http/https valido", + "addCustomSearchEngine": "Aggiungi motore di ricerca personalizzato", + "addCustomSearchEngineDesc": "Aggiungi un nuovo motore di ricerca fornendo nome e URL di ricerca. L'URL deve contenere {query} come placeholder della query.", + "searchEngineName": "Nome motore di ricerca", + "searchEngineNamePlaceholder": "Inserisci il nome del motore di ricerca", + "searchEngineUrl": "URL di ricerca", + "searchEngineUrlPlaceholder": "Es.: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "L'URL deve contenere {'{'}query{'}'} come placeholder della query", + "deleteCustomSearchEngine": "Elimina motore di ricerca personalizzato", + "deleteCustomSearchEngineDesc": "Vuoi davvero eliminare il motore di ricerca personalizzato \"{name}\"? Questa operazione non può essere annullata.", + "testSearchEngine": "Testa motore di ricerca", + "testSearchEngineDesc": "Verrà eseguita una ricerca di test con il motore {engine} usando la parola chiave \"meteo\".", + "testSearchEngineNote": "Se la pagina di ricerca richiede login o altre azioni, puoi effettuarle nella finestra di test. Chiudi la finestra di test al termine.", + "theme": "Tema", + "themeSelect": "Seleziona tema", + "themeLight": "Chiaro", + "themeDark": "Scuro", + "themeSystem": "Segui il sistema", + "closeToQuit": "Esci dall'app facendo clic sul pulsante di chiusura", + "shortcut": { + "title": "Impostazioni scorciatoie", + "newChat": "Nuova chat" + }, + "contentProtection": "Protezione condivisione schermo", + "contentProtectionDialogTitle": "Conferma cambio protezione condivisione schermo", + "contentProtectionEnableDesc": "Attivando la protezione, le app di condivisione schermo non potranno catturare la finestra principale di DeepChat, aiutando a proteggere la privacy dei contenuti. Questa funzione non nasconde completamente tutte le interfacce: usala in modo corretto e conforme. Non tutte le app di condivisione schermo rispettano le impostazioni privacy, quindi la funzione può non avere effetto in alcuni software e in certi ambienti potrebbe restare una finestra nera.", + "contentProtectionDisableDesc": "Disattivare la protezione consentirà alle app di condivisione schermo di catturare la finestra DeepChat.", + "contentProtectionRestartNotice": "Cambiare questa impostazione riavvierà l'applicazione. Continuare?", + "copyWithCotEnabled": "Copia informazioni COT", + "traceDebugEnabled": "Traccia chiamate", + "loggingEnabled": "Attiva log", + "loggingDialogTitle": "Conferma modifica impostazioni log", + "loggingEnableDesc": "Attivare i log ci aiuta a diagnosticare problemi e migliorare l'applicazione. I file di log potrebbero contenere informazioni sensibili.", + "loggingDisableDesc": "Disattivare i log interromperà la raccolta dei log applicativi.", + "charactersUnit": "caratteri", + "loggingRestartNotice": "Cambiare questa impostazione riavvierà l'applicazione. Continuare?", + "openLogFolder": "Apri cartella log", + "notifications": "Notifiche di sistema", + "notificationsDesc": "Quando DeepChat non è in primo piano, invia una notifica di sistema al termine della generazione di una sessione", + "fileMaxSize": "Dimensione massima file", + "fileMaxSizeHint": "Limita la dimensione massima di un singolo file caricato", + "defaultModel": { + "title": "Modello predefinito", + "chatModel": "Modello chat predefinito" + } + }, + "deepchatAgents": { + "title": "DeepChat Agents", + "description": "Gestisci DeepChat Agent e i valori predefiniti per le nuove sessioni.", + "builtIn": "Integrato", + "editTitle": "Modifica DeepChat Agent", + "createTitle": "Crea DeepChat Agent", + "unnamed": "Agent senza nome", + "name": "Nome", + "namePlaceholder": "Es.: Writer / Research / Translate", + "enabledLabel": "Stato attivazione", + "descriptionLabel": "Descrizione", + "descriptionPlaceholder": "Opzionale, per spiegare lo scopo di questo Agent", + "avatarTitle": "Avatar", + "avatarDefault": "Predefinito", + "avatarDefaultDesc": "DeepChat usa l'icona predefinita, gli altri Agent usano un avatar testuale.", + "avatarLucide": "Icona Lucide", + "avatarLucideDesc": "Scegli un'icona Lucide e imposta colori chiari/scuri separati.", + "avatarMonogram": "Avatar testuale", + "avatarMonogramDesc": "Usa le prime due lettere latine o il primo carattere CJK per distinguere l'Agent.", + "lucideIcon": "Nome icona Lucide", + "lightColor": "Colore chiaro", + "darkColor": "Colore scuro", + "monogramText": "Avatar testuale", + "monogramPlaceholder": "Es.: WR / 研", + "backgroundColor": "Colore sfondo", + "modelsTitle": "Predefiniti modello", + "chatModel": "Modello conversazione predefinito", + "assistantModel": "Modello assistente", + "visionModel": "Modello visivo", + "imageGenerationModel": "Modello generazione immagini", + "temperature": "Temperatura", + "contextLength": "Lunghezza contesto", + "maxTokens": "Numero massimo di Token", + "thinkingBudget": "Budget ragionamento", + "reasoningEffort": "Intensità reasoning", + "verbosity": "Livello di dettaglio", + "interleaved": "Forza compatibilità Interleaved Thinking", + "systemPrompt": "Prompt di sistema predefinito", + "systemPromptPlaceholder": "Lascia vuoto per usare un prompt di sistema vuoto", + "defaultProjectPath": "Directory predefinita (opzionale)", + "defaultProjectPathPlaceholder": "Lascia vuoto per usare la directory globale predefinita", + "permissionMode": "Permesso predefinito", + "permissionFullAccess": "Tutto attivo", + "permissionDefault": "Permesso predefinito", + "subagentsTitle": "subagent", + "subagentsDescription": "Configura gli slot di sessione subagent riutilizzabili da `subagent_orchestrator`.", + "subagentsEnabled": "Attiva subagent", + "subagentTargetType": "Tipo target", + "subagentTargetSelf": "Agent corrente", + "subagentTargetAgent": "Agent specifico", + "subagentDisplayName": "Nome visualizzato", + "subagentDescription": "Descrizione slot", + "subagentTargetAgentLabel": "Agent target", + "subagentLimit": "{count}/{max} slot", + "addSubagentSlot": "+ Aggiungi slot", + "toolsTitle": "Strumenti integrati", + "compactionTitle": "Compressione automatica", + "compactionEnabled": "Attiva compressione automatica", + "compactionDescription": "Queste impostazioni influenzano solo le nuove sessioni DeepChat create in futuro.", + "compactionThreshold": "Soglia di attivazione", + "compactionRetainPairs": "Mantieni coppie messaggi recenti", + "deleteConfirm": "Eliminare l'Agent \"{name}\"? Le sue sessioni storiche passeranno automaticamente al DeepChat integrato." + }, + "notificationsHooks": { + "title": "Hooks", + "description": "Configura i comandi Hook del ciclo di vita.", + "events": { + "title": "Eventi", + "SessionStart": "Inizio sessione", + "UserPromptSubmit": "Invio utente", + "PreToolUse": "Prima della chiamata strumento", + "PostToolUse": "Dopo la chiamata strumento", + "PostToolUseFailure": "Errore chiamata strumento", + "PermissionRequest": "Richiesta permesso", + "Stop": "Stop", + "SessionEnd": "Fine sessione" + }, + "commands": { + "title": "Comandi Hooks", + "description": "Esegui comandi personalizzati in base agli eventi del ciclo di vita selezionati.", + "hint": "Il payload completo viene scritto su stdin come JSON.", + "commandPlaceholder": "Comando da eseguire", + "commandLabel": "Comando", + "name": "Nome", + "namePlaceholder": "Nome Hook", + "newHook": "Nuovo Hook", + "empty": "Nessun Hook. Fai clic in alto a destra per crearne uno.", + "defaultName": "Hook {index}", + "guideTitle": "Istruzioni", + "guideDescription": "Quando un evento selezionato viene attivato, DeepChat esegue il comando. L'evento corrente è disponibile tramite stdin JSON, variabili d'ambiente e placeholder da riga di comando.", + "deliveryTitle": "Modalità parametri", + "deliveryStdin": "Il payload completo viene scritto su stdin come JSON.", + "deliveryPlaceholder": "Puoi usare i placeholder direttamente nella riga di comando.", + "deliveryEnv": "Lo stesso set di metadati di base viene scritto anche nelle variabili d'ambiente.", + "metadataOnly": "I placeholder da riga di comando sono più adatti a metadati piccoli; prompt, dettagli tool, permission, usage, stop, error e altri contenuti vanno letti da stdin JSON.", + "stdinPreviewLabel": "Esempio stdin", + "placeholdersTitle": "Placeholder riga di comando", + "placeholdersDescription": "I placeholder vengono espansi prima dell'esecuzione e possono essere passati come argomenti al comando.", + "envTitle": "Variabili d'ambiente", + "examplesTitle": "Comandi di esempio", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Python", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Nome evento corrente", + "time": "Ora evento in formato ISO-8601", + "isTest": "Indica se è stato attivato dal pulsante di test", + "conversationId": "ID sessione corrente", + "workdir": "Directory di lavoro risolta per la sessione corrente", + "agentId": "ID Agent corrente (se presente)", + "providerId": "ID Provider corrente (se presente)", + "modelId": "ID Model corrente (se presente)", + "messageId": "ID messaggio utente corrente (se presente)", + "toolName": "Nome strumento corrente (se presente)", + "toolCallId": "ID chiamata strumento corrente (se presente)" + } + }, + "test": { + "button": "Test", + "testing": "Test in corso...", + "success": "Riuscito", + "failed": "Non riuscito", + "duration": "{ms} ms", + "statusCode": "HTTP {code}", + "exitCode": "Codice uscita {code}", + "retryAfter": "Riprova dopo {ms} ms", + "stdout": "stdout", + "stderr": "stderr" + } + }, + "data": { + "title": "Impostazioni dati", + "syncEnable": "Attiva sincronizzazione dati", + "syncFolder": "Cartella sincronizzazione", + "openSyncFolder": "Apri cartella sincronizzazione", + "lastSyncTime": "Ultima sincronizzazione", + "never": "Mai", + "startBackup": "Esegui backup ora", + "backingUp": "Backup in corso...", + "importData": "Importa dati", + "incrementImport": "Importazione incrementale", + "overwriteImport": "Importazione con sovrascrittura", + "backupSelectLabel": "Seleziona punto di backup", + "backupSelectDescription": "Scegli il backup da importare.", + "selectBackupPlaceholder": "Seleziona backup", + "noBackupsAvailable": "Non ci sono backup disponibili. Esegui prima un backup.", + "importConfirmTitle": "Conferma importazione dati", + "importConfirmDescription": "L'importazione sovrascriverà tutti i dati correnti, inclusi cronologia chat e impostazioni. Assicurati di aver salvato i dati importanti. Al termine, i dati verranno aggiornati automaticamente.", + "importing": "Importazione...", + "confirmImport": "Conferma importazione", + "importSuccessTitle": "Importazione riuscita", + "importErrorTitle": "Importazione non riuscita", + "resetData": "Ripristina dati", + "resetConfirmTitle": "Conferma ripristino dati", + "resetConfirmDescription": "Seleziona il tipo di dati da ripristinare. Questa operazione non può essere annullata e l'app si riavvierà automaticamente dopo il ripristino.", + "resetChatData": "Ripristina dati chat", + "resetChatDataDesc": "Elimina tutta la cronologia chat e delle conversazioni", + "resetKnowledgeData": "Ripristina dati base di conoscenza", + "resetKnowledgeDataDesc": "Elimina tutti i file della base di conoscenza e i dati vettoriali", + "resetConfig": "Ripristina configurazione", + "resetConfigDesc": "Elimina tutte le impostazioni app, configurazioni modelli e prompt personalizzati", + "resetAll": "Ripristino completo", + "resetAllDesc": "Elimina tutti i dati, inclusi cronologia chat, configurazioni e file cache", + "resetting": "Ripristino...", + "confirmReset": "Conferma ripristino", + "resetCompleteDevTitle": "Ripristino dati completato", + "resetCompleteDevMessage": "In ambiente di sviluppo riavvia manualmente l'app per vedere l'effetto. Ferma il processo corrente ed esegui di nuovo pnpm run dev", + "toast": { + "backupSuccessTitle": "Backup riuscito", + "backupSuccessMessage": "Dati salvati correttamente" + }, + "syncSectionTitle": "Backup e sincronizzazione dati", + "operationsSectionTitle": "Operazioni dati", + "resetDataDescription": "Ripristina per tipo chat, base di conoscenza, configurazione o tutti i dati.", + "databaseRepair": { + "title": "Riparazione database", + "description": "Rileva e ripara automaticamente il database", + "button": "Controlla e ripara database", + "running": "Controllo e riparazione...", + "lastResultLabel": "Ultimo risultato: {result}", + "summaryHealthy": "Struttura corretta", + "summaryRepaired": "{count} problemi riparati", + "summaryRepairedWithManual": "{repaired} problemi riparati, {manual} richiedono intervento manuale", + "summaryManualOnly": "{manual} problemi richiedono intervento manuale", + "manualHint": "{count} problemi non sono stati riparati automaticamente e richiedono intervento manuale.", + "toastSuggestedTitle": "Riparazione database consigliata", + "toastSuggestedDescription": "DeepChat ha rilevato un problema di schema nel database ({reason}); puoi eseguire ora la riparazione.", + "toastAction": "Vai alla riparazione", + "toastHealthyTitle": "Struttura database corretta", + "toastHealthyDescription": "Nessun problema di schema da riparare.", + "toastCompletedTitle": "Riparazione database completata", + "toastRepairedDescription": "{count} problemi riparati.", + "toastManualDescription": "{repaired} problemi riparati, {manual} richiedono ancora intervento manuale.", + "toastFailedTitle": "Riparazione database non riuscita", + "toastFailedDescription": "Impossibile completare la riparazione del database. Controlla i log e riprova.", + "reasons": { + "missing-table": "tabella mancante", + "missing-column": "colonna mancante", + "column-count-mismatch": "numero colonne non corrispondente", + "type-mismatch": "tipo colonna non corrispondente" + } + }, + "databaseEncryption": { + "title": "Cifratura database SQLite", + "description": "Cifra agent.db con SQLCipher; quando lo sblocco di sistema non è disponibile, richiede la password SQLite.", + "enabled": "Attiva", + "disabled": "Non attiva", + "cipher": "Metodo di cifratura", + "systemUnlock": "Sblocco di sistema", + "startupUnlock": "Sblocco all'avvio", + "lastMigration": "Ultima migrazione", + "loading": "Caricamento", + "never": "Mai", + "notRequired": "Non richiesto", + "systemUnlockAvailable": "Disponibile", + "systemUnlockUnavailable": "Non disponibile", + "systemUnlockMode": "Sblocco di sistema", + "manualUnlock": "Inserimento manuale password", + "currentPassword": "Password corrente", + "newPassword": "Nuova password SQLite", + "confirmPassword": "Conferma password", + "passwordMismatch": "Le due password non coincidono", + "systemCredentialStore": "Quando l'archivio sicuro di sistema è disponibile, DeepChat salva la password SQLite cifrata nel vault delle credenziali del sistema (ad esempio macOS Keychain, Windows Credential Vault o Linux secret store). Dopo il primo sblocco riuscito, gli avvii successivi di solito si aprono automaticamente; la chiave di cifratura va reinserita solo dopo migrazione dati, se la credenziale di sistema manca o non può essere decifrata, oppure se l'archivio sicuro non è disponibile.", + "safeStorageUnavailable": "Electron safeStorage non è disponibile su questo sistema. Dopo l'attivazione sarà necessario inserire manualmente la password a ogni avvio.", + "enableButton": "Attiva cifratura", + "changeButton": "Modifica password", + "disableButton": "Disattiva cifratura", + "enabledTitle": "Cifratura database attivata", + "changedTitle": "Password SQLite modificata", + "disabledTitle": "Cifratura database disattivata", + "failedTitle": "Operazione cifratura database non riuscita", + "failedDescription": "Controlla la password e riprova.", + "setPasswordButton": "Imposta password", + "enableDialogTitle": "Imposta password SQLite", + "changeDialogTitle": "Modifica password SQLite", + "disableDialogTitle": "Disattiva cifratura database", + "enableDialogDescription": "Crea un database SQLite cifrato e migra i dati locali correnti.", + "changeDialogDescription": "Migra il database cifrato corrente in un nuovo database cifrato con la nuova password.", + "disableDialogDescription": "Migra il database cifrato corrente a un database locale in chiaro.", + "cancelButton": "Annulla", + "unknown": "Sconosciuto" + }, + "modelConfigUpdate": { + "title": "Aggiorna configurazione modelli", + "descriptionPrefix": "Sincronizza dati modello da ", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": " progetto", + "button": "Aggiorna ora", + "updating": "Aggiornamento...", + "updatedTitle": "Configurazione modelli aggiornata", + "updatedDescription": "Metadati provider aggiornati all'ultima versione.", + "upToDateTitle": "Già aggiornato", + "upToDateDescription": "La configurazione locale dei modelli usa già gli ultimi metadati provider.", + "failedTitle": "Aggiornamento non riuscito", + "failedDescription": "Impossibile aggiornare ora la configurazione modelli. Riprova più tardi." + }, + "yoBrowser": { + "title": "Sandbox YoBrowser", + "description": "Sandbox browser indipendente che non condivide Cookie e archiviazione locale con l'app principale. Puoi cancellare qui i dati YoBrowser con un clic.", + "clearButton": "Cancella dati YoBrowser", + "confirmTitle": "Confermi la cancellazione dei dati YoBrowser?", + "confirmDescription": "Verranno eliminati Cookie, cache, LocalStorage, IndexedDB e altri dati della sessione YoBrowser; potrebbe essere necessario accedere di nuovo ai siti.", + "confirmAction": "Cancella ora", + "clearing": "Pulizia...", + "clearedTitle": "Dati YoBrowser cancellati", + "clearedDescription": "La sessione sandbox è stata ripristinata e le schede correlate verranno ricaricate.", + "clearFailedTitle": "Cancellazione non riuscita", + "clearFailedDescription": "Riprova o controlla i log per altre informazioni." + }, + "privacyTitle": "Dati e privacy", + "privacyDescription": "Gestisci backup, sincronizzazione, modalità privacy, manutenzione dati e operazioni rischiose.", + "dangerZone": { + "title": "Zona pericolosa", + "description": "Ripristina chat, base di conoscenza o tutti i dati. Questa operazione non può essere annullata." + }, + "providerImport": { + "entryTitle": "Importa configurazioni da altri Agent", + "entryDescription": "Scansiona le configurazioni provider locali di CC Switch, Alma, Cherry Studio, Hermes e OpenClaw per migrare rapidamente chiavi e liste modelli.", + "entryButton": "Importa da altri Agent", + "dialogTitle": "Importa da altri Agent", + "dialogDescription": "Seleziona prima le app rilevate, poi conferma uno per uno i provider da importare in DeepChat.", + "toastTitle": "Importazione Provider completata", + "toastDescription": "{count} provider importati.", + "steps": { + "scan": "Scansione", + "providers": "Provider", + "done": "Completato" + }, + "scanningTitle": "Scansione Agent installati", + "scanningDescription": "DeepChat legge solo file di configurazione locali noti e non carica alcun dato.", + "scanFailedTitle": "Scansione non riuscita", + "sourcesTitle": "Origini rilevate", + "sourcesDescription": "Puoi scegliere uno o più Agent; DeepChat li elaborerà nell'ordine della lista.", + "selectedSources": "Selezionati {selected}/{total}", + "noSourcesTitle": "Nessuna configurazione provider importabile trovata", + "noSourcesDescription": "Installa prima un Agent supportato o configura le chiavi provider nel relativo Agent.", + "providersFound": "{count} provider", + "sourceProgress": "{current}/{total}", + "overwriteNote": "Se più provider selezionati vengono mappati allo stesso provider DeepChat, l'origine successiva sovrascriverà quella precedente.", + "noProvidersTitle": "Questa origine non contiene dati provider", + "noProvidersDescription": "L'Agent è stato selezionato, ma non è stata trovata alcuna voce provider importabile.", + "apiKey": "Chiave {value}", + "noModels": "Nessuna lista modelli", + "modelsImported": "{count} modelli", + "importingTitle": "Importazione provider", + "importingDescription": "DeepChat sta scrivendo i provider selezionati e le voci dei modelli personalizzati.", + "doneTitle": "Riepilogo importazione", + "doneDescription": "{count} provider importati. Puoi vedere sotto il risultato di ciascun provider.", + "badges": { + "configured": "Configurato" + }, + "sourceStatus": { + "found": "Trovato", + "not_found": "Non trovato", + "error": "Lettura non riuscita", + "unsupported_platform": "Piattaforma non supportata" + }, + "targetKind": { + "builtin": "Integrato", + "custom": "Personalizzato", + "unsupported": "Non supportato" + }, + "warnings": { + "already_configured": "Configurazione già presente in DeepChat, per impostazione predefinita non viene selezionata.", + "missing_api_key": "API Key o endpoint necessario mancante.", + "unsupported_provider": "DeepChat non può ancora importare automaticamente questo provider.", + "overwrites_previous_selection": "Questa selezione è in conflitto con un'origine precedente.", + "credential_only_import": "Viene importata solo la API Key; DeepChat mantiene endpoint e runtime integrati del provider." + }, + "conflicts": { + "overridesPrevious": "Questa selezione sovrascriverà un provider DeepChat omonimo selezionato prima.", + "overwrittenByLater": "Un'origine selezionata successivamente sovrascriverà questo provider." + }, + "summary": { + "imported": "Importati", + "created": "Creati", + "updated": "Aggiornati", + "overwritten": "Sovrascritti", + "models": "Modelli", + "skipped": "Saltati" + }, + "resultStatus": { + "created": "Creato", + "updated": "Aggiornato", + "skipped": "Saltato", + "overwritten": "Sovrascritto" + }, + "actions": { + "rescan": "Scansiona di nuovo", + "selectAll": "Seleziona tutto", + "clearSelected": "Cancella", + "import": "Importa selezionati" + }, + "apiTypes": { + "openaiCompletions": "OpenAI Chat Completions", + "openai": "OpenAI", + "openaiResponses": "OpenAI Responses", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "Mistral AI" + }, + "applyFailed": "Importazione non riuscita: {message}" + } + }, + "dashboard": { + "badge": "Dashboard utilizzo", + "title": "Dashboard utilizzo", + "description": "Statistiche su consumo token, hit cache e costo stimato. Token e costi sono stimati da informazioni pubbliche; per alcuni provider o messaggi precedenti i dati potrebbero essere incompleti, quindi sono solo indicativi.", + "actions": { + "refresh": "Aggiorna" + }, + "backfill": { + "runningTitle": "Aggiornamento dati di utilizzo", + "runningDescription": "I dati di utilizzo vengono ancora elaborati in background; i risultati correnti sono già consultabili.", + "failedTitle": "Aggiornamento dati di utilizzo non riuscito", + "failedDescription": "Aggiorna questa pagina o riprova più tardi." + }, + "error": { + "title": "Caricamento dashboard non riuscito", + "description": "Riprova più tardi." + }, + "empty": { + "title": "Nessuna statistica disponibile", + "description": "Quando saranno disponibili dati di utilizzo, qui vedrai consumo token, hit cache e costo stimato.", + "historyNote": "Token e costi sono stimati da informazioni pubbliche. Per alcuni provider o messaggi precedenti i dati potrebbero essere incompleti, quindi sono solo indicativi." + }, + "summary": { + "totalTokens": "Token totali", + "totalTokensDescription": "Mostra il rapporto tra token di input e output nel totale.", + "inputTokensLabel": "Input", + "outputTokensLabel": "Output", + "cachedTokens": "Token in cache", + "cachedTokensDescription": "Prompt token serviti dalla cache del provider.", + "cachedTokensCachedLabel": "Hit cache", + "cachedTokensUncachedLabel": "Non in cache", + "cacheHitRate": "Tasso hit cache", + "cacheHitRateDescription": "Quota di prompt token in cache sul totale dei token di input.", + "estimatedCost": "Costo stimato", + "estimatedCostDescription": "Costo stimato in USD usando i prezzi provider correnti o i prezzi fallback AIHubMix.", + "estimatedCostTrendLabel": "Trend ultimi 30 giorni", + "estimatedCostTrendEmpty": "Nessun costo registrato negli ultimi 30 giorni.", + "recordingStartedAt": "Inizio registrazione statistiche", + "recordingStartedAtDescription": "Ora del primo record usage presente nella dashboard corrente.", + "withDeepChatDaysLabel": "Giorni insieme", + "withDeepChatDaysValue": "{days} giorni", + "withDeepChatDaysSentence": "Hai passato {days} giorni insieme a DeepChat", + "withDeepChatDaysDescription": "In base al tuo primo record di utilizzo: {date}.", + "withDeepChatDaysDescriptionUnavailable": "Nessun record di utilizzo per ora.", + "tokenUsage": "Consumo Token", + "nostalgiaLabel": "Ricordi", + "nostalgiaDaysValue": "{days} giorni", + "nostalgiaSessionsValue": "{count} sessioni", + "nostalgiaMessagesValue": "{count} messaggi", + "nostalgiaDaysDetailLabel": "Tempo insieme", + "nostalgiaDaysDetail": "Hai passato {days} giorni insieme a DeepChat.", + "nostalgiaSessionsDetailLabel": "Sessioni totali", + "nostalgiaSessionsDetail": "Avete svolto insieme {count} sessioni.", + "nostalgiaMessagesDetailLabel": "Messaggi totali", + "nostalgiaMessagesDetail": "Vi siete scambiati {count} messaggi.", + "nostalgiaMostActiveDayLabel": "Giorno più attivo", + "nostalgiaMostActiveDayDetail": "{date} è stato il tuo giorno più attivo, con {count} messaggi." + }, + "calendar": { + "title": "Calendario contributi", + "description": "Consumo giornaliero di token negli ultimi 365 giorni.", + "legend": "Da meno a più", + "tooltip": "{date}: {tokens} token" + }, + "breakdown": { + "providerTitle": "Classifica provider", + "providerDescription": "Ordinata prima per costo stimato, poi per token totali.", + "modelTitle": "Classifica modelli", + "modelDescription": "I primi 10 modelli ordinati per costo stimato e token totali.", + "messages": "{count} messaggi", + "empty": "Nessun dettaglio disponibile per ora." + }, + "rtk": { + "title": "Risparmio RTK", + "description": "Mostra quanti token RTK ha stimato di intercettare prima che entrassero nel contesto modello nel flusso nativo di esecuzione comandi DeepChat.", + "actions": { + "retry": "Riprova controllo" + }, + "status": { + "disabled": "Disattivato", + "checking": "Controllo", + "healthy": "Disponibile", + "unhealthy": "Non disponibile" + }, + "descriptionDisabled": "RTK è disattivato nella sessione app corrente; i comandi continueranno sul percorso di esecuzione originale.", + "descriptionChecking": "DeepChat sta verificando se RTK può funzionare correttamente nell'ambiente corrente.", + "descriptionHealthy": "RTK è collegato all'esecuzione comandi nativa di DeepChat.", + "descriptionUnhealthy": "Il controllo di salute all'avvio di RTK non è riuscito ed è stato disattivato per la sessione app corrente.", + "sourceLabel": "Origine runtime: {source}", + "source": { + "bundled": "Integrato", + "system": "Sistema", + "none": "Non disponibile" + }, + "summary": { + "savedTokens": "Token risparmiati", + "commands": "Comandi tracciati", + "avgSavingsPct": "Risparmio medio", + "outputTokens": "Output filtrato" + } + }, + "unavailable": "N/D" + }, + "modelConfigItem": { + "chatFallbackWarning": "Capacità Agent debole: supporta solo chiamate strumenti legacy fallback" + }, + "model": { + "title": "Impostazioni modello", + "systemPrompt": { + "label": "Prompt di sistema", + "placeholder": "Inserisci il prompt di sistema...", + "description": "Imposta il prompt di sistema dell'assistente AI per definirne comportamento e ruolo" + }, + "temperature": { + "label": "Temperatura modello", + "description": "Controlla la casualità dell'output: valori più alti producono risposte più creative" + }, + "contextLength": { + "label": "Lunghezza contesto", + "description": "Imposta la lunghezza massima del contesto conversazione" + }, + "responseLength": { + "label": "Lunghezza testo risposta", + "description": "Imposta la lunghezza massima della risposta AI" + }, + "artifacts": { + "title": "Effetto Artifacts", + "description": "Effetto animazione nella generazione dei blocchi di codice" + }, + "provider": "Provider", + "modelList": "Elenco modelli", + "selectModel": "Seleziona modello", + "providerSetting": "Impostazioni provider", + "configureModel": "Configura modello", + "addModel": "Aggiungi modello", + "form": { + "id": { + "label": "Identificatore" + } + }, + "modelConfig": { + "title": "Parametri modello personalizzati", + "description": "Questa configurazione vale solo per il modello corrente e non influisce sugli altri modelli. Modificala con cautela: parametri errati possono impedire al modello di funzionare correttamente.", + "name": { + "label": "Nome modello", + "description": "Nome visualizzato del modello nell'interfaccia", + "placeholder": "Inserisci nome modello", + "required": "Il nome modello è obbligatorio", + "readonly": "Nome modello (sola lettura)" + }, + "id": { + "label": "ID modello", + "description": "ID univoco usato per identificare il modello", + "placeholder": "Inserisci ID modello", + "required": "L'ID modello è obbligatorio", + "readonly": "ID modello (sola lettura)", + "duplicate": "Esiste già un modello con lo stesso ID" + }, + "createTitle": "Aggiungi modello personalizzato", + "editTitle": "Modifica configurazione modello - {name}", + "maxTokens": { + "label": "Lunghezza output massima", + "description": "Imposta il numero massimo di Token per un singolo output del modello" + }, + "contextLength": { + "label": "Lunghezza contesto", + "description": "Imposta la lunghezza del contesto che il modello può gestire" + }, + "temperature": { + "label": "Temperatura", + "description": "Controlla la casualità dell'output. La maggior parte dei modelli usa 0-1, alcuni supportano 0-2; più alto significa più casuale", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 usa {enabled} quando il ragionamento è attivo e {disabled} quando è disattivo." + }, + "vision": { + "label": "Capacità visiva", + "description": "Indica se il modello supporta capacità visive" + }, + "speechRecognition": { + "label": "Riconoscimento vocale", + "description": "Controlla se questo modello consente input vocale convertito in testo tramite riconoscimento vocale locale." + }, + "functionCall": { + "label": "Chiamata funzione", + "description": "Indica se il modello supporta nativamente le chiamate funzione (se disattivato, DeepChat simulerà automaticamente le chiamate funzione)" + }, + "reasoning": { + "label": "Capacità reasoning", + "description": "Questo modello supporta capacità di reasoning" + }, + "reasoningToggle": { + "label": "Attiva reasoning", + "description": "Controlla se il reasoning è attivo per impostazione predefinita su questo modello" + }, + "interleavedThinking": { + "label": "Interleaved Thinking", + "description": "Controlla se questo modello gestisce i messaggi di reasoning e tool-call con Interleaved Thinking. Se il provider dichiara il supporto, verrà attivato automaticamente." + }, + "thinkingBudget": { + "label": "Budget ragionamento", + "description": "Imposta la lunghezza massima in token del processo di ragionamento, per controllare la profondità del reasoning del modello", + "placeholder": "Inserisci valore budget ragionamento", + "range": "Intervallo: {min} - {max}", + "validation": { + "required": "Inserisci il valore del budget ragionamento", + "minValue": "Il valore del budget ragionamento è inferiore al minimo", + "maxValue": "Il valore del budget ragionamento non può superare {max}" + } + }, + "type": { + "label": "Tipo modello", + "description": "Seleziona il tipo di modello", + "options": { + "chat": "Modello linguistico", + "embedding": "Modello embedding", + "rerank": "Modello rerank", + "imageGeneration": "Modello generazione immagini", + "videoGeneration": "Modello generazione video" + } + }, + "apiEndpoint": { + "label": "API endpoint", + "description": "Seleziona l'endpoint OpenAI API usato da questo modello.", + "options": { + "chat": "Generazione testo", + "image": "Generazione immagini", + "video": "Generazione video" + } + }, + "resetToDefault": "Ripristina predefinito", + "saveConfig": "Salva configurazione", + "cancel": "Annulla", + "useModelDefault": "Usa configurazione predefinita del modello", + "currentUsingModelDefault": "Configurazione predefinita del modello in uso", + "resetConfirm": { + "title": "Conferma ripristino", + "message": "Vuoi davvero ripristinare la configurazione di questo modello ai valori predefiniti? Questa operazione non può essere annullata.", + "confirm": "Conferma ripristino" + }, + "reasoningEffort": { + "label": "Livello di impegno reasoning", + "description": "Controlla la profondità del reasoning del modello; livelli più alti producono risultati migliori ma risposte più lente", + "placeholder": "Seleziona livello di impegno reasoning", + "options": { + "none": "None - Nessun reasoning", + "minimal": "Minimal - Risposta più rapida", + "low": "Low - Impegno basso", + "medium": "Medium - Impegno medio", + "high": "High - Impegno alto", + "xhigh": "XHigh - Impegno massimo", + "max": "Max - Impegno estremo" + } + }, + "verbosity": { + "label": "Livello di dettaglio", + "description": "Controlla dettaglio e lunghezza delle risposte del modello", + "placeholder": "Seleziona livello di dettaglio", + "options": { + "low": "Low - Risposte concise", + "medium": "Medium - Dettaglio bilanciato", + "high": "High - Risposte dettagliate" + } + }, + "validation": { + "maxTokensRequired": "La lunghezza output massima non può essere vuota", + "maxTokensMin": "La lunghezza output massima deve essere maggiore di 0", + "maxTokensMax": "La lunghezza output massima non può superare 1000000", + "contextLengthRequired": "La lunghezza contesto non può essere vuota", + "contextLengthMin": "La lunghezza contesto deve essere maggiore di 0", + "contextLengthMax": "La lunghezza contesto non può superare 10000000", + "temperatureRequired": "La temperatura non può essere vuota", + "temperatureMin": "La temperatura deve essere maggiore o uguale a 0", + "temperatureMax": "La temperatura deve essere minore o uguale a 2", + "timeoutMin": "Il timeout richiesta non può essere inferiore a 1000 millisecondi", + "timeoutMax": "Il timeout richiesta non può superare 3600000 millisecondi" + }, + "endpointType": { + "label": "Tipo protocollo", + "description": "Seleziona il protocollo upstream usato da New API per il modello corrente.", + "placeholder": "Seleziona tipo protocollo", + "required": "Il tipo protocollo è obbligatorio", + "options": { + "openai": "OpenAI Chat", + "openai-response": "OpenAI Responses", + "anthropic": "Anthropic Messages", + "gemini": "Gemini Native", + "image-generation": "Image Generation", + "video-generation": "Video Generation" + } + }, + "reasoningVisibility": { + "label": "Visualizzazione contenuto reasoning", + "description": "Quando il reasoning è attivo, controlla se il contenuto viene nascosto o mostrato come riepilogo", + "placeholder": "Seleziona modalità di visualizzazione reasoning", + "options": { + "omitted": "Omitted - Nascondi contenuto reasoning", + "summarized": "Summarized - Mostra riepilogo reasoning" + } + }, + "timeout": { + "label": "Timeout richiesta (millisecondi)", + "description": "Imposta il timeout di una singola richiesta al modello; al superamento, la richiesta verrà interrotta automaticamente." + }, + "imageGeneration": { + "default": "Predefinito", + "size": { + "label": "Dimensione immagine", + "custom": "Personalizzata", + "placeholder": "Es. 2048x2048", + "experimental": "Questa dimensione supera 2560x1440, OpenAI la segnala come output sperimentale.", + "validation": { + "invalid_format": "Usa il formato {width}x{height}.", + "invalid_multiple": "Larghezza e altezza devono essere multipli di 16.", + "side_too_large": "Larghezza e altezza non possono superare 3840px.", + "aspect_ratio_too_large": "Il lato lungo non può superare 3 volte il lato corto.", + "pixel_count_out_of_range": "Il totale dei pixel deve essere tra 655360 e 8294400." + } + }, + "quality": { + "label": "Qualità immagine", + "options": { + "low": "Bassa", + "medium": "Media", + "high": "Alta", + "auto": "Automatica" + } + }, + "outputFormat": { + "label": "Formato output", + "options": { + "png": "PNG", + "jpeg": "JPEG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "Qualità compressione", + "placeholder": "Predefinito: 100", + "validation": "La qualità di compressione deve essere un intero da 0 a 100." + }, + "background": { + "label": "Sfondo", + "options": { + "auto": "Automatico", + "opaque": "Opaco" + } + }, + "moderation": { + "label": "Filtro contenuti", + "options": { + "auto": "Automatico", + "low": "Basso" + } + } + }, + "videoGeneration": { + "size": { + "label": "Dimensione video", + "placeholder": "Es. 1280x720" + }, + "seconds": { + "label": "Secondi", + "placeholder": "Es. 5" + }, + "duration": { + "label": "Durata", + "placeholder": "Es. 5", + "description": "Viene inviato all'upstream tramite extra_body.duration per le interfacce video compatibili." + }, + "ratio": { + "label": "Proporzioni", + "placeholder": "Es. 16:9" + }, + "resolution": { + "label": "Risoluzione", + "placeholder": "Es. 720p" + }, + "watermark": { + "label": "Watermark", + "description": "Quando l'interfaccia upstream lo supporta, richiede al server di aggiungere un watermark al risultato generato." + }, + "generateAudio": { + "label": "Genera audio", + "description": "Quando l'interfaccia upstream lo supporta, genera anche la traccia audio del video." + } + } + } + }, + "provider": { + "search": "Cerca piattaforme provider…", + "enable": "Attiva servizio", + "enabled": "Attivo", + "disabled": "Disattivato", + "urlPlaceholder": "Inserisci API URL", + "keyPlaceholder": "Inserisci API Key", + "accessKeyIdPlaceholder": "Inserisci AWS Access Key ID", + "secretAccessKeyPlaceholder": "Inserisci AWS Secret Access Key", + "regionPlaceholder": "Inserisci regione AWS", + "vertexProjectId": "ID progetto", + "vertexProjectIdPlaceholder": "Inserisci ID progetto Google Cloud", + "vertexLocation": "Regione", + "vertexLocationPlaceholder": "Inserisci regione (es. us-central1)", + "vertexServiceEmail": "Email account di servizio", + "vertexServiceEmailPlaceholder": "Inserisci email account di servizio", + "vertexPrivateKey": "Chiave privata account di servizio", + "vertexPrivateKeyPlaceholder": "Incolla la chiave privata (supporta \\n su una riga)", + "vertexApiVersion": "Versione API", + "vertexEndpointMode": "Modalità endpoint", + "vertexEndpointStandard": "Standard (endpoint regionale)", + "vertexEndpointExpress": "Express (endpoint globale)", + "verifyKey": "Verifica chiave", + "howToGet": "Come ottenerla", + "refreshingModels": "Aggiornamento...", + "getKeyTip": "Vai su", + "getKeyTipEnd": "per ottenere una API Key", + "urlFormat": "Esempio API: {defaultUrl}", + "urlFormatFill": "Compila in API URL", + "openaiResponsesNotice": "Il servizio ufficiale OpenAI usa di default Responses API; se una terza parte supporta solo Chat Completions, usa il provider OpenAI Completions.", + "modifyBaseUrl": "Modifica", + "baseUrlLockedHint": "Questo tipo di provider ha una Base URL consigliata bloccata per impostazione predefinita, così si evitano errori di richiesta dovuti a modifiche accidentali.", + "refreshModelsWithMetadataHint": "Aggiornando questo provider verranno prima sincronizzati i metadati upstream, poi ricostruita la lista modelli locale.", + "modelList": "Elenco modelli", + "enableModels": "Attiva modelli", + "disableAllModels": "Disattiva tutti", + "modelsEnabled": "Modelli attivati", + "noModelsEnabled": { + "title": "Nessun modello attivo", + "description": "Fai clic sul pulsante \"Attiva modelli\" per scegliere manualmente i modelli da usare." + }, + "verifyLink": "Verifica link", + "syncModelsFailed": "Sincronizzazione modelli non riuscita...", + "addCustomProvider": "Aggiungi provider personalizzato", + "delete": "Elimina", + "stopModel": "Ferma modello", + "pulling": "Pull in corso...", + "runModel": "Esegui modello", + "configurationUpdated": "Configurazione aggiornata", + "configurationSaved": "Configurazione salvata", + "operationSuccess": "Operazione riuscita", + "operationFailed": "Operazione non riuscita", + "dataRefreshed": "Dati aggiornati", + "settingsApplied": "Impostazioni applicate", + "toast": { + "modelRunning": "Il modello è in esecuzione", + "modelRunningDesc": "Ferma prima il modello {model}, poi eliminalo.", + "backupSuccessTitle": "Backup completato", + "backupSuccessMessage": "Backup salvato (ora: {time}, dimensione: {size})", + "importSuccessTitle": "Importazione completata", + "importSuccessMessage": "{count} sessioni importate correttamente", + "refreshModelsSuccessTitle": "Modelli aggiornati", + "refreshModelsSuccessDescription": "La lista modelli più recente del provider è stata sincronizzata.", + "refreshModelsSuccessDescriptionWithMetadata": "Metadati upstream e lista modelli più recente del provider sono stati sincronizzati.", + "refreshModelsFailedTitle": "Aggiornamento non riuscito", + "refreshModelsFailedDescription": "Impossibile aggiornare ora la lista modelli del provider. Riprova più tardi.", + "refreshModelsFailedDescriptionWithMetadata": "Impossibile aggiornare ora metadati upstream e lista modelli del provider. Riprova più tardi." + }, + "modelscope": { + "name": "ModelScope", + "description": "ModelScope è una piattaforma model-as-a-service di condivisione modelli lanciata da Alibaba DAMO Academy", + "apiKey": "API Key", + "apiKeyPlaceholder": "Inserisci ModelScope API Key", + "apiKeyHelper": "Ottieni la tua API Key dalla console ModelScope", + "baseUrl": "Indirizzo API", + "baseUrlHelper": "Indirizzo del servizio ModelScope API", + "connected": "Connesso", + "notConnected": "Non connesso", + "connecting": "Connessione...", + "verifySuccess": "Verifica riuscita", + "verifyFailed": "Verifica non riuscita", + "keyRequired": "Inserisci API Key", + "invalidKey": "API Key non valida", + "networkError": "Errore di connessione di rete", + "mcpSync": { + "title": "Sincronizza servizi MCP", + "description": "Sincronizza server MCP da ModelScope nella configurazione locale, per aggiungere rapidamente strumenti MCP comuni. Tutti i servizi sono disattivati per impostazione predefinita e possono essere attivati manualmente dopo l'importazione.", + "sync": "Avvia sincronizzazione", + "syncing": "Sincronizzazione...", + "pageSize": "Elementi per pagina", + "pageNumber": "Numero pagina", + "pageNumberPlaceholder": "Inserisci numero pagina", + "imported": "{count} servizi importati", + "skipped": "{count} servizi saltati", + "errors": "{count} errori", + "errorDetails": "Dettagli errore", + "noApiKey": "Configura prima ModelScope API Key", + "noServersFound": "Nessun servizio MCP disponibile trovato", + "fetchingServers": "Recupero lista server MCP...", + "convertingServers": "Conversione configurazione server...", + "importingServers": "Importazione configurazione server...", + "syncComplete": "Sincronizzazione completata", + "serverAlreadyExists": "Server già esistente, importazione saltata", + "noOperationalUrls": "Nessun indirizzo operativo disponibile trovato", + "invalidServerData": "Dati server non validi", + "authenticationFailed": "Autenticazione non riuscita, controlla API Key" + }, + "details": { + "title": "Dettagli impostazioni provider", + "apiConfig": "Configurazione API", + "rateLimitConfig": "Configurazione limite di frequenza", + "modelManagement": "Gestione modelli", + "safetySettings": "Impostazioni sicurezza", + "specialConfig": "Configurazione speciale", + "mcpSync": "Sincronizzazione MCP", + "operationalServers": "Server operativi", + "syncFromModelScope": "Sincronizza da ModelScope", + "operationalDescription": "Sincronizza server MCP direttamente utilizzabili dalla piattaforma ModelScope" + } + }, + "tts": { + "title": "Text-to-Speech (TTS)", + "description": "Genera voce dal testo; le voice vengono mostrate nella lista modelli sotto.", + "audioFormat": { + "label": "Formato audio", + "placeholder": "Seleziona formato", + "helper": "MP3 è consigliato nella maggior parte dei casi." + }, + "language": { + "label": "Lingua", + "placeholder": "Es. en", + "helper": "Lingue supportate: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "Modello TTS", + "placeholder": "voiceai-tts-v1-latest", + "helper": "Consulta la documentazione Voice.ai per i modelli disponibili." + }, + "agentId": { + "label": "Voice Agent ID", + "placeholder": "Incolla voice agent id", + "helper": "Questo ID è necessario per le chiamate in tempo reale." + }, + "temperature": { + "label": "Temperatura", + "helper": "Parametro di casualità (0-2)." + }, + "topP": { + "label": "Top P", + "helper": "Campionamento nucleus (0-1)." + } + }, + "dialog": { + "disableModel": { + "title": "Conferma disattivazione modello", + "content": "Confermi di voler disattivare il modello \"{name}\"?", + "confirm": "Disattiva" + }, + "disableAllModels": { + "title": "Conferma disattivazione di tutti i modelli", + "content": "Confermi di voler disattivare tutti i modelli di \"{name}\"?", + "confirm": "Disattiva tutti" + }, + "configModels": { + "title": "Configura lista modelli", + "description": "Seleziona i modelli da attivare o disattivare" + }, + "verify": { + "missingFields": "Inserisci API Key e API URL", + "failed": "Verifica non riuscita", + "success": "Verifica riuscita", + "failedDesc": "Verifica API Key o configurazione non riuscita. Controlla le informazioni configurate", + "successDesc": "API Key e configurazione verificate correttamente, puoi usarle normalmente", + "unauthorized": "Autenticazione non riuscita, API Key non valida o scaduta", + "serverError": "Errore server, riprova più tardi", + "connectionError": "Errore di connessione, controlla rete e indirizzo API" + }, + "addCustomProvider": { + "title": "Aggiungi provider personalizzato", + "description": "Compila le informazioni necessarie del provider", + "name": "Nome", + "namePlaceholder": "Inserisci nome provider", + "apiType": "Tipo API", + "apiTypePlaceholder": "Seleziona tipo API", + "apiKey": "API Key", + "apiKeyPlaceholder": "Inserisci API Key", + "baseUrl": "Indirizzo API", + "baseUrlPlaceholder": "Inserisci indirizzo base API", + "enable": "Attiva provider" + }, + "providerDeeplinkImport": { + "title": "Importa provider", + "description": "Conferma la configurazione provider analizzata prima di importarla.", + "type": "Tipo", + "url": "Indirizzo", + "key": "Chiave", + "overwriteWarning": "Questa importazione sovrascriverà la configurazione corrente del provider.", + "confirming": "Importazione..." + }, + "baseUrlUnlock": { + "title": "Conferma modifica Base URL", + "description": "Per questo tipo di provider è sconsigliato modificare la Base URL; un indirizzo errato può causare errori di richiesta o comportamenti anomali. Puoi continuare manualmente se confermi il rischio.", + "confirm": "Continua modifica" + }, + "deleteProvider": { + "title": "Conferma eliminazione provider", + "content": "Confermi di voler eliminare il provider \"{name}\"? Questa operazione non può essere recuperata.", + "confirm": "Elimina" + }, + "deleteModel": { + "title": "Conferma eliminazione modello", + "content": "Confermi di voler eliminare il modello \"{name}\"? Questa operazione non può essere recuperata.", + "confirm": "Elimina" + }, + "pullModel": { + "title": "Pull modello", + "description": "Seleziona i modelli da scaricare in locale", + "pull": "Pull" + }, + "modelCheck": { + "title": "Controllo modello", + "description": "Seleziona un modello per testare connessione e disponibilità", + "model": "Seleziona modello", + "modelPlaceholder": "Seleziona il modello da testare", + "test": "Avvia test", + "checking": "Test...", + "success": "Test modello riuscito", + "failed": "Test modello non riuscito", + "noModels": "Questo provider non ha modelli disponibili" + } + }, + "pullModels": "Pull modelli", + "refreshModels": "Aggiorna modelli", + "modelsRunning": "Modelli in esecuzione", + "runningModels": "Modelli in esecuzione", + "noRunningModels": "Nessun modello in esecuzione", + "deleteModel": "Elimina modello", + "deleteModelConfirm": "Confermi di voler eliminare il modello \"{name}\"? Questa operazione non può essere recuperata.", + "noLocalModels": "Nessun modello locale", + "localModels": "Modelli locali", + "azureApiVersion": "Versione API", + "safety": { + "title": "Impostazioni sicurezza", + "blockNone": "Non bloccare", + "blockSome": "Blocca rischi bassi", + "blockMost": "Blocca rischi medi", + "blockHighest": "Blocca rischi alti" + }, + "serverList": "Elenco server", + "totalServers": "Totale server", + "addServer": "Aggiungi server", + "autoStart": "Avvio automatico", + "githubCopilotAuth": "Autenticazione GitHub Copilot", + "githubCopilotConnected": "GitHub Copilot connesso", + "githubCopilotNotConnected": "GitHub Copilot non connesso", + "loginWithGitHub": "Accedi con GitHub", + "loggingIn": "Accesso...", + "githubCopilotClientId": "Client ID personalizzato", + "githubCopilotClientIdHint": "Opzionale, lascia vuoto per usare il Client ID predefinito; influisce solo sull'autorizzazione GitHub Copilot.", + "githubCopilotLoginTip": "Fai clic per autorizzare DeepChat ad accedere al tuo abbonamento GitHub Copilot", + "loginSuccess": "Accesso riuscito", + "loginFailed": "Accesso non riuscito", + "tokenValid": "Token valido", + "tokenInvalid": "Token non valido", + "disconnect": "Disconnetti", + "disconnected": "Disconnessione riuscita", + "disconnectFailed": "Disconnessione non riuscita", + "keyStatus": { + "usage": "Usato", + "remaining": "Quota rimanente" + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "bedrockLimitTip": "* Supporta solo Anthropic Claude (inclusi modelli Opus, Sonnet, Haiku)", + "bedrockVerifyTip": "DeepChat usa il modello Claude 3.5 Sonnet per la verifica; se non hai permesso di chiamare questo modello, la verifica fallirà. Questo non influisce sull'uso degli altri modelli.", + "center": { + "title": "Provider Center", + "description": "Gestisci connessioni provider, modelli e configurazioni avanzate.", + "noApiUrl": "API URL non configurato", + "enabledModels": "{count} modelli attivi", + "noAdvancedConfig": "Questo provider non ha configurazioni avanzate extra.", + "status": { + "connected": "Connected", + "keyMissing": "Key missing", + "disabled": "Disabled", + "local": "Local" + }, + "tabs": { + "connection": "Connect", + "models": "Models", + "advanced": "Advanced" + } + } + }, + "knowledgeBase": { + "title": "Impostazioni base di conoscenza", + "addKnowledgeBase": "Aggiungi base di conoscenza", + "selectKnowledgeBaseType": "Seleziona il tipo di base di conoscenza da aggiungere", + "difyDescription": "La base di conoscenza Dify ti aiuta a gestire e usare dati documentali.", + "comingSoon": "In arrivo", + "featureNotAvailable": "Questa funzione non è ancora disponibile", + "addDifyConfig": "Aggiungi configurazione Dify", + "apiKey": "API Key", + "datasetId": "ID dataset", + "endpoint": "Indirizzo API", + "configAdded": "Configurazione aggiunta", + "configAddedDesc": "Configurazione {name} aggiunta correttamente", + "addConfig": "Aggiungi configurazione", + "moreComingSoon": "Altri tipi di base di conoscenza in arrivo", + "configUpdated": "Configurazione aggiornata", + "configUpdatedDesc": "Configurazione {name} aggiornata correttamente", + "descriptionPlaceholder": "Es.: base di conoscenza documentazione prodotti aziendali", + "ragflowTitle": "Base di conoscenza RAGFlow", + "ragflowDescription": "RAGFlow è un potente sistema di gestione della base di conoscenza, con vari metodi di recupero e funzioni di gestione documenti.", + "addRagflowConfig": "Aggiungi configurazione RAGFlow", + "editRagflowConfig": "Modifica configurazione RAGFlow", + "dify": "Base di conoscenza Dify", + "editDifyConfig": "Modifica configurazione Dify", + "fastgptTitle": "Base di conoscenza FastGPT", + "fastgptDescription": "FastGPT è un potente sistema di gestione della base di conoscenza, con vari metodi di recupero e funzioni di gestione documenti.", + "addFastGptConfig": "Aggiungi configurazione FastGPT", + "editFastGptConfig": "Modifica configurazione FastGPT", + "builtInKnowledgeTitle": "Base di conoscenza integrata", + "builtInKnowledgeDescription": "La base di conoscenza integrata offre alcune implementazioni semplici per funzionalità di base anche offline.", + "addBuiltinKnowledgeConfig": "Aggiungi configurazione base di conoscenza integrata", + "editBuiltinKnowledgeConfig": "Modifica configurazione base di conoscenza integrata", + "descriptionDesc": "Descrizione della base di conoscenza, così l'AI può decidere se consultarla", + "embeddingModel": "Modello embedding", + "selectEmbeddingModel": "Seleziona modello embedding", + "selectEmbeddingModelHelper": "Il modello embedding non può essere modificato dopo la creazione della base di conoscenza", + "rerankModel": "Modello rerank", + "selectRerankModel": "Seleziona modello rerank", + "chunkSize": "Dimensione blocco", + "chunkOverlap": "Dimensione sovrapposizione", + "fragmentsNumber": "Numero frammenti documento richiesti", + "chunkSizeHelper": "Segmenta il documento in blocchi; la dimensione di ogni blocco non deve superare il limite di contesto del modello", + "chunkOverlapHelper": "Quantità di contenuto ripetuta tra blocchi di testo adiacenti, per mantenere continuità di contesto e migliorare l'elaborazione di testi lunghi", + "fragmentsNumberHelper": "Più frammenti vengono richiesti, più informazioni vengono allegate, ma maggiore è il consumo di token", + "modelNotFound": "Provider {provider} o modello {model} non trovato", + "modelNotFoundDesc": "Assicurati che il modello sia configurato correttamente e attivo. Puoi controllare la configurazione modello nelle impostazioni provider.", + "removeBuiltinKnowledgeConfirmTitle": "Confermi l'eliminazione della base di conoscenza integrata {name}?", + "removeBuiltinKnowledgeConfirmDesc": "Eliminare la configurazione della base di conoscenza integrata rimuoverà tutti i dati correlati e non potrà essere annullato. Procedi con cautela.", + "advanced": "Opzioni avanzate", + "dimensions": "Dimensioni embedding", + "dimensionsPlaceholder": "Dimensione embedding, es. 1024", + "autoDetectDimensions": "Rileva automaticamente dimensioni embedding", + "autoDetectHelper": "Il rilevamento automatico delle dimensioni embedding consuma una piccola quantità di Tokens", + "dimensionsHelper": "Assicurati che il modello supporti la dimensione embedding impostata", + "autoDetectDimensionsError": "Rilevamento automatico dimensioni embedding non riuscito", + "normalized": "Normalizzazione L2", + "normalizedHelper": "Verifica che il modello supporti la normalizzazione L2 dei vettori di output", + "chunkSizePlaceholder": "Valore predefinito, modifica sconsigliata", + "chunkOverlapPlaceholder": "Valore predefinito, modifica sconsigliata", + "return": "Indietro", + "uploadHelper": "Fai clic per caricare o trascina qui i file", + "fileSupport": "Supporta {accept} e altri {count} formati", + "searchKnowledge": "Cerca base di conoscenza", + "searchKnowledgePlaceholder": "Inserisci contenuto query", + "noData": "Nessun dato", + "file": "File", + "uploadProcessing": "Caricamento", + "uploadCompleted": "Caricamento completato", + "reAdd": "Carica di nuovo", + "uploadError": "Caricamento non riuscito", + "processing": "Caricamento", + "paused": "In pausa", + "unknown": "Stato sconosciuto", + "delete": "Elimina", + "reason": "Motivo", + "deleteSuccess": "Eliminazione riuscita", + "copy": "Copia", + "copySuccess": "Copia riuscita", + "source": "Fonte", + "resumeAllPausedTasks": "Riprendi tutto", + "pauseAllRunningTasks": "Metti tutto in pausa", + "reAddFile": { + "title": "Conferma nuovo caricamento", + "content": "Confermi di voler caricare di nuovo il file \"{fileName}\"?" + }, + "deleteFile": { + "title": "Conferma eliminazione file", + "content": "Confermi di voler eliminare il file \"{fileName}\"? Questa operazione non può essere recuperata." + }, + "dialog": { + "beforequit": { + "title": "Conferma uscita", + "description": "Ci sono attività della base di conoscenza in esecuzione. Vuoi davvero uscire dal software?\nLe attività interrotte potranno essere riprese dopo il riavvio.", + "cancel": "Annulla", + "confirm": "Conferma" + } + }, + "searchError": "Query non riuscita", + "separators": "Separatori blocchi", + "separatorsHelper": "Separatori per segmentare il documento: ogni separatore singolo va racchiuso tra virgolette inglesi (\"\") e i separatori vanno divisi da virgole (,)", + "invalidSeparators": "Separatori non validi", + "selectLanguage": "Seleziona preset", + "separatorsPreset": "Carica preset", + "nowledgeMem": { + "apiKey": "API Key", + "apiKeyHint": "Opzionale.\nSe il tuo servizio richiede una API Key, inseriscila qui.", + "baseUrl": "Base URL", + "configuration": "Configurazione", + "description": "Esporta conversazioni in Nowledge Mem", + "resetConfig": "Ripristina configurazione", + "saveConfig": "Salva", + "seconds": "secondi", + "testConnection": "Testa connessione", + "timeout": "Timeout", + "title": "Configurazione esportazione Nowledge Mem" + } + }, + "mcp": { + "title": "Impostazioni MCP", + "description": "Gestisci e configura server e strumenti MCP (Model Context Protocol)", + "enabledTitle": "Attiva MCP", + "enabledDescription": "Attiva o disattiva funzioni e strumenti MCP", + "enableToAccess": "Attiva prima MCP per accedere alle opzioni di configurazione", + "marketplace": "Vai al mercato MCP per installare con un clic", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Dettagli tecnici", + "httpServer": "Server HTTP", + "localProcess": "Processo locale", + "restartServer": "Riavvia server", + "viewLogs": "Visualizza log", + "starting": "Avvio", + "error": "Errore", + "tabs": { + "servers": "Server", + "tools": "Strumenti", + "prompts": "Prompt", + "resources": "Risorse" + }, + "serverList": "Elenco server", + "addServer": "Aggiungi server", + "running": "In esecuzione", + "stopped": "Arrestato", + "stopServer": "Arresta server", + "startServer": "Avvia server", + "noServersFound": "Nessun server trovato", + "addServerDialog": { + "title": "Aggiungi server", + "description": "Configura un nuovo server MCP" + }, + "editServerDialog": { + "title": "Modifica server", + "description": "Modifica configurazione server MCP" + }, + "serverForm": { + "name": "Nome server", + "namePlaceholder": "Inserisci nome server", + "nameRequired": "Il nome server non può essere vuoto", + "type": "Tipo server", + "typePlaceholder": "Seleziona tipo server", + "typeStdio": "Input/output standard (Stdio)", + "typeSse": "Server-Sent Events (SSE)", + "typeInMemory": "In memoria (InMemory)", + "typeHttp": "Richieste HTTP streaming (HTTP)", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Inserisci Base URL del server (es.: http://localhost:3000)", + "command": "Comando", + "commandPlaceholder": "Inserisci comando", + "commandRequired": "Il comando non può essere vuoto", + "args": "Argomenti", + "argsPlaceholder": "Un argomento per riga", + "addArg": "Aggiungi argomento", + "argPlaceholder": "Inserisci valore argomento", + "argsRequired": "Gli argomenti non possono essere vuoti", + "env": "Variabili d'ambiente", + "envPlaceholder": "Inserisci variabili d'ambiente in formato JSON", + "envInvalid": "Le variabili d'ambiente devono essere in formato JSON valido", + "description": "Descrizione", + "descriptionPlaceholder": "Inserisci descrizione server", + "descriptions": "Descrizione", + "descriptionsPlaceholder": "Inserisci descrizione server", + "icon": "Icona", + "iconPlaceholder": "Inserisci icona", + "icons": "Icone", + "iconsPlaceholder": "Inserisci icone", + "autoApprove": "Autorizzazione automatica", + "autoApproveAll": "Tutto", + "autoApproveRead": "Lettura", + "autoApproveWrite": "Scrittura", + "autoApproveHelp": "Seleziona i tipi di operazione da autorizzare automaticamente senza conferma dell'utente", + "submit": "Invia", + "add": "Aggiungi", + "update": "Aggiorna", + "cancel": "Annulla", + "jsonConfigIntro": "Puoi incollare direttamente una configurazione JSON o scegliere la configurazione manuale del server.", + "jsonConfig": "Configurazione JSON", + "jsonConfigPlaceholder": "Incolla la configurazione del server MCP in formato JSON", + "jsonConfigExample": "Esempio configurazione JSON", + "parseSuccess": "Configurazione analizzata correttamente", + "configImported": "Configurazione importata correttamente", + "parseError": "Errore di analisi", + "skipToManual": "Passa alla configurazione manuale", + "parseAndContinue": "Analizza e continua", + "jsonParseError": "Analisi JSON non riuscita", + "browseMarketplace": "Sfoglia mercato servizi MCP", + "imageModel": "Modello visivo", + "customHeadersParseError": "Analisi Header personalizzati non riuscita", + "customHeaders": "Header richiesta personalizzati", + "clickToEdit": "Fai clic per modificare e vedere il contenuto completo", + "invalidKeyValueFormat": "Formato header richiesta errato, controlla che l'input sia corretto", + "npmRegistry": "NPM Registry personalizzato", + "npmRegistryPlaceholder": "Imposta NPM Registry personalizzato; lascia vuoto per far scegliere automaticamente il più veloce", + "browseHigress": "Sfoglia mercato Higress MCP", + "selectFolderError": "Errore selezione cartella", + "folders": "Cartelle con accesso consentito", + "addFolder": "Aggiungi cartella", + "noFoldersSelected": "Nessuna cartella selezionata", + "useE2B": "Attiva sandbox E2B", + "e2bDescription": "Esegui codice Python con sandbox E2B", + "e2bApiKey": "E2B ApiKey", + "e2bApiKeyPlaceholder": "Inserisci qui le tue E2B Api Keys, es. e2b_1111xx*****", + "e2bApiKeyHelp": "Vai su e2b.dev per ottenere la tua ApiKey", + "e2bApiKeyRequired": "Per attivare E2B è necessario inserire ApiKey" + }, + "deleteServer": "Elimina server", + "editServer": "Modifica server", + "setDefault": "Imposta predefinito", + "removeDefault": "Rimuovi predefinito", + "isDefault": "Server predefinito", + "default": "Predefinito", + "setAsDefault": "Imposta come server predefinito", + "removeServer": "Elimina server", + "autoStart": "Avvio automatico", + "confirmRemoveServer": "Vuoi davvero eliminare il server {name}? Questa operazione non può essere annullata.", + "removeServerDialog": { + "title": "Elimina server" + }, + "confirmDelete": { + "title": "Conferma eliminazione", + "description": "Vuoi davvero eliminare il server {name}? Questa operazione non può essere annullata.", + "confirm": "Elimina", + "cancel": "Annulla" + }, + "resetToDefault": "Ripristina servizi predefiniti", + "resetConfirmTitle": "Ripristina servizi predefiniti", + "resetConfirmDescription": "Questa operazione ripristinerà tutti i server predefiniti mantenendo i server personalizzati. Qualsiasi modifica ai server predefiniti andrà persa.", + "resetConfirm": "Ripristina", + "builtInServers": "Servizi integrati", + "customServers": "Servizi personalizzati", + "builtIn": "Integrato", + "cannotRemoveBuiltIn": "Impossibile eliminare servizio integrato", + "builtInServerCannotBeRemoved": "I servizi integrati non possono essere eliminati; puoi modificare solo parametri e variabili d'ambiente", + "maxDefaultServersReached": "Puoi impostare al massimo 3 server predefiniti", + "removeDefaultFirst": "Rimuovi prima alcuni server predefiniti", + "higressMarket": "Vai all'installazione Higress MCP", + "totalServers": "Totale server", + "npmRegistry": { + "title": "Sorgente NPM", + "currentSource": "Sorgente corrente", + "cached": "Cache", + "lastChecked": "Ultimo controllo", + "refresh": "Aggiorna", + "advanced": "Avanzate", + "advancedSettings": "Impostazioni avanzate", + "advancedSettingsDesc": "Configura opzioni avanzate della sorgente NPM, incluse rilevazione automatica e sorgente personalizzata", + "autoDetect": "Rileva automaticamente sorgente ottimale", + "autoDetectDesc": "All'avvio rileva automaticamente e usa la sorgente NPM più veloce", + "customSource": "Sorgente personalizzata", + "customSourcePlaceholder": "Inserisci indirizzo sorgente NPM personalizzato", + "currentCustom": "Sorgente personalizzata corrente", + "justNow": "Adesso", + "minutesAgo": "{minutes} minuti fa", + "hoursAgo": "{hours} ore fa", + "daysAgo": "{days} giorni fa", + "refreshSuccess": "Sorgente NPM aggiornata correttamente", + "refreshSuccessDesc": "Sorgente NPM ottimale rilevata e aggiornata", + "refreshFailed": "Aggiornamento sorgente NPM non riuscito", + "autoDetectUpdated": "Impostazione rilevamento automatico aggiornata", + "autoDetectEnabled": "Rilevamento automatico sorgente NPM ottimale attivato", + "autoDetectDisabled": "Rilevamento automatico disattivato, verrà usata la sorgente predefinita", + "updateFailed": "Aggiornamento impostazione non riuscito", + "customSourceSet": "Sorgente personalizzata impostata", + "customSourceSetDesc": "Sorgente NPM personalizzata impostata: {registry}", + "customSourceCleared": "Sorgente personalizzata cancellata", + "customSourceClearedDesc": "Sorgente NPM personalizzata cancellata, verrà usato il rilevamento automatico", + "invalidUrl": "URL non valido", + "invalidUrlDesc": "Inserisci un indirizzo HTTP o HTTPS valido", + "testing": "Test sorgente NPM", + "testingDesc": "Test connessione alla sorgente {registry}...", + "testFailed": "Test sorgente NPM non riuscito", + "testFailedDesc": "Impossibile connettersi a {registry}, errore: {error}. Controlla che l'URL sia corretto o la connessione di rete.", + "redetectingOptimal": "Nuovo rilevamento sorgente NPM ottimale...", + "redetectComplete": "Nuovo rilevamento completato", + "redetectCompleteDesc": "Sorgente NPM ottimale corrente rilevata e impostata", + "redetectFailed": "Nuovo rilevamento non riuscito", + "redetectFailedDesc": "Impossibile rilevare nuovamente la sorgente ottimale, verrà usata la configurazione predefinita" + }, + "managedServerReadOnly": "Servizio gestito da DeepChat", + "managedServerReadOnlyDesc": "Gestisci attivazione e permessi nelle impostazioni del plugin corrispondente", + "center": { + "title": "MCP Center", + "running": "Running", + "builtIn": "Built-in", + "custom": "Custom", + "searchPlaceholder": "Cerca MCP servers...", + "noResults": "Nessun MCP server corrispondente", + "command": "Command / URL", + "filters": { + "all": "All", + "running": "Running", + "stopped": "Stopped", + "builtIn": "Built-in", + "custom": "Custom" + } + } + }, + "about": { + "title": "Chi siamo", + "version": "Versione", + "checkUpdate": "Controlla aggiornamenti", + "checking": "Controllo...", + "latestVersion": "Già all'ultima versione" + }, + "display": { + "fontTitle": "Font", + "fontFamily": "Font interfaccia", + "fontFamilyDesc": "Seleziona il font principale dell'interfaccia; lascia vuoto per usare lo stack integrato.", + "codeFontFamily": "Font monospace", + "codeFontFamilyDesc": "Usato nei blocchi di codice e nelle aree monospace.", + "fontDefaultLabel": "Predefinito (stack font integrato)", + "fontSearchPlaceholder": "Cerca font", + "fontSearchEmpty": "Nessun font corrispondente", + "fontReset": "Ripristina predefinito", + "fontSystemLoading": "Caricamento font di sistema...", + "fontUsageHint": "Alcune interfacce richiedono il riavvio dell'app per applicare la modifica. Se il font non è disponibile, verrà usato automaticamente il font predefinito.", + "fontSize": "Dimensione testo", + "text-sm": "Piccolo", + "text-base": "Standard", + "text-lg": "Grande", + "text-xl": "Molto grande", + "text-2xl": "Enorme", + "floatingButton": "Pulsante flottante", + "floatingButtonDesc": "Mostra un pulsante flottante sul desktop per richiamare rapidamente la finestra dell'app" + }, + "shortcuts": { + "title": "Impostazioni scorciatoie", + "pressKeys": "Inserisci scorciatoia", + "pressEnterToSave": "Premi Enter per salvare, Esc per annullare", + "noModifierOnly": "Non puoi usare solo tasti modificatori come scorciatoia", + "keyConflict": "Conflitto scorciatoia, scegli un'altra combinazione", + "clearShortcut": "Cancella scorciatoia", + "zoomIn": "Aumenta dimensione font", + "zoomOut": "Riduci dimensione font", + "zoomReset": "Ripristina dimensione font", + "goSettings": "Apri impostazioni", + "cleanHistory": "Cancella cronologia chat", + "deleteConversation": "Elimina conversazione", + "hideWindow": "Nascondi finestra", + "quitApp": "Esci dall'app", + "toggleSidebar": "Mostra/nascondi barra laterale", + "toggleWorkspace": "Mostra/nascondi workspace", + "newWindow": "Apri nuova finestra", + "showHideWindow": "Mostra/nascondi finestra", + "newConversation": "Nuova conversazione", + "quickSearch": "Focus ricerca", + "closeWindow": "Chiudi finestra corrente" + }, + "acp": { + "title": "ACP Agent", + "description": "Gestisci ACP Agent locali avviati da DeepChat.", + "enabledTitle": "Attiva ACP", + "enabledDescription": "Dopo l'attivazione, gli ACP Agent configurati appariranno nella lista modelli.", + "useBuiltinRuntimeTitle": "Usa ambiente integrato DeepChat", + "useBuiltinRuntimeDescription": "Se selezionato, bypassa i comandi node e uv di sistema e usa le versioni incluse in DeepChat.", + "enableToAccess": "Attiva ACP per configurare Agent.", + "registryInstallEntry": "Installa Agent", + "registryInstallEntryDescription": "Cerca e installa Agent da ACP Registry; al termine torna qui per attivarli e configurarli.", + "addCustomAgent": "Aggiungi Agent personalizzato", + "customEmpty": "Ancora nessun Agent personalizzato.", + "customDeleteConfirm": "Eliminare l'Agent personalizzato \"{name}\"?", + "builtinSectionTitle": "Registry ACP Agent", + "builtinSectionDescription": "Carica dinamicamente Agent da ACP Registry, con cache locale, installazione automatica e riparazione runtime.", + "builtinHint": "Avvia {name} con queste impostazioni.", + "disabledBadge": "Disattivato", + "manageProfiles": "Configurazioni", + "addProfile": "Aggiungi configurazione", + "activeProfile": "Configurazione attiva", + "profilePlaceholder": "Seleziona configurazione", + "profileSwitched": "Configurazione cambiata", + "customSectionTitle": "Agent personalizzato", + "customSectionDescription": "Trasforma qualsiasi comando compatibile ACP in un Agent riutilizzabile.", + "mcpAccessTitle": "MCP disponibili", + "mcpAccessEmpty": "Nessun MCP selezionabile.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "MCP condivisi", + "sharedMcpDescription": "Tutti gli ACP Agent condividono la stessa configurazione di accesso MCP.", + "installedSectionTitle": "Agent installati", + "installedSectionDescription": "Solo i Registry Agent installati appaiono qui per attivazione, debug e override delle variabili d'ambiente.", + "installedCount": "{count} installati", + "installedEmptyTitle": "Ancora nessun Registry Agent installato", + "installedEmptyDescription": "Installa prima un Agent da ACP Registry; dopo l'installazione verrà mostrata qui l'interfaccia di configurazione.", + "registryCount": "{count} Agent", + "registryEmpty": "Nessun Registry Agent disponibile con i filtri correnti.", + "registryOverlayEmpty": "Nessun Agent installabile con i filtri correnti.", + "registryRefresh": "Aggiorna Registry", + "registryRepair": "Ripara", + "registryInstallAction": "Installa", + "registryUninstallAction": "Disinstalla", + "registryUninstallConfirm": "Disinstallare \"{name}\"?", + "registryUninstallDescription": "DeepChat disattiverà questo Agent e, se applicabile, pulirà i dati di installazione gestiti localmente. Potrai reinstallarlo in seguito da ACP Registry.", + "registryUninstallFailed": "Disinstallazione Agent non riuscita", + "registryInstallTitle": "ACP Registry", + "registryInstallDescription": "Cerca, filtra e installa ACP Agent. Dopo l'installazione torna alla pagina impostazioni per configurarli.", + "registryLearnMore": "Scopri di più", + "registryRepository": "Repository", + "registrySearchPlaceholder": "Cerca ACP Registry Agent...", + "installFilters": { + "all": "Tutti", + "installed": "Installati", + "notInstalled": "Non installati" + }, + "filters": { + "all": "Tutti gli stati", + "enabled": "Solo attivi", + "installed": "Solo installati", + "attention": "Solo da gestire" + }, + "envOverrideTitle": "Override variabili d'ambiente", + "envOverridePlaceholder": "Un KEY=VALUE per riga", + "installState": { + "installed": "Installato", + "installing": "Installazione", + "error": "Installazione non riuscita", + "notInstalled": "Non installato" + }, + "loading": "Caricamento dati ACP...", + "none": "Nessuno", + "saveSuccess": "Configurazione salvata", + "saveFailed": "Salvataggio non riuscito", + "deleteSuccess": "Eliminazione riuscita", + "initialize": "Inizializza", + "initializing": "Inizializzazione...", + "initializeDescription": "Comandi di inizializzazione aperti ed eseguiti nel terminale", + "initializeSuccess": "Inizializzazione avviata", + "initializeFailed": "Inizializzazione non riuscita", + "missingFieldsTitle": "Nome e comando sono obbligatori", + "missingFieldsDesc": "Compila prima nome e comando.", + "command": "Comando", + "commandPlaceholder": "Percorso eseguibile o script", + "args": "Argomenti", + "argsPlaceholder": "Opzionale, separa con spazi e usa virgolette quando necessario.", + "env": "Variabili d'ambiente", + "addEnv": "Aggiungi variabile", + "envKeyPlaceholder": "KEY", + "envValuePlaceholder": "VALUE", + "profileDialog": { + "addBuiltinTitle": "Aggiungi configurazione {name}", + "editBuiltinTitle": "Modifica configurazione {name}", + "addCustomTitle": "Aggiungi Agent personalizzato", + "editCustomTitle": "Modifica Agent personalizzato", + "builtinHint": "Prepara preset diversi per scenari diversi e cambiali rapidamente dal selettore modelli.", + "customHint": "Compila comando, argomenti e variabili d'ambiente necessari per avviare l'Agent.", + "profileName": "Nome configurazione", + "profileNamePlaceholder": "Es.: Workstation", + "agentName": "Nome Agent", + "agentNamePlaceholder": "Es.: My ACP Agent" + }, + "profileManager": { + "title": "Elenco configurazioni", + "description": "Cambia, modifica o elimina le configurazioni di avvio salvate.", + "count": "{count} configurazioni", + "empty": "Nessuna configurazione.", + "active": "Attiva corrente", + "setActive": "Imposta attiva", + "deleteConfirm": "Eliminare la configurazione \"{name}\"?", + "cannotDeleteTitle": "Mantieni almeno una configurazione", + "cannotDeleteDesc": "Gli Agent integrati richiedono almeno una configurazione.", + "noAgent": "Seleziona l'Agent da gestire." + }, + "terminal": { + "title": "Terminale inizializzazione", + "waiting": "In attesa dell'avvio inizializzazione...", + "starting": "Avvio inizializzazione...", + "close": "Chiudi", + "closing": "Chiusura...", + "exitSuccess": "Processo completato correttamente (codice uscita: {code})", + "exitError": "Processo terminato con errore (codice uscita: {code})", + "processError": "Errore processo", + "paste": "Incolla", + "pasteError": "Incolla dagli appunti non riuscito", + "status": { + "idle": "Inattivo", + "running": "In esecuzione", + "completed": "Completato", + "error": "Errore" + } + }, + "dependency": { + "title": "Dipendenze esterne mancanti", + "description": "Prima dell'inizializzazione è necessario installare queste dipendenze.", + "installCommands": "Comandi installazione", + "downloadUrl": "Link download", + "copy": "Copia", + "copied": "Copiato negli appunti", + "copyFailed": "Copia non riuscita" + }, + "debug": { + "title": "ACP Inspector", + "description": "Controlla lo stato di salute di \"{name}\" e invia richieste ACP raw per osservare il flusso eventi.", + "entry": "Inspector", + "healthCheck": "Health Check", + "healthChecking": "Controllo...", + "healthCheckFailed": "Health Check non riuscito", + "workdirPlaceholder": "Lascia vuoto per usare la directory di lavoro predefinita", + "close": "Chiudi", + "customMethod": "Nome metodo personalizzato", + "customMethodPlaceholder": "Es. session/ping", + "payloadHint": "Puoi modificare il JSON prima dell'invio.", + "format": "Formatta JSON", + "resetTemplate": "Ripristina template", + "clearHistory": "Cancella record", + "send": "Invia richiesta", + "sending": "Invio...", + "processReady": "Processo pronto", + "processNotReady": "Esegui prima Health Check", + "needInitialize": "Esegui prima Health Check", + "events": "Eventi", + "eventCount": "{count} voci", + "empty": "Nessun evento di debug.", + "parseError": "Analisi JSON non riuscita", + "customMethodRequired": "Inserisci nome metodo esteso", + "requestFailed": "Richiesta non riuscita", + "methods": { + "initialize": "initialize", + "newSession": "session/new", + "loadSession": "session/load", + "prompt": "session/prompt", + "cancel": "session/cancel", + "setSessionMode": "session/setMode", + "setSessionModel": "session/setModel", + "extMethod": "ext/method", + "extNotification": "ext/notification" + }, + "eventKinds": { + "request": "Richiesta", + "response": "Risposta", + "notification": "Notifica", + "permission": "Permesso", + "lifecycle": "Ciclo di vita", + "stderr": "stderr", + "error": "Errore" + } + } + }, + "rateLimit": { + "title": "Limite di frequenza", + "description": "Controlla l'intervallo tra richieste per evitare di superare i limiti API", + "intervalLimit": "Intervallo richieste", + "intervalUnit": "secondi", + "intervalHelper": "Intervallo minimo tra due richieste; disattiva il limite se non serve", + "lastRequestTime": "Ultima richiesta", + "queueLength": "Lunghezza coda", + "nextAllowedTime": "Prossima richiesta consentita", + "never": "Mai", + "justNow": "Adesso", + "secondsAgo": "secondi fa", + "minutesAgo": "minuti fa", + "immediately": "Subito", + "secondsLater": "secondi dopo", + "confirmDisableTitle": "Conferma disattivazione limite di frequenza", + "confirmDisableMessage": "Il valore non può essere minore o uguale a 0. Vuoi disattivare il limite di frequenza?", + "confirmDisable": "Disattiva limite", + "disabled": "Limite di frequenza disattivato", + "disabledDescription": "La funzione limite di frequenza è stata disattivata" + }, + "promptSetting": { + "resetToDefault": "Ripristina prompt predefinito", + "resetToDefaultSuccess": "Prompt di sistema predefinito ripristinato", + "resetToDefaultFailed": "Ripristino non riuscito, riprova" + }, + "skills": { + "title": "Impostazioni Skills", + "description": "Gestisci e configura i moduli skill dell'assistente AI", + "draftSuggestions": { + "title": "Suggerisci Skill Draft dopo le attività", + "description": "Al termine di un'attività, consenti all'Agent di suggerire skill draft temporanei quando rileva flussi riutilizzabili. I draft vengono salvati prima in una directory temporanea e richiedono una tua decisione manuale per essere importati e installati." + }, + "openFolder": "Apri cartella", + "addSkill": "Aggiungi skill", + "empty": "Nessuna skill", + "emptyHint": "Fai clic su \"Aggiungi skill\" per installare una nuova skill", + "noResults": "Nessuna skill corrispondente trovata", + "search": "Cerca skill...", + "count": "{count} skill totali", + "install": { + "title": "Installa skill", + "description": "Scegli il metodo di installazione skill", + "tabFolder": "Cartella", + "tabZip": "ZIP", + "tabUrl": "URL", + "fromFolder": "Installa da cartella", + "selectFolder": "Seleziona cartella skill", + "folderHint": "Fai clic per selezionare la cartella skill", + "folderTip": "Supporta import diretto da altri client come ~/.claude/skills/", + "zipHint": "Fai clic per selezionare file ZIP", + "urlPlaceholder": "Inserisci URL di download ZIP skill", + "urlHint": "Inserisci il link di download del pacchetto skill", + "installButton": "Installa", + "installing": "Installazione...", + "success": "Installazione riuscita", + "successMessage": "skill {name} installata correttamente", + "failed": "Installazione non riuscita", + "dragNotSupported": "Trascinamento non supportato, fai clic per selezionare" + }, + "delete": { + "title": "Elimina skill", + "description": "Vuoi davvero eliminare la skill {name}? Questa operazione non può essere annullata.", + "success": "Eliminazione riuscita", + "successMessage": "skill {name} eliminata correttamente", + "failed": "Eliminazione non riuscita" + }, + "card": { + "scripts": "{count} script", + "env": "{count} variabili d'ambiente", + "pythonShort": "Py", + "nodeShort": "Node" + }, + "edit": { + "title": "Modifica skill", + "placeholder": "Modifica qui il contenuto skill...", + "readFailed": "Lettura non riuscita", + "success": "Salvataggio riuscito", + "failed": "Salvataggio non riuscito", + "name": "Nome", + "namePlaceholder": "Nome skill", + "nameHint": "Il nome skill non può essere modificato dopo la creazione", + "description": "Descrizione", + "descriptionPlaceholder": "Descrizione skill", + "allowedTools": "Strumenti extra", + "allowedToolsPlaceholder": "Read, Grep, Bash", + "allowedToolsHint": "Elenco di nomi strumenti separati da virgole", + "content": "Contenuto skill", + "runtimeTitle": "Runtime", + "runtimeHint": "Scegli la strategia di risoluzione Python e Node per gli script integrati.", + "pythonRuntime": "Runtime Python", + "nodeRuntime": "Runtime Node", + "envTitle": "Variabili d'ambiente", + "envWarning": "Mascherate solo nella UI; in realtà verranno scritte in chiaro nel file sidecar della skill.", + "scriptsTitle": "Script integrati", + "scriptsHint": "Solo gli script sotto scripts/ saranno esposti all'agent tramite skill_run.", + "noScripts": "Nessuno script eseguibile trovato", + "scriptEnabled": "Attivo", + "scriptDescription": "Override descrizione", + "scriptDescriptionPlaceholder": "Opzionale, descrizione script mostrata all'agent", + "runtime": { + "auto": "Fallback automatico", + "system": "Runtime di sistema", + "builtin": "Runtime integrato" + }, + "files": "Contenuto cartella", + "noFiles": "Nessun file" + }, + "conflict": { + "title": "skill già esistente", + "description": "Esiste già una skill chiamata \"{name}\". Vuoi sovrascriverla?", + "overwrite": "Sovrascrivi" + }, + "sync": { + "title": "Sincronizza", + "import": "Importa da altri strumenti...", + "export": "Esporta", + "importTitle": "Importa Skills da altri strumenti", + "exportTitle": "Esporta Skills verso altri strumenti", + "importDescription": "Importa Skills da Claude Code, Cursor e altri strumenti", + "exportDescription": "Esporta Skills verso altri strumenti AI assistant", + "step1Title": "Seleziona strumento sorgente", + "step2Title": "Seleziona Skills da importare", + "step3Title": "Conferma importazione", + "exportStep1Title": "Seleziona Skills da esportare", + "exportStep2Title": "Seleziona strumento target", + "exportStep3Title": "Conferma esportazione", + "scanning": "Scansione...", + "noToolsFound": "Nessuno strumento installato rilevato", + "skillCount": "{count} Skills rilevate", + "notInstalled": "Non installato", + "selectedCount": "{count} selezionati", + "selectAll": "Seleziona tutto", + "deselectAll": "Deseleziona tutto", + "conflict": "Conflitto", + "conflictDescription": "Esiste già una skill con lo stesso nome \"{name}\"", + "batchAction": "Azione batch", + "skip": "Salta", + "skipAll": "Salta tutto", + "overwrite": "Sovrascrivi", + "overwriteAll": "Sovrascrivi tutto", + "rename": "Rinomina", + "renameAll": "Rinomina tutto", + "warnings": "Avvisi conversione", + "previewing": "Anteprima...", + "importing": "Importazione ({current}/{total})...", + "exporting": "Esportazione ({current}/{total})...", + "importButton": "Importa", + "exportButton": "Esporta", + "exportWarnings": "Avvisi esportazione", + "noConflicts": "Nessun conflitto", + "readyToExport": "Pronto a esportare {count} Skills", + "kiroOptions": "Opzioni esportazione Kiro", + "kiroInclusion": "Modalità inclusione", + "kiroOnDemand": "Su richiesta", + "kiroOnDemandDesc": "Usata solo quando richiesta esplicitamente dall'utente", + "kiroAlways": "Sempre", + "kiroAlwaysDesc": "Inclusa automaticamente in ogni conversazione", + "kiroConditional": "Condizionale", + "kiroConditionalDesc": "Inclusa automaticamente in base a pattern file", + "kiroFilePatterns": "Pattern file", + "kiroFilePatternsPlaceholder": "Es.: **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Pattern glob separati da virgole", + "scanError": "Scansione non riuscita", + "previewError": "Anteprima non riuscita", + "loadToolsError": "Caricamento elenco strumenti non riuscito", + "importSuccess": "Importazione riuscita", + "importSuccessMessage": "{count} Skills importate correttamente", + "importPartial": "Importazione parzialmente riuscita", + "importPartialMessage": "Riuscite {success}, saltate {skipped}, non riuscite {failed}", + "importError": "Importazione non riuscita", + "exportSuccess": "Esportazione riuscita", + "exportSuccessMessage": "{count} Skills esportate correttamente", + "exportPartial": "Esportazione parzialmente riuscita", + "exportPartialMessage": "Riuscite {success}, saltate {skipped}, non riuscite {failed}", + "exportError": "Esportazione non riuscita", + "resultSuccess": "Operazione riuscita", + "resultPartial": "Parzialmente riuscita", + "imported": "Importate", + "exported": "Esportate", + "skipped": "Saltate", + "failed": "Non riuscite", + "failedItems": "Elementi non riusciti" + }, + "syncStatus": { + "title": "Strumenti esterni", + "description": "Importa skill da altri AI programming assistant", + "scanning": "Scansione strumenti...", + "noToolsFound": "Nessuno strumento esterno rilevato", + "skillCount": "{count} skill", + "notInstalled": "Non installato", + "notAvailable": "Non disponibile", + "noSkills": "Nessuna skill", + "import": "Importa", + "syncing": "Importazione..." + }, + "syncPrompt": { + "title": "Nuove skill trovate", + "description": "Abbiamo trovato nuove skill in altri AI programming assistant. Vuoi importarle?", + "dontShowAgain": "Non mostrare più questo avviso", + "skip": "Salta", + "importSelected": "Importa selezionate" + } + }, + "environments": { + "title": "Ambienti directory", + "description": "Visualizza le directory progetto usate dalle sessioni e apri rapidamente o imposta una directory predefinita.", + "default": { + "title": "Directory predefinita", + "description": "Le nuove sessioni preselezionano questa directory senza sovrascrivere forzatamente la tua scelta manuale.", + "empty": "Nessuna directory predefinita impostata." + }, + "history": { + "title": "Directory storiche", + "description": "Qui sono mostrate solo le directory effettivamente usate dalle sessioni." + }, + "temp": { + "title": "Directory Temp", + "description": "Gli ambienti sotto la directory temporanea di sistema o il workspace gestito dall'app vengono raccolti qui e compressi per impostazione predefinita." + }, + "actions": { + "refresh": "Aggiorna", + "showMissing": "Mostra directory mancanti", + "open": "Apri", + "setDefault": "Imposta predefinita", + "clearDefault": "Cancella predefinita", + "showTemp": "Mostra Temp", + "hideTemp": "Nascondi Temp" + }, + "badges": { + "default": "Predefinita", + "temp": "Temp", + "missing": "Directory inesistente", + "notInHistory": "Non in cronologia" + }, + "meta": { + "sessions": "{count} sessioni", + "lastUsed": "Uso recente: {value}", + "never": "Mai" + }, + "empty": { + "regular": "Nessun ambiente directory da mostrare.", + "temp": "Nessun ambiente directory Temp." + }, + "errors": { + "openTitle": "Apertura directory non riuscita" + } + }, + "remote": { + "title": "Remoto", + "description": "Configura in modo unificato il controllo remoto tramite Telegram, Feishu / Lark, QQBot, Discord e WeChat iLink.", + "telegram": { + "title": "Telegram", + "description": "Collega un Telegram Bot per controllo remoto in chat private, gruppi e thread argomento.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Telegram bot Token", + "botTokenDescription": "Inserisci il bot Token usato per il controllo remoto Telegram." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Collega un Bot Feishu per controllo remoto in chat private, gruppi e thread argomento.", + "brand": "Brand", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "App ID", + "appIdPlaceholder": "Feishu App ID", + "appSecret": "App Secret", + "appSecretPlaceholder": "Feishu App Secret", + "verificationToken": "Token di verifica", + "verificationTokenPlaceholder": "Token di verifica sottoscrizione eventi Feishu", + "encryptKey": "Chiave cifratura (opzionale)", + "encryptKeyPlaceholder": "Lascia vuoto se la cifratura eventi non è attiva", + "botUser": "Account bot: {name} ({openId})", + "bindings": "Binding: {count}, utenti associati: {pairedUserCount}", + "pairedUserOpenIds": "Open ID utenti associati", + "pairedUserOpenIdsPlaceholder": "Es. ou_xxx, ou_yyy", + "accessRulesDescription": "Completa prima l'associazione in chat privata. Nei gruppi, solo gli utenti associati che menzionano il bot con {'@'} possono controllare la sessione.", + "accessRule1": "In chat privata invia /pair [codice] al bot per completare l'associazione.", + "accessRule2": "Nei gruppi e thread argomento, i messaggi entrano nella sessione solo quando un utente associato menziona il bot con {'@'}." + }, + "discord": { + "title": "Discord", + "description": "Collega un Discord Bot per controllo remoto via DM, menzioni nei canali e Slash Commands.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Discord Bot Token", + "remoteControlDescription": "Il controllo remoto Discord usa un Bot Token, Gateway e flusso REST separati.", + "accessRule1": "Invia /pair [codice] in DM o nel canale target per autorizzare il DM o canale corrente a DeepChat.", + "accessRule2": "I messaggi del canale entrano nella conversazione solo quando il bot viene menzionato, evitando di processare chat normali." + }, + "sections": { + "credentials": "Credenziali", + "remoteControl": "Controllo remoto", + "notifications": "Notifiche", + "accessRules": "Regole di accesso" + }, + "remoteControl": { + "description": "Associa ogni ingresso remoto a una sessione e riusa la stessa sessione tra comandi diversi.", + "allowedUserIds": "ID utente consentiti", + "allowedUserIdsPlaceholder": "Es. 123456789, 987654321", + "defaultAgent": "Agent predefinito", + "defaultAgentPlaceholder": "Seleziona un Agent", + "defaultWorkdir": "Directory predefinita", + "defaultWorkdirPlaceholder": "Seleziona directory predefinita", + "defaultWorkdirHelper": "Directory di lavoro per le sessioni remote. Obbligatoria se l'Agent predefinito è ACP.", + "openPairDialog": "Associa", + "manageBindings": "Gestisci binding", + "pairCode": "Codice associazione", + "noPairCode": "Nessun codice associazione valido al momento", + "pairCodeExpiresAt": "Scadenza: {time}", + "pairDialogTitle": "Associazione {channel}", + "pairDialogDescription": "Dopo aver generato il codice associazione, completa l'associazione nel bot {channel} corrispondente.", + "pairDialogInstructionTelegram": "Invia questo comando al bot Telegram:", + "pairDialogInstructionFeishu": "Invia questo comando nella chat privata del bot Feishu:", + "pairDialogInstructionDiscord": "Invia questo comando al bot Discord in DM o nel canale target:", + "bindingsDialogTitle": "Binding {channel}", + "bindingsDialogDescription": "Rimuovi uno per uno i binding tra ingressi remoti e sessioni DeepChat.", + "bindingsEmpty": "Nessuna sessione associata.", + "pairingSuccessTitle": "Associazione riuscita", + "pairingSuccessDescription": "L'elenco dei soggetti associati è stato aggiornato.", + "pairDialogInstructionQQBot": "Invia questo comando al QQ bot in chat privata o in un gruppo autorizzato:", + "authorizedPrincipalsTitle": "Soggetti autorizzati", + "authorizedPrincipalsDescription": "Questi account {channel} sono autorizzati ad associarsi e controllare le sessioni.", + "authorizedPrincipalsEmpty": "Nessun soggetto autorizzato al momento.", + "sessionBindingsTitle": "Binding sessioni", + "sessionBindingsDescription": "Ogni ingresso remoto qui sotto è attualmente associato a una sessione DeepChat." + }, + "hooks": { + "title": "Notifiche Telegram Hook", + "description": "Riusa lo stesso Telegram Bot per inviare notifiche Hook.", + "chatId": "Chat ID", + "chatIdPlaceholder": "Es. 123456789", + "threadId": "ID argomento (opzionale)", + "threadIdPlaceholder": "ID argomento opzionale" + }, + "status": { + "title": "Stato runtime", + "botUser": "Utente bot: {username} ({id})", + "bindings": "Binding: {count}, offset polling: {pollOffset}", + "states": { + "disabled": "Disattivato", + "stopped": "Arrestato", + "starting": "Avvio", + "running": "In esecuzione", + "backoff": "Nuovo tentativo dopo errore", + "error": "Errore" + }, + "bindingOnly": "Binding: {count}, soggetti associati: {paired}" + }, + "overview": { + "telegram": "{bindingCount} binding, {pairedCount} utenti associati", + "feishu": "{bindingCount} binding, {pairedCount} utenti associati", + "hooksOn": "Attivo", + "hooksOff": "Disattivo", + "qqbot": "{bindingCount} binding, {pairedCount} utenti associati", + "discord": "{bindingCount} binding, {pairedCount} canali associati", + "weixinIlink": "{bindingCount} binding, {accountCount} account, {connectedCount} connessi" + }, + "bindingKinds": { + "dm": "Chat privata", + "group": "Gruppo", + "topic": "Argomento" + }, + "qqbot": { + "title": "QQBot", + "description": "Collega il Bot della piattaforma aperta QQ per controllo tramite chat dirette e menzioni bot in gruppi autorizzati.", + "appId": "App ID", + "appIdPlaceholder": "QQBot App ID", + "clientSecret": "Client Secret", + "clientSecretPlaceholder": "QQBot Client Secret", + "remoteControlDescription": "Gli user_openid nelle chat ufficiali QQ e i member_openid nei gruppi non condividono lo stesso spazio identità; quindi gli utenti vengono autorizzati in chat privata, mentre nei gruppi serve /pair separato.", + "pairedUserIds": "OpenID utenti associati", + "pairedUserIdsPlaceholder": "Es. user_openid_xxx, user_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Collega il Bot ufficiale WeChat iLink con scansione QR e usa l'adapter integrato per gestire le sessioni di controllo remoto.", + "loginDescription": "Dopo il clic sul pulsante sotto, DeepChat aprirà la finestra di login ufficiale WeChat. Completa lì l'autorizzazione iLink Bot con QR. Gli account connessi verranno aggiunti automaticamente alla lista sotto.", + "ownerOnlyNotice": "La prima versione consente il controllo di DeepChat solo al proprietario dell'account corrispondente al login QR.", + "connectButton": "Apri finestra login", + "refreshQrCode": "Riapri finestra login", + "loginDialogTitle": "Connetti WeChat iLink", + "loginDialogDescription": "La pagina di login ufficiale WeChat verrà aperta in una finestra separata. Completa lì l'autorizzazione QR e tieni aperta questa finestra di dialogo fino alla connessione.", + "loginFailed": "Login WeChat iLink non riuscito.", + "loginSuccessTitle": "WeChat iLink connesso", + "loginSuccessDescription": "Account {accountId} disponibile.", + "accountsTitle": "Account", + "accountsDescription": "Ogni account iLink Bot connesso funziona in modo indipendente e mantiene binding e stato runtime propri.", + "noAccounts": "Nessun account WeChat iLink connesso.", + "ownerUserId": "ID utente proprietario: {ownerUserId}", + "baseUrl": "Indirizzo servizio: {baseUrl}", + "accountBindings": "Binding: {count}", + "remoteControlDescription": "Imposta l'Agent predefinito condiviso per gli account WeChat iLink e gestisci i binding sessione creati da questi account.", + "removeAccount": "Rimuovi account", + "restartAccount": "Riavvia account", + "statusSummary": "{accounts} account, {connected} connessi, {bindings} binding", + "qrcodeAlt": "QR code WeChat iLink", + "loginWindowOpened": "La finestra di login ufficiale WeChat è stata aperta. Completa lì l'autorizzazione QR.", + "loginSessionExpired": "Questa sessione di login è scaduta. Riapri la finestra di login e riprova.", + "loginResponseIncomplete": "La risposta di login WeChat iLink è incompleta. Riprova.", + "loginTimedOut": "Timeout in attesa dell'autorizzazione WeChat iLink. Riapri la finestra di login e riprova.", + "loginConnected": "Account WeChat iLink connesso." + } + }, + "plugins": { + "title": "Plugin", + "officialOnly": "Gestisci lo stato di attivazione dei plugin ufficiali integrati nella versione corrente di DeepChat", + "refresh": "Aggiorna", + "empty": "Nessun plugin ufficiale disponibile", + "emptyTitle": "Nessun plugin integrato", + "emptyDescription": "La piattaforma corrente non include plugin ufficiali integrati in questa versione di DeepChat.", + "loadFailed": "Caricamento plugin non riuscito", + "actionFailed": "Operazione plugin non riuscita", + "install": "Installa", + "installFromFile": "Seleziona .dcplugin", + "openRelease": "GitHub Release", + "enable": "Attiva", + "disable": "Disattiva", + "openSettings": "Impostazioni", + "runtime": "Runtime", + "version": "Versione", + "command": "Comando", + "status": { + "enabled": "Attivo", + "disabled": "Disattivato", + "available": "Disponibile" + }, + "runtimeStates": { + "missing": "Non installato", + "installed": "Installato", + "running": "In esecuzione", + "error": "Errore" + } + }, + "controlCenter": { + "groups": { + "overview": "Panoramica", + "setup": "Base", + "models": "Impostazioni Agent", + "tools": "Estensioni capacità", + "knowledge": "Ingegneria contesto", + "system": "Sistema" + }, + "overview": { + "title": "Settings Overview", + "description": "Visualizza insieme stato di provider, MCP, Agent, dati e utilizzo.", + "searchPlaceholder": "Cerca impostazioni, provider, modelli, Agent, MCP...", + "providers": "Providers", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agents", + "data": "Ultimo backup", + "enabledCount": "{count} attivi", + "runningCount": "{count} in esecuzione", + "enabledAgentCount": "{count} Agent attivi", + "providersDescription": "Stato connessione provider", + "deepchatAgentsDescription": "Accesso configurazione Agent", + "mcpOn": "MCP attivo", + "mcpOff": "MCP disattivato", + "syncOn": "Sincronizzazione attiva", + "syncOff": "Sincronizzazione disattivata", + "backupNever": "Mai eseguito backup" + }, + "quickStart": { + "title": "Quick start", + "addApiKey": "Add API Key", + "addApiKeyDesc": "Configura connessione provider", + "enableModel": "Enable Model", + "enableModelDesc": "Attiva modelli disponibili", + "startMcp": "Start MCP Server", + "startMcpDesc": "Avvia servizio strumenti", + "backupNow": "Backup Now", + "backupNowDesc": "Esegui subito backup dati" + }, + "needsAttention": { + "title": "Needs attention", + "empty": "Nessun elemento da gestire", + "noModels": "Nessun modello attivo", + "privacyOff": "Modalità privacy non attiva", + "backupNever": "Dati mai salvati in backup" + }, + "activity": { + "title": "Modifiche impostazioni recenti", + "description": "Mostra solo le 200 modifiche impostazioni più recenti; il database conserva le 2000 più recenti.", + "when": "Ora", + "category": "Tipo", + "change": "Modifica", + "empty": "Nessuna modifica registrata", + "emptyDescription": "Le modifiche impostazioni riuscite appariranno qui.", + "settingUpdated": "Impostazione aggiornata: {key}", + "providerUpdated": "Provider aggiornato: {name}", + "providerCreated": "Provider aggiunto: {name}", + "providerRemoved": "Provider rimosso: {name}", + "providerModelsRefreshed": "Modelli provider aggiornati: {name}", + "modelStatusChanged": "Stato modello aggiornato: {model}", + "modelBatchUpdated": "{count} modelli aggiornati in batch", + "mcpServerCreated": "MCP Server aggiunto: {name}", + "mcpServerUpdated": "MCP Server aggiornato: {name}", + "mcpServerRemoved": "MCP Server rimosso: {name}", + "mcpServerStatusChanged": "MCP Server cambiato: {name}", + "mcpGlobalStatusChanged": "Stato globale MCP cambiato: {status}", + "mcpServerStarted": "MCP Server avviato: {name}", + "mcpServerStopped": "MCP Server arrestato: {name}", + "mcpRegistryRefreshed": "MCP NPM registry aggiornato", + "backupCreated": "Backup creato: {name}", + "backupImported": "Backup importato: {name}", + "databaseRepaired": "Riparazione database completata: {status}" + } + } +} diff --git a/src/renderer/src/i18n/it-IT/sync.json b/src/renderer/src/i18n/it-IT/sync.json new file mode 100644 index 000000000..68f65e070 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "{count} conversazioni importate correttamente" + }, + "error": { + "notEnabled": "La sincronizzazione non è attiva", + "folderNotExists": "La cartella di sincronizzazione non esiste", + "noValidBackup": "Nessun file di backup valido nella cartella di sincronizzazione", + "unsupportedBackupVersion": "Questo backup è stato creato da una versione più recente di DeepChat e non può essere importato", + "dbNotExists": "Il file database non esiste", + "configNotExists": "Il file di configurazione non esiste", + "tempDbFailed": "Creazione del file temporaneo di backup database non riuscita", + "tempConfigFailed": "Creazione del file temporaneo di backup configurazione non riuscita", + "importFailed": "Importazione non riuscita, dati originali ripristinati", + "importProcess": "Errore durante l'importazione", + "unknown": "Errore sconosciuto", + "encryptedBackupPasswordMissing": "Questo backup è cifrato, ma la chiave del database locale non è disponibile. Sblocca prima il database cifrato, poi importa di nuovo.", + "overwriteEncryptionMismatch": "L'importazione con sovrascrittura richiede che backup e database corrente abbiano lo stesso stato di cifratura." + } +} diff --git a/src/renderer/src/i18n/it-IT/thread.json b/src/renderer/src/i18n/it-IT/thread.json new file mode 100644 index 000000000..9da1cf16b --- /dev/null +++ b/src/renderer/src/i18n/it-IT/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Rinomina", + "delete": "Elimina", + "cleanMessages": "Cancella messaggi", + "pin": "Fissa", + "unpin": "Rimuovi fissaggio", + "export": "Esporta", + "exportText": "Testo semplice", + "exportNowledgeMem": "Nowledge-mem" + }, + "export": { + "failed": "Esportazione non riuscita", + "failedDesc": "Si è verificato un errore durante l'esportazione. Riprova", + "nowledgeMemSubmitFailed": "Invio a Nowledge-mem non riuscito", + "nowledgeMemSubmitFailedDesc": "Invio della conversazione a nowledge-mem non riuscito", + "nowledgeMemSubmitPrompt": "Confermi di voler esportare la conversazione corrente in nowledge-mem?", + "nowledgeMemSubmitSuccess": "Invio a Nowledge-mem riuscito", + "nowledgeMemSubmitSuccessDesc": "Conversazione inviata correttamente a Nowledge-mem", + "nowledgeMemSuccessDesc": "Conversazione esportata correttamente in formato Nowledge-mem", + "success": "Esportazione riuscita", + "nowledgeMemSuccess": "Esportazione in Nowledge-mem riuscita", + "successDesc": "Conversazione esportata correttamente" + }, + "message": { + "toolbar": { + "save": "Salva" + } + }, + "toolbar": { + "save": "Salva", + "cancel": "Annulla", + "previousVariant": "Passa alla versione precedente", + "nextVariant": "Passa alla versione successiva", + "copy": "Copia risposta come Markdown", + "copyImage": "Copia come immagine", + "copyImageWithLongPress": "Copia come immagine (pressione lunga per acquisire dall'inizio)", + "copyFromTopSuccess": "Immagine completa della conversazione copiata", + "capturing": "Acquisizione screenshot...", + "retry": "Rigenera", + "fork": "Crea ramo in nuova chat", + "edit": "Modifica messaggio", + "delete": "Elimina messaggio", + "trace": "Visualizza parametri richiesta" + } +} diff --git a/src/renderer/src/i18n/it-IT/toolCall.json b/src/renderer/src/i18n/it-IT/toolCall.json new file mode 100644 index 000000000..b56e3fbb5 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Chiamata in corso", + "response": "Esecuzione", + "end": "Completato", + "error": "Errore", + "title": "Chiamata strumento", + "clickToView": "Fai clic per vedere i dettagli", + "functionName": "Nome funzione", + "permission": "Richiesta autorizzazione", + "params": "Parametri funzione", + "responseData": "Risposta funzione", + "imagePreview": "Anteprima immagine", + "imagePreviewCount": "Nessuna anteprima immagine | {count} anteprima immagine | {count} anteprime immagine", + "terminalOutput": "Output terminale", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "{count} sostituzioni completate", + "fileOperation": "Operazione file", + "fileRead": "Lettura file", + "fileWrite": "Scrittura file", + "filePath": "Percorso file", + "success": "Riuscito", + "failed": "Non riuscito" +} diff --git a/src/renderer/src/i18n/it-IT/traceDialog.json b/src/renderer/src/i18n/it-IT/traceDialog.json new file mode 100644 index 000000000..a929296d4 --- /dev/null +++ b/src/renderer/src/i18n/it-IT/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Anteprima parametri richiesta", + "provider": "Provider", + "model": "Modello", + "endpoint": "API Endpoint", + "headers": "Header richiesta", + "body": "Corpo richiesta", + "copyJson": "Copia JSON", + "copySuccess": "Copiato negli appunti", + "close": "Chiudi", + "loading": "Caricamento...", + "error": "Caricamento non riuscito", + "errorDesc": "Impossibile ottenere l'anteprima della richiesta. Riprova", + "notImplemented": "Non supportato", + "notImplementedDesc": "Questo provider non supporta ancora l'anteprima", + "mayNotMatch": "Nota: questa anteprima è ricostruita dalle impostazioni correnti della sessione e potrebbe non corrispondere esattamente ai parametri inviati" +} diff --git a/src/renderer/src/i18n/it-IT/update.json b/src/renderer/src/i18n/it-IT/update.json new file mode 100644 index 000000000..4e7e3e1da --- /dev/null +++ b/src/renderer/src/i18n/it-IT/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "Nuova versione disponibile", + "version": "Versione", + "releaseDate": "Data rilascio", + "releaseNotes": "Note di rilascio", + "later": "Più tardi", + "githubDownload": "Download da GitHub", + "officialDownload": "Download ufficiale", + "checkUpdate": "Controlla aggiornamenti", + "downloading": "Download in corso", + "installNow": "Installa ora", + "installUpdate": "Installa aggiornamento", + "versionAvailable": "{version} disponibile", + "autoUpdateFailed": "Aggiornamento automatico non riuscito. Usa i link di download manuale qui sotto.", + "topbarButton": "Aggiorna", + "autoUpdate": "Aggiornamento automatico", + "restarting": "Riavvio in corso", + "alreadyUpToDate": "Già aggiornato", + "alreadyUpToDateDesc": "DeepChat è già all'ultima versione, non serve aggiornare." +} diff --git a/src/renderer/src/i18n/it-IT/welcome.json b/src/renderer/src/i18n/it-IT/welcome.json new file mode 100644 index 000000000..56080ac9f --- /dev/null +++ b/src/renderer/src/i18n/it-IT/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "Benvenuto", + "description": "Iniziamo a configurare DeepChat" + }, + "provider": { + "title": "Provider modello", + "description": "Scegli il provider modello che preferisci" + }, + "configuration": { + "title": "Configurazione modello", + "description": "Configura i modelli che vuoi usare" + }, + "complete": { + "title": "Completato", + "description": "Tutto pronto, puoi iniziare!" + } + }, + "title": "Benvenuto in DeepChat", + "description": "Completiamo insieme la configurazione", + "provider": { + "select": "Seleziona provider", + "apiUrl": "Indirizzo API", + "apiKey": "API Key", + "verifyLink": "Verifica link" + }, + "complete": { + "title": "Tutto completato!", + "description": "Hai completato la configurazione. Iniziamo!" + }, + "buttons": { + "getStarted": "Inizia", + "next": "Avanti", + "back": "Indietro" + }, + "page": { + "title": "Benvenuto in DeepChat Agent", + "description": "Collega un provider modello per iniziare", + "guide": { + "title": "Avanzamento guida", + "description": "Passaggio corrente: {step}", + "or": "oppure", + "coreProgress": "Avanzamento configurazione principale", + "optional": "Passaggi facoltativi", + "actions": { + "continueSetup": "Continua configurazione", + "goToChat": "Vai alla chat" + }, + "steps": { + "provider": "Provider", + "first-chat": "Prima chat", + "switch-model": "Cambia modello", + "mcp": "MCP", + "skills": "Skills", + "plugins": "Plugin" + } + }, + "browseProviders": "Sfoglia tutti i provider...", + "connectAgent": "oppure collega un Agent", + "acpTitle": "Configura ACP Agent", + "acpDescription": "Claude Code, Codex, Kimi o il tuo Agent", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "DeepSeek", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "OpenRouter" + }, + "importProviders": "Importa da altri Agent" + }, + "agentPage": { + "title": "Scegli un Agent per iniziare a creare", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "Gestisci DeepChat Agent" + } +} diff --git a/src/renderer/src/i18n/ms-MY/about.json b/src/renderer/src/i18n/ms-MY/about.json new file mode 100644 index 000000000..f51e4a910 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat ialah pelanggan AI merentas platform, khusus untuk membolehkan lebih ramai orang menggunakan AI dengan mudah.", + "website": "Layari laman web kami", + "disclaimerButton": "Penafian", + "feedbackButton": "Maklum balas", + "disclaimerTitle": "Pernyataan syarat penggunaan", + "checkUpdateButton": "Semak kemas kini", + "mockUpdateButton": "Kemas kini yang dimuat turun simulasi", + "clearMockUpdateButton": "Kosongkan kemas kini simulasi", + "mockOnboardingButton": "Simulasikan but untuk kali pertama", + "updateChannel": "Kemas kini saluran", + "stableChannel": "Versi rasmi", + "betaChannel": "Versi beta dalaman", + "deviceInfo": { + "title": "Maklumat peranti", + "platform": "platform", + "arch": "Seni bina", + "cpuModel": "Model CPU", + "totalMemory": "jumlah ingatan", + "osVersion": "Versi sistem" + } +} diff --git a/src/renderer/src/i18n/ms-MY/artifacts.json b/src/renderer/src/i18n/ms-MY/artifacts.json new file mode 100644 index 000000000..e3127eb68 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Klik untuk membuka", + "codeSnippet": "coretan kod", + "function": "fungsi", + "class": "baik hati", + "reactComponent": "Komponen React", + "moduleImport": "import modul", + "variableDefinition": "Definisi pembolehubah {name}", + "markdownDocument": "Dokumentasi Markdown", + "htmlDocument": "Dokumentasi HTML", + "svgImage": "imej SVG", + "flowchart": "carta alir", + "sequenceDiagram": "Rajah masa", + "classDiagram": "Gambar rajah kelas", + "stateDiagram": "rajah negeri", + "erDiagram": "Gambar rajah ER", + "ganttChart": "Carta Gantt", + "pieChart": "carta pai", + "mermaidDiagram": "Carta Mermaid", + "flowchartOf": "Carta aliran {name}", + "sequenceDiagramBetween": "Rajah masa antara {participants}", + "classDiagramOf": "Gambar rajah kelas {name}", + "stateDiagramOf": "Nyatakan gambarajah {name}", + "erDiagramOf": "Gambar rajah ER {name}", + "pieChartOf": "Carta pai {name}", + "unknownDocument": "Dokumen tidak diketahui", + "preview": "Pratonton", + "code": "kod", + "export": "Eksport", + "htmlPreviewTitle": "Pratonton HTML", + "svgPreviewTitle": "Pratonton SVG", + "copy": "salinan", + "copyAsImage": "Salin seperti gambar", + "copyImageSuccessDesc": "Imej disalin ke papan keratan", + "copyImageFailedDesc": "Tidak dapat menyalin imej ke papan keratan", + "copySuccess": "Berjaya disalin", + "copySuccessDesc": "Kandungan disalin ke papan keratan", + "copyFailed": "Salinan gagal", + "copyFailedDesc": "Tidak dapat menyalin kandungan ke papan keratan", + "desktop": "desktop", + "tablet": "rata", + "mobile": "telefon bimbit", + "responsive": "Responsif", + "width": "lebar", + "height": "tinggi", + "sanitizingSvg": "Membersihkan kandungan SVG...", + "svgSanitizationFailed": "Kandungan SVG gagal pengesahan keselamatan", + "noSvgContent": "Tiada kandungan SVG tersedia", + "mermaid": { + "renderError": "Penyampaian gagal: {message}" + } +} diff --git a/src/renderer/src/i18n/ms-MY/chat.json b/src/renderer/src/i18n/ms-MY/chat.json new file mode 100644 index 000000000..d75044087 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "Hantar mesej kepada DeepChat, {'@'} boleh merujuk fail, / boleh menggunakan arahan", + "fileArea": "kawasan fail", + "inputArea": "kawasan input", + "functionSwitch": "Suis fungsi", + "attach": "Tambah lampiran", + "voiceInput": "rakaman tempatan", + "voiceInputStop": "Hentikan rakaman tempatan", + "voiceRecognitionUnsupportedTitle": "Persekitaran semasa tidak menyokong rakaman tempatan", + "voiceRecognitionUnsupportedDescription": "Sila gunakan ciri ini dalam pelayar atau persekitaran desktop yang menyokong rakaman mikrofon.", + "voiceRecognitionPermissionDeniedTitle": "Tidak dapat mengakses mikrofon", + "voiceRecognitionPermissionDeniedDescription": "Sila benarkan DeepChat menggunakan mikrofon dan cuba lagi.", + "voiceRecognitionErrorTitle": "Transkripsi audio gagal", + "voiceRecognitionErrorDescription": "Gagal melengkapkan transkripsi audio, sila cuba sebentar lagi.", + "send": "hantar", + "steer": "panduan", + "queue": "menyertai baris gilir", + "stop": "berhenti", + "fileSelect": "Pilih fail", + "pasteFiles": "Menyokong fail salin dan tampal", + "dropFiles": "Seret dan lepaskan fail di sini", + "promptFilesAdded": "Fail Prompt ditambah", + "promptFilesAddedDesc": "Fail {count} berjaya ditambahkan", + "promptFilesError": "Ralat pemprosesan fail", + "promptFilesErrorDesc": "Pemprosesan fail {count} gagal", + "historyPlaceholder": "(Tekan Tab untuk mengisi)", + "rateLimitQueue": "Beratur {count}", + "rateLimitWait": "Menunggu {seconds}s", + "rateLimitQueueTooltip": "Terdapat permintaan {count} dalam baris gilir, dengan selang {interval} saat", + "rateLimitReadyTooltip": "Permintaan boleh dihantar dengan selang {interval} saat", + "rateLimitWaitingTooltip": "Perlu menunggu {seconds} saat, selang {interval} saat", + "acpWorkdir": "direktori kerja", + "acpWorkdirTooltip": "Sediakan direktori kerja ACP", + "acpWorkdirSelect": "Pilih direktori kerja", + "acpWorkdirCurrent": "Direktori kerja semasa: {path}", + "acpMode": "model", + "acpModeTooltip": "Mod semasa: {mode}", + "agentWorkspaceTooltip": "Sediakan direktori kerja Agent", + "agentWorkspaceSelect": "Pilih direktori kerja", + "agentWorkspaceCurrent": "Direktori kerja semasa: {path}", + "workspaceUnavailableTooltip": "Direktori tidak wujud atau tidak boleh diakses: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "MCP didayakan", + "empty": "Tiada perkhidmatan didayakan lagi", + "openSettings": "Buka tetapan MCP" + }, + "tools": { + "badge": "Tools", + "title": "Tools", + "mcpSection": "MCP", + "pluginSection": "pemalam", + "builtinSection": "Alat terbina dalam", + "loading": "Memuatkan alatan...", + "builtinEmpty": "Tiada alat terbina dalam tersedia lagi", + "groups": { + "agentFilesystem": "sistem fail", + "agentCore": "alat teras", + "agentImageGeneration": "penjanaan imej", + "agentSkills": "Alat kemahiran", + "deepchatSettings": "Tetapan DeepChat", + "yobrowser": "YoBrowser" + } + }, + "fileUploadFailed": "Pemprosesan lampiran gagal", + "fileUploadFailedDesc": "Tidak dapat memproses fail {count}: {names}", + "fileUploadFailedMore": "Tunggu {count}", + "unnamedFile": "fail tanpa nama", + "audioInputUnsupportedTitle": "Model semasa tidak menyokong lampiran audio", + "audioInputUnsupportedDescription": "Model {model} tidak menyokong input audio, lampiran audio {count} telah diabaikan." + }, + "pendingInput": { + "steer": "panduan", + "queueCount": "Sedia untuk menghantar {count}/{max}", + "resumeQueue": "terus hantar", + "toSteer": "beralih kepada but", + "locked": "terkunci", + "reorder": "Laraskan pesanan", + "files": "Fail {count}", + "attachmentsOnly": "Lampiran {count}", + "empty": "mesej kosong", + "limitReached": "Ruang menunggu penuh (maksimum {max} penyertaan)." + }, + "features": { + "webSearch": "carian internet", + "thoughtForSeconds": "Terfikir tentang {seconds} saat", + "thoughtForSecondsLoading": "Berfikir ({seconds} kedua)", + "artifactThinking": "artifact Fikiran", + "modeChanged": "Mod telah ditukar kepada: {mode}" + }, + "search": { + "results": "Halaman web {0} telah dicari", + "searching": "Mencari...", + "title": "Hasil carian", + "description": "Sejumlah keputusan berkaitan {0} ditemui", + "optimizing": "Mengeluarkan niat carian...", + "reading": "Mencari dan membaca halaman web...", + "error": "Carian gagal" + }, + "messages": { + "thinking": "Berfikir...", + "rateLimitWaiting": "Minta had kekerapan, menunggu dalam baris gilir...", + "rateLimitCompactLoading": "Had kelajuan ({seconds} saat)", + "rateLimitTitle": "Permintaan had kekerapan", + "rateLimitQueue": "kedudukan beratur", + "rateLimitEstimated": "Berharap untuk menunggu", + "rateLimitQuickSettings": "Laraskan had", + "rateLimitSwitchProvider": "Tukar pembekal perkhidmatan", + "rateLimitImmediately": "serta merta", + "rateLimitSeconds": "Kedua", + "rateLimitMinutes": "minit" + }, + "compaction": { + "compacting": "Memampatkan konteks...", + "compacted": "Konteks dimampatkan", + "commandDescription": "Mampatkan konteks sesi", + "noopTitle": "Tiada konteks boleh mampat", + "noopDescription": "Pada masa ini tiada sejarah perbualan baharu untuk dimampatkan.", + "failedTitle": "Mampatan gagal" + }, + "rateLimit": { + "queueTooltip": "Terdapat permintaan {count} dalam baris gilir, dengan selang {interval} saat", + "readyTooltip": "Permintaan boleh dihantar dengan selang {interval} saat", + "waitingTooltip": "Perlu menunggu {seconds} saat, selang {interval} saat" + }, + "notify": { + "generationComplete": "Penjanaan selesai", + "generationError": "Pembinaan gagal" + }, + "toolCall": { + "title": "Panggilan alat", + "calling": "Alat panggilan", + "response": "tindak balas alat", + "end": "Panggilan alat selesai", + "error": "Ralat panggilan alat", + "clickToView": "Klik untuk melihat butiran", + "functionName": "nama fungsi", + "params": "parameter", + "responseData": "data tindak balas", + "subagents": { + "summary": "{mode} · {count} subagent", + "unnamedTask": "Tugas tanpa nama", + "mode": { + "parallel": "selari", + "chain": "bersiri" + }, + "status": { + "queued": "Beratur", + "running": "Berlari", + "completed": "Selesai", + "error": "kesilapan", + "cancelled": "Dibatalkan", + "waiting_permission": "Menunggu kelulusan kebenaran", + "waiting_question": "Menunggu input tambahan" + } + } + }, + "mode": { + "current": "Mod semasa: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Kembali ke sesi ibu bapa", + "share": "kongsi", + "more": "Lagi" + }, + "subagents": { + "label": "subagent" + }, + "advancedSettings": { + "button": "Konfigurasi lanjutan", + "title": "Konfigurasi lanjutan", + "closeHint": "Berdekatan dengan Esc", + "systemPrompt": "Kata gesaan sistem", + "systemPromptPlaceholder": "Pilih pratetap", + "temperature": "suhu", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ditetapkan pada {enabled} apabila pemikiran dihidupkan dan {disabled} apabila pemikiran dimatikan.", + "contextLength": "panjang konteks", + "maxTokens": "keluaran maksimum", + "thinkingBudget": "Fikirkan tentang bajet", + "verbosity": "Jawab secara terperinci", + "forceInterleavedThinkingCompat": "Interleaved Thinking", + "forceInterleavedThinkingCompatDescription": "Mengawal sama ada sesi semasa memproses mesej reasoning dan tool-call dalam mod Interleaved Thinking.", + "verbosityPlaceholder": "Pilih tahap verbositi", + "currentCustomPrompt": "Penyesuaian semasa", + "useDefault": "Gunakan nilai lalai", + "decreaseValue": "Kurangkan {label}", + "increaseValue": "Tambah {label}", + "toggleValue": "Tukar {label}", + "validation": { + "finiteNumber": "Mesti nombor terhingga", + "nonNegativeInteger": "Mestilah integer bukan negatif", + "contextLengthAtLeastMaxTokens": "Mesti lebih besar daripada atau sama dengan keluaran maksimum", + "maxTokensWithinContextLength": "Mesti kurang daripada atau sama dengan panjang konteks" + } + }, + "modelPicker": { + "empty": "Model tidak ditemui", + "audioInputSupported": "Menyokong input audio" + }, + "audio": { + "play": "bermain", + "pause": "jeda" + }, + "call": { + "title": "Panggilan Voice.ai", + "description": "Klik untuk menyambung kepada ejen suara Voice.ai, dan kemudian bercakap selepas menjawab panggilan.", + "start": "Mulakan panggilan suara", + "stop": "tamatkan panggilan", + "end": "tutup telefon" + }, + "skills": { + "indicator": { + "active": "Kemahiran tetap {count}", + "none": "Tiada kemahiran tetap" + }, + "panel": { + "title": "Kemahiran tetap", + "manage": "mengurus", + "empty": "Tiada kemahiran pemasangan lagi" + } + }, + "workspace": { + "title": "ruang kerja", + "collapse": "dekat", + "sections": { + "files": "dokumen", + "git": "Git", + "artifacts": "Artifacts", + "subagents": "subagent" + }, + "plan": { + "section": "rancangan", + "empty": "Tiada tugas lagi", + "itemAriaLabel": "{status}:{step}", + "status": { + "pending": "Belum selesai", + "in_progress": "sedang berjalan", + "completed": "Selesai", + "failed": "gagal", + "skipped": "dilangkau" + } + }, + "files": { + "section": "dokumen", + "empty": "Tiada fail lagi", + "loading": "Memuatkan fail...", + "noWorkspace": { + "title": "Tiada ruang kerja lagi", + "description": "Pilih atau seret folder untuk menyediakan ruang kerja anda", + "button": "Pilih folder" + }, + "contextMenu": { + "openFile": "buka fail", + "revealInFolder": "Buka dalam pengurus fail", + "insertPath": "Masukkan ke dalam kotak input" + } + }, + "git": { + "empty": "Pada masa ini tiada diff untuk dipaparkan.", + "clean": "Kawasan kerja bersih", + "staged": "Disimpan buat sementara waktu", + "unstaged": "Tidak dipentaskan" + }, + "subagents": { + "empty": "Tiada sesi subagent lagi", + "self": "ejen semasa", + "status": { + "working": "Berlari", + "error": "kesilapan", + "idle": "terbiar" + } + }, + "browser": { + "section": "pelayar", + "empty": "Tiada halaman tab lagi" + }, + "terminal": { + "section": "terminal", + "empty": "Belum ada keluaran", + "contextMenu": { + "terminate": "Tamatkan arahan", + "delete": "memadam rekod", + "expand": "Kembangkan untuk melihat", + "collapse": "lipat" + }, + "output": { + "truncated": "[dipotong]" + }, + "noOutput": "Tiada keluaran", + "status": { + "running": "Berlari", + "completed": "kejayaan", + "failed": "gagal", + "timed_out": "Tamat masa", + "aborted": "digugurkan" + } + } + }, + "newThread": { + "title": "Bina dan teroka" + }, + "floatingWidget": { + "title": "Gambaran keseluruhan tugas", + "collapse": "Tutup senarai perbualan terapung", + "empty": "Pada masa ini tiada sesi Agent", + "executing": "sedang berjalan", + "sessionCount": "Sesi {count}", + "untitled": "sesi baru", + "status": { + "inProgress": "sedang berjalan", + "done": "Selesai", + "error": "kesilapan" + } + }, + "permissionMode": { + "default": "Keizinan lalai", + "fullAccess": "akses penuh" + }, + "sidebar": { + "allAgents": "Semua Agents", + "expandSidebar": "Kembangkan bar sisi", + "collapseSidebar": "Runtuhkan bar sisi", + "remoteControlDisabled": "Tidak didayakan", + "remoteControlStatus": { + "disabled": "Alat kawalan jauh dilumpuhkan", + "stopped": "Alat kawalan jauh telah berhenti", + "starting": "Alat kawalan jauh bermula", + "running": "Alat kawalan jauh berjalan", + "backoff": "Alat kawalan jauh mencuba semula", + "error": "ralat kawalan jauh" + }, + "groupByDate": "Kumpulan mengikut masa", + "groupByProject": "Kumpulan mengikut projek", + "pinned": "Sematkan perbualan", + "emptyTitle": "Tiada sesi lagi", + "emptyDescription": "Mulakan sesi baharu", + "searchPlaceholder": "Tajuk sesi carian", + "searchAriaLabel": "Tajuk sesi carian", + "searchEmptyTitle": "Tiada sesi sepadan ditemui", + "searchEmptyDescription": "Cuba tukar kata kunci tajuk" + }, + "spotlight": { + "placeholder": "Sesi carian, Agent, tetapan dan tindakan…", + "searching": "Mencari…", + "emptyTitle": "Tiada hasil yang sepadan", + "emptyDescription": "Cuba kata kunci lain atau buka perbualan terbaharu secara terus.", + "hints": "↑↓ Pilih · Enter Buka · Esc Tutup · Home/End Lompat", + "kind": { + "session": "sesi", + "message": "maklumat", + "agent": "Agent", + "setting": "sediakan", + "action": "tindakan" + } + }, + "inlineSearch": { + "placeholder": "Cari sesi semasa", + "ariaLabel": "Cari sesi semasa", + "previous": "Perlawanan sebelumnya", + "next": "perlawanan seterusnya", + "close": "Tutup carian" + }, + "onboarding": { + "agentSwitch": { + "title": "Tukar kepada DeepChat Agent", + "description": "Sebelum memulakan sembang, tukar kembali kepada aliran perbualan DeepChat daripada ACP Agent.", + "caption": "Klik butang Agent yang diserlahkan di bar sisi untuk meneruskan." + }, + "switchModel": { + "description": "Pilih model yang anda mahu gunakan untuk perbualan DeepChat pertama anda.", + "caption": "Gunakan penukar model yang diserlahkan untuk memilih mana-mana model yang tersedia." + }, + "firstChat": { + "description": "Sekarang setelah anda bersedia, hantarkan mesej pertama anda di sini untuk melengkapkan but.", + "caption": "Lampu sorot akan kekal dalam kotak input sehingga anda benar-benar menghantar mesej pertama." + } + } +} diff --git a/src/renderer/src/i18n/ms-MY/common.json b/src/renderer/src/i18n/ms-MY/common.json new file mode 100644 index 000000000..ff0cc68e1 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/common.json @@ -0,0 +1,128 @@ +{ + "loading": "memuatkan...", + "copy": "salinan", + "copied": "disalin", + "paste": "tampal", + "copySuccess": "Berjaya disalin", + "copySuccessDesc": "Kandungan disalin ke papan keratan", + "copyImageSuccess": "Berjaya disalin", + "copyImageSuccessDesc": "Imej disalin ke papan keratan", + "copyFailed": "Salinan gagal", + "copyFailedDesc": "Tidak dapat menyalin kandungan ke papan keratan", + "copyCode": "Salin kod", + "export": "Eksport", + "newChat": "sesi baru", + "newTopic": "topik baru", + "cancel": "Batal", + "confirm": "mengesahkan", + "next": "Langkah seterusnya", + "back": "Langkah sebelumnya", + "enabled": "Didayakan", + "disabled": "Dilumpuhkan", + "disclaimer": "Penafian", + "close": "penutupan", + "open": "Buka", + "image": "gambar", + "noContent": "Tiada kandungan lagi", + "preview": "Pratonton", + "source": "Kod sumber", + "more": "Lagi", + "decrease": "kurangkan", + "increase": "bertambah", + "fontSmaller": "Kurangkan saiz fon", + "fontReset": "Tetapkan semula saiz fon", + "fontLarger": "Besarkan saiz fon", + "zoomIn": "besarkan", + "zoomOut": "zum keluar", + "resetZoom": "Tetapkan semula zum", + "error": { + "requestFailed": "Permintaan gagal...", + "createChatFailed": "Gagal membuat sesi", + "selectChatFailed": "Gagal memilih sesi", + "renameChatFailed": "Gagal menamakan semula sesi", + "deleteChatFailed": "Gagal memadamkan sesi", + "cleanMessagesFailed": "Gagal mengosongkan mesej sesi", + "userCanceledGeneration": "Penjanaan pengguna dibatalkan", + "sessionInterrupted": "Sesi telah terganggu secara tidak dijangka dan pembinaan tidak selesai", + "noModelResponse": "Model tidak mengembalikan apa-apa, ia mungkin telah tamat masa.", + "invalidJson": "Format JSON tidak sah", + "maximumToolCallsReached": "Bilangan maksimum panggilan alat dicapai", + "causeOfError": "Sebab yang mungkin untuk ralat:", + "error400": "Minta ralat, parameter atau isu keserasian", + "error401": "Pengesahan gagal, API Key atau nama domain yang salah dikonfigurasikan", + "error403": "Akses kepada model ini adalah dilarang. Ia mungkin disebabkan oleh baki yang tidak mencukupi atau kekurangan kebenaran untuk mengakses model.", + "error404": "Alamat permintaan tidak wujud dan nama domain atau nama model yang dikonfigurasikan adalah salah.", + "error429": "Kelajuan permintaan terlalu pantas dan kekerapan akses dihadkan oleh pembekal perkhidmatan.", + "error500": "Ralat pelayan berlaku. Perkhidmatan yang diminta mungkin tidak stabil pada masa ini. Anda boleh cuba lagi nanti.", + "error502": "Ralat pintu masuk. Perkhidmatan yang diminta mungkin tidak stabil pada masa ini. Anda boleh cuba lagi nanti.", + "error503": "Perkhidmatan tidak tersedia. Perkhidmatan yang diminta mungkin tidak stabil pada masa ini. Anda boleh cuba lagi nanti.", + "error504": "Permintaan itu tamat masa. Perkhidmatan yang diminta mungkin tidak stabil atau pautan rangkaian rosak. Sila semak proksi dan konfigurasi rangkaian lain dan cuba lagi.", + "operationFailed": "Operasi gagal", + "invalidQuestionRequest": "Permintaan soalan tidak sah" + }, + "resetDataConfirmTitle": "Adakah anda pasti mahu menetapkan semula semua data?", + "resetDataConfirmDescription": "Ini akan memulihkan semua data kepada tetapan lalai. Tindakan ini tidak boleh dibuat asal.", + "title": "Tetapan umum", + "resetData": "Tetapkan semula data", + "language": "bahasa", + "languageSelect": "Pilih bahasa", + "searchEngine": "enjin carian", + "searchEngineSelect": "Pilih enjin carian", + "searchPreview": "Pratonton carian", + "searchAssistantModel": "model pembantu", + "selectModel": "Pilih model", + "proxyMode": "mod proksi", + "proxyModeSelect": "Pilih mod proksi", + "proxyModeSystem": "ejen sistem", + "proxyModeNone": "Tidak menggunakan proksi", + "proxyModeCustom": "Proksi tersuai", + "customProxyUrl": "Alamat proksi tersuai", + "customProxyUrlPlaceholder": "Contohnya: http://127.0.0.1:7890", + "invalidProxyUrl": "Alamat proksi tidak sah, sila masukkan http/https URL yang sah", + "languageSystem": "Ikut sistem", + "watermarkTip": "Kandungan yang dijana AI, sila rujuk dengan berhati-hati", + "collapse": "dekat", + "expand": "Kembangkan", + "add": "baru", + "reset": "set semula", + "format": "format", + "edit": "edit", + "delete": "padam", + "save": "jimat", + "clear": "Jelas", + "saved": "disimpan", + "unknownError": "ralat yang tidak diketahui", + "testing": "Dalam ujian", + "saving": "Menyimpan", + "scrollLeft": "tatal ke kiri", + "scrollRight": "tatal ke kanan", + "history": "sejarah", + "minimize": "meminimumkan", + "maximize": "memaksimumkan", + "restore": "pengurangan", + "browser": { + "back": "belakang", + "forward": "teruskan", + "reload": "segarkan semula", + "addressLabel": "bar alamat", + "addressPlaceholder": "Masukkan URL", + "enterUrlToStart": "Masukkan URL untuk mula melawat", + "enterUrlDescription": "Masukkan URL dalam bar alamat di atas untuk mengakses tapak web", + "name": "Yo Browser" + }, + "size": { + "bytes": "{count} Bait" + }, + "time": { + "today": "hari ini", + "yesterday": "semalam", + "lastWeek": "minggu lepas", + "older": "lebih awal" + }, + "project": { + "select": "Pilih item", + "none": "Tiada projek berkaitan", + "recent": "Projek terkini", + "openFolder": "Buka folder..." + } +} diff --git a/src/renderer/src/i18n/ms-MY/components.json b/src/renderer/src/i18n/ms-MY/components.json new file mode 100644 index 000000000..aad11e06f --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Cari emotikon", + "smileys": "Ungkapan dan emosi", + "people": "Tokoh dan jasad", + "animals": "haiwan dan alam semula jadi", + "food": "makanan dan minuman", + "travel": "Perjalanan dan Tempat", + "activities": "Aktiviti", + "objects": "benda", + "symbols": "simbol", + "flags": "sepanduk" + }, + "messageBlockAction": { + "continue": "teruskan", + "continued": "Bersambung" + }, + "messageBlockPermissionRequest": { + "title": "Kebenaran diperlukan", + "allow": "benarkan", + "allowOnce": "dibenarkan sekali", + "allowForSession": "Laksanakan sesi semasa secara automatik", + "allowOnceTooltip": "Perintah ini dilaksanakan hanya kali ini dan keputusan tidak disimpan.", + "allowForSessionTooltip": "Ingat arahan ini dalam sesi semasa.", + "deny": "menolak", + "rememberChoice": "Ingat pilihan ini", + "granted": "Kebenaran diberikan", + "denied": "Kebenaran ditolak", + "riskLabel": "risiko", + "type": { + "read": "Izin baca", + "write": "Tulis kebenaran", + "all": "kebenaran penuh", + "command": "melaksanakan perintah" + }, + "description": { + "read": "Benarkan '{toolName}' daripada '{serverName}' melakukan operasi baca?", + "write": "Benarkan '{toolName}' daripada '{serverName}' melakukan operasi tulis?", + "all": "Benarkan '{toolName}' daripada '{serverName}' melakukan operasi baca dan tulis?", + "command": "Laksanakan arahan: {command}", + "commandWithRisk": "Laksanakan arahan: {command}\n\nTahap risiko: {riskLevel}\n\nCadangan: {suggestion}" + }, + "riskLevel": { + "low": "rendah", + "medium": "tengah", + "high": "tinggi", + "critical": "serius" + }, + "suggestion": { + "low": "Perintah ini ialah operasi baca sahaja dan mempunyai sedikit kesan.", + "medium": "Perintah ini boleh memasang kebergantungan atau mengubah suai status, sila sahkan sebelum melaksanakan.", + "high": "Perintah ini akan mengubah suai fail atau status sistem, jadi sila berhati-hati.", + "critical": "Perintah ini mungkin merosakkan atau mengakses rangkaian luaran, sila sahkan." + } + }, + "promptParamsDialog": { + "title": "Tetapan parameter {name}", + "description": "Sila isikan parameter berikut, item dengan * diperlukan.", + "required": "Parameter ini diperlukan" + }, + "messageBlockQuestionRequest": { + "title": "soalan", + "send": "hantar", + "reject": "menolak", + "selected": "Dipilih", + "rejected": "ditolak", + "customPlaceholder": "Masukkan jawapan anda...", + "answerLabel": "jawab" + } +} diff --git a/src/renderer/src/i18n/ms-MY/contextMenu.json b/src/renderer/src/i18n/ms-MY/contextMenu.json new file mode 100644 index 000000000..979c54338 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "menterjemah", + "original": "asal", + "translated": "Hasil terjemahan", + "error": "Terjemahan gagal" + }, + "askAI": { + "title": "Siasatan AI", + "question": "soalan", + "answer": "jawab", + "error": "AI gagal menjawab" + }, + "copy": "salinan", + "paste": "tampal", + "cut": "potong" +} diff --git a/src/renderer/src/i18n/ms-MY/dialog.json b/src/renderer/src/i18n/ms-MY/dialog.json new file mode 100644 index 000000000..b7b5fbbc6 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "Batal", + "confirm": "mengesahkan", + "close": "penutupan", + "ok": "pasti", + "delete": { + "title": "Adakah anda pasti mahu memadamkan perbualan ini?", + "description": "Operasi ini tidak boleh dibuat asal, sila teruskan dengan berhati-hati.", + "confirm": "padam" + }, + "rename": { + "title": "Namakan semula sesi", + "description": "Sila masukkan nama sesi baharu." + }, + "cleanMessages": { + "title": "Kosongkan mesej perbualan", + "description": "Mengosongkan mesej akan memadamkan semua mesej dan fail dalam sesi. Adakah anda pasti mahu meneruskan?", + "confirm": "Jelas" + }, + "fork": { + "title": "Buat cawangan sesi", + "description": "Menyalin mesej pertama ke mesej yang dipilih pada masa ini ke dalam perbualan baharu di mana anda boleh meneruskan perbualan.", + "confirm": "Buat cawangan", + "tag": "cawangan" + }, + "error": { + "title": "kesilapan" + }, + "mutualExclusive": { + "title": { + "reasoning": "Sahkan untuk membolehkan keupayaan penaakulan", + "functionCall": "Sahkan untuk mendayakan panggilan fungsi" + }, + "message": { + "reasoning": "Menghidupkan keupayaan inferens akan mematikan fungsi panggilan fungsi secara automatik. Ini adalah had model DeepSeek-V3.1, dan kedua-dua fungsi tidak boleh digunakan pada masa yang sama. teruskan?", + "functionCall": "Mendayakan panggilan fungsi akan mematikan keupayaan inferens secara automatik. Ini adalah had model DeepSeek-V3.1, dan kedua-dua fungsi tidak boleh digunakan pada masa yang sama. teruskan?" + }, + "warningText": { + "reasoning": "Nota: Menghidupkan keupayaan inferens akan mematikan fungsi panggilan secara automatik, yang merupakan pengehadan model DeepSeek-V3.1.", + "functionCall": "Nota: Mendayakan panggilan fungsi akan mematikan keupayaan inferens secara automatik, yang merupakan pengehadan model DeepSeek-V3.1." + }, + "confirmEnable": "Sahkan untuk membuka" + } +} diff --git a/src/renderer/src/i18n/ms-MY/image.json b/src/renderer/src/i18n/ms-MY/image.json new file mode 100644 index 000000000..b0998a22f --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "Pemuatan imej gagal", + "loading": "Gambar dimuatkan...", + "preview": "Pratonton gambar", + "save": "simpan gambar", + "saveAs": "Simpan imej sebagai...", + "saveSuccess": "Imej disimpan", + "saveFailed": "Penyimpanan imej gagal" +} diff --git a/src/renderer/src/i18n/ms-MY/index.ts b/src/renderer/src/i18n/ms-MY/index.ts new file mode 100644 index 000000000..0d560b797 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Kekunci peringkat atas yang berasingan +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Model Qwen', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + 'DeepChat hanya alat bantuan. Apabila pengguna memulakan carian secara aktif, DeepChat menyusun dan merumuskan data awam yang dikembalikan oleh enjin carian supaya pengguna dapat melihat dan memahami hasil carian dengan lebih mudah.\n\n1. **Penggunaan Data Awam** \nPerisian ini hanya memproses data pada laman sasaran atau enjin carian yang tersedia secara awam dan boleh dicapai tanpa log masuk. Sebelum menggunakan perisian ini, sila semak dan patuhi terma perkhidmatan laman sasaran atau enjin carian untuk memastikan penggunaan anda sah dan mematuhi peraturan. \n\n2. **Ketepatan Maklumat dan Tanggungjawab** \nKandungan yang disusun dan dijana oleh perisian ini hanya untuk rujukan, dan tidak membentuk nasihat undang-undang, perniagaan, atau nasihat lain dalam apa-apa bentuk. Pembangun tidak memberikan sebarang jaminan terhadap ketepatan, kelengkapan, ketepatan masa, atau kesahan hasil carian. Sebarang akibat daripada penggunaan perisian ini ditanggung sepenuhnya oleh pengguna. \n\n3. **Penafian** \nPerisian ini disediakan dalam keadaan "as is". Pembangun tidak menanggung sebarang jaminan atau tanggungjawab, sama ada tersurat atau tersirat, terhadap prestasi, kestabilan, atau kesesuaiannya. Jika penggunaan perisian ini menyebabkan sebarang pertikaian, kerugian, atau liabiliti undang-undang akibat pelanggaran undang-undang, peraturan, atau ketetapan laman sasaran, pembangun tidak menanggung sebarang tanggungjawab. \n\n4. **Tanggungjawab Pengguna** \nSebelum menggunakan perisian ini, pengguna hendaklah memahami dan mengesahkan bahawa penggunaan mereka tidak akan melanggar hak harta intelek, rahsia perdagangan, atau hak sah pihak lain. Sebarang pertikaian undang-undang dan akibat yang timbul daripada penggunaan perisian ini secara tidak wajar adalah tanggungjawab pengguna sepenuhnya. \n\nDengan menggunakan perisian ini, pengguna dianggap telah membaca, memahami, dan bersetuju dengan semua terma dalam penafian ini. Jika ada pertanyaan, sila dapatkan nasihat daripada penasihat undang-undang profesional.' +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/ms-MY/mcp.json b/src/renderer/src/i18n/ms-MY/mcp.json new file mode 100644 index 000000000..77312c7fb --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/mcp.json @@ -0,0 +1,307 @@ +{ + "title": "Tetapan MCP", + "description": "Urus dan konfigurasikan pelayan dan alatan MCP (Model Context Protocol).", + "enabledTitle": "Dayakan MCP", + "enabledDescription": "Setelah didayakan, perkhidmatan yang didayakan akan bermula secara automatik", + "enableToAccess": "Sila dayakan MCP dahulu untuk mengakses pilihan konfigurasi", + "errors": { + "loadConfigFailed": "Gagal memuatkan konfigurasi MCP", + "setEnabledFailed": "Gagal menetapkan status daya MCP", + "getServerStatusFailed": "Gagal mendapatkan status {serverName} pelayan", + "addServerFailed": "Gagal menambah pelayan", + "updateServerFailed": "Kemas kini pelayan gagal", + "removeServerFailed": "Gagal memadam pelayan", + "maxDefaultServersReached": "Hanya sehingga 30 pelayan lalai boleh ditetapkan", + "toggleDefaultServerFailed": "Gagal menukar keadaan pelayan lalai", + "resetToDefaultFailed": "Pemulihan pelayan lalai gagal", + "toggleServerFailed": "Gagal menukar status {serverName} pelayan", + "loadToolsFailed": "Gagal memuatkan alat", + "loadPromptsFailed": "Gagal memuatkan templat gesaan", + "loadResourcesFailed": "Gagal memuatkan sumber", + "callToolFailed": "Gagal memanggil alat {toolName}", + "toolCallError": "Ralat panggilan alat: {error}", + "mcpDisabled": "Fungsi MCP dilumpuhkan", + "getPromptFailed": "Gagal mendapatkan templat segera", + "readResourceFailed": "Gagal membaca sumber", + "promptNotFound": "Templat gesaan '{name}' tidak ditemui", + "emptyPromptContent": "'{name}' Prompt kosong", + "missingParameters": "Parameter tiada: {params}", + "invalidParameters": "Parameter tidak sah: {params}" + }, + "tabs": { + "servers": "pelayan", + "tools": "alat" + }, + "serverList": "Senarai pelayan", + "addServer": "Tambah pelayan", + "running": "Berlari", + "stopped": "Berhenti", + "stopServer": "Hentikan pelayan", + "startServer": "Mulakan pelayan", + "noServersFound": "Pelayan tidak ditemui", + "addServerDialog": { + "title": "Tambah pelayan", + "description": "Konfigurasikan pelayan MCP baharu" + }, + "editServerDialog": { + "title": "Edit pelayan", + "description": "Edit konfigurasi pelayan MCP" + }, + "serverForm": { + "name": "Nama pelayan", + "namePlaceholder": "Masukkan nama pelayan", + "nameRequired": "Nama pelayan tidak boleh kosong", + "type": "Jenis pelayan", + "typePlaceholder": "Pilih jenis pelayan", + "typeStdio": "input dan output standard", + "typeSse": "acara dihantar pelayan", + "typeInMemory": "Ingatan", + "baseUrl": "BasicURL", + "baseUrlPlaceholder": "Masukkan pangkalan pelayan URL (cth: http://localhost:3000)", + "command": "Pesanan", + "commandPlaceholder": "Masukkan arahan", + "commandRequired": "Perintah tidak boleh kosong", + "args": "parameter", + "argsPlaceholder": "Satu parameter setiap baris", + "addArg": "Tambah parameter", + "argPlaceholder": "Masukkan nilai parameter", + "argsRequired": "Parameter tidak boleh kosong", + "env": "pembolehubah persekitaran", + "envPlaceholder": "Masukkan pembolehubah persekitaran dalam format JSON", + "envInvalid": "Pembolehubah persekitaran mestilah dalam format JSON yang sah", + "description": "huraikan", + "descriptionPlaceholder": "Masukkan perihalan pelayan", + "descriptions": "huraikan", + "descriptionsPlaceholder": "Masukkan perihalan pelayan", + "icon": "ikon", + "iconPlaceholder": "ikon input", + "icons": "ikon", + "iconsPlaceholder": "ikon input", + "autoApprove": "Keizinan automatik", + "autoApproveAll": "semua", + "autoApproveRead": "membaca", + "autoApproveWrite": "menulis", + "autoApproveHelp": "Pilih jenis operasi yang memerlukan kebenaran automatik dan boleh dilakukan tanpa pengesahan pengguna", + "submit": "serahkan", + "add": "Tambah ke", + "update": "memperbaharui", + "cancel": "Batal", + "jsonConfigIntro": "Anda boleh menampal konfigurasi JSON secara langsung atau memilih untuk mengkonfigurasi pelayan secara manual.", + "jsonConfig": "Konfigurasi JSON", + "jsonConfigPlaceholder": "Sila tampal konfigurasi format JSON pelayan MCP", + "jsonConfigExample": "Contoh konfigurasi JSON", + "parseSuccess": "Penghuraian konfigurasi berjaya", + "configImported": "Konfigurasi berjaya diimport", + "parseError": "Ralat hurai", + "skipToManual": "Langkau ke konfigurasi manual", + "parseAndContinue": "kupas dan teruskan", + "folders": "senarai folder", + "addFolder": "Tambah folder", + "selectFolder": "Pilih folder", + "selectFolderError": "Gagal memilih folder", + "noFoldersSelected": "Tiada folder dipilih" + }, + "deleteServer": "Padam pelayan", + "editServer": "Edit pelayan", + "setDefault": "Tetapkan sebagai lalai", + "removeDefault": "Alih keluar lalai", + "isDefault": "Pelayan lalai", + "default": "lalai", + "setAsDefault": "Tetapkan sebagai pelayan lalai", + "removeServer": "Padam pelayan", + "confirmRemoveServer": "Adakah anda pasti mahu memadamkan pelayan {name}? Tindakan ini tidak boleh dibuat asal.", + "removeServerDialog": { + "title": "Padam pelayan" + }, + "confirmDelete": { + "title": "Sahkan pemadaman", + "description": "Adakah anda pasti mahu memadamkan pelayan {name}? Tindakan ini tidak boleh dibuat asal.", + "confirm": "padam", + "cancel": "Batal" + }, + "resetToDefault": "Pulihkan perkhidmatan lalai", + "resetConfirmTitle": "Pulihkan perkhidmatan lalai", + "resetConfirmDescription": "Tindakan ini akan memulihkan semua pelayan lalai sambil mengekalkan pelayan tersuai anda. Sebarang pengubahsuaian pada pelayan lalai akan hilang.", + "resetConfirm": "pulih", + "tools": { + "searchPlaceholder": "Alat carian...", + "noToolsAvailable": "Tiada alat tersedia lagi", + "selectToolToDebug": "Pilih alat untuk nyahpepijat", + "dialogDescription": "Alat penyahpepijatan dan ujian yang disediakan oleh pelayan MCP", + "toolsCount": "alatan", + "availableTools": "Alat yang ada", + "toolList": "Senarai alatan", + "functionDescription": "Penerangan fungsi", + "invalidJson": "Format JSON tidak sah", + "inputHint": "Sila masukkan parameter dalam format JSON", + "required": "diperlukan", + "noDescription": "Tiada penerangan lagi", + "input": "parameter input", + "path": "laluan", + "pathPlaceholder": "laluan fail input", + "searchPattern": "Mod carian", + "searchPatternPlaceholder": "Masukkan ungkapan biasa", + "filePattern": "mod fail", + "filePatternPlaceholder": "Mod fail input, contohnya: *.md", + "executeButton": "Alat perlaksanaan", + "resultTitle": "Hasil pelaksanaan", + "runningTool": "Alat pelaksana", + "loading": "memuatkan...", + "error": "Gagal memuatkan", + "available": "Alat {count} tersedia", + "none": "Tiada alat tersedia", + "title": "Alat MCP", + "description": "Alat yang disediakan oleh pelayan MCP", + "loadError": "Gagal memuatkan alat", + "parameters": "parameter", + "refresh": "segarkan semula", + "disabled": "MCP dilumpuhkan", + "enableToUse": "Sila dayakan MCP dahulu untuk menggunakan alat tersebut", + "enabled": "Dayakan MCP", + "enabledDescription": "Dayakan fungsi MCP untuk menggunakan panggilan alat", + "acpManagedHint": "Alat MCP diuruskan oleh \"ACP Agent\"", + "acpServersSelected": "{count} MCP dipilih", + "acpServersNone": "Agent tidak dikonfigurasikan dengan MCP", + "jsonInputPlaceholder": "Masukkan parameter dalam format JSON", + "type": "taip", + "annotations": "anotasi", + "empty": "null", + "invalidJsonFormat": "Format JSON tidak betul", + "allowedValues": "nilai yang dibenarkan", + "arrayItemValues": "Nilai elemen tatasusunan" + }, + "inmemory": { + "bochaSearch": { + "name": "Bocha carian", + "desc": "Bocha carian API https://open.bochaai.com/" + }, + "buildInFileSystem": { + "name": "sistem fail", + "desc": "Dayakan DeepChat untuk beroperasi pada fail tempatan" + }, + "Artifacts": { + "name": "Artifacts", + "desc": "Kandungan Artifacts yang pelbagai untuk output DeepChat anda" + }, + "braveSearch": { + "name": "Carian Brave", + "desc": "Brave carian API https://brave.com/search/api/" + }, + "difyKnowledge": { + "name": "Carian asas pengetahuan Dify", + "desc": "Perkhidmatan carian pangkalan pengetahuan Dify boleh mencari kandungan dalam pangkalan pengetahuan Dify" + }, + "ragflowKnowledge": { + "name": "Carian asas pengetahuan RAGFlow", + "desc": "Perkhidmatan mendapatkan pangkalan pengetahuan RAGFlow boleh mencari kandungan pangkalan pengetahuan RAGFlow" + }, + "fastGptKnowledge": { + "name": "Carian asas pengetahuan FastGPT", + "desc": "Perkhidmatan mendapatkan pangkalan pengetahuan FastGPT boleh mencari kandungan pangkalan pengetahuan FastGPT" + }, + "builtinKnowledge": { + "name": "Carian asas pengetahuan terbina dalam", + "desc": "DeepChat mempunyai perkhidmatan pencarian pangkalan pengetahuan terbina dalam, yang boleh mencari kandungan pangkalan pengetahuan terbina dalam DeepChat." + }, + "deepchat-inmemory/custom-prompts-server": { + "name": "Perkataan gesaan tersuai", + "desc": "Perkhidmatan kata gesaan tersuai terbina dalam DeepChat" + }, + "deepchat-inmemory/deep-research-server": { + "name": "DeepResearch", + "desc": "DeepChat mempunyai perkhidmatan penyelidikan mendalam terbina dalam berdasarkan carian Bocha (perhatikan bahawa model konteks yang panjang diperlukan untuk menggunakannya dan model dengan konteks yang tidak mencukupi mungkin gagal)" + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Kata gesaan templat automatik", + "desc": "Pilih kata gesaan tersuai yang paling sesuai secara automatik berdasarkan input pengguna dan isi templat kata gesaan dengan bijak" + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Carian sejarah perbualan", + "desc": "DeepChat mempunyai perkhidmatan carian sejarah perbualan terbina dalam yang boleh mencari rekod perbualan sejarah dan kandungan mesej." + }, + "deepchat/apple-server": { + "name": "Pembantu sistem macOS", + "desc": "Benarkan model mengendalikan kalendar, kenalan, e-mel, peta, memo, peringatan dan fungsi sistem lain macOS" + } + }, + "prompts": { + "noPromptsAvailable": "Tiada Prompts tersedia lagi", + "noDescription": "Tiada penerangan lagi", + "selectPrompt": "Prompt yang dipilih dipaparkan di sini", + "parameters": "Parameter Prompt", + "input": "parameter input", + "runningPrompt": "Prompt semakin meningkat", + "executeButton": "Klik untuk mendapatkan", + "resultTitle": "Butiran Prompt", + "resetToDefault": "Tetapkan semula kepada parameter lalai", + "invalidJson": "Format JSON tidak sah", + "parametersHint": "Sila masukkan parameter dalam format JSON, pemformatan automatik disokong", + "dialogDescription": "Menyahpepijat dan menguji templat gesaan yang disediakan oleh pelayan MCP" + }, + "resources": { + "noResourcesAvailable": "Tiada Resources", + "selectResource": "Kandungan Resources dipaparkan di sini", + "loading": "memuatkan", + "loadContent": "Dapatkan kandungan Resource", + "pleaseSelect": "Klik untuk mendapatkan butiran paparan Resources", + "dialogDescription": "Semak imbas dan lihat sumber yang disediakan oleh pelayan MCP" + }, + "market": { + "browseBuiltin": "Semak imbas pasaran MCP terbina dalam", + "builtinTitle": "Pasaran MCP", + "poweredBy": "Powered by MCPRouter", + "keyGuide": "Dapatkan kunci", + "keyHelpText": "Sila datang dahulu", + "keyHelpEnd": "Selepas memohon API Key, isikan kotak input di atas", + "apiKeyPlaceholder": "Masukkan MCPRouter API Key", + "apiKeyRequiredTitle": "Memerlukan API Key", + "apiKeyRequiredDesc": "Sila isikan MCPRouter API Key sebelum pemasangan", + "install": "Pasang", + "installed": "Dipasang", + "installSuccess": "Pemasangan berjaya", + "installFailed": "Pemasangan gagal", + "noMore": "tiada lagi", + "empty": "Tiada perkhidmatan lagi", + "loadMore": "memuatkan lebih banyak", + "pullDownToLoad": "Teruskan tatal ke bawah untuk memuatkan lagi" + }, + "sampling": { + "approve": "setuju", + "confirming": "Mengesahkan...", + "confirm": "Hantar respons model", + "sendResponse": "Hantar jawapan", + "selectModel": "Pilih model", + "respondWith": "Model tindak balas:", + "maxTokensInfo": "Panjang tindak balas maksimum: {maxTokens} tokens", + "contentType": { + "audio": "Audio", + "image": "gambar", + "text": "teks" + }, + "description": "Lihat konteks yang dikongsi oleh pelayan MCP dan pilih sama ada untuk menjana respons.", + "imageAlt": "Gambar{索引}", + "messagesTitle": "konteks perbualan", + "noModels": "Tiada model yang sepadan didayakan.\nDayakan model yang berkenaan dalam Tetapan untuk meneruskan.", + "noVisionModels": "Tiada model yang didayakan secara visual didayakan.\nDayakan model visual dalam Tetapan untuk meneruskan.", + "preference": { + "cost": "Keutamaan kos", + "hints": "Petua model", + "intelligence": "Perisikan dahulu", + "speed": "Keutamaan kelajuan" + }, + "preferencesTitle": "Keutamaan model", + "reject": "menolak", + "selectedModelLabel": "Balas menggunakan {model} ({provider})", + "systemPrompt": "Gesaan sistem", + "title": "Contoh permintaan daripada {server}", + "unknownHint": "gesaan tanpa nama", + "unknownMime": "Jenis MIME tidak diketahui", + "unknownServer": "pelayan tidak diketahui", + "unsupportedMessage": "Jenis kandungan ini tidak disokong.", + "visionWarning": "Model yang dipilih tidak menyokong input visual.\nSila pilih model berkebolehan visual sebelum meneruskan.", + "autoApproving": "Permintaan sampel MCP daripada {server}", + "autoApproveIn": "{seconds} secara automatik menggunakan kelulusan {model} selepas beberapa saat", + "reviewRequest": "semak butiran", + "sessionActive": "Sesi aktif - permintaan akan diluluskan secara automatik" + } +} diff --git a/src/renderer/src/i18n/ms-MY/model.json b/src/renderer/src/i18n/ms-MY/model.json new file mode 100644 index 000000000..b316772a4 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Cari model..." + }, + "error": { + "loadFailed": "Gagal memuatkan model" + }, + "type": { + "custom": "model tersuai", + "official": "model rasmi" + }, + "add": { + "namePlaceholder": "Nama model", + "idPlaceholder": "ModelID", + "contextLengthPlaceholder": "panjang konteks", + "maxTokensPlaceholder": "Maxtoken" + }, + "actions": { + "add": "Tambah model", + "enableAll": "Dayakan semua", + "disableAll": "Lumpuhkan semua" + }, + "sort": { + "status": "mengikut status", + "name": "dengan nama" + }, + "filter": { + "label": "penapis", + "clearAll": "Kosongkan penapis", + "visibleCount": "Tunjukkan {visible}/{total}", + "capabilities": "kebolehan", + "types": "taip", + "capabilityOptions": { + "vision": "Penglihatan", + "functionCall": "panggilan fungsi", + "reasoning": "penaakulan", + "search": "carian internet" + }, + "typeOptions": { + "chat": "dialog", + "embedding": "vektor", + "rerank": "menyusun semula", + "imageGeneration": "penjanaan imej", + "videoGeneration": "penjanaan video" + } + }, + "tags": { + "reasoning": "penaakulan", + "chat": "dialog", + "code": "kod", + "writing": "menulis", + "analysis": "menganalisis" + } +} diff --git a/src/renderer/src/i18n/ms-MY/plan.json b/src/renderer/src/i18n/ms-MY/plan.json new file mode 100644 index 000000000..bc1fc5866 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/plan.json @@ -0,0 +1,4 @@ +{ + "title": "perancangan misi", + "completed": "Selesai" +} diff --git a/src/renderer/src/i18n/ms-MY/promptSetting.json b/src/renderer/src/i18n/ms-MY/promptSetting.json new file mode 100644 index 000000000..15165057d --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "Pengurusan perkataan segera", + "addTitle": "Tambah perkataan gesaan", + "addDescription": "Buat templat perkataan gesaan tersuai baharu", + "editTitle": "Edit perkataan", + "editDescription": "Ubah suai templat perkataan gesaan yang dipilih", + "name": "nama", + "namePlaceholder": "Sila masukkan nama perkataan gesaan", + "description": "huraikan", + "descriptionPlaceholder": "Sila masukkan perihalan (pilihan)", + "promptContent": "perkataan segera", + "contentPlaceholder": "Sila masukkan kandungan perkataan gesaan", + "basicInfo": "Maklumat asas", + "contentTip": "Menyokong penggunaan ruang letak berubah-ubah, seperti {openBrace}{openBrace}variable{closeBrace}{closeBrace}, dan boleh menentukan parameter yang sepadan dalam bahagian parameter", + "noPrompt": "Tiada kata gesaan lagi, sila klik pada penjuru kanan sebelah atas untuk menambah", + "noPromptDesc": "Klik butang Baharu di penjuru kanan sebelah atas untuk mencipta perkataan gesaan pertama anda", + "active": "membolehkan", + "noDescription": "Tiada penerangan lagi", + "customDate": "Sesuaikan", + "showMore": "Tunjukkan lagi", + "showLess": "dekat", + "export": "Eksport", + "import": "import", + "exportSuccess": "Eksport berjaya", + "exportFailed": "Eksport gagal", + "importSuccess": "Import berjaya", + "importFailed": "Import gagal", + "importStats": "{added} ditambah dan {updated} perkataan gesaan dikemas kini", + "parameters": "parameter", + "addParameter": "Tambah parameter", + "noParameters": "Tiada parameter lagi", + "noParametersDesc": "Klik butang di atas untuk menambah parameter. Parameter boleh digunakan untuk mencipta ruang letak berubah dalam perkataan gesaan.", + "parameterName": "Nama parameter", + "parameterDescription": "Perihalan parameter", + "parameterNamePlaceholder": "Sila masukkan nama parameter", + "parameterDescriptionPlaceholder": "Sila masukkan perihalan parameter", + "required": "Diperlukan", + "characters": "watak", + "fileManagement": "Pengurusan fail", + "uploadFromDevice": "Muat naik daripada peranti", + "uploadFromDeviceDesc": "Menyokong teks, dokumen, CSV dan format lain", + "uploadedFiles": "Fail dimuat naik", + "noFiles": "Tiada fail lagi", + "noFilesUploadDesc": "Klik di atas untuk memuat naik fail", + "uploadSuccess": "Muat naik berjaya", + "uploadedCount": "Fail {count} dimuat naik", + "confirmDelete": "Adakah anda pasti mahu memadamkan perkataan gesaan \"{name}\"?", + "confirmDeleteDescription": "Operasi ini tidak boleh diterbalikkan, dan perkataan gesaan tidak boleh dipulihkan selepas pemadaman.", + "confirmDeleteSystemPrompt": "Adakah anda pasti mahu memadamkan perkataan gesaan sistem \"{name}\"?", + "confirmDeleteSystemPromptDescription": "Operasi ini tidak boleh diterbalikkan, dan kata gesaan sistem tidak boleh dipulihkan selepas pemadaman.", + "deleteSuccess": "Padam berjaya", + "deleteFailed": "Padam gagal", + "inactive": "Dilumpuhkan", + "clickToEnable": "Klik untuk membolehkan", + "clickToDisable": "Klik untuk melumpuhkan", + "enableSuccess": "Berjaya diaktifkan", + "disableSuccess": "Berjaya dilumpuhkan", + "toggleFailed": "Gagal menukar status", + "enablePrompt": "Dayakan perkataan gesaan ini", + "sourceLocal": "tempatan", + "sourceImported": "import", + "sourceBuiltin": "terbina dalam", + "defaultSystemPrompt": "Kata gesaan sistem lalai", + "defaultSystemPromptPlaceholder": "Sila masukkan perkataan gesaan sistem lalai, yang akan digunakan sebagai kata gesaan sistem lalai untuk semua perbualan baharu...", + "defaultSystemPromptDescription": "Kata gesaan ini akan menjadi kata gesaan sistem lalai untuk semua perbualan baharu. Anda boleh mengubah suainya semasa membuat perbualan. Harap maklum bahawa tetapan ini akan berkuat kuasa apabila anda membuat perbualan baharu seterusnya.", + "typing": "Memasuki", + "saving": "Menyimpan", + "saved": "disimpan", + "saveDefaultPromptFailed": "Gagal menyimpan perkataan gesaan sistem lalai", + "systemPrompts": "Kata gesaan sistem", + "customPrompts": "Perkataan gesaan tersuai", + "addSystemPrompt": "Menambah perkataan gesaan sistem", + "addCustomPrompt": "Tambahkan perkataan gesaan tersuai", + "editSystemPrompt": "Edit perkataan gesaan sistem", + "addSystemPromptDesc": "Buat perkataan gesaan sistem baharu", + "editSystemPromptDesc": "Ubah suai kata gesaan sistem yang dipilih", + "selectSystemPrompt": "Pilih perkataan gesaan sistem", + "systemPromptDescription": "Kata gesaan sistem yang dipilih akan digunakan sebagai kata gesaan sistem lalai untuk perbualan baharu.", + "emptySystemPromptOption": "Kata gesaan sistem kosong", + "emptySystemPromptDescription": "Apabila dipilih, sesi baharu tidak akan mengandungi perkataan gesaan sistem.", + "preview": "Pratonton", + "systemPromptChanged": "Kata gesaan sistem telah ditukar", + "systemPromptChangeFailed": "Gagal menukar perkataan gesaan sistem", + "systemPromptAdded": "Kata gesaan sistem berjaya ditambahkan", + "systemPromptAddedAndSwitched": "Kata gesaan sistem telah berjaya ditambahkan dan telah ditukar secara automatik kepada lalai", + "systemPromptUpdated": "Kata gesaan sistem berjaya dikemas kini", + "systemPromptSaveFailed": "Gagal menyimpan perkataan gesaan sistem", + "systemPromptDeleted": "Kata gesaan sistem berjaya dipadamkan", + "systemPromptDeleteFailed": "Gagal memadamkan perkataan gesaan sistem", + "systemPromptEditTip": "Simpan secara automatik apabila fokus hilang selepas pengubahsuaian", + "resetToDefault": "Pulihkan lalai", + "resetToDefaultSuccess": "Dipulihkan kepada kandungan lalai", + "resetToDefaultFailed": "Pemulihan lalai gagal", + "parameterRequired": "Parameter yang diperlukan" +} diff --git a/src/renderer/src/i18n/ms-MY/routes.json b/src/renderer/src/i18n/ms-MY/routes.json new file mode 100644 index 000000000..c4e33d9bb --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "berbual", + "welcome": "selamat datang", + "settings": "sediakan", + "settings-common": "Tetapan umum", + "settings-provider": "Tetapan pembekal perkhidmatan", + "settings-mcp": "Tetapan MCP", + "settings-deepchat-agents": "DeepChat Agent", + "settings-database": "Tetapan data", + "settings-about": "kira-kira", + "settings-shortcut": "kekunci pintasan", + "settings-display": "tetapan paparan", + "settings-knowledge-base": "asas pengetahuan", + "settings-prompt": "Pengurusan Prompt", + "settings-mcp-market": "Pasaran MCP", + "settings-acp": "ACP Agent", + "settings-skills": "Tetapan Skills", + "settings-notifications-hooks": "Hooks", + "settings-dashboard": "Papan pemuka data", + "settings-environments": "persekitaran direktori", + "settings-remote": "jauh", + "settings-plugins": "pemalam", + "settings-overview": "Gambaran keseluruhan tetapan" +} diff --git a/src/renderer/src/i18n/ms-MY/settings.json b/src/renderer/src/i18n/ms-MY/settings.json new file mode 100644 index 000000000..804789ca1 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "sediakan", + "common": { + "title": "Tetapan umum", + "resetData": "Tetapkan semula data", + "language": "bahasa", + "languageSelect": "Pilih bahasa", + "searchEngine": "enjin carian", + "searchEngineSelect": "Pilih enjin carian", + "searchPreview": "Pratonton carian", + "launchAtLoginEnabled": "Lancarkan DeepChat semasa but", + "autoScrollEnabled": "Tatal secara automatik apabila dijana", + "privacyMode": "mod privasi", + "privacyModeDescription": "Selepas mengaktifkan mod privasi, DeepChat tidak akan memulakan permintaan berikut secara automatik:", + "privacyModeAutoUpdate": "Semakan kemas kini apl", + "privacyModeProviderDb": "Penyedia perkhidmatan dan penyegaran metadata model", + "privacyModeAcpRegistry": "Muat semula pendaftaran ACP dan penyegerakan ikon", + "privacyModeNpmRegistry": "Pengesanan automatik pendaftaran MCP npm", + "privacyModeManualActions": "Pemeriksaan manual dan muat semula manual terus tersedia.", + "privacyModeIntegrations": "Penyepaduan pihak ketiga seperti MCP / Remote yang dikonfigurasikan sendiri tidak terjejas", + "autoCompaction": { + "title": "pemampatan automatik", + "enabled": "Dayakan pemampatan automatik", + "description": "Apabila perbualan menghampiri had tetingkap konteks model, DeepChat secara automatik meringkaskan sejarah lama untuk membantu perbualan diteruskan. Selepas ditutup, sejarah melebihi belanjawan akan dibuang terus dan tiada ringkasan akan dijana.", + "thresholdLabel": "ambang pencetus", + "thresholdMin": "Pendahuluan ({value}%)", + "thresholdMax": "Ditunda ({value}%)", + "thresholdDescription": "Pemampatan bermula apabila penghunian prompt mencapai bahagian ini daripada belanjawan sejarah yang berkesan. Nilai yang lebih rendah menghasilkan penimbal yang lebih besar, dan nilai yang lebih tinggi mengekalkan lebih banyak konteks asal.", + "retainPairsLabel": "Simpan mesej terbaharu", + "retainPairsValue": "pasangan {count}", + "retainPairsDescription": "Pasangan mesej user dan assistant yang terbaharu siap sentiasa dikekalkan dan tidak mengambil bahagian dalam pemampatan. query terakhir semasa tidak dikira." + }, + "searchAssistantModel": "model pembantu", + "selectModel": "Pilih model", + "proxyMode": "mod proksi", + "proxyModeSelect": "Pilih mod proksi", + "proxyModeSystem": "ejen sistem", + "proxyModeNone": "Tidak menggunakan proksi", + "proxyModeCustom": "Proksi tersuai", + "customProxyUrl": "Alamat proksi tersuai", + "customProxyUrlPlaceholder": "Contohnya: http://127.0.0.1:7890", + "invalidProxyUrl": "Alamat proksi tidak sah, sila masukkan http/https URL yang sah", + "addCustomSearchEngine": "Tambah enjin carian tersuai", + "addCustomSearchEngineDesc": "Untuk menambah enjin carian baharu, anda perlu memberikan nama dan carian URL. URL mesti mengandungi {query} sebagai pemegang tempat pertanyaan.", + "searchEngineName": "Nama enjin carian", + "searchEngineNamePlaceholder": "Sila masukkan nama enjin carian", + "searchEngineUrl": "Cari URL", + "searchEngineUrlPlaceholder": "Seperti: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "URL mesti mengandungi {'{'}query{'}'} sebagai pemegang tempat pertanyaan", + "deleteCustomSearchEngine": "Padamkan enjin carian tersuai", + "deleteCustomSearchEngineDesc": "Adakah anda pasti mahu memadamkan enjin carian tersuai \"{name}\"? Tindakan ini tidak boleh dibuat asal.", + "testSearchEngine": "Uji enjin carian", + "testSearchEngineDesc": "Carian ujian akan dijalankan menggunakan enjin carian {engine}, yang akan mencari kata kunci \"cuaca\".", + "testSearchEngineNote": "Jika halaman carian memerlukan log masuk atau operasi lain, anda boleh melakukannya dalam tetingkap ujian. Sila tutup tetingkap ujian selepas menyelesaikan ujian.", + "theme": "tema", + "themeSelect": "Pilih tema", + "themeLight": "warna terang", + "themeDark": "Gelap", + "themeSystem": "Ikut sistem", + "closeToQuit": "Keluar dari program apabila mengklik butang tutup", + "shortcut": { + "title": "Tetapan kekunci pintasan", + "newChat": "Sembang baharu" + }, + "contentProtection": "Perlindungan tayangan skrin", + "contentProtectionDialogTitle": "Pengesahan suis perlindungan tayangan skrin", + "contentProtectionEnableDesc": "Menghidupkan perlindungan siaran skrin boleh menghalang perisian siaran skrin daripada menangkap tetingkap utama DeepChat untuk melindungi privasi kandungan anda. Sila ambil perhatian bahawa fungsi ini tidak akan menyembunyikan semua antara muka sepenuhnya, sila gunakannya dengan munasabah dan patuh. Selain itu, tidak semua perisian penyiaran skrin menghormati tetapan privasi pengguna. Fungsi ini mungkin gagal pada sesetengah perisian penyiaran skrin yang tidak mematuhi tetapan privasi dan tetingkap hitam mungkin kekal dalam sesetengah persekitaran.", + "contentProtectionDisableDesc": "Mematikan perlindungan siaran skrin akan membolehkan perisian siaran skrin menangkap tetingkap DeepChat.", + "contentProtectionRestartNotice": "Menukar tetapan ini akan menyebabkan program dimulakan semula. Adakah anda pasti mahu meneruskan?", + "copyWithCotEnabled": "Salin maklumat COT", + "traceDebugEnabled": "Jejaki panggilan", + "loggingEnabled": "Dayakan pengelogan", + "loggingDialogTitle": "Sahkan perubahan tetapan log", + "loggingEnableDesc": "Mendayakan pengelogan akan membantu kami mendiagnosis masalah dan menambah baik aplikasi. Fail log mungkin mengandungi maklumat sensitif.", + "loggingDisableDesc": "Melumpuhkan pengelogan akan menghentikan pengumpulan log aplikasi.", + "charactersUnit": "watak", + "loggingRestartNotice": "Menukar tetapan ini akan menyebabkan program dimulakan semula. Adakah anda pasti mahu meneruskan?", + "openLogFolder": "Buka folder log", + "notifications": "Pemberitahuan sistem", + "notificationsDesc": "Apabila DeepChat tiada di latar depan, pemberitahuan sistem akan dihantar jika sesi dijana.", + "fileMaxSize": "saiz fail maksimum", + "fileMaxSizeHint": "Hadkan saiz muat naik maksimum satu fail", + "defaultModel": { + "title": "Model lalai", + "chatModel": "Model sembang lalai" + } + }, + "deepchatAgents": { + "title": "DeepChat Agents", + "description": "Urus DeepChat Agent dan lalai sesi baharu mereka.", + "builtIn": "terbina dalam", + "editTitle": "Edit DeepChat Agent", + "createTitle": "DeepChat Agent baharu", + "unnamed": "Agent yang tidak dinamakan", + "name": "nama", + "namePlaceholder": "Contohnya Writer / Research / Translate", + "enabledLabel": "Status didayakan", + "descriptionLabel": "huraikan", + "descriptionPlaceholder": "Pilihan, digunakan untuk menerangkan tujuan Agent ini", + "avatarTitle": "avatar", + "avatarDefault": "lalai", + "avatarDefaultDesc": "DeepChat menggunakan ikon lalai, dan Agent lain menggunakan avatar teks.", + "avatarLucide": "ikon Lucide", + "avatarLucideDesc": "Pilih daripada ikon Lucide dan tetapkan warna terang/gelap masing-masing.", + "avatarMonogram": "Avatar teks", + "avatarMonogramDesc": "Gunakan dua huruf Inggeris pertama atau aksara Cina pertama untuk membezakan Agent.", + "lucideIcon": "Nama ikon Lucide", + "lightColor": "warna terang", + "darkColor": "warna gelap", + "monogramText": "Avatar teks", + "monogramPlaceholder": "Contohnya WR / Yan", + "backgroundColor": "warna latar belakang", + "modelsTitle": "model lalai", + "chatModel": "Model dialog lalai", + "assistantModel": "model pembantu", + "visionModel": "model visual", + "imageGenerationModel": "Model penjanaan imej", + "temperature": "suhu", + "contextLength": "panjang konteks", + "maxTokens": "Bilangan maksimum Token", + "thinkingBudget": "Fikirkan tentang bajet", + "reasoningEffort": "Kekuatan penaakulan", + "verbosity": "Tahap terperinci", + "interleaved": "Keserasian paksa dan pemikiran bersilang", + "systemPrompt": "Kata gesaan sistem lalai", + "systemPromptPlaceholder": "Biarkan kosong untuk menggunakan kata gesaan sistem kosong", + "defaultProjectPath": "Direktori lalai (pilihan)", + "defaultProjectPathPlaceholder": "Biarkan kosong untuk menggunakan direktori lalai global", + "permissionMode": "Keizinan lalai", + "permissionFullAccess": "Dayakan semua", + "permissionDefault": "Keizinan lalai", + "subagentsTitle": "subagent", + "subagentsDescription": "Konfigurasikan slot sesi `subagent_orchestrator` boleh guna semula subagent.", + "subagentsEnabled": "Dayakan subagent", + "subagentTargetType": "jenis sasaran", + "subagentTargetSelf": "ejen semasa", + "subagentTargetAgent": "Nyatakan ejen", + "subagentDisplayName": "nama paparan", + "subagentDescription": "Penerangan slot", + "subagentTargetAgentLabel": "ejen sasaran", + "subagentLimit": "Slot {count}/{max}", + "addSubagentSlot": "+ tambah slot", + "toolsTitle": "Alat terbina dalam", + "compactionTitle": "pemampatan automatik", + "compactionEnabled": "Dayakan pemampatan automatik", + "compactionDescription": "Tetapan ini hanya mempengaruhi sesi DeepChat yang baru dibuat berikutnya.", + "compactionThreshold": "ambang pencetus", + "compactionRetainPairs": "Simpan mesej terbaharu", + "deleteConfirm": "Adakah anda pasti mahu memadamkan Agent \"{name}\"? Sesi sejarahnya secara automatik kembali kepada DeepChat terbina dalam." + }, + "notificationsHooks": { + "title": "Hooks", + "description": "Arahan Hook kitaran hayat konfigurasi.", + "events": { + "title": "peristiwa", + "SessionStart": "Sesi bermula", + "UserPromptSubmit": "Penyerahan Pengguna", + "PreToolUse": "Sebelum panggilan alat", + "PostToolUse": "Selepas alat dipanggil", + "PostToolUseFailure": "Panggilan alat gagal", + "PermissionRequest": "permintaan kebenaran", + "Stop": "berhenti", + "SessionEnd": "sesi tamat" + }, + "commands": { + "title": "Hooks Commands", + "description": "Laksanakan arahan tersuai berdasarkan peristiwa kitaran hayat yang dipilih.", + "hint": "payload yang lengkap akan ditulis sebagai JSON kepada stdin.", + "commandPlaceholder": "perintah untuk melaksanakan", + "commandLabel": "Pesanan", + "name": "nama", + "namePlaceholder": "nama Hook", + "newHook": "Hook baharu", + "empty": "Pada masa ini tiada Hook, klik pada penjuru kanan sebelah atas untuk mencipta yang baharu.", + "defaultName": "Hook {index}", + "guideTitle": "Arahan penggunaan", + "guideDescription": "Selepas peristiwa yang diperiksa dicetuskan, DeepChat akan melaksanakan arahan ini. Peristiwa semasa boleh dibaca melalui stdin JSON, pembolehubah persekitaran dan ruang letak baris arahan.", + "deliveryTitle": "Kaedah pemindahan parameter", + "deliveryStdin": "payload yang lengkap akan ditulis sebagai JSON kepada stdin.", + "deliveryPlaceholder": "Pemegang tempat baris perintah boleh digunakan terus pada baris arahan.", + "deliveryEnv": "Set metadata asas yang sama juga ditulis kepada pembolehubah persekitaran secara serentak.", + "metadataOnly": "Pemegang tempat baris arahan lebih sesuai untuk metadata kecil; Butiran prompt, tool, permission, usage, stop, error, dll. hendaklah dibaca daripada stdin JSON.", + "stdinPreviewLabel": "Contoh stdin", + "placeholdersTitle": "pemegang tempat baris arahan", + "placeholdersDescription": "Pemegang tempat akan dikembangkan sebelum pelaksanaan dan boleh diletakkan terus selepas arahan sebagai parameter.", + "envTitle": "pembolehubah persekitaran", + "examplesTitle": "Contoh arahan", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Python", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Nama acara semasa", + "time": "Masa acara, format ISO-8601", + "isTest": "Sama ada dicetuskan oleh butang ujian", + "conversationId": "Sesi semasa ID", + "workdir": "Direktori kerja diselesaikan oleh sesi semasa", + "agentId": "Agent ID semasa (jika ada)", + "providerId": "Provider ID semasa (jika ada)", + "modelId": "Model ID semasa (jika ada)", + "messageId": "Mesej pengguna semasa ID (jika ada)", + "toolName": "Nama alat semasa (jika ada)", + "toolCallId": "Panggilan alat semasa ID (jika ada)" + } + }, + "test": { + "button": "ujian", + "testing": "Menguji...", + "success": "kejayaan", + "failed": "gagal", + "duration": "{ms} ms", + "statusCode": "HTTP {code}", + "exitCode": "Keluar kod {code}", + "retryAfter": "Cuba tunggu semula {ms} ms", + "stdout": "stdout", + "stderr": "stderr" + } + }, + "data": { + "title": "Tetapan data", + "syncEnable": "Dayakan penyegerakan data", + "syncFolder": "Segerakkan folder", + "openSyncFolder": "Buka folder penyegerakan", + "lastSyncTime": "Masa penyegerakan terakhir", + "never": "Tidak pernah disegerakkan", + "startBackup": "Sandarkan sekarang", + "backingUp": "Membuat sandaran...", + "importData": "Import data", + "incrementImport": "Import tambahan", + "overwriteImport": "Tolak import", + "backupSelectLabel": "Pilih titik masa sandaran", + "backupSelectDescription": "Sila pilih sandaran yang ingin anda import.", + "selectBackupPlaceholder": "Sila pilih sandaran", + "noBackupsAvailable": "Pada masa ini tiada sandaran tersedia, sila lakukan sandaran dahulu.", + "importConfirmTitle": "Sahkan data import", + "importConfirmDescription": "Import akan menulis ganti semua data semasa, termasuk sejarah sembang dan tetapan. Sila pastikan anda telah membuat sandaran data penting. Data akan dimuat semula secara automatik selepas import selesai.", + "importing": "Mengimport...", + "confirmImport": "Sahkan import", + "importSuccessTitle": "Import berjaya", + "importErrorTitle": "Import gagal", + "resetData": "Tetapkan semula data", + "resetConfirmTitle": "Sahkan tetapan semula data", + "resetConfirmDescription": "Sila pilih jenis data untuk ditetapkan semula. Operasi ini tidak boleh diterbalikkan dan apl akan dimulakan semula secara automatik selepas penetapan semula.", + "resetChatData": "Tetapkan semula data sembang", + "resetChatDataDesc": "Padamkan semua sejarah sembang dan sejarah perbualan", + "resetKnowledgeData": "Tetapkan semula data asas pengetahuan", + "resetKnowledgeDataDesc": "Padamkan semua fail asas pengetahuan dan data vektor", + "resetConfig": "Tetapkan semula konfigurasi", + "resetConfigDesc": "Padamkan semua tetapan aplikasi, konfigurasi model dan perkataan gesaan tersuai", + "resetAll": "tetapan semula penuh", + "resetAllDesc": "Padamkan semua data termasuk sejarah sembang, konfigurasi dan fail cache", + "resetting": "Menetapkan semula...", + "confirmReset": "Sahkan tetapan semula", + "resetCompleteDevTitle": "Set semula data selesai", + "resetCompleteDevMessage": "Dalam persekitaran pembangunan, sila mulakan semula aplikasi secara manual untuk melihat kesannya. Sila hentikan proses semasa dan jalankan semula pnpm run dev", + "toast": { + "backupSuccessTitle": "Sandaran berjaya", + "backupSuccessMessage": "Data berjaya disandarkan" + }, + "syncSectionTitle": "Sandaran dan penyegerakan data", + "operationsSectionTitle": "Operasi data", + "resetDataDescription": "Tetapkan semula sembang, pangkalan pengetahuan, konfigurasi atau semua data mengikut jenis.", + "databaseRepair": { + "title": "Pembaikan pangkalan data", + "description": "Mengesan dan membaiki pangkalan data secara automatik", + "button": "Semak dan baiki pangkalan data", + "running": "Menyemak dan membetulkan...", + "lastResultLabel": "Keputusan terkini: {result}", + "summaryHealthy": "Secara strukturnya normal", + "summaryRepaired": "Isu {count} telah dibetulkan", + "summaryRepairedWithManual": "Isu {repaired} telah diperbaiki, {manual} masih perlu ditangani secara manual", + "summaryManualOnly": "Masih terdapat isu {manual} yang memerlukan pemprosesan manual", + "manualHint": "Masih terdapat isu {count} yang belum dibetulkan secara automatik dan memerlukan pemprosesan manual.", + "toastSuggestedTitle": "Adalah disyorkan untuk membaiki pangkalan data", + "toastSuggestedDescription": "DeepChat telah mengesan masalah struktur pangkalan data ({reason}) dan kini boleh melakukan pembaikan pangkalan data.", + "toastAction": "untuk membaiki", + "toastHealthyTitle": "Struktur pangkalan data adalah normal", + "toastHealthyDescription": "Tiada isu schema ditemui yang perlu diperbaiki.", + "toastCompletedTitle": "Pembaikan pangkalan data selesai", + "toastRepairedDescription": "Isu {count} telah dibetulkan.", + "toastManualDescription": "Isu {repaired} telah dibetulkan dan isu {manual} masih perlu ditangani secara manual.", + "toastFailedTitle": "Pembaikan pangkalan data gagal", + "toastFailedDescription": "Pembaikan pangkalan data tidak dapat diselesaikan buat sementara waktu, sila semak log dan cuba lagi.", + "reasons": { + "missing-table": "meja hilang", + "missing-column": "Lajur tiada", + "column-count-mismatch": "Bilangan lajur tidak sepadan", + "type-mismatch": "Jenis lajur tidak padan" + } + }, + "databaseEncryption": { + "title": "penyulitan pangkalan data SQLite", + "description": "Gunakan SQLCipher untuk menyulitkan agent.db; kata laluan SQLite diperlukan apabila buka kunci sistem tidak tersedia.", + "enabled": "Didayakan", + "disabled": "Tidak didayakan", + "cipher": "Kaedah penyulitan", + "systemUnlock": "Buka kunci sistem", + "startupUnlock": "Mula Buka Kunci", + "lastMigration": "Penghijrahan terakhir", + "loading": "memuatkan", + "never": "tidak pernah", + "notRequired": "tidak perlu", + "systemUnlockAvailable": "Tersedia", + "systemUnlockUnavailable": "Tidak tersedia", + "systemUnlockMode": "Buka kunci sistem", + "manualUnlock": "Masukkan kata laluan secara manual", + "currentPassword": "Kata Laluan Semasa", + "newPassword": "Kata laluan SQLite baharu", + "confirmPassword": "Sahkan Kata Laluan", + "passwordMismatch": "Kata laluan yang dimasukkan dua kali tidak konsisten", + "systemCredentialStore": "Apabila storan selamat sistem tersedia, DeepChat menyimpan kata laluan SQLite yang disulitkan ke stor bukti kelayakan sistem (seperti macOS Keychain, Windows Credential Vault atau Linux secret store). Selepas buka kunci awal berjaya, pelancaran berikutnya biasanya dibuka secara automatik; anda hanya perlu memasukkan kunci penyulitan semula apabila data dipindahkan, bukti kelayakan sistem hilang atau tidak boleh dinyahsulit, dan storan selamat tidak tersedia.", + "safeStorageUnavailable": "Electron safeStorage tidak tersedia pada sistem semasa. Setelah didayakan, anda perlu memasukkan kata laluan secara manual setiap kali anda bermula.", + "enableButton": "Dayakan penyulitan", + "changeButton": "Tukar kata laluan", + "disableButton": "Matikan penyulitan", + "enabledTitle": "Penyulitan pangkalan data didayakan", + "changedTitle": "Kata laluan SQLite telah ditukar", + "disabledTitle": "Penyulitan pangkalan data dimatikan", + "failedTitle": "Operasi penyulitan pangkalan data gagal", + "failedDescription": "Sila semak kata laluan anda dan cuba lagi.", + "setPasswordButton": "Tetapkan kata laluan", + "enableDialogTitle": "Tetapkan kata laluan SQLite", + "changeDialogTitle": "Tukar kata laluan SQLite", + "disableDialogTitle": "Matikan penyulitan pangkalan data", + "enableDialogDescription": "Cipta pangkalan data SQLite yang disulitkan dan pindahkan data tempatan semasa ke dalamnya.", + "changeDialogDescription": "Pindahkan pangkalan data yang disulitkan semasa ke pangkalan data yang disulitkan baharu dengan kata laluan baharu.", + "disableDialogDescription": "Pindahkan pangkalan data yang disulitkan semasa kembali ke pangkalan data teks jelas setempat.", + "cancelButton": "Batal", + "unknown": "tidak diketahui" + }, + "modelConfigUpdate": { + "title": "Kemas kini konfigurasi model", + "descriptionPrefix": "daripada", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": "Data model penyegerakan projek", + "button": "Kemas kini sekarang", + "updating": "Mengemas kini...", + "updatedTitle": "Konfigurasi model dikemas kini", + "updatedDescription": "Disegarkan semula kepada metadata penyedia perkhidmatan terkini.", + "upToDateTitle": "Sudah yang terbaru", + "upToDateDescription": "Konfigurasi model tempatan semasa sudah menggunakan metadata pembekal terkini.", + "failedTitle": "Kemas kini gagal", + "failedDescription": "Konfigurasi model tidak boleh dimuat semula pada masa ini, sila cuba sebentar lagi." + }, + "yoBrowser": { + "title": "Kotak pasir YoBrowser", + "description": "Kotak pasir pelayar bebas, tidak berkongsi Cookie dan storan tempatan dengan aplikasi utama. Data YoBrowser boleh dikosongkan dengan satu klik di sini.", + "clearButton": "Kosongkan data YoBrowser", + "confirmTitle": "Sahkan untuk mengosongkan data YoBrowser?", + "confirmDescription": "Cookie, cache, LocalStorage, IndexedDB dan data lain sesi YoBrowser akan dipadamkan dan anda mungkin perlu log masuk ke tapak web sekali lagi.", + "confirmAction": "Kosongkan sekarang", + "clearing": "Membersihkan...", + "clearedTitle": "Data YoBrowser dikosongkan", + "clearedDescription": "Sesi kotak pasir telah ditetapkan semula dan tab yang berkaitan akan dimuatkan semula.", + "clearFailedTitle": "Pembersihan gagal", + "clearFailedDescription": "Sila cuba lagi atau semak log untuk mendapatkan maklumat lanjut." + }, + "privacyTitle": "Data & Privacy", + "privacyDescription": "Urus penyegerakan sandaran, mod privasi, penyelenggaraan data dan operasi berbahaya.", + "dangerZone": { + "title": "Danger Zone", + "description": "Tetapkan semula sembang, pangkalan pengetahuan atau semua data. Tindakan ini tidak boleh dibuat asal." + }, + "providerImport": { + "entryTitle": "Import konfigurasi Agent lain", + "entryDescription": "Imbas konfigurasi provider setempat untuk CC Switch, Alma, Cherry Studio, Hermes dan OpenClaw untuk memindahkan senarai kunci dan model dengan cepat.", + "entryButton": "Import dari Agent lain", + "dialogTitle": "Import dari Agent lain", + "dialogDescription": "Mula-mula pilih aplikasi yang dikesan, dan kemudian sahkan provider untuk diimport ke dalam DeepChat satu demi satu.", + "toastTitle": "Import Provider selesai", + "toastDescription": "{count} provider telah diimport.", + "steps": { + "scan": "mengimbas", + "providers": "Provider", + "done": "Selesai" + }, + "scanningTitle": "Mengimbas dipasang Agent", + "scanningDescription": "DeepChat hanya membaca fail konfigurasi setempat yang diketahui dan tidak memuat naik sebarang data.", + "scanFailedTitle": "Imbasan gagal", + "sourcesTitle": "Sumber dikesan", + "sourcesDescription": "Anda boleh memilih satu atau lebih Agent, dan DeepChat akan memprosesnya mengikut susunan senarai.", + "selectedSources": "{selected}/{total} dipilih", + "noSourcesTitle": "Tiada konfigurasi provider yang boleh diimport ditemui", + "noSourcesDescription": "Sila pasang Agent yang disokong dahulu, atau konfigurasikan kekunci provider dalam Agent yang sepadan.", + "providersFound": "{count} provider", + "sourceProgress": "{current}/{total}", + "overwriteNote": "Jika berbilang provider yang dipilih dipetakan kepada DeepChat provider yang sama, sumber yang kemudian akan menimpa sumber yang lebih awal.", + "noProvidersTitle": "Tiada data provider dalam sumber ini", + "noProvidersDescription": "Agent telah dipilih, tetapi tiada entri provider yang boleh diimport telah diselesaikan.", + "apiKey": "Kunci {value}", + "noModels": "Tiada senarai model", + "modelsImported": "model {count}", + "importingTitle": "Mengimport provider", + "importingDescription": "DeepChat sedang menulis provider terpilih dan entri model tersuai.", + "doneTitle": "Keadaan am import", + "doneDescription": "{count} provider telah diimport. Keputusan untuk setiap provider boleh dilihat di bawah.", + "badges": { + "configured": "dikonfigurasikan" + }, + "sourceStatus": { + "found": "Dijumpai", + "not_found": "tidak dijumpai", + "error": "Bacaan gagal", + "unsupported_platform": "Platform semasa tidak disokong" + }, + "targetKind": { + "builtin": "terbina dalam", + "custom": "Sesuaikan", + "unsupported": "Tidak disokong" + }, + "warnings": { + "already_configured": "Ia sudah dikonfigurasikan dalam DeepChat dan tidak akan dipilih secara lalai.", + "missing_api_key": "Tiada API Key atau endpoint yang diperlukan.", + "unsupported_provider": "DeepChat tidak dapat mengimport provider ini buat sementara waktu.", + "overwrites_previous_selection": "Pilihan ini bercanggah dengan sumber sebelumnya.", + "credential_only_import": "Hanya API Key diimport, DeepChat mengekalkan endpoint dan runtime terbina dalam provider." + }, + "conflicts": { + "overridesPrevious": "Pemilihan ini akan menimpa DeepChat provider yang dipilih sebelum ini dengan nama yang sama.", + "overwrittenByLater": "Sumber yang dipilih kemudiannya akan menulis ganti provider ini." + }, + "summary": { + "imported": "Diimport", + "created": "baru", + "updated": "memperbaharui", + "overwritten": "penutup", + "models": "Model", + "skipped": "melompat ke atas" + }, + "resultStatus": { + "created": "Dicipta", + "updated": "dikemas kini", + "skipped": "dilangkau", + "overwritten": "bertudung" + }, + "actions": { + "rescan": "Imbas semula", + "selectAll": "Pilih semua", + "clearSelected": "Jelas", + "import": "Import item terpilih" + }, + "apiTypes": { + "openaiCompletions": "OpenAI Chat Completions", + "openai": "OpenAI", + "openaiResponses": "OpenAI Responses", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "Mistral AI" + }, + "applyFailed": "Import gagal: {message}" + } + }, + "dashboard": { + "badge": "Gunakan Kanban", + "title": "Gunakan Kanban", + "description": "Statistik tentang penggunaan token, capaian cache dan anggaran harga. token dan data kos dianggarkan berdasarkan maklumat awam. Sesetengah pembekal atau data berita terdahulu mungkin hilang dan hanya untuk rujukan.", + "actions": { + "refresh": "segarkan semula" + }, + "backfill": { + "runningTitle": "Mengemas kini data penggunaan", + "runningDescription": "Data penggunaan masih diisih di latar belakang, dan hasil semasa boleh dilihat dahulu.", + "failedTitle": "Kemas kini data penggunaan gagal", + "failedDescription": "Sila muat semula halaman ini atau cuba lagi kemudian." + }, + "error": { + "title": "Gagal memuatkan papan pemuka", + "description": "Sila cuba lagi kemudian." + }, + "empty": { + "title": "Tiada statistik lagi", + "description": "Setelah data penggunaan tersedia, penggunaan token, capaian cache dan anggaran harga ditunjukkan di sini.", + "historyNote": "token dan data kos dianggarkan berdasarkan maklumat awam. Sesetengah pembekal atau data berita terdahulu mungkin hilang dan hanya untuk rujukan." + }, + "summary": { + "totalTokens": "Jumlah Token", + "totalTokensDescription": "Tunjukkan bahagian input dan output token dalam jumlah.", + "inputTokensLabel": "masuk", + "outputTokensLabel": "keluaran", + "cachedTokens": "Cache Token", + "cachedTokensDescription": "Cache prompt token terkena provider.", + "cachedTokensCachedLabel": "tekan cache", + "cachedTokensUncachedLabel": "rindu", + "cacheHitRate": "Kadar hit cache", + "cacheHitRateDescription": "Nisbah prompt token cache kepada jumlah input token.", + "estimatedCost": "anggaran harga", + "estimatedCostDescription": "Anggaran kos dolar pada harga semasa provider atau harga sandaran AIHubMix.", + "estimatedCostTrendLabel": "Trend dalam 30 hari yang lalu", + "estimatedCostTrendEmpty": "Tiada kos direkodkan dalam tempoh 30 hari yang lalu.", + "recordingStartedAt": "Masa mula statistik", + "recordingStartedAtDescription": "Masa rekod usage terawal dalam papan kanban semasa.", + "withDeepChatDaysLabel": "Bilangan hari persahabatan", + "withDeepChatDaysValue": "{days} hari", + "withDeepChatDaysSentence": "Anda telah menghabiskan hari {days} anda dengan DeepChat", + "withDeepChatDaysDescription": "Berdasarkan rekod penggunaan terawal anda: {date}.", + "withDeepChatDaysDescriptionUnavailable": "Tiada rekod penggunaan lagi.", + "tokenUsage": "Penggunaan Token", + "nostalgiaLabel": "peristiwa lampau", + "nostalgiaDaysValue": "{days} hari", + "nostalgiaSessionsValue": "Sesi {count}", + "nostalgiaMessagesValue": "Mesej {count}", + "nostalgiaDaysDetailLabel": "Berjalan bersama-sama", + "nostalgiaDaysDetail": "Anda telah menghabiskan hari {days} anda dengan DeepChat.", + "nostalgiaSessionsDetailLabel": "Jumlah bilangan sesi", + "nostalgiaSessionsDetail": "Anda telah mengadakan sesi {count} bersama-sama.", + "nostalgiaMessagesDetailLabel": "Jumlah bilangan mesej", + "nostalgiaMessagesDetail": "Mesej {count} telah dihantar kepada satu sama lain.", + "nostalgiaMostActiveDayLabel": "hari paling aktif", + "nostalgiaMostActiveDayDetail": "{date} ialah hari paling aktif anda, dengan jumlah mesej {count}." + }, + "calendar": { + "title": "Kalendar Sumbangan", + "description": "Penggunaan harian token dalam tempoh 365 hari yang lalu.", + "legend": "kurang kepada lebih", + "tooltip": "{date}:{tokens} token" + }, + "breakdown": { + "providerTitle": "Kedudukan pembekal", + "providerDescription": "Isih mengikut anggaran harga dahulu, kemudian jumlah token.", + "modelTitle": "Kedudukan model", + "modelDescription": "10 model teratas diisih mengikut anggaran harga dan jumlah token.", + "messages": "Mesej {count}", + "empty": "Tiada data terperinci untuk dipaparkan lagi." + }, + "rtk": { + "title": "RTK Jimat", + "description": "Tunjukkan RTK Dalam pautan pelaksanaan arahan asli DeepChat, anggarkan bilangan token yang belum memasuki konteks model disekat.", + "actions": { + "retry": "Cuba semula pengesanan" + }, + "status": { + "disabled": "Dilumpuhkan", + "checking": "Di bawah pengesanan", + "healthy": "Tersedia", + "unhealthy": "Tidak tersedia" + }, + "descriptionDisabled": "RTK telah ditutup dalam sesi aplikasi semasa dan arahan akan terus mengikut laluan pelaksanaan asal.", + "descriptionChecking": "DeepChat sedang menguji sama ada RTK boleh berjalan secara normal dalam persekitaran semasa.", + "descriptionHealthy": "RTK telah disambungkan kepada pelaksanaan arahan asli DeepChat.", + "descriptionUnhealthy": "RTK Pemeriksaan kesihatan permulaan gagal dan telah dilumpuhkan secara automatik dalam sesi aplikasi semasa.", + "sourceLabel": "Sumber masa jalan: {source}", + "source": { + "bundled": "terbina dalam", + "system": "sistem", + "none": "Tidak tersedia" + }, + "summary": { + "savedTokens": "Jimat Token", + "commands": "Perintah yang dijejaki", + "avgSavingsPct": "kadar simpanan purata", + "outputTokens": "Output yang ditapis" + } + }, + "unavailable": "Belum ada lagi" + }, + "modelConfigItem": { + "chatFallbackWarning": "Keupayaan Agent yang lemah: hanya menyokong panggilan alat legacy fallback" + }, + "model": { + "title": "Tetapan model", + "systemPrompt": { + "label": "Kata gesaan sistem", + "placeholder": "Sila masukkan perkataan gesaan sistem...", + "description": "Tetapkan kata gesaan sistem pembantu AI untuk menentukan tingkah laku dan peranannya" + }, + "temperature": { + "label": "suhu model", + "description": "Mengawal rawak output, nilai yang lebih tinggi menghasilkan lebih banyak tindak balas kreatif" + }, + "contextLength": { + "label": "panjang konteks", + "description": "Tetapkan panjang maksimum konteks perbualan" + }, + "responseLength": { + "label": "Kembalikan panjang teks", + "description": "Tetapkan panjang maksimum respons AI" + }, + "artifacts": { + "title": "Kesan Artifacts", + "description": "Blok kod menjana kesan animasi" + }, + "provider": "pembekal perkhidmatan", + "modelList": "Senarai model", + "selectModel": "Pilih model", + "providerSetting": "Tetapan pembekal perkhidmatan", + "configureModel": "Konfigurasikan model", + "addModel": "Tambah model", + "form": { + "id": { + "label": "pengecam" + } + }, + "modelConfig": { + "title": "Parameter model tersuai", + "description": "Sila ambil perhatian bahawa konfigurasi ini hanya sah untuk model semasa dan tidak akan menjejaskan model lain. Sila ubah suai dengan berhati-hati. Parameter yang salah boleh menyebabkan model tidak berfungsi dengan betul.", + "name": { + "label": "Nama model", + "description": "Nama paparan model dalam antara muka", + "placeholder": "Sila masukkan nama model", + "required": "Nama model diperlukan", + "readonly": "Nama model (baca sahaja)" + }, + "id": { + "label": "Model ID", + "description": "ID unik yang digunakan oleh model untuk mengenal pasti", + "placeholder": "Sila masukkan model ID", + "required": "Model ID diperlukan", + "readonly": "Model ID (baca sahaja)", + "duplicate": "Model yang sama ID sudah wujud" + }, + "createTitle": "Tambah model tersuai", + "editTitle": "Edit konfigurasi model - {name}", + "maxTokens": { + "label": "Panjang keluaran maksimum", + "description": "Tetapkan bilangan maksimum output Token oleh model dalam satu masa" + }, + "contextLength": { + "label": "panjang konteks", + "description": "Tetapkan panjang konteks yang boleh dikendalikan oleh model" + }, + "temperature": { + "label": "suhu", + "description": "Kawal rawak keluaran. Kebanyakan model menyokong 0-1, dan beberapa menyokong 0-2. Semakin tinggi nilai, semakin rawak.", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ditetapkan pada {enabled} apabila pemikiran dihidupkan dan {disabled} apabila pemikiran dimatikan." + }, + "vision": { + "label": "keupayaan visual", + "description": "Adakah model menyokong keupayaan visual?" + }, + "speechRecognition": { + "label": "pengecaman pertuturan", + "description": "Mengawal sama ada model ini membenarkan penukaran kepada input teks melalui pengecaman pertuturan asli." + }, + "functionCall": { + "label": "panggilan fungsi", + "description": "Sama ada model itu menyokong panggilan fungsi secara asli (DeepChat akan secara automatik mensimulasikan panggilan fungsi selepas mematikan pilihan ini)" + }, + "reasoning": { + "label": "kebolehan menaakul", + "description": "Model ini menyokong keupayaan penaakulan" + }, + "reasoningToggle": { + "label": "Dayakan inferens", + "description": "Mengawal sama ada model mendayakan inferens secara lalai" + }, + "interleavedThinking": { + "label": "Interleaved Thinking", + "description": "Mengawal sama ada model mengendalikan mesej reasoning dan tool-call dengan cara yang sama seperti Interleaved Thinking. Jika provider telah mengisytiharkan sokongan, ia akan didayakan secara automatik secara lalai." + }, + "thinkingBudget": { + "label": "Fikirkan tentang bajet", + "description": "Tetapkan panjang token maksimum proses pemikiran, yang digunakan untuk mengawal kedalaman pemikiran semasa inferens model.", + "placeholder": "Masukkan nilai belanjawan berfikir", + "range": "Julat: {min} - {max}", + "validation": { + "required": "Sila masukkan nilai belanjawan pemikiran", + "minValue": "Pertimbangkan nilai belanjawan kurang daripada nilai minimum", + "maxValue": "Nilai belanjawan pemikiran tidak boleh melebihi {max}" + } + }, + "type": { + "label": "Jenis model", + "description": "Pilih jenis model", + "options": { + "chat": "model bahasa", + "embedding": "model terbenam", + "rerank": "model penyusunan semula", + "imageGeneration": "Model penjanaan imej", + "videoGeneration": "Model penjanaan video" + } + }, + "apiEndpoint": { + "label": "Titik akhir API", + "description": "Pilih titik akhir OpenAI API yang digunakan oleh model ini.", + "options": { + "chat": "penjanaan teks", + "image": "Penjanaan imej", + "video": "penjanaan video" + } + }, + "resetToDefault": "set semula kepada lalai", + "saveConfig": "Simpan konfigurasi", + "cancel": "Batal", + "useModelDefault": "Gunakan konfigurasi lalai model", + "currentUsingModelDefault": "Pada masa ini menggunakan konfigurasi lalai model", + "resetConfirm": { + "title": "Sahkan tetapan semula", + "message": "Adakah anda pasti mahu menetapkan semula konfigurasi model ini kepada lalai? Tindakan ini tidak boleh dibuat asal.", + "confirm": "Sahkan tetapan semula" + }, + "reasoningEffort": { + "label": "usaha penaakulan", + "description": "Mengawal kedalaman inferens model, usaha yang lebih tinggi menghasilkan hasil yang lebih baik tetapi tindak balas yang lebih perlahan", + "placeholder": "Pilih usaha penaakulan", + "options": { + "none": "None - tidak menggunakan inferens", + "minimal": "Minimal - Respons terpantas", + "low": "Low - usaha yang rendah", + "medium": "Medium - Usaha sederhana", + "high": "High - Usaha yang tinggi", + "xhigh": "XHigh - Usaha Maksimum", + "max": "Max - Tahap Usaha Melampau" + } + }, + "verbosity": { + "label": "Tahap terperinci", + "description": "Kawal perincian dan panjang jawapan model", + "placeholder": "Pilih tahap perincian", + "options": { + "low": "Low - jawapan ringkas", + "medium": "Medium - Baki Terperinci", + "high": "High - jawapan terperinci" + } + }, + "validation": { + "maxTokensRequired": "Panjang keluaran maksimum tidak boleh kosong", + "maxTokensMin": "Panjang keluaran maksimum mestilah lebih besar daripada 0", + "maxTokensMax": "Panjang keluaran maksimum tidak boleh melebihi 1000000", + "contextLengthRequired": "Panjang konteks tidak boleh kosong", + "contextLengthMin": "Panjang konteks mestilah lebih besar daripada 0", + "contextLengthMax": "Panjang konteks tidak boleh melebihi 10000000", + "temperatureRequired": "Suhu tidak boleh kosong", + "temperatureMin": "Suhu mestilah lebih besar daripada atau sama dengan 0", + "temperatureMax": "Suhu mestilah kurang daripada atau sama dengan 2", + "timeoutMin": "Tamat masa permintaan tidak boleh kurang daripada 1000 milisaat", + "timeoutMax": "Tamat masa permintaan tidak boleh melebihi 3600000 milisaat" + }, + "endpointType": { + "label": "jenis protokol", + "description": "Pilih New API sebagai protokol huluan yang digunakan oleh model semasa.", + "placeholder": "Pilih jenis protokol", + "required": "Jenis perjanjian diperlukan", + "options": { + "openai": "OpenAI Chat", + "openai-response": "OpenAI Responses", + "anthropic": "Anthropic Messages", + "gemini": "Gemini Native", + "image-generation": "Image Generation", + "video-generation": "Video Generation" + } + }, + "reasoningVisibility": { + "label": "Paparan kandungan inferens", + "description": "Apabila inferens didayakan, kawal sama ada kandungan inferens disembunyikan atau dipaparkan dalam bentuk ringkasan", + "placeholder": "Pilih cara untuk memaparkan kandungan inferens", + "options": { + "omitted": "Omitted - Sembunyikan kandungan penaakulan", + "summarized": "Summarized - Paparkan ringkasan inferens" + } + }, + "timeout": { + "label": "Permintaan tamat masa (milisaat)", + "description": "Tetapkan tamat masa untuk satu permintaan model. Selepas tamat masa melebihi, permintaan akan terganggu secara automatik." + }, + "imageGeneration": { + "default": "lalai", + "size": { + "label": "Saiz imej", + "custom": "Sesuaikan", + "placeholder": "Contohnya 2048x2048", + "experimental": "Saiz ini melebihi 2560x1440, OpenAI ditandakan sebagai output percubaan.", + "validation": { + "invalid_format": "Sila gunakan format {width}x{height}.", + "invalid_multiple": "Kedua-dua lebar dan tinggi mestilah gandaan 16.", + "side_too_large": "Lebar dan tinggi tidak boleh melebihi 3840px.", + "aspect_ratio_too_large": "Sisi panjang tidak boleh melebihi 3 kali sisi pendek.", + "pixel_count_out_of_range": "Jumlah piksel mestilah antara 655360 dan 8294400." + } + }, + "quality": { + "label": "Kualiti gambar", + "options": { + "low": "rendah", + "medium": "tengah", + "high": "tinggi", + "auto": "automatik" + } + }, + "outputFormat": { + "label": "Format output", + "options": { + "png": "PNG", + "jpeg": "JPEG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "Kualiti mampatan", + "placeholder": "Lalai: 100", + "validation": "Kualiti mampatan mestilah integer dari 0 hingga 100." + }, + "background": { + "label": "latar belakang", + "options": { + "auto": "automatik", + "opaque": "legap" + } + }, + "moderation": { + "label": "Penapisan kandungan", + "options": { + "auto": "automatik", + "low": "rendah" + } + } + }, + "videoGeneration": { + "size": { + "label": "Saiz video", + "placeholder": "Contohnya 1280x720" + }, + "seconds": { + "label": "detik", + "placeholder": "Contohnya 5" + }, + "duration": { + "label": "tempoh masa", + "placeholder": "Contohnya 5", + "description": "Ia akan dihantar ke hulu melalui antara muka video yang serasi dengan extra_body.duration." + }, + "ratio": { + "label": "nisbah aspek", + "placeholder": "Contohnya 16:9" + }, + "resolution": { + "label": "resolusi", + "placeholder": "Contohnya 720p" + }, + "watermark": { + "label": "tera air", + "description": "Apabila antara muka huluan menyokongnya, minta pelayan menambah tera air pada hasil yang dijana." + }, + "generateAudio": { + "label": "Hasilkan audio", + "description": "Apabila disokong oleh antara muka huluan, trek audio juga dijana untuk video." + } + } + } + }, + "provider": { + "search": "Cari platform penyedia perkhidmatan…", + "enable": "Mulakan perkhidmatan", + "enabled": "Didayakan", + "disabled": "Dilumpuhkan", + "urlPlaceholder": "Sila masukkan API URL", + "keyPlaceholder": "Sila masukkan API Key", + "accessKeyIdPlaceholder": "Sila masukkan AWS Access Key ID", + "secretAccessKeyPlaceholder": "Sila masukkan AWS Secret Access Key", + "regionPlaceholder": "Sila masukkan kawasan AWS", + "vertexProjectId": "Projek ID", + "vertexProjectIdPlaceholder": "Sila masukkan projek Google Cloud ID", + "vertexLocation": "kawasan", + "vertexLocationPlaceholder": "Sila masukkan rantau (cth. us-central1)", + "vertexServiceEmail": "E-mel akaun perkhidmatan", + "vertexServiceEmailPlaceholder": "Sila masukkan e-mel akaun perkhidmatan", + "vertexPrivateKey": "Kunci peribadi akaun perkhidmatan", + "vertexPrivateKeyPlaceholder": "Tampal kunci peribadi (menyokong satu baris \\n)", + "vertexApiVersion": "Versi API", + "vertexEndpointMode": "mod titik akhir", + "vertexEndpointStandard": "Standard (titik akhir wilayah)", + "vertexEndpointExpress": "Express (titik akhir global)", + "verifyKey": "Kunci pengesahan", + "howToGet": "Bagaimana untuk mendapatkan", + "refreshingModels": "Menyegarkan...", + "getKeyTip": "Sila pergi ke", + "getKeyTipEnd": "Dapatkan API Key", + "urlFormat": "Sampel API: {defaultUrl}", + "urlFormatFill": "pad kepada API URL", + "openaiResponsesNotice": "Perkhidmatan rasmi OpenAI menggunakan Responses API secara lalai; jika pihak ketiga hanya menyokong Chat Completions, sila gunakan pembekal perkhidmatan OpenAI Completions.", + "modifyBaseUrl": "Semak semula", + "baseUrlLockedHint": "Jenis provider ini ditetapkan pada Base URL yang disyorkan secara lalai untuk mengelakkan pengubahsuaian yang salah yang menyebabkan pengecualian permintaan.", + "refreshModelsWithMetadataHint": "Apabila menyegarkan penyedia perkhidmatan, metadata huluan akan disegerakkan dahulu, dan kemudian senarai model tempatan akan dibina semula.", + "modelList": "Senarai model", + "enableModels": "membolehkan model", + "disableAllModels": "Lumpuhkan semua", + "modelsEnabled": "Model sudah didayakan", + "noModelsEnabled": { + "title": "Masih belum ada model yang didayakan", + "description": "Sila klik butang \"Dayakan Model\" untuk memilih model yang ingin anda gunakan secara manual." + }, + "verifyLink": "Pautan pengesahan", + "syncModelsFailed": "Model penyegerakan gagal...", + "addCustomProvider": "Tambah pembekal perkhidmatan tersuai", + "delete": "padam", + "stopModel": "Hentikan model", + "pulling": "Mendapatkan semula...", + "runModel": "Jalankan model", + "configurationUpdated": "Konfigurasi telah dikemas kini", + "configurationSaved": "Konfigurasi disimpan", + "operationSuccess": "Operasi berjaya", + "operationFailed": "Operasi gagal", + "dataRefreshed": "Data telah dimuat semula", + "settingsApplied": "Tetapan digunakan", + "toast": { + "modelRunning": "Model sedang berjalan", + "modelRunningDesc": "Sila hentikan model {model} sebelum memadamkannya.", + "backupSuccessTitle": "Sandaran selesai", + "backupSuccessMessage": "Sandaran disimpan (masa: {time}, saiz: {size})", + "importSuccessTitle": "Import selesai", + "importSuccessMessage": "Berjaya mengimport perbualan {count}", + "refreshModelsSuccessTitle": "Model telah dimuat semula", + "refreshModelsSuccessDescription": "Senarai model terkini pembekal perkhidmatan telah disegerakkan.", + "refreshModelsSuccessDescriptionWithMetadata": "Metadata huluan pembekal dan senarai model terkini disegerakkan.", + "refreshModelsFailedTitle": "Muat semula gagal", + "refreshModelsFailedDescription": "Senarai model pembekal perkhidmatan ini tidak boleh dimuat semula pada masa ini, sila cuba sebentar lagi.", + "refreshModelsFailedDescriptionWithMetadata": "Metadata huluan pembekal perkhidmatan dan senarai model tidak boleh dimuat semula pada masa ini. Sila cuba lagi kemudian." + }, + "modelscope": { + "name": "ModelScope", + "description": "ModelScope ialah platform perkongsian model sebagai perkhidmatan yang dilancarkan oleh Alibaba Damo Academy", + "apiKey": "Kunci API", + "apiKeyPlaceholder": "Sila masukkan ModelScope API Key", + "apiKeyHelper": "Dapatkan API Key anda dalam konsol ModelScope", + "baseUrl": "Alamat API", + "baseUrlHelper": "Alamat perkhidmatan ModelScope API", + "connected": "Bersambung", + "notConnected": "Tidak bersambung", + "connecting": "Menyambung...", + "verifySuccess": "Pengesahan berjaya", + "verifyFailed": "Pengesahan gagal", + "keyRequired": "Sila masukkan API Key", + "invalidKey": "API Key tidak sah", + "networkError": "Ralat sambungan rangkaian", + "mcpSync": { + "title": "Segerakkan perkhidmatan MCP", + "description": "Segerakkan pelayan MCP daripada ModelScope kepada konfigurasi setempat untuk menambah alat MCP yang biasa digunakan dengan cepat. Semua perkhidmatan dilumpuhkan secara lalai dan boleh didayakan secara manual selepas import.", + "sync": "Mula menyegerak", + "syncing": "Menyegerakkan...", + "pageSize": "Kuantiti setiap halaman", + "pageNumber": "nombor muka surat", + "pageNumberPlaceholder": "Sila masukkan nombor halaman", + "imported": "Perkhidmatan {count} diimport", + "skipped": "Langkau perkhidmatan {count}", + "errors": "Ralat {count}", + "errorDetails": "Butiran ralat", + "noApiKey": "Sila konfigurasikan ModelScope API Key dahulu", + "noServersFound": "Tiada perkhidmatan MCP tersedia ditemui", + "fetchingServers": "Mendapatkan senarai pelayan MCP...", + "convertingServers": "Menukar konfigurasi pelayan...", + "importingServers": "Mengimport konfigurasi pelayan...", + "syncComplete": "Penyegerakan selesai", + "serverAlreadyExists": "Pelayan sudah wujud, langkau import", + "noOperationalUrls": "Tiada alamat operasi yang tersedia ditemui", + "invalidServerData": "Data pelayan tidak sah", + "authenticationFailed": "Pengesahan gagal, sila semak API Key" + }, + "details": { + "title": "Butiran persediaan pembekal", + "apiConfig": "Konfigurasi API", + "rateLimitConfig": "Konfigurasi had kadar", + "modelManagement": "Pengurusan model", + "safetySettings": "Tetapan keselamatan", + "specialConfig": "Konfigurasi khas", + "mcpSync": "Penyegerakan MCP", + "operationalServers": "Pelayan operasi", + "syncFromModelScope": "Segerakkan daripada ModelScope", + "operationalDescription": "Segerakkan pelayan MCP yang boleh digunakan terus pada platform ModelScope" + } + }, + "tts": { + "title": "Teks ke pertuturan (TTS)", + "description": "Hasilkan teks ke dalam pertuturan, voice akan dipaparkan dalam senarai model di bawah.", + "audioFormat": { + "label": "format audio", + "placeholder": "Pilih format", + "helper": "MP3 disyorkan dalam kebanyakan senario." + }, + "language": { + "label": "bahasa", + "placeholder": "Contohnya en", + "helper": "Bahasa yang disokong: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "Model TTS", + "placeholder": "voiceai-tts-v1-latest", + "helper": "Sila lihat dokumentasi Voice.ai untuk model pilihan." + }, + "agentId": { + "label": "Suara Agent ID", + "placeholder": "Tampal voice agent id", + "helper": "ID ini diperlukan untuk panggilan langsung." + }, + "temperature": { + "label": "suhu", + "helper": "Parameter rawak (0-2)." + }, + "topP": { + "label": "Top P", + "helper": "Persampelan Nucleus (0-1)." + } + }, + "dialog": { + "disableModel": { + "title": "Sahkan model yang dilumpuhkan", + "content": "Adakah anda pasti mahu melumpuhkan model \"{name}\"?", + "confirm": "Lumpuhkan" + }, + "disableAllModels": { + "title": "Sahkan untuk melumpuhkan semua model", + "content": "Adakah anda pasti mahu melumpuhkan \"{name}\" untuk semua model?", + "confirm": "Lumpuhkan semua" + }, + "configModels": { + "title": "Konfigurasikan senarai model", + "description": "Pilih model untuk didayakan atau dilumpuhkan" + }, + "verify": { + "missingFields": "Sila masukkan API Key dan API URL", + "failed": "Pengesahan gagal", + "success": "Pengesahan berjaya", + "failedDesc": "Kunci API atau pengesahan konfigurasi gagal, sila semak maklumat konfigurasi", + "successDesc": "Pengesahan kunci dan konfigurasi API berjaya dan boleh digunakan seperti biasa", + "unauthorized": "Pengesahan gagal, API Key tidak sah atau tamat tempoh", + "serverError": "Ralat pelayan, sila cuba lagi kemudian", + "connectionError": "Ralat sambungan, sila semak sambungan rangkaian dan alamat API" + }, + "addCustomProvider": { + "title": "Tambah pembekal perkhidmatan tersuai", + "description": "Sila isikan maklumat yang diperlukan untuk pembekal perkhidmatan", + "name": "nama", + "namePlaceholder": "Sila masukkan nama pembekal perkhidmatan", + "apiType": "Jenis API", + "apiTypePlaceholder": "Sila pilih jenis API", + "apiKey": "Kunci API", + "apiKeyPlaceholder": "Sila masukkan kunci API", + "baseUrl": "Alamat API", + "baseUrlPlaceholder": "Sila masukkan alamat pangkalan API", + "enable": "Dayakan pembekal perkhidmatan" + }, + "providerDeeplinkImport": { + "title": "Import pembekal perkhidmatan", + "description": "Sila sahkan konfigurasi pembekal perkhidmatan yang dihuraikan sebelum mengimportnya.", + "type": "taip", + "url": "alamat", + "key": "kunci", + "overwriteWarning": "Import ini akan menimpa konfigurasi pembekal perkhidmatan semasa.", + "confirming": "Mengimport..." + }, + "baseUrlUnlock": { + "title": "Sahkan pengubahsuaian Base URL", + "description": "Ia tidak disyorkan untuk mengubah suai Base URL untuk jenis provider ini. Alamat yang salah boleh menyebabkan kegagalan permintaan atau tingkah laku yang tidak normal. Anda masih boleh terus mengubah suai secara manual selepas pengesahan.", + "confirm": "Teruskan mengubah suai" + }, + "deleteProvider": { + "title": "Sahkan untuk memadam penyedia perkhidmatan", + "content": "Adakah anda pasti akan memadamkan pembekal perkhidmatan \"{name}\"? Operasi ini tidak dapat dipulihkan.", + "confirm": "padam" + }, + "deleteModel": { + "title": "Sahkan untuk memadam model", + "content": "Adakah anda pasti akan memadamkan model \"{name}\"? Operasi ini tidak dapat dipulihkan.", + "confirm": "padam" + }, + "pullModel": { + "title": "Model tarik", + "description": "Pilih model untuk dimuat turun ke setempat", + "pull": "tarik" + }, + "modelCheck": { + "title": "Pemeriksaan model", + "description": "Pilih model untuk ujian ketersambungan dan kebolehgunaan", + "model": "Pilih model", + "modelPlaceholder": "Sila pilih model untuk diuji", + "test": "Mulakan ujian", + "checking": "Menguji...", + "success": "Ujian model berjaya", + "failed": "Ujian model gagal", + "noModels": "Tiada model tersedia untuk pembekal ini" + } + }, + "pullModels": "Model tarik", + "refreshModels": "Muat semula model", + "modelsRunning": "Model berjalan", + "runningModels": "Model berjalan", + "noRunningModels": "Tiada model berjalan", + "deleteModel": "Padamkan model", + "deleteModelConfirm": "Adakah anda pasti akan memadamkan model \"{name}\"? Operasi ini tidak dapat dipulihkan.", + "noLocalModels": "Tiada model tempatan", + "localModels": "model tempatan", + "azureApiVersion": "Versi API", + "safety": { + "title": "Tetapan keselamatan", + "blockNone": "Tidak disekat", + "blockSome": "Perisai risiko rendah", + "blockMost": "Melindungi risiko", + "blockHighest": "Perisai berisiko tinggi" + }, + "serverList": "Senarai pelayan", + "totalServers": "Jumlah bilangan pelayan", + "addServer": "Tambah pelayan", + "autoStart": "permulaan diri", + "githubCopilotAuth": "Pensijilan GitHub Copilot", + "githubCopilotConnected": "GitHub Copilot disambungkan", + "githubCopilotNotConnected": "GitHub Copilot tidak disambungkan", + "loginWithGitHub": "Log masuk dengan GitHub", + "loggingIn": "Log masuk...", + "githubCopilotClientId": "Client ID tersuai", + "githubCopilotClientIdHint": "Pilihan, biarkan kosong untuk menggunakan Client ID lalai, yang hanya menjejaskan kebenaran GitHub Copilot.", + "githubCopilotLoginTip": "Klik untuk membenarkan DeepChat mengakses langganan GitHub Copilot anda", + "loginSuccess": "Log masuk berjaya", + "loginFailed": "Log masuk gagal", + "tokenValid": "Token adalah sah", + "tokenInvalid": "Token tidak sah", + "disconnect": "Putuskan sambungan", + "disconnected": "Berjaya diputuskan", + "disconnectFailed": "Gagal memutuskan sambungan", + "keyStatus": { + "usage": "Sudah digunakan", + "remaining": "baki yang tinggal" + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "bedrockLimitTip": "*Hanya menyokong model Anthropic Claude (termasuk model Opus, Sonnet, Haiku)", + "bedrockVerifyTip": "DeepChat menggunakan model Claude 3.5 Sonnet untuk pengesahan. Jika anda tidak mempunyai kebenaran memanggil untuk model ini, pengesahan akan gagal. Ini tidak menjejaskan penggunaan model lain.", + "center": { + "title": "Provider Center", + "description": "Urus sambungan pembekal, model dan konfigurasi lanjutan.", + "noApiUrl": "API URL tidak dikonfigurasikan", + "enabledModels": "Model {count} didayakan", + "noAdvancedConfig": "Tiada konfigurasi lanjutan tambahan tersedia untuk pembekal ini.", + "status": { + "connected": "Connected", + "keyMissing": "Key missing", + "disabled": "Disabled", + "local": "Local" + }, + "tabs": { + "connection": "Connect", + "models": "Models", + "advanced": "Advanced" + } + } + }, + "knowledgeBase": { + "title": "Tetapan asas pengetahuan", + "addKnowledgeBase": "Tambah pangkalan pengetahuan", + "selectKnowledgeBaseType": "Sila pilih jenis pangkalan pengetahuan untuk ditambah", + "difyDescription": "Pangkalan pengetahuan Dify boleh membantu anda mengurus dan menggunakan data dokumen.", + "comingSoon": "akan datang tidak lama lagi", + "featureNotAvailable": "Fungsi ini belum tersedia lagi, sila nantikan", + "addDifyConfig": "Tambah konfigurasi Dify", + "apiKey": "Kunci API", + "datasetId": "Set data ID", + "endpoint": "Alamat API", + "configAdded": "Konfigurasi telah ditambah", + "configAddedDesc": "Konfigurasi {name} telah berjaya ditambahkan", + "addConfig": "Tambah konfigurasi", + "moreComingSoon": "Lebih banyak jenis asas pengetahuan akan datang tidak lama lagi", + "configUpdated": "Konfigurasi telah dikemas kini", + "configUpdatedDesc": "Konfigurasi {name} berjaya dikemas kini", + "descriptionPlaceholder": "Contohnya: Pangkalan pengetahuan dokumentasi produk syarikat", + "ragflowTitle": "Pangkalan pengetahuan RAGFlow", + "ragflowDescription": "RAGFlow ialah sistem pengurusan asas pengetahuan yang berkuasa yang menyokong pelbagai kaedah carian dan fungsi pengurusan dokumen.", + "addRagflowConfig": "Tambah konfigurasi RAGFlow", + "editRagflowConfig": "Edit konfigurasi RAGFlow", + "dify": "Pangkalan pengetahuan Dify", + "editDifyConfig": "Ubah suai konfigurasi Dify", + "fastgptTitle": "Pangkalan pengetahuan FastGPT", + "fastgptDescription": "FastGPT ialah sistem pengurusan asas pengetahuan yang berkuasa yang menyokong pelbagai kaedah carian dan fungsi pengurusan dokumen.", + "addFastGptConfig": "Tambah konfigurasi FastGPT", + "editFastGptConfig": "Edit konfigurasi FastGPT", + "builtInKnowledgeTitle": "Pangkalan pengetahuan terbina dalam", + "builtInKnowledgeDescription": "Pangkalan pengetahuan terbina dalam menyediakan beberapa pelaksanaan mudah yang boleh melaksanakan beberapa fungsi asas dalam persekitaran luar talian.", + "addBuiltinKnowledgeConfig": "Tambahkan konfigurasi pangkalan pengetahuan terbina dalam", + "editBuiltinKnowledgeConfig": "Edit konfigurasi pangkalan pengetahuan terbina dalam", + "descriptionDesc": "Penerangan tentang pangkalan pengetahuan supaya AI boleh memutuskan sama ada untuk mencari pangkalan pengetahuan ini", + "embeddingModel": "model terbenam", + "selectEmbeddingModel": "Pilih model benam", + "selectEmbeddingModelHelper": "Model terbenam dilarang daripada diubah suai selepas pangkalan pengetahuan dibuat.", + "rerankModel": "model penyusunan semula", + "selectRerankModel": "Pilih model penyusunan semula", + "chunkSize": "Saiz ketulan", + "chunkOverlap": "saiz bertindih", + "fragmentsNumber": "Bilangan serpihan dokumen yang diminta", + "chunkSizeHelper": "Potong dokumen menjadi beberapa bahagian. Saiz setiap segmen tidak boleh melebihi had konteks model.", + "chunkOverlapHelper": "Jumlah kandungan berulang antara blok teks bersebelahan memastikan bahawa masih terdapat sambungan kontekstual antara blok teks tersegmen, meningkatkan kesan keseluruhan model dalam memproses teks panjang.", + "fragmentsNumberHelper": "Lebih banyak serpihan dokumen diminta, lebih banyak maklumat akan disertakan, tetapi lebih banyak token akan digunakan.", + "modelNotFound": "Pembekal perkhidmatan {provider} atau model {model} tidak ditemui", + "modelNotFoundDesc": "Sila pastikan bahawa model dikonfigurasikan dengan betul dan didayakan. Anda boleh menyemak konfigurasi model dalam tetapan pembekal.", + "removeBuiltinKnowledgeConfirmTitle": "Sahkan untuk memadam pangkalan pengetahuan terbina dalam {name}?", + "removeBuiltinKnowledgeConfirmDesc": "Memadamkan konfigurasi pangkalan pengetahuan terbina dalam akan memadamkan semua data yang berkaitan dan tidak boleh dipulihkan, jadi sila kendalikan dengan berhati-hati.", + "advanced": "Pilihan lanjutan", + "dimensions": "dimensi tertanam", + "dimensionsPlaceholder": "Benamkan saiz dimensi, seperti 1024", + "autoDetectDimensions": "Mengesan dimensi pembenaman secara automatik", + "autoDetectHelper": "Kesan secara automatik dimensi pembenaman, yang akan menggunakan sejumlah kecil Tokens", + "dimensionsHelper": "Pastikan model anda menyokong saiz dimensi benam yang anda tetapkan", + "autoDetectDimensionsError": "Pengesanan automatik bagi dimensi terbenam gagal", + "normalized": "Normalisasi L2", + "normalizedHelper": "Sila sahkan bahawa model menyokong normalisasi L2 vektor output", + "chunkSizePlaceholder": "Nilai lalai, pengubahsuaian tidak disyorkan", + "chunkOverlapPlaceholder": "Nilai lalai, pengubahsuaian tidak disyorkan", + "return": "kembali", + "uploadHelper": "Klik untuk memuat naik atau menyeret fail ke sini", + "fileSupport": "Menyokong {accept} dan format {count} yang lain", + "searchKnowledge": "Cari pangkalan pengetahuan", + "searchKnowledgePlaceholder": "Sila masukkan kandungan pertanyaan", + "noData": "Tiada data lagi", + "file": "dokumen", + "uploadProcessing": "Memuat naik", + "uploadCompleted": "Muat naik selesai", + "reAdd": "Muat naik semula", + "uploadError": "Muat naik gagal", + "processing": "Memuat naik", + "paused": "Digantung", + "unknown": "status tidak diketahui", + "delete": "padam", + "reason": "sebab", + "deleteSuccess": "Padam berjaya", + "copy": "salinan", + "copySuccess": "Berjaya disalin", + "source": "sumber", + "resumeAllPausedTasks": "Pemulihan satu klik", + "pauseAllRunningTasks": "Satu klik untuk menjeda", + "reAddFile": { + "title": "Pengesahan muat naik semula", + "content": "Adakah anda pasti untuk memuat naik semula fail \"{fileName}\"?" + }, + "deleteFile": { + "title": "Padamkan pengesahan fail", + "content": "Adakah anda pasti mahu memadamkan fail \"{fileName}\"? Operasi ini tidak dapat dipulihkan." + }, + "dialog": { + "beforequit": { + "title": "Pengesahan keluar", + "description": "Terdapat tugas asas pengetahuan berjalan. Adakah anda pasti untuk keluar dari perisian?\nTugasan yang dibatalkan boleh disambung semula selepas memulakan semula perisian.", + "cancel": "Batal", + "confirm": "mengesahkan" + } + }, + "searchError": "Pertanyaan gagal", + "separators": "pemisah blok", + "separatorsHelper": "Pembatas pemisah dokumen, pembatas tunggal dibalut dengan petikan berganda separuh lebar (\"\"), dan pembatas dipisahkan dengan koma separuh lebar (,)", + "invalidSeparators": "Pembatas tidak sah", + "selectLanguage": "Pilih pratetap", + "separatorsPreset": "Muatkan pratetap", + "nowledgeMem": { + "apiKey": "Kunci API", + "apiKeyHint": "Pilihan.\nJika perkhidmatan anda memerlukan kunci API, masukkannya di sini.", + "baseUrl": "Base URL", + "configuration": "Konfigurasi", + "description": "Eksport sesi ke Nowledge Mem", + "resetConfig": "Tetapkan semula konfigurasi", + "saveConfig": "jimat", + "seconds": "Kedua", + "testConnection": "sambungan ujian", + "timeout": "masa tamat", + "title": "Konfigurasi eksport Nowledge Mem" + } + }, + "mcp": { + "title": "Tetapan MCP", + "description": "Urus dan konfigurasikan pelayan dan alatan MCP (Model Control Protocol).", + "enabledTitle": "Dayakan MCP", + "enabledDescription": "Dayakan atau lumpuhkan ciri dan alatan MCP", + "enableToAccess": "Sila dayakan MCP dahulu untuk mengakses pilihan konfigurasi", + "marketplace": "Pergi ke pasaran MCP untuk pemasangan satu klik", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Butiran teknikal", + "httpServer": "pelayan HTTP", + "localProcess": "proses tempatan", + "restartServer": "Mulakan semula pelayan", + "viewLogs": "Lihat log", + "starting": "Bermula", + "error": "kesilapan", + "tabs": { + "servers": "pelayan", + "tools": "alat", + "prompts": "perkataan segera", + "resources": "sumber" + }, + "serverList": "Senarai pelayan", + "addServer": "Tambah pelayan", + "running": "Berlari", + "stopped": "Berhenti", + "stopServer": "Hentikan pelayan", + "startServer": "Mulakan pelayan", + "noServersFound": "Pelayan tidak ditemui", + "addServerDialog": { + "title": "Tambah pelayan", + "description": "Konfigurasikan pelayan MCP baharu" + }, + "editServerDialog": { + "title": "Edit pelayan", + "description": "Edit konfigurasi pelayan MCP" + }, + "serverForm": { + "name": "Nama pelayan", + "namePlaceholder": "Masukkan nama pelayan", + "nameRequired": "Nama pelayan tidak boleh kosong", + "type": "Jenis pelayan", + "typePlaceholder": "Pilih jenis pelayan", + "typeStdio": "Input dan output standard (Stdio)", + "typeSse": "Acara dihantar pelayan (SSE)", + "typeInMemory": "Jenis memori (InMemory)", + "typeHttp": "Permintaan HTTP boleh strim (HTTP)", + "baseUrl": "BasicURL", + "baseUrlPlaceholder": "Masukkan pangkalan pelayan URL (cth: http://localhost:3000)", + "command": "Pesanan", + "commandPlaceholder": "Masukkan arahan", + "commandRequired": "Perintah tidak boleh kosong", + "args": "parameter", + "argsPlaceholder": "Satu parameter setiap baris", + "addArg": "Tambah parameter", + "argPlaceholder": "Masukkan nilai parameter", + "argsRequired": "Parameter tidak boleh kosong", + "env": "pembolehubah persekitaran", + "envPlaceholder": "Masukkan pembolehubah persekitaran dalam format JSON", + "envInvalid": "Pembolehubah persekitaran mestilah dalam format JSON yang sah", + "description": "huraikan", + "descriptionPlaceholder": "Masukkan perihalan pelayan", + "descriptions": "huraikan", + "descriptionsPlaceholder": "Masukkan perihalan pelayan", + "icon": "ikon", + "iconPlaceholder": "ikon input", + "icons": "ikon", + "iconsPlaceholder": "ikon input", + "autoApprove": "Keizinan automatik", + "autoApproveAll": "semua", + "autoApproveRead": "membaca", + "autoApproveWrite": "menulis", + "autoApproveHelp": "Pilih jenis operasi yang memerlukan kebenaran automatik dan boleh dilakukan tanpa pengesahan pengguna", + "submit": "serahkan", + "add": "Tambah ke", + "update": "memperbaharui", + "cancel": "Batal", + "jsonConfigIntro": "Anda boleh menampal konfigurasi JSON secara langsung atau memilih untuk mengkonfigurasi pelayan secara manual.", + "jsonConfig": "Konfigurasi JSON", + "jsonConfigPlaceholder": "Sila tampal konfigurasi format JSON pelayan MCP", + "jsonConfigExample": "Contoh konfigurasi JSON", + "parseSuccess": "Penghuraian konfigurasi berjaya", + "configImported": "Konfigurasi berjaya diimport", + "parseError": "Ralat hurai", + "skipToManual": "Langkau ke konfigurasi manual", + "parseAndContinue": "kupas dan teruskan", + "jsonParseError": "Penghuraian JSON gagal", + "browseMarketplace": "Semak imbas pasaran perkhidmatan MCP", + "imageModel": "model visual", + "customHeadersParseError": "Penghuraian Header tersuai gagal", + "customHeaders": "Pengepala permintaan tersuai", + "clickToEdit": "Klik edit untuk melihat kandungan penuh", + "invalidKeyValueFormat": "Format pengepala permintaan salah, sila semak sama ada input adalah betul", + "npmRegistry": "NPM Registry tersuai", + "npmRegistryPlaceholder": "Tetapkan NPM Registry tersuai, biarkan kosong dan sistem akan memilih yang terpantas secara automatik", + "browseHigress": "Semak imbas Higress MCP Marketplace", + "selectFolderError": "Ralat pemilihan folder", + "folders": "Dibenarkan akses kepada folder", + "addFolder": "Tambah folder", + "noFoldersSelected": "Tiada folder dipilih", + "useE2B": "Dayakan kotak pasir E2B", + "e2bDescription": "Laksanakan kod Python menggunakan kotak pasir E2B", + "e2bApiKey": "E2B ApiKey", + "e2bApiKeyPlaceholder": "Masukkan E2B Api Keys anda di sini, seperti e2b_1111xx*****", + "e2bApiKeyHelp": "Pergi ke e2b.dev untuk mendapatkan ApiKey anda", + "e2bApiKeyRequired": "Untuk mendayakan fungsi E2B, anda mesti memasukkan ApiKey" + }, + "deleteServer": "Padam pelayan", + "editServer": "Edit pelayan", + "setDefault": "Tetapkan sebagai lalai", + "removeDefault": "Alih keluar lalai", + "isDefault": "Pelayan lalai", + "default": "lalai", + "setAsDefault": "Tetapkan sebagai pelayan lalai", + "removeServer": "Padam pelayan", + "autoStart": "permulaan diri", + "confirmRemoveServer": "Adakah anda pasti mahu memadamkan pelayan {name}? Tindakan ini tidak boleh dibuat asal.", + "removeServerDialog": { + "title": "Padam pelayan" + }, + "confirmDelete": { + "title": "Sahkan pemadaman", + "description": "Adakah anda pasti mahu memadamkan pelayan {name}? Tindakan ini tidak boleh dibuat asal.", + "confirm": "padam", + "cancel": "Batal" + }, + "resetToDefault": "Pulihkan perkhidmatan lalai", + "resetConfirmTitle": "Pulihkan perkhidmatan lalai", + "resetConfirmDescription": "Tindakan ini akan memulihkan semua pelayan lalai sambil mengekalkan pelayan tersuai anda. Sebarang pengubahsuaian pada pelayan lalai akan hilang.", + "resetConfirm": "pulih", + "builtInServers": "Perkhidmatan terbina dalam", + "customServers": "Perkhidmatan tersuai", + "builtIn": "terbina dalam", + "cannotRemoveBuiltIn": "Tidak dapat memadamkan perkhidmatan terbina dalam", + "builtInServerCannotBeRemoved": "Perkhidmatan terbina dalam tidak boleh dipadamkan, hanya parameter dan pembolehubah persekitaran boleh diubah suai.", + "maxDefaultServersReached": "Hanya sehingga 3 pelayan lalai boleh ditetapkan", + "removeDefaultFirst": "Sila alih keluar beberapa pelayan lalai dahulu", + "higressMarket": "Pergi ke pemasangan Higress MCP", + "totalServers": "Jumlah bilangan pelayan", + "npmRegistry": { + "title": "sumber NPM", + "currentSource": "sumber semasa", + "cached": "cache", + "lastChecked": "Pengesanan terakhir", + "refresh": "segarkan semula", + "advanced": "maju", + "advancedSettings": "Tetapan lanjutan", + "advancedSettingsDesc": "Pilihan lanjutan untuk mengkonfigurasi sumber NPM, termasuk pengesanan automatik dan tetapan sumber tersuai", + "autoDetect": "Mengesan sumber optimum secara automatik", + "autoDetectDesc": "Secara automatik mengesan dan menggunakan sumber NPM terpantas semasa permulaan", + "customSource": "sumber tersuai", + "customSourcePlaceholder": "Masukkan alamat sumber NPM tersuai", + "currentCustom": "Sumber tersuai semasa", + "justNow": "cuma", + "minutesAgo": "{minutes} minit yang lalu", + "hoursAgo": "{hours} jam yang lalu", + "daysAgo": "{days} hari yang lalu", + "refreshSuccess": "Sumber NPM berjaya dimuat semula", + "refreshSuccessDesc": "Sumber NPM yang optimum telah dikesan semula dan dikemas kini", + "refreshFailed": "Muat semula sumber NPM gagal", + "autoDetectUpdated": "Tetapan pengesanan automatik dikemas kini", + "autoDetectEnabled": "Pengesanan automatik sumber NPM optimum didayakan", + "autoDetectDisabled": "Pengesanan automatik dilumpuhkan, sumber lalai akan digunakan", + "updateFailed": "Kemas kini tetapan gagal", + "customSourceSet": "Sumber tersuai ditetapkan", + "customSourceSetDesc": "Set sumber NPM tersuai: {registry}", + "customSourceCleared": "Sumber tersuai dikosongkan", + "customSourceClearedDesc": "Sumber NPM tersuai dibersihkan, pengesanan automatik akan digunakan", + "invalidUrl": "URL tidak sah", + "invalidUrlDesc": "Sila masukkan alamat HTTP atau HTTPS yang sah", + "testing": "Menguji sumber NPM", + "testingDesc": "Menguji ketersambungan untuk sumber {registry}...", + "testFailed": "Ujian sumber NPM gagal", + "testFailedDesc": "Tidak dapat menyambung ke {registry}, ralat: {error}. Sila semak sama ada URL betul atau sambungan rangkaian betul.", + "redetectingOptimal": "Mengesan semula sumber NPM yang optimum...", + "redetectComplete": "Ujian semula selesai", + "redetectCompleteDesc": "Sumber NPM optimum semasa telah dikesan dan ditetapkan", + "redetectFailed": "Ujian semula gagal", + "redetectFailedDesc": "Tidak dapat mengesan semula sumber optimum, konfigurasi lalai akan digunakan" + }, + "managedServerReadOnly": "Perkhidmatan pengehosan DeepChat", + "managedServerReadOnlyDesc": "Sila uruskan pengaktifan dan kebenaran dalam tetapan pemalam yang sepadan", + "center": { + "title": "MCP Center", + "running": "Running", + "builtIn": "Built-in", + "custom": "Custom", + "searchPlaceholder": "Cari MCP servers...", + "noResults": "Tiada padanan MCP server", + "command": "Command / URL", + "filters": { + "all": "All", + "running": "Running", + "stopped": "Stopped", + "builtIn": "Built-in", + "custom": "Custom" + } + } + }, + "about": { + "title": "tentang Kami", + "version": "Versi", + "checkUpdate": "Semak kemas kini", + "checking": "Menyemak...", + "latestVersion": "Sudah versi terkini" + }, + "display": { + "fontTitle": "fon", + "fontFamily": "Fon antara muka", + "fontFamilyDesc": "Pilih fon utama antara muka. Jika dibiarkan kosong, gunakan timbunan fon terbina dalam.", + "codeFontFamily": "fon monospace", + "codeFontFamilyDesc": "Digunakan untuk blok kod dan kawasan lebar tetap.", + "fontDefaultLabel": "Lalai (timbunan fon terbina dalam)", + "fontSearchPlaceholder": "Fon carian", + "fontSearchEmpty": "Tiada fon yang sepadan", + "fontReset": "set semula kepada lalai", + "fontSystemLoading": "Memuatkan fon sistem...", + "fontUsageHint": "Sesetengah antara muka memerlukan memulakan semula aplikasi untuk berkuat kuasa. Jika fon tidak tersedia, ia akan kembali ke fon lalai secara automatik.", + "fontSize": "saiz teks", + "text-sm": "Kecil", + "text-base": "standard", + "text-lg": "besar", + "text-xl": "lebih besar", + "text-2xl": "Lebih besar", + "floatingButton": "butang terapung", + "floatingButtonDesc": "Paparkan butang terapung pada desktop untuk membangkitkan tetingkap aplikasi dengan cepat" + }, + "shortcuts": { + "title": "Tetapan kekunci pintasan", + "pressKeys": "Masukkan kekunci pintasan", + "pressEnterToSave": "Tekan Enter untuk menyimpan, Esc untuk membatalkan", + "noModifierOnly": "Anda tidak boleh hanya menggunakan kekunci pengubah suai sebagai kekunci pintasan", + "keyConflict": "Konflik kekunci pintasan, sila pilih kombinasi lain", + "clearShortcut": "Kosongkan kekunci pintasan", + "zoomIn": "besarkan fon", + "zoomOut": "Kurangkan saiz fon", + "zoomReset": "Tetapkan semula fon", + "goSettings": "Buka tetapan", + "cleanHistory": "Kosongkan sejarah sembang", + "deleteConversation": "Padamkan sesi", + "hideWindow": "Sembunyikan tetingkap", + "quitApp": "Keluar dari program", + "toggleSidebar": "Togol bar sisi", + "toggleWorkspace": "Tukar ruang kerja", + "newWindow": "Buka tetingkap baharu", + "showHideWindow": "Tunjukkan/sembunyikan tingkap", + "newConversation": "sesi baru", + "quickSearch": "Pencarian tertumpu", + "closeWindow": "Tutup tetingkap semasa" + }, + "acp": { + "title": "ACP Agent", + "description": "Urus ACP Agent tempatan yang dimulakan oleh DeepChat.", + "enabledTitle": "Dayakan ACP", + "enabledDescription": "Selepas mendayakan, ACP Agent yang dikonfigurasikan akan muncul dalam senarai model.", + "useBuiltinRuntimeTitle": "Menggunakan persekitaran terbina dalam DeepChat", + "useBuiltinRuntimeDescription": "Apabila disemak, arahan node dan uv sistem akan dipintas dan versi terbina dalam DeepChat akan digunakan.", + "enableToAccess": "Agent tidak boleh dikonfigurasikan sehingga ACP didayakan.", + "registryInstallEntry": "Pasang Agent", + "registryInstallEntryDescription": "Cari dan pasang Agent daripada ACP Registry, kemudian kembali ke sini untuk mendayakan dan mengkonfigurasi selepas pemasangan selesai.", + "addCustomAgent": "Tambahkan Agent tersuai", + "customEmpty": "Agent belum disesuaikan lagi.", + "customDeleteConfirm": "Alih keluar Agent \"{name}\" tersuai?", + "builtinSectionTitle": "Registry ACP Agent", + "builtinSectionDescription": "Memuatkan Agent secara dinamik daripada ACP Registry, menyokong caching tempatan, pemasangan automatik dan pembaikan masa jalan.", + "builtinHint": "Mulakan {name} dengan tetapan berikut.", + "disabledBadge": "Tidak didayakan", + "manageProfiles": "Konfigurasi", + "addProfile": "Konfigurasi baharu", + "activeProfile": "Aktifkan konfigurasi", + "profilePlaceholder": "Sila pilih konfigurasi", + "profileSwitched": "Konfigurasi ditukar", + "customSectionTitle": "Agent tersuai", + "customSectionDescription": "Bungkus mana-mana baris arahan yang serasi dengan ACP ke dalam Agent yang boleh digunakan semula.", + "mcpAccessTitle": "Tersedia MCP", + "mcpAccessEmpty": "MCP tidak tersedia pada masa ini.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "Kongsi MCP", + "sharedMcpDescription": "Semua ACP Agent berkongsi satu konfigurasi akses MCP.", + "installedSectionTitle": "Agent dipasang", + "installedSectionDescription": "Hanya Registry Agent yang dipasang akan muncul di sini untuk mendayakan, penyahpepijatan dan penggantian pembolehubah persekitaran.", + "installedCount": "{count} dipasang", + "installedEmptyTitle": "Registry Agent belum dipasang lagi", + "installedEmptyDescription": "Pasang Agent daripada ACP Registry dahulu, dan antara muka boleh dikonfigurasikan akan dipaparkan di sini selepas pemasangan.", + "registryCount": "{count} Agent", + "registryEmpty": "Tiada Registry Agent tersedia di bawah penapis semasa.", + "registryOverlayEmpty": "Tiada Agent tersedia untuk pemasangan di bawah penapis semasa.", + "registryRefresh": "Muat semula Registry", + "registryRepair": "pembaikan", + "registryInstallAction": "Pasang", + "registryUninstallAction": "nyahpasang", + "registryUninstallConfirm": "Nyahpasang \"{name}\"?", + "registryUninstallDescription": "DeepChat melumpuhkan Agent dan membersihkan data pemasangan yang dihoskan secara setempat apabila berkenaan, dan masih boleh dipasang semula dalam ACP Registry kemudian.", + "registryUninstallFailed": "Gagal menyahpasang Agent", + "registryInstallTitle": "ACP Registry", + "registryInstallDescription": "Cari, tapis dan pasang ACP Agent. Selepas pemasangan selesai, kembali ke halaman tetapan untuk konfigurasi.", + "registryLearnMore": "belajar lagi", + "registryRepository": "gudang", + "registrySearchPlaceholder": "Cari ACP Registry Agent...", + "installFilters": { + "all": "semua", + "installed": "Dipasang", + "notInstalled": "Tidak dipasang" + }, + "filters": { + "all": "Semua status", + "enabled": "Lihat hanya didayakan", + "installed": "Lihat sahaja dipasang", + "attention": "Rawat sahaja" + }, + "envOverrideTitle": "Penggantian pembolehubah persekitaran", + "envOverridePlaceholder": "Satu setiap baris KEY=VALUE", + "installState": { + "installed": "Dipasang", + "installing": "Memasang", + "error": "Pemasangan gagal", + "notInstalled": "Tidak dipasang" + }, + "loading": "Memuatkan data ACP...", + "none": "tiada", + "saveSuccess": "Konfigurasi disimpan", + "saveFailed": "Simpan gagal", + "deleteSuccess": "Padam berjaya", + "initialize": "permulaan", + "initializing": "Memulakan...", + "initializeDescription": "Dibuka dalam terminal dan melaksanakan arahan permulaan", + "initializeSuccess": "Inisialisasi bermula", + "initializeFailed": "Permulaan gagal", + "missingFieldsTitle": "Nama dan arahan diperlukan", + "missingFieldsDesc": "Sila isikan nama dan arahan terlebih dahulu.", + "command": "Pesanan", + "commandPlaceholder": "Fail boleh laku atau laluan skrip", + "args": "parameter", + "argsPlaceholder": "Pilihan, dipisahkan dengan ruang dan disertakan dalam petikan jika perlu.", + "env": "pembolehubah persekitaran", + "addEnv": "Tambah pembolehubah", + "envKeyPlaceholder": "KEY", + "envValuePlaceholder": "VALUE", + "profileDialog": { + "addBuiltinTitle": "Menambah konfigurasi {name}", + "editBuiltinTitle": "Edit konfigurasi {name}", + "addCustomTitle": "Tambahkan Agent tersuai", + "editCustomTitle": "Edit Agent tersuai", + "builtinHint": "Sediakan berbilang set pratetap untuk senario yang berbeza dan bertukar dengan cepat antara mereka dalam pemilih model.", + "customHint": "Isikan arahan, parameter dan pembolehubah persekitaran yang diperlukan untuk memulakan Agent.", + "profileName": "Nama konfigurasi", + "profileNamePlaceholder": "Seperti: stesen kerja", + "agentName": "nama Agent", + "agentNamePlaceholder": "Seperti: My ACP Agent" + }, + "profileManager": { + "title": "Senarai konfigurasi", + "description": "Tukar, edit atau padamkan konfigurasi pelancaran yang disimpan.", + "count": "Konfigurasi {count}", + "empty": "Tiada konfigurasi lagi.", + "active": "Pada masa ini aktif", + "setActive": "Tetapkan sebagai aktif", + "deleteConfirm": "Padamkan konfigurasi \"{name}\"?", + "cannotDeleteTitle": "Simpan sekurang-kurangnya satu konfigurasi", + "cannotDeleteDesc": "Agent terbina dalam memerlukan sekurang-kurangnya satu konfigurasi.", + "noAgent": "Sila pilih Agent yang anda ingin uruskan." + }, + "terminal": { + "title": "Mulakan terminal", + "waiting": "Menunggu permulaan untuk bermula...", + "starting": "Memulakan permulaan...", + "close": "penutupan", + "closing": "Menutup...", + "exitSuccess": "Proses berjaya diselesaikan (kod keluar: {code})", + "exitError": "Ralat berlaku semasa proses keluar (kod keluar: {code})", + "processError": "ralat proses", + "paste": "tampal", + "pasteError": "Tampal daripada papan keratan gagal", + "status": { + "idle": "terbiar", + "running": "Berlari", + "completed": "Selesai", + "error": "kesilapan" + } + }, + "dependency": { + "title": "Kebergantungan luar hilang", + "description": "Kebergantungan berikut perlu dipasang sebelum permulaan.", + "installCommands": "Perintah pemasangan", + "downloadUrl": "pautan muat turun", + "copy": "salinan", + "copied": "Disalin ke papan keratan", + "copyFailed": "Salinan gagal" + }, + "debug": { + "title": "ACP Inspector", + "description": "Semak status kesihatan \"{name}\" dan hantar permintaan ACP asal untuk melihat strim acara.", + "entry": "Inspector", + "healthCheck": "Health Check", + "healthChecking": "Menyemak...", + "healthCheckFailed": "Pemeriksaan kesihatan gagal", + "workdirPlaceholder": "Biarkan kosong untuk menggunakan direktori kerja lalai", + "close": "penutupan", + "customMethod": "Nama kaedah tersuai", + "customMethodPlaceholder": "Contohnya session/ping", + "payloadHint": "JSON boleh dilaraskan sebelum dihantar.", + "format": "Format JSON", + "resetTemplate": "Templat pemulihan", + "clearHistory": "rekod yang jelas", + "send": "Hantar permintaan", + "sending": "Menghantar...", + "processReady": "Proses sudah siap", + "processNotReady": "Sila laksanakan Health Check dahulu", + "needInitialize": "Sila laksanakan Health Check dahulu", + "events": "peristiwa", + "eventCount": "Artikel {count}", + "empty": "Tiada acara penyahpepijatan lagi.", + "parseError": "Penghuraian JSON gagal", + "customMethodRequired": "Sila isikan nama kaedah sambungan", + "requestFailed": "Permintaan gagal", + "methods": { + "initialize": "initialize", + "newSession": "session/new", + "loadSession": "session/load", + "prompt": "session/prompt", + "cancel": "session/cancel", + "setSessionMode": "session/setMode", + "setSessionModel": "session/setModel", + "extMethod": "ext/method", + "extNotification": "ext/notification" + }, + "eventKinds": { + "request": "bertanya", + "response": "tindak balas", + "notification": "maklumkan", + "permission": "kebenaran", + "lifecycle": "kitaran hidup", + "stderr": "stderr", + "error": "kesilapan" + } + } + }, + "rateLimit": { + "title": "had kadar", + "description": "Kawal masa selang permintaan untuk mengelakkan melebihi had API", + "intervalLimit": "Selang permintaan", + "intervalUnit": "Kedua", + "intervalHelper": "Selang minimum antara dua permintaan, sila matikan pengehadan kadar apabila tidak diperlukan", + "lastRequestTime": "permintaan terakhir", + "queueLength": "panjang beratur", + "nextAllowedTime": "Boleh request lain kali", + "never": "tidak pernah", + "justNow": "cuma", + "secondsAgo": "beberapa saat yang lalu", + "minutesAgo": "minit yang lalu", + "immediately": "serta merta", + "secondsLater": "beberapa saat kemudian", + "confirmDisableTitle": "Sahkan untuk mematikan pengehadan kadar", + "confirmDisableMessage": "Nilai ini tidak boleh kurang daripada atau sama dengan 0. Adakah anda ingin mematikan fungsi mengehadkan kadar?", + "confirmDisable": "Matikan sekatan", + "disabled": "Pengehadan kadar dimatikan", + "disabledDescription": "Ciri mengehadkan kadar dimatikan" + }, + "promptSetting": { + "resetToDefault": "Tetapkan semula kepada perkataan gesaan lalai", + "resetToDefaultSuccess": "Tetapkan semula kepada perkataan gesaan sistem lalai", + "resetToDefaultFailed": "Tetapan semula gagal, sila cuba lagi" + }, + "skills": { + "title": "Tetapan Skills", + "description": "Mengurus dan mengkonfigurasi modul skill Pembantu AI", + "draftSuggestions": { + "title": "Adalah disyorkan untuk memendakan selepas misi Skill Draft", + "description": "Selepas tugasan selesai, benarkan Agent mencadangkan penjanaan skill draft sementara apabila proses boleh guna semula dikenal pasti. draft akan disimpan dalam direktori sementara dahulu dan anda perlu membuat keputusan secara manual sama ada untuk mengimport dan memasangnya." + }, + "openFolder": "buka folder", + "addSkill": "Tambah skill", + "empty": "Tiada skill", + "emptyHint": "Klik butang \"Tambah skill\" untuk memasang skill baharu", + "noResults": "Tiada skill yang sepadan ditemui", + "search": "Cari skill...", + "count": "Jumlah {count} skill", + "install": { + "title": "Pasang skill", + "description": "Pilih kaedah pemasangan skill", + "tabFolder": "folder", + "tabZip": "ZIP", + "tabUrl": "URL", + "fromFolder": "Pasang daripada folder", + "selectFolder": "Pilih folder skill", + "folderHint": "Klik untuk memilih folder skill", + "folderTip": "Menyokong import langsung daripada pelanggan lain seperti ~/.claude/skills/", + "zipHint": "Klik untuk memilih fail ZIP", + "urlPlaceholder": "Masukkan alamat muat turun skill ZIP", + "urlHint": "Masukkan pautan muat turun untuk pakej skill", + "installButton": "Pasang", + "installing": "Memasang...", + "success": "Pemasangan berjaya", + "successMessage": "skill {name} telah berjaya dipasang", + "failed": "Pemasangan gagal", + "dragNotSupported": "Seret dan lepas masih belum disokong, sila klik untuk memilih" + }, + "delete": { + "title": "Alih keluar skill", + "description": "Adakah anda pasti mahu memadamkan skill {name}? Tindakan ini tidak boleh dibuat asal.", + "success": "Padam berjaya", + "successMessage": "skill {name} telah berjaya dipadamkan", + "failed": "Padam gagal" + }, + "card": { + "scripts": "Skrip {count}", + "env": "Pembolehubah persekitaran {count}", + "pythonShort": "Py", + "nodeShort": "Node" + }, + "edit": { + "title": "Edit skill", + "placeholder": "Edit kandungan skill di sini...", + "readFailed": "Bacaan gagal", + "success": "Berjaya disimpan", + "failed": "Simpan gagal", + "name": "nama", + "namePlaceholder": "nama skill", + "nameHint": "Nama skill tidak boleh ditukar selepas ia dicipta.", + "description": "huraikan", + "descriptionPlaceholder": "Penerangan skill", + "allowedTools": "Alat tambahan", + "allowedToolsPlaceholder": "Read, Grep, Bash", + "allowedToolsHint": "Senarai nama alat yang dipisahkan koma", + "content": "kandungan skill", + "runtimeTitle": "masa jalan", + "runtimeHint": "Pilih strategi penghuraian Python dan Node untuk skrip terbina dalam.", + "pythonRuntime": "Masa jalan Python", + "nodeRuntime": "Masa jalan Node", + "envTitle": "pembolehubah persekitaran", + "envWarning": "Hanya paparan topeng dilakukan dalam UI, dan fail skill sidecar sebenarnya akan ditulis dalam teks biasa.", + "scriptsTitle": "Skrip terbina dalam", + "scriptsHint": "Hanya skrip di bawah scripts/ akan didedahkan kepada agent melalui skill_run.", + "noScripts": "Tiada skrip runnable ditemui", + "scriptEnabled": "membolehkan", + "scriptDescription": "Liputan penerangan", + "scriptDescriptionPlaceholder": "Penerangan skrip pilihan ditunjukkan kepada agent", + "runtime": { + "auto": "Balik semula automatik", + "system": "masa jalan sistem", + "builtin": "Masa jalan terbina dalam" + }, + "files": "Kandungan folder", + "noFiles": "Tiada fail" + }, + "conflict": { + "title": "skill sudah wujud", + "description": "skill bernama \"{name}\" sudah wujud. Adakah anda mahu menulis ganti?", + "overwrite": "penutup" + }, + "sync": { + "title": "segerak", + "import": "Import daripada alatan lain...", + "export": "Eksport", + "importTitle": "Import Skills daripada alatan lain", + "exportTitle": "Eksport Skills ke alat lain", + "importDescription": "Import Skills daripada Claude Code, Cursor dan alatan lain", + "exportDescription": "Eksport Skills ke alat pembantu AI yang lain", + "step1Title": "Pilih alat sumber", + "step2Title": "Pilih Skills untuk diimport", + "step3Title": "Sahkan import", + "exportStep1Title": "Pilih Skills untuk dieksport", + "exportStep2Title": "Pilih alat sasaran", + "exportStep3Title": "Sahkan eksport", + "scanning": "Mengimbas...", + "noToolsFound": "Alat yang dipasang tidak dikesan", + "skillCount": "{count} Skills dikesan", + "notInstalled": "Tidak dipasang", + "selectedCount": "{count} dipilih", + "selectAll": "Pilih semua", + "deselectAll": "Nyahpilih semua", + "conflict": "konflik", + "conflictDescription": "skill \"{name}\" dengan nama yang sama sudah wujud", + "batchAction": "Pemprosesan kelompok", + "skip": "melompat ke atas", + "skipAll": "Langkau semua", + "overwrite": "penutup", + "overwriteAll": "Semua dilindungi", + "rename": "Namakan semula", + "renameAll": "Namakan semula semua", + "warnings": "amaran penukaran", + "previewing": "Pratonton...", + "importing": "Mengimport ({current}/{total})...", + "exporting": "Mengeksport ({current}/{total})...", + "importButton": "import", + "exportButton": "Eksport", + "exportWarnings": "Amaran eksport", + "noConflicts": "Tiada konflik", + "readyToExport": "Bersedia untuk mengeksport {count} Skills", + "kiroOptions": "Pilihan eksport Kiro", + "kiroInclusion": "Memperkenalkan corak", + "kiroOnDemand": "Memperkenalkan atas permintaan", + "kiroOnDemandDesc": "Hanya digunakan apabila diminta secara eksplisit oleh pengguna", + "kiroAlways": "selalu perkenalkan", + "kiroAlwaysDesc": "Secara automatik disertakan dalam setiap perbualan", + "kiroConditional": "Pengenalan bersyarat", + "kiroConditionalDesc": "Diimport secara automatik berdasarkan corak padanan fail", + "kiroFilePatterns": "Corak padanan fail", + "kiroFilePatternsPlaceholder": "Contohnya: **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Corak glob yang dipisahkan koma", + "scanError": "Imbasan gagal", + "previewError": "Pratonton gagal", + "loadToolsError": "Gagal memuatkan senarai alat", + "importSuccess": "Import berjaya", + "importSuccessMessage": "Berjaya mengimport {count} Skills", + "importPartial": "Separa berjaya diimport", + "importPartialMessage": "{success} kejayaan, {skipped} langkau, {failed} kegagalan", + "importError": "Import gagal", + "exportSuccess": "Eksport berjaya", + "exportSuccessMessage": "{count} Skills berjaya dieksport", + "exportPartial": "Sebahagian berjaya dieksport", + "exportPartialMessage": "{success} kejayaan, {skipped} langkau, {failed} kegagalan", + "exportError": "Eksport gagal", + "resultSuccess": "Operasi berjaya", + "resultPartial": "Separa berjaya", + "imported": "Diimport", + "exported": "Dieksport", + "skipped": "dilangkau", + "failed": "gagal", + "failedItems": "projek gagal" + }, + "syncStatus": { + "title": "alat luaran", + "description": "Import kemahiran daripada pembantu pengaturcaraan AI yang lain", + "scanning": "Alat pengimbasan...", + "noToolsFound": "Tiada alat luaran dikesan", + "skillCount": "Kemahiran {count}", + "notInstalled": "Tidak dipasang", + "notAvailable": "Tidak tersedia", + "noSkills": "Tiada kemahiran", + "import": "import", + "syncing": "Mengimport..." + }, + "syncPrompt": { + "title": "menemui kemahiran baru", + "description": "Kami menemui kemahiran baharu di kalangan pembantu pengaturcaraan AI yang lain. Adakah anda ingin mengimport?", + "dontShowAgain": "Jangan tunjukkan ini lagi", + "skip": "melompat ke atas", + "importSelected": "Import dipilih" + } + }, + "environments": { + "title": "persekitaran direktori", + "description": "Lihat direktori projek yang digunakan oleh sesi dan buka atau tetapkan dengan cepat sebagai direktori lalai.", + "default": { + "title": "direktori lalai", + "description": "Sesi baharu akan memilih ini untuk diprapilih dan bukannya dipaksa untuk menulis ganti pilihan manual anda.", + "empty": "Pada masa ini tiada set direktori lalai." + }, + "history": { + "title": "Direktori sejarah", + "description": "Hanya direktori yang sebenarnya digunakan oleh sesi dipaparkan di sini." + }, + "temp": { + "title": "Katalog Temp", + "description": "Persekitaran yang terletak dalam direktori sementara sistem atau ruang kerja pengehosan aplikasi akan disimpan di sini dan diruntuhkan secara lalai." + }, + "actions": { + "refresh": "segarkan semula", + "showMissing": "Tunjukkan direktori tidak wujud", + "open": "Buka", + "setDefault": "Tetapkan sebagai lalai", + "clearDefault": "kosongkan lalai", + "showTemp": "Tunjukkan Temp", + "hideTemp": "Tutup Temp" + }, + "badges": { + "default": "lalai", + "temp": "Temp", + "missing": "Direktori tidak wujud", + "notInHistory": "bukan dalam sejarah" + }, + "meta": { + "sessions": "Sesi {count}", + "lastUsed": "Digunakan baru-baru ini: {value}", + "never": "tidak pernah" + }, + "empty": { + "regular": "Pada masa ini tiada persekitaran direktori untuk dipaparkan.", + "temp": "Pada masa ini tiada persekitaran direktori Temp." + }, + "errors": { + "openTitle": "Gagal membuka direktori" + } + }, + "remote": { + "title": "jauh", + "description": "Konfigurasi bersatu alat kawalan jauh Telegram, Feishu/Lark, QQBot, Discord dan WeChat iLink.", + "telegram": { + "title": "Telegram", + "description": "Sambung ke Telegram Bot untuk menyokong sembang peribadi, sembang kumpulan dan kawalan jauh benang topik.", + "botToken": "Robot Token", + "botTokenPlaceholder": "Robot Telegram Token", + "botTokenDescription": "Isikan robot Token untuk kawalan jauh Telegram." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Disambungkan kepada Feishu Bot, ia menyokong sembang peribadi, sembang kumpulan dan kawalan jauh benang topik.", + "brand": "jenama", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "Permohonan ID", + "appIdPlaceholder": "Apl Feishu ID", + "appSecret": "kunci aplikasi", + "appSecretPlaceholder": "Kunci aplikasi Feishu", + "verificationToken": "Token pengesahan", + "verificationTokenPlaceholder": "Token pengesahan langganan acara Feishu", + "encryptKey": "Kunci penyulitan (pilihan)", + "encryptKeyPlaceholder": "Boleh dibiarkan kosong apabila penyulitan acara tidak dihidupkan", + "botUser": "Akaun robot: {name} ({openId})", + "bindings": "Bilangan pengikatan: {count}, pengguna berpasangan: {pairedUserCount}", + "pairedUserOpenIds": "Pengguna berpasangan Open ID", + "pairedUserOpenIdsPlaceholder": "Contohnya ou_xxx, ou_yyy", + "accessRulesDescription": "Lengkapkan padanan dalam sembang peribadi dahulu. Dalam sembang kumpulan, hanya pengguna yang dipadankan dan menyebut bot dengan {'@'} boleh mengendalikan perbualan.", + "accessRule1": "Mula-mula, hantar /pair [kod berpasangan] ke chatbot peribadi untuk melengkapkan gandingan.", + "accessRule2": "Dalam sembang kumpulan dan urutan topik, hanya apabila pengguna berpasangan menyebut bot dengan {'@'}, mesej itu akan memasuki perbualan." + }, + "discord": { + "title": "Discord", + "description": "Akses Discord Bot, sokong sembang peribadi, sebutan saluran dan alat kawalan jauh Slash Commands.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Discord Bot Token", + "remoteControlDescription": "Alat kawalan jauh Discord menggunakan proses Bot Token, Gateway dan REST bebas.", + "accessRule1": "Hantar /pair [kod berpasangan] dalam sembang peribadi atau saluran untuk membenarkan DM atau saluran semasa kepada DeepChat.", + "accessRule2": "Mesej saluran hanya akan memasuki perbualan apabila bot disebut, untuk mengelakkan salah pengendalian sembang biasa." + }, + "sections": { + "credentials": "sijil", + "remoteControl": "alat kawalan jauh", + "notifications": "maklumkan", + "accessRules": "peraturan akses" + }, + "remoteControl": { + "description": "Ikat setiap portal jauh ke sesi dan gunakan semula sesi secara berterusan antara arahan yang berbeza.", + "allowedUserIds": "Pengguna yang dibenarkan ID", + "allowedUserIdsPlaceholder": "Contohnya 123456789, 987654321", + "defaultAgent": "Ejen lalai", + "defaultAgentPlaceholder": "Pilih ejen", + "defaultWorkdir": "direktori lalai", + "defaultWorkdirPlaceholder": "Pilih direktori lalai", + "defaultWorkdirHelper": "Direktori kerja sesi kawalan jauh. Mesti dipilih apabila ejen lalai ialah ACP.", + "openPairDialog": "sepasang", + "manageBindings": "Uruskan pengikatan", + "pairCode": "kod berpasangan", + "noPairCode": "Pada masa ini tiada kod gandingan yang sah", + "pairCodeExpiresAt": "Tarikh luput: {time}", + "pairDialogTitle": "{channel} berpasangan", + "pairDialogDescription": "Selepas menjana kod pasangan, sila pergi ke robot {channel} yang sepadan untuk melengkapkan gandingan.", + "pairDialogInstructionTelegram": "Pergi ke robot Telegram dan hantar arahan ini:", + "pairDialogInstructionFeishu": "Pergi ke sembang peribadi Feishu Robot dan hantar arahan ini:", + "pairDialogInstructionDiscord": "Pergi ke sembang peribadi atau saluran sasaran robot Discord dan hantar arahan ini:", + "bindingsDialogTitle": "{channel} mengikat", + "bindingsDialogDescription": "Keluarkan hubungan mengikat antara portal jauh dan sesi DeepChat satu demi satu.", + "bindingsEmpty": "Pada masa ini tiada sesi terikat.", + "pairingSuccessTitle": "Berganding berjaya", + "pairingSuccessDescription": "Senarai pengetua berpasangan telah dimuat semula.", + "pairDialogInstructionQQBot": "Pergi ke sembang peribadi robot QQ atau sembang kumpulan yang dibenarkan dan hantar arahan ini:", + "authorizedPrincipalsTitle": "Subjek dibenarkan", + "authorizedPrincipalsDescription": "Akaun {channel} ini diberi kuasa untuk menggandingkan dan mengendalikan sesi.", + "authorizedPrincipalsEmpty": "Pada masa ini tiada pengetua yang diberi kuasa.", + "sessionBindingsTitle": "mengikat sesi", + "sessionBindingsDescription": "Setiap portal jauh di bawah terikat pada sesi DeepChat pada masa ini." + }, + "hooks": { + "title": "Notis Telegram Hook", + "description": "Gunakan semula Telegram Bot yang sama untuk menghantar pemberitahuan Hook.", + "chatId": "Sembang ID", + "chatIdPlaceholder": "Contohnya 123456789", + "threadId": "Topik ID (pilihan)", + "threadIdPlaceholder": "Topik pilihan ID" + }, + "status": { + "title": "Status berjalan", + "botUser": "Pengguna robot: {username} ({id})", + "bindings": "Bilangan pengikatan: {count}, offset pengundian: {pollOffset}", + "states": { + "disabled": "Dilumpuhkan", + "stopped": "Berhenti", + "starting": "Bermula", + "running": "Berlari", + "backoff": "Mencuba semula selepas kegagalan", + "error": "kesilapan" + }, + "bindingOnly": "Bilangan pengikatan: {count}, prinsipal berpasangan: {paired}" + }, + "overview": { + "telegram": "Pengikatan {bindingCount}, pengguna berpasangan {pairedCount}", + "feishu": "Pengikatan {bindingCount}, pengguna berpasangan {pairedCount}", + "hooksOn": "hidupkan", + "hooksOff": "penutupan", + "qqbot": "Pengikatan {bindingCount}, pengguna berpasangan {pairedCount}", + "discord": "Pengikatan {bindingCount}, saluran berpasangan {pairedCount}", + "weixinIlink": "{bindingCount} terikat, akaun {accountCount}, {connectedCount} disambungkan" + }, + "bindingKinds": { + "dm": "sembang peribadi", + "group": "sembang kumpulan", + "topic": "topik" + }, + "qqbot": { + "title": "QQBot", + "description": "Akses platform terbuka robot QQ Bot, yang menyokong sembang tunggal dan kawalan robot sebutan sembang kumpulan yang dibenarkan.", + "appId": "Permohonan ID", + "appIdPlaceholder": "Aplikasi QQBot ID", + "clientSecret": "kunci pelanggan", + "clientSecretPlaceholder": "Kunci pelanggan QQBot", + "remoteControlDescription": "Sembang tunggal rasmi QQ user_openid dan sembang kumpulan member_openid tidak berada dalam ruang identiti yang sama, jadi sembang tunggal sepadan dengan pengguna yang dibenarkan dan sembang kumpulan perlu dibenarkan secara berasingan dengan /pair dalam kumpulan.", + "pairedUserIds": "Pengguna berpasangan OpenID", + "pairedUserIdsPlaceholder": "Contohnya user_openid_xxx, user_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Imbas kod QR untuk mengakses WeChat iLink Bot rasmi, dan gunakan penyesuai terbina dalam untuk mengambil alih sesi kawalan jauh.", + "loginDescription": "Selepas mengklik butang di bawah, DeepChat akan membuka tetingkap log masuk WeChat rasmi. Sila lengkapkan kebenaran pengimbasan kod iLink Bot dalam tetingkap ini. Akaun yang berjaya disambungkan akan ditambahkan secara automatik ke senarai di bawah.", + "ownerOnlyNotice": "Versi pertama semasa hanya membenarkan pemilik akaun yang sepadan mengimbas kod QR untuk log masuk untuk mengawal DeepChat.", + "connectButton": "Buka tetingkap log masuk", + "refreshQrCode": "Buka semula tetingkap log masuk", + "loginDialogTitle": "Sambung ke WeChat iLink", + "loginDialogDescription": "Halaman log masuk WeChat rasmi akan dibuka dalam tetingkap berasingan. Sila lengkapkan kebenaran kod imbasan dalam tetingkap ini dan pastikan kotak dialog ini terbuka sehingga sambungan selesai.", + "loginFailed": "Log masuk WeChat iLink gagal.", + "loginSuccessTitle": "WeChat iLink disambungkan", + "loginSuccessDescription": "Nombor akaun {accountId} tersedia.", + "accountsTitle": "akaun", + "accountsDescription": "Setiap akaun iLink Bot yang disambungkan akan berjalan secara bebas dan mengekalkan status mengikat dan menjalankannya sendiri.", + "noAccounts": "Tiada akaun WeChat iLink telah disambungkan lagi.", + "ownerUserId": "Pengguna pemilik ID: {ownerUserId}", + "baseUrl": "Alamat perkhidmatan: {baseUrl}", + "accountBindings": "Bilangan pengikatan: {count}", + "remoteControlDescription": "Tetapkan ejen lalai yang dikongsi untuk akaun WeChat iLink dan uruskan pengikatan sesi yang dijana oleh akaun ini.", + "removeAccount": "Alih keluar akaun", + "restartAccount": "Mulakan semula akaun", + "statusSummary": "Terdapat akaun {accounts}, {connected} disambungkan dan {bindings} terikat.", + "qrcodeAlt": "Kod QR WeChat iLink", + "loginWindowOpened": "Tetingkap log masuk WeChat rasmi telah dibuka. Sila lengkapkan kebenaran kod imbasan dalam tetingkap ini.", + "loginSessionExpired": "Sesi log masuk ini telah tamat tempoh, sila buka semula tetingkap log masuk dan cuba lagi.", + "loginResponseIncomplete": "Pemulangan log masuk WeChat iLink tidak lengkap, sila cuba lagi.", + "loginTimedOut": "Menunggu tamat masa kebenaran WeChat iLink, sila buka semula tetingkap log masuk dan cuba lagi.", + "loginConnected": "Akaun WeChat iLink telah disambungkan." + } + }, + "plugins": { + "title": "pemalam", + "officialOnly": "Urus status pengaktifan pemalam rasmi terbina dalam versi DeepChat semasa", + "refresh": "segarkan semula", + "empty": "Tiada pemalam rasmi tersedia lagi", + "emptyTitle": "Tiada pemalam terbina dalam lagi", + "emptyDescription": "Platform semasa tidak mempunyai pemalam rasmi terbina dalam dalam versi DeepChat ini.", + "loadFailed": "Pemuatan pemalam gagal", + "actionFailed": "Operasi pemalam gagal", + "install": "Pasang", + "installFromFile": "Pilih.dcplugin", + "openRelease": "GitHub Release", + "enable": "membolehkan", + "disable": "nyahaktifkan", + "openSettings": "sediakan", + "runtime": "masa jalan", + "version": "Versi", + "command": "Pesanan", + "status": { + "enabled": "Didayakan", + "disabled": "dinyahaktifkan", + "available": "Tersedia" + }, + "runtimeStates": { + "missing": "Tidak dipasang", + "installed": "Dipasang", + "running": "Berlari", + "error": "kesilapan" + } + }, + "controlCenter": { + "groups": { + "overview": "Gambaran keseluruhan", + "setup": "Pangkalan", + "models": "Tetapan Agent", + "tools": "Perluasan keupayaan", + "knowledge": "kejuruteraan konteks", + "system": "sistem" + }, + "overview": { + "title": "Settings Overview", + "description": "Lihat penyedia perkhidmatan, MCP, Agent, data dan status penggunaan secara berpusat.", + "searchPlaceholder": "Tetapan carian, pembekal perkhidmatan, model, Agent, MCP...", + "providers": "Providers", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agents", + "data": "Masa sandaran terakhir", + "enabledCount": "{count} didayakan", + "runningCount": "{count} berjalan", + "enabledAgentCount": "{count} Agent didayakan", + "providersDescription": "Status sambungan pembekal perkhidmatan", + "deepchatAgentsDescription": "Kemasukan konfigurasi Agent", + "mcpOn": "MCP didayakan", + "mcpOff": "MCP ditutup", + "syncOn": "Penyegerakan didayakan", + "syncOff": "Penyegerakan tidak didayakan", + "backupNever": "tidak pernah disandarkan" + }, + "quickStart": { + "title": "Quick start", + "addApiKey": "Add API Key", + "addApiKeyDesc": "Konfigurasikan sambungan pembekal perkhidmatan", + "enableModel": "Enable Model", + "enableModelDesc": "Dayakan model yang tersedia", + "startMcp": "Start MCP Server", + "startMcpDesc": "Mulakan perkhidmatan alat", + "backupNow": "Backup Now", + "backupNowDesc": "Sandarkan data sekarang" + }, + "needsAttention": { + "title": "Needs attention", + "empty": "Pada masa ini tiada projek untuk diusahakan", + "noModels": "Model belum didayakan lagi", + "privacyOff": "Mod privasi tidak dihidupkan", + "backupNever": "Data tidak pernah disandarkan" + }, + "activity": { + "title": "Perubahan tetapan terkini", + "description": "Hanya 200 perubahan tetapan terkini dipaparkan, dan pangkalan data mengekalkan 2,000 perubahan terkini.", + "when": "masa", + "category": "taip", + "change": "Semak semula", + "empty": "Tiada rekod pengubahsuaian lagi", + "emptyDescription": "Ia akan muncul di sini selepas berjaya mengubah suai tetapan.", + "settingUpdated": "Kemas kini tetapan: {key}", + "providerUpdated": "Kemas kini pembekal perkhidmatan: {name}", + "providerCreated": "Pembekal perkhidmatan baharu: {name}", + "providerRemoved": "Pembekal perkhidmatan pengalihan keluar: {name}", + "providerModelsRefreshed": "Muat semula model pembekal perkhidmatan: {name}", + "modelStatusChanged": "Kemas kini status model: {model}", + "modelBatchUpdated": "Kemas kini kelompok model {count}", + "mcpServerCreated": "MCP Server baharu: {name}", + "mcpServerUpdated": "Kemas kini MCP Server: {name}", + "mcpServerRemoved": "Alih keluar MCP Server: {name}", + "mcpServerStatusChanged": "Togol MCP Server: {name}", + "mcpGlobalStatusChanged": "Tukar status global MCP: {status}", + "mcpServerStarted": "Mulakan MCP Server:{name}", + "mcpServerStopped": "Hentikan MCP Server: {name}", + "mcpRegistryRefreshed": "Muat semula MCP NPM registry", + "backupCreated": "Cipta sandaran: {name}", + "backupImported": "Import sandaran: {name}", + "databaseRepaired": "Pembaikan pangkalan data selesai: {status}" + } + } +} diff --git a/src/renderer/src/i18n/ms-MY/sync.json b/src/renderer/src/i18n/ms-MY/sync.json new file mode 100644 index 000000000..2f25ebe79 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "Berjaya mengimport perbualan {count}" + }, + "error": { + "notEnabled": "Penyegerakan tidak didayakan", + "folderNotExists": "Folder penyegerakan tidak wujud", + "noValidBackup": "Tiada fail sandaran yang sah dalam folder penyegerakan", + "unsupportedBackupVersion": "Sandaran ini dibuat oleh versi DeepChat yang lebih baharu, versi semasa tidak boleh diimport", + "dbNotExists": "Fail pangkalan data tidak wujud", + "configNotExists": "Fail konfigurasi tidak wujud", + "tempDbFailed": "Penciptaan fail sandaran pangkalan data sementara gagal", + "tempConfigFailed": "Pembuatan fail sandaran konfigurasi sementara gagal", + "importFailed": "Import gagal, data asal dipulihkan", + "importProcess": "Ralat semasa import", + "unknown": "ralat yang tidak diketahui", + "encryptedBackupPasswordMissing": "Sandaran disulitkan, tetapi kunci pangkalan data tempatan tidak tersedia. Sila buka kunci pangkalan data yang disulitkan dahulu dan kemudian importnya semula.", + "overwriteEncryptionMismatch": "Import ganti ganti memerlukan pangkalan data sandaran dan semasa berada dalam keadaan penyulitan yang sama." + } +} diff --git a/src/renderer/src/i18n/ms-MY/thread.json b/src/renderer/src/i18n/ms-MY/thread.json new file mode 100644 index 000000000..132822677 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Namakan semula", + "delete": "padam", + "cleanMessages": "Kosongkan mesej", + "pin": "pin ke atas", + "unpin": "Nyahsemat", + "export": "Eksport", + "exportText": "teks biasa", + "exportNowledgeMem": "Nowledge-mem" + }, + "export": { + "failed": "Eksport gagal", + "failedDesc": "Ralat berlaku semasa eksport, sila cuba lagi", + "nowledgeMemSubmitFailed": "Penyerahan kepada Nowledge-mem gagal", + "nowledgeMemSubmitFailedDesc": "Penyerahan sesi kepada nowledge-mem gagal", + "nowledgeMemSubmitPrompt": "Adakah anda pasti anda perlu mengeksport sesi semasa ke nowledge-mem?", + "nowledgeMemSubmitSuccess": "Dihantar kepada Nowledge-mem dengan jayanya", + "nowledgeMemSubmitSuccessDesc": "Berjaya menyerahkan sesi kepada Nowledge-mem", + "nowledgeMemSuccessDesc": "Sesi berjaya dieksport ke format Nowledge-mem", + "success": "Eksport berjaya", + "nowledgeMemSuccess": "Berjaya dieksport ke Nowledge-mem", + "successDesc": "Eksport sesi berjaya" + }, + "message": { + "toolbar": { + "save": "jimat" + } + }, + "toolbar": { + "save": "jimat", + "cancel": "Batal", + "previousVariant": "Tukar kepada versi sebelumnya", + "nextVariant": "Beralih ke versi seterusnya", + "copy": "Salin jawapan sebagai Markdown", + "copyImage": "Salin seperti gambar", + "copyImageWithLongPress": "Salin sebagai gambar (tekan lama untuk menangkap dari atas)", + "copyFromTopSuccess": "Gambar sesi lengkap disalin", + "capturing": "Mengambil tangkapan skrin...", + "retry": "Menjana semula", + "fork": "Bercabang ke sesi baharu", + "edit": "Edit mesej", + "delete": "Padam mesej", + "trace": "Lihat parameter permintaan" + } +} diff --git a/src/renderer/src/i18n/ms-MY/toolCall.json b/src/renderer/src/i18n/ms-MY/toolCall.json new file mode 100644 index 000000000..18901f560 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Memanggil", + "response": "Berlari", + "end": "Selesai", + "error": "kesilapan", + "title": "Panggilan alat", + "clickToView": "Klik untuk melihat butiran", + "functionName": "nama fungsi", + "permission": "Meminta kebenaran", + "params": "Parameter fungsi", + "responseData": "tindak balas fungsi", + "imagePreview": "Pratonton gambar", + "imagePreviewCount": "Tiada pratonton gambar | Pratonton gambar {count} | Pratonton gambar {count}", + "terminalOutput": "Keluaran terminal", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "Selesai penggantian di {count}", + "fileOperation": "Operasi fail", + "fileRead": "membaca fail", + "fileWrite": "tulis fail", + "filePath": "laluan fail", + "success": "kejayaan", + "failed": "gagal" +} diff --git a/src/renderer/src/i18n/ms-MY/traceDialog.json b/src/renderer/src/i18n/ms-MY/traceDialog.json new file mode 100644 index 000000000..732626fbb --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Minta pratonton parameter", + "provider": "pembekal", + "model": "Model", + "endpoint": "API Endpoint", + "headers": "Pengepala permintaan", + "body": "Badan permintaan", + "copyJson": "Salin JSON", + "copySuccess": "Disalin ke papan keratan", + "close": "penutupan", + "loading": "memuatkan...", + "error": "Gagal memuatkan", + "errorDesc": "Tidak dapat mendapatkan maklumat pratonton permintaan, sila cuba lagi", + "notImplemented": "Belum disokong lagi", + "notImplementedDesc": "Pembekal ini belum tersedia untuk pratonton", + "mayNotMatch": "Nota: Pratonton ini dibina semula berdasarkan tetapan sesi semasa dan mungkin tidak sama persis dengan parameter yang sebenarnya dihantar." +} diff --git a/src/renderer/src/i18n/ms-MY/update.json b/src/renderer/src/i18n/ms-MY/update.json new file mode 100644 index 000000000..e076db31c --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "versi baharu ditemui", + "version": "Versi", + "releaseDate": "tarikh keluaran", + "releaseNotes": "Kemas kini kandungan", + "later": "Bercakap dengan anda kemudian", + "githubDownload": "Muat turun Github", + "officialDownload": "Muat turun laman web rasmi", + "checkUpdate": "Semak kemas kini", + "downloading": "Memuat turun", + "installNow": "Pasang sekarang", + "installUpdate": "Pasang kemas kini", + "versionAvailable": "{version} tersedia", + "autoUpdateFailed": "Kemas kini automatik gagal, sila gunakan pautan muat turun manual di bawah.", + "topbarButton": "memperbaharui", + "autoUpdate": "Kemas kini automatik", + "restarting": "Memulakan semula", + "alreadyUpToDate": "Sudah versi terkini", + "alreadyUpToDateDesc": "DeepChat anda kini adalah versi terkini dan tidak perlu dikemas kini." +} diff --git a/src/renderer/src/i18n/ms-MY/welcome.json b/src/renderer/src/i18n/ms-MY/welcome.json new file mode 100644 index 000000000..2e6ccc621 --- /dev/null +++ b/src/renderer/src/i18n/ms-MY/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "selamat datang", + "description": "Mari mulakan menyediakan DeepChat" + }, + "provider": { + "title": "Pembekal perkhidmatan model", + "description": "Pilih pembekal perkhidmatan model pilihan anda" + }, + "configuration": { + "title": "Konfigurasi model", + "description": "Konfigurasikan model yang anda mahu gunakan" + }, + "complete": { + "title": "Selesai", + "description": "Semuanya sedia untuk mula digunakan!" + } + }, + "title": "Selamat datang ke DeepChat", + "description": "Mari kita lalui proses persediaan bersama-sama", + "provider": { + "select": "Pilih pembekal perkhidmatan", + "apiUrl": "Alamat API", + "apiKey": "Kunci API", + "verifyLink": "Pautan pengesahan" + }, + "complete": { + "title": "Semua selesai!", + "description": "Anda telah menyelesaikan proses persediaan, mari mulakan!" + }, + "buttons": { + "getStarted": "Mulakan", + "next": "Langkah seterusnya", + "back": "kembali" + }, + "page": { + "title": "Selamat datang ke DeepChat Agent", + "description": "Sambung kepada pembekal perkhidmatan model untuk bermula", + "guide": { + "title": "kemajuan but", + "description": "Langkah semasa: {step}", + "or": "atau", + "coreProgress": "Kemajuan konfigurasi teras", + "optional": "Langkah seterusnya pilihan", + "actions": { + "continueSetup": "Teruskan konfigurasi", + "goToChat": "Pergi ke sembang" + }, + "steps": { + "provider": "pembekal perkhidmatan", + "first-chat": "sembang pertama", + "switch-model": "Tukar model", + "mcp": "MCP", + "skills": "Kemahiran", + "plugins": "pemalam" + } + }, + "browseProviders": "Semak imbas semua pembekal...", + "connectAgent": "Atau sambungkan Agent", + "acpTitle": "Menyediakan ACP Agent", + "acpDescription": "Claude Code, Codex, Kimi atau Agent anda sendiri", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "DeepSeek", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "OpenRouter" + }, + "importProviders": "Import dari Agent lain" + }, + "agentPage": { + "title": "Pilih Agent untuk mula mencipta", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "Pengurusan DeepChat Agent" + } +} diff --git a/src/renderer/src/i18n/pl-PL/about.json b/src/renderer/src/i18n/pl-PL/about.json new file mode 100644 index 000000000..b2787eef1 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat to wieloplatformowy klient AI, którego zadaniem jest udostępnianie sztucznej inteligencji większej liczbie osób.", + "website": "Odwiedź naszą stronę internetową", + "deviceInfo": { + "title": "Informacje o urządzeniu", + "platform": "Platforma", + "arch": "Architektura", + "cpuModel": "Model procesora", + "totalMemory": "Całkowita pamięć", + "osVersion": "Wersja systemu" + }, + "disclaimerButton": "Zastrzeżenie", + "feedbackButton": "Informacje zwrotne", + "disclaimerTitle": "Warunki użytkowania", + "checkUpdateButton": "Sprawdź aktualizacje", + "mockUpdateButton": "Próbna pobrana aktualizacja", + "clearMockUpdateButton": "Wyczyść próbną aktualizację", + "mockOnboardingButton": "Próbny przewodnik po pierwszym uruchomieniu", + "updateChannel": "Aktualizuj kanał", + "stableChannel": "Stabilny", + "betaChannel": "Beta" +} diff --git a/src/renderer/src/i18n/pl-PL/artifacts.json b/src/renderer/src/i18n/pl-PL/artifacts.json new file mode 100644 index 000000000..e3c019194 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Kliknij, aby otworzyć", + "codeSnippet": "Fragment kodu", + "function": "Funkcja", + "class": "Klasa", + "reactComponent": "Komponent reakcji", + "moduleImport": "Import modułu", + "variableDefinition": "Definicja zmiennej {name}", + "markdownDocument": "Dokument Markdown", + "htmlDocument": "Dokument HTML", + "svgImage": "Obraz SVG", + "flowchart": "Schemat blokowy", + "sequenceDiagram": "Schemat sekwencji", + "classDiagram": "Schemat klas", + "stateDiagram": "Diagram stanu", + "erDiagram": "Schemat ER", + "ganttChart": "Wykres Gantta", + "pieChart": "Wykres kołowy", + "mermaidDiagram": "Schemat syreny", + "flowchartOf": "Schemat blokowy {name}", + "sequenceDiagramBetween": "Diagram sekwencji pomiędzy {participants}", + "classDiagramOf": "Diagram klas {name}", + "stateDiagramOf": "Diagram stanu {name}", + "erDiagramOf": "Schemat ER {name}", + "pieChartOf": "Wykres kołowy {name}", + "unknownDocument": "Nieznany dokument", + "preview": "Podgląd", + "code": "Kod", + "export": "Eksportuj", + "htmlPreviewTitle": "Podgląd HTML", + "svgPreviewTitle": "Podgląd SVG", + "copy": "Kopiuj", + "copySuccess": "Skopiowano", + "copySuccessDesc": "Treść skopiowana do schowka", + "copyFailed": "Kopiowanie nie powiodło się", + "copyFailedDesc": "Nie udało się skopiować zawartości do schowka", + "copyAsImage": "Skopiuj jako obraz", + "copyImageSuccessDesc": "Obraz skopiowany do schowka", + "copyImageFailedDesc": "Nie można skopiować obrazu do schowka.", + "desktop": "Pulpit", + "tablet": "Tablet", + "mobile": "Mobilny", + "responsive": "Responsywny", + "width": "Szerokość", + "height": "Wysokość", + "sanitizingSvg": "Odkażanie zawartości SVG...", + "svgSanitizationFailed": "Treść SVG nie przeszła weryfikacji bezpieczeństwa", + "noSvgContent": "Brak dostępnych treści SVG", + "mermaid": { + "renderError": "Renderowanie nie powiodło się: {message}" + } +} diff --git a/src/renderer/src/i18n/pl-PL/chat.json b/src/renderer/src/i18n/pl-PL/chat.json new file mode 100644 index 000000000..0f5f52ae6 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "Zapytaj DeepChat o cokolwiek, {'@'} o wzmiankę o plikach, / o polecenia", + "fileArea": "Obszar pliku", + "inputArea": "Obszar wejściowy", + "functionSwitch": "Przełącznik funkcji", + "attach": "Dołącz", + "voiceInput": "Nagranie lokalne", + "voiceInputStop": "Zatrzymaj nagrywanie lokalne", + "voiceRecognitionUnsupportedTitle": "Nagrywanie lokalne nie jest tutaj dostępne", + "voiceRecognitionUnsupportedDescription": "Użyj tej funkcji w przeglądarce lub środowisku komputerowym obsługującym nagrywanie za pomocą mikrofonu.", + "voiceRecognitionPermissionDeniedTitle": "Dostęp do mikrofonu jest niedostępny", + "voiceRecognitionPermissionDeniedDescription": "Zezwól DeepChat na korzystanie z mikrofonu i spróbuj ponownie.", + "voiceRecognitionErrorTitle": "Transkrypcja dźwięku nie powiodła się", + "voiceRecognitionErrorDescription": "Nie można dokończyć transkrypcji audio. Spróbuj ponownie później.", + "send": "Wyślij", + "steer": "Steruj", + "queue": "Kolejka", + "stop": "Zatrzymaj się", + "fileSelect": "Wybierz opcję Plik", + "pasteFiles": "Wklej pliki ze schowka", + "dropFiles": "Upuść pliki tutaj", + "promptFilesAdded": "Dodano pliki Prompt", + "promptFilesAddedDesc": "Pomyślnie dodano pliki {count}", + "promptFilesError": "Błąd przetwarzania pliku", + "promptFilesErrorDesc": "Nie udało się przetworzyć plików {count}", + "historyPlaceholder": "(Naciśnij Tab, aby autouzupełniać)", + "rateLimitQueue": "Kolejka {count}", + "rateLimitWait": "Poczekaj {seconds}", + "rateLimitQueueTooltip": "Żądania {count} w kolejce, interwał {interval}", + "rateLimitReadyTooltip": "Gotowy do wysłania, interwał {interval}s", + "rateLimitWaitingTooltip": "Poczekaj jeszcze {seconds}, interwał {interval}", + "acpWorkdir": "ACP Workdir", + "acpWorkdirTooltip": "Ustaw katalog roboczy ACP", + "acpWorkdirSelect": "Wybierz folder, który będzie używany jako katalog roboczy ACP", + "acpWorkdirCurrent": "Bieżący katalog roboczy: {path}", + "acpMode": "Tryb", + "acpModeTooltip": "Bieżący tryb: {mode}", + "agentWorkspaceTooltip": "Ustaw katalog obszaru roboczego Agent", + "agentWorkspaceSelect": "Wybierz folder, który będzie używany jako obszar roboczy", + "agentWorkspaceCurrent": "Bieżący obszar roboczy: {path}", + "workspaceUnavailableTooltip": "Katalog nie istnieje lub nie można uzyskać do niego dostępu: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "Włączono MCP", + "empty": "Brak włączonych usług", + "openSettings": "Otwórz ustawienia MCP" + }, + "tools": { + "badge": "Narzędzia", + "title": "Narzędzia", + "mcpSection": "MCP", + "pluginSection": "Wtyczki", + "builtinSection": "Wbudowane narzędzia", + "loading": "Ładowanie narzędzi...", + "builtinEmpty": "Brak dostępnych wbudowanych narzędzi", + "groups": { + "agentFilesystem": "System plików Agent", + "agentCore": "Rdzeń Agent", + "agentImageGeneration": "Generowanie obrazu", + "agentSkills": "Agent Skills", + "deepchatSettings": "Ustawienia DeepChat", + "yobrowser": "Twoja przeglądarka" + } + }, + "fileUploadFailed": "Załącznik nie powiódł się", + "fileUploadFailedDesc": "Nie można przetworzyć plików {count}: {names}", + "fileUploadFailedMore": " i {count} więcej", + "unnamedFile": "nienazwany plik", + "audioInputUnsupportedTitle": "Obecny model nie obsługuje załączników audio", + "audioInputUnsupportedDescription": "Model {model} nie obsługuje wejścia audio. Zignorowano załączniki audio {count}." + }, + "pendingInput": { + "steer": "Steruj", + "queueCount": "W kolejce {count}/{max}", + "resumeQueue": "Wznów wysyłanie", + "toSteer": "Steruj", + "locked": "Zablokowane", + "reorder": "Zmień kolejność", + "files": "Pliki {count}", + "attachmentsOnly": "Załączniki {count}", + "empty": "Pusta wiadomość", + "limitReached": "Pas oczekujących jest pełny (maks. {max})." + }, + "features": { + "webSearch": "Wyszukiwanie w Internecie", + "thoughtForSeconds": "Pomyślałem o {seconds}", + "thoughtForSecondsLoading": "Myślenie za {seconds}...", + "artifactThinking": "Myślenie artefaktowe", + "modeChanged": "Tryb zmieniony na: {mode}" + }, + "search": { + "results": "Znaleziono strony internetowe {0}", + "searching": "Wyszukiwanie...", + "title": "Wyniki wyszukiwania", + "description": "Znaleziono wyniki powiązane z {0}", + "optimizing": "Optymalizacja zapytania wyszukiwania...", + "reading": "Wyszukiwanie i czytanie stron internetowych...", + "error": "Wyszukiwanie nie powiodło się" + }, + "messages": { + "thinking": "Myśląc...", + "rateLimitWaiting": "Osiągnięto limit stawek, czekam w kolejce...", + "rateLimitCompactLoading": "Stawka ograniczona dla {seconds}...", + "rateLimitTitle": "Limit stawki aktywny", + "rateLimitQueue": "Pozycja w kolejce", + "rateLimitEstimated": "Szacowany czas oczekiwania", + "rateLimitQuickSettings": "Dostosuj limit", + "rateLimitSwitchProvider": "Zmień dostawcę", + "rateLimitImmediately": "Teraz", + "rateLimitSeconds": "s", + "rateLimitMinutes": "m" + }, + "compaction": { + "compacting": "Zagęszczanie kontekstu...", + "compacted": "Kontekst został zagęszczony", + "commandDescription": "Zwarty kontekst rozmowy", + "noopTitle": "Brak kontekstu do kompaktowania", + "noopDescription": "Nie ma jeszcze nowej historii konwersacji, którą można by skompaktować.", + "failedTitle": "Zagęszczanie nie powiodło się" + }, + "rateLimit": { + "queueTooltip": "Żądania {count} w kolejce, interwał {interval}", + "readyTooltip": "Gotowy do wysłania, interwał {interval}s", + "waitingTooltip": "Poczekaj jeszcze {seconds}, interwał {interval}" + }, + "notify": { + "generationComplete": "Generacja została zakończona", + "generationError": "Generacja nie powiodła się" + }, + "toolCall": { + "title": "Wezwanie narzędzia", + "calling": "Trwa wywoływanie narzędzia", + "response": "Odpowiedź narzędzia", + "end": "Zakończono wywołanie narzędzia", + "error": "Błąd wywołania narzędzia", + "clickToView": "Kliknij, aby zobaczyć szczegóły", + "functionName": "Funkcja", + "params": "Parametry", + "responseData": "Dane odpowiedzi", + "subagents": { + "summary": "{mode} · {count} subagent", + "unnamedTask": "Nienazwane zadanie", + "mode": { + "parallel": "Równolegle", + "chain": "Łańcuch" + }, + "status": { + "queued": "W kolejce", + "running": "Bieganie", + "completed": "Ukończono", + "error": "Błąd", + "cancelled": "Anulowano", + "waiting_permission": "Czekam na pozwolenie", + "waiting_question": "Oczekiwanie na wprowadzenie" + } + } + }, + "mode": { + "current": "Bieżący tryb: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Powrót do Rodzica", + "share": "Udostępnij", + "more": "Więcej" + }, + "subagents": { + "label": "Subagenci" + }, + "advancedSettings": { + "button": "Zaawansowane", + "title": "Ustawienia zaawansowane", + "closeHint": "Esc, aby zamknąć", + "systemPrompt": "System Prompt", + "systemPromptPlaceholder": "Wybierz ustawienie wstępne", + "temperature": "Temperatura", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ustala temperaturę na {enabled}, gdy myślenie jest włączone, i {disabled}, gdy jest wyłączone.", + "contextLength": "Długość kontekstu", + "maxTokens": "Maks. Tokens", + "thinkingBudget": "Myślący budżet", + "verbosity": "Szczegółowość", + "forceInterleavedThinkingCompat": "Przeplatane myślenie", + "forceInterleavedThinkingCompatDescription": "Kontroluje, czy ta sesja obsługuje komunikaty dotyczące rozumowania i wywołań narzędzi za pomocą myślenia przeplatanego.", + "verbosityPlaceholder": "Wybierz szczegółowość", + "currentCustomPrompt": "Aktualny zwyczaj", + "useDefault": "Użyj domyślnego", + "decreaseValue": "Zmniejsz {label}", + "increaseValue": "Zwiększ {label}", + "toggleValue": "Przełącz {label}", + "validation": { + "finiteNumber": "Musi to być liczba skończona", + "nonNegativeInteger": "Musi być nieujemną liczbą całkowitą", + "contextLengthAtLeastMaxTokens": "Musi być większy lub równy Max Tokens", + "maxTokensWithinContextLength": "Musi być mniejsza lub równa Długość kontekstu" + } + }, + "modelPicker": { + "empty": "Nie znaleziono żadnych modeli", + "audioInputSupported": "Obsługiwane wejście audio" + }, + "audio": { + "play": "Zagraj", + "pause": "Pauza" + }, + "call": { + "title": "Wywołanie Voice.ai", + "description": "Kliknij, aby połączyć się z agentem głosowym Voice.ai, mów po nawiązaniu połączenia.", + "start": "Rozpocznij połączenie głosowe", + "stop": "Zakończ połączenie", + "end": "Rozłącz się" + }, + "skills": { + "indicator": { + "active": "Umiejętności przypięte {count}", + "none": "Brak przypiętych umiejętności" + }, + "panel": { + "title": "Przypięty Skills", + "manage": "Zarządzaj", + "empty": "Nie zainstalowano żadnych umiejętności" + } + }, + "workspace": { + "title": "Obszar roboczy", + "collapse": "Zwiń", + "sections": { + "files": "Pliki", + "git": "Git", + "artifacts": "Artefakty", + "subagents": "Subagenci" + }, + "plan": { + "section": "Planuj", + "empty": "Nie ma jeszcze żadnych zadań", + "itemAriaLabel": "{status}: {step}", + "status": { + "pending": "Oczekujące", + "in_progress": "W toku", + "completed": "Ukończono", + "failed": "Nie udało się", + "skipped": "Pominięte" + } + }, + "files": { + "section": "Pliki", + "empty": "Brak plików", + "loading": "Ładowanie plików...", + "noWorkspace": { + "title": "Brak obszaru roboczego", + "description": "Wybierz lub przeciągnij folder, aby ustawić obszar roboczy", + "button": "Wybierz folder" + }, + "contextMenu": { + "openFile": "Otwórz plik", + "revealInFolder": "Pokaż w menedżerze plików", + "insertPath": "Wstaw do wejścia" + } + }, + "git": { + "empty": "Brak dostępnych różnic", + "clean": "Czyste drzewo robocze", + "staged": "Inscenizacja", + "unstaged": "Niescenizowane" + }, + "subagents": { + "empty": "Nie ma jeszcze sesji dziecięcych", + "self": "Ja", + "status": { + "working": "Bieganie", + "error": "Błąd", + "idle": "Bezczynny" + } + }, + "browser": { + "section": "Przeglądarka", + "empty": "Nie ma jeszcze zakładek" + }, + "terminal": { + "section": "Terminal", + "empty": "Nie ma jeszcze wyników", + "contextMenu": { + "terminate": "Zakończ", + "delete": "Usuń rekord", + "expand": "Rozwiń", + "collapse": "Zwiń" + }, + "output": { + "truncated": "[obcięte]" + }, + "noOutput": "Brak wyjścia", + "status": { + "running": "Bieganie", + "completed": "Sukces", + "failed": "Nie udało się", + "timed_out": "Upłynął limit czasu", + "aborted": "Przerwano" + } + } + }, + "newThread": { + "title": "Buduj i odkrywaj" + }, + "floatingWidget": { + "title": "Przegląd zadań", + "collapse": "Zwiń sesje pływające", + "empty": "Nie ma jeszcze sesji agenta", + "executing": "aktywny", + "sessionCount": "Sesje {count}", + "untitled": "Nowy czat", + "status": { + "inProgress": "W toku", + "done": "Gotowe", + "error": "Błąd" + } + }, + "permissionMode": { + "default": "Domyślne uprawnienia", + "fullAccess": "Pełny dostęp" + }, + "sidebar": { + "allAgents": "Wszystkie Agents", + "expandSidebar": "Rozwiń pasek boczny", + "collapseSidebar": "Zwiń pasek boczny", + "remoteControlDisabled": "Niepełnosprawny", + "remoteControlStatus": { + "disabled": "Zdalne sterowanie wyłączone", + "stopped": "Zdalne sterowanie zatrzymane", + "starting": "Uruchamianie zdalne", + "running": "Zdalne sterowanie działa", + "backoff": "Ponawianie próby zdalnego sterowania", + "error": "Błąd pilota" + }, + "groupByDate": "Grupuj według daty", + "groupByProject": "Grupuj według projektu", + "pinned": "Przypięty", + "emptyTitle": "Nie ma jeszcze żadnych rozmów", + "emptyDescription": "Aby rozpocząć, rozpocznij nowy czat", + "searchPlaceholder": "Wyszukaj czaty", + "searchAriaLabel": "Wyszukaj czaty", + "searchEmptyTitle": "Brak pasujących rozmów", + "searchEmptyDescription": "Wypróbuj inne słowo kluczowe w tytule" + }, + "spotlight": { + "placeholder": "Przeszukuj czaty, agentów, ustawienia, działania…", + "searching": "Wyszukiwanie…", + "emptyTitle": "Brak pasujących wyników", + "emptyDescription": "Wypróbuj inne słowo kluczowe lub otwórz ostatnią sesję.", + "hints": "↑↓ przesuń · Enter otwórz · Esc zamknij · Home/End skok", + "kind": { + "session": "Sesja", + "message": "Wiadomość", + "agent": "Agent", + "setting": "Ustawienie", + "action": "Akcja" + } + }, + "inlineSearch": { + "placeholder": "Wyszukaj w rozmowie", + "ariaLabel": "Wyszukaj w bieżącej rozmowie", + "previous": "Poprzedni mecz", + "next": "Następny mecz", + "close": "Zamknij wyszukiwanie" + }, + "onboarding": { + "agentSwitch": { + "title": "Przełącz na DeepChat Agent", + "description": "Przed rozmową odłącz się od ACP i wróć do wbudowanego przepływu DeepChat.", + "caption": "Aby kontynuować, kliknij podświetlony przycisk agenta na pasku bocznym." + }, + "switchModel": { + "description": "Wybierz model, którego chcesz użyć do pierwszej rozmowy DeepChat.", + "caption": "Skorzystaj z podświetlonego przełącznika modeli i wybierz dowolny dostępny model." + }, + "firstChat": { + "description": "Wszystko jest gotowe. Wpisz tutaj swoją pierwszą wiadomość, aby zakończyć proces wdrażania.", + "caption": "Światło reflektora pozostaje w polu wprowadzania, dopóki nie wyślesz pierwszej wiadomości." + } + } +} diff --git a/src/renderer/src/i18n/pl-PL/common.json b/src/renderer/src/i18n/pl-PL/common.json new file mode 100644 index 000000000..9c5ea6ca7 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/common.json @@ -0,0 +1,128 @@ +{ + "enabled": "Włączone", + "disabled": "Niepełnosprawny", + "loading": "Ładowanie...", + "copySuccess": "Skopiuj sukces", + "copySuccessDesc": "Treść skopiowana do schowka", + "copyImageSuccess": "Skopiuj sukces", + "copyImageSuccessDesc": "Obraz skopiowany do schowka", + "copyFailed": "Kopiowanie nie powiodło się", + "copyFailedDesc": "Nie udało się skopiować zawartości do schowka", + "copyCode": "Skopiuj kod", + "copy": "Kopiuj", + "copied": "Skopiowano", + "paste": "Wklej", + "export": "Eksportuj", + "newChat": "Nowy czat", + "newTopic": "Nowy temat", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "close": "Zamknij", + "open": "Otwórz", + "next": "Następny", + "back": "Powrót", + "error": { + "requestFailed": "Żądanie nie powiodło się...", + "createChatFailed": "Nie udało się utworzyć czatu", + "selectChatFailed": "Nie udało się wybrać czatu", + "renameChatFailed": "Nie udało się zmienić nazwy czatu", + "deleteChatFailed": "Nie udało się usunąć czatu", + "cleanMessagesFailed": "Nie udało się wyczyścić wiadomości", + "userCanceledGeneration": "Użytkownik anulował generowanie", + "sessionInterrupted": "Sesja została nieoczekiwanie przerwana, generowanie jest niekompletne", + "noModelResponse": "Model nie zwrócił żadnej treści, mógł upłynąć limit czasu", + "invalidJson": "Nieprawidłowy format JSON", + "maximumToolCallsReached": "Osiągnięto maksymalną liczbę wywołań narzędzi", + "causeOfError": "Możliwe przyczyny błędu:", + "error400": "Złe żądanie, prawdopodobnie problem z parametrem lub kompatybilnością", + "error401": "Uwierzytelnianie nie powiodło się, prawdopodobnie niepoprawny API Key lub domena", + "error403": "Zakaz dostępu do modelu, prawdopodobnie niewystarczające saldo lub brak pozwolenia", + "error404": "Nie znaleziono żądanego URL, prawdopodobnie nieprawidłowa nazwa domeny lub modelu", + "error429": "Zbyt wiele żądań, prawdopodobnie stawka jest ograniczona przez usługę", + "error500": "Błąd serwera, usługa może być niestabilna. Spróbuj ponownie później", + "error502": "Błąd bramy. Usługa może być niestabilna. Spróbuj ponownie później", + "error503": "Usługa niedostępna. Usługa może być niestabilna. Spróbuj ponownie później", + "error504": "Poproś o przekroczenie limitu czasu. Usługa może być niestabilna lub mogą wystąpić problemy z siecią. Sprawdź ustawienia serwera proxy i spróbuj ponownie", + "operationFailed": "Operacja nie powiodła się", + "invalidQuestionRequest": "Nieprawidłowe żądanie pytania" + }, + "resetDataConfirmTitle": "Zresetować wszystkie dane?", + "resetDataConfirmDescription": "Spowoduje to zresetowanie wszystkich danych do ustawień domyślnych. Tej akcji nie można cofnąć.", + "proxyMode": "Tryb proxy", + "proxyModeSelect": "Wybierz Tryb proxy", + "proxyModeSystem": "Serwer proxy systemu", + "proxyModeNone": "Brak serwera proxy", + "proxyModeCustom": "Niestandardowy serwer proxy", + "customProxyUrl": "Niestandardowy serwer proxy URL", + "customProxyUrlPlaceholder": "Przykład: http://127.0.0.1:7890", + "invalidProxyUrl": "Nieprawidłowy serwer proxy URL, wprowadź prawidłowy http/https URL", + "disclaimer": "Zastrzeżenie", + "resetData": "Zresetuj dane", + "searchAssistantModel": "Modelka Asystenta", + "searchEngine": "Wyszukiwarka", + "searchEngineSelect": "Wybierz wyszukiwarkę", + "searchPreview": "Podgląd wyszukiwania", + "language": "język", + "languageSelect": "Wybierz język", + "selectModel": "Wybierz model", + "title": "Ustawienia ogólne", + "languageSystem": "Postępuj zgodnie z systemem", + "watermarkTip": "Wygenerowane przez sztuczną inteligencję", + "collapse": "Zwiń", + "expand": "Rozwiń", + "image": "obraz", + "noContent": "Brak treści", + "preview": "Podgląd", + "source": "Źródło", + "more": "Więcej", + "decrease": "Zmniejsz", + "increase": "Zwiększ", + "fontSmaller": "Mniejsza czcionka", + "fontReset": "Zresetuj czcionkę", + "fontLarger": "Większa czcionka", + "zoomIn": "Powiększ", + "zoomOut": "Pomniejsz", + "resetZoom": "Zresetuj powiększenie", + "add": "Dodaj", + "reset": "Zresetuj", + "format": "Sformatuj", + "edit": "Edytuj", + "delete": "Usuń", + "save": "Zapisz", + "clear": "Jasne", + "saved": "Zapisano", + "unknownError": "Nieznany błąd", + "testing": "Testowanie w toku", + "saving": "Oszczędzanie", + "scrollLeft": "Przewiń w lewo", + "scrollRight": "Przewiń w prawo", + "history": "Historia", + "minimize": "Minimalizuj", + "maximize": "Maksymalizuj", + "restore": "Przywróć", + "browser": { + "back": "Powrót", + "forward": "Naprzód", + "reload": "Załaduj ponownie", + "addressLabel": "Pasek adresu", + "addressPlaceholder": "Wprowadź URL", + "enterUrlToStart": "Wprowadź URL, aby rozpocząć przeglądanie", + "enterUrlDescription": "Wpisz URL w pasku adresu powyżej, aby odwiedzić witrynę internetową", + "name": "Twoja przeglądarka" + }, + "size": { + "bytes": "Bajty {count}" + }, + "time": { + "today": "Dzisiaj", + "yesterday": "Wczoraj", + "lastWeek": "Ostatni tydzień", + "older": "Starszy" + }, + "project": { + "select": "Wybierz projekt", + "none": "Brak projektu", + "recent": "Najnowsze projekty", + "openFolder": "Otwórz folder..." + } +} diff --git a/src/renderer/src/i18n/pl-PL/components.json b/src/renderer/src/i18n/pl-PL/components.json new file mode 100644 index 000000000..a5eb59d4f --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Wyszukaj emotikony", + "smileys": "Buźki i emocje", + "people": "Ludzie i ciało", + "animals": "Zwierzęta i przyroda", + "food": "Jedzenie i napoje", + "travel": "Podróże i miejsca", + "activities": "Działania", + "objects": "Obiekty", + "symbols": "Symbole", + "flags": "Flagi" + }, + "messageBlockAction": { + "continue": "Kontynuuj", + "continued": "Ciąg dalszy" + }, + "messageBlockPermissionRequest": { + "title": "Wymagane pozwolenie", + "allow": "Zezwól", + "allowOnce": "Zezwól raz", + "allowForSession": "Zezwól na sesję", + "allowOnceTooltip": "Wykonaj to polecenie raz, bez zapisywania decyzji.", + "allowForSessionTooltip": "Zapamiętaj to polecenie tylko dla tej rozmowy.", + "deny": "Odmów", + "rememberChoice": "Zapamiętaj ten wybór", + "granted": "Pozwolenie udzielone", + "denied": "Odmowa pozwolenia", + "riskLabel": "Ryzyko", + "type": { + "read": "Przeczytaj Dostęp", + "write": "Napisz dostęp", + "all": "Pełny dostęp", + "command": "Wykonaj polecenie" + }, + "description": { + "read": "Zezwolić „{toolName}” z „{serverName}” na wykonanie operacji odczytu?", + "write": "Zezwolić „{toolName}” z „{serverName}” na wykonywanie operacji zapisu?", + "all": "Zezwolić „{toolName}” z „{serverName}” na wykonywanie operacji odczytu i zapisu?", + "command": "Wykonaj polecenie: {command}", + "commandWithRisk": "Wykonaj polecenie: {command}\n\nPoziom ryzyka: {riskLevel}\n\nSugestia: {suggestion}" + }, + "riskLevel": { + "low": "Niski", + "medium": "Średni", + "high": "Wysoka", + "critical": "Krytyczny" + }, + "suggestion": { + "low": "Jest to polecenie tylko do odczytu, które ma minimalny wpływ.", + "medium": "To polecenie może zmienić stan lub zainstalować zależności. Przejrzyj przed uruchomieniem.", + "high": "To polecenie modyfikuje pliki lub stan systemu. Postępuj ostrożnie.", + "critical": "To polecenie może być destrukcyjne lub umożliwiać dostęp do sieci zewnętrznych. Zweryfikuj intencję." + } + }, + "promptParamsDialog": { + "title": "Ustawienia parametrów {name}", + "description": "Proszę wypełnić poniższe parametry. Pola oznaczone * są wymagane.", + "required": "To pole jest wymagane." + }, + "messageBlockQuestionRequest": { + "title": "Pytanie", + "send": "Wyślij", + "reject": "Odrzuć", + "selected": "Wybrane", + "rejected": "Odrzucony", + "customPlaceholder": "Wpisz swoją odpowiedź...", + "answerLabel": "Odpowiedź" + } +} diff --git a/src/renderer/src/i18n/pl-PL/contextMenu.json b/src/renderer/src/i18n/pl-PL/contextMenu.json new file mode 100644 index 000000000..399ea574c --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "Przetłumacz", + "original": "Oryginał", + "translated": "Tłumaczenie", + "error": "Tłumaczenie nie powiodło się" + }, + "askAI": { + "title": "Zapytaj AI", + "question": "Pytanie", + "answer": "Odpowiedź", + "error": "Odpowiedź AI nie powiodła się" + }, + "copy": "Kopiuj", + "paste": "Wklej", + "cut": "Cięcie" +} diff --git a/src/renderer/src/i18n/pl-PL/dialog.json b/src/renderer/src/i18n/pl-PL/dialog.json new file mode 100644 index 000000000..715708ed4 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "Anuluj", + "confirm": "Potwierdź", + "close": "Zamknij", + "ok": "OK", + "delete": { + "title": "Czy na pewno chcesz usunąć tę rozmowę?", + "description": "Tej akcji nie można cofnąć.", + "confirm": "Usuń" + }, + "rename": { + "title": "Zmień nazwę rozmowy", + "description": "Wprowadź nową nazwę rozmowy." + }, + "cleanMessages": { + "title": "Wyczyść wszystkie wiadomości", + "description": "Spowoduje to usunięcie wszystkich wiadomości i plików w tej rozmowie. Czy na pewno chcesz kontynuować?", + "confirm": "Jasne" + }, + "fork": { + "title": "Utwórz oddział", + "description": "Spowoduje to skopiowanie wszystkich wiadomości z pierwszej wiadomości do bieżącej do nowej rozmowy, w której będziesz mógł kontynuować dialog.", + "confirm": "Utwórz oddział", + "tag": "Oddział" + }, + "error": { + "title": "Błąd" + }, + "mutualExclusive": { + "title": { + "reasoning": "Potwierdź opcję Włącz rozumowanie", + "functionCall": "Potwierdź opcję Włącz wywoływanie funkcji" + }, + "message": { + "reasoning": "Włączenie rozumowania automatycznie wyłączy wywoływanie funkcji. Jest to ograniczenie modeli DeepSeek-V3.1 i obie funkcje nie mogą być używane jednocześnie. Kontynuować?", + "functionCall": "Włączenie wywoływania funkcji automatycznie wyłączy wnioskowanie. Jest to ograniczenie modeli DeepSeek-V3.1 i obie funkcje nie mogą być używane jednocześnie. Kontynuować?" + }, + "warningText": { + "reasoning": "Uwaga: włączenie wnioskowania automatycznie wyłączy wywoływanie funkcji, co jest wymogiem modeli DeepSeek-V3.1.", + "functionCall": "Uwaga: włączenie wywoływania funkcji automatycznie wyłączy wnioskowanie, co jest wymogiem modeli DeepSeek-V3.1." + }, + "confirmEnable": "Potwierdź opcję Włącz" + } +} diff --git a/src/renderer/src/i18n/pl-PL/image.json b/src/renderer/src/i18n/pl-PL/image.json new file mode 100644 index 000000000..129052736 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "Nie udało się załadować obrazu", + "loading": "Ładowanie obrazu...", + "preview": "Podgląd obrazu", + "save": "Zapisz obraz", + "saveAs": "Zapisz obraz jako...", + "saveSuccess": "Obraz został zapisany", + "saveFailed": "Nie udało się zapisać obrazu" +} diff --git a/src/renderer/src/i18n/pl-PL/index.ts b/src/renderer/src/i18n/pl-PL/index.ts new file mode 100644 index 000000000..fe94b80b8 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Individual top-level keys +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Qwen Model', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + 'DeepChat to jedynie narzędzie pomocnicze, które porządkuje i podsumowuje publiczne dane zwracane przez wyszukiwarki, gdy użytkownicy aktywnie inicjują wyszukiwania, pomagając użytkownikom wygodniej przeglądać i rozumieć wyniki wyszukiwania.\\n1. Korzystanie z danych publicznych\\nTo oprogramowanie przetwarza wyłącznie dane, które są publicznie dostępne w docelowych witrynach internetowych lub wyszukiwarkach i nie wymagają logowania. Przed użyciem zapoznaj się z warunkami korzystania z usługi docelowej witryny lub wyszukiwarki i przestrzegaj ich, aby upewnić się, że korzystanie z nich jest legalne i zgodne.\\n2. Dokładność informacji i odpowiedzialność\\nTreść uporządkowana i wygenerowana przez to oprogramowanie ma wyłącznie charakter informacyjny i nie stanowi żadnej formy porady prawnej, biznesowej ani innej. Twórcy nie udzielają żadnych gwarancji dotyczących dokładności, kompletności, aktualności lub legalności wyników wyszukiwania, a wszelkie konsekwencje wynikające z korzystania z tego oprogramowania obciążają wyłącznie użytkownika.\\n3. Klauzula wyłączenia odpowiedzialności\\nTo oprogramowanie jest dostarczane „tak jak jest”, a programiści nie przyjmują żadnej wyraźnej ani dorozumianej gwarancji ani odpowiedzialności za jego działanie, stabilność lub możliwość zastosowania. W procesie korzystania z tego oprogramowania programiści nie ponoszą żadnej odpowiedzialności za jakiekolwiek spory, straty lub zobowiązania prawne wynikające z naruszeń odpowiednich przepisów ustawowych i wykonawczych lub zasad witryny docelowej.\\n4. Samodyscyplina użytkownika\\nPrzed użyciem tego oprogramowania użytkownicy powinni w pełni zrozumieć i potwierdzić, że ich użycie nie naruszy praw własności intelektualnej, tajemnic handlowych ani innych uzasadnionych praw innych osób. Wszelkie spory prawne i konsekwencje wynikające z niewłaściwego korzystania z tego oprogramowania przez użytkowników stanowią wyłączną odpowiedzialność użytkowników.\\nKorzystanie z tego oprogramowania oznacza, że ​​użytkownik przeczytał, zrozumiał i zgodził się na wszystkie warunki niniejszego zastrzeżenia. W przypadku pytań prosimy o konsultację z profesjonalnym doradcą prawnym.' +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/pl-PL/mcp.json b/src/renderer/src/i18n/pl-PL/mcp.json new file mode 100644 index 000000000..a5499a8af --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/mcp.json @@ -0,0 +1,307 @@ +{ + "tools": { + "searchPlaceholder": "Narzędzia wyszukiwania...", + "noToolsAvailable": "Brak dostępnych narzędzi", + "selectToolToDebug": "Wybierz narzędzie do debugowania", + "dialogDescription": "Narzędzia do debugowania i testowania dostarczane przez serwery MCP", + "toolsCount": "Narzędzia {count}", + "availableTools": "Dostępne narzędzia", + "toolList": "Lista narzędzi", + "functionDescription": "Opis funkcji", + "invalidJson": "Nieprawidłowy format JSON", + "inputHint": "Proszę wprowadzić parametry w formacie JSON", + "required": "Wymagane", + "noDescription": "Brak opisu", + "input": "Argumenty", + "path": "Ścieżka", + "pathPlaceholder": "Wprowadź ścieżkę pliku", + "searchPattern": "Szukaj wzoru", + "searchPatternPlaceholder": "Wprowadź wyrażenie regularne", + "filePattern": "Wzór pliku", + "filePatternPlaceholder": "Podaj wzór pliku, np.: *.md", + "executeButton": "Wykonaj narzędzie", + "resultTitle": "Wynik", + "runningTool": "Narzędzie do wykonywania...", + "loading": "Ładowanie...", + "error": "Ładowanie nie powiodło się", + "available": "Dostępne {count}", + "none": "Brak dostępnych narzędzi", + "title": "Narzędzia MCP", + "description": "Narzędzia dostarczane przez serwer MCP", + "loadError": "Nie udało się załadować narzędzi", + "parameters": "Parametry", + "refresh": "Odśwież", + "disabled": "MCP jest wyłączony", + "enableToUse": "Aby móc korzystać z narzędzi, włącz MCP", + "enabled": "Włącz MCP", + "enabledDescription": "Włącz funkcjonalność MCP, aby używać wywołań narzędzi", + "acpManagedHint": "Tryb ACP: Dostęp MCP jest zarządzany przez ustawienia ACP Agent (tutaj tylko do odczytu).", + "acpServersSelected": "Wybrano {count} MCP", + "acpServersNone": "Nie skonfigurowano serwerów MCP ", + "empty": "Pusty", + "jsonInputPlaceholder": "Wprowadź parametry w formacie JSON", + "type": "Wpisz", + "annotations": "Adnotacje", + "invalidJsonFormat": "Format JSON jest nieprawidłowy", + "allowedValues": "Dozwolone wartości", + "arrayItemValues": "Wartości elementów tablicy" + }, + "addServer": "Dodaj serwer", + "addServerDialog": { + "description": "Skonfiguruj nowy serwer MCP", + "title": "Dodaj serwer" + }, + "confirmDelete": { + "cancel": "Anuluj", + "confirm": "Usuń", + "description": "Czy na pewno chcesz usunąć serwer {name}? \nTej operacji nie można anulować.", + "title": "Potwierdź usunięcie" + }, + "confirmRemoveServer": "Czy na pewno chcesz usunąć serwer {name}? \nTej operacji nie można anulować.", + "default": "domyślny", + "deleteServer": "Usuń serwer", + "description": "Zarządzaj i konfiguruj serwery i narzędzia MCP (Model Context Protocol).", + "editServer": "Edytuj serwer", + "editServerDialog": { + "description": "Edytuj konfigurację serwera MCP", + "title": "Edytuj serwer" + }, + "enableToAccess": "Włącz MCP, aby uzyskać dostęp do opcji konfiguracji.", + "enabledDescription": "Po włączeniu wszystkie włączone usługi uruchamiają się automatycznie.", + "enabledTitle": "Włącz MCP", + "isDefault": "Domyślny serwer", + "noServersFound": "Nie znaleziono serwera", + "removeDefault": "Usuń domyślne", + "removeServer": "Usuń serwer", + "removeServerDialog": { + "title": "Usuń serwer" + }, + "resetConfirm": "Przywróć", + "resetConfirmDescription": "Ta czynność przywraca wszystkie serwery domyślne, zachowując serwery dostosowane. \nWszelkie modyfikacje domyślnego serwera zostaną utracone.", + "resetConfirmTitle": "Przywróć domyślną usługę", + "resetToDefault": "Przywróć domyślną usługę", + "running": "Bieganie", + "serverForm": { + "add": "Dodaj", + "args": "Argumenty", + "argsPlaceholder": "Wprowadź jeden argument w każdym wierszu", + "addArg": "Dodaj argument", + "argPlaceholder": "Wprowadź wartość argumentu", + "argsRequired": "Parametry nie mogą być puste", + "autoApprove": "Automatyczne zatwierdzanie", + "autoApproveAll": "Wszystko", + "autoApproveHelp": "Wybierz typ operacji wymagający automatycznej autoryzacji i wykonaj ją bez potwierdzenia użytkownika", + "autoApproveRead": "Przeczytaj", + "autoApproveWrite": "Napisz", + "baseUrl": "Baza URL", + "baseUrlPlaceholder": "Wprowadź podstawowy serwer URL (na przykład: http://localhost:3000)", + "cancel": "Anuluj", + "command": "Polecenie", + "commandPlaceholder": "Wprowadź polecenie", + "commandRequired": "Polecenie nie może być puste", + "configImported": "Import konfiguracji powiódł się", + "description": "Opis", + "descriptionPlaceholder": "Wprowadź opis serwera", + "descriptions": "Opis", + "descriptionsPlaceholder": "Wprowadź opis serwera", + "env": "Zmienne środowiskowe", + "envInvalid": "Zmienne środowiskowe muszą mieć prawidłowy format JSON", + "envPlaceholder": "Wprowadź zmienne środowiskowe w formacie JSON", + "icon": "Ikona", + "iconPlaceholder": "Wprowadź ikonę", + "icons": "Ikony", + "iconsPlaceholder": "Wprowadź ikony", + "jsonConfig": "Konfiguracja JSON", + "jsonConfigExample": "Przykład konfiguracji JSON", + "jsonConfigIntro": "Możesz bezpośrednio wkleić konfigurację JSON lub wybrać ręczną konfigurację serwera.", + "jsonConfigPlaceholder": "Wklej konfigurację formatu JSON serwera MCP", + "name": "Nazwa serwera", + "namePlaceholder": "Wprowadź nazwę serwera", + "nameRequired": "Nazwa serwera nie może być pusta", + "parseAndContinue": "Przeanalizuj i kontynuuj", + "parseError": "Błąd analizy", + "parseSuccess": "Konfiguracja została pomyślnie przeanalizowana", + "skipToManual": "Przejdź do konfiguracji ręcznej", + "submit": "Prześlij", + "folders": "Lista folderów", + "addFolder": "Dodaj folder", + "selectFolder": "Wybierz Folder", + "selectFolderError": "Nie udało się wybrać folderu", + "noFoldersSelected": "Nie wybrano folderów", + "type": "Typ serwera", + "typeInMemory": "Pamięć", + "typePlaceholder": "Wybierz typ serwera", + "typeSse": "Zdarzenia wysyłane przez serwer (SSE)", + "typeStdio": "Standardowe wejście i wyjście", + "update": "Aktualizacja" + }, + "serverList": "Lista serwerów", + "setAsDefault": "Ustaw jako serwer domyślny", + "setDefault": "Ustaw jako domyślny", + "startServer": "Uruchom serwer", + "stopServer": "Zatrzymaj serwer", + "stopped": "Zatrzymany", + "sampling": { + "title": "Żądanie pobierania próbek z {server}", + "unknownServer": "Nieznany serwer", + "description": "Przejrzyj kontekst udostępniony przez serwer MCP i zdecyduj, czy chcesz wygenerować odpowiedź.", + "systemPrompt": "Układ prompt", + "messagesTitle": "Kontekst rozmowy", + "preferencesTitle": "Preferencje modelu", + "approve": "Zatwierdź", + "reject": "Odrzuć", + "confirm": "Wyślij odpowiedź", + "confirming": "potwierdzam…", + "sendResponse": "Wyślij odpowiedź", + "selectModel": "Wybierz Model", + "respondWith": "Odpowiedz:", + "maxTokensInfo": "Maksymalna długość odpowiedzi: {maxTokens} tokens", + "visionWarning": "Wybrany model nie obsługuje wprowadzania danych wizyjnych. Zanim przejdziesz dalej, wybierz model obsługujący wizję.", + "selectedModelLabel": "Odpowiadanie za pomocą {model} ({provider})", + "unsupportedMessage": "Ten typ zawartości nie jest obsługiwany.", + "noVisionModels": "Żadne modele obsługujące wizję nie są włączone. Aby kontynuować, włącz model wizji w Ustawieniach.", + "noModels": "Nie włączono żadnych kwalifikujących się modeli. Aby kontynuować, włącz odpowiedni model w Ustawieniach.", + "imageAlt": "Obraz {index}", + "unknownMime": "Nieznany typ MIME", + "unknownHint": "Nienazwana wskazówka", + "autoApproving": "Żądanie próbkowania MCP z {server}", + "autoApproveIn": "Automatyczne zatwierdzanie w {seconds} przy użyciu {model}", + "reviewRequest": "Recenzja", + "sessionActive": "Sesja aktywna — żądania będą automatycznie zatwierdzane", + "contentType": { + "text": "Tekst", + "image": "Obraz", + "audio": "Dźwięk" + }, + "preference": { + "cost": "Priorytet kosztów", + "speed": "Priorytet prędkości", + "intelligence": "Priorytet inteligencji", + "hints": "Wskazówki dotyczące modelu" + } + }, + "tabs": { + "servers": "Serwery", + "tools": "Narzędzia" + }, + "title": "Ustawienia MCP", + "inmemory": { + "Artifacts": { + "desc": "Twórz bogatsze artefakty w DeepChat", + "name": "Artefakty" + }, + "bochaSearch": { + "desc": "Bocha Wyszukaj API https://open.bochaai.com/", + "name": "Wyszukiwanie Bocha" + }, + "buildInFileSystem": { + "desc": "Zezwól DeepChat na interakcję z lokalnym systemem plików.", + "name": "System plików" + }, + "braveSearch": { + "desc": "Brave Wyszukaj API https://brave.com/search/api/", + "name": "Wyszukiwanie Brave" + }, + "difyKnowledge": { + "desc": "Usługa wyszukiwania bazy wiedzy Dify, która może pobierać zawartość bazy wiedzy Dify", + "name": "Przeszukiwanie bazy wiedzy Dify" + }, + "ragflowKnowledge": { + "name": "Przeszukiwanie bazy wiedzy RAGFlow", + "desc": "Usługa wyszukiwania bazy wiedzy RAGFlow, umożliwia przeszukiwanie zawartości bazy wiedzy RAGFlow" + }, + "fastGptKnowledge": { + "name": "Przeszukiwanie bazy wiedzy FastGPT", + "desc": "Usługa wyszukiwania bazy wiedzy FastGPT, umożliwia przeszukiwanie zawartości bazy wiedzy FastGPT" + }, + "deepchat-inmemory/custom-prompts-server": { + "desc": "Wbudowana niestandardowa usługa DeepChat prompts", + "name": "Niestandardowe Prompt" + }, + "deepchat-inmemory/deep-research-server": { + "desc": "Wbudowane głębokie badania DeepChat obsługiwane przez wyszukiwanie Bocha. Zalecane są modele o długim kontekście.", + "name": "Głębokie badania" + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Automatyczny szablon Prompting", + "desc": "Automatycznie wybierz najlepszy niestandardowy prompt na podstawie wprowadzonych danych i inteligentnie wypełnij szablon." + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Przeszukiwanie historii rozmów", + "desc": "Wbudowane wyszukiwanie historii rozmów DeepChat dla przeszłych czatów i wiadomości." + }, + "builtinKnowledge": { + "desc": "Wbudowane wyszukiwanie bazy wiedzy DeepChat w celu uzyskania dokumentów i przewodników DeepChat.", + "name": "Wbudowane wyszukiwanie w bazie wiedzy" + }, + "deepchat/apple-server": { + "desc": "Pozwól modelom obsługiwać aplikacje macOS, takie jak Kalendarz, Kontakty, Poczta, Mapy, Notatki i Przypomnienia.", + "name": "Asystent systemu macOS" + } + }, + "prompts": { + "noPromptsAvailable": "Brak dostępnych Prompt", + "noDescription": "Nie ma jeszcze opisu", + "selectPrompt": "Tutaj zostaną pokazane szczegóły wybranego prompt.", + "parameters": "Parametry", + "input": "Parametry", + "runningPrompt": "Pobieram prompt...", + "executeButton": "Pobierz Prompt", + "resultTitle": "Szczegóły Prompt", + "invalidJson": "Nieprawidłowy format JSON", + "parametersHint": "Proszę wprowadzić parametry w formacie JSON, obsługuje automatyczne formatowanie", + "resetToDefault": "Przywróć parametry domyślne", + "dialogDescription": "Debuguj i testuj prompts dostarczane przez serwery MCP" + }, + "resources": { + "noResourcesAvailable": "Brak dostępnych zasobów", + "selectResource": "Wybierz zasób, aby wyświetlić jego zawartość.", + "loading": "Ładowanie...", + "loadContent": "Załaduj zawartość", + "pleaseSelect": "Kliknij, aby wyświetlić szczegóły zasobu.", + "dialogDescription": "Przeglądaj i przeglądaj zasoby udostępniane przez serwery MCP" + }, + "errors": { + "loadConfigFailed": "Nie udało się załadować konfiguracji MCP", + "setEnabledFailed": "Nie udało się ustawić stanu włączonego MCP", + "getServerStatusFailed": "Nie udało się uzyskać statusu serwera {serverName}", + "addServerFailed": "Nie udało się dodać serwera", + "updateServerFailed": "Nie udało się zaktualizować serwera", + "removeServerFailed": "Nie udało się usunąć serwera", + "maxDefaultServersReached": "Osiągnięto maksymalną liczbę serwerów domyślnych (30).", + "toggleDefaultServerFailed": "Nie udało się przełączyć domyślnego stanu serwera", + "resetToDefaultFailed": "Nie udało się zresetować do domyślnych serwerów", + "toggleServerFailed": "Nie udało się przełączyć serwera {serverName}", + "loadToolsFailed": "Nie udało się załadować narzędzi", + "loadPromptsFailed": "Nie udało się załadować prompts", + "loadResourcesFailed": "Nie udało się załadować zasobów", + "callToolFailed": "Nie udało się wywołać narzędzia {toolName}", + "toolCallError": "Błąd wywołania narzędzia: {error}", + "mcpDisabled": "MCP jest wyłączony", + "getPromptFailed": "Nie udało się uzyskać prompt", + "readResourceFailed": "Nie udało się odczytać zasobu", + "promptNotFound": "Nie znaleziono Prompt '{name}'", + "emptyPromptContent": "Prompt '{name}' nie zawiera treści", + "missingParameters": "Brak wymaganych parametrów: {params}", + "invalidParameters": "Nieprawidłowe parametry dla: {params}" + }, + "market": { + "browseBuiltin": "Przeglądaj wbudowany rynek MCP", + "builtinTitle": "Rynek MCP", + "poweredBy": "Obsługiwane przez MCPRouter", + "keyGuide": "Pobierz API Key", + "keyHelpText": "Proszę, idź do", + "keyHelpEnd": "aby złożyć wniosek o API Key i wypełnić go w powyższym polu wejściowym", + "apiKeyPlaceholder": "Wpisz MCPRouter API Key", + "apiKeyRequiredTitle": "Wymagane API Key", + "apiKeyRequiredDesc": "Przed instalacją wypełnij MCPRouter API Key", + "install": "Zainstaluj", + "installed": "Zainstalowany", + "installSuccess": "Instalacja pomyślna", + "installFailed": "Instalacja nie powiodła się", + "noMore": "Nigdy więcej", + "empty": "Brak usług", + "loadMore": "Załaduj więcej", + "pullDownToLoad": "Kontynuuj ciągnięcie w dół, aby załadować więcej" + } +} diff --git a/src/renderer/src/i18n/pl-PL/model.json b/src/renderer/src/i18n/pl-PL/model.json new file mode 100644 index 000000000..5efe49381 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Wyszukaj modele..." + }, + "error": { + "loadFailed": "Nie udało się załadować modeli" + }, + "type": { + "custom": "Model niestandardowy", + "official": "Oficjalny model" + }, + "add": { + "namePlaceholder": "Nazwa modelu", + "idPlaceholder": "Identyfikator modelu", + "contextLengthPlaceholder": "Długość kontekstu", + "maxTokensPlaceholder": "Maks. Tokens" + }, + "actions": { + "add": "Dodaj model", + "enableAll": "Włącz wszystko", + "disableAll": "Wyłącz wszystko" + }, + "sort": { + "status": "Według statusu", + "name": "Według nazwy" + }, + "filter": { + "label": "Filtruj", + "clearAll": "Wyczyść filtry", + "visibleCount": "Wyświetlanie {visible} / {total}", + "capabilities": "Możliwości", + "types": "Typy", + "capabilityOptions": { + "vision": "Wizja", + "functionCall": "Wywołanie funkcji", + "reasoning": "Rozumowanie", + "search": "Wyszukiwanie w Internecie" + }, + "typeOptions": { + "chat": "Czat", + "embedding": "Osadzanie", + "rerank": "Zmień rangę", + "imageGeneration": "Generowanie obrazu", + "videoGeneration": "Generowanie wideo" + } + }, + "tags": { + "reasoning": "Rozumowanie", + "chat": "Czat", + "code": "Kod", + "writing": "Pisanie", + "analysis": "Analiza" + } +} diff --git a/src/renderer/src/i18n/pl-PL/plan.json b/src/renderer/src/i18n/pl-PL/plan.json new file mode 100644 index 000000000..165e7436a --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/plan.json @@ -0,0 +1,4 @@ +{ + "title": "Plan zadań", + "completed": "ukończone" +} diff --git a/src/renderer/src/i18n/pl-PL/promptSetting.json b/src/renderer/src/i18n/pl-PL/promptSetting.json new file mode 100644 index 000000000..20f50c872 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "Zarządzanie Prompt", + "addTitle": "Dodaj Prompt", + "addDescription": "Utwórz nowy niestandardowy szablon prompt", + "editTitle": "Edytuj Prompt", + "editDescription": "Zmodyfikuj wybrany szablon prompt", + "name": "Imię", + "namePlaceholder": "Wprowadź nazwę swojego prompt", + "description": "Opis", + "descriptionPlaceholder": "Proszę wpisać opis (opcjonalnie)", + "promptContent": "Prompt", + "contentPlaceholder": "Wprowadź treść prompt", + "basicInfo": "Podstawowe informacje", + "contentTip": "Obsługuje zmienne symbole zastępcze, takie jak {openBrace}{openBrace}variable{closeBrace}{closeBrace}, możesz zdefiniować odpowiednie parametry w sekcji parametrów", + "noPrompt": "Nie ma jeszcze Prompt", + "noPromptDesc": "Kliknij przycisk „+” w prawym górnym rogu, aby utworzyć swój pierwszy prompt.", + "active": "Aktywny", + "noDescription": "Brak opisu", + "customDate": "Niestandardowe", + "showMore": "Pokaż więcej", + "showLess": "Pokaż mniej", + "export": "Eksportuj", + "import": "Importuj", + "exportSuccess": "Eksport udany", + "exportFailed": "Eksport nie powiódł się", + "importSuccess": "Import pomyślny", + "importFailed": "Import nie powiódł się", + "importStats": "Dodano {added}, zaktualizowano {updated} prompts", + "parameters": "Parametry", + "addParameter": "Dodaj parametr", + "noParameters": "Brak parametrów", + "noParametersDesc": "Kliknij powyższy przycisk, aby dodać parametry, których można użyć do utworzenia zmiennych zastępczych w prompts", + "parameterName": "Nazwa parametru", + "parameterDescription": "Opis parametru", + "parameterNamePlaceholder": "Proszę wprowadzić nazwę parametru", + "parameterDescriptionPlaceholder": "Proszę wprowadzić opis parametru", + "required": "Wymagane", + "characters": "Postacie", + "fileManagement": "Zarządzanie plikami", + "uploadFromDevice": "Prześlij z urządzenia", + "uploadFromDeviceDesc": "Obsługuje tekst, dokumenty, CSV i inne.", + "uploadedFiles": "Przesłane pliki", + "noFiles": "Brak plików", + "noFilesUploadDesc": "Kliknij powyżej, aby przesłać pliki", + "uploadSuccess": "Przesyłanie powiodło się", + "uploadedCount": "Przesłano pliki {count}", + "confirmDelete": "Czy na pewno chcesz usunąć prompt \"{name}\"?", + "confirmDeleteDescription": "Tej akcji nie można cofnąć. prompt zostanie trwale usunięty.", + "confirmDeleteSystemPrompt": "Czy na pewno chcesz usunąć system prompt \"{name}\"?", + "confirmDeleteSystemPromptDescription": "Tej akcji nie można cofnąć. system prompt zostanie trwale usunięty.", + "deleteSuccess": "Prompt Usunięto", + "deleteFailed": "Nie udało się usunąć Prompt", + "inactive": "Nieaktywny", + "clickToEnable": "Kliknij, aby włączyć", + "clickToDisable": "Kliknij, aby wyłączyć", + "enableSuccess": "Prompt włączone", + "disableSuccess": "Prompt wyłączone", + "toggleFailed": "Nie udało się zmienić statusu", + "enablePrompt": "Włącz to prompt", + "sourceLocal": "Lokalny", + "sourceImported": "Importowane", + "sourceBuiltin": "Wbudowany", + "defaultSystemPrompt": "Domyślny System Prompt", + "defaultSystemPromptPlaceholder": "Wprowadź domyślny system prompt, który będzie używany we wszystkich nowych rozmowach...", + "defaultSystemPromptDescription": "To prompt będzie miało zastosowanie do wszystkich nowych rozmów. Możesz go zmodyfikować podczas tworzenia rozmowy. Pamiętaj, że to ustawienie zacznie obowiązywać przy następnym utworzeniu nowej rozmowy.", + "typing": "Wpisywanie...", + "saving": "Zapisywanie...", + "saved": "Zapisano", + "saveDefaultPromptFailed": "Nie udało się zapisać domyślnego system prompt", + "systemPrompts": "System Prompt", + "customPrompts": "Niestandardowe Prompt", + "addSystemPrompt": "Dodaj System Prompt", + "addCustomPrompt": "Dodaj niestandardowy Prompt", + "editSystemPrompt": "Edytuj System Prompt", + "addSystemPromptDesc": "Utwórz nowy system prompt", + "editSystemPromptDesc": "Zmodyfikuj wybrane system prompt", + "selectSystemPrompt": "Wybierz System Prompt", + "systemPromptDescription": "Wybrany system prompt będzie używany jako domyślny dla nowych konwersacji", + "emptySystemPromptOption": "Nie System Prompt", + "emptySystemPromptDescription": "Po wybraniu tej opcji nowe konwersacje będą rozpoczynane bez system prompt.", + "preview": "Podgląd", + "systemPromptChanged": "System prompt został pomyślnie zmieniony", + "systemPromptChangeFailed": "Nie udało się zmienić system prompt", + "systemPromptAdded": "Pomyślnie dodano system prompt", + "systemPromptAddedAndSwitched": "System prompt dodany i automatycznie ustawiony jako domyślny", + "systemPromptUpdated": "System prompt został pomyślnie zaktualizowany", + "systemPromptSaveFailed": "Nie udało się zapisać system prompt", + "systemPromptDeleted": "System prompt został pomyślnie usunięty", + "systemPromptDeleteFailed": "Nie udało się usunąć system prompt", + "systemPromptEditTip": "Automatyczne zapisywanie w przypadku utraty ostrości po edycji", + "resetToDefault": "Przywróć ustawienia domyślne", + "resetToDefaultSuccess": "Pomyślnie zresetowano do zawartości domyślnej", + "resetToDefaultFailed": "Nie udało się zresetować do ustawień domyślnych", + "parameterRequired": "Wymagane parametry" +} diff --git a/src/renderer/src/i18n/pl-PL/routes.json b/src/renderer/src/i18n/pl-PL/routes.json new file mode 100644 index 000000000..10fc6e0a6 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "Czat", + "welcome": "Witamy", + "settings": "Ustawienia", + "settings-common": "Wspólne ustawienia", + "settings-provider": "Dostawcy", + "settings-mcp": "Ustawienia MCP", + "settings-deepchat-agents": "DeepChat Agent", + "settings-database": "Dane", + "settings-about": "O", + "settings-shortcut": "Skróty", + "settings-display": "Wyświetlacz", + "settings-knowledge-base": "Baza wiedzy", + "settings-prompt": "Prompt", + "settings-mcp-market": "Rynek MCP", + "settings-acp": "ACP Agent", + "settings-skills": "Skills", + "settings-notifications-hooks": "Haczyki", + "settings-dashboard": "Pulpit nawigacyjny", + "settings-environments": "Środowiska", + "settings-remote": "Zdalny", + "settings-plugins": "Wtyczki", + "settings-overview": "Przegląd ustawień" +} diff --git a/src/renderer/src/i18n/pl-PL/settings.json b/src/renderer/src/i18n/pl-PL/settings.json new file mode 100644 index 000000000..17ec5a780 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "Ustawienia", + "common": { + "title": "Wspólne ustawienia", + "resetData": "Zresetuj dane", + "language": "Język", + "languageSelect": "Wybierz język", + "searchEngine": "Wyszukiwarka", + "searchEngineSelect": "Wybierz wyszukiwarkę", + "searchPreview": "Podgląd wyszukiwania", + "launchAtLoginEnabled": "Uruchom DeepChat przy logowaniu", + "autoScrollEnabled": "Automatyczne przewijanie podczas generowania", + "privacyMode": "Tryb prywatności", + "privacyModeDescription": "Zatrzymaj automatyczne żądania wychodzące należące do DeepChat:", + "privacyModeAutoUpdate": "Sprawdzanie aktualizacji aplikacji", + "privacyModeProviderDb": "Odświeżanie metadanych dostawcy i modelu", + "privacyModeAcpRegistry": "Odświeżanie rejestru ACP i synchronizacja ikon", + "privacyModeNpmRegistry": "Automatyczne wykrywanie rejestru MCP npm", + "privacyModeManualActions": "Ręczne kontrole i ręczne czynności odświeżania pozostają dostępne.", + "privacyModeIntegrations": "Skonfigurowane integracje innych firm pozostają dostępne.", + "autoCompaction": { + "title": "Automatyczne zagęszczanie", + "enabled": "Włącz automatyczne zagęszczanie", + "description": "Kiedy konwersacja zbliża się do limitu okna kontekstu modelu, DeepChat może automatycznie podsumować starszą historię, aby sesja trwała dalej. Jeśli ta opcja jest wyłączona, przepełniona historia jest usuwana bezpośrednio, zamiast być podsumowywana.", + "thresholdLabel": "Próg wyzwalania", + "thresholdMin": "Wczesny ({value}%)", + "thresholdMax": "Późno ({value}%)", + "thresholdDescription": "Rozpocznij zagęszczanie, gdy użycie prompt osiągnie tę część efektywnego budżetu historii. Niższe wartości zapewniają większy zapas; wyższe wartości zachowują bardziej surowy kontekst.", + "retainPairsLabel": "Zachowaj ostatnie pary wiadomości", + "retainPairsValue": "Pary {count}", + "retainPairsDescription": "Zachowaj najnowsze ukończone pary użytkowników i asystentów poza zagęszczaniem. Bieżące zapytanie nie jest uwzględnione." + }, + "searchAssistantModel": "Modelka Asystenta", + "selectModel": "Wybierz Model", + "proxyMode": "Tryb proxy", + "proxyModeSelect": "Wybierz tryb proxy", + "proxyModeSystem": "Serwer proxy systemu", + "proxyModeNone": "Brak serwera proxy", + "proxyModeCustom": "Niestandardowy serwer proxy", + "customProxyUrl": "Niestandardowy serwer proxy URL", + "customProxyUrlPlaceholder": "Przykład: http://127.0.0.1:7890", + "invalidProxyUrl": "Nieprawidłowy serwer proxy URL, proszę wprowadzić prawidłowy http/https URL", + "addCustomSearchEngine": "Dodaj niestandardową wyszukiwarkę", + "addCustomSearchEngineDesc": "Dodaj nową wyszukiwarkę podając nazwę i wyszukaj URL. URL musi zawierać {query} jako symbol zastępczy zapytania.", + "searchEngineName": "Nazwa wyszukiwarki", + "searchEngineNamePlaceholder": "Wpisz nazwę wyszukiwarki", + "searchEngineUrl": "Wyszukaj URL", + "searchEngineUrlPlaceholder": "Np.: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "URL musi zawierać {'{'}query{'}'} jako symbol zastępczy zapytania", + "deleteCustomSearchEngine": "Usuń niestandardową wyszukiwarkę", + "deleteCustomSearchEngineDesc": "Czy na pewno chcesz usunąć niestandardową wyszukiwarkę „{name}”? Tej akcji nie można cofnąć.", + "testSearchEngine": "Przetestuj wyszukiwarkę", + "testSearchEngineDesc": "Testowe wyszukiwanie hasła „pogoda” zostanie przeprowadzone przy użyciu wyszukiwarki {engine}.", + "testSearchEngineNote": "Jeśli strona wyszukiwania wymaga logowania lub innych działań, możesz je wykonać w oknie testowym. Po zakończeniu zamknij okno testowe.", + "theme": "Motyw", + "themeSelect": "Wybierz motyw", + "themeLight": "Światło", + "themeDark": "Ciemny", + "themeSystem": "Postępuj zgodnie z systemem", + "closeToQuit": "Wyjdź z aplikacji po zamknięciu okna", + "contentProtectionDialogTitle": "Potwierdź zmianę ochrony ekranu", + "contentProtectionEnableDesc": "Uniemożliwiaj aplikacjom do udostępniania ekranu przechwytywanie okna DeepChat, aby chronić swoją prywatność. Nie wszystkie aplikacje obsługują to ustawienie; w niektórych środowiskach może pozostać czarne okno.", + "contentProtectionDisableDesc": "Zezwalaj aplikacjom do udostępniania ekranu na przechwytywanie okna DeepChat.", + "contentProtectionRestartNotice": "Zmiana tego ustawienia spowoduje ponowne uruchomienie aplikacji. Czy chcesz kontynuować?", + "copyWithCotEnabled": "Skopiuj szczegóły COT", + "traceDebugEnabled": "Śledzenie połączenia", + "loggingEnabled": "Włącz rejestrowanie", + "loggingDialogTitle": "Potwierdź zmianę ustawień rejestrowania", + "loggingEnableDesc": "Włączenie logowania pomoże nam diagnozować problemy i ulepszać aplikację. Pliki dziennika mogą zawierać poufne informacje.", + "loggingDisableDesc": "Wyłączenie rejestrowania spowoduje zatrzymanie gromadzenia dzienników aplikacji.", + "charactersUnit": "postacie", + "loggingRestartNotice": "Zmiana tego ustawienia spowoduje ponowne uruchomienie aplikacji. Czy chcesz kontynuować?", + "openLogFolder": "Otwórz folder dziennika", + "shortcut": { + "newChat": "Utwórz nowy czat", + "title": "Ustawienia klawiszy skrótu" + }, + "notifications": "Powiadomienia systemowe", + "notificationsDesc": "Gdy DeepChat nie jest na pierwszym planie, w przypadku wygenerowania sesji zostanie wysłane powiadomienie systemowe", + "contentProtection": "Ochrona przechwytywania ekranu", + "fileMaxSize": "Maksymalny rozmiar pliku", + "fileMaxSizeHint": "Ogranicza maksymalny rozmiar pojedynczego przesłanego pliku", + "defaultModel": { + "title": "Domyślny model", + "chatModel": "Domyślny model czatu" + } + }, + "deepchatAgents": { + "title": "DeepChat Agent", + "description": "Zarządzaj agentami DeepChat i ustawieniami domyślnymi, które wprowadzają do nowych sesji.", + "builtIn": "Wbudowany", + "editTitle": "Edytuj DeepChat Agent", + "createTitle": "Utwórz DeepChat Agent", + "unnamed": "Nienazwany Agent", + "name": "Imię", + "namePlaceholder": "Na przykład: Pisarz / Badania / Tłumacz", + "enabledLabel": "Włączone", + "descriptionLabel": "Opis", + "descriptionPlaceholder": "Opcjonalna uwaga dotycząca przeznaczenia tego agenta", + "avatarTitle": "Awatar", + "avatarDefault": "Domyślne", + "avatarDefaultDesc": "DeepChat zachowuje wbudowaną ikonę. Inni agenci używają awatara tekstowego.", + "avatarLucide": "Ikona Lucide", + "avatarLucideDesc": "Wybierz ikonę Lucide i ustaw kolory light/dark.", + "avatarMonogram": "Monogram", + "avatarMonogramDesc": "Użyj dwóch liter łacińskich lub pierwszego znaku CJK.", + "lucideIcon": "Nazwa ikony Lucide", + "lightColor": "Jasny kolor", + "darkColor": "Ciemny kolor", + "monogramText": "Monogram", + "monogramPlaceholder": "Na przykład: WR / 研", + "backgroundColor": "Kolor tła", + "modelsTitle": "Domyślne ustawienia modelu", + "chatModel": "Domyślny model czatu", + "assistantModel": "Modelka Asystenta", + "visionModel": "Model wizji", + "imageGenerationModel": "Model generowania obrazu", + "temperature": "Temperatura", + "contextLength": "Długość kontekstu", + "maxTokens": "Maks. Tokens", + "thinkingBudget": "Myślący budżet", + "reasoningEffort": "Wysiłek rozumowania", + "verbosity": "Szczegółowość", + "interleaved": "Kompatybilność myślenia z przeplataniem siły", + "systemPrompt": "Domyślny system prompt", + "systemPromptPlaceholder": "Pozostaw puste dla pustego system prompt", + "defaultProjectPath": "Katalog domyślny (opcjonalnie)", + "defaultProjectPathPlaceholder": "Pozostaw puste, aby użyć globalnego katalogu domyślnego", + "permissionMode": "Domyślne uprawnienie", + "permissionFullAccess": "Pełny dostęp", + "permissionDefault": "Domyślne uprawnienie", + "subagentsTitle": "Subagenci", + "subagentsDescription": "Skonfiguruj gniazda sesji podrzędnych wielokrotnego użytku udostępnione subagent_orchestrator.", + "subagentsEnabled": "Włącz subagent", + "subagentTargetType": "Typ celu", + "subagentTargetSelf": "Ja", + "subagentTargetAgent": "Agent", + "subagentDisplayName": "Nazwa wyświetlana", + "subagentDescription": "Opis gniazda", + "subagentTargetAgentLabel": "Agent docelowy", + "subagentLimit": "Sloty {count}/{max}", + "addSubagentSlot": "+ Dodaj miejsce", + "toolsTitle": "Wbudowane narzędzia", + "compactionTitle": "Automatyczne zagęszczanie", + "compactionEnabled": "Włącz automatyczne zagęszczanie", + "compactionDescription": "Te wartości domyślne mają wpływ tylko na przyszłe sesje DeepChat.", + "compactionThreshold": "Próg wyzwalania", + "compactionRetainPairs": "Zachowaj najnowsze pary", + "deleteConfirm": "Usunąć agenta „{name}”? Jego historia sięga wstecz do wbudowanego agenta DeepChat." + }, + "notificationsHooks": { + "title": "Haczyki", + "description": "Skonfiguruj polecenia przechwytujące cykl życia.", + "events": { + "title": "Wydarzenia", + "SessionStart": "Rozpoczęcie sesji", + "UserPromptSubmit": "Użytkownik Prompt Wyślij", + "PreToolUse": "Wstępne użycie narzędzia", + "PostToolUse": "Użycie narzędzia pocztowego", + "PostToolUseFailure": "Błąd użycia narzędzia", + "PermissionRequest": "Prośba o pozwolenie", + "Stop": "Zatrzymaj się", + "SessionEnd": "Koniec sesji" + }, + "commands": { + "title": "Komendy hooków", + "description": "Uruchom niestandardowe polecenia dla wybranych zdarzeń cyklu życia.", + "hint": "Pełny ładunek jest wysyłany na standardowe wejście jako JSON.", + "commandPlaceholder": "Komenda do biegu", + "commandLabel": "Polecenie", + "name": "Imię", + "namePlaceholder": "Nazwa haka", + "newHook": "Nowy hak", + "empty": "Nie ma jeszcze haczyków. Dodaj jeden, aby rozpocząć.", + "defaultName": "Zaczep {index}", + "guideTitle": "Jak używać", + "guideDescription": "Po uruchomieniu zaznaczonego zdarzenia DeepChat uruchamia polecenie. Bieżące zdarzenie jest dostępne ze standardowego wejścia JSON, zmiennych środowiskowych i symboli zastępczych poleceń.", + "deliveryTitle": "Sposób przekazywania danych", + "deliveryStdin": "Pełny ładunek jest zapisywany na stdin jako JSON.", + "deliveryPlaceholder": "Symbole zastępcze poleceń można umieszczać bezpośrednio w wierszu poleceń.", + "deliveryEnv": "Te same podstawowe metadane są również ujawniane jako zmienne środowiskowe.", + "metadataOnly": "Symbole zastępcze poleceń najlepiej sprawdzają się w przypadku małych metadanych. Przeczytaj szczegóły prompt/tool, uprawnienia, użycie, zatrzymanie i pola błędów ze standardowego wejścia JSON.", + "stdinPreviewLabel": "przykład standardu", + "placeholdersTitle": "Symbole zastępcze poleceń", + "placeholdersDescription": "Symbole zastępcze są rozwijane przed wykonaniem, więc można je przekazać jako argumenty polecenia.", + "envTitle": "Zmienne środowiskowe", + "examplesTitle": "Przykłady", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Pyton", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Aktualna nazwa wydarzenia", + "time": "Czas zdarzenia w formacie ISO-8601", + "isTest": "Czy ten przebieg pochodzi z przycisku Test", + "conversationId": "Bieżący identyfikator conversation/session", + "workdir": "Rozwiązany katalog roboczy sesji", + "agentId": "Bieżący identyfikator agenta, jeśli jest dostępny", + "providerId": "Bieżący identyfikator dostawcy, jeśli jest dostępny", + "modelId": "Bieżący identyfikator modelu, jeśli jest dostępny", + "messageId": "Bieżący identyfikator wiadomości użytkownika, jeśli jest dostępny", + "toolName": "Bieżąca nazwa narzędzia, jeśli jest dostępna", + "toolCallId": "Bieżący identyfikator wywołania narzędzia, jeśli jest dostępny" + } + }, + "test": { + "button": "Testuj", + "testing": "Testowanie...", + "success": "Sukces", + "failed": "Nie udało się", + "duration": "{ms} ms", + "statusCode": "HTTP{code}", + "exitCode": "Wyjdź z {code}", + "retryAfter": "Spróbuj ponownie po {ms} ms", + "stdout": "standardowe wyjście", + "stderr": "stderr" + } + }, + "data": { + "title": "Ustawienia danych", + "syncEnable": "Włącz synchronizację danych", + "syncFolder": "Synchronizuj folder", + "openSyncFolder": "Otwórz folder synchronizacji", + "lastSyncTime": "Czas ostatniej synchronizacji", + "never": "Nigdy", + "startBackup": "Utwórz kopię zapasową teraz", + "backingUp": "Tworzenie kopii zapasowej...", + "importData": "Importuj dane", + "incrementImport": "Import przyrostowy", + "overwriteImport": "Zastąp import", + "backupSelectLabel": "Wybierz kopię zapasową", + "backupSelectDescription": "Wybierz migawkę kopii zapasowej do zaimportowania.", + "selectBackupPlaceholder": "Wybierz kopię zapasową", + "noBackupsAvailable": "Brak dostępnych kopii zapasowych. Najpierw wykonaj kopię zapasową.", + "importConfirmTitle": "Potwierdź import danych", + "importConfirmDescription": "Import spowoduje zastąpienie wszystkich bieżących danych, w tym historii czatów i ustawień. Upewnij się, że wykonałeś kopię zapasową ważnych danych. Dane zostaną odświeżone automatycznie po imporcie.", + "importing": "Importowanie...", + "confirmImport": "Potwierdź import", + "importSuccessTitle": "Import powiódł się", + "importErrorTitle": "Import nie powiódł się", + "resetData": "Zresetuj dane", + "resetConfirmTitle": "Potwierdź reset danych", + "resetConfirmDescription": "Wybierz typ danych do zresetowania. Tej operacji nie można cofnąć, a po zresetowaniu aplikacja zostanie automatycznie uruchomiona ponownie.", + "resetChatData": "Zresetuj dane czatu", + "resetChatDataDesc": "Usuń całą historię czatów i zapisy rozmów", + "resetKnowledgeData": "Zresetuj dane bazy wiedzy", + "resetKnowledgeDataDesc": "Usuń wszystkie pliki bazy wiedzy i dane wektorowe", + "resetConfig": "Zresetuj konfigurację", + "resetConfigDesc": "Usuń wszystkie ustawienia aplikacji, konfiguracje modelu i niestandardowe prompts", + "resetAll": "Całkowity reset", + "resetAllDesc": "Usuń wszystkie dane, w tym historię czatów, konfiguracje i pliki pamięci podręcznej", + "resetting": "Resetuję...", + "confirmReset": "Potwierdź reset", + "resetCompleteDevTitle": "Resetowanie danych zakończone", + "resetCompleteDevMessage": "Proszę ręcznie zrestartować aplikację w trybie programistycznym. Zatrzymaj bieżący proces i ponownie uruchom pnpm run dev", + "toast": { + "backupSuccessTitle": "Kopia zapasowa powiodła się", + "backupSuccessMessage": "Kopia zapasowa danych została utworzona pomyślnie" + }, + "syncSectionTitle": "Kopia zapasowa i synchronizacja", + "operationsSectionTitle": "Operacje na danych", + "resetDataDescription": "Zresetuj czat, wiedzę, konfigurację lub wszystkie dane według typu.", + "databaseRepair": { + "title": "Naprawa bazy danych", + "description": "Wykryj i automatycznie napraw bazę danych", + "button": "Sprawdź i napraw bazę danych", + "running": "Sprawdzanie i naprawianie...", + "lastResultLabel": "Ostatni wynik: {result}", + "summaryHealthy": "Zdrowy", + "summaryRepaired": "Naprawiono problemy {count}", + "summaryRepairedWithManual": "Naprawiono problemy {repaired}, problemy ręczne {manual}", + "summaryManualOnly": "Problemy z podręcznikiem {manual} wymagają uwagi", + "manualHint": "Problemy {count} nadal wymagają ręcznej obsługi.", + "toastSuggestedTitle": "Zalecana naprawa bazy danych", + "toastSuggestedDescription": "DeepChat wykrył problem ze schematem ({reason}). Możesz teraz uruchomić naprawę bazy danych.", + "toastAction": "Idź do naprawy", + "toastHealthyTitle": "Baza danych jest zdrowa", + "toastHealthyDescription": "Nie znaleziono problemu ze schematem.", + "toastCompletedTitle": "Naprawa bazy danych zakończona", + "toastRepairedDescription": "Naprawiono problemy {count}.", + "toastManualDescription": "Naprawiono problemy {repaired}. Problem(y) {manual} nadal wymagają ręcznej obsługi.", + "toastFailedTitle": "Naprawa bazy danych nie powiodła się", + "toastFailedDescription": "Nie można teraz dokończyć naprawy bazy danych. Sprawdź logi i spróbuj ponownie.", + "reasons": { + "missing-table": "brakujący stół", + "missing-column": "brakująca kolumna", + "column-count-mismatch": "niezgodność liczby kolumn", + "type-mismatch": "niezgodność typu kolumny" + } + }, + "databaseEncryption": { + "title": "Szyfrowanie bazy danych SQLite", + "description": "Zaszyfruj plik agent.db za pomocą SQLCipher i wymagaj hasła SQLite, jeśli nie można użyć odblokowania systemu.", + "enabled": "Włączone", + "disabled": "Niepełnosprawny", + "cipher": "Szyfr", + "systemUnlock": "Odblokowanie systemu", + "startupUnlock": "Odblokowanie uruchamiania", + "lastMigration": "Ostatnia migracja", + "loading": "Ładowanie", + "never": "Nigdy", + "notRequired": "Nie jest wymagane", + "systemUnlockAvailable": "Dostępne", + "systemUnlockUnavailable": "Niedostępne", + "systemUnlockMode": "Odblokowanie systemu", + "manualUnlock": "Ręczne hasło", + "currentPassword": "Aktualne hasło", + "newPassword": "Nowe hasło SQLite", + "confirmPassword": "Potwierdź hasło", + "passwordMismatch": "Hasła nie pasują", + "systemCredentialStore": "Gdy dostępna jest bezpieczna pamięć systemowa, DeepChat przechowuje hasło SQLite w skarbcu danych uwierzytelniających systemu operacyjnego (pęku kluczy macOS, skarbcu danych uwierzytelniających systemu Windows lub tajnym magazynie systemu Linux). Po jednym udanym odblokowaniu późniejsze start-upy zwykle otwierają się automatycznie; wystarczy ponownie wprowadzić klucz szyfrowania po migracji danych, gdy brakuje danych uwierzytelniających systemu operacyjnego lub nie można ich odszyfrować, albo gdy bezpieczne przechowywanie jest niedostępne.", + "safeStorageUnavailable": "Rozwiązanie Electron SafeStorage nie jest dostępne w tym systemie. Po włączeniu szyfrowania przy każdym uruchomieniu należy wprowadzić hasło.", + "enableButton": "Włącz szyfrowanie", + "changeButton": "Zmień hasło", + "disableButton": "Wyłącz szyfrowanie", + "enabledTitle": "Włączono szyfrowanie bazy danych", + "changedTitle": "Hasło SQLite zostało zmienione", + "disabledTitle": "Szyfrowanie bazy danych wyłączone", + "failedTitle": "Szyfrowanie bazy danych nie powiodło się", + "failedDescription": "Sprawdź hasło i spróbuj ponownie.", + "setPasswordButton": "Ustaw hasło", + "enableDialogTitle": "Ustaw hasło SQLite", + "changeDialogTitle": "Zmień hasło SQLite", + "disableDialogTitle": "Wyłącz szyfrowanie bazy danych", + "enableDialogDescription": "Utwórz zaszyfrowaną bazę danych SQLite i migruj do niej bieżące dane lokalne.", + "changeDialogDescription": "Przeprowadź migrację bieżącej zaszyfrowanej bazy danych do nowej zaszyfrowanej bazy danych z nowym hasłem.", + "disableDialogDescription": "Przeprowadź migrację bieżącej zaszyfrowanej bazy danych z powrotem do lokalnej bazy danych w postaci zwykłego tekstu.", + "cancelButton": "Anuluj", + "unknown": "Nieznany" + }, + "modelConfigUpdate": { + "title": "Zaktualizuj konfigurację modelu", + "descriptionPrefix": "Synchronizuj dane modelu z ", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": ".", + "button": "Zaktualizuj teraz", + "updating": "Aktualizowanie...", + "updatedTitle": "Zaktualizowano konfigurację modelu", + "updatedDescription": "Metadane najnowszego dostawcy zostały odświeżone.", + "upToDateTitle": "Już aktualne", + "upToDateDescription": "Twoja konfiguracja modelu lokalnego korzysta już z najnowszych metadanych dostawcy.", + "failedTitle": "Aktualizacja nie powiodła się", + "failedDescription": "Nie można teraz odświeżyć konfiguracji modelu. Spróbuj ponownie później." + }, + "yoBrowser": { + "clearButton": "Wyczyść dane YoBrowser", + "clearFailedDescription": "Spróbuj ponownie lub sprawdź dzienniki, aby uzyskać więcej informacji.", + "clearFailedTitle": "Czyszczenie nie powiodło się", + "clearedDescription": "Sesja piaskownicy została zresetowana, a powiązana karta zostanie załadowana ponownie.", + "clearedTitle": "Dane YoBrowser zostały usunięte", + "clearing": "Sprzątanie...", + "confirmAction": "Wyczyść teraz", + "confirmDescription": "Pliki cookie, pamięć podręczna, LocalStorage, IndexedDB i inne dane sesji YoBrowser zostaną usunięte, a konieczne może być ponowne zalogowanie się na stronie.", + "confirmTitle": "Potwierdzić, aby wyczyścić dane YoBrowser?", + "description": "Niezależna piaskownica przeglądarki, która nie udostępnia plików cookie i pamięci lokalnej z główną aplikacją. \nTutaj możesz wyczyścić dane YoBrowser jednym kliknięciem.", + "title": "Piaskownica YoBrowser" + }, + "privacyTitle": "Dane i prywatność", + "privacyDescription": "Zarządzaj kopiami zapasowymi, synchronizacją, trybem prywatności, konserwacją i niebezpiecznymi operacjami.", + "dangerZone": { + "title": "Strefa zagrożenia", + "description": "Zresetuj czat, wiedzę lub wszystkie dane. Tego nie można cofnąć." + }, + "providerImport": { + "entryTitle": "Importuj ustawienia dostawcy", + "entryDescription": "Zeskanuj CC Switch, Alma, Cherry Studio, Hermes i OpenClaw, aby uzyskać dane uwierzytelniające dostawców i listy modeli.", + "entryButton": "Importuj od agentów", + "dialogTitle": "Importuj od innych agentów", + "dialogDescription": "Najpierw wybierz wykryte aplikacje, a następnie przejrzyj dostawców, których DeepChat może zaimportować.", + "toastTitle": "Import dostawcy został zakończony", + "toastDescription": "Zaimportowani dostawcy {count}.", + "steps": { + "scan": "Skanuj", + "providers": "Dostawcy", + "done": "Gotowe" + }, + "scanningTitle": "Skanowanie zainstalowanych agentów", + "scanningDescription": "DeepChat sprawdza znane lokalne pliki konfiguracyjne bez wysyłania danych gdziekolwiek.", + "scanFailedTitle": "Skanowanie nie powiodło się", + "sourcesTitle": "Wykryte źródła", + "sourcesDescription": "Wybierz jednego lub więcej agentów. Wybrani agenci są przetwarzani w pokazanej kolejności.", + "selectedSources": "Wybrano {selected}/{total}", + "noSourcesTitle": "Nie znaleziono konfiguracji dostawcy, którą można zaimportować", + "noSourcesDescription": "Najpierw zainstaluj jednego z obsługiwanych agentów lub skonfiguruj tam poświadczenia dostawcy.", + "providersFound": "Dostawcy {count}", + "sourceProgress": "{current} z {total}", + "overwriteNote": "Jeśli wielu wybranych dostawców jest mapowanych na tego samego dostawcę DeepChat, późniejsze źródło zastępuje wcześniejsze.", + "noProvidersTitle": "Brak danych dostawcy w tym źródle", + "noProvidersDescription": "Wybrano tego agenta, ale nie znaleziono wpisu dostawcy, który można zaimportować.", + "apiKey": "Klucz {value}", + "noModels": "Brak listy modeli", + "modelsImported": "Modele {count}", + "importingTitle": "Importowanie dostawców", + "importingDescription": "DeepChat zapisuje wpisy wybranych dostawców i modeli niestandardowych.", + "doneTitle": "Podsumowanie importu", + "doneDescription": "Zaimportowani dostawcy {count}. Poniżej przejrzyj wyniki dla poszczególnych dostawców.", + "badges": { + "configured": "Skonfigurowane" + }, + "sourceStatus": { + "found": "Znaleziono", + "not_found": "Nie znaleziono", + "error": "Błąd", + "unsupported_platform": "Nieobsługiwana platforma" + }, + "targetKind": { + "builtin": "Wbudowany", + "custom": "Niestandardowe", + "unsupported": "Nieobsługiwane" + }, + "warnings": { + "already_configured": "Został już skonfigurowany w DeepChat, więc nie jest wybrany domyślnie.", + "missing_api_key": "Brak klucza API lub wymagany punkt końcowy.", + "unsupported_provider": "DeepChat nie może automatycznie zaimportować tego dostawcy.", + "overwrites_previous_selection": "Wybór ten jest sprzeczny z wcześniejszym źródłem.", + "credential_only_import": "Zaimportowany zostanie tylko klucz API; DeepChat zachowuje wbudowany punkt końcowy i środowisko wykonawcze." + }, + "conflicts": { + "overridesPrevious": "Ten wybór spowoduje zastąpienie wcześniej wybranego dostawcy.", + "overwrittenByLater": "Później wybrane źródło zastąpi tego dostawcę." + }, + "summary": { + "imported": "Importowane", + "created": "Utworzono", + "updated": "Zaktualizowano", + "overwritten": "Nadpisane", + "models": "Modele", + "skipped": "Pominięte" + }, + "resultStatus": { + "created": "Utworzono", + "updated": "Zaktualizowano", + "skipped": "Pominięte", + "overwritten": "Nadpisane" + }, + "actions": { + "rescan": "Skanuj ponownie", + "selectAll": "Zaznacz wszystko", + "clearSelected": "Jasne", + "import": "Importuj wybrane" + }, + "apiTypes": { + "openaiCompletions": "OpenAI Zakończenie czatu", + "openai": "OpenAI", + "openaiResponses": "Odpowiedzi OpenAI", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "AI Mistrala" + }, + "applyFailed": "Import nie powiódł się: {message}" + } + }, + "dashboard": { + "badge": "Panel użytkowania", + "title": "Panel użytkowania", + "description": "Śledź wykorzystanie token, trafienia do pamięci podręcznej i szacowany koszt. Dane Token i koszty są szacowane na podstawie informacji publicznych, a niektórzy dostawcy lub wcześniejsze wiadomości mogą być niekompletne, dlatego należy traktować te liczby wyłącznie jako odniesienie.", + "actions": { + "refresh": "Odśwież" + }, + "backfill": { + "runningTitle": "Aktualizowanie danych użytkowania", + "runningDescription": "Dane dotyczące użytkowania są nadal aktualizowane w tle. Aktualne wyniki są już dostępne.", + "failedTitle": "Nie udało się zaktualizować danych o użytkowaniu", + "failedDescription": "Odśwież tę stronę lub spróbuj ponownie później." + }, + "error": { + "title": "Nie udało się załadować panelu", + "description": "Spróbuj ponownie później." + }, + "empty": { + "title": "Nie ma jeszcze statystyk użytkowania", + "description": "Użycie Token, trafienia do pamięci podręcznej i szacowany koszt pojawią się tutaj, gdy dostępne będą dane o użytkowaniu.", + "historyNote": "Dane Token i koszty są szacowane na podstawie informacji publicznych. Niektórzy dostawcy lub wcześniejsze wiadomości mogą być niekompletne, więc traktuj te liczby wyłącznie jako odniesienie." + }, + "summary": { + "totalTokens": "Razem tokens", + "totalTokensDescription": "Pokazuje, jaki udział wejścia i wyjścia tokens w sumie.", + "inputTokensLabel": "Wejście", + "outputTokensLabel": "Wyjście", + "cachedTokens": "Buforowano tokens", + "cachedTokensDescription": "Prompt tokens podawane z pamięci podręcznej dostawcy.", + "cachedTokensCachedLabel": "Buforowane", + "cachedTokensUncachedLabel": "Nieumieszczone w pamięci podręcznej", + "cacheHitRate": "Współczynnik trafień w pamięci podręcznej", + "cacheHitRateDescription": "Buforowane prompt tokens podzielone przez całkowite dane wejściowe tokens.", + "estimatedCost": "Szacowany koszt", + "estimatedCostDescription": "Oszacowane w USD na podstawie cen dostawcy lub cen zastępczych AIHubMix.", + "estimatedCostTrendLabel": "Trend z ostatnich 30 dni", + "estimatedCostTrendEmpty": "W ciągu ostatnich 30 dni nie zarejestrowano żadnych kosztów.", + "recordingStartedAt": "Rozpoczęło się nagrywanie", + "recordingStartedAtDescription": "Najwcześniejszy zapis użycia aktualnie przechowywany w tym panelu kontrolnym.", + "withDeepChatDaysLabel": "Dni razem", + "withDeepChatDaysValue": "{days} dni", + "withDeepChatDaysSentence": "Jesteś w dniu {days} z DeepChat.", + "withDeepChatDaysDescription": "Na podstawie najwcześniejszego zapisu użytkowania z {date}.", + "withDeepChatDaysDescriptionUnavailable": "Nie ma jeszcze żadnych zapisów użycia.", + "tokenUsage": "Użycie Token", + "nostalgiaLabel": "Echa", + "nostalgiaDaysValue": "{days} dni", + "nostalgiaSessionsValue": "Sesje {count}", + "nostalgiaMessagesValue": "Komunikaty {count}", + "nostalgiaDaysDetailLabel": "Dni razem", + "nostalgiaDaysDetail": "Ty i DeepChat spędziliście razem {days} dni.", + "nostalgiaSessionsDetailLabel": "Sesje", + "nostalgiaSessionsDetail": "Udostępniliście razem sesje {count}.", + "nostalgiaMessagesDetailLabel": "Wiadomości", + "nostalgiaMessagesDetail": "Wymieniłeś wiadomości {count}.", + "nostalgiaMostActiveDayLabel": "Najbardziej aktywny dzień", + "nostalgiaMostActiveDayDetail": "{date} był Twoim najbardziej aktywnym dniem, jeśli chodzi o wiadomości {count}." + }, + "calendar": { + "title": "Kalendarz wkładów", + "description": "Dzienne użycie token w ciągu ostatnich 365 dni.", + "legend": "Mniej za więcej", + "tooltip": "{date}: {tokens} tokens" + }, + "breakdown": { + "providerTitle": "Najlepsi dostawcy", + "providerDescription": "Uszeregowane według szacunkowego kosztu, a następnie według całkowitego tokens.", + "modelTitle": "Najlepsze modele", + "modelDescription": "10 najlepszych modeli według szacunkowego kosztu, a następnie łącznie tokens.", + "messages": "Komunikaty {count}", + "empty": "Nie ma jeszcze danych dotyczących podziału." + }, + "rtk": { + "title": "RTK Oszczędności", + "description": "Szacuje się, że tokens nie mógł dotrzeć do kontekstu modelu przez RTK podczas wykonywania natywnego polecenia DeepChat.", + "actions": { + "retry": "Ponów próbę" + }, + "status": { + "disabled": "Niepełnosprawny", + "checking": "Sprawdzanie", + "healthy": "Zdrowy", + "unhealthy": "Niedostępne" + }, + "descriptionDisabled": "RTK jest wyłączony dla tej sesji aplikacji, więc polecenia są uruchamiane normalną ścieżką wykonywania.", + "descriptionChecking": "DeepChat sprawdza, czy RTK może działać poprawnie w bieżącym środowisku.", + "descriptionHealthy": "RTK jest aktywny dla wykonywania rodzimych poleceń DeepChat.", + "descriptionUnhealthy": "RTK nie przeszedł kontroli stanu uruchamiania i został wyłączony dla tej sesji aplikacji.", + "sourceLabel": "Źródło środowiska wykonawczego: {source}", + "source": { + "bundled": "W zestawie", + "system": "Systemu", + "none": "Niedostępne" + }, + "summary": { + "savedTokens": "Zapisano tokens", + "commands": "Śledzone polecenia", + "avgSavingsPct": "Średnie oszczędności", + "outputTokens": "Filtrowane wyjście" + } + }, + "unavailable": "N/A" + }, + "modelConfigItem": { + "chatFallbackWarning": "Słabe możliwości Agent: obsługuje tylko starsze wywołania narzędzi awaryjnych" + }, + "model": { + "title": "Ustawienia modelu", + "systemPrompt": { + "label": "System Prompt", + "placeholder": "Proszę wprowadzić system prompt...", + "description": "Ustaw system prompt dla asystenta AI, aby zdefiniować jego zachowanie i rolę" + }, + "temperature": { + "label": "Temperatura modelu", + "description": "Kontroluje losowość wyjścia; wyższe wartości powodują bardziej kreatywne reakcje" + }, + "contextLength": { + "label": "Długość kontekstu", + "description": "Ustaw maksymalną długość kontekstu konwersacji" + }, + "responseLength": { + "label": "Długość odpowiedzi", + "description": "Ustaw maksymalną długość odpowiedzi AI" + }, + "artifacts": { + "description": "Włączenie funkcji Artefakty umożliwia sztucznej inteligencji generowanie bogatszej zawartości", + "title": "Artefakty" + }, + "addModel": "Dodaj model", + "configureModel": "Skonfiguruj model", + "modelList": "Lista modeli", + "provider": "Dostawca usług", + "providerSetting": "Ustawienia usługodawcy", + "selectModel": "Wybierz model", + "form": { + "id": { + "label": "Identyfikator" + } + }, + "modelConfig": { + "cancel": "Anuluj", + "contextLength": { + "description": "Ustaw długość kontekstu, którą może obsłużyć model", + "label": "Długość kontekstu" + }, + "description": "Należy pamiętać, że ta konfiguracja dotyczy tylko bieżącego modelu i nie ma wpływu na inne modele. Modyfikuj go ostrożnie. Nieprawidłowe parametry mogą spowodować nieprawidłowe działanie modelu.", + "name": { + "label": "Nazwa modelu", + "description": "Wyświetlana nazwa modelu", + "placeholder": "Wprowadź nazwę modelu", + "required": "Nazwa modelu jest wymagana", + "readonly": "Nazwa modelu (tylko do odczytu)" + }, + "id": { + "label": "Identyfikator modelu", + "description": "Unikalny identyfikator modelu", + "placeholder": "Wprowadź identyfikator modelu", + "required": "Wymagany jest identyfikator modelu", + "readonly": "Identyfikator modelu (tylko do odczytu)", + "duplicate": "Model o tym identyfikatorze już istnieje" + }, + "createTitle": "Dodaj model niestandardowy", + "editTitle": "Edytuj konfigurację modelu — {name}", + "speechRecognition": { + "label": "Rozpoznawanie mowy", + "description": "Określa, czy ten model umożliwia wprowadzanie głosowe z lokalną transkrypcją mowy na tekst." + }, + "functionCall": { + "description": "Czy model natywnie obsługuje wywołania funkcji (DeepChat będzie automatycznie symulował wywołania funkcji po wyłączeniu tej opcji)", + "label": "Wywołania funkcji" + }, + "maxTokens": { + "description": "Ustaw maksymalną liczbę tokens dla pojedynczego wyjścia modelu", + "label": "Maksymalna długość wyjściowa" + }, + "reasoning": { + "description": "Model ten wspiera rozumowanie", + "label": "Umiejętność rozumowania" + }, + "reasoningToggle": { + "description": "Określa, czy dla tego modelu jest domyślnie włączone wnioskowanie", + "label": "Włącz rozumowanie" + }, + "interleavedThinking": { + "label": "Przeplatane myślenie", + "description": "Kontroluje, czy ten model obsługuje rozumowanie i komunikaty wywołań narzędzi za pomocą myślenia przeplatanego. Domyślne ustawienia dostawcy są stosowane automatycznie." + }, + "thinkingBudget": { + "label": "Myślący budżet", + "description": "Ustaw maksymalną długość token procesu myślenia, aby kontrolować głębokość rozumowania", + "placeholder": "Wprowadź wartość budżetu myślącego", + "range": "Zakres: {min} - {max}", + "validation": { + "required": "Wprowadź wartość budżetu myślącego", + "minValue": "Myślenie, że wartość budżetu jest poniżej minimum", + "maxValue": "Myśląca wartość budżetu nie może przekroczyć {max}" + } + }, + "resetConfirm": { + "confirm": "Potwierdź reset", + "message": "Czy na pewno chcesz zresetować konfigurację tego modelu do ustawień domyślnych? \nTa operacja jest nieodwołalna.", + "title": "Potwierdź reset" + }, + "reasoningEffort": { + "label": "Wysiłek rozumowania", + "description": "Kontroluje głębokość rozumowania modelu; większy wysiłek daje lepsze rezultaty, ale wolniejsze reakcje", + "placeholder": "Wybierz wysiłek rozumowania", + "options": { + "none": "Brak – brak uzasadnienia", + "minimal": "Minimalna — najszybsza reakcja", + "low": "Niski — niski wysiłek", + "medium": "Średni - Umiarkowany wysiłek", + "high": "Wysoki - duży wysiłek", + "xhigh": "XHigh - Maksymalny wysiłek", + "max": "Max - Maksymalny wysiłek" + } + }, + "verbosity": { + "label": "Szczegółowość", + "description": "Kontroluje poziom szczegółowości i długość odpowiedzi modelu", + "placeholder": "Wybierz poziom szczegółowości", + "options": { + "low": "Niski — zwięzłe odpowiedzi", + "medium": "Średni — zrównoważone szczegóły", + "high": "Wysoki - szczegółowe odpowiedzi" + } + }, + "resetToDefault": "Przywróć ustawienia domyślne", + "saveConfig": "Zapisz konfigurację", + "useModelDefault": "Użyj domyślnej konfiguracji modelu", + "currentUsingModelDefault": "Obecnie korzystam z domyślnej konfiguracji modelu", + "temperature": { + "description": "Kontroluj losowość wyjścia. Większość modeli ma wartość 0-1, a niektóre obsługują wartości w zakresie 0-2. Wyższe wartości zwiększają losowość.", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 ustala temperaturę na {enabled}, gdy myślenie jest włączone, i {disabled}, gdy jest wyłączone.", + "label": "Temperatura" + }, + "title": "Niestandardowe parametry modelu", + "type": { + "description": "Wybierz typ modelu", + "label": "Typ modelu", + "options": { + "chat": "Model języka", + "embedding": "Model osadzania", + "imageGeneration": "Model generowania obrazu", + "rerank": "Zmień rangę modelu", + "videoGeneration": "Model generowania wideo" + } + }, + "validation": { + "contextLengthMax": "Długość kontekstu nie może przekraczać 10000000", + "contextLengthMin": "Długość kontekstu musi być większa niż 0", + "contextLengthRequired": "Długość kontekstu nie może być pusta", + "maxTokensMax": "Maksymalna długość wyjściowa nie może przekraczać 1000000", + "maxTokensMin": "Maksymalna długość wyjściowa musi być większa niż 0", + "maxTokensRequired": "Maksymalna długość wyjściowa nie może być pusta", + "temperatureMax": "Temperatura musi być mniejsza lub równa 2", + "temperatureMin": "Temperatura musi być większa lub równa 0", + "temperatureRequired": "Temperatura nie może być pusta", + "timeoutMin": "Limit czasu żądania musi wynosić co najmniej 1000 ms", + "timeoutMax": "Limit czasu żądania nie może przekroczyć 3600000 ms" + }, + "vision": { + "description": "Czy model obsługuje zdolności wizualne?", + "label": "Zdolność wizualna" + }, + "apiEndpoint": { + "description": "Wybierz punkt końcowy OpenAI API używany przez ten model.", + "label": "Punkt końcowy API", + "options": { + "chat": "Generacja tekstu", + "image": "Generowanie obrazu", + "video": "Generowanie wideo" + } + }, + "endpointType": { + "label": "Typ punktu końcowego", + "description": "Wybierz protokół przesyłania danych, którego nowy API powinien używać dla tego modelu.", + "placeholder": "Wybierz typ punktu końcowego", + "required": "Typ punktu końcowego jest wymagany", + "options": { + "openai": "Czat OpenAI", + "openai-response": "Odpowiedzi OpenAI", + "anthropic": "Wiadomości Anthropic", + "gemini": "Gemini Natywny", + "image-generation": "Generowanie obrazu", + "video-generation": "Generowanie wideo" + } + }, + "reasoningVisibility": { + "label": "Widoczność rozumowania", + "description": "Określa, czy treść rozumowania jest pomijana, czy wyświetlana w postaci podsumowanych notatek, gdy włączone jest rozumowanie", + "placeholder": "Wybierz widoczność rozumowania", + "options": { + "omitted": "Pominięte — ukryj treść uzasadnienia", + "summarized": "Podsumowanie — wyświetla podsumowanie uzasadnienia" + } + }, + "timeout": { + "label": "Limit czasu żądania (ms)", + "description": "Ustaw limit czasu dla żądania pojedynczego modelu. Jeśli zostanie przekroczony, żądanie zostanie przerwane." + }, + "imageGeneration": { + "default": "Domyślne", + "size": { + "label": "Rozmiar obrazu", + "custom": "Niestandardowe", + "placeholder": "np. 2048x2048", + "experimental": "Rozmiary powyżej 2560x1440 są oznaczone jako eksperymentalne przez OpenAI.", + "validation": { + "invalid_format": "Użyj formatu {width}x{height}.", + "invalid_multiple": "Szerokość i wysokość muszą być wielokrotnościami 16.", + "side_too_large": "Szerokość i wysokość muszą wynosić 3840 pikseli lub mniej.", + "aspect_ratio_too_large": "Długi bok nie może być większy niż 3 razy krótszy bok.", + "pixel_count_out_of_range": "Całkowita liczba pikseli musi mieścić się w przedziale od 655360 do 8294400." + } + }, + "quality": { + "label": "Jakość", + "options": { + "low": "Niski", + "medium": "Średni", + "high": "Wysoka", + "auto": "Automat" + } + }, + "outputFormat": { + "label": "Format wyjściowy", + "options": { + "png": "PNG", + "jpeg": "JPG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "Kompresja", + "placeholder": "Wartość domyślna: 100", + "validation": "Kompresja musi być liczbą całkowitą od 0 do 100." + }, + "background": { + "label": "Tło", + "options": { + "auto": "Automat", + "opaque": "Nieprzezroczysty" + } + }, + "moderation": { + "label": "Umiarkowanie", + "options": { + "auto": "Automat", + "low": "Niski" + } + } + }, + "videoGeneration": { + "size": { + "label": "Rozmiar ramy", + "placeholder": "np. 1280x720" + }, + "seconds": { + "label": "Sekundy", + "placeholder": "np. 5" + }, + "duration": { + "label": "Czas trwania", + "placeholder": "np. 5", + "description": "Wysłane za pośrednictwem extra_body.duration dla zgodnych punktów końcowych wideo." + }, + "ratio": { + "label": "Proporcje", + "placeholder": "np. 16:9" + }, + "resolution": { + "label": "Rozdzielczość", + "placeholder": "np. 720p" + }, + "watermark": { + "label": "Znak wodny", + "description": "Zażądaj znaku wodnego po stronie dostawcy, jeśli obsługuje go nadrzędny punkt końcowy." + }, + "generateAudio": { + "label": "Generuj dźwięk", + "description": "Poproś o ścieżkę audio wraz z wygenerowanym wideo, jeśli jest obsługiwana." + } + } + } + }, + "provider": { + "search": "Platformy dostawców wyszukiwania…", + "enable": "Włącz usługę", + "enabled": "Włączone", + "disabled": "Niepełnosprawny", + "urlPlaceholder": "Proszę wpisać API URL", + "keyPlaceholder": "Proszę wpisać API Key", + "accessKeyIdPlaceholder": "Wprowadź identyfikator klucza dostępu AWS", + "secretAccessKeyPlaceholder": "Wprowadź tajny klucz dostępu AWS", + "regionPlaceholder": "Wprowadź region AWS", + "vertexProjectId": "Identyfikator projektu", + "vertexProjectIdPlaceholder": "Wprowadź identyfikator projektu w chmurze Google", + "vertexLocation": "obszar", + "vertexLocationPlaceholder": "Proszę podać region (np. us-central1)", + "vertexServiceEmail": "Adres e-mail konta usługi", + "vertexServiceEmailPlaceholder": "Wprowadź adres e-mail konta usługi", + "vertexPrivateKey": "Klucz prywatny konta usługi", + "vertexPrivateKeyPlaceholder": "Wklej klucz prywatny (obsługuje pojedynczą linię \\n)", + "vertexApiVersion": "Wersja API", + "vertexEndpointMode": "tryb punktu końcowego", + "vertexEndpointStandard": "Standard (punkt końcowy regionu)", + "vertexEndpointExpress": "Express (globalny punkt końcowy)", + "verifyKey": "Zweryfikuj klucz", + "howToGet": "Jak zdobyć", + "getKeyTip": "Proszę odwiedzić", + "getKeyTipEnd": "aby uzyskać API Key", + "urlFormat": "API Przykład: {defaultUrl}", + "urlFormatFill": "Wypełnij API URL", + "openaiResponsesNotice": "OpenAI domyślnie odpowiada odpowiedziom API. Jeśli punkt końcowy innej firmy obsługuje tylko uzupełnienia czatu, użyj dostawcy uzupełnień OpenAI.", + "modifyBaseUrl": "Modyfikuj", + "baseUrlLockedHint": "Ten dostawca jest przypięty do zalecanej wersji Base URL, aby ograniczyć błędną konfigurację.", + "refreshModelsWithMetadataHint": "Odświeżenie tego dostawcy spowoduje najpierw zsynchronizowanie metadanych nadrzędnych, a następnie odbudowanie listy modeli lokalnych.", + "modelList": "Lista modeli", + "enableModels": "Włącz modele", + "disableAllModels": "Wyłącz wszystkie modele", + "modelsEnabled": "Modele zostały włączone", + "noModelsEnabled": { + "title": "Brak włączonych modeli", + "description": "Kliknij przycisk „Włącz modele”, aby ręcznie wybrać modele, których chcesz użyć." + }, + "verifyLink": "Zweryfikuj łącze", + "syncModelsFailed": "Nie udało się zsynchronizować modeli...", + "addCustomProvider": "Dodaj dostawcę niestandardowego", + "delete": "Usuń", + "stopModel": "Zatrzymaj model", + "pulling": "Ciągnięcie...", + "runModel": "Uruchom model", + "dialog": { + "disableModel": { + "title": "Potwierdź wyłączenie modelu", + "content": "Czy na pewno chcesz wyłączyć model „{name}”?", + "confirm": "Wyłącz" + }, + "disableAllModels": { + "title": "Potwierdź wyłączenie wszystkich modeli", + "content": "Czy na pewno chcesz wyłączyć wszystkie modele?", + "confirm": "Wyłącz wszystko" + }, + "configModels": { + "title": "Skonfiguruj listę modeli", + "description": "Wybierz modele, które chcesz włączyć lub wyłączyć" + }, + "verify": { + "missingFields": "Proszę wpisać API Key i API URL", + "failed": "Weryfikacja nie powiodła się", + "success": "Weryfikacja przebiegła pomyślnie", + "failedDesc": "Weryfikacja klucza API lub konfiguracji nie powiodła się. Sprawdź swoją konfigurację", + "successDesc": "Klucz i konfiguracja API zostały pomyślnie zweryfikowane i są gotowe do użycia", + "connectionError": "Błąd połączenia. Sprawdź połączenie sieciowe i adres API", + "serverError": "Błąd serwera. Spróbuj ponownie później", + "unauthorized": "Uwierzytelnienie nie powiodło się, API Key jest nieprawidłowy lub wygasł" + }, + "addCustomProvider": { + "title": "Dodaj dostawcę niestandardowego", + "description": "Proszę podać niezbędne informacje dla dostawcy", + "name": "Imię", + "namePlaceholder": "Proszę wprowadzić nazwę dostawcy", + "apiType": "Typ API", + "apiTypePlaceholder": "Proszę wybrać typ API", + "apiKey": "API Key", + "apiKeyPlaceholder": "Proszę wprowadzić klucz API", + "baseUrl": "API Podstawa URL", + "baseUrlPlaceholder": "Wprowadź bazę API URL", + "enable": "Włącz dostawcę" + }, + "providerDeeplinkImport": { + "title": "Dostawca importu", + "description": "Przed zastosowaniem przejrzyj przeanalizowaną konfigurację dostawcy.", + "type": "Wpisz", + "url": "URL", + "key": "Klucz", + "overwriteWarning": "Ten import zastąpi bieżącą konfigurację dostawcy.", + "confirming": "Importowanie..." + }, + "baseUrlUnlock": { + "title": "Potwierdź zmianę podstawowego URL", + "description": "Nie zaleca się zmiany podstawowego URL dla tego dostawcy. Nieprawidłowy punkt końcowy może powodować błędy żądań lub inne nieoczekiwane zachowanie. Nadal możesz kontynuować, jeśli rozumiesz ryzyko.", + "confirm": "Kontynuuj" + }, + "deleteProvider": { + "title": "Potwierdź usunięcie dostawcy", + "content": "Czy na pewno chcesz usunąć dostawcę „{name}”? Tej akcji nie można cofnąć.", + "confirm": "Usuń" + }, + "deleteModel": { + "title": "Potwierdź usunięcie modelu", + "content": "Czy na pewno chcesz usunąć model „{name}”? Tej akcji nie można cofnąć.", + "confirm": "Usuń" + }, + "pullModel": { + "title": "Pociągnij model", + "description": "Wybierz modele do pobrania lokalnie", + "pull": "Pociągnij" + }, + "modelCheck": { + "title": "Kontrola modelu", + "description": "Wybierz model, aby przetestować łączność i dostępność", + "model": "Wybierz Model", + "modelPlaceholder": "Wybierz model do przetestowania", + "test": "Rozpocznij test", + "checking": "Testowanie...", + "success": "Test modelu udany", + "failed": "Test modelu nie powiódł się", + "noModels": "Brak dostępnych modeli tego dostawcy" + } + }, + "pullModels": "Modele ciągnione", + "refreshModels": "Odśwież modele", + "modelsRunning": "Modele biegowe", + "runningModels": "Modele biegowe", + "noRunningModels": "Brak modeli do biegania", + "deleteModel": "Usuń model", + "deleteModelConfirm": "Czy na pewno chcesz usunąć model „{name}”? Tej akcji nie można cofnąć.", + "noLocalModels": "Brak modeli lokalnych", + "localModels": "Modele lokalne", + "azureApiVersion": "Wersja API", + "safety": { + "title": "Ustawienia bezpieczeństwa", + "blockHighest": "Blokuj wysokie ryzyko", + "blockMost": "Blokuj średnie ryzyko", + "blockNone": "Nie zablokowane", + "blockSome": "Blokuj niskie ryzyko" + }, + "serverList": "Lista serwerów", + "totalServers": "Całkowita liczba serwerów", + "addServer": "Dodaj serwer", + "autoStart": "Automatyczne uruchamianie", + "githubCopilotAuth": "Autoryzacja GitHub Copilot", + "githubCopilotConnected": "GitHub Copilot Połączono", + "githubCopilotNotConnected": "GitHub Copilot niepodłączony", + "loginWithGitHub": "Zaloguj się za pomocą GitHuba", + "loggingIn": "Logowanie...", + "githubCopilotClientId": "Niestandardowy identyfikator klienta", + "githubCopilotClientIdHint": "Opcjonalne. Pozostaw puste, aby użyć wbudowanego domyślnego identyfikatora klienta. Wpływa tylko na autoryzację GitHub Copilot.", + "githubCopilotLoginTip": "Autoryzuj DeepChat, aby uzyskać dostęp do subskrypcji GitHub Copilot. Aby uzyskać dostęp do Copilot API, wymagane są uprawnienia „read:user” i „read:org”.", + "loginSuccess": "Logowanie powiodło się", + "loginFailed": "Logowanie nie powiodło się", + "tokenValid": "Token jest prawidłowy", + "tokenInvalid": "Token jest nieprawidłowy", + "disconnect": "Rozłącz", + "disconnected": "Rozłączono pomyślnie", + "disconnectFailed": "Rozłączenie nie powiodło się", + "keyStatus": { + "remaining": "Pozostały limit", + "usage": "Używany" + }, + "refreshingModels": "Orzeźwiający...", + "toast": { + "modelRunning": "Model działa", + "modelRunningDesc": "Najpierw zatrzymaj model {model}, a następnie go usuń.", + "backupSuccessTitle": "Kopia zapasowa ukończona", + "backupSuccessMessage": "Kopia zapasowa zapisana w {time} ({size})", + "importSuccessTitle": "Import zakończony", + "importSuccessMessage": "Pomyślnie zaimportowano rozmowy {count}", + "refreshModelsSuccessTitle": "Modele odświeżone", + "refreshModelsSuccessDescription": "Dla tego dostawcy zsynchronizowano najnowszą listę modeli.", + "refreshModelsSuccessDescriptionWithMetadata": "Dla tego dostawcy zsynchronizowano metadane nadrzędne i najnowszą listę modeli.", + "refreshModelsFailedTitle": "Odświeżanie nie powiodło się", + "refreshModelsFailedDescription": "Nie można teraz odświeżyć modeli dla tego dostawcy. Spróbuj ponownie później.", + "refreshModelsFailedDescriptionWithMetadata": "Nie można teraz odświeżyć metadanych i modeli nadrzędnych dla tego dostawcy. Spróbuj ponownie później." + }, + "modelscope": { + "mcpSync": { + "title": "Synchronizuj usługi MCP", + "description": "Synchronizuj serwery MCP z ModelScope z konfiguracją lokalną, umożliwiając szybkie dodanie popularnych narzędzi MCP.", + "sync": "Rozpocznij synchronizację", + "syncing": "Synchronizowanie...", + "pageSize": "Rozmiar strony", + "imported": "Zaimportowane usługi {count}", + "skipped": "Pominięte usługi {count}", + "errors": "Błędy {count}", + "errorDetails": "Szczegóły błędu", + "noApiKey": "Najpierw skonfiguruj ModelScope API Key", + "noServersFound": "Nie znaleziono dostępnych usług MCP", + "authenticationFailed": "Uwierzytelnienie nie powiodło się, sprawdź API Key", + "convertingServers": "Konwersja konfiguracji serwera...", + "fetchingServers": "Pobieranie listy serwerów MCP...", + "importingServers": "Importowanie konfiguracji serwera...", + "noOperationalUrls": "Nie znaleziono dostępnego adresu operacyjnego", + "pageNumber": "numer strony", + "pageNumberPlaceholder": "Proszę podać numer strony", + "serverAlreadyExists": "Serwer już istnieje, pomiń import", + "syncComplete": "Synchroniczne zakończenie", + "invalidServerData": "Nieprawidłowe dane serwera" + }, + "apiKey": "API Key", + "apiKeyHelper": "Zdobądź API Key w konsoli ModelScope", + "apiKeyPlaceholder": "Proszę wpisać ModelScope API Key", + "baseUrl": "Adres API", + "baseUrlHelper": "Adres serwisowy ModelScope API", + "connected": "Połączono", + "connecting": "Łączenie...", + "description": "ModelScope to platforma udostępniania modelu jako usługi uruchomiona przez Alibaba Damo Academy", + "details": { + "apiConfig": "Konfiguracja API", + "mcpSync": "Synchronizacja MCP", + "modelManagement": "Zarządzanie modelami", + "operationalDescription": "Synchronizuj serwery MCP, których można używać bezpośrednio na platformie ModelScope", + "operationalServers": "Obsługa serwera", + "rateLimitConfig": "Konfiguracja limitu szybkości", + "safetySettings": "Ustawienia zabezpieczeń", + "specialConfig": "Specjalna konfiguracja", + "syncFromModelScope": "Synchronizuj z ModelScope", + "title": "Szczegóły ustawień dostawcy" + }, + "invalidKey": "Nieprawidłowy API Key", + "keyRequired": "Proszę wpisać API Key", + "name": "ModelScope", + "networkError": "Błąd połączenia sieciowego", + "notConnected": "Nie podłączony", + "verifyFailed": "Weryfikacja nie powiodła się", + "verifySuccess": "Weryfikacja przebiegła pomyślnie" + }, + "tts": { + "title": "Zamiana tekstu na mowę (TTS)", + "description": "Generuj mowę z tekstu. Brzmienia znajdują się na poniższej liście modeli.", + "audioFormat": { + "label": "Format dźwięku", + "placeholder": "Wybierz format", + "helper": "W większości przypadków zalecany jest format MP3." + }, + "language": { + "label": "Język", + "placeholder": "np. pl", + "helper": "Obsługiwane: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "Model TTS", + "placeholder": "Voiceai-tts-v1-latest", + "helper": "Obsługiwane modele znajdziesz w dokumentacji Voice.ai." + }, + "agentId": { + "label": "Identyfikator głosu Agent", + "placeholder": "Wklej identyfikator agenta głosowego", + "helper": "Wymagane do połączeń głosowych w czasie rzeczywistym." + }, + "temperature": { + "label": "Temperatura", + "helper": "Kontroluje losowość (0-2)." + }, + "topP": { + "label": "Góra P", + "helper": "Próbkowanie jądra (0-1)." + } + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "configurationSaved": "Konfiguracja została zapisana", + "configurationUpdated": "Konfiguracja zaktualizowana", + "dataRefreshed": "Dane zostały odświeżone", + "operationFailed": "Operacja nie powiodła się", + "operationSuccess": "Operacja zakończyła się sukcesem", + "settingsApplied": "Zastosowano ustawienia", + "bedrockLimitTip": "* Obsługiwane tylko Anthropic Claude (w tym modele Opus, Sonnet, Haiku)", + "bedrockVerifyTip": "DeepChat wykorzystuje do weryfikacji sonet Claude 3.5. Jeśli nie masz uprawnień do wywoływania, weryfikacja zakończy się niepowodzeniem. Nie ma to wpływu na użytkowanie innych modeli.", + "center": { + "title": "Centrum dostawców", + "description": "Zarządzaj połączeniami dostawców, modelami i zaawansowaną konfiguracją.", + "noApiUrl": "Nie skonfigurowano API URL", + "enabledModels": "Włączono modele {count}", + "noAdvancedConfig": "Ten dostawca nie ma dodatkowej zaawansowanej konfiguracji.", + "status": { + "connected": "Połączono", + "keyMissing": "Brak klucza", + "disabled": "Niepełnosprawny", + "local": "Lokalny" + }, + "tabs": { + "connection": "Połącz", + "models": "Modele", + "advanced": "Zaawansowane" + } + } + }, + "knowledgeBase": { + "title": "Ustawienia bazy wiedzy", + "addKnowledgeBase": "Dodaj bazę wiedzy", + "selectKnowledgeBaseType": "Wybierz typ bazy wiedzy, którą chcesz dodać", + "difyDescription": "Baza wiedzy Dify pomaga zarządzać danymi dokumentów i wykorzystywać je", + "comingSoon": "Już wkrótce", + "featureNotAvailable": "Ta funkcja nie jest jeszcze dostępna", + "addDifyConfig": "Dodaj konfigurację Dify", + "apiKey": "API Key", + "datasetId": "Identyfikator zbioru danych", + "endpoint": "Punkt końcowy API", + "configAdded": "Dodano konfigurację", + "configAddedDesc": "Konfiguracja {name} została pomyślnie dodana", + "addConfig": "Dodaj konfigurację", + "moreComingSoon": "Więcej typów baz wiedzy już wkrótce", + "configUpdated": "Konfiguracja zaktualizowana", + "configUpdatedDesc": "Konfiguracja {name} została pomyślnie zaktualizowana", + "descriptionPlaceholder": "Przykład: Baza wiedzy dotycząca dokumentacji produktów firmy", + "ragflowTitle": "Baza wiedzy RAGFlow", + "ragflowDescription": "RAGFlow to potężny system zarządzania bazą wiedzy, który obsługuje wiele metod wyszukiwania i funkcji zarządzania dokumentami.", + "addRagflowConfig": "Dodaj konfigurację RAGFlow", + "editRagflowConfig": "Edytuj konfigurację RAGFlow", + "dify": "Baza wiedzy Dify", + "editDifyConfig": "Zmodyfikuj konfigurację Dify", + "fastgptTitle": "Baza wiedzy FastGPT", + "fastgptDescription": "FastGPT to potężny system zarządzania bazą wiedzy, który obsługuje wiele metod wyszukiwania i funkcji zarządzania dokumentami.", + "addFastGptConfig": "Dodaj konfigurację FastGPT", + "editFastGptConfig": "Edytuj konfigurację FastGPT", + "builtInKnowledgeDescription": "Wbudowana baza wiedzy zapewnia kilka prostych implementacji, które umożliwiają wykonanie niektórych podstawowych funkcji w środowisku offline.", + "builtInKnowledgeTitle": "Wbudowana baza wiedzy", + "addBuiltinKnowledgeConfig": "Dodaj wbudowaną konfigurację bazy wiedzy", + "editBuiltinKnowledgeConfig": "Edytuj wbudowaną konfigurację bazy wiedzy", + "chunkSize": "Rozmiar bloku", + "chunkSizeHelper": "Potnij dokument na segmenty, rozmiar każdego segmentu nie może przekraczać limitu kontekstu modelu", + "chunkOverlap": "Nakładający się rozmiar", + "chunkOverlapHelper": "Ilość treści powtarzanych pomiędzy sąsiednimi blokami tekstu zapewnia, że nadal istnieje kontekstowe połączenie pomiędzy podzielonymi na segmenty blokami tekstu, poprawiając ogólny efekt przetwarzania modelu długich tekstów", + "selectEmbeddingModel": "Wybierz model osadzania", + "modelNotFound": "Nie znaleziono dostawcy usług {provider} lub modelu {model}", + "modelNotFoundDesc": "Upewnij się, że model jest poprawnie skonfigurowany i że jest włączony. \nKonfigurację modelu możesz sprawdzić w ustawieniach usługodawcy.", + "removeBuiltinKnowledgeConfirmDesc": "Usunięcie wbudowanej konfiguracji bazy wiedzy spowoduje usunięcie wszystkich istotnych danych i nie będzie można ich przywrócić. Proszę zachować ostrożność.", + "removeBuiltinKnowledgeConfirmTitle": "Potwierdzić usunięcie wbudowanej bazy wiedzy {name}?", + "descriptionDesc": "Opis bazy wiedzy, aby sztuczna inteligencja zdecydowała, czy pobrać tę bazę wiedzy", + "advanced": "Opcje zaawansowane", + "autoDetectDimensions": "Automatycznie wykrywaj osadzone wymiary", + "autoDetectHelper": "Automatycznie wykrywa osadzone wymiary, zużywa niewielką ilość Tokens", + "chunkOverlapPlaceholder": "Wartość domyślna, nie zaleca się modyfikacji", + "chunkSizePlaceholder": "Wartość domyślna, nie zaleca się modyfikacji", + "dimensions": "Osadzić wymiary", + "dimensionsPlaceholder": "Osadź rozmiar wymiaru, na przykład 1024", + "selectEmbeddingModelHelper": "Osadzanie modeli jest zabronione po utworzeniu bazy wiedzy", + "dimensionsHelper": "Upewnij się, że model obsługuje ustawiony rozmiar wymiaru osadzenia", + "autoDetectDimensionsError": "Automatycznie wykrywaj awarię wymiaru osadzonego", + "fragmentsNumber": "Liczba żądanych fragmentów dokumentu", + "fragmentsNumberHelper": "Im więcej fragmentów żądanego dokumentu, tym więcej zawiera informacji, ale tym więcej tokens należy wykorzystać", + "selectRerankModel": "Wybierz model zmiany rangi", + "rerankModel": "Zmień kolejność modelu", + "embeddingModel": "Osadź model", + "return": "wrócić", + "uploadHelper": "Kliknij, aby przesłać lub przeciągnij plik tutaj", + "fileSupport": "Obsługa innych formatów {accept} i {count}", + "searchKnowledge": "Przeszukaj bazę wiedzy", + "searchKnowledgePlaceholder": "Proszę wpisać treść zapytania", + "noData": "Brak danych", + "file": "dokument", + "uploadProcessing": "Przesyłanie", + "uploadCompleted": "Przesyłanie zakończone", + "reAdd": "Prześlij ponownie", + "uploadError": "Przesyłanie nie powiodło się", + "delete": "usuń", + "reason": "powód", + "deleteSuccess": "Usuń pomyślnie", + "copy": "kopia", + "copySuccess": "Skopiuj pomyślnie", + "source": "źródło", + "normalized": "Normalizacja L2", + "normalizedHelper": "Proszę potwierdzić, że model obsługuje normalizację wektorów wyjściowych L2", + "dialog": { + "beforequit": { + "cancel": "Anuluj", + "confirm": "potwierdź", + "title": "Potwierdzenie wyjścia", + "description": "Istnieje działające zadanie bazy wiedzy. Czy na pewno chcesz zamknąć oprogramowanie? \nPrzerwane zadania można przywrócić po ponownym uruchomieniu oprogramowania." + } + }, + "searchError": "Zapytanie nie powiodło się", + "processing": "Przesyłanie", + "paused": "Wstrzymaj przesyłanie", + "unknown": "Nieznany stan", + "reAddFile": { + "title": "Potwierdzenie ponownego przesłania", + "content": "Czy na pewno chcesz ponownie przesłać plik „{fileName}”?" + }, + "nowledgeMem": { + "title": "Eksport pamięci Nowledge", + "description": "Eksportuj rozmowy do usługi Nowledge Mem.", + "testConnection": "Połączenie testowe", + "configuration": "Konfiguracja", + "baseUrl": "Baza URL", + "apiKey": "API Key", + "apiKeyHint": "Opcjonalne. Jeśli Twoja usługa wymaga klucza API, wprowadź go tutaj.", + "timeout": "Limit czasu", + "saveConfig": "Zapisz", + "resetConfig": "Zresetuj", + "seconds": "sekundy" + }, + "deleteFile": { + "title": "Potwierdzenie usunięcia pliku", + "content": "Czy na pewno chcesz usunąć plik „{fileName}”? \nTa operacja nie zostanie przywrócona." + }, + "resumeAllPausedTasks": "Odzyskiwanie jednym kliknięciem", + "pauseAllRunningTasks": "Pauza jednym kliknięciem", + "separators": "Separator blokowy", + "separatorsHelper": "Separator segmentacji dokumentu, pojedynczy ogranicznik jest ujęty w podwójny cudzysłów („”), a ograniczniki oddziela się przecinkami (,)", + "invalidSeparators": "Nieprawidłowy separator", + "selectLanguage": "Wybierz ustawienie wstępne", + "separatorsPreset": "Ładowanie ustawień wstępnych" + }, + "mcp": { + "title": "Ustawienia MCP", + "description": "Zarządzaj i konfiguruj serwery i narzędzia MCP (Model Context Protocol).", + "enabledTitle": "Włącz MCP", + "enabledDescription": "Włącz lub wyłącz funkcjonalność i narzędzia MCP", + "enableToAccess": "Włącz MCP, aby uzyskać dostęp do opcji konfiguracji", + "marketplace": "Przejdź do MCP Market, aby zainstalować jednym kliknięciem", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Szczegóły techniczne", + "httpServer": "Serwer HTTP", + "localProcess": "Proces lokalny", + "restartServer": "Uruchom ponownie serwer", + "viewLogs": "Wyświetl dzienniki", + "starting": "Rozpoczęcie", + "error": "Błąd", + "tabs": { + "servers": "Serwery", + "tools": "Narzędzia", + "prompts": "Prompt", + "resources": "Zasoby" + }, + "serverList": "Lista serwerów", + "totalServers": "Całkowita liczba serwerów", + "addServer": "Dodaj serwer", + "running": "Bieganie", + "stopped": "Zatrzymany", + "stopServer": "Zatrzymaj serwer", + "startServer": "Uruchom serwer", + "noServersFound": "Nie znaleziono serwerów", + "addServerDialog": { + "title": "Dodaj serwer", + "description": "Skonfiguruj nowy serwer MCP" + }, + "editServerDialog": { + "title": "Edytuj serwer", + "description": "Edytuj konfigurację serwera MCP" + }, + "serverForm": { + "name": "Nazwa serwera", + "namePlaceholder": "Wprowadź nazwę serwera", + "nameRequired": "Nazwa serwera jest wymagana", + "type": "Typ serwera", + "typePlaceholder": "Wybierz typ serwera", + "typeStdio": "Standardowe wejście i wyjście (Stdio)", + "typeSse": "Zdarzenia wysyłane przez serwer (SSE)", + "typeInMemory": "W pamięci", + "typeHttp": "Przesyłanie strumieniowe żądań HTTP (HTTP)", + "baseUrl": "Baza URL", + "baseUrlPlaceholder": "Wprowadź bazę serwera URL (np. http://localhost:3000)", + "command": "Polecenie", + "commandPlaceholder": "Wprowadź polecenie", + "commandRequired": "Wymagane jest polecenie", + "args": "Argumenty", + "argsPlaceholder": "Wprowadź jeden argument w każdym wierszu", + "addArg": "Dodaj argument", + "argPlaceholder": "Wprowadź wartość argumentu", + "argsRequired": "Argumenty są wymagane", + "env": "Zmienne środowiskowe", + "envPlaceholder": "Wprowadź zmienne środowiskowe w formacie JSON", + "envInvalid": "Zmienne środowiskowe muszą być poprawne JSON", + "description": "Opis", + "descriptionPlaceholder": "Wprowadź opis serwera", + "descriptions": "Opis", + "descriptionsPlaceholder": "Wprowadź opis serwera", + "icon": "Ikona", + "iconPlaceholder": "Wprowadź ikonę", + "icons": "Ikona", + "iconsPlaceholder": "Wprowadź ikonę", + "autoApprove": "Automatyczne zatwierdzanie", + "autoApproveAll": "Wszystko", + "autoApproveRead": "Przeczytaj", + "autoApproveWrite": "Napisz", + "autoApproveHelp": "Wybierz typy operacji, które mają być zatwierdzane automatycznie bez konieczności potwierdzania przez użytkownika", + "submit": "Prześlij", + "add": "Dodaj", + "update": "Aktualizacja", + "cancel": "Anuluj", + "jsonConfigIntro": "Możesz wkleić konfigurację JSON bezpośrednio lub wybrać opcję ręcznej konfiguracji serwera.", + "jsonConfig": "Konfiguracja JSON", + "jsonConfigPlaceholder": "Wklej konfigurację serwera MCP w formacie JSON", + "jsonConfigExample": "Przykład konfiguracji JSON", + "parseSuccess": "Konfiguracja została przeanalizowana", + "configImported": "Konfiguracja została zaimportowana pomyślnie", + "parseError": "Błąd analizy", + "skipToManual": "Przejdź do konfiguracji ręcznej", + "parseAndContinue": "Przeanalizuj i kontynuuj", + "jsonParseError": "Analiza JSON nie powiodła się", + "browseMarketplace": "Przeglądaj rynek MCP", + "imageModel": "Model wizji", + "customHeadersParseError": "Analiza nagłówka niestandardowego nie powiodła się", + "customHeaders": "Niestandardowe nagłówki żądań", + "clickToEdit": "Kliknij, aby edytować i wyświetlić pełną treść", + "invalidKeyValueFormat": "Nieprawidłowy format nagłówka żądania. Sprawdź, czy wprowadzone dane są prawidłowe.", + "npmRegistry": "Niestandardowy rejestr NPM", + "npmRegistryPlaceholder": "Skonfiguruj niestandardowy rejestr NPM, pozostaw systemowi automatyczny wybór najszybszego", + "browseHigress": "Zobacz rynek Higress MCP", + "selectFolderError": "Błąd wyboru folderu", + "folders": "Dozwolone foldery", + "addFolder": "Dodaj folder", + "noFoldersSelected": "Nie wybrano żadnych folderów", + "useE2B": "Włącz piaskownicę E2B", + "e2bDescription": "Wykonaj kod Pythona przy użyciu piaskownicy E2B", + "e2bApiKey": "Klucz API E2B", + "e2bApiKeyPlaceholder": "Wpisz tutaj swoje klucze API E2B, np. e2b_1111xx**********", + "e2bApiKeyHelp": "Przejdź do e2b.dev, aby uzyskać klucz ApiKey", + "e2bApiKeyRequired": "Aby włączyć funkcję E2B, należy wprowadzić ApiKey" + }, + "deleteServer": "Usuń serwer", + "editServer": "Edytuj serwer", + "setDefault": "Ustaw jako domyślny", + "removeDefault": "Usuń domyślne", + "isDefault": "Domyślny serwer", + "default": "Domyślne", + "setAsDefault": "Ustaw jako domyślny", + "removeServer": "Usuń serwer", + "autoStart": "Automatyczne uruchamianie", + "confirmRemoveServer": "Czy na pewno chcesz usunąć serwer {name}? Tej akcji nie można cofnąć.", + "removeServerDialog": { + "title": "Usuń serwer" + }, + "confirmDelete": { + "title": "Potwierdź usunięcie", + "description": "Czy na pewno chcesz usunąć serwer {name}? Tej akcji nie można cofnąć.", + "confirm": "Usuń", + "cancel": "Anuluj" + }, + "resetToDefault": "Przywróć ustawienia domyślne", + "resetConfirmTitle": "Zresetuj do serwerów domyślnych", + "resetConfirmDescription": "Spowoduje to przywrócenie wszystkich serwerów domyślnych przy zachowaniu serwerów niestandardowych. Wszelkie modyfikacje domyślnych serwerów zostaną utracone.", + "resetConfirm": "Zresetuj", + "builtInServers": "Wbudowane serwery", + "customServers": "Serwery niestandardowe", + "builtIn": "Wbudowany", + "cannotRemoveBuiltIn": "Nie można usunąć wbudowanego serwera", + "builtInServerCannotBeRemoved": "Wbudowanych serwerów nie można usunąć, można jedynie modyfikować parametry i zmienne środowiskowe", + "maxDefaultServersReached": "Można ustawić maksymalnie 3 serwery domyślne", + "removeDefaultFirst": "Najpierw usuń niektóre serwery domyślne", + "higressMarket": "Przejdź do instalacji Higress MCP", + "npmRegistry": { + "title": "Źródło NPM", + "currentSource": "Aktualne źródło", + "cached": "Buforowane", + "lastChecked": "Ostatnio sprawdzane", + "refresh": "Odśwież", + "advanced": "Zaawansowane", + "advancedSettings": "Ustawienia zaawansowane", + "advancedSettingsDesc": "Skonfiguruj zaawansowane opcje rejestru NPM, w tym automatyczne wykrywanie i niestandardowe ustawienia źródła", + "autoDetect": "Automatyczne wykrywanie optymalnego źródła", + "autoDetectDesc": "Automatycznie wykrywaj i używaj najszybszego rejestru NPM podczas uruchamiania", + "customSource": "Niestandardowe źródło", + "customSourcePlaceholder": "Wprowadź niestandardowy rejestr NPM URL", + "currentCustom": "Bieżące źródło niestandardowe", + "justNow": "Właśnie teraz", + "minutesAgo": "{minutes} minut temu", + "hoursAgo": "{hours} godziny temu", + "daysAgo": "{days} dni temu", + "refreshSuccess": "Rejestr NPM został pomyślnie odświeżony", + "refreshSuccessDesc": "Ponownie wykryto i zaktualizowano optymalny rejestr NPM", + "refreshFailed": "Odświeżenie rejestru NPM nie powiodło się", + "autoDetectUpdated": "Zaktualizowano ustawienie automatycznego wykrywania", + "autoDetectEnabled": "Włączono automatyczne wykrywanie optymalnego rejestru NPM", + "autoDetectDisabled": "Automatyczne wykrywanie wyłączone, użyje rejestru domyślnego", + "updateFailed": "Aktualizacja ustawień nie powiodła się", + "customSourceSet": "Niestandardowy zestaw źródeł", + "customSourceSetDesc": "Niestandardowy zestaw rejestru NPM: {registry}", + "customSourceCleared": "Niestandardowe źródło zostało usunięte", + "customSourceClearedDesc": "Niestandardowy rejestr NPM został wyczyszczony, nastąpi automatyczne wykrywanie", + "invalidUrl": "Nieprawidłowy URL", + "invalidUrlDesc": "Wprowadź prawidłowy adres HTTP lub HTTPS", + "testing": "Testowanie rejestru NPM", + "testingDesc": "Testowanie łączności z {registry}...", + "testFailed": "Test rejestru NPM nie powiódł się", + "testFailedDesc": "Nie można połączyć się z {registry}, błąd: {error}. Sprawdź, czy URL jest poprawny lub połączenie sieciowe.", + "redetectingOptimal": "Ponowne wykrywanie optymalnego rejestru NPM...", + "redetectComplete": "Ponowne wykrywanie zakończone", + "redetectCompleteDesc": "Wykryto i ustawiono bieżący optymalny rejestr NPM", + "redetectFailed": "Ponowne wykrycie nie powiodło się", + "redetectFailedDesc": "Nie można ponownie wykryć optymalnego rejestru, zostanie użyta konfiguracja domyślna" + }, + "managedServerReadOnly": "Usługa zarządzana DeepChat", + "managedServerReadOnlyDesc": "Zarządzaj włączaniem i uprawnieniami w ustawieniach wtyczki będącej właścicielem.", + "center": { + "title": "Centrum MCP", + "running": "Bieganie", + "builtIn": "Wbudowany", + "custom": "Niestandardowe", + "searchPlaceholder": "Wyszukaj serwery MCP...", + "noResults": "Brak pasujących serwerów MCP", + "command": "Polecenie / URL", + "filters": { + "all": "Wszystko", + "running": "Bieganie", + "stopped": "Zatrzymany", + "builtIn": "Wbudowany", + "custom": "Niestandardowe" + } + } + }, + "about": { + "title": "O nas", + "version": "Wersja", + "checkUpdate": "Sprawdź aktualizację", + "checking": "Sprawdzam...", + "latestVersion": "Najnowsza wersja" + }, + "display": { + "fontTitle": "Czcionki", + "fontFamily": "Czcionka interfejsu", + "fontFamilyDesc": "Wybierz podstawową czcionkę interfejsu użytkownika. Pozostaw puste, aby użyć wbudowanego stosu.", + "codeFontFamily": "Czcionka o stałej szerokości", + "codeFontFamilyDesc": "Dotyczy bloków kodu i wszelkich obszarów o stałej szerokości.", + "fontDefaultLabel": "Domyślny (wbudowany stos)", + "fontSearchPlaceholder": "Wyszukaj czcionki", + "fontSearchEmpty": "Brak pasujących czcionek", + "fontReset": "Przywróć ustawienia domyślne", + "fontSystemLoading": "Ładowanie czcionek systemowych...", + "fontUsageHint": "Niektóre interfejsy wymagają ponownego uruchomienia aplikacji, aby zaczęły działać. Jeśli czcionka jest niedostępna, automatycznie powróci do czcionki domyślnej.", + "fontSize": "Rozmiar tekstu", + "text-sm": "Mały", + "text-base": "Średni", + "text-lg": "Duży", + "text-xl": "Bardzo duży", + "text-2xl": "XX-duży", + "floatingButton": "Pływający przycisk", + "floatingButtonDesc": "Wyświetl na pulpicie pływający przycisk, aby szybko aktywować okno aplikacji" + }, + "shortcuts": { + "title": "Ustawienia klawiszy skrótów", + "pressKeys": "Naciśnij klawisze", + "pressEnterToSave": "Naciśnij Enter, aby zapisać, Esc, aby anulować", + "noModifierOnly": "Nie można używać samego klawisza modyfikującego jako skrótu", + "keyConflict": "Konflikt klawiszy skrótu. Wybierz inną kombinację", + "clearShortcut": "Wyczyść skrót", + "cleanHistory": "Wyczyść historię czatów", + "deleteConversation": "Usuń rozmowę", + "goSettings": "Otwórz Ustawienia", + "hideWindow": "Ukryj okno", + "quitApp": "Zamknij aplikację", + "toggleSidebar": "Przełącz pasek boczny", + "toggleWorkspace": "Przełącz obszar roboczy", + "zoomIn": "Powiększ ", + "zoomOut": "Pomniejsz ", + "zoomReset": "Zresetuj powiększenie", + "newWindow": "Otwórz nowe okno", + "showHideWindow": "Okno Show/Hide", + "newConversation": "Nowa rozmowa", + "quickSearch": "Wyszukiwanie w centrum uwagi", + "closeWindow": "Zamknij bieżące okno" + }, + "acp": { + "title": "ACP Agent", + "description": "Zarządzaj lokalnymi agentami protokołu klienta Agent uruchomionymi przez DeepChat.", + "enabledTitle": "Włącz AKP", + "enabledDescription": "Po włączeniu skonfigurowani agenci ACP pojawią się jako modele w selektorze.", + "useBuiltinRuntimeTitle": "Użyj wbudowanego środowiska wykonawczego DeepChat", + "useBuiltinRuntimeDescription": "Po włączeniu pomija polecenia węzła systemowego i uv, korzystając z dołączonych wersji DeepChat.", + "enableToAccess": "Włącz ACP, aby skonfigurować agentów.", + "registryInstallEntry": "Zainstaluj Agent", + "registryInstallEntryDescription": "Wyszukaj i zainstaluj agenty z rejestru ACP, a następnie wróć tutaj, aby je włączyć i skonfigurować.", + "addCustomAgent": "Dodaj niestandardowy Agent", + "customEmpty": "Nie ma jeszcze agentów niestandardowych.", + "customDeleteConfirm": "Usunąć niestandardowego agenta „{name}”?", + "builtinSectionTitle": "Wbudowany Agents", + "builtinSectionDescription": "Każdy wbudowany agent może mieć wiele profili uruchamiania. Na liście modeli pojawiają się tylko aktywni agenci z aktywnym profilem.", + "builtinHint": "Uruchom {name} z tymi ustawieniami.", + "disabledBadge": "Niepełnosprawny", + "manageProfiles": "Profile", + "addProfile": "Dodaj profil", + "activeProfile": "Aktywny profil", + "profilePlaceholder": "Wybierz profil", + "profileSwitched": "Profil został zmieniony", + "customSectionTitle": "Niestandardowy Agents", + "customSectionDescription": "Zawiń dowolne polecenie kompatybilne z ACP jako wpis modelu wielokrotnego użytku.", + "mcpAccessTitle": "Dozwolone serwery MCP", + "mcpAccessEmpty": "Obecnie nie ma opcjonalnego MCP.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "Udostępnione MCP", + "sharedMcpDescription": "Wszyscy agenci ACP mają ten sam wybór dostępu MCP.", + "installedSectionTitle": "Zainstalowano Agents", + "installedSectionDescription": "W tym miejscu pojawiają się tylko zainstalowani agenci rejestru do włączania, inspekcji i zastępowania środowiska.", + "installedCount": "Zainstalowano {count}", + "installedEmptyTitle": "Nie zainstalowano jeszcze agentów rejestru", + "installedEmptyDescription": "Najpierw zainstaluj agenta z rejestru ACP, a następnie skonfiguruj go tutaj.", + "registryOverlayEmpty": "Żaden agent nie pasuje do bieżących filtrów.", + "registryInstallAction": "Zainstaluj", + "registryUninstallAction": "Odinstaluj", + "registryUninstallConfirm": "Odinstalować „{name}”?", + "registryUninstallDescription": "DeepChat wyłączy tego agenta i wyczyści lokalnie zarządzane dane instalacji, jeśli ma to zastosowanie. Możesz zainstalować go ponownie później z rejestru ACP.", + "registryUninstallFailed": "Nie udało się odinstalować agenta", + "registryInstallTitle": "Rejestr AKP", + "registryInstallDescription": "Wyszukuj, filtruj i instaluj agentów ACP. Skonfiguruj je ponownie w ustawieniach po instalacji.", + "registryLearnMore": "Dowiedz się więcej", + "registryRepository": "Repozytorium", + "installFilters": { + "all": "Wszystko", + "installed": "Zainstalowany", + "notInstalled": "Nie zainstalowano" + }, + "loading": "Ładowanie danych ACP...", + "none": "Żadne", + "saveSuccess": "Konfiguracja została zapisana", + "saveFailed": "Nie udało się zapisać agenta", + "deleteSuccess": "Usunięto pomyślnie", + "initialize": "Zainicjuj", + "initializing": "Inicjowanie...", + "initializeDescription": "Terminal otwarty za pomocą poleceń inicjujących", + "initializeSuccess": "Rozpoczęto inicjalizację", + "initializeFailed": "Inicjalizacja nie powiodła się", + "missingFieldsTitle": "Wymagane jest imię i polecenie", + "missingFieldsDesc": "Przed zapisaniem wpisz nazwę i polecenie.", + "command": "Polecenie", + "commandPlaceholder": "Ścieżka pliku wykonywalnego lub skryptu", + "args": "Argumenty", + "argsPlaceholder": "Opcjonalne, oddzielone spacjami. Używaj cudzysłowów, aby łączyć argumenty.", + "env": "Zmienne środowiskowe", + "addEnv": "Dodaj zmienną", + "envKeyPlaceholder": "KLUCZ", + "envValuePlaceholder": "WARTOŚĆ", + "profileDialog": { + "addBuiltinTitle": "Dodaj profil {name}", + "editBuiltinTitle": "Edytuj profil {name}", + "addCustomTitle": "Dodaj niestandardowy Agent", + "editCustomTitle": "Edytuj niestandardowy Agent", + "builtinHint": "Użyj różnych ustawień wstępnych dla każdego scenariusza i przełączaj je w selektorze.", + "customHint": "Podaj polecenie, argumenty i zmienne env, aby uruchomić agenta.", + "profileName": "Nazwa profilu", + "profileNamePlaceholder": "np. Stacja robocza", + "agentName": "Nazwa Agent", + "agentNamePlaceholder": "np. Mój lokalny AKP" + }, + "profileManager": { + "title": "Profile", + "description": "Przełączaj, edytuj lub usuwaj zapisane profile uruchamiania.", + "count": "Profile {count}", + "empty": "Nie ma jeszcze profili.", + "active": "Aktywny", + "setActive": "Ustaw jako aktywny", + "deleteConfirm": "Usunąć profil „{name}”?", + "cannotDeleteTitle": "Zachowaj co najmniej jeden profil", + "cannotDeleteDesc": "Wbudowani agenci wymagają co najmniej jednej konfiguracji.", + "noAgent": "Wybierz agenta, aby zarządzać jego profilami." + }, + "terminal": { + "title": "Terminal inicjujący", + "waiting": "Oczekiwanie na rozpoczęcie inicjalizacji...", + "starting": "Rozpoczęcie inicjalizacji...", + "close": "Zamknij", + "closing": "Zamykam...", + "exitSuccess": "Proces zakończył się pomyślnie (kod zakończenia: {code})", + "exitError": "Proces zakończył się z błędem (kod zakończenia: {code})", + "processError": "Błąd procesu", + "paste": "Wklej", + "pasteError": "Nie udało się wkleić ze schowka", + "status": { + "idle": "Bezczynny", + "running": "Bieganie", + "completed": "Ukończono", + "error": "Błąd" + } + }, + "dependency": { + "title": "Brakujące zależności zewnętrzne", + "description": "Przed inicjalizacją należy zainstalować następujące zależności.", + "installCommands": "Polecenia instalacyjne", + "downloadUrl": "Pobierz łącze", + "copy": "Kopiuj", + "copied": "Skopiowano do schowka", + "copyFailed": "Nie udało się skopiować" + }, + "debug": { + "title": "Debugowanie AKP", + "description": "Wysyłaj nieprzetworzone wywołania ACP do „{name}” i obserwuj odpowiedzi.", + "entry": "Debuguj", + "workdirPlaceholder": "Użyj domyślnego agenta, jeśli jest pusty", + "close": "Zamknij", + "customMethod": "Nazwa metody niestandardowej", + "customMethodPlaceholder": "np. session/ping", + "payloadHint": "Przed wysłaniem dokonaj edycji treści JSON.", + "format": "Sformatuj JSON", + "resetTemplate": "Zresetuj szablon", + "clearHistory": "Wyczyść historię", + "send": "Wyślij prośbę", + "sending": "Wysyłanie...", + "processReady": "Proces gotowy", + "processNotReady": "Zainicjuj, aby rozpocząć", + "needInitialize": "Najpierw uruchom inicjalizację", + "events": "Wydarzenia", + "eventCount": "Elementy {count}", + "empty": "Nie ma jeszcze żadnych zdarzeń debugowania.", + "parseError": "Nieprawidłowy ładunek JSON", + "customMethodRequired": "Podaj nazwę metody dla wywołań wewnętrznych", + "requestFailed": "Żądanie nie powiodło się", + "methods": { + "initialize": "zainicjować", + "newSession": "session/new", + "loadSession": "session/load", + "prompt": "session/prompt", + "cancel": "session/cancel", + "setSessionMode": "session/setMode", + "setSessionModel": "session/setModel", + "extMethod": "ext/method", + "extNotification": "ext/notification" + }, + "eventKinds": { + "request": "Żądanie", + "response": "Odpowiedź", + "notification": "Powiadomienie", + "permission": "Pozwolenie", + "lifecycle": "Cykl życia", + "stderr": "stderr", + "error": "Błąd" + }, + "healthCheck": "Kontrola stanu zdrowia", + "healthChecking": "Sprawdzam...", + "healthCheckFailed": "Kontrola stanu nie powiodła się" + }, + "registryCount": "Agenci {count}", + "registryEmpty": "Dla bieżących filtrów nie są dostępni agenci rejestru.", + "registryRefresh": "Odśwież rejestr", + "registryRepair": "Naprawa", + "registrySearchPlaceholder": "Przeszukaj rejestr ACP Agents...", + "filters": { + "all": "Wszystkie statusy", + "enabled": "Tylko włączone", + "installed": "Tylko zainstalowany", + "attention": "Potrzebuje uwagi" + }, + "envOverrideTitle": "Zastąpienia zmiennych środowiskowych", + "envOverridePlaceholder": "Jeden KLUCZ=WARTOŚĆ na linię", + "installState": { + "installed": "Zainstalowany", + "installing": "Instalowanie", + "error": "Instalacja nie powiodła się", + "notInstalled": "Nie zainstalowano" + } + }, + "rateLimit": { + "title": "Limit stawki", + "description": "Kontroluj interwał żądań, aby zapobiec przekroczeniu limitów API", + "intervalLimit": "Interwał żądania", + "intervalUnit": "sekundy", + "intervalHelper": "Minimalny odstęp między żądaniami, wyłącz ograniczanie szybkości, jeśli nie jest potrzebne", + "lastRequestTime": "Ostatnia prośba", + "queueLength": "Długość kolejki", + "nextAllowedTime": "Dalej dozwolone", + "never": "Nigdy", + "justNow": "Właśnie teraz", + "secondsAgo": "temu", + "minutesAgo": "temu", + "immediately": "Teraz", + "secondsLater": "później", + "confirmDisableTitle": "Potwierdź wyłączenie limitu szybkości", + "confirmDisableMessage": "Wartość nie może być mniejsza lub równa 0. Czy chcesz wyłączyć ograniczenie szybkości?", + "confirmDisable": "Wyłącz limit", + "disabled": "Limit szybkości wyłączony", + "disabledDescription": "Ograniczenie szybkości zostało wyłączone" + }, + "promptSetting": { + "resetToDefault": "Zresetuj do domyślnego prompt", + "resetToDefaultSuccess": "Pomyślnie zresetowano do domyślnego system prompt", + "resetToDefaultFailed": "Nie udało się zresetować. Spróbuj ponownie" + }, + "skills": { + "title": "Skills", + "description": "Zarządzaj i konfiguruj umiejętności asystenta AI", + "draftSuggestions": { + "title": "Sugeruj projekty umiejętności", + "description": "Po ukończeniu zadania pozwól agentowi zasugerować tymczasowe projekty umiejętności wielokrotnego użytku. Wersje robocze pozostają w folderze tymczasowym, dopóki nie zdecydujesz się na ich ręczne zaimportowanie." + }, + "openFolder": "Otwórz folder", + "addSkill": "Dodaj umiejętność", + "empty": "Nie ma jeszcze żadnych umiejętności", + "emptyHint": "Kliknij „Dodaj umiejętność”, aby zainstalować nową umiejętność", + "noResults": "Nie znaleziono pasujących umiejętności", + "search": "Szukaj umiejętności...", + "count": "Umiejętności {count}", + "install": { + "title": "Zainstaluj umiejętność", + "description": "Wybierz metodę instalacji umiejętności", + "tabFolder": "Folder", + "tabZip": "ZIP", + "tabUrl": "URL", + "fromFolder": "Zainstaluj z folderu", + "selectFolder": "Wybierz folder umiejętności", + "folderHint": "Kliknij, aby wybrać folder umiejętności", + "folderTip": "Importuj umiejętności od innych klientów, np. ~/.claude/skills/", + "zipHint": "Kliknij, aby wybrać plik ZIP", + "urlPlaceholder": "Wprowadź umiejętność pobierz ZIP URL", + "urlHint": "Wprowadź link do pobrania pakietu umiejętności", + "installButton": "Zainstaluj", + "installing": "Instaluję...", + "success": "Instalacja pomyślna", + "successMessage": "Umiejętność {name} została pomyślnie zainstalowana", + "failed": "Instalacja nie powiodła się", + "dragNotSupported": "Przeciąganie nie jest obsługiwane. Kliknij, aby wybrać" + }, + "delete": { + "title": "Usuń umiejętność", + "description": "Czy na pewno chcesz usunąć umiejętność {name}? Tej akcji nie można cofnąć.", + "success": "Usunięcie powiodło się", + "successMessage": "Umiejętność {name} została pomyślnie usunięta", + "failed": "Usuwanie nie powiodło się" + }, + "card": { + "scripts": "Skrypty {count}", + "env": "środowisko {count}", + "pythonShort": "P", + "nodeShort": "Węzeł" + }, + "edit": { + "title": "Edytuj umiejętność", + "placeholder": "Edytuj tutaj treść umiejętności...", + "readFailed": "Nie udało się przeczytać", + "success": "Zapisano pomyślnie", + "failed": "Nie udało się zapisać", + "name": "Imię", + "namePlaceholder": "Nazwa umiejętności", + "nameHint": "Nazwy umiejętności nie można zmienić po utworzeniu", + "description": "Opis", + "descriptionPlaceholder": "Opis umiejętności", + "allowedTools": "Dozwolone narzędzia", + "allowedToolsPlaceholder": "Czytaj, Grep, Bash", + "allowedToolsHint": "Rozdzielana przecinkami lista nazw narzędzi", + "content": "Treść umiejętności", + "runtimeTitle": "Czas wykonania", + "runtimeHint": "Wybierz sposób, w jaki dołączone skrypty rozwiązują środowiska wykonawcze Pythona i Node.", + "pythonRuntime": "Środowisko wykonawcze Pythona", + "nodeRuntime": "Środowisko wykonawcze węzła", + "envTitle": "Zmienne środowiskowe", + "envWarning": "Maskowane tylko w interfejsie użytkownika. Wartości są przechowywane w postaci zwykłego tekstu w pliku pomocniczym umiejętności.", + "scriptsTitle": "Dołączone skrypty", + "scriptsHint": "Tylko skrypty znajdujące się w sekcji scripts/ mogą być uruchamiane poprzez Skill_run.", + "noScripts": "Nie wykryto żadnych uruchamialnych skryptów", + "scriptEnabled": "Włączone", + "scriptDescription": "Opis Zastąpienie", + "scriptDescriptionPlaceholder": "Opcjonalny opis pokazywany agentowi", + "runtime": { + "auto": "Automatyczny powrót", + "system": "Czas działania systemu", + "builtin": "Wbudowane środowisko wykonawcze" + }, + "files": "Zawartość folderu", + "noFiles": "Brak plików" + }, + "conflict": { + "title": "Umiejętność już istnieje", + "description": "Umiejętność o nazwie „{name}” już istnieje. Czy chcesz go zastąpić?", + "overwrite": "Zastąp" + }, + "sync": { + "title": "Synchronizuj", + "import": "Importuj z innych narzędzi...", + "export": "Eksportuj", + "importTitle": "Zaimportuj Skills z innych narzędzi", + "exportTitle": "Eksportuj Skills do innych narzędzi", + "importDescription": "Importuj umiejętności z Claude Code, Cursor i innych narzędzi", + "exportDescription": "Eksportuj umiejętności do innych narzędzi asystentów AI", + "step1Title": "Wybierz narzędzie źródłowe", + "step2Title": "Wybierz Skills do importu", + "step3Title": "Potwierdź import", + "exportStep1Title": "Wybierz Skills do eksportu", + "exportStep2Title": "Wybierz narzędzie docelowe", + "exportStep3Title": "Potwierdź eksport", + "scanning": "Skanowanie...", + "noToolsFound": "Nie wykryto zainstalowanych narzędzi", + "skillCount": "Wykryto umiejętności {count}", + "notInstalled": "Nie zainstalowano", + "selectedCount": "Wybrano {count}", + "selectAll": "Wybierz wszystko", + "deselectAll": "Odznacz wszystko", + "conflict": "Konflikt", + "conflictDescription": "Umiejętność o nazwie „{name}” już istnieje", + "batchAction": "Akcja wsadowa", + "skip": "Pomiń", + "skipAll": "Pomiń wszystko", + "overwrite": "Zastąp", + "overwriteAll": "Zastąp wszystko", + "rename": "Zmień nazwę", + "renameAll": "Zmień nazwę wszystkich", + "warnings": "Ostrzeżenia dotyczące konwersji", + "previewing": "Podgląd...", + "importing": "Importowanie ({current}/{total})...", + "exporting": "Eksportowanie ({current}/{total})...", + "importButton": "Importuj", + "exportButton": "Eksportuj", + "exportWarnings": "Eksportuj ostrzeżenia", + "noConflicts": "Żadnych konfliktów", + "readyToExport": "Gotowy do eksportu umiejętności {count}", + "kiroOptions": "Opcje eksportu Kiro", + "kiroInclusion": "Tryb włączania", + "kiroOnDemand": "Na żądanie", + "kiroOnDemandDesc": "Używane tylko na wyraźne żądanie użytkownika", + "kiroAlways": "Zawsze", + "kiroAlwaysDesc": "Automatycznie uwzględniane w każdej rozmowie", + "kiroConditional": "Warunkowe", + "kiroConditionalDesc": "Dołączane automatycznie na podstawie dopasowania wzorca pliku", + "kiroFilePatterns": "Wzory plików", + "kiroFilePatternsPlaceholder": "np. **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Wzory globusów oddzielonych przecinkami", + "scanError": "Skanowanie nie powiodło się", + "previewError": "Podgląd nie powiódł się", + "loadToolsError": "Nie udało się załadować listy narzędzi", + "importSuccess": "Import powiódł się", + "importSuccessMessage": "Pomyślnie zaimportowano umiejętności {count}", + "importPartial": "Częściowy sukces importu", + "importPartialMessage": "{success} powiodło się, {skipped} pominięto, {failed} nie powiodło się", + "importError": "Import nie powiódł się", + "exportSuccess": "Eksport udany", + "exportSuccessMessage": "Pomyślnie wyeksportowano umiejętności {count}", + "exportPartial": "Częściowy sukces eksportowy", + "exportPartialMessage": "{success} powiodło się, {skipped} pominięto, {failed} nie powiodło się", + "exportError": "Eksport nie powiódł się", + "resultSuccess": "Operacja powiodła się", + "resultPartial": "Częściowy sukces", + "imported": "Importowane", + "exported": "Eksportowane", + "skipped": "Pominięte", + "failed": "Nie udało się", + "failedItems": "Nieudane elementy" + }, + "syncStatus": { + "title": "Narzędzia zewnętrzne", + "description": "Importuj umiejętności od innych asystentów kodowania AI", + "scanning": "Skanowanie w poszukiwaniu narzędzi...", + "noToolsFound": "Nie wykryto żadnych narzędzi zewnętrznych", + "skillCount": "Umiejętności {count}", + "notInstalled": "Nie zainstalowano", + "notAvailable": "Niedostępne", + "noSkills": "Brak umiejętności", + "import": "Importuj", + "syncing": "Importowanie..." + }, + "syncPrompt": { + "title": "Odkryto nowy Skills", + "description": "Odkryliśmy nowe umiejętności u innych asystentów kodowania AI. Czy chcesz je zaimportować?", + "dontShowAgain": "Nie pokazuj tego więcej", + "skip": "Pomiń", + "importSelected": "Importuj wybrane" + } + }, + "environments": { + "title": "Środowiska", + "description": "Przejrzyj katalogi projektów używane przez Twoje sesje, otwórz je szybko lub ustaw jeden jako domyślny dla nowych czatów.", + "default": { + "title": "Domyślny katalog", + "description": "Nowe czaty wybierają wstępnie ten katalog, chyba że ręcznie wybierzesz inny.", + "empty": "Nie ustawiono żadnego katalogu domyślnego." + }, + "history": { + "title": "Historia", + "description": "Tutaj wymienione są tylko katalogi, które były faktycznie używane przez sesje." + }, + "temp": { + "title": "Katalogi tymczasowe", + "description": "Katalogi w tymczasowych katalogach głównych lub obszarach roboczych zarządzanych przez aplikację są tutaj pogrupowane i domyślnie ukryte." + }, + "actions": { + "refresh": "Odśwież", + "showMissing": "Pokaż brakujące", + "open": "Otwórz", + "setDefault": "Ustaw domyślne", + "clearDefault": "Wyczyść domyślne", + "showTemp": "Pokaż Temp", + "hideTemp": "Ukryj Temp" + }, + "badges": { + "default": "Domyślne", + "temp": "Temp", + "missing": "Brak", + "notInHistory": "Nie w Historii" + }, + "meta": { + "sessions": "Sesje {count}", + "lastUsed": "Ostatnio używane: {value}", + "never": "Nigdy" + }, + "empty": { + "regular": "Brak środowisk do pokazania.", + "temp": "Nie ma jeszcze środowisk tymczasowych." + }, + "errors": { + "openTitle": "Nie udało się otworzyć katalogu" + } + }, + "remote": { + "title": "Zdalny", + "description": "Skonfiguruj zdalne sterowanie Telegram, Feishu / Lark, QQBot, Discord i WeChat iLink w jednym miejscu.", + "telegram": { + "title": "Telegram", + "description": "Podłącz bota Telegram do bezpośrednich wiadomości, grup i zdalnego sterowania tematami.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Telegram bot token", + "botTokenDescription": "Wprowadź bota Telegram token używanego do pilota Telegram." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Podłącz bota Feishu do bezpośrednich wiadomości, czatów grupowych i wątków tematycznych.", + "brand": "Marka", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "Identyfikator aplikacji", + "appIdPlaceholder": "Identyfikator aplikacji Feishu", + "appSecret": "Sekret aplikacji", + "appSecretPlaceholder": "Sekret aplikacji Feishu", + "verificationToken": "Weryfikacja Token", + "verificationTokenPlaceholder": "Weryfikacja Feishu token", + "encryptKey": "Zaszyfruj klucz (opcjonalnie)", + "encryptKeyPlaceholder": "Pozostaw puste, chyba że włączone jest szyfrowanie zdarzeń", + "botUser": "Użytkownik bota: {name} ({openId})", + "bindings": "Powiązania: {count}, sparowani użytkownicy: {pairedUserCount}", + "pairedUserOpenIds": "Sparowane otwarte identyfikatory użytkownika", + "pairedUserOpenIdsPlaceholder": "np. ou_xxx, ou_yyy", + "accessRulesDescription": "Najpierw sparuj w wiadomości bezpośredniej. W grupach sesję mogą prowadzić tylko sparowani użytkownicy, którzy {'@'} wspomnieli o bocie.", + "accessRule1": "Połącz w parę w wiadomości bezpośredniej za pomocą /pair [kod].", + "accessRule2": "W grupach i tematach bot reaguje tylko wtedy, gdy wspomina o tym sparowany użytkownik {'@'}." + }, + "discord": { + "title": "Discord", + "description": "Podłącz bota Discord do rozmów DM, wzmianek o kanałach i zdalnego sterowania za pomocą ukośnika.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Discord bot token", + "remoteControlDescription": "Zdalne sterowanie Discord wykorzystuje własnego bota token, bramę i przepływ REST.", + "accessRule1": "Wyślij /pair [kod] w DM lub na kanale docelowym, aby autoryzować bieżący punkt końcowy Discord.", + "accessRule2": "Wiadomości na kanale pojawiają się w rozmowie tylko wtedy, gdy wspomniano o bocie, co pozwala uniknąć absorbowania zwykłego czatu." + }, + "sections": { + "credentials": "Poświadczenia", + "remoteControl": "Zdalne sterowanie", + "notifications": "Powiadomienia", + "accessRules": "Zasady dostępu" + }, + "remoteControl": { + "description": "Powiąż każdy zdalny punkt końcowy z jedną sesją i zachowaj dostępność sesji dla wszystkich poleceń.", + "allowedUserIds": "Dozwolone identyfikatory użytkowników", + "allowedUserIdsPlaceholder": "np. 123456789, 987654321", + "defaultAgent": "Domyślny Agent", + "defaultAgentPlaceholder": "Wybierz agenta", + "defaultWorkdir": "Domyślny katalog", + "defaultWorkdirPlaceholder": "Wybierz katalog domyślny", + "defaultWorkdirHelper": "Katalog obszaru roboczego dla sesji zdalnych. Wymagane, gdy domyślnym agentem jest ACP.", + "openPairDialog": "Para", + "manageBindings": "Zarządzaj powiązaniami", + "pairCode": "Kod pary", + "noPairCode": "Brak aktywnego kodu pary", + "pairCodeExpiresAt": "Wygasa o {time}", + "pairDialogTitle": "Parowanie {channel}", + "pairDialogDescription": "Wygeneruj kod parowania i zakończ parowanie na czacie bota {channel}.", + "pairDialogInstructionTelegram": "Wyślij to polecenie do bota Telegram:", + "pairDialogInstructionFeishu": "Wyślij to polecenie do bota Feishu w bezpośredniej wiadomości:", + "pairDialogInstructionDiscord": "Wyślij to polecenie do bota Discord na DM lub kanale docelowym:", + "bindingsDialogTitle": "Wiązania {channel}", + "bindingsDialogDescription": "Usuń jedno po drugim powiązania zdalnych punktów końcowych.", + "bindingsEmpty": "Nie ma jeszcze żadnych wiązań.", + "pairingSuccessTitle": "Parowanie zakończone", + "pairingSuccessDescription": "Lista sparowanych podmiotów głównych została odświeżona.", + "pairDialogInstructionQQBot": "Wyślij to polecenie do czatu bota QQ lub autoryzowanej grupy QQ:", + "authorizedPrincipalsTitle": "Autoryzowani dyrektorzy", + "authorizedPrincipalsDescription": "Te konta {channel} są upoważnione do parowania i kontrolowania sesji.", + "authorizedPrincipalsEmpty": "Brak jeszcze autoryzowanych podmiotów zabezpieczeń.", + "sessionBindingsTitle": "Powiązania sesji", + "sessionBindingsDescription": "Każdy zdalny punkt końcowy poniżej jest obecnie powiązany z jedną sesją DeepChat." + }, + "hooks": { + "title": "Haki Telegram", + "description": "Ponownie użyj tego samego bota Telegram do powiadomień o przechwyceniu.", + "chatId": "Identyfikator czatu", + "chatIdPlaceholder": "np. 123456789", + "threadId": "Identyfikator wątku (opcjonalnie)", + "threadIdPlaceholder": "Opcjonalny identyfikator wątku" + }, + "status": { + "title": "Stan środowiska wykonawczego", + "botUser": "Użytkownik bota: {username} ({id})", + "bindings": "Powiązania: {count}, przesunięcie ankiety: {pollOffset}", + "states": { + "disabled": "Niepełnosprawny", + "stopped": "Zatrzymany", + "starting": "Rozpoczęcie", + "running": "Bieganie", + "backoff": "Ponawianie próby po niepowodzeniu", + "error": "Błąd" + }, + "bindingOnly": "Powiązania: {count}, sparowane podmioty główne: {paired}" + }, + "overview": { + "telegram": "Powiązania {bindingCount}, sparowani użytkownicy {pairedCount}", + "feishu": "Powiązania {bindingCount}, sparowani użytkownicy {pairedCount}", + "hooksOn": "na", + "hooksOff": "wyłączone", + "qqbot": "Powiązania {bindingCount}, sparowani użytkownicy {pairedCount}", + "discord": "Powiązania {bindingCount}, sparowane kanały {pairedCount}", + "weixinIlink": "Powiązania {bindingCount}, konta {accountCount}, połączenie {connectedCount}" + }, + "bindingKinds": { + "dm": "DM", + "group": "Grupa", + "topic": "Temat" + }, + "qqbot": { + "title": "QQBot", + "description": "Podłącz oficjalnego bota QQ do czatów C2C i kontroli botów autoryzowanych w oparciu o wzmianki grupowe.", + "appId": "Identyfikator aplikacji", + "appIdPlaceholder": "Identyfikator aplikacji QQ Bot", + "clientSecret": "Sekret Klienta", + "clientSecretPlaceholder": "Sekret klienta QQ Bota", + "remoteControlDescription": "Oficjalne identyfikatory openid QQ różnią się dla C2C i grup, więc wiadomości bezpośrednie łączą użytkowników w pary, podczas gdy grupy są autoryzowane oddzielnie za pomocą /pair.", + "pairedUserIds": "Sparowane identyfikatory OpenID użytkownika", + "pairedUserIdsPlaceholder": "np. użytkownik_openid_xxx, użytkownik_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Podłącz oficjalnego bota iLink WeChat poprzez logowanie QR, a następnie kieruj sesje zdalnego sterowania za pośrednictwem wbudowanego adaptera.", + "loginDescription": "Kliknij przycisk poniżej, aby otworzyć oficjalne okno logowania WeChat. Dokonaj tam autoryzacji iLink Bot, a połączone konto zostanie tutaj automatycznie dodane.", + "ownerOnlyNotice": "Ta pierwsza wersja pozwala tylko właścicielowi konta QR-login kontrolować DeepChat.", + "connectButton": "Otwórz okno logowania", + "refreshQrCode": "Otwórz ponownie okno logowania", + "loginDialogTitle": "Podłącz WeChat iLink", + "loginDialogDescription": "Oficjalna strona logowania WeChat otwiera się w osobnym oknie. Dokończ tam autoryzację QR i pozostaw to okno dialogowe otwarte aż do zakończenia połączenia.", + "loginFailed": "WeChat Logowanie do iLink nie powiodło się.", + "loginSuccessTitle": "WeChat iLink podłączony", + "loginSuccessDescription": "Konto {accountId} jest gotowe.", + "accountsTitle": "Konta", + "accountsDescription": "Każde połączone konto iLink Bot działa niezależnie i zachowuje własne powiązania i stan środowiska wykonawczego.", + "noAccounts": "Nie połączono jeszcze żadnych kont WeChat iLink.", + "ownerUserId": "Identyfikator użytkownika właściciela: {ownerUserId}", + "baseUrl": "Podstawa URL: {baseUrl}", + "accountBindings": "Wiązania: {count}", + "remoteControlDescription": "Ustaw domyślnego agenta udostępnianego przez konta WeChat iLink, a następnie zarządzaj powiązaniami utworzonymi przez sesje przychodzące.", + "removeAccount": "Usuń konto", + "restartAccount": "Uruchom ponownie konto", + "statusSummary": "Konta {accounts}, połączenie {connected}, powiązania {bindings}", + "qrcodeAlt": "Kod QR WeChat iLink", + "loginWindowOpened": "Otworzyło się oficjalne okno logowania WeChat. Wypełnij tam autoryzację QR.", + "loginSessionExpired": "Ta sesja logowania wygasła. Otwórz ponownie okno logowania i spróbuj ponownie.", + "loginResponseIncomplete": "Odpowiedź logowania WeChat iLink była niekompletna. Spróbuj ponownie.", + "loginTimedOut": "Upłynął limit czasu oczekiwania na autoryzację WeChat iLink. Otwórz ponownie okno logowania i spróbuj ponownie.", + "loginConnected": "Konto WeChat iLink zostało połączone." + } + }, + "plugins": { + "title": "Wtyczki", + "officialOnly": "Zarządzaj wbudowanymi oficjalnymi wtyczkami dołączonymi do tej wersji DeepChat.", + "refresh": "Odśwież", + "empty": "Brak dostępnych oficjalnych wtyczek", + "emptyTitle": "Brak dostępnych wbudowanych wtyczek", + "emptyDescription": "Ta platforma nie ma wbudowanych oficjalnych wtyczek w tej wersji DeepChat.", + "loadFailed": "Nie udało się załadować wtyczek", + "actionFailed": "Operacja wtyczki nie powiodła się", + "install": "Zainstaluj", + "installFromFile": "Wybierz .dcplugin", + "openRelease": "Wydanie GitHuba", + "enable": "Włącz", + "disable": "Wyłącz", + "openSettings": "Ustawienia", + "runtime": "Czas wykonania", + "version": "Wersja", + "command": "Polecenie", + "status": { + "enabled": "Włączone", + "disabled": "Niepełnosprawny", + "available": "Dostępne" + }, + "runtimeStates": { + "missing": "Brak", + "installed": "Zainstalowany", + "running": "Bieganie", + "error": "Błąd" + } + }, + "controlCenter": { + "groups": { + "overview": "Przegląd", + "setup": "Konfiguracja", + "models": "Ustawienia Agent", + "tools": "Rozszerzenia możliwości", + "knowledge": "Wiedza", + "system": "Systemu" + }, + "overview": { + "title": "Przegląd ustawień", + "description": "Przeglądaj dostawcę, MCP, DeepChat Agent, dane i stan użytkowania w jednym miejscu.", + "searchPlaceholder": "Ustawienia wyszukiwania, dostawcy, modele, agenci, MCP...", + "providers": "Dostawcy", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agent", + "data": "Ostatni czas tworzenia kopii zapasowej", + "enabledCount": "Włączono {count}", + "runningCount": "{count} działa", + "enabledAgentCount": "Agenci {count} włączeni", + "providersDescription": "Stan połączenia dostawcy", + "deepchatAgentsDescription": "Punkt wejścia konfiguracji Agent", + "mcpOn": "Włączono MCP", + "mcpOff": "MCP wyłączone", + "syncOn": "Synchronizacja włączona", + "syncOff": "Synchronizacja wyłączona", + "backupNever": "Kopia zapasowa: nigdy" + }, + "quickStart": { + "title": "Szybki start", + "addApiKey": "Dodaj API Key", + "addApiKeyDesc": "Skonfiguruj dostęp dostawcy", + "enableModel": "Włącz model", + "enableModelDesc": "Włącz użyteczny model", + "startMcp": "Uruchom serwer MCP", + "startMcpDesc": "Uruchom serwery narzędzi", + "backupNow": "Utwórz kopię zapasową teraz", + "backupNowDesc": "Utwórz kopię zapasową danych" + }, + "needsAttention": { + "title": "Potrzebuje uwagi", + "empty": "Nic nie wymaga uwagi", + "noModels": "Żaden model nie jest włączony", + "privacyOff": "Tryb prywatności jest wyłączony", + "backupNever": "Kopia zapasowa nigdy nie została uruchomiona" + }, + "activity": { + "title": "Ostatnie zmiany ustawień", + "description": "Pokazuje 200 najnowszych zmian ustawień, zachowując 2000 najnowszych rekordów.", + "when": "Czas", + "category": "Kategoria", + "change": "Zmień", + "empty": "Brak ostatnich zmian", + "emptyDescription": "Tutaj pojawią się pomyślne zmiany ustawień.", + "settingUpdated": "Zaktualizowane ustawienie: {key}", + "providerUpdated": "Zaktualizowany dostawca: {name}", + "providerCreated": "Dodany dostawca: {name}", + "providerRemoved": "Usunięty dostawca: {name}", + "providerModelsRefreshed": "Odświeżone modele dostawców: {name}", + "modelStatusChanged": "Zaktualizowany status modelu: {model}", + "modelBatchUpdated": "Zaktualizowano modele {count}", + "mcpServerCreated": "Dodano serwer MCP: {name}", + "mcpServerUpdated": "Zaktualizowano serwer MCP: {name}", + "mcpServerRemoved": "Usunięto serwer MCP: {name}", + "mcpServerStatusChanged": "Przełączono serwer MCP: {name}", + "mcpGlobalStatusChanged": "Przełączany status globalny MCP: {status}", + "mcpServerStarted": "Uruchomiono serwer MCP: {name}", + "mcpServerStopped": "Zatrzymany serwer MCP: {name}", + "mcpRegistryRefreshed": "Odświeżony rejestr MCP NPM", + "backupCreated": "Utworzono kopię zapasową: {name}", + "backupImported": "Zaimportowana kopia zapasowa: {name}", + "databaseRepaired": "Zakończono naprawę bazy danych: {status}" + } + } +} diff --git a/src/renderer/src/i18n/pl-PL/sync.json b/src/renderer/src/i18n/pl-PL/sync.json new file mode 100644 index 000000000..6f594e768 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "Pomyślnie zaimportowano konwersacje {count}." + }, + "error": { + "notEnabled": "Synchronizacja nie jest włączona", + "folderNotExists": "Folder synchronizacji nie istnieje", + "noValidBackup": "W folderze synchronizacji nie znaleziono prawidłowych plików kopii zapasowych.", + "unsupportedBackupVersion": "Ta kopia zapasowa została utworzona przez nowszą wersję DeepChat i nie można jej zaimportować.", + "dbNotExists": "Plik bazy danych nie istnieje", + "configNotExists": "Plik konfiguracyjny nie istnieje", + "tempDbFailed": "Nie udało się utworzyć tymczasowego pliku kopii zapasowej bazy danych", + "tempConfigFailed": "Nie udało się utworzyć tymczasowego pliku kopii zapasowej konfiguracji", + "importFailed": "Import nie powiódł się, oryginalne dane zostały przywrócone", + "importProcess": "Wystąpił błąd podczas procesu importowania", + "unknown": "Nieznany błąd", + "encryptedBackupPasswordMissing": "Ta kopia zapasowa jest zaszyfrowana, ale klucz lokalnej bazy danych nie jest dostępny. Najpierw odblokuj zaszyfrowaną bazę danych, a następnie zaimportuj ją ponownie.", + "overwriteEncryptionMismatch": "Import nadpisujący wymaga, aby kopia zapasowa i bieżąca baza danych korzystały z tego samego stanu szyfrowania." + } +} diff --git a/src/renderer/src/i18n/pl-PL/thread.json b/src/renderer/src/i18n/pl-PL/thread.json new file mode 100644 index 000000000..bcdd4fb54 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Zmień nazwę", + "delete": "Usuń", + "cleanMessages": "Wyczyść Wiadomości", + "pin": "Przypnij", + "unpin": "Odepnij", + "export": "Eksportuj", + "exportText": "Zwykły tekst", + "exportNowledgeMem": "Nowledge-mem" + }, + "toolbar": { + "save": "Zapisz", + "cancel": "Anuluj", + "previousVariant": "Poprzedni wariant", + "nextVariant": "Następny wariant", + "copy": "Skopiuj jako Markdown", + "copyImage": "Skopiuj jako obraz", + "copyImageWithLongPress": "Skopiuj jako obraz (naciśnij długo, aby przechwycić od góry)", + "copyFromTopSuccess": "Skopiowano obraz pełnej rozmowy", + "capturing": "Przechwytywanie...", + "retry": "Zregeneruj się", + "fork": "Przejdź do nowego czatu", + "edit": "Edytuj wiadomość", + "delete": "Usuń wiadomość", + "trace": "Żądanie śledzenia" + }, + "message": { + "toolbar": { + "save": "Zapisz" + } + }, + "export": { + "failed": "Eksport nie powiódł się", + "failedDesc": "Wystąpił błąd podczas procesu eksportu. Spróbuj ponownie", + "success": "Eksport udany", + "successDesc": "Rozmowa została pomyślnie wyeksportowana", + "nowledgeMemSuccess": "Eksport Nowledge-mem powiódł się", + "nowledgeMemSuccessDesc": "Rozmowa została pomyślnie wyeksportowana do formatu nowledge-mem", + "nowledgeMemSubmitPrompt": "Czy chcesz przesłać tę rozmowę do nowledge-mem?", + "nowledgeMemSubmitSuccess": "Nowledge-mem Przesyłanie powiodło się", + "nowledgeMemSubmitSuccessDesc": "Rozmowa została pomyślnie przesłana do nowledge-mem", + "nowledgeMemSubmitFailed": "Przesyłanie Nowledge-mem nie powiodło się", + "nowledgeMemSubmitFailedDesc": "Nie udało się przesłać rozmowy do nowledge-mem" + } +} diff --git a/src/renderer/src/i18n/pl-PL/toolCall.json b/src/renderer/src/i18n/pl-PL/toolCall.json new file mode 100644 index 000000000..c3bec71fd --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Dzwonię...", + "response": "Bieganie...", + "end": "Gotowe", + "error": "Błąd", + "title": "Wezwanie narzędzia", + "clickToView": "Kliknij, aby zobaczyć szczegóły", + "functionName": "Nazwa funkcji", + "permission": "Prośba o pozwolenie...", + "params": "Parametry funkcji", + "responseData": "Odpowiedź", + "imagePreview": "Podgląd obrazu", + "imagePreviewCount": "Brak podglądów obrazów | Jeden podgląd obrazu | {count} podglądy obrazów | {count} podglądów obrazów", + "terminalOutput": "Wyjście terminala", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "Zakończono wymianę {count}", + "fileOperation": "Operacja na pliku", + "fileRead": "Przeczytaj plik", + "fileWrite": "Zapisz plik", + "filePath": "Ścieżka pliku", + "success": "Sukces", + "failed": "Nie udało się" +} diff --git a/src/renderer/src/i18n/pl-PL/traceDialog.json b/src/renderer/src/i18n/pl-PL/traceDialog.json new file mode 100644 index 000000000..e94c479b0 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Poproś o podgląd", + "provider": "Dostawca", + "model": "Modelka", + "endpoint": "Punkt końcowy API", + "headers": "Nagłówki", + "body": "Treść żądania", + "copyJson": "Skopiuj JSON", + "copySuccess": "Skopiowano do schowka", + "close": "Zamknij", + "loading": "Ładowanie...", + "error": "Nie udało się załadować", + "errorDesc": "Nie można pobrać podglądu żądania. Spróbuj ponownie", + "notImplemented": "Nieobsługiwane", + "notImplementedDesc": "Ten dostawca nie wdrożył jeszcze podglądu żądań", + "mayNotMatch": "Uwaga: ten podgląd jest rekonstruowany na podstawie bieżących ustawień konwersacji i może nie odpowiadać dokładnie rzeczywistym parametrom żądania" +} diff --git a/src/renderer/src/i18n/pl-PL/update.json b/src/renderer/src/i18n/pl-PL/update.json new file mode 100644 index 000000000..83e55aa18 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "Znaleziono nową wersję", + "version": "Wersja", + "releaseDate": "Data wydania", + "releaseNotes": "Informacje o wydaniu", + "later": "Później", + "githubDownload": "Pobierz z GitHuba", + "officialDownload": "Oficjalne pobieranie", + "checkUpdate": "Sprawdź aktualizacje", + "downloading": "Pobieranie", + "installNow": "Zainstaluj teraz", + "installUpdate": "Zainstaluj aktualizację", + "versionAvailable": "Dostępny jest {version}", + "autoUpdateFailed": "Automatyczna aktualizacja nie powiodła się. Skorzystaj z poniższych linków do ręcznego pobierania.", + "topbarButton": "Aktualizacja", + "autoUpdate": "Automatyczna aktualizacja", + "restarting": "Ponowne uruchamianie", + "alreadyUpToDate": "Już aktualne", + "alreadyUpToDateDesc": "Twój DeepChat jest już zaktualizowany do najnowszej wersji, aktualizacja nie jest wymagana." +} diff --git a/src/renderer/src/i18n/pl-PL/welcome.json b/src/renderer/src/i18n/pl-PL/welcome.json new file mode 100644 index 000000000..3dd5c9069 --- /dev/null +++ b/src/renderer/src/i18n/pl-PL/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "Witamy", + "description": "Zacznijmy konfigurować DeepChat" + }, + "provider": { + "title": "Dostawca", + "description": "Wybierz preferowanego dostawcę modelu" + }, + "configuration": { + "title": "Konfiguracja", + "description": "Skonfiguruj modele, których chcesz używać" + }, + "complete": { + "title": "Kompletny", + "description": "Wszystko gotowe i gotowe do pracy!" + } + }, + "title": "Witamy w DeepChat", + "description": "Przeprowadzimy Cię przez konfigurację.", + "provider": { + "select": "Wybierz dostawcę", + "apiUrl": "API URL", + "apiKey": "API Key", + "verifyLink": "Zweryfikuj łącze" + }, + "complete": { + "title": "Wszystko gotowe!", + "description": "Wszystko gotowe. Zacznijmy!" + }, + "buttons": { + "getStarted": "Rozpocznij", + "next": "Następny", + "back": "Powrót" + }, + "page": { + "title": "Witamy w DeepChat Agent", + "description": "Aby rozpocząć, połącz się z dostawcą modelu", + "guide": { + "title": "Przewodnik konfiguracji", + "description": "Bieżący krok: {step}", + "or": "lub", + "coreProgress": "Postęp konfiguracji rdzenia", + "optional": "Opcjonalne kolejne kroki", + "actions": { + "continueSetup": "Kontynuuj konfigurację", + "goToChat": "Przejdź do czatu" + }, + "steps": { + "provider": "Dostawca", + "first-chat": "Pierwsza rozmowa", + "switch-model": "Zmień model", + "mcp": "MCP", + "skills": "Skills", + "plugins": "Wtyczki" + } + }, + "browseProviders": "Przeglądaj wszystkich dostawców...", + "connectAgent": "lub połącz agenta", + "acpTitle": "Skonfiguruj agenta ACP", + "acpDescription": "Claude Code, Codex, Kimi lub własne", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "DeepSeek", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "OtwórzRouter" + }, + "importProviders": "Importuj od innych agentów" + }, + "agentPage": { + "title": "Wybierz Agent, aby rozpocząć tworzenie", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "Zarządzaj DeepChat Agent" + } +} diff --git a/src/renderer/src/i18n/tr-TR/about.json b/src/renderer/src/i18n/tr-TR/about.json new file mode 100644 index 000000000..1fb0a2fd8 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat, yapay zekayı daha fazla kişi için erişilebilir hale getirmeye adanmış, platformlar arası bir yapay zeka istemcisidir.", + "website": "Web Sitemizi Ziyaret Edin", + "disclaimerButton": "Sorumluluk reddi beyanı", + "feedbackButton": "Geri bildirim", + "disclaimerTitle": "Kullanım Koşulları Beyanı", + "checkUpdateButton": "Güncellemeleri Kontrol Et", + "mockUpdateButton": "Sahte İndirilen Güncelleme", + "clearMockUpdateButton": "Sahte Güncellemeyi Temizle", + "mockOnboardingButton": "Sahte İlk Çalıştırma Kılavuzu", + "updateChannel": "Kanalı Güncelle", + "stableChannel": "Stabil", + "betaChannel": "Beta", + "deviceInfo": { + "title": "Cihaz Bilgileri", + "platform": "platformu", + "arch": "Mimarlık", + "cpuModel": "CPU Modeli", + "totalMemory": "Toplam Bellek", + "osVersion": "Sistem Sürümü" + } +} diff --git a/src/renderer/src/i18n/tr-TR/artifacts.json b/src/renderer/src/i18n/tr-TR/artifacts.json new file mode 100644 index 000000000..4dc9979d3 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Açmak için tıklayın", + "codeSnippet": "Kod Parçacığı", + "function": "İşlev", + "class": "Sınıf", + "reactComponent": "Reaksiyon Bileşeni", + "moduleImport": "Modül İçe Aktarma", + "variableDefinition": "{name} Değişken Tanımı", + "markdownDocument": "Markdown Belgesi", + "htmlDocument": "HTML Belgesi", + "svgImage": "SVG Resmi", + "flowchart": "Akış şeması", + "sequenceDiagram": "Sıra Diyagramı", + "classDiagram": "Sınıf Diyagramı", + "stateDiagram": "Durum Diyagramı", + "erDiagram": "ER Şeması", + "ganttChart": "Gantt Grafiği", + "pieChart": "Pasta Grafiği", + "mermaidDiagram": "Denizkızı Diyagramı", + "flowchartOf": "{name} akış şeması", + "sequenceDiagramBetween": "{participants} Arasındaki Sıra Diyagramı", + "classDiagramOf": "{name} Sınıf Diyagramı", + "stateDiagramOf": "{name} Durum Şeması", + "erDiagramOf": "{name} ER Şeması", + "pieChartOf": "{name} Pasta Grafiği", + "unknownDocument": "Bilinmeyen Belge", + "preview": "Önizleme", + "code": "Kod", + "export": "İhracat", + "htmlPreviewTitle": "HTML Önizlemesi", + "svgPreviewTitle": "SVG Önizlemesi", + "copy": "Kopyala", + "copyAsImage": "Resim Olarak Kopyala", + "copyImageSuccessDesc": "Resim panoya kopyalandı", + "copyImageFailedDesc": "Resim panoya kopyalanamadı.", + "copySuccess": "Kopyalandı", + "copySuccessDesc": "İçerik panoya kopyalandı", + "copyFailed": "Kopyalama Başarısız", + "copyFailedDesc": "İçerik panoya kopyalanamadı", + "desktop": "Masaüstü", + "tablet": "Tablet", + "mobile": "Mobil", + "responsive": "duyarlı", + "width": "Genişlik", + "height": "Yükseklik", + "sanitizingSvg": "SVG içeriği temizleniyor...", + "svgSanitizationFailed": "SVG içeriği güvenlik doğrulamasında başarısız oldu", + "noSvgContent": "SVG içeriği mevcut değil", + "mermaid": { + "renderError": "Oluşturma başarısız oldu: {message}" + } +} diff --git a/src/renderer/src/i18n/tr-TR/chat.json b/src/renderer/src/i18n/tr-TR/chat.json new file mode 100644 index 000000000..65a3ab7c4 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "DeepChat'ye herhangi bir şey sor, {'@'}'a dosyalardan bahsetmesini ve / komutlarını sor", + "fileArea": "Dosya Alanı", + "inputArea": "Giriş Alanı", + "functionSwitch": "Fonksiyon Anahtarı", + "attach": "Eklemek", + "voiceInput": "Yerel kayıt", + "voiceInputStop": "Yerel kaydı durdur", + "voiceRecognitionUnsupportedTitle": "Yerel kayıt burada mevcut değil", + "voiceRecognitionUnsupportedDescription": "Bu özelliği, mikrofon kaydını destekleyen bir tarayıcı veya masaüstü ortamında kullanın.", + "voiceRecognitionPermissionDeniedTitle": "Mikrofon erişimi kullanılamıyor", + "voiceRecognitionPermissionDeniedDescription": "DeepChat'nin mikrofonu kullanmasına izin verin ve tekrar deneyin.", + "voiceRecognitionErrorTitle": "Sesin transkripsiyonu başarısız oldu", + "voiceRecognitionErrorDescription": "Ses transkripsiyonu tamamlanamadı. Lütfen daha sonra tekrar deneyin.", + "send": "Göndermek", + "steer": "Yönlendir", + "queue": "Sıra", + "stop": "Durmak", + "fileSelect": "Dosya Seç", + "pasteFiles": "Dosyaları panodan yapıştır", + "dropFiles": "Dosyaları buraya bırakın", + "promptFilesAdded": "prompt Dosyalar Eklendi", + "promptFilesAddedDesc": "{count} dosyaları başarıyla eklendi", + "promptFilesError": "Dosya İşleme Hatası", + "promptFilesErrorDesc": "{count} dosyaları işlenemedi", + "historyPlaceholder": "(Otomatik tamamlamak için Sekme tuşuna basın)", + "rateLimitQueue": "Sıra {count}", + "rateLimitWait": "{seconds}s bekleyin", + "rateLimitQueueTooltip": "Kuyruktaki {count} istekleri, {interval}s aralığı", + "rateLimitReadyTooltip": "Gönderilmeye hazır, {interval}s aralıklarla", + "rateLimitWaitingTooltip": "{seconds}s daha bekleyin, {interval}s aralıklarla", + "acpWorkdir": "ACP Çalışma dizini", + "acpWorkdirTooltip": "ACP çalışma dizinini ayarlayın", + "acpWorkdirSelect": "ACP çalışma dizini olarak kullanılacak bir klasör seçin", + "acpWorkdirCurrent": "Mevcut çalışma dizini: {path}", + "acpMode": "Mod", + "acpModeTooltip": "Geçerli mod: {mode}", + "agentWorkspaceTooltip": "Agent çalışma alanı dizinini ayarlayın", + "agentWorkspaceSelect": "Çalışma alanı olarak kullanılacak bir klasör seçin", + "agentWorkspaceCurrent": "Mevcut çalışma alanı: {path}", + "workspaceUnavailableTooltip": "Dizin mevcut değil veya erişilemiyor: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "Etkin MCP", + "empty": "Etkin hizmet yok", + "openSettings": "MCP ayarlarını aç" + }, + "tools": { + "badge": "Aletler", + "title": "Aletler", + "mcpSection": "MCP", + "pluginSection": "Eklentiler", + "builtinSection": "Yerleşik Araçlar", + "loading": "Araçlar yükleniyor...", + "builtinEmpty": "Yerleşik araç yok", + "groups": { + "agentFilesystem": "Agent Dosya Sistemi", + "agentCore": "Agent Çekirdek", + "agentImageGeneration": "Görüntü Üretimi", + "agentSkills": "Agent Skills", + "deepchatSettings": "DeepChat Ayarlar", + "yobrowser": "YoBrowser" + } + }, + "fileUploadFailed": "Ek başarısız oldu", + "fileUploadFailedDesc": "{count} dosyaları işlenemedi: {names}", + "fileUploadFailedMore": "ve {count} daha", + "unnamedFile": "adsız dosya", + "audioInputUnsupportedTitle": "Mevcut model ses eklerini desteklemiyor", + "audioInputUnsupportedDescription": "{model} modeli ses girişini desteklemez. {count} ses ekleri yoksayıldı." + }, + "pendingInput": { + "steer": "Yönlendir", + "queueCount": "Sıraya alındı ​​{count}/{max}", + "resumeQueue": "Göndermeye devam et", + "toSteer": "Yönlendir", + "locked": "Kilitli", + "reorder": "Yeniden sırala", + "files": "{count} dosyaları", + "attachmentsOnly": "{count} ekler", + "empty": "Boş mesaj", + "limitReached": "Bekleme şeridi dolu (maks. {max})." + }, + "features": { + "webSearch": "Web Araması", + "thoughtForSeconds": "{seconds}s için düşünceler", + "thoughtForSecondsLoading": "{seconds}s için düşünüyorum...", + "artifactThinking": "Yapay Düşünce", + "modeChanged": "Mod şu şekilde değiştirildi: {mode}" + }, + "search": { + "results": "{0} web sayfası bulundu", + "searching": "Arama...", + "title": "Arama Sonuçları", + "description": "{0} ile ilgili sonuçlar bulundu", + "optimizing": "Arama sorgusu optimize ediliyor...", + "reading": "Web sayfalarını arama ve okuma...", + "error": "Arama başarısız oldu" + }, + "messages": { + "thinking": "Düşünüyorum...", + "rateLimitWaiting": "Oran sınırına ulaşıldı, kuyrukta bekleniyor...", + "rateLimitCompactLoading": "{seconds}s için oran sınırlı...", + "rateLimitTitle": "Hız Sınırı Etkin", + "rateLimitQueue": "Kuyruk Konumu", + "rateLimitEstimated": "Tahmini Bekleme", + "rateLimitQuickSettings": "Sınırı Ayarla", + "rateLimitSwitchProvider": "Sağlayıcıyı Değiştir", + "rateLimitImmediately": "Şimdi", + "rateLimitSeconds": "S", + "rateLimitMinutes": "M" + }, + "compaction": { + "compacting": "Bağlam sıkıştırılıyor...", + "compacted": "Bağlam sıkıştırıldı", + "commandDescription": "Kompakt konuşma bağlamı", + "noopTitle": "Sıkıştırılacak bağlam yok", + "noopDescription": "Henüz sıkıştırılacak yeni bir konuşma geçmişi yok.", + "failedTitle": "Sıkıştırma başarısız oldu" + }, + "rateLimit": { + "queueTooltip": "Kuyruktaki {count} istekleri, {interval}s aralığı", + "readyTooltip": "Gönderilmeye hazır, {interval}s aralıklarla", + "waitingTooltip": "{seconds}s daha bekleyin, {interval}s aralıklarla" + }, + "notify": { + "generationComplete": "Nesil tamamlandı", + "generationError": "Oluşturma başarısız oldu" + }, + "toolCall": { + "title": "Araç Çağrısı", + "calling": "Araç çağrısı devam ediyor", + "response": "Araç yanıtı", + "end": "Araç çağrısı tamamlandı", + "error": "Araç çağırma hatası", + "clickToView": "Ayrıntıları görüntülemek için tıklayın", + "functionName": "İşlev", + "params": "Parametreler", + "responseData": "Yanıt verileri", + "subagents": { + "summary": "{mode} · {count} subagents", + "unnamedTask": "Adsız görev", + "mode": { + "parallel": "Paralel", + "chain": "Zincir" + }, + "status": { + "queued": "Sıraya alındı", + "running": "Koşma", + "completed": "Tamamlanmış", + "error": "Hata", + "cancelled": "İptal edildi", + "waiting_permission": "İzin bekleniyor", + "waiting_question": "Giriş bekleniyor" + } + } + }, + "mode": { + "current": "Geçerli mod: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Ebeveyne Geri Dön", + "share": "Paylaşmak", + "more": "Daha" + }, + "subagents": { + "label": "Alt temsilciler" + }, + "advancedSettings": { + "button": "Gelişmiş", + "title": "Gelişmiş Ayarlar", + "closeHint": "Kapatmak için Esc", + "systemPrompt": "Sistem prompt", + "systemPromptPlaceholder": "Bir ön ayar seçin", + "temperature": "Sıcaklık", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6, düşünme etkinleştirildiğinde sıcaklığı {enabled}'ye ve devre dışı bırakıldığında {disabled}'ye sabitler.", + "contextLength": "Bağlam Uzunluğu", + "maxTokens": "Maksimum token", + "thinkingBudget": "Thinking Budget", + "verbosity": "ayrıntı", + "forceInterleavedThinkingCompat": "Interleaved Thinking", + "forceInterleavedThinkingCompatDescription": "Bu oturumun Interleaved Thinking ile akıl yürütme ve araç çağrısı mesajlarını işleyip işlemediğini kontrol eder.", + "verbosityPlaceholder": "Ayrıntı seç", + "currentCustomPrompt": "Mevcut özel", + "useDefault": "Varsayılanı kullan", + "decreaseValue": "{label} değerini azalt", + "increaseValue": "{label} değerini artırın", + "toggleValue": "{label}'yi değiştir", + "validation": { + "finiteNumber": "Sonlu bir sayı olmalı", + "nonNegativeInteger": "Negatif olmayan bir tam sayı olmalıdır", + "contextLengthAtLeastMaxTokens": "Maksimum token değerinden büyük veya ona eşit olmalıdır", + "maxTokensWithinContextLength": "Bağlam Uzunluğundan küçük veya ona eşit olmalıdır" + } + }, + "modelPicker": { + "empty": "Hiçbir model bulunamadı", + "audioInputSupported": "Ses girişi destekleniyor" + }, + "audio": { + "play": "Oynamak", + "pause": "Duraklat" + }, + "call": { + "title": "Voice.ai Çağrı", + "description": "Voice.ai sesine agent bağlanmak için tıklayın, çağrı bağlandıktan sonra konuşun.", + "start": "Sesli Aramayı Başlat", + "stop": "Aramayı Bitir", + "end": "Telefonu kapatmak" + }, + "skills": { + "indicator": { + "active": "{count} sabitlendi skills", + "none": "Sabitlenmemiş skills" + }, + "panel": { + "title": "Sabitlendi Skills", + "manage": "Üstesinden gelmek", + "empty": "skills kurulu değil" + } + }, + "workspace": { + "title": "Çalışma alanı", + "collapse": "Yıkılmak", + "sections": { + "files": "Dosyalar", + "git": "Git", + "artifacts": "Artifacts", + "subagents": "Alt temsilciler" + }, + "plan": { + "section": "Planı", + "empty": "Henüz görev yok", + "itemAriaLabel": "{status}: {step}", + "status": { + "pending": "Askıda olması", + "in_progress": "Devam etmekte", + "completed": "Tamamlanmış", + "failed": "Arızalı", + "skipped": "Atlandı" + } + }, + "files": { + "section": "Dosyalar", + "empty": "Dosya yok", + "loading": "Dosyalar yükleniyor...", + "noWorkspace": { + "title": "Çalışma alanı yok", + "description": "Çalışma alanını ayarlamak için bir klasör seçin veya sürükleyin", + "button": "Klasör seç" + }, + "contextMenu": { + "openFile": "Dosyayı aç", + "revealInFolder": "Dosya yöneticisinde göster", + "insertPath": "Girişe ekle" + } + }, + "git": { + "empty": "Fark mevcut değil", + "clean": "Temiz çalışan ağaç", + "staged": "Aşamalı", + "unstaged": "Sahnelenmemiş" + }, + "subagents": { + "empty": "Henüz çocuk oturumu yok", + "self": "öz", + "status": { + "working": "Koşma", + "error": "Hata", + "idle": "Boşta" + } + }, + "browser": { + "section": "Tarayıcı", + "empty": "Henüz sekme yok" + }, + "terminal": { + "section": "terminal", + "empty": "Henüz çıktı yok", + "contextMenu": { + "terminate": "Sonlandır", + "delete": "Kaydı sil", + "expand": "Genişletmek", + "collapse": "Yıkılmak" + }, + "output": { + "truncated": "[kesildi]" + }, + "noOutput": "Çıkış yok", + "status": { + "running": "Koşma", + "completed": "Başarı", + "failed": "Arızalı", + "timed_out": "Zaman aşımına uğradı", + "aborted": "İptal edildi" + } + } + }, + "newThread": { + "title": "İnşa edin ve keşfedin" + }, + "floatingWidget": { + "title": "Göreve Genel Bakış", + "collapse": "Kayan oturumları daralt", + "empty": "Henüz agent oturumu yok", + "executing": "aktif", + "sessionCount": "{count} oturumları", + "untitled": "Yeni Sohbet", + "status": { + "inProgress": "Devam etmekte", + "done": "Tamamlamak", + "error": "Hata" + } + }, + "permissionMode": { + "default": "Varsayılan izinler", + "fullAccess": "Tam erişim" + }, + "sidebar": { + "allAgents": "Hepsi Agent", + "expandSidebar": "Kenar çubuğunu genişlet", + "collapseSidebar": "Kenar çubuğunu daralt", + "remoteControlDisabled": "Engelli", + "remoteControlStatus": { + "disabled": "Uzaktan kumanda devre dışı", + "stopped": "Uzaktan kumanda durduruldu", + "starting": "Uzaktan kumandanın başlatılması", + "running": "Uzaktan kumanda çalışıyor", + "backoff": "Uzaktan kumanda yeniden deneniyor", + "error": "Uzaktan kumanda hatası" + }, + "groupByDate": "Tarihe göre gruplandır", + "groupByProject": "Projeye göre gruplandır", + "pinned": "Sabitlendi", + "emptyTitle": "Henüz görüşme yok", + "emptyDescription": "Başlamak için yeni bir sohbet başlatın", + "searchPlaceholder": "Sohbetlerde ara", + "searchAriaLabel": "Sohbetlerde ara", + "searchEmptyTitle": "Eşleşen görüşme yok", + "searchEmptyDescription": "Farklı bir başlık anahtar kelimesini deneyin" + }, + "spotlight": { + "placeholder": "Sohbetlerde, agents, ayarlarda, işlemlerde arama yapın…", + "searching": "Arama…", + "emptyTitle": "Eşleşen sonuç yok", + "emptyDescription": "Başka bir anahtar kelime deneyin veya yakın zamanda gerçekleşen bir oturumu açın.", + "hints": "↑↓ taşı · Giriş aç · Esc kapat · Ana sayfa/End atla", + "kind": { + "session": "Oturum", + "message": "Mesaj", + "agent": "Agent", + "setting": "Ayar", + "action": "Aksiyon" + } + }, + "inlineSearch": { + "placeholder": "Görüşmede ara", + "ariaLabel": "Mevcut görüşmede ara", + "previous": "Önceki maç", + "next": "Sonraki maç", + "close": "Aramayı kapat" + }, + "onboarding": { + "agentSwitch": { + "title": "DeepChat Agent'a geç", + "description": "Sohbet etmeden önce ACP'den uzaklaşın ve yerleşik DeepChat akışına dönün.", + "caption": "Devam etmek için kenar çubuğunda vurgulanan agent düğmesini tıklayın." + }, + "switchModel": { + "description": "İlk DeepChat görüşmeniz için kullanmak istediğiniz modeli seçin.", + "caption": "Vurgulanan model değiştiriciyi kullanın ve mevcut herhangi bir modeli seçin." + }, + "firstChat": { + "description": "Her şey hazır. İlk katılım akışını tamamlamak için ilk mesajınızı buraya yazın.", + "caption": "Siz ilk mesajınızı gönderene kadar spot ışığı giriş kutusunun üzerinde kalır." + } + } +} diff --git a/src/renderer/src/i18n/tr-TR/common.json b/src/renderer/src/i18n/tr-TR/common.json new file mode 100644 index 000000000..2a570c260 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/common.json @@ -0,0 +1,128 @@ +{ + "loading": "Yükleniyor...", + "copy": "Kopyala", + "copied": "Kopyalandı", + "paste": "Yapıştır", + "copySuccess": "Başarıyı Kopyala", + "copySuccessDesc": "İçerik panoya kopyalandı", + "copyImageSuccess": "Başarıyı Kopyala", + "copyImageSuccessDesc": "Resim panoya kopyalandı", + "copyFailed": "Kopyalama Başarısız", + "copyFailedDesc": "İçerik panoya kopyalanamadı", + "copyCode": "Kodu Kopyala", + "export": "İhracat", + "newChat": "Yeni Sohbet", + "newTopic": "Yeni Konu", + "cancel": "İptal etmek", + "confirm": "Onaylamak", + "next": "Sonraki", + "back": "Geri", + "enabled": "Etkinleştirilmiş", + "disabled": "Engelli", + "disclaimer": "Sorumluluk reddi beyanı", + "close": "Kapalı", + "open": "Açık", + "image": "resim", + "noContent": "İçerik yok", + "preview": "Önizleme", + "source": "Kaynak", + "more": "Daha", + "decrease": "Azaltmak", + "increase": "Arttırmak", + "fontSmaller": "Daha küçük yazı tipi", + "fontReset": "Yazı tipini sıfırla", + "fontLarger": "Daha büyük yazı tipi", + "zoomIn": "Yakınlaştır", + "zoomOut": "Uzaklaştır", + "resetZoom": "Yakınlaştırmayı sıfırla", + "error": { + "requestFailed": "İstek başarısız oldu...", + "createChatFailed": "Sohbet oluşturulamadı", + "selectChatFailed": "Sohbet seçilemedi", + "renameChatFailed": "Sohbet yeniden adlandırılamadı", + "deleteChatFailed": "Sohbet silinemedi", + "cleanMessagesFailed": "Mesajlar temizlenemedi", + "userCanceledGeneration": "Kullanıcı oluşturma işlemini iptal etti", + "sessionInterrupted": "Oturum beklenmedik bir şekilde kesintiye uğradı, oluşturma işlemi tamamlanmadı", + "noModelResponse": "Model herhangi bir içerik döndürmedi; zaman aşımına uğramış olabilir", + "invalidJson": "Geçersiz JSON biçimi", + "maximumToolCallsReached": "Maksimum Takım Çağrısına Ulaşıldı", + "causeOfError": "Olası hata nedenleri:", + "error400": "Hatalı istek, muhtemelen bir parametre veya uyumluluk sorunu", + "error401": "Kimlik doğrulama başarısız oldu, muhtemelen yanlış API Key veya alan adı", + "error403": "Modele erişim yasak, muhtemelen bakiye yetersiz veya izin yok", + "error404": "İstenen URL bulunamadı, muhtemelen hatalı alan adı veya model adı", + "error429": "Çok fazla istek var, muhtemelen hız hizmet nedeniyle sınırlı", + "error500": "Sunucu hatası, hizmet kararsız olabilir, lütfen daha sonra tekrar deneyin", + "error502": "Ağ geçidi hatası, hizmet kararsız olabilir, lütfen daha sonra tekrar deneyin", + "error503": "Hizmet kullanılamıyor, hizmet kararsız olabilir, lütfen daha sonra tekrar deneyin", + "error504": "İstek zaman aşımı, hizmet kararsız olabilir veya ağ sorunları olabilir, lütfen proxy ayarlarını kontrol edip tekrar deneyin", + "operationFailed": "İşlem başarısız oldu", + "invalidQuestionRequest": "Geçersiz soru isteği" + }, + "resetDataConfirmTitle": "Tüm Veriler Sıfırlansın mı?", + "resetDataConfirmDescription": "Bu, tüm verilerinizi varsayılan ayarlara sıfırlayacaktır. Bu eylem geri alınamaz.", + "title": "Genel ayarlar", + "resetData": "Verileri sıfırla", + "language": "dil", + "languageSelect": "Bir dil seçin", + "searchEngine": "Arama Motoru", + "searchEngineSelect": "Bir arama motoru seçin", + "searchPreview": "Arama önizlemesi", + "searchAssistantModel": "Asistan Modeli", + "selectModel": "Bir model seçin", + "proxyMode": "Proxy Modu", + "proxyModeSelect": "Proxy Modunu Seçin", + "proxyModeSystem": "Sistem Proxy'si", + "proxyModeNone": "Vekil Yok", + "proxyModeCustom": "Özel Proxy", + "customProxyUrl": "Özel Proxy URL", + "customProxyUrlPlaceholder": "Örnek: http://127.0.0.1:7890", + "invalidProxyUrl": "Geçersiz proxy URL, lütfen geçerli bir http/https URL girin", + "languageSystem": "Sistemi takip edin", + "watermarkTip": "Yapay zeka tarafından oluşturuldu", + "collapse": "Yıkılmak", + "expand": "Genişletmek", + "add": "Eklemek", + "reset": "Sıfırla", + "format": "Biçim", + "edit": "Düzenlemek", + "delete": "Silmek", + "save": "Kaydetmek", + "clear": "Temizlemek", + "saved": "Kaydedildi", + "unknownError": "Bilinmeyen hata", + "testing": "Test devam ediyor", + "saving": "Kaydediliyor", + "scrollLeft": "Sola kaydır", + "scrollRight": "Sağa kaydır", + "history": "Tarih", + "minimize": "Küçült", + "maximize": "Büyüt", + "restore": "Eski haline getirmek", + "browser": { + "back": "Geri", + "forward": "İleri", + "reload": "Yeniden yükle", + "addressLabel": "Adres çubuğu", + "addressPlaceholder": "Bir URL girin", + "enterUrlToStart": "Göz atmaya başlamak için bir URL girin", + "enterUrlDescription": "Bir web sitesini ziyaret etmek için yukarıdaki adres çubuğuna URL yazın", + "name": "Tarayıcınız" + }, + "size": { + "bytes": "{count} bayt" + }, + "time": { + "today": "Bugün", + "yesterday": "Dün", + "lastWeek": "Geçen hafta", + "older": "daha yaşlı" + }, + "project": { + "select": "Proje seçin", + "none": "Proje yok", + "recent": "Son projeler", + "openFolder": "Klasörü aç..." + } +} diff --git a/src/renderer/src/i18n/tr-TR/components.json b/src/renderer/src/i18n/tr-TR/components.json new file mode 100644 index 000000000..ea4db1657 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Emoji Ara", + "smileys": "Suratlar ve Duygular", + "people": "İnsanlar ve Vücut", + "animals": "Hayvanlar ve Doğa", + "food": "Yiyecek ve İçecek", + "travel": "Seyahat ve Yerler", + "activities": "Faaliyetler", + "objects": "Nesneler", + "symbols": "Semboller", + "flags": "Bayraklar" + }, + "messageBlockAction": { + "continue": "Devam etmek", + "continued": "Devamı" + }, + "messageBlockPermissionRequest": { + "title": "İzin Gerekli", + "allow": "İzin vermek", + "allowOnce": "Bir Kez İzin Ver", + "allowForSession": "Oturuma İzin Ver", + "allowOnceTooltip": "Kararı kaydetmeden bu komutu bir kez yürütün.", + "allowForSessionTooltip": "Bu komutu yalnızca bu konuşma için hatırlayın.", + "deny": "Reddetmek", + "rememberChoice": "Bu seçimi hatırla", + "granted": "İzin verildi", + "denied": "İzin reddedildi", + "riskLabel": "Risk", + "type": { + "read": "Okuma Erişimi", + "write": "Yazma Erişimi", + "all": "Tam Erişim", + "command": "Komutu Yürüt" + }, + "description": { + "read": "'{serverName}'den '{toolName}' öğesinin okuma işlemlerini gerçekleştirmesine izin verilsin mi?", + "write": "'{serverName}'den '{toolName}'nin yazma işlemlerini gerçekleştirmesine izin verilsin mi?", + "all": "'{serverName}'den '{toolName}' öğesinin okuma ve yazma işlemlerini gerçekleştirmesine izin verilsin mi?", + "command": "Komutu yürütün: {command}", + "commandWithRisk": "Komutu yürütün: {command}\n\nRisk düzeyi: {riskLevel}\n\nÖneri: {suggestion}" + }, + "riskLevel": { + "low": "Düşük", + "medium": "Orta", + "high": "Yüksek", + "critical": "Kritik" + }, + "suggestion": { + "low": "Bu, etkisi minimum düzeyde olan salt okunur bir komuttur.", + "medium": "Bu komut durumu değiştirebilir veya bağımlılıkları yükleyebilir. Çalıştırmadan önce inceleyin.", + "high": "Bu komut, dosyaları veya sistem durumunu değiştirir. Dikkatlice ilerleyin.", + "critical": "Bu komut yıkıcı olabilir veya harici ağlara erişebilir. Amacı doğrulayın." + } + }, + "promptParamsDialog": { + "title": "{name} Parametre Ayarları", + "description": "Lütfen aşağıdaki parametreleri doldurun. * işaretli alanların doldurulması zorunludur.", + "required": "Bu alan gereklidir." + }, + "messageBlockQuestionRequest": { + "title": "Soru", + "send": "Göndermek", + "reject": "Reddetmek", + "selected": "Seçildi", + "rejected": "Reddedilmiş", + "customPlaceholder": "Cevabınızı yazın...", + "answerLabel": "Cevap" + } +} diff --git a/src/renderer/src/i18n/tr-TR/contextMenu.json b/src/renderer/src/i18n/tr-TR/contextMenu.json new file mode 100644 index 000000000..206a90c82 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "Çevir", + "original": "Orijinal", + "translated": "Çeviri", + "error": "Çeviri başarısız oldu" + }, + "askAI": { + "title": "Yapay zekaya sor", + "question": "Soru", + "answer": "Cevap", + "error": "AI yanıtı başarısız oldu" + }, + "copy": "Kopyala", + "paste": "Yapıştır", + "cut": "Kesmek" +} diff --git a/src/renderer/src/i18n/tr-TR/dialog.json b/src/renderer/src/i18n/tr-TR/dialog.json new file mode 100644 index 000000000..b204440e1 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "İptal etmek", + "confirm": "Onaylamak", + "close": "Kapalı", + "ok": "TAMAM", + "delete": { + "title": "Bu görüşmeyi silmek istediğinizden emin misiniz?", + "description": "Bu eylem geri alınamaz.", + "confirm": "Silmek" + }, + "rename": { + "title": "Konuşmayı Yeniden Adlandır", + "description": "Lütfen görüşme için yeni bir ad girin." + }, + "cleanMessages": { + "title": "Tüm Mesajları Temizle", + "description": "Bu işlem, bu görüşmedeki tüm mesajları ve dosyaları silecektir. Devam etmek istediğinizden emin misiniz?", + "confirm": "Temizlemek" + }, + "fork": { + "title": "Şube Oluştur", + "description": "Bu, ilk mesajdaki tüm mesajları mevcut mesaja, diyaloğa devam edebileceğiniz yeni bir sohbete kopyalayacaktır.", + "confirm": "Şube Oluştur", + "tag": "Dal" + }, + "error": { + "title": "Hata" + }, + "mutualExclusive": { + "title": { + "reasoning": "Akıl Yürütmeyi Etkinleştirmeyi Onaylayın", + "functionCall": "İşlev Çağrısını Etkinleştirmeyi Onaylayın" + }, + "message": { + "reasoning": "Akıl yürütmenin etkinleştirilmesi, işlev çağrısını otomatik olarak devre dışı bırakacaktır. Bu, DeepSeek-V3.1 modellerinin bir sınırlamasıdır ve her iki özellik aynı anda kullanılamaz. Devam etmek?", + "functionCall": "İşlev çağrısını etkinleştirmek, akıl yürütmeyi otomatik olarak devre dışı bırakacaktır. Bu, DeepSeek-V3.1 modellerinin bir sınırlamasıdır ve her iki özellik aynı anda kullanılamaz. Devam etmek?" + }, + "warningText": { + "reasoning": "Not: Akıl yürütmenin etkinleştirilmesi, DeepSeek-V3.1 modellerinin bir gereği olan işlev çağrısını otomatik olarak devre dışı bırakacaktır.", + "functionCall": "Not: İşlev çağrısının etkinleştirilmesi, DeepSeek-V3.1 modellerinin bir gereği olan akıl yürütmeyi otomatik olarak devre dışı bırakacaktır." + }, + "confirmEnable": "Etkinleştirmeyi Onayla" + } +} diff --git a/src/renderer/src/i18n/tr-TR/image.json b/src/renderer/src/i18n/tr-TR/image.json new file mode 100644 index 000000000..cc15dd560 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "Resim yüklenemedi", + "loading": "Resim yükleniyor...", + "preview": "Resmin önizlemesi", + "save": "Resmi kaydet", + "saveAs": "Resmi Farklı Kaydet...", + "saveSuccess": "Resim kaydedildi", + "saveFailed": "Resim kaydedilemedi" +} diff --git a/src/renderer/src/i18n/tr-TR/index.ts b/src/renderer/src/i18n/tr-TR/index.ts new file mode 100644 index 000000000..6ac156ddd --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Tekil ust duzey anahtarlar +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Qwen Model', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + 'DeepChat yalnızca yardımcı bir araçtır. Kullanıcı aramayı kendisi başlattığında, arama motorlarının döndürdüğü herkese açık verileri düzenler ve özetler; böylece kullanıcıların arama sonuçlarını daha kolay görüntülemesine ve anlamasına yardımcı olur.\n\n1. **Herkese Açık Verilerin Kullanımı** \nBu yazılım yalnızca hedef web sitelerinde veya arama motorlarında oturum açmadan erişilebilen herkese açık verileri işler. Kullanmadan önce hedef web sitesinin veya arama motorunun hizmet koşullarını mutlaka inceleyin ve bunlara uyun; kullanımınızın yasal ve kurallara uygun olduğundan emin olun. \n\n2. **Bilgi Doğruluğu ve Sorumluluk** \nBu yazılım tarafından düzenlenen ve oluşturulan içerik yalnızca referans amaçlıdır; hiçbir şekilde hukuki, ticari veya başka türde bir tavsiye niteliği taşımaz. Geliştiriciler arama sonuçlarının doğruluğu, eksiksizliği, güncelliği veya yasallığı konusunda herhangi bir garanti vermez; yazılımın kullanımından doğan tüm sonuçlardan kullanıcı sorumludur. \n\n3. **Sorumluluk Reddi** \nBu yazılım "olduğu gibi" sağlanır. Geliştiriciler performansı, kararlılığı veya belirli bir amaca uygunluğu konusunda açık ya da zımni hiçbir garanti veya sorumluluk üstlenmez. Kullanıcının bu yazılımı kullanırken ilgili yasa ve düzenlemeleri ya da hedef web sitesinin kurallarını ihlal etmesinden doğabilecek herhangi bir uyuşmazlık, kayıp veya hukuki sorumluluktan geliştiriciler sorumlu değildir. \n\n4. **Kullanıcının Sorumlu Kullanımı** \nKullanıcılar bu yazılımı kullanmadan önce, kullanım biçimlerinin başkalarının fikri mülkiyet haklarını, ticari sırlarını veya diğer meşru haklarını ihlal etmeyeceğini tam olarak anlamalı ve teyit etmelidir. Kullanıcının uygunsuz kullanımından doğan tüm hukuki uyuşmazlıklar ve sonuçlar kullanıcının kendi sorumluluğundadır. \n\nBu yazılımı kullanmak, kullanıcının bu sorumluluk reddinin tüm hükümlerini okuduğu, anladığı ve kabul ettiği anlamına gelir. Sorularınız varsa profesyonel bir hukuk danışmanına başvurun.' +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/tr-TR/mcp.json b/src/renderer/src/i18n/tr-TR/mcp.json new file mode 100644 index 000000000..f13d5d184 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/mcp.json @@ -0,0 +1,307 @@ +{ + "title": "MCP Ayarlar", + "description": "MCP (Model Bağlam Protokolü) sunucularını ve araçlarını yönetin ve yapılandırın", + "enabledTitle": "MCP'yi etkinleştir", + "enabledDescription": "Etkinleştirildiğinde tüm etkin hizmetler otomatik olarak başlar.", + "enableToAccess": "Yapılandırma seçeneklerine erişmek için lütfen MCP'yi etkinleştirin.", + "errors": { + "loadConfigFailed": "MCP yapılandırması yüklenemedi", + "setEnabledFailed": "MCP etkin durumu ayarlanamadı", + "getServerStatusFailed": "{serverName} sunucusunun durumu alınamadı", + "addServerFailed": "Sunucu eklenemedi", + "updateServerFailed": "Sunucu güncellenemedi", + "removeServerFailed": "Sunucu kaldırılamadı", + "maxDefaultServersReached": "Maksimum varsayılan sunucu sayısına (30) ulaşıldı", + "toggleDefaultServerFailed": "Varsayılan sunucu durumu değiştirilemedi", + "resetToDefaultFailed": "Varsayılan sunuculara sıfırlanamadı", + "toggleServerFailed": "{serverName} sunucusu değiştirilemedi", + "loadToolsFailed": "Araçlar yüklenemedi", + "loadPromptsFailed": "prompts yüklenemedi", + "loadResourcesFailed": "Kaynaklar yüklenemedi", + "callToolFailed": "{toolName} aracı çağrılamadı", + "toolCallError": "Araç çağırma hatası: {error}", + "mcpDisabled": "MCP devre dışı", + "getPromptFailed": "prompt alınamadı", + "readResourceFailed": "Kaynak okunamadı", + "promptNotFound": "prompt '{name}' bulunamadı", + "emptyPromptContent": "prompt '{name}' içeriği yok", + "missingParameters": "Gerekli parametreler eksik: {params}", + "invalidParameters": "Şunun için geçersiz parametreler: {params}" + }, + "tabs": { + "servers": "Sunucular", + "tools": "Aletler" + }, + "serverList": "Sunucu listesi", + "addServer": "Sunucu Ekle", + "running": "Koşma", + "stopped": "Durduruldu", + "stopServer": "Sunucuyu durdur", + "startServer": "Sunucuyu başlat", + "noServersFound": "Sunucu bulunamadı", + "addServerDialog": { + "title": "Sunucu Ekle", + "description": "Yeni bir MCP sunucusu yapılandırın" + }, + "editServerDialog": { + "title": "Sunucuyu Düzenle", + "description": "MCP sunucu yapılandırmasını düzenleyin" + }, + "serverForm": { + "name": "Sunucu Adı", + "namePlaceholder": "Sunucu adını girin", + "nameRequired": "Sunucu adı boş olamaz", + "type": "Sunucu Türü", + "typePlaceholder": "Bir sunucu türü seçin", + "typeStdio": "Standart giriş ve çıkış", + "typeSse": "Sunucu Tarafından Gönderilen Etkinlikler (SSE)", + "typeInMemory": "Hafıza", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "Sunucu temel URL girin (örneğin: http://localhost:3000)", + "command": "Emretmek", + "commandPlaceholder": "Bir komut girin", + "commandRequired": "Komut boş olamaz", + "args": "Argümanlar", + "argsPlaceholder": "Her satıra bir argüman girin", + "addArg": "Bağımsız Değişken Ekle", + "argPlaceholder": "Bağımsız değişken değerini girin", + "argsRequired": "Parametreler boş olamaz", + "env": "Ortam Değişkenleri", + "envPlaceholder": "Ortam değişkenlerini JSON biçiminde girin", + "envInvalid": "Ortam değişkenleri geçerli JSON biçiminde olmalıdır", + "description": "Tanım", + "descriptionPlaceholder": "Sunucu açıklamasını girin", + "descriptions": "Tanım", + "descriptionsPlaceholder": "Sunucu açıklamasını girin", + "icon": "Simge", + "iconPlaceholder": "Simgeyi girin", + "icons": "Simgeler", + "iconsPlaceholder": "Simgeleri girin", + "autoApprove": "Otomatik onayla", + "autoApproveAll": "Tüm", + "autoApproveRead": "Okumak", + "autoApproveWrite": "Yazmak", + "autoApproveHelp": "Otomatik yetkilendirme gerektiren işlem tipini seçin ve kullanıcı onayı olmadan çalıştırın", + "submit": "Göndermek", + "add": "Eklemek", + "update": "Güncelleme", + "cancel": "İptal etmek", + "jsonConfigIntro": "JSON yapılandırmasını doğrudan yapıştırabilir veya sunucuyu manuel olarak yapılandırmayı seçebilirsiniz.", + "jsonConfig": "JSON yapılandırması", + "jsonConfigPlaceholder": "Lütfen MCP sunucusunun JSON biçim yapılandırmasını yapıştırın", + "jsonConfigExample": "JSON yapılandırma örneği", + "parseSuccess": "Yapılandırma başarıyla ayrıştırıldı", + "configImported": "Yapılandırma içe aktarma işlemi başarılı oldu", + "parseError": "Ayrıştırma hatası", + "skipToManual": "Manuel yapılandırmaya atla", + "parseAndContinue": "Ayrıştır ve Devam Et", + "folders": "Klasör Listesi", + "addFolder": "Klasör Ekle", + "selectFolder": "Klasör Seçin", + "selectFolderError": "Klasör seçilemedi", + "noFoldersSelected": "Hiçbir klasör seçilmedi" + }, + "deleteServer": "Sunucuyu Sil", + "editServer": "Sunucuyu Düzenle", + "setDefault": "Varsayılan olarak ayarla", + "removeDefault": "Varsayılanı kaldır", + "isDefault": "Varsayılan sunucu", + "default": "varsayılan", + "setAsDefault": "Varsayılan sunucu olarak ayarla", + "removeServer": "Sunucuyu Kaldır", + "confirmRemoveServer": "{name} sunucusunu silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "removeServerDialog": { + "title": "Sunucuyu Sil" + }, + "confirmDelete": { + "title": "Silmeyi onayla", + "description": "{name} sunucusunu silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "confirm": "Silmek", + "cancel": "İptal etmek" + }, + "resetToDefault": "Varsayılan hizmeti geri yükle", + "resetConfirmTitle": "Varsayılan hizmeti geri yükle", + "resetConfirmDescription": "Bu işlem, özel sunucularınızı koruyarak tüm varsayılan sunucuları geri yükler. Varsayılan sunucularda yaptığınız değişiklikler kaybolur.", + "resetConfirm": "Eski haline getirmek", + "tools": { + "searchPlaceholder": "Arama araçları...", + "noToolsAvailable": "Kullanılabilir araç yok", + "selectToolToDebug": "Hata ayıklamak için bir araç seçin", + "dialogDescription": "MCP sunucuları tarafından sağlanan hata ayıklama ve test araçları", + "toolsCount": "araç", + "availableTools": "Mevcut Araçlar", + "toolList": "Araç Listesi", + "functionDescription": "Fonksiyon Açıklaması", + "invalidJson": "Geçersiz JSON biçimi", + "inputHint": "Lütfen parametreleri JSON formatında girin", + "required": "Gerekli", + "noDescription": "Açıklama yok", + "input": "Argümanlar", + "path": "Yol", + "pathPlaceholder": "Dosya yolunu girin", + "searchPattern": "Arama modeli", + "searchPatternPlaceholder": "Normal ifadeyi girin", + "filePattern": "Dosya deseni", + "filePatternPlaceholder": "Dosya modelini girin, örneğin: *.md", + "executeButton": "Aracı Çalıştır", + "resultTitle": "Sonuç", + "runningTool": "Araç yürütülüyor...", + "loading": "Yükleniyor...", + "error": "Yükleme başarısız oldu", + "available": "{count} mevcut", + "none": "Kullanılabilir araç yok", + "title": "MCP Araçlar", + "description": "MCP sunucusu tarafından sağlanan araçlar", + "loadError": "Araçlar yüklenemedi", + "parameters": "Parametreler", + "refresh": "Yenile", + "disabled": "MCP devre dışı", + "enableToUse": "Araçları kullanmak için lütfen MCP'yi etkinleştirin", + "enabled": "MCP'yi etkinleştir", + "enabledDescription": "Araç çağrılarını kullanmak için MCP işlevini etkinleştirin", + "acpManagedHint": "ACP modu: MCP erişimi ACP Agent ayarları tarafından yönetilir (burada salt okunurdur).", + "acpServersSelected": "{count} MCP'ler seçildi", + "acpServersNone": "Hiçbir MCP sunucusu yapılandırılmadı", + "jsonInputPlaceholder": "Parametreleri JSON formatında girin", + "type": "Tip", + "annotations": "Ek açıklamalar", + "empty": "Boş", + "invalidJsonFormat": "JSON biçimi yanlış", + "allowedValues": "İzin verilen değerler", + "arrayItemValues": "Dizi öğesi değerleri" + }, + "inmemory": { + "bochaSearch": { + "name": "Bocha Ara", + "desc": "Bocha Arama API https://open.bochaai.com/" + }, + "buildInFileSystem": { + "name": "Dosya Sistemi", + "desc": "DeepChat öğesinin yerel dosya sistemiyle etkileşime girmesine izin verin." + }, + "Artifacts": { + "name": "Artifacts", + "desc": "DeepChat'de daha zengin Artifacts üretin" + }, + "braveSearch": { + "name": "Brave Ara", + "desc": "Brave Arama API https://brave.com/search/api/" + }, + "difyKnowledge": { + "name": "Dify Bilgi Bankası Araması", + "desc": "Dify Bilgi Bankası Arama Hizmeti, Dify Bilgi Bankasındaki içeriği alabilmektedir" + }, + "ragflowKnowledge": { + "name": "RAGFlow Bilgi Bankası Araması", + "desc": "RAGFlow bilgi tabanı arama hizmeti, RAGFlow bilgi tabanı içeriğini arayabilir" + }, + "fastGptKnowledge": { + "name": "FastGPT Bilgi Bankası Araması", + "desc": "FastGPT bilgi tabanı arama hizmeti, FastGPT bilgi tabanı içeriğini arayabilir" + }, + "builtinKnowledge": { + "name": "Yerleşik bilgi tabanı araması", + "desc": "DeepChat DeepChat belgeleri ve kılavuzları için yerleşik bilgi tabanında arama." + }, + "deepchat-inmemory/custom-prompts-server": { + "name": "Özel prompt", + "desc": "DeepChat yerleşik özel prompts hizmeti" + }, + "deepchat-inmemory/deep-research-server": { + "name": "Derin Araştırma", + "desc": "DeepChat Bocha Arama tarafından desteklenen yerleşik derin araştırma. Uzun bağlamlı modeller tavsiye edilir." + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Otomatik Şablon İstemi", + "desc": "Girdiye göre en iyi özel prompt öğesini otomatik olarak seçin ve şablonu akıllıca doldurun." + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Konuşma Geçmişi Araması", + "desc": "DeepChat geçmiş sohbetler ve mesajlar için yerleşik konuşma geçmişi araması." + }, + "deepchat/apple-server": { + "name": "macOS Sistem Asistanı", + "desc": "Modellerin Takvim, Kişiler, Mail, Haritalar, Notlar ve Anımsatıcılar gibi macOS uygulamalarını çalıştırmasına izin verin." + } + }, + "prompts": { + "noPromptsAvailable": "Hayır prompt Mevcut", + "noDescription": "Henüz açıklama yok", + "selectPrompt": "Seçilen prompt için ayrıntılar burada gösterilecektir.", + "parameters": "Parametreler", + "input": "Parametreler", + "runningPrompt": "prompt getiriliyor...", + "executeButton": "prompt'yi edinin", + "resultTitle": "prompt Ayrıntılar", + "resetToDefault": "Varsayılan parametrelere sıfırla", + "invalidJson": "Geçersiz JSON biçimi", + "parametersHint": "Lütfen parametreleri JSON formatında girin, otomatik formatlamayı destekleyin", + "dialogDescription": "MCP sunucuları tarafından sağlanan prompts hata ayıklama ve test etme" + }, + "resources": { + "noResourcesAvailable": "Mevcut Kaynak Yok", + "selectResource": "İçeriğini görüntülemek için bir kaynak seçin.", + "loading": "Yükleniyor...", + "loadContent": "İçerik Yükle", + "pleaseSelect": "Kaynak ayrıntılarını görüntülemek için tıklayın.", + "dialogDescription": "MCP sunucuları tarafından sağlanan kaynaklara göz atın ve görüntüleyin" + }, + "market": { + "browseBuiltin": "Yerleşik MCP Pazarına Göz Atın", + "builtinTitle": "MCP Pazar", + "poweredBy": "MCPRouter tarafından desteklenmektedir", + "keyGuide": "API Key'yi edinin", + "keyHelpText": "Lütfen şu adrese gidin:", + "keyHelpEnd": "API Key başvurusunda bulunmak ve bunu yukarıdaki giriş kutusuna doldurmak için", + "apiKeyPlaceholder": "MCPRouter'a girin API Key", + "apiKeyRequiredTitle": "API Key Gerekli", + "apiKeyRequiredDesc": "Lütfen kurulumdan önce MCPRouter API Key alanını doldurun", + "install": "Düzenlemek", + "installed": "Yüklendi", + "installSuccess": "Kurulum başarılı", + "installFailed": "Kurulum başarısız oldu", + "noMore": "Daha fazla yok", + "empty": "Hizmet yok", + "loadMore": "Daha Fazla Yükle", + "pullDownToLoad": "Daha fazlasını yüklemek için aşağı çekmeye devam edin" + }, + "sampling": { + "approve": "Onaylamak", + "confirming": "onaylanıyor…", + "confirm": "Yanıt gönder", + "sendResponse": "Yanıt Gönder", + "selectModel": "Modeli Seçin", + "respondWith": "Şu şekilde yanıt verin:", + "maxTokensInfo": "Maksimum yanıt uzunluğu: {maxTokens} tokens", + "contentType": { + "audio": "Ses", + "image": "Resim", + "text": "Metin" + }, + "description": "MCP sunucusu tarafından paylaşılan içeriği inceleyin ve bir yanıt oluşturulup oluşturulmayacağını seçin.", + "imageAlt": "Resim {索引}", + "messagesTitle": "Konuşma bağlamı", + "noModels": "Hiçbir uygun model etkin değil.\nDevam etmek için \"Ayarlar\" bölümünde uygun bir modeli etkinleştirin.", + "noVisionModels": "Hiçbir görsel özellikli model etkin değil.\nDevam etmek için \"Ayarlar\" bölümünde bir görsel modeli etkinleştirin.", + "preference": { + "cost": "Maliyet önceliği", + "hints": "Model ipuçları", + "intelligence": "İstihbarat önceliği", + "speed": "Hız önceliği" + }, + "preferencesTitle": "Model tercihleri", + "reject": "Reddetmek", + "selectedModelLabel": "{model} ({provider}) ile yanıt veriliyor", + "systemPrompt": "Sistem prompt", + "title": "{server} adresinden numune alma isteği", + "unknownHint": "Adsız ipucu", + "unknownMime": "Bilinmeyen MIME türü", + "unknownServer": "Bilinmeyen sunucu", + "unsupportedMessage": "Bu içerik türü desteklenmiyor.", + "visionWarning": "Seçili model görsel girişi desteklemiyor.\nDevam etmeden önce lütfen görsel özellikli bir model seçin.", + "autoApproving": "MCP {server}'dan Örnekleme Talebi", + "autoApproveIn": "{model} kullanarak {seconds}s'de otomatik onaylama", + "reviewRequest": "Gözden geçirmek", + "sessionActive": "Oturum etkin - istekler otomatik olarak onaylanacak" + } +} diff --git a/src/renderer/src/i18n/tr-TR/model.json b/src/renderer/src/i18n/tr-TR/model.json new file mode 100644 index 000000000..6f0a1d5e5 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Modelleri ara..." + }, + "error": { + "loadFailed": "Modeller yüklenemedi" + }, + "type": { + "custom": "Özel Model", + "official": "Resmi Model" + }, + "add": { + "namePlaceholder": "Model Adı", + "idPlaceholder": "Model Kimliği", + "contextLengthPlaceholder": "Bağlam Uzunluğu", + "maxTokensPlaceholder": "Maksimum token" + }, + "actions": { + "add": "Model Ekle", + "enableAll": "Tümünü Etkinleştir", + "disableAll": "Tümünü Devre Dışı Bırak" + }, + "sort": { + "status": "Duruma Göre", + "name": "İsme Göre" + }, + "filter": { + "label": "Filtre", + "clearAll": "Filtreleri Temizle", + "visibleCount": "{visible} / {total} gösteriliyor", + "capabilities": "Yetenekler", + "types": "Türler", + "capabilityOptions": { + "vision": "Görüş", + "functionCall": "İşlev Çağırma", + "reasoning": "muhakeme", + "search": "Web Araması" + }, + "typeOptions": { + "chat": "Sohbet", + "embedding": "Gömme", + "rerank": "Yeniden Sırala", + "imageGeneration": "Görüntü Üretimi", + "videoGeneration": "Video Oluşturma" + } + }, + "tags": { + "reasoning": "muhakeme", + "chat": "Sohbet", + "code": "Kod", + "writing": "Yazma", + "analysis": "Analiz" + } +} diff --git a/src/renderer/src/i18n/tr-TR/plan.json b/src/renderer/src/i18n/tr-TR/plan.json new file mode 100644 index 000000000..b302c8f05 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/plan.json @@ -0,0 +1,4 @@ +{ + "title": "Görev Planı", + "completed": "tamamlanmış" +} diff --git a/src/renderer/src/i18n/tr-TR/promptSetting.json b/src/renderer/src/i18n/tr-TR/promptSetting.json new file mode 100644 index 000000000..4f3b42cb5 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "prompt Yönetim", + "addTitle": "prompt ekle", + "addDescription": "Yeni bir özel prompt şablonu oluşturun", + "editTitle": "prompt'yi düzenleyin", + "editDescription": "Seçilen prompt şablonunu değiştirin", + "name": "İsim", + "namePlaceholder": "prompt cihazınız için bir ad girin", + "description": "Tanım", + "descriptionPlaceholder": "Lütfen açıklamayı girin (isteğe bağlı)", + "promptContent": "prompt", + "contentPlaceholder": "Lütfen prompt içeriğini girin", + "basicInfo": "Temel Bilgiler", + "contentTip": "{openBrace}{openBrace}variable{closeBrace}{closeBrace} gibi değişken yer tutucuları destekler, ilgili parametreleri parametreler bölümünde tanımlayabilirsiniz", + "noPrompt": "Henüz prompt Yok", + "noPromptDesc": "İlk prompt'nizi oluşturmak için sağ üst köşedeki \"+\" düğmesini tıklayın.", + "active": "Aktif", + "noDescription": "Açıklama yok", + "customDate": "Gelenek", + "showMore": "Daha Fazla Göster", + "showLess": "Daha Az Göster", + "export": "İhracat", + "import": "İçe aktarmak", + "exportSuccess": "Dışa aktarma başarılı", + "exportFailed": "Dışa aktarma başarısız oldu", + "importSuccess": "İçe aktarma başarılı", + "importFailed": "İçe aktarma başarısız oldu", + "importStats": "{added} eklendi, güncellendi {updated} prompts", + "parameters": "Parametreler", + "addParameter": "Parametre Ekle", + "noParameters": "Parametre yok", + "noParametersDesc": "prompts'da değişken yer tutucular oluşturmak için kullanılabilecek parametreleri eklemek için yukarıdaki düğmeyi tıklayın.", + "parameterName": "Parametre Adı", + "parameterDescription": "Parametre Açıklaması", + "parameterNamePlaceholder": "Lütfen parametre adını girin", + "parameterDescriptionPlaceholder": "Lütfen parametre açıklamasını girin", + "required": "Gerekli", + "characters": "Karakterler", + "fileManagement": "Dosya Yönetimi", + "uploadFromDevice": "Cihazdan yükle", + "uploadFromDeviceDesc": "Metin, belgeler, CSV ve daha fazlasını destekler.", + "uploadedFiles": "Yüklenen Dosyalar", + "noFiles": "Dosya yok", + "noFilesUploadDesc": "Dosyaları yüklemek için yukarıya tıklayın", + "uploadSuccess": "Yükleme başarılı", + "uploadedCount": "{count} dosyaları yüklendi", + "confirmDelete": "prompt \"{name}\" silmek istediğinizden emin misiniz?", + "confirmDeleteDescription": "Bu eylem geri alınamaz. prompt kalıcı olarak silinecek.", + "confirmDeleteSystemPrompt": "prompt \"{name}\" sistemini silmek istediğinizden emin misiniz?", + "confirmDeleteSystemPromptDescription": "Bu eylem geri alınamaz. prompt sistemi kalıcı olarak silinecek.", + "deleteSuccess": "prompt Silindi", + "deleteFailed": "prompt Silinemedi", + "inactive": "Etkin değil", + "clickToEnable": "Etkinleştirmek için tıklayın", + "clickToDisable": "Devre dışı bırakmak için tıklayın", + "enableSuccess": "prompt Etkin", + "disableSuccess": "prompt Devre Dışı", + "toggleFailed": "Durum Değiştirilemedi", + "enablePrompt": "Bunu etkinleştirin prompt", + "sourceLocal": "Yerel", + "sourceImported": "İthal", + "sourceBuiltin": "Yerleşik", + "defaultSystemPrompt": "Varsayılan Sistem prompt", + "defaultSystemPromptPlaceholder": "Tüm yeni görüşmelerde kullanılacak varsayılan sistemi prompt girin...", + "defaultSystemPromptDescription": "Bu prompt tüm yeni görüşmelere uygulanacaktır. Bir konuşma oluştururken bunu değiştirebilirsiniz. Bu ayarın bir sonraki yeni görüşme oluşturduğunuzda geçerli olacağını unutmayın.", + "typing": "Yazılıyor...", + "saving": "Kaydediliyor...", + "saved": "Kaydedildi", + "saveDefaultPromptFailed": "Varsayılan sistem kaydedilemedi prompt", + "systemPrompts": "Sistem prompt", + "customPrompts": "Özel prompt", + "addSystemPrompt": "Sistem Ekle prompt", + "addCustomPrompt": "Özel prompt Ekle", + "editSystemPrompt": "Sistemi Düzenle prompt", + "addSystemPromptDesc": "Yeni bir sistem oluşturun prompt", + "editSystemPromptDesc": "Seçilen sistemi değiştirin prompt", + "selectSystemPrompt": "Sistem prompt'yi seçin", + "systemPromptDescription": "Seçilen sistem prompt yeni görüşmeler için varsayılan olarak kullanılacak", + "emptySystemPromptOption": "Sistem Yok prompt", + "emptySystemPromptDescription": "Bu seçenek seçildiğinde, yeni görüşmeler prompt sistemi olmadan başlayacaktır.", + "preview": "Önizleme", + "systemPromptChanged": "Sistem prompt başarıyla değiştirildi", + "systemPromptChangeFailed": "prompt sistemi değiştirilemedi", + "systemPromptAdded": "Sistem prompt başarıyla eklendi", + "systemPromptAddedAndSwitched": "Sistem prompt eklendi ve otomatik olarak varsayılan olarak ayarlandı", + "systemPromptUpdated": "Sistem prompt başarıyla güncellendi", + "systemPromptSaveFailed": "prompt sistemi kaydedilemedi", + "systemPromptDeleted": "Sistem prompt başarıyla silindi", + "systemPromptDeleteFailed": "prompt sistemi silinemedi", + "systemPromptEditTip": "Düzenleme sonrasında odak kaybolduğunda otomatik kaydetme", + "resetToDefault": "Varsayılana Sıfırla", + "resetToDefaultSuccess": "Varsayılan içeriğe başarıyla sıfırla", + "resetToDefaultFailed": "Varsayılana sıfırlama başarısız oldu", + "parameterRequired": "Gerekli parametreler" +} diff --git a/src/renderer/src/i18n/tr-TR/routes.json b/src/renderer/src/i18n/tr-TR/routes.json new file mode 100644 index 000000000..852f3f5d4 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "Sohbet", + "welcome": "Hoş geldin", + "settings": "Ayarlar", + "settings-common": "Ortak Ayarlar", + "settings-provider": "Sağlayıcılar", + "settings-mcp": "MCP Ayarlar", + "settings-deepchat-agents": "DeepChat Agent", + "settings-database": "Veri", + "settings-about": "Hakkında", + "settings-shortcut": "Kısayollar", + "settings-display": "Görüntülemek", + "settings-knowledge-base": "Bilgi Bankası", + "settings-prompt": "prompt", + "settings-mcp-market": "MCP Pazar", + "settings-acp": "ACP Agent", + "settings-skills": "Skills", + "settings-notifications-hooks": "Kancalar", + "settings-dashboard": "Kontrol Paneli", + "settings-environments": "Ortamlar", + "settings-remote": "Uzak", + "settings-plugins": "Eklentiler", + "settings-overview": "Ayarlara Genel Bakış" +} diff --git a/src/renderer/src/i18n/tr-TR/settings.json b/src/renderer/src/i18n/tr-TR/settings.json new file mode 100644 index 000000000..12fe07d1f --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "Ayarlar", + "common": { + "title": "Ortak Ayarlar", + "resetData": "Verileri Sıfırla", + "language": "Dil", + "languageSelect": "Dil seçin", + "searchEngine": "Arama Motoru", + "searchEngineSelect": "Arama motorunu seçin", + "searchPreview": "Arama Önizlemesi", + "launchAtLoginEnabled": "Giriş sırasında DeepChat'ı başlatın", + "autoScrollEnabled": "Oluştururken otomatik kaydırma", + "privacyMode": "Gizlilik Modu", + "privacyModeDescription": "DeepChat'a ait otomatik giden istekleri durdurun:", + "privacyModeAutoUpdate": "Uygulama güncelleme kontrolleri", + "privacyModeProviderDb": "Sağlayıcı ve model meta verileri yenileme", + "privacyModeAcpRegistry": "ACP Registry yenileme ve simge senkronizasyonu", + "privacyModeNpmRegistry": "MCP npm kayıt defteri otomatik algılama", + "privacyModeManualActions": "Manuel kontroller ve manuel yenileme eylemleri kullanılabilir durumda kalır.", + "privacyModeIntegrations": "Yapılandırılmış üçüncü taraf entegrasyonları kullanılabilir durumda kalır.", + "autoCompaction": { + "title": "Otomatik Sıkıştırma", + "enabled": "Otomatik sıkıştırmayı etkinleştir", + "description": "Bir konuşma model bağlam penceresi sınırına yaklaştığında, DeepChat eski geçmişi otomatik olarak özetleyebilir, böylece oturum devam eder. Devre dışı bırakılırsa, taşan geçmiş özetlenmek yerine doğrudan bırakılır.", + "thresholdLabel": "Tetik eşiği", + "thresholdMin": "Erken ({value}%)", + "thresholdMax": "Geç ({value}%)", + "thresholdDescription": "prompt kullanımı etkin geçmiş bütçesinin bu payına ulaştığında sıkıştırmayı başlatın. Daha düşük değerler daha fazla boşluk yaratır; daha yüksek değerler daha fazla ham bağlamı korur.", + "retainPairsLabel": "Son mesaj çiftlerini koru", + "retainPairsValue": "{count} çift(ler)i", + "retainPairsDescription": "En son tamamlanan kullanıcı ve asistan çiftlerini sıkıştırmanın dışında tutun. Geçerli sorgu dahil edilmedi." + }, + "searchAssistantModel": "Asistan Modeli", + "selectModel": "Modeli Seçin", + "proxyMode": "Proxy Modu", + "proxyModeSelect": "Proxy modunu seçin", + "proxyModeSystem": "Sistem Proxy'si", + "proxyModeNone": "Vekil Yok", + "proxyModeCustom": "Özel Proxy", + "customProxyUrl": "Özel Proxy URL", + "customProxyUrlPlaceholder": "Örnek: http://127.0.0.1:7890", + "invalidProxyUrl": "Geçersiz proxy URL, lütfen geçerli http/https URL girin", + "addCustomSearchEngine": "Özel Arama Motoru Ekle", + "addCustomSearchEngineDesc": "Bir ad girerek yeni bir arama motoru ekleyin ve URL'yi arayın. URL, sorgu yer tutucusu olarak {query} öğesini içermelidir.", + "searchEngineName": "Arama Motoru Adı", + "searchEngineNamePlaceholder": "Arama motoru adını girin", + "searchEngineUrl": "URL'da ara", + "searchEngineUrlPlaceholder": "Örn: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "URL sorgu yer tutucusu olarak {'{'}query{'}'} içermelidir", + "deleteCustomSearchEngine": "Özel Arama Motorunu Sil", + "deleteCustomSearchEngineDesc": "\"{name}\" özel arama motorunu silmek istediğinizden emin misiniz? Bu eylem geri alınamaz.", + "testSearchEngine": "Arama Motorunu Test Edin", + "testSearchEngineDesc": "{engine} arama motoru kullanılarak \"hava durumu\" için bir test araması gerçekleştirilecektir.", + "testSearchEngineNote": "Arama sayfası oturum açmayı veya başka eylemleri gerektiriyorsa bunları test penceresinde gerçekleştirebilirsiniz. Lütfen işiniz bittiğinde test penceresini kapatın.", + "theme": "Tema", + "themeSelect": "Tema seç", + "themeLight": "Işık", + "themeDark": "Karanlık", + "themeSystem": "Sistemi takip edin", + "closeToQuit": "Pencereyi kapatırken uygulamadan çık", + "shortcut": { + "title": "Kısayol tuşu ayarları", + "newChat": "Yeni bir sohbet oluştur" + }, + "contentProtection": "Ekran yakalama koruması", + "contentProtectionDialogTitle": "Ekran Koruması Değişikliğini Onayla", + "contentProtectionEnableDesc": "Gizliliğinizin korunmasına yardımcı olmak için ekran paylaşımı uygulamalarının DeepChat penceresini yakalamasını önleyin. Tüm uygulamalar bu ayarı dikkate almaz; bazı ortamlarda siyah bir pencere kalabilir.", + "contentProtectionDisableDesc": "Ekran paylaşımı uygulamalarının DeepChat penceresini yakalamasına izin verin.", + "contentProtectionRestartNotice": "Bu ayarın değiştirilmesi uygulamayı yeniden başlatacaktır. Devam etmek istiyor musun?", + "copyWithCotEnabled": "COT Ayrıntılarını Kopyala", + "traceDebugEnabled": "Aramayı Takip Et", + "loggingEnabled": "Günlük Kaydını Etkinleştir", + "loggingDialogTitle": "Günlük Ayarı Değişikliğini Onayla", + "loggingEnableDesc": "Günlüğe kaydetmeyi etkinleştirmek sorunları teşhis etmemize ve uygulamayı geliştirmemize yardımcı olacaktır. Günlük dosyaları hassas bilgiler içerebilir.", + "loggingDisableDesc": "Günlük kaydının devre dışı bırakılması, uygulama günlüklerinin toplanmasını durduracaktır.", + "charactersUnit": "karakterler", + "loggingRestartNotice": "Bu ayarın değiştirilmesi uygulamayı yeniden başlatacaktır. Devam etmek istiyor musun?", + "openLogFolder": "Günlük Klasörünü Aç", + "notifications": "Sistem Bildirimleri", + "notificationsDesc": "DeepChat ön planda olmadığında oturum oluşturulursa sistem bildirimi gönderilir", + "fileMaxSize": "Maksimum Dosya Boyutu", + "fileMaxSizeHint": "Yüklenen tek bir dosyanın maksimum boyutunu sınırlar", + "defaultModel": { + "title": "Varsayılan Model", + "chatModel": "Varsayılan Sohbet Modeli" + } + }, + "deepchatAgents": { + "title": "DeepChat Agent", + "description": "DeepChat agents ve bunların yeni oturumlara ektiği varsayılanları yönetin.", + "builtIn": "Yerleşik", + "editTitle": "DeepChat Agent'yi düzenleyin", + "createTitle": "DeepChat Agent oluştur", + "unnamed": "Adsız Agent", + "name": "İsim", + "namePlaceholder": "Örneğin: Yazar / Araştırma / Çevirmen", + "enabledLabel": "Etkinleştirilmiş", + "descriptionLabel": "Tanım", + "descriptionPlaceholder": "Bu agent'nin ne işe yaradığına ilişkin isteğe bağlı not", + "avatarTitle": "avatar", + "avatarDefault": "Varsayılan", + "avatarDefaultDesc": "DeepChat yerleşik simgeyi korur. Diğer agents metin avatarı kullanır.", + "avatarLucide": "Lucid Simgesi", + "avatarLucideDesc": "Bir Lucide simgesi seçin ve açık/dark renklerini ayarlayın.", + "avatarMonogram": "Monogram", + "avatarMonogramDesc": "İki Latin harfini veya ilk CJK karakterini kullanın.", + "lucideIcon": "Lucide simge adı", + "lightColor": "Açık renk", + "darkColor": "Koyu renk", + "monogramText": "Monogram", + "monogramPlaceholder": "Örneğin: WR / TR", + "backgroundColor": "Arka plan rengi", + "modelsTitle": "Model Varsayılanları", + "chatModel": "Varsayılan Sohbet Modeli", + "assistantModel": "Asistan Modeli", + "visionModel": "Vizyon Modeli", + "imageGenerationModel": "Görüntü Oluşturma Modeli", + "temperature": "Sıcaklık", + "contextLength": "Bağlam Uzunluğu", + "maxTokens": "Maksimum token", + "thinkingBudget": "Thinking Budget", + "reasoningEffort": "Muhakeme Çabası", + "verbosity": "ayrıntı", + "interleaved": "Aralıklı düşünme uyumluluğunu zorla", + "systemPrompt": "Varsayılan sistem prompt", + "systemPromptPlaceholder": "Boş bir sistem için boş bırakın prompt", + "defaultProjectPath": "Varsayılan dizin (isteğe bağlı)", + "defaultProjectPathPlaceholder": "Genel varsayılan dizini kullanmak için boş bırakın", + "permissionMode": "Varsayılan izin", + "permissionFullAccess": "Tam erişim", + "permissionDefault": "Varsayılan izin", + "subagentsTitle": "Alt temsilciler", + "subagentsDescription": "Subagent_orchestrator'a sunulan yeniden kullanılabilir alt oturum yuvalarını yapılandırın.", + "subagentsEnabled": "subagents'yi etkinleştir", + "subagentTargetType": "Hedef türü", + "subagentTargetSelf": "öz", + "subagentTargetAgent": "Agent", + "subagentDisplayName": "Ekran adı", + "subagentDescription": "Yuva açıklaması", + "subagentTargetAgentLabel": "Hedef agent", + "subagentLimit": "{count}/{max} yuvaları", + "addSubagentSlot": "+ Yuva Ekle", + "toolsTitle": "Yerleşik Araçlar", + "compactionTitle": "Otomatik Sıkıştırma", + "compactionEnabled": "Otomatik sıkıştırmayı etkinleştir", + "compactionDescription": "Bu varsayılanlar yalnızca gelecekteki DeepChat oturumlarını etkiler.", + "compactionThreshold": "Tetik eşiği", + "compactionRetainPairs": "Son çiftleri koru", + "deleteConfirm": "agent \"{name}\" silinsin mi? Geçmişi yerleşik DeepChat agent'e geri dönecektir." + }, + "notificationsHooks": { + "title": "Kancalar", + "description": "Yaşam döngüsü kanca komutlarını yapılandırın.", + "events": { + "title": "Olaylar", + "SessionStart": "Oturum Başlangıcı", + "UserPromptSubmit": "Kullanıcı prompt Gönder", + "PreToolUse": "Ön Takım Kullanımı", + "PostToolUse": "Post Tool Kullanımı", + "PostToolUseFailure": "Alet Kullanım Hatası", + "PermissionRequest": "İzin Talebi", + "Stop": "Durmak", + "SessionEnd": "Oturum Sonu" + }, + "commands": { + "title": "Kanca Komutları", + "description": "Seçilen yaşam döngüsü olayları için özel komutlar çalıştırın.", + "hint": "Yükün tamamı stdin'ye JSON olarak gönderilir.", + "commandPlaceholder": "Çalıştırma komutu", + "commandLabel": "Emretmek", + "name": "İsim", + "namePlaceholder": "Kanca adı", + "newHook": "Yeni Kanca", + "empty": "Henüz kanca yok. Başlamak için bir tane ekleyin.", + "defaultName": "Kanca {index}", + "guideTitle": "Nasıl Kullanılır", + "guideDescription": "Kontrol edilen bir olay tetiklendiğinde, DeepChat komutu çalıştırır. Geçerli olaya stdin JSON, ortam değişkenleri ve komut yer tutucularından ulaşılabilir.", + "deliveryTitle": "Veriler nasıl iletilir", + "deliveryStdin": "Yükün tamamı stdin'ye JSON olarak yazılır.", + "deliveryPlaceholder": "Komut yer tutucularını doğrudan komut satırına yerleştirebilirsiniz.", + "deliveryEnv": "Aynı temel meta veriler aynı zamanda ortam değişkenleri olarak da gösterilir.", + "metadataOnly": "Komut yer tutucuları küçük meta veriler için en iyisidir. stdin JSON adresinden istem/tool ayrıntılarını, izin, kullanım, durdurma ve hata alanlarını okuyun.", + "stdinPreviewLabel": "stdin örneği", + "placeholdersTitle": "Komut yer tutucuları", + "placeholdersDescription": "Yer tutucular yürütmeden önce genişletilir, böylece komut bağımsız değişkenleri olarak aktarılabilirler.", + "envTitle": "Ortam değişkenleri", + "examplesTitle": "Örnekler", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Python", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Mevcut etkinlik adı", + "time": "ISO-8601 formatında olay zamanı", + "isTest": "Bu çalıştırmanın Test düğmesinden gelip gelmediği", + "conversationId": "Mevcut görüşme/session kimliği", + "workdir": "Oturum için çözümlenen çalışma dizini", + "agentId": "Mevcut olduğunda geçerli agent kimliği", + "providerId": "Mevcut olduğunda mevcut sağlayıcı kimliği", + "modelId": "Mevcut olduğunda geçerli model kimliği", + "messageId": "Mevcut olduğunda mevcut kullanıcı mesajı kimliği", + "toolName": "Mevcut olduğunda mevcut araç adı", + "toolCallId": "Mevcut olduğunda geçerli takım çağrı kimliği" + } + }, + "test": { + "button": "Test", + "testing": "Test...", + "success": "Başarı", + "failed": "Arızalı", + "duration": "{ms} ms", + "statusCode": "HTTP {code}", + "exitCode": "{code}'dan çık", + "retryAfter": "{ms} ms sonra yeniden deneyin", + "stdout": "stdout", + "stderr": "stderr" + } + }, + "data": { + "title": "Veri Ayarları", + "syncEnable": "Veri Senkronizasyonunu Etkinleştir", + "syncFolder": "Klasörü Eşitle", + "openSyncFolder": "Senkronizasyon Klasörünü Aç", + "lastSyncTime": "Son Senkronizasyon Zamanı", + "never": "Asla", + "startBackup": "Şimdi Yedekle", + "backingUp": "Yedekleniyor...", + "importData": "Verileri İçe Aktar", + "incrementImport": "Artımlı İçe Aktarma", + "overwriteImport": "İçe Aktarmanın Üzerine Yaz", + "backupSelectLabel": "Yedeklemeyi seçin", + "backupSelectDescription": "İçe aktarılacak yedek anlık görüntüyü seçin.", + "selectBackupPlaceholder": "Bir yedek seçin", + "noBackupsAvailable": "Yedekleme yok. Önce bir yedekleme çalıştırın.", + "importConfirmTitle": "Verileri İçe Aktarmayı Onaylayın", + "importConfirmDescription": "İçe aktarma işlemi, sohbet geçmişi ve ayarlar da dahil olmak üzere mevcut tüm verilerin üzerine yazılacaktır. Önemli verilerinizi yedeklediğinizden emin olun. Veriler içe aktarıldıktan sonra otomatik olarak yenilenecektir.", + "importing": "İçe aktarılıyor...", + "confirmImport": "İçe Aktarmayı Onayla", + "importSuccessTitle": "İçe Aktarma Başarılı", + "importErrorTitle": "İçe Aktarma Başarısız", + "resetData": "Verileri Sıfırla", + "resetConfirmTitle": "Veri Sıfırlamayı Onayla", + "resetConfirmDescription": "Lütfen sıfırlanacak veri türünü seçin. Bu işlem geri alınamaz ve uygulama, sıfırlamanın ardından otomatik olarak yeniden başlatılacaktır.", + "resetChatData": "Sohbet Verilerini Sıfırla", + "resetChatDataDesc": "Tüm sohbet geçmişini ve konuşma kayıtlarını silin", + "resetKnowledgeData": "Bilgi Bankası Verilerini Sıfırla", + "resetKnowledgeDataDesc": "Tüm bilgi tabanı dosyalarını ve vektör verilerini silin", + "resetConfig": "Yapılandırmayı Sıfırla", + "resetConfigDesc": "Tüm uygulama ayarlarını, model yapılandırmalarını ve özel prompts öğesini silin", + "resetAll": "Sıfırlamayı Tamamla", + "resetAllDesc": "Sohbet geçmişi, yapılandırmalar ve önbellek dosyaları dahil tüm verileri silin", + "resetting": "Sıfırlanıyor...", + "confirmReset": "Sıfırlamayı Onayla", + "resetCompleteDevTitle": "Veri Sıfırlama Tamamlandı", + "resetCompleteDevMessage": "Lütfen uygulamayı geliştirme modunda manuel olarak yeniden başlatın. Mevcut işlemi durdurun ve pnpm run dev'i tekrar çalıştırın", + "toast": { + "backupSuccessTitle": "Yedekleme başarılı", + "backupSuccessMessage": "Veriler başarıyla yedeklendi" + }, + "syncSectionTitle": "Yedekle ve Senkronize Et", + "operationsSectionTitle": "Veri İşlemleri", + "resetDataDescription": "Sohbeti, bilgiyi, yapılandırmayı veya tüm verileri türe göre sıfırlayın.", + "databaseRepair": { + "title": "Veritabanı Onarımı", + "description": "Veritabanını tespit edin ve otomatik olarak onarın", + "button": "Veritabanını Kontrol Et ve Onar", + "running": "Kontrol ve onarım...", + "lastResultLabel": "Son sonuç: {result}", + "summaryHealthy": "Sağlıklı", + "summaryRepaired": "{count} sorunları onarıldı", + "summaryRepairedWithManual": "Onarılan {repaired} sorunu/sorunları, {manual} manuel sorunu/sorunları", + "summaryManualOnly": "{manual} manuel sorunlarla ilgilenilmesi gerekiyor", + "manualHint": "{count} sorun(lar)ı hâlâ manuel işlem gerektiriyor.", + "toastSuggestedTitle": "Veritabanı onarımı önerilir", + "toastSuggestedDescription": "DeepChat bir şema sorunu algıladı ({reason}). Artık veritabanı onarımını çalıştırabilirsiniz.", + "toastAction": "Onarıma Git", + "toastHealthyTitle": "Veritabanı sağlıklı", + "toastHealthyDescription": "Herhangi bir şema sorunu bulunamadı.", + "toastCompletedTitle": "Veritabanı onarımı tamamlandı", + "toastRepairedDescription": "{count} sorunu/sorunları onarıldı.", + "toastManualDescription": "{repaired} sorunu/sorunları onarıldı. {manual} sorunlarının hala manuel olarak ele alınması gerekiyor.", + "toastFailedTitle": "Veritabanı onarımı başarısız oldu", + "toastFailedDescription": "Veritabanı onarımı şu anda tamamlanamıyor. Lütfen günlükleri kontrol edip tekrar deneyin.", + "reasons": { + "missing-table": "eksik masa", + "missing-column": "eksik sütun", + "column-count-mismatch": "sütun sayısı uyuşmazlığı", + "type-mismatch": "sütun türü uyuşmazlığı" + } + }, + "databaseEncryption": { + "title": "SQLite veritabanı şifrelemesi", + "description": "agent.db'yi SQLCipher ile şifreleyin ve sistem kilidinin kullanılamadığı durumlarda SQLite şifresini zorunlu kılın.", + "enabled": "Etkinleştirilmiş", + "disabled": "Engelli", + "cipher": "Şifre", + "systemUnlock": "Sistem kilidini açma", + "startupUnlock": "Başlangıç ​​kilidini açma", + "lastMigration": "Son geçiş", + "loading": "Yükleniyor", + "never": "Asla", + "notRequired": "Gerekli değil", + "systemUnlockAvailable": "Mevcut", + "systemUnlockUnavailable": "Kullanılamıyor", + "systemUnlockMode": "Sistem kilidini açma", + "manualUnlock": "Manuel şifre", + "currentPassword": "Mevcut Şifre", + "newPassword": "Yeni SQLite şifresi", + "confirmPassword": "Şifreyi onayla", + "passwordMismatch": "Şifreler eşleşmiyor", + "systemCredentialStore": "Sistem güvenli depolama alanı mevcut olduğunda, DeepChat, SQLite parolasını işletim sistemi kimlik bilgisi kasasında (macOS Keychain, Windows Kimlik Bilgisi Kasası veya Linux gizli deposu) saklar. Başarılı bir kilit açma işleminin ardından sonraki başlatmalar genellikle otomatik olarak açılır; yalnızca veri geçişi sonrasında, işletim sistemi kimlik bilgisi eksik olduğunda veya şifresi çözülemediğinde ya da güvenli depolama alanı mevcut olmadığında şifreleme anahtarını tekrar girmeniz gerekir.", + "safeStorageUnavailable": "Electron SafeStorage bu sistemde mevcut değildir. Şifrelemeyi etkinleştirdikten sonra, her açılışta şifreyi girmeniz gerekir.", + "enableButton": "Şifrelemeyi etkinleştir", + "changeButton": "Şifre değiştir", + "disableButton": "Şifrelemeyi devre dışı bırak", + "enabledTitle": "Veritabanı şifrelemesi etkin", + "changedTitle": "SQLite şifresi değiştirildi", + "disabledTitle": "Veritabanı şifrelemesi devre dışı", + "failedTitle": "Veritabanı şifrelemesi başarısız oldu", + "failedDescription": "Şifreyi kontrol edip tekrar deneyin.", + "setPasswordButton": "Şifreyi ayarla", + "enableDialogTitle": "SQLite şifresini ayarlayın", + "changeDialogTitle": "SQLite şifresini değiştirin", + "disableDialogTitle": "Veritabanı şifrelemesini devre dışı bırak", + "enableDialogDescription": "Şifrelenmiş bir SQLite veritabanı oluşturun ve mevcut yerel verileri bu veritabanına taşıyın.", + "changeDialogDescription": "Geçerli şifrelenmiş veritabanını yeni parolayla yeni şifrelenmiş veritabanına taşıyın.", + "disableDialogDescription": "Geçerli şifrelenmiş veritabanını düz metin yerel veritabanına geri taşıyın.", + "cancelButton": "İptal etmek", + "unknown": "Bilinmiyor" + }, + "modelConfigUpdate": { + "title": "Model Yapılandırmasını Güncelle", + "descriptionPrefix": "Model verilerini şuradan senkronize edin:", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": ".", + "button": "Şimdi Güncelle", + "updating": "Güncelleniyor...", + "updatedTitle": "Model yapılandırması güncellendi", + "updatedDescription": "En son sağlayıcı meta verileri yenilendi.", + "upToDateTitle": "Zaten güncel", + "upToDateDescription": "Yerel model yapılandırmanız zaten en son sağlayıcı meta verilerini kullanıyor.", + "failedTitle": "Güncelleme başarısız oldu", + "failedDescription": "Model yapılandırması şu anda yenilenemiyor. Lütfen daha sonra tekrar deneyin." + }, + "yoBrowser": { + "title": "YoBrowser Korumalı Alan", + "description": "Çerezleri ve yerel depolamayı ana uygulamayla paylaşmayan bağımsız bir tarayıcı sanal alanı. YoBrowser verileri burada tek tıklamayla temizlenebilir.", + "clearButton": "YoBrowser verilerini temizle", + "confirmTitle": "YoBrowser verilerini temizlemeyi onaylıyor musunuz?", + "confirmDescription": "YoBrowser oturumunun çerezleri, önbelleği, LocalStorage, IndexedDB ve diğer verileri silinecek olup, web sitesine tekrar giriş yapmanız gerekebilir.", + "confirmAction": "Şimdi temizle", + "clearing": "Temizleniyor...", + "clearedTitle": "YoBrowser verileri temizlendi", + "clearedDescription": "Korumalı alan oturumu sıfırlandı ve ilgili sekme yeniden yüklenecek.", + "clearFailedTitle": "Temizleme başarısız oldu", + "clearFailedDescription": "Lütfen tekrar deneyin veya daha fazla bilgi için günlükleri kontrol edin." + }, + "privacyTitle": "Veri ve Gizlilik", + "privacyDescription": "Yedeklemeyi, senkronizasyonu, gizlilik modunu, bakımı ve tehlikeli işlemleri yönetin.", + "dangerZone": { + "title": "Tehlikeli Bölge", + "description": "Sohbeti, bilgiyi veya tüm verileri sıfırlayın. Bu geri alınamaz." + }, + "providerImport": { + "entryTitle": "Sağlayıcı ayarlarını içe aktar", + "entryDescription": "Sağlayıcı kimlik bilgileri ve model listeleri için CC Switch, Alma, Cherry Studio, Hermes ve OpenClaw'yi tarayın.", + "entryButton": "agents'dan içe aktar", + "dialogTitle": "Diğer agents'dan içe aktar", + "dialogDescription": "Önce algılanan uygulamaları seçin, ardından DeepChat'nin içe aktarabileceği sağlayıcıları inceleyin.", + "toastTitle": "Sağlayıcının içe aktarımı tamamlandı", + "toastDescription": "{count} sağlayıcıları içe aktarıldı.", + "steps": { + "scan": "Tara", + "providers": "Sağlayıcılar", + "done": "Tamamlamak" + }, + "scanningTitle": "Tarama yüklendi agents", + "scanningDescription": "DeepChat, herhangi bir yere veri göndermeden bilinen yerel yapılandırma dosyalarını kontrol eder.", + "scanFailedTitle": "Tarama başarısız oldu", + "sourcesTitle": "Algılanan kaynaklar", + "sourcesDescription": "Bir veya daha fazla agents seçin. Seçilen agents gösterilen sırayla işlenir.", + "selectedSources": "{selected}/{total} seçildi", + "noSourcesTitle": "İçe aktarılabilir sağlayıcı yapılandırması bulunamadı", + "noSourcesDescription": "Desteklenen agents'dan birini yükleyin veya önce sağlayıcı kimlik bilgilerini burada yapılandırın.", + "providersFound": "{count} sağlayıcı(lar)ı", + "sourceProgress": "{current} / {total}", + "overwriteNote": "Seçilen birden fazla sağlayıcı aynı DeepChat sağlayıcıyla eşleşirse, sonraki kaynak öncekinin üzerine yazar.", + "noProvidersTitle": "Bu kaynakta sağlayıcı verisi yok", + "noProvidersDescription": "Bu agent seçildi, ancak içe aktarılabilir sağlayıcı girişi bulunamadı.", + "apiKey": "Anahtar {value}", + "noModels": "Model listesi yok", + "modelsImported": "{count} model(ler)i", + "importingTitle": "Sağlayıcıları içe aktarma", + "importingDescription": "DeepChat seçilen sağlayıcıları ve özel model girişlerini yazıyor.", + "doneTitle": "Özeti içe aktar", + "doneDescription": "{count} sağlayıcıları içe aktarıldı. Aşağıdaki sağlayıcı başına sonucu inceleyin.", + "badges": { + "configured": "Yapılandırılmış" + }, + "sourceStatus": { + "found": "Kurmak", + "not_found": "Bulunamadı", + "error": "Hata", + "unsupported_platform": "Desteklenmeyen platform" + }, + "targetKind": { + "builtin": "Yerleşik", + "custom": "Gelenek", + "unsupported": "Desteklenmiyor" + }, + "warnings": { + "already_configured": "DeepChat'da zaten yapılandırılmış olduğundan varsayılan olarak seçilmez.", + "missing_api_key": "Eksik API anahtarı veya gerekli uç nokta.", + "unsupported_provider": "DeepChat bu sağlayıcıyı otomatik olarak içe aktaramaz.", + "overwrites_previous_selection": "Bu seçim daha önceki bir kaynakla çelişiyor.", + "credential_only_import": "Yalnızca API anahtarı içe aktarılacaktır; DeepChat yerleşik uç noktasını ve çalışma zamanını korur." + }, + "conflicts": { + "overridesPrevious": "Bu seçim daha önce seçilmiş bir sağlayıcının üzerine yazılacaktır.", + "overwrittenByLater": "Daha sonra seçilen bir kaynak bu sağlayıcının üzerine yazacaktır." + }, + "summary": { + "imported": "İthal", + "created": "Oluşturuldu", + "updated": "Güncellendi", + "overwritten": "Üzerine yazıldı", + "models": "Modeller", + "skipped": "Atlandı" + }, + "resultStatus": { + "created": "Oluşturuldu", + "updated": "Güncellendi", + "skipped": "Atlandı", + "overwritten": "Üzerine yazıldı" + }, + "actions": { + "rescan": "Yeniden tara", + "selectAll": "Tümünü seç", + "clearSelected": "Temizlemek", + "import": "Seçileni içe aktar" + }, + "apiTypes": { + "openaiCompletions": "OpenAI Chat Completions", + "openai": "OpenAI", + "openaiResponses": "OpenAI Responses", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "Mistral AI" + }, + "applyFailed": "İçe aktarma başarısız oldu: {message}" + } + }, + "dashboard": { + "badge": "Kullanım Kontrol Paneli", + "title": "Kullanım Kontrol Paneli", + "description": "token kullanımını, önbellek isabetlerini ve tahmini maliyeti izleyin. token ve maliyet rakamları kamuya açık bilgilere dayanılarak tahmin edilmiştir ve bazı sağlayıcılar veya daha önceki mesajlar eksik olabilir; dolayısıyla bu rakamları yalnızca referans olarak değerlendirin.", + "actions": { + "refresh": "Yenile" + }, + "backfill": { + "runningTitle": "Kullanım verileri güncelleniyor", + "runningDescription": "Kullanım verileri arka planda güncellenmeye devam ediyor. Güncel sonuçlar zaten mevcut.", + "failedTitle": "Kullanım verileri güncellenemedi", + "failedDescription": "Bu sayfayı yenileyin veya daha sonra tekrar deneyin." + }, + "error": { + "title": "Kontrol paneli yüklenemedi", + "description": "Lütfen daha sonra tekrar deneyin." + }, + "empty": { + "title": "Henüz kullanım istatistiği yok", + "description": "token kullanımı, önbellek isabetleri ve tahmini maliyet, kullanım verileri hazır olduğunda burada görünecektir.", + "historyNote": "token ve maliyet rakamları kamuya açık bilgilerden tahmin edilmektedir. Bazı sağlayıcılar veya daha önceki mesajlar eksik olabilir; dolayısıyla bu rakamları yalnızca referans olarak değerlendirin." + }, + "summary": { + "totalTokens": "Toplam tokens", + "totalTokensDescription": "tokens girdi ve çıktısının toplama nasıl katkıda bulunduğunu gösterir.", + "inputTokensLabel": "Giriş", + "outputTokensLabel": "Çıkış", + "cachedTokens": "Önbelleğe alındı ​​tokens", + "cachedTokensDescription": "prompt tokens sağlayıcı önbelleğinden sunuldu.", + "cachedTokensCachedLabel": "Önbelleğe alındı", + "cachedTokensUncachedLabel": "Önbelleğe alınmamış", + "cacheHitRate": "Önbellek isabet oranı", + "cacheHitRateDescription": "Önbelleğe alınan prompt tokens toplam giriş tokens'ye bölünür.", + "estimatedCost": "Tahmini maliyet", + "estimatedCostDescription": "Sağlayıcı fiyatlandırması veya AIHubMix geri dönüş fiyatlandırması kullanılarak ABD doları cinsinden tahmin edilir.", + "estimatedCostTrendLabel": "Son 30 gündeki trend", + "estimatedCostTrendEmpty": "Son 30 gün içinde hiçbir maliyet kaydedilmedi.", + "recordingStartedAt": "Kayıt başladı", + "recordingStartedAtDescription": "Şu anda bu kontrol panelinde saklanan en eski kullanım kaydı.", + "withDeepChatDaysLabel": "Birlikte geçirdiğimiz günler", + "withDeepChatDaysValue": "{days} gün", + "withDeepChatDaysSentence": "DeepChat ile {days} günündesiniz.", + "withDeepChatDaysDescription": "{date}'deki en eski kullanım kaydınıza dayanmaktadır.", + "withDeepChatDaysDescriptionUnavailable": "Henüz kullanım kaydı yok.", + "tokenUsage": "token kullanımı", + "nostalgiaLabel": "Yankılar", + "nostalgiaDaysValue": "{days} gün", + "nostalgiaSessionsValue": "{count} oturumları", + "nostalgiaMessagesValue": "{count} mesajları", + "nostalgiaDaysDetailLabel": "Birlikte geçirdiğimiz günler", + "nostalgiaDaysDetail": "Siz ve DeepChat birlikte {days} gün geçirdiniz.", + "nostalgiaSessionsDetailLabel": "Oturumlar", + "nostalgiaSessionsDetail": "{count} oturumunu birlikte paylaştınız.", + "nostalgiaMessagesDetailLabel": "Mesajlar", + "nostalgiaMessagesDetail": "{count} mesaj alışverişinde bulundunuz.", + "nostalgiaMostActiveDayLabel": "En aktif gün", + "nostalgiaMostActiveDayDetail": "{date}, {count} mesajlarıyla en aktif gününüzdü." + }, + "calendar": { + "title": "Katkı Takvimi", + "description": "Son 365 gün içindeki günlük token kullanımı.", + "legend": "Daha azdan daha fazlaya", + "tooltip": "{date}: {tokens} tokens" + }, + "breakdown": { + "providerTitle": "En iyi sağlayıcılar", + "providerDescription": "Tahmini maliyete ve ardından toplam tokens'ye göre sıralanır.", + "modelTitle": "En iyi modeller", + "modelDescription": "Tahmini maliyete göre ilk 10 model, ardından toplam tokens.", + "messages": "{count} mesajları", + "empty": "Henüz arıza verisi yok." + }, + "rtk": { + "title": "RTK Tasarruflar", + "description": "Tahmini tokens'nin, DeepChat yerel komut yürütmesi sırasında RTK tarafından model bağlamına ulaşması engellendi.", + "actions": { + "retry": "Kontrolü yeniden dene" + }, + "status": { + "disabled": "Engelli", + "checking": "Kontrol ediliyor", + "healthy": "Sağlıklı", + "unhealthy": "Kullanılamıyor" + }, + "descriptionDisabled": "RTK bu uygulama oturumu için kapatıldı, bu nedenle komutlar normal yürütme yolundan geçiyor.", + "descriptionChecking": "DeepChat, RTK'nin geçerli ortamda düzgün çalışıp çalışmadığını doğruluyor.", + "descriptionHealthy": "RTK, DeepChat yerel komut yürütmesi için etkindir.", + "descriptionUnhealthy": "RTK başlangıç ​​durum kontrolünde başarısız oldu ve bu uygulama oturumu için devre dışı bırakıldı.", + "sourceLabel": "Çalışma zamanı kaynağı: {source}", + "source": { + "bundled": "Paketlenmiş", + "system": "Sistem", + "none": "Müsait değil" + }, + "summary": { + "savedTokens": "tokens kaydedildi", + "commands": "İzlenen komutlar", + "avgSavingsPct": "Ortalama tasarruf", + "outputTokens": "Filtrelenmiş çıktı" + } + }, + "unavailable": "N/A" + }, + "modelConfigItem": { + "chatFallbackWarning": "Zayıf Agent özelliği: yalnızca eski geri dönüş aracı çağrılarını destekler" + }, + "model": { + "title": "Modeli Ayarları", + "systemPrompt": { + "label": "Sistem prompt", + "placeholder": "Lütfen sisteme prompt girin...", + "description": "Yapay zeka asistanının davranışını ve rolünü tanımlaması için prompt sistemini ayarlayın" + }, + "temperature": { + "label": "Model Sıcaklığı", + "description": "Çıktının rastgeleliğini kontrol eder; daha yüksek değerler daha yaratıcı yanıtlar üretir" + }, + "contextLength": { + "label": "Bağlam Uzunluğu", + "description": "Konuşma bağlamının maksimum uzunluğunu ayarlayın" + }, + "responseLength": { + "label": "Yanıt Uzunluğu", + "description": "AI yanıtının maksimum uzunluğunu ayarlayın" + }, + "artifacts": { + "title": "Artifacts", + "description": "Artifacts özelliğinin etkinleştirilmesi yapay zekanın daha zengin içerik oluşturmasına olanak tanır" + }, + "provider": "Servis sağlayıcı", + "modelList": "Model Listesi", + "selectModel": "Bir model seçin", + "providerSetting": "Servis sağlayıcı ayarları", + "configureModel": "Modeli Yapılandır", + "addModel": "Model Ekle", + "form": { + "id": { + "label": "Tanımlayıcı" + } + }, + "modelConfig": { + "title": "Özel model parametreleri", + "description": "Lütfen bu yapılandırmanın yalnızca mevcut model için geçerli olduğunu ve diğer modelleri etkilemeyeceğini unutmayın. Lütfen dikkatle değiştirin. Yanlış parametreler modelin düzgün çalışmamasına neden olabilir.", + "name": { + "label": "Model Adı", + "description": "Modelin görünen adı", + "placeholder": "Model adını girin", + "required": "Model adı gerekli", + "readonly": "Model adı (salt okunur)" + }, + "id": { + "label": "Model Kimliği", + "description": "Modelin benzersiz tanımlayıcısı", + "placeholder": "Model kimliğini girin", + "required": "Model kimliği gerekli", + "readonly": "Model Kimliği (salt okunur)", + "duplicate": "Bu kimliğe sahip bir model zaten mevcut" + }, + "createTitle": "Özel Model Ekle", + "editTitle": "Model Yapılandırmasını Düzenle - {name}", + "maxTokens": { + "label": "Maksimum çıkış uzunluğu", + "description": "Modelin tek bir çıkışı için maksimum tokens sayısını ayarlayın" + }, + "contextLength": { + "label": "Bağlam Uzunluğu", + "description": "Modelin işleyebileceği bağlam uzunluğunu ayarlayın" + }, + "temperature": { + "label": "Sıcaklık", + "description": "Çıktının rastgeleliğini kontrol edin. Çoğu model 0-1'dir ve bazıları 0-2 arasındadır. Daha yüksek değerler rastgeleliği artırır.", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6, düşünme etkinleştirildiğinde sıcaklığı {enabled}'ye ve devre dışı bırakıldığında {disabled}'ye sabitler." + }, + "vision": { + "label": "Görsel yetenek", + "description": "Model görsel yeteneği destekliyor mu?" + }, + "speechRecognition": { + "label": "Konuşma Tanıma", + "description": "Bu modelin yerel konuşmayı metne dönüştürmeyle ses girişine izin verip vermediğini kontrol eder." + }, + "functionCall": { + "label": "İşlev Çağrıları", + "description": "Modelin işlev çağrılarını yerel olarak destekleyip desteklemediği (DeepChat bu seçeneği kapattıktan sonra işlev çağrılarını otomatik olarak simüle edecektir)" + }, + "reasoning": { + "label": "Muhakeme yeteneği", + "description": "Bu model akıl yürütmeyi destekler" + }, + "reasoningToggle": { + "label": "Akıl yürütmeyi etkinleştir", + "description": "Bu model için akıl yürütmenin varsayılan olarak etkin olup olmadığını kontrol eder" + }, + "interleavedThinking": { + "label": "Interleaved Thinking", + "description": "Bu modelin Interleaved Thinking ile akıl yürütme ve araç çağrısı mesajlarını işleyip işlemediğini kontrol eder. Sağlayıcı varsayılanları otomatik olarak uygulanır." + }, + "thinkingBudget": { + "label": "Thinking Budget", + "description": "Akıl yürütme derinliğini kontrol etmek için düşünme sürecinin maksimum token uzunluğunu ayarlayın", + "placeholder": "Düşünme bütçe değerini girin", + "range": "Aralık: {min} - {max}", + "validation": { + "required": "Lütfen bütçe değerini düşünerek girin", + "minValue": "Bütçe değerinin minimumun altında olduğunu düşünmek", + "maxValue": "Bütçe değerinin {max} değerini aşamayacağını düşünüyorum" + } + }, + "type": { + "label": "Modeli Türü", + "description": "Model türünü seçin", + "options": { + "chat": "Dil Modeli", + "embedding": "Gömme Modeli", + "rerank": "Modeli Yeniden Sırala", + "imageGeneration": "Görüntü Oluşturma Modeli", + "videoGeneration": "Video Oluşturma Modeli" + } + }, + "apiEndpoint": { + "label": "API bitiş noktası", + "description": "Bu model tarafından kullanılan OpenAI API uç noktasını seçin.", + "options": { + "chat": "Metin Üretimi", + "image": "Görüntü Üretimi", + "video": "Video Oluşturma" + } + }, + "resetToDefault": "Varsayılana sıfırla", + "saveConfig": "Yapılandırmayı kaydet", + "cancel": "İptal etmek", + "useModelDefault": "Model varsayılan yapılandırmasını kullan", + "currentUsingModelDefault": "Şu anda model varsayılan yapılandırması kullanılıyor", + "resetConfirm": { + "title": "Sıfırlamayı onayla", + "message": "Bu modelin yapılandırmasını varsayılana sıfırlamak istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "confirm": "Sıfırlamayı onayla" + }, + "reasoningEffort": { + "label": "Muhakeme Çabası", + "description": "Model muhakemesi derinliğini kontrol eder; daha fazla çaba daha iyi sonuçlar verir ancak daha yavaş tepkiler verir", + "placeholder": "Akıl yürütme çabasını seçin", + "options": { + "none": "Yok - Gerekçe yok", + "minimal": "Minimum - En hızlı yanıt", + "low": "Düşük - Düşük efor", + "medium": "Orta - Orta düzeyde efor", + "high": "Yüksek - Yüksek efor", + "xhigh": "XHigh - Maksimum efor", + "max": "Maks - Maksimum efor" + } + }, + "verbosity": { + "label": "ayrıntı", + "description": "Model yanıtlarının ayrıntı düzeyini ve uzunluğunu kontrol eder", + "placeholder": "Ayrıntı düzeyini seçin", + "options": { + "low": "Düşük - Kısa cevaplar", + "medium": "Orta - Dengeli detay", + "high": "Yüksek - Ayrıntılı cevaplar" + } + }, + "validation": { + "maxTokensRequired": "Maksimum çıkış uzunluğu boş olamaz", + "maxTokensMin": "Maksimum çıkış uzunluğu 0'dan büyük olmalıdır", + "maxTokensMax": "Maksimum çıkış uzunluğu 1000000'i aşamaz", + "contextLengthRequired": "Bağlam uzunluğu boş olamaz", + "contextLengthMin": "Bağlam uzunluğu 0'dan büyük olmalıdır", + "contextLengthMax": "Bağlam uzunluğu 10000000'ı aşamaz", + "temperatureRequired": "Sıcaklık boş olamaz", + "temperatureMin": "Sıcaklık 0'dan büyük veya ona eşit olmalıdır", + "temperatureMax": "Sıcaklık 2'ye eşit veya daha az olmalıdır", + "timeoutMin": "İstek zaman aşımı en az 1000 ms olmalıdır", + "timeoutMax": "İstek zaman aşımı 3600000 ms'yi aşamaz" + }, + "endpointType": { + "label": "Uç Nokta Türü", + "description": "Yeni API'ın bu model için hangi yukarı akış protokolünü kullanması gerektiğini seçin.", + "placeholder": "Uç nokta türünü seçin", + "required": "Uç nokta türü gerekli", + "options": { + "openai": "OpenAI Sohbeti", + "openai-response": "OpenAI Responses", + "anthropic": "Anthropic Mesajlar", + "gemini": "Gemini Yerel", + "image-generation": "Görüntü Üretimi", + "video-generation": "Video Oluşturma" + } + }, + "reasoningVisibility": { + "label": "Muhakeme Görünürlüğü", + "description": "Akıl yürütme etkinleştirildiğinde akıl yürütme içeriğinin çıkarılıp çıkarılmayacağını veya özet notlar olarak gösterilip gösterilmeyeceğini kontrol eder", + "placeholder": "Muhakeme görünürlüğünü seçin", + "options": { + "omitted": "Atlandı - Gerekçe içeriğini gizle", + "summarized": "Özetlenmiş - Özetlenmiş gerekçeyi göster" + } + }, + "timeout": { + "label": "İstek Zaman Aşımı (ms)", + "description": "Tek bir model isteği için zaman aşımını ayarlayın. Aşılması durumunda talep iptal edilecektir." + }, + "imageGeneration": { + "default": "Varsayılan", + "size": { + "label": "Resim boyutu", + "custom": "Gelenek", + "placeholder": "örneğin 2048x2048", + "experimental": "2560x1440'ın üzerindeki boyutlar OpenAI tarafından deneysel olarak işaretlenmiştir.", + "validation": { + "invalid_format": "{width}x{height} biçimini kullanın.", + "invalid_multiple": "Genişlik ve yükseklik 16'nın katları olmalıdır.", + "side_too_large": "Genişlik ve yükseklik 3840 piksel veya daha az olmalıdır.", + "aspect_ratio_too_large": "Uzun kenar kısa kenarın 3 katından fazla olamaz.", + "pixel_count_out_of_range": "Toplam piksel sayısı 655360 ile 8294400 arasında olmalıdır." + } + }, + "quality": { + "label": "Kalite", + "options": { + "low": "Düşük", + "medium": "Orta", + "high": "Yüksek", + "auto": "Otomatik" + } + }, + "outputFormat": { + "label": "Çıkış formatı", + "options": { + "png": "PNG", + "jpeg": "JPEG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "Sıkıştırma", + "placeholder": "Varsayılan: 100", + "validation": "Sıkıştırma 0 ila 100 arasında bir tam sayı olmalıdır." + }, + "background": { + "label": "Arka plan", + "options": { + "auto": "Otomatik", + "opaque": "Opak" + } + }, + "moderation": { + "label": "Moderasyon", + "options": { + "auto": "Otomatik", + "low": "Düşük" + } + } + }, + "videoGeneration": { + "size": { + "label": "Çerçeve boyutu", + "placeholder": "örneğin 1280x720" + }, + "seconds": { + "label": "Saniye", + "placeholder": "örneğin 5" + }, + "duration": { + "label": "Süre", + "placeholder": "örneğin 5", + "description": "Uyumlu video uç noktaları için extra_body.duration aracılığıyla gönderildi." + }, + "ratio": { + "label": "En boy oranı", + "placeholder": "örneğin 16:9" + }, + "resolution": { + "label": "Çözünürlük", + "placeholder": "örneğin 720p" + }, + "watermark": { + "label": "Filigran", + "description": "Yukarı akış uç noktası desteklediğinde sağlayıcı tarafında bir filigran isteyin." + }, + "generateAudio": { + "label": "Ses oluştur", + "description": "Desteklendiğinde oluşturulan videoyla birlikte bir ses parçası isteyin." + } + } + } + }, + "provider": { + "search": "Sağlayıcı platformlarında arama yapın…", + "enable": "Hizmeti Etkinleştir", + "enabled": "Etkinleştirilmiş", + "disabled": "Engelli", + "urlPlaceholder": "Lütfen API URL girin", + "keyPlaceholder": "Lütfen API Key girin", + "accessKeyIdPlaceholder": "Lütfen AWS Erişim Anahtarı Kimliğini girin", + "secretAccessKeyPlaceholder": "Lütfen AWS Gizli Erişim Anahtarını girin", + "regionPlaceholder": "Lütfen AWS bölgesini girin", + "vertexProjectId": "Proje Kimliği", + "vertexProjectIdPlaceholder": "Lütfen Google Bulut proje kimliğinizi girin", + "vertexLocation": "alan", + "vertexLocationPlaceholder": "Lütfen bir bölge girin (ör. us-central1)", + "vertexServiceEmail": "Hizmet hesabı e-postası", + "vertexServiceEmailPlaceholder": "Lütfen hizmet hesabı e-postasını girin", + "vertexPrivateKey": "Hizmet hesabı özel anahtarı", + "vertexPrivateKeyPlaceholder": "Özel anahtarı yapıştırın (tek satırı destekler\\n)", + "vertexApiVersion": "API sürümü", + "vertexEndpointMode": "uç nokta modu", + "vertexEndpointStandard": "Standart (bölge uç noktası)", + "vertexEndpointExpress": "Ekspres (küresel uç nokta)", + "verifyKey": "Anahtarı Doğrula", + "howToGet": "Nasıl alınır", + "refreshingModels": "Yenileniyor...", + "getKeyTip": "Lütfen ziyaret edin", + "getKeyTipEnd": "API Key almak için", + "urlFormat": "API örneği: {defaultUrl}", + "urlFormatFill": "API URL alanını doldurun", + "openaiResponsesNotice": "OpenAI varsayılan olarak Responses API değerine sahiptir. Üçüncü taraf uç noktası yalnızca Chat Completions'yi destekliyorsa OpenAI Completions sağlayıcısını kullanın.", + "modifyBaseUrl": "Değiştir", + "baseUrlLockedHint": "Bu sağlayıcı, yanlış yapılandırmayı azaltmak için önerilen Base URL'ye sabitlenmiştir.", + "refreshModelsWithMetadataHint": "Bu sağlayıcının yenilenmesi, önce yukarı akış meta verilerini senkronize edecek, ardından yerel model listesini yeniden oluşturacaktır.", + "modelList": "Model Listesi", + "enableModels": "Modelleri Etkinleştir", + "disableAllModels": "Tüm Modelleri Devre Dışı Bırak", + "modelsEnabled": "Modeller etkinleştirildi", + "noModelsEnabled": { + "title": "Hiçbir model etkinleştirilmedi", + "description": "Kullanmak istediğiniz modelleri manuel olarak seçmek için lütfen \"Modelleri Etkinleştir\" düğmesini tıklayın." + }, + "verifyLink": "Bağlantıyı Doğrula", + "syncModelsFailed": "Modeller senkronize edilemedi...", + "addCustomProvider": "Özel Sağlayıcı Ekle", + "delete": "Silmek", + "stopModel": "Modeli Durdur", + "pulling": "Çekiliyor...", + "runModel": "Modeli Çalıştır", + "configurationUpdated": "Yapılandırma güncellendi", + "configurationSaved": "Yapılandırma kaydedildi", + "operationSuccess": "Operasyon başarılı", + "operationFailed": "İşlem başarısız oldu", + "dataRefreshed": "Veriler yenilendi", + "settingsApplied": "Ayarlar uygulandı", + "toast": { + "modelRunning": "Model çalışıyor", + "modelRunningDesc": "Lütfen önce {model} modelini durdurun ve ardından silin.", + "backupSuccessTitle": "Yedekleme tamamlandı", + "backupSuccessMessage": "Yedekleme {time} ({size}) konumuna kaydedildi", + "importSuccessTitle": "İçe aktarma tamamlandı", + "importSuccessMessage": "{count} konuşmaları başarıyla içe aktarıldı", + "refreshModelsSuccessTitle": "Modeller yenilendi", + "refreshModelsSuccessDescription": "En son model listesi bu sağlayıcı için senkronize edildi.", + "refreshModelsSuccessDescriptionWithMetadata": "Bu sağlayıcı için yukarı akış meta verileri ve en son model listesi senkronize edildi.", + "refreshModelsFailedTitle": "Yenileme başarısız oldu", + "refreshModelsFailedDescription": "Bu sağlayıcının modelleri şu anda yenilenemiyor. Lütfen daha sonra tekrar deneyin.", + "refreshModelsFailedDescriptionWithMetadata": "Bu sağlayıcı için yukarı akış meta verileri ve modelleri şu anda yenilenemiyor. Lütfen daha sonra tekrar deneyin." + }, + "modelscope": { + "name": "ModelScope", + "description": "ModelScope, Alibaba Damo Academy tarafından başlatılan bir hizmet olarak model paylaşım platformudur", + "apiKey": "API Key", + "apiKeyPlaceholder": "Lütfen ModelScope API Key girin", + "apiKeyHelper": "API Key'nizi ModelScope konsoluna alın", + "baseUrl": "API Adres", + "baseUrlHelper": "ModelScope API hizmet adresi", + "connected": "Bağlı", + "notConnected": "Bağlı değil", + "connecting": "Bağlanıyor...", + "verifySuccess": "Doğrulama başarılı", + "verifyFailed": "Doğrulama başarısız oldu", + "keyRequired": "Lütfen API Key girin", + "invalidKey": "Geçersiz API Key", + "networkError": "Ağ bağlantı hatası", + "mcpSync": { + "title": "MCP Hizmetlerini Senkronize Et", + "description": "MCP sunucularını ModelScope'den yerel yapılandırmaya senkronize ederek ortak MCP araçlarının hızla eklenmesini sağlayın.", + "sync": "Senkronizasyonu Başlat", + "syncing": "Senkronize ediliyor...", + "pageSize": "Sayfa Boyutu", + "pageNumber": "sayfa numarası", + "pageNumberPlaceholder": "Lütfen sayfa numarasını giriniz", + "imported": "İçe aktarılan {count} hizmetleri", + "skipped": "{count} hizmetleri atlandı", + "errors": "{count} hataları", + "errorDetails": "Hata Ayrıntıları", + "noApiKey": "Lütfen önce ModelScope API Key öğesini yapılandırın", + "noServersFound": "Kullanılabilir MCP hizmeti bulunamadı", + "fetchingServers": "MCP sunucularının listesi alınıyor...", + "convertingServers": "Sunucu yapılandırması dönüştürülüyor...", + "importingServers": "Sunucu yapılandırması içe aktarılıyor...", + "syncComplete": "Senkronize tamamlama", + "serverAlreadyExists": "Sunucu zaten mevcut, içe aktarmayı atlayın", + "noOperationalUrls": "Kullanılabilir işletim adresi bulunamadı", + "invalidServerData": "Geçersiz sunucu verileri", + "authenticationFailed": "Kimlik doğrulama başarısız oldu, lütfen API Key'yi kontrol edin" + }, + "details": { + "title": "Sağlayıcı ayarları ayrıntıları", + "apiConfig": "API Yapılandırma", + "rateLimitConfig": "Hız sınırı yapılandırması", + "modelManagement": "Model Yönetimi", + "safetySettings": "Güvenlik ayarları", + "specialConfig": "Özel konfigürasyon", + "mcpSync": "MCP Senkronizasyon", + "operationalServers": "Sunucu işletmek", + "syncFromModelScope": "ModelScope adresinden senkronizasyon", + "operationalDescription": "Doğrudan ModelScope platformunda kullanılabilen MCP sunucularını senkronize edin" + } + }, + "tts": { + "title": "Metinden Konuşmaya (TTS)", + "description": "Metinden konuşma oluşturun. Sesler aşağıdaki model listesinde görünür.", + "audioFormat": { + "label": "Ses Formatı", + "placeholder": "Format seç", + "helper": "Çoğu durumda MP3 önerilir." + }, + "language": { + "label": "Dil", + "placeholder": "örneğin tr", + "helper": "Desteklenen: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "TTS Modeli", + "placeholder": "Voiceai-tts-v1-en son", + "helper": "Desteklenen modeller için Voice.ai belgelerine bakın." + }, + "agentId": { + "label": "Ses Agent Kimliği", + "placeholder": "agent kimliğini yapıştır", + "helper": "Gerçek zamanlı sesli aramalar için gereklidir." + }, + "temperature": { + "label": "Sıcaklık", + "helper": "Rastgeleliği kontrol eder (0-2)." + }, + "topP": { + "label": "Üst P", + "helper": "Çekirdek örneklemesi (0-1)." + } + }, + "dialog": { + "disableModel": { + "title": "Modeli Devre Dışı Bırakmayı Onayla", + "content": "\"{name}\" modelini devre dışı bırakmak istediğinizden emin misiniz?", + "confirm": "Devre dışı bırakmak" + }, + "disableAllModels": { + "title": "Tüm Modelleri Devre Dışı Bırakmayı Onayla", + "content": "\"{name}\" için tüm modelleri devre dışı bırakmak istediğinizden emin misiniz?", + "confirm": "Tümünü Devre Dışı Bırak" + }, + "configModels": { + "title": "Model Listesini Yapılandır", + "description": "Etkinleştirilecek veya devre dışı bırakılacak modelleri seçin" + }, + "verify": { + "missingFields": "Lütfen API Key ve API URL girin", + "failed": "Doğrulama başarısız oldu", + "success": "Doğrulama başarılı", + "failedDesc": "API anahtarı veya yapılandırma doğrulaması başarısız oldu, lütfen yapılandırmanızı kontrol edin", + "successDesc": "API anahtarı ve yapılandırması başarıyla doğrulandı, kullanıma hazır", + "unauthorized": "Kimlik doğrulama başarısız oldu, API Key geçersiz veya süresi dolmuş", + "serverError": "Sunucu hatası, lütfen daha sonra tekrar deneyin", + "connectionError": "Bağlantı hatası, lütfen ağ bağlantısını ve API adresini kontrol edin" + }, + "addCustomProvider": { + "title": "Özel Sağlayıcı Ekle", + "description": "Lütfen sağlayıcı için gerekli bilgileri doldurun", + "name": "İsim", + "namePlaceholder": "Lütfen sağlayıcının adını girin", + "apiType": "API Tür", + "apiTypePlaceholder": "Lütfen API türünü seçin", + "apiKey": "API Key", + "apiKeyPlaceholder": "Lütfen API anahtarını girin", + "baseUrl": "API Base URL", + "baseUrlPlaceholder": "Lütfen API tabanını URL girin", + "enable": "Sağlayıcıyı Etkinleştir" + }, + "providerDeeplinkImport": { + "title": "İthalat Sağlayıcısı", + "description": "Ayrıştırılmış sağlayıcı yapılandırmasını uygulamadan önce inceleyin.", + "type": "Tip", + "url": "URL", + "key": "Anahtar", + "overwriteWarning": "Bu içe aktarma, mevcut sağlayıcı yapılandırmasının üzerine yazacaktır.", + "confirming": "İçe aktarılıyor..." + }, + "baseUrlUnlock": { + "title": "Base URL Değişikliğini Onayla", + "description": "Bu sağlayıcı için Base URL öğesinin değiştirilmesi önerilmez. Yanlış bir uç nokta, istek hatalarına veya diğer beklenmeyen davranışlara neden olabilir. Riski anladıysanız yine de devam edebilirsiniz.", + "confirm": "Devam etmek" + }, + "deleteProvider": { + "title": "Sağlayıcıyı Silmeyi Onayla", + "content": "\"{name}\" sağlayıcısını silmek istediğinizden emin misiniz? Bu eylem geri alınamaz.", + "confirm": "Silmek" + }, + "deleteModel": { + "title": "Modeli Silmeyi Onayla", + "content": "\"{name}\" modelini silmek istediğinizden emin misiniz? Bu eylem geri alınamaz.", + "confirm": "Silmek" + }, + "pullModel": { + "title": "Çekme Modeli", + "description": "Yerel olarak indirilecek modelleri seçin", + "pull": "Çekmek" + }, + "modelCheck": { + "title": "Model Kontrolü", + "description": "Bağlantıyı ve kullanılabilirliği test etmek için bir model seçin", + "model": "Modeli Seçin", + "modelPlaceholder": "Lütfen test etmek için bir model seçin", + "test": "Testi Başlat", + "checking": "Test...", + "success": "Model testi başarılı", + "failed": "Model testi başarısız oldu", + "noModels": "Bu sağlayıcı için mevcut model yok" + } + }, + "pullModels": "Çekme Modelleri", + "refreshModels": "Modelleri Yenile", + "modelsRunning": "Koşu Modelleri", + "runningModels": "Koşu Modelleri", + "noRunningModels": "Çalışan Model Yok", + "deleteModel": "Modeli Sil", + "deleteModelConfirm": "\"{name}\" modelini silmek istediğinizden emin misiniz? Bu eylem geri alınamaz.", + "noLocalModels": "Yerel Model Yok", + "localModels": "Yerel Modeller", + "azureApiVersion": "API Sürüm", + "safety": { + "title": "Güvenlik ayarları", + "blockNone": "Engellenmemiş", + "blockSome": "Düşük riski engelle", + "blockMost": "Orta riskleri engelle", + "blockHighest": "Yüksek riski engelle" + }, + "serverList": "Sunucu Listesi", + "totalServers": "Toplam Sunucular", + "addServer": "Sunucu Ekle", + "autoStart": "Otomatik Başlatma", + "githubCopilotAuth": "GitHub Yardımcı Pilot Yetkilendirmesi", + "githubCopilotConnected": "GitHub Yardımcı Pilot Bağlandı", + "githubCopilotNotConnected": "GitHub Yardımcı Pilot Bağlı Değil", + "loginWithGitHub": "GitHub ile giriş yapın", + "loggingIn": "Giriş yapılıyor...", + "githubCopilotClientId": "Özel Müşteri Kimliği", + "githubCopilotClientIdHint": "İsteğe bağlı. Yerleşik varsayılan İstemci Kimliğini kullanmak için boş bırakın. Yalnızca GitHub Copilot kimlik doğrulamasını etkiler.", + "githubCopilotLoginTip": "GitHub Copilot aboneliğinize erişmesi için DeepChat'a yetki verin. Copilot API'ye erişim için 'okuma:kullanıcı' ve 'okuma:org' izinleri gereklidir.", + "loginSuccess": "Giriş başarılı", + "loginFailed": "giriş başarısız oldu", + "tokenValid": "token geçerlidir", + "tokenInvalid": "token geçersiz", + "disconnect": "Bağlantıyı kes", + "disconnected": "Bağlantı başarıyla kesildi", + "disconnectFailed": "Bağlantı kesilemedi", + "keyStatus": { + "usage": "Kullanılmış", + "remaining": "Kalan Kota" + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "bedrockLimitTip": "* Yalnızca Anthropic Claude desteklenir (Opus, Sonnet, Haiku modelleri dahil)", + "bedrockVerifyTip": "DeepChat, doğrulama için Claude 3.5 Sonnet'i kullanır. Çağırma izniniz yoksa doğrulama başarısız olur. Bu, diğer modellerin kullanımını etkilemeyecektir.", + "center": { + "title": "Sağlayıcı Merkezi", + "description": "Sağlayıcı bağlantılarını, modellerini ve gelişmiş yapılandırmayı yönetin.", + "noApiUrl": "API URL yapılandırılmadı", + "enabledModels": "{count} modelleri etkin", + "noAdvancedConfig": "Bu sağlayıcının ekstra gelişmiş yapılandırması yoktur.", + "status": { + "connected": "Bağlı", + "keyMissing": "Anahtar eksik", + "disabled": "Engelli", + "local": "Yerel" + }, + "tabs": { + "connection": "Bağlamak", + "models": "Modeller", + "advanced": "Gelişmiş" + } + } + }, + "knowledgeBase": { + "title": "Bilgi Bankası Ayarları", + "addKnowledgeBase": "Bilgi Bankası Ekle", + "selectKnowledgeBaseType": "Lütfen eklenecek bilgi tabanı türünü seçin", + "difyDescription": "Dify bilgi tabanı belge verilerini yönetmenize ve kullanmanıza yardımcı olur", + "comingSoon": "Yakında gelecek", + "featureNotAvailable": "Bu özellik henüz kullanılamıyor", + "addDifyConfig": "Dify Yapılandırmasını Ekle", + "apiKey": "API Key", + "datasetId": "Veri Kümesi Kimliği", + "endpoint": "API Uç nokta", + "configAdded": "Yapılandırma Eklendi", + "configAddedDesc": "{name} yapılandırması başarıyla eklendi", + "addConfig": "Yapılandırma Ekle", + "moreComingSoon": "Daha fazla bilgi tabanı türü yakında gelecek", + "configUpdated": "Yapılandırma Güncellendi", + "configUpdatedDesc": "{name} yapılandırması başarıyla güncellendi", + "descriptionPlaceholder": "Örnek: Şirketin ürün dokümantasyonu bilgi tabanı", + "ragflowTitle": "RAGFlow Bilgi Bankası", + "ragflowDescription": "RAGFlow, çoklu erişim yöntemlerini ve belge yönetimi özelliklerini destekleyen güçlü bir bilgi tabanı yönetim sistemidir.", + "addRagflowConfig": "RAGFlow Yapılandırmasını Ekle", + "editRagflowConfig": "RAGFlow Yapılandırmasını Düzenle", + "dify": "Dify Bilgi Bankası", + "editDifyConfig": "Dify yapılandırmasını değiştirin", + "fastgptTitle": "FastGPT Bilgi Bankası", + "fastgptDescription": "FastGPT, çoklu erişim yöntemlerini ve belge yönetimi özelliklerini destekleyen güçlü bir bilgi tabanı yönetim sistemidir.", + "addFastGptConfig": "FastGPT Yapılandırmasını Ekle", + "editFastGptConfig": "FastGPT Yapılandırmasını Düzenle", + "builtInKnowledgeTitle": "Yerleşik bilgi tabanı", + "builtInKnowledgeDescription": "Yerleşik bilgi tabanı, çevrimdışı bir ortamda bazı temel işlevleri etkinleştiren bazı basit uygulamalar sağlar.", + "addBuiltinKnowledgeConfig": "Yerleşik bilgi tabanı yapılandırmasını ekleyin", + "editBuiltinKnowledgeConfig": "Yerleşik bilgi tabanı yapılandırmasını düzenleyin", + "descriptionDesc": "Yapay zekanın bu bilgi tabanını alıp almayacağına karar vermesi için bilgi tabanının açıklaması", + "embeddingModel": "Gömme Modeli", + "selectEmbeddingModel": "Bir yerleştirme modeli seçin", + "selectEmbeddingModelHelper": "Bilgi tabanı oluşturulduktan sonra modellerin yerleştirilmesi yasaktır", + "rerankModel": "Modeli yeniden sırala", + "selectRerankModel": "Yeniden sıralama modelini seçin", + "chunkSize": "Blok boyutu", + "chunkOverlap": "Örtüşen boyut", + "fragmentsNumber": "İstenen belge parçası sayısı", + "chunkSizeHelper": "Belgeyi bölümlere ayırın; her bölümün boyutu model bağlam sınırını aşamaz", + "chunkOverlapHelper": "Bitişik metin blokları arasında tekrarlanan içerik miktarı, bölümlere ayrılmış metin blokları arasında hala bağlamsal bir bağlantı olmasını sağlayarak, uzun metinlerin model işlemesinin genel etkisini artırır.", + "fragmentsNumberHelper": "İstenen belgenin parçaları ne kadar fazlaysa, o kadar fazla bilgiyle birlikte gelir, ancak o kadar fazla tokens tüketilmesi gerekir", + "modelNotFound": "Servis Sağlayıcı {provider} veya model {model} bulunamadı", + "modelNotFoundDesc": "Modelin doğru yapılandırıldığından ve etkin olduğundan emin olun. Model yapılandırmasını servis sağlayıcı ayarlarından kontrol edebilirsiniz.", + "removeBuiltinKnowledgeConfirmTitle": "{name} yerleşik bilgi tabanını silmeyi onaylıyor musunuz?", + "removeBuiltinKnowledgeConfirmDesc": "Yerleşik bilgi tabanı yapılandırmasının silinmesi, ilgili tüm verilerin silinmesine neden olur ve geri yüklenemez. Lütfen dikkatli olun.", + "advanced": "Gelişmiş Seçenekler", + "dimensions": "Gömme boyutları", + "dimensionsPlaceholder": "1024 gibi gömülü boyut boyutu", + "autoDetectDimensions": "Gömülü boyutları otomatik olarak algıla", + "autoDetectHelper": "Gömülü boyutları otomatik olarak algılar, az miktarda token tüketir", + "dimensionsHelper": "Modelin ayarlanan yerleştirme boyutu boyutunu desteklediğinden emin olun", + "autoDetectDimensionsError": "Gömülü boyut hatasını otomatik olarak algıla", + "normalized": "L2 Normalleştirme", + "normalizedHelper": "Lütfen modelin çıktı vektörlerinin L2 normalizasyonunu desteklediğini doğrulayın", + "chunkSizePlaceholder": "Varsayılan değer; herhangi bir değişiklik yapılması önerilmez", + "chunkOverlapPlaceholder": "Varsayılan değer; herhangi bir değişiklik yapılması önerilmez", + "return": "geri dönmek", + "uploadHelper": "Dosyayı buraya yüklemek veya sürüklemek için tıklayın", + "fileSupport": "{accept} ve {count} diğer formatları destekleyin", + "searchKnowledge": "Bilgi Bankasında Arayın", + "searchKnowledgePlaceholder": "Lütfen sorgu içeriğini girin", + "noData": "Henüz veri yok", + "file": "belge", + "uploadProcessing": "Yükleniyor", + "uploadCompleted": "Yükleme tamamlandı", + "reAdd": "Yeniden yükle", + "uploadError": "Yükleme başarısız oldu", + "processing": "Yükleniyor", + "paused": "Yüklemeyi duraklat", + "unknown": "Bilinmeyen durum", + "delete": "silmek", + "reason": "sebep", + "deleteSuccess": "Başarıyla sil", + "copy": "kopyala", + "copySuccess": "Başarıyla kopyalandı", + "source": "kaynak", + "resumeAllPausedTasks": "Tek tıklamayla kurtarma", + "pauseAllRunningTasks": "Tek tıklamayla duraklatma", + "reAddFile": { + "title": "Yeniden yükleme onayı", + "content": "\"{fileName}\" dosyasını yeniden yüklediğinizden emin misiniz?" + }, + "deleteFile": { + "title": "Dosya onayını sil", + "content": "\"{fileName}\" dosyasını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz." + }, + "dialog": { + "beforequit": { + "title": "Çıkış onayı", + "description": "Çalışan bir bilgi tabanı görevi var. Yazılımdan çıktığınızdan emin misiniz?\nİptal edilen görevler, yazılım yeniden başlatıldıktan sonra geri yüklenebilir.", + "cancel": "İptal etmek", + "confirm": "onaylamak" + } + }, + "searchError": "Sorgu başarısız oldu", + "separators": "Blok ayırıcı", + "separatorsHelper": "Belge segmentasyonu sınırlayıcısı, tek bir sınırlayıcı çift tırnak (\"\") içine alınır ve sınırlayıcılar virgüllerle (,) ayrılır", + "invalidSeparators": "Geçersiz ayırıcı", + "selectLanguage": "Bir ön ayar seçin", + "separatorsPreset": "Ön ayarlar yükleniyor", + "nowledgeMem": { + "apiKey": "API Key", + "apiKeyHint": "İsteğe bağlı.\nHizmetiniz API Key gerektiriyorsa buraya girin.", + "baseUrl": "Base URL", + "configuration": "Yapılandırma", + "description": "Konuşmaları Nowledge Mem hizmetine aktarın.", + "resetConfig": "Sıfırla", + "saveConfig": "Kaydetmek", + "seconds": "saniye", + "testConnection": "Bağlantıyı Test Et", + "timeout": "Zaman aşımı", + "title": "Nowledge Bellek Dışa Aktarma" + } + }, + "mcp": { + "title": "MCP Ayarlar", + "description": "MCP (Model Bağlam Protokolü) sunucularını ve araçlarını yönetin ve yapılandırın", + "enabledTitle": "MCP'yi etkinleştir", + "enabledDescription": "MCP işlevini ve araçlarını etkinleştirme veya devre dışı bırakma", + "enableToAccess": "Yapılandırma seçeneklerine erişmek için lütfen MCP öğesini etkinleştirin", + "marketplace": "Tek tıklamayla kurulum için MCP Market'e gidin", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Teknik Detaylar", + "httpServer": "HTTP Sunucu", + "localProcess": "Yerel Süreç", + "restartServer": "Sunucuyu Yeniden Başlat", + "viewLogs": "Günlükleri Görüntüle", + "starting": "Başlangıç", + "error": "Hata", + "tabs": { + "servers": "Sunucular", + "tools": "Aletler", + "prompts": "prompt", + "resources": "Kaynaklar" + }, + "serverList": "Sunucu Listesi", + "addServer": "Sunucu Ekle", + "running": "Koşma", + "stopped": "Durduruldu", + "stopServer": "Sunucuyu Durdur", + "startServer": "Sunucuyu Başlat", + "noServersFound": "Sunucu Bulunamadı", + "addServerDialog": { + "title": "Sunucu Ekle", + "description": "Yeni bir MCP sunucusu yapılandırın" + }, + "editServerDialog": { + "title": "Sunucuyu Düzenle", + "description": "MCP sunucu yapılandırmasını düzenleyin" + }, + "serverForm": { + "name": "Sunucu Adı", + "namePlaceholder": "Sunucu adını girin", + "nameRequired": "Sunucu adı gerekli", + "type": "Sunucu Türü", + "typePlaceholder": "Sunucu türünü seçin", + "typeStdio": "Standart giriş ve çıkış (Stdio)", + "typeSse": "Sunucu Tarafından Gönderilen Etkinlikler (SSE)", + "typeInMemory": "Bellek İçi", + "typeHttp": "HTTP İsteklerinin Akışı (HTTP)", + "baseUrl": "Base URL", + "baseUrlPlaceholder": "URL sunucu tabanını girin (ör. http://localhost:3000)", + "command": "Emretmek", + "commandPlaceholder": "Komutu girin", + "commandRequired": "Komut gerekli", + "args": "Argümanlar", + "argsPlaceholder": "Her satıra bir argüman girin", + "addArg": "Bağımsız Değişken Ekle", + "argPlaceholder": "Bağımsız değişken değerini girin", + "argsRequired": "Argümanlar gerekli", + "env": "Ortam Değişkenleri", + "envPlaceholder": "Ortam değişkenlerini JSON biçiminde girin", + "envInvalid": "Ortam değişkenleri geçerli olmalıdır JSON", + "description": "Tanım", + "descriptionPlaceholder": "Sunucu açıklamasını girin", + "descriptions": "Tanım", + "descriptionsPlaceholder": "Sunucu açıklamasını girin", + "icon": "Simge", + "iconPlaceholder": "Simgeyi girin", + "icons": "Simge", + "iconsPlaceholder": "Simgeyi girin", + "autoApprove": "Otomatik Onayla", + "autoApproveAll": "Tüm", + "autoApproveRead": "Okumak", + "autoApproveWrite": "Yazmak", + "autoApproveHelp": "Kullanıcı onayı olmadan otomatik onaylanacak işlem türlerini seçin", + "submit": "Göndermek", + "add": "Eklemek", + "update": "Güncelleme", + "cancel": "İptal etmek", + "jsonConfigIntro": "Bir JSON yapılandırmasını doğrudan yapıştırabilir veya sunucuyu manuel olarak yapılandırmayı seçebilirsiniz.", + "jsonConfig": "JSON Yapılandırma", + "jsonConfigPlaceholder": "MCP sunucu yapılandırmanızı JSON biçiminde yapıştırın", + "jsonConfigExample": "JSON Yapılandırma Örneği", + "parseSuccess": "Yapılandırma Ayrıştırıldı", + "configImported": "Yapılandırma başarıyla içe aktarıldı", + "parseError": "Ayrıştırma Hatası", + "skipToManual": "Manuel Yapılandırmaya Atla", + "parseAndContinue": "Ayrıştır ve Devam Et", + "jsonParseError": "JSON ayrıştırma başarısız oldu", + "browseMarketplace": "MCP Pazar Yerine Göz Atın", + "imageModel": "Vizyon Modeli", + "customHeadersParseError": "Özel Başlık ayrıştırma işlemi başarısız oldu", + "customHeaders": "Özel İstek Başlıkları", + "clickToEdit": "İçeriğin tamamını düzenlemek ve görüntülemek için tıklayın", + "invalidKeyValueFormat": "Yanlış istek başlığı biçimi. Lütfen girişin doğru olup olmadığını kontrol edin.", + "npmRegistry": "Özel NPM Kayıt Defteri", + "npmRegistryPlaceholder": "Özel bir NPM Kayıt Defteri oluşturun, sistemin en hızlı olanı otomatik olarak seçmesine izin verin", + "browseHigress": "Higress MCP Pazaryerini Görüntüle", + "selectFolderError": "Klasör seçim hatası", + "folders": "İzin Verilen Klasörler", + "addFolder": "Klasör Ekle", + "noFoldersSelected": "Hiçbir klasör seçilmedi", + "useE2B": "E2B Korumalı Alanını Etkinleştir", + "e2bDescription": "E2B sanal alanını kullanarak Python kodunu yürütün", + "e2bApiKey": "E2B APIKey", + "e2bApiKeyPlaceholder": "E2B API Anahtarlarınızı buraya girin, örneğin e2b_1111xx*******", + "e2bApiKeyHelp": "APIKey'inizi almak için e2b.dev'e gidin", + "e2bApiKeyRequired": "E2B işlevini etkinleştirmek için APIKey girilmelidir" + }, + "deleteServer": "Sunucuyu Sil", + "editServer": "Sunucuyu Düzenle", + "setDefault": "Varsayılan Olarak Ayarla", + "removeDefault": "Varsayılanı Kaldır", + "isDefault": "Varsayılan Sunucu", + "default": "Varsayılan", + "setAsDefault": "Varsayılan Olarak Ayarla", + "removeServer": "Sunucuyu Kaldır", + "autoStart": "Otomatik Başlatma", + "confirmRemoveServer": "{name} sunucusunu silmek istediğinizden emin misiniz? Bu eylem geri alınamaz.", + "removeServerDialog": { + "title": "Sunucuyu Sil" + }, + "confirmDelete": { + "title": "Silmeyi Onayla", + "description": "{name} sunucusunu silmek istediğinizden emin misiniz? Bu eylem geri alınamaz.", + "confirm": "Silmek", + "cancel": "İptal etmek" + }, + "resetToDefault": "Varsayılana Sıfırla", + "resetConfirmTitle": "Varsayılan Sunuculara Sıfırla", + "resetConfirmDescription": "Bu, özel sunucularınızı korurken tüm varsayılan sunucuları geri yükleyecektir. Varsayılan sunucularda yapılan tüm değişiklikler kaybolacaktır.", + "resetConfirm": "Sıfırla", + "builtInServers": "Yerleşik Sunucular", + "customServers": "Özel Sunucular", + "builtIn": "Yerleşik", + "cannotRemoveBuiltIn": "Yerleşik Sunucu Kaldırılamıyor", + "builtInServerCannotBeRemoved": "Yerleşik sunucular kaldırılamaz, yalnızca parametreler ve ortam değişkenleri değiştirilebilir", + "maxDefaultServersReached": "En fazla yalnızca 3 varsayılan sunucu ayarlanabilir", + "removeDefaultFirst": "Lütfen önce bazı varsayılan sunucuları kaldırın", + "higressMarket": "Higress MCP Kurulumuna gidin", + "totalServers": "Toplam Sunucular", + "npmRegistry": { + "title": "NPM Kaynak", + "currentSource": "Mevcut Kaynak", + "cached": "Önbelleğe alındı", + "lastChecked": "Son Kontrol Edildi", + "refresh": "Yenile", + "advanced": "Gelişmiş", + "advancedSettings": "Gelişmiş Ayarlar", + "advancedSettingsDesc": "Otomatik algılama ve özel kaynak ayarları da dahil olmak üzere gelişmiş NPM kayıt defteri seçeneklerini yapılandırın", + "autoDetect": "Optimum kaynağı otomatik olarak algıla", + "autoDetectDesc": "Başlangıçta en hızlı NPM kayıt defterini otomatik olarak algılayın ve kullanın", + "customSource": "Özel Kaynak", + "customSourcePlaceholder": "Özel NPM kayıt defterini girin URL", + "currentCustom": "Mevcut özel kaynak", + "justNow": "Şu anda", + "minutesAgo": "{minutes} dakika önce", + "hoursAgo": "{hours} saat önce", + "daysAgo": "{days} gün önce", + "refreshSuccess": "NPM kayıt defteri başarıyla yenilendi", + "refreshSuccessDesc": "Optimum NPM kaydı yeniden algılandı ve güncellendi", + "refreshFailed": "NPM kayıt defteri yenilemesi başarısız oldu", + "autoDetectUpdated": "Otomatik algılama ayarı güncellendi", + "autoDetectEnabled": "Optimum NPM kayıt defterini otomatik algılama etkin", + "autoDetectDisabled": "Otomatik algılama devre dışı, varsayılan kayıt defterini kullanacak", + "updateFailed": "Güncelleme ayarı başarısız oldu", + "customSourceSet": "Özel kaynak seti", + "customSourceSetDesc": "Özel NPM kayıt defteri kümesi: {registry}", + "customSourceCleared": "Özel kaynak temizlendi", + "customSourceClearedDesc": "Özel NPM kayıt defteri temizlendi, otomatik algılamayı kullanacak", + "invalidUrl": "Geçersiz URL", + "invalidUrlDesc": "Lütfen geçerli bir HTTP veya HTTPS adresi girin", + "testing": "NPM kayıt defteri test ediliyor", + "testingDesc": "{registry} bağlantısı test ediliyor...", + "testFailed": "NPM kayıt defteri testi başarısız oldu", + "testFailedDesc": "{registry}'ye bağlanılamıyor, hata: {error}. Lütfen URL'nin doğru olup olmadığını veya ağ bağlantısı olup olmadığını kontrol edin.", + "redetectingOptimal": "Optimum NPM kaydı yeniden algılanıyor...", + "redetectComplete": "Yeniden algılama tamamlandı", + "redetectCompleteDesc": "Geçerli optimum NPM kayıt defteri algılandı ve ayarlandı", + "redetectFailed": "Yeniden algılama başarısız oldu", + "redetectFailedDesc": "Optimum kayıt defteri yeniden algılanamıyor, varsayılan yapılandırma kullanılacak" + }, + "managedServerReadOnly": "DeepChat yönetilen hizmet", + "managedServerReadOnlyDesc": "Sahip olduğunuz eklenti ayarlarından etkinleştirme ve izinleri yönetin.", + "center": { + "title": "MCP Merkez", + "running": "Koşma", + "builtIn": "Yerleşik", + "custom": "Gelenek", + "searchPlaceholder": "MCP sunucularını arayın...", + "noResults": "Eşleşen MCP sunucusu yok", + "command": "Komut / URL", + "filters": { + "all": "Tüm", + "running": "Koşma", + "stopped": "Durduruldu", + "builtIn": "Yerleşik", + "custom": "Gelenek" + } + } + }, + "about": { + "title": "Hakkımızda", + "version": "Sürüm", + "checkUpdate": "Güncellemeyi Kontrol Et", + "checking": "Kontrol ediliyor...", + "latestVersion": "Son Sürüm" + }, + "display": { + "fontTitle": "Yazı tipleri", + "fontFamily": "Arayüz yazı tipi", + "fontFamilyDesc": "Birincil kullanıcı arayüzü yazı tipini seçin. Yerleşik yığını kullanmak için boş bırakın.", + "codeFontFamily": "Tek aralıklı yazı tipi", + "codeFontFamilyDesc": "Kod blokları ve tüm tek aralıklı alanlar için geçerlidir.", + "fontDefaultLabel": "Varsayılan (yerleşik yığın)", + "fontSearchPlaceholder": "Yazı tiplerini arayın", + "fontSearchEmpty": "Eşleşen yazı tipi yok", + "fontReset": "Varsayılana sıfırla", + "fontSystemLoading": "Sistem yazı tipleri yükleniyor...", + "fontUsageHint": "Bazı arayüzlerin etkili olması için uygulamanın yeniden başlatılması gerekir. Yazı tipi kullanılamıyorsa otomatik olarak varsayılan yazı tipine geri döner.", + "fontSize": "Metin boyutu", + "text-sm": "Küçük", + "text-base": "Orta", + "text-lg": "Büyük", + "text-xl": "X-Large", + "text-2xl": "XX-Büyük", + "floatingButton": "Yüzen Düğme", + "floatingButtonDesc": "Uygulama penceresini hızlı bir şekilde etkinleştirmek için masaüstünde kayan bir düğme görüntüleyin" + }, + "shortcuts": { + "title": "Kısayol Tuşu Ayarları", + "pressKeys": "Tuşlara basın", + "pressEnterToSave": "Kaydetmek için Enter'a, iptal etmek için Esc'ye basın", + "noModifierOnly": "Değiştirici tuş tek başına kısayol olarak kullanılamaz", + "keyConflict": "Kısayol tuşu çakışması, lütfen başka bir kombinasyon seçin", + "clearShortcut": "Kısayolu temizle", + "zoomIn": "Yakınlaştır", + "zoomOut": "Uzaklaştır", + "zoomReset": "Yakınlaştırmayı sıfırla", + "goSettings": "Ayarları Aç", + "cleanHistory": "Sohbet geçmişini temizle", + "deleteConversation": "Görüşmeyi Sil", + "hideWindow": "Pencereyi gizle", + "quitApp": "Uygulamadan çık", + "toggleSidebar": "Kenar Çubuğunu Değiştir", + "toggleWorkspace": "Çalışma Alanını Değiştir", + "newWindow": "Yeni bir pencere aç", + "showHideWindow": "Göster/Hide pencere", + "newConversation": "Yeni görüşme", + "quickSearch": "Spotlight araması", + "closeWindow": "Geçerli pencereyi kapat" + }, + "acp": { + "title": "ACP Agent", + "description": "DeepChat tarafından başlatılan yerel Agent İstemci Protokolü agents'yi yönetin.", + "enabledTitle": "ACP'yi etkinleştir", + "enabledDescription": "Etkinleştirildiğinde, yapılandırılmış ACP agents seçicide model olarak görünecektir.", + "useBuiltinRuntimeTitle": "DeepChat Yerleşik Çalışma Zamanını Kullan", + "useBuiltinRuntimeDescription": "Etkinleştirildiğinde, DeepChat'nin paketlenmiş sürümlerini kullanarak sistem node ve uv komutlarını atlar.", + "enableToAccess": "agents'yi yapılandırmak için ACP'yi etkinleştirin.", + "registryInstallEntry": "Agent'yi yükleyin", + "registryInstallEntryDescription": "ACP Registry'den agents'yi arayın ve yükleyin, ardından bunları etkinleştirmek ve yapılandırmak için buraya geri dönün.", + "addCustomAgent": "Özel Agent Ekle", + "customEmpty": "Henüz özel agents yok.", + "customDeleteConfirm": "Özel agent \"{name}\" silinsin mi?", + "builtinSectionTitle": "Dahili Agent", + "builtinSectionDescription": "Her yerleşik agent birden fazla başlatma profiline sahip olabilir. Model listesinde yalnızca etkin profili olan etkin agents görünür.", + "builtinHint": "{name}'yi bu ayarlarla başlatın.", + "disabledBadge": "Engelli", + "manageProfiles": "Profiller", + "addProfile": "Profil Ekle", + "activeProfile": "Aktif Profil", + "profilePlaceholder": "Bir profil seçin", + "profileSwitched": "Profil değiştirildi", + "customSectionTitle": "Özel Agent", + "customSectionDescription": "ACP uyumlu herhangi bir komutu yeniden kullanılabilir bir model girişi olarak sarın.", + "mcpAccessTitle": "İzin Verilen MCP Sunucuları", + "mcpAccessEmpty": "Şu anda isteğe bağlı bir MCP yok.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "Paylaşılan MCP", + "sharedMcpDescription": "Tüm ACP agents aynı MCP erişim seçimini paylaşır.", + "installedSectionTitle": "Agent yüklendi", + "installedSectionDescription": "Etkinleştirme, inceleme ve env geçersiz kılmaları için burada yalnızca yüklü kayıt defteri agents görünür.", + "installedCount": "{count} kuruldu", + "installedEmptyTitle": "Henüz yüklü bir kayıt yok agents", + "installedEmptyDescription": "Önce ACP Registry'den bir agent yükleyin, ardından burada yapılandırın.", + "registryCount": "{count} agents", + "registryEmpty": "Geçerli filtreler için agents kaydı yok.", + "registryOverlayEmpty": "Geçerli filtrelerle eşleşen agents yok.", + "registryRefresh": "Kayıt Defterini Yenile", + "registryRepair": "Tamirat", + "registryInstallAction": "Düzenlemek", + "registryUninstallAction": "Kaldır", + "registryUninstallConfirm": "\"{name}\" kaldırılsın mı?", + "registryUninstallDescription": "DeepChat bu agent'yi devre dışı bırakacak ve uygun olduğunda yerel olarak yönetilen yükleme verilerini temizleyecektir. Daha sonra ACP Registry'den tekrar yükleyebilirsiniz.", + "registryUninstallFailed": "agent kaldırılamadı", + "registryInstallTitle": "ACP Registry", + "registryInstallDescription": "ACP agents öğesini arayın, filtreleyin ve yükleyin. Kurulumdan sonra bunları ayarlarda tekrar yapılandırın.", + "registryLearnMore": "Daha fazla bilgi edin", + "registryRepository": "Depo", + "registrySearchPlaceholder": "ACP Registry Agent ara...", + "installFilters": { + "all": "Tüm", + "installed": "Yüklendi", + "notInstalled": "Kurulu Değil" + }, + "filters": { + "all": "Tüm durumlar", + "enabled": "Yalnızca etkin", + "installed": "Yalnızca yüklü", + "attention": "Dikkat edilmesi gerekiyor" + }, + "envOverrideTitle": "Ortam Değişkenini Geçersiz Kılmalar", + "envOverridePlaceholder": "Satır başına bir ANAHTAR=DEĞER", + "installState": { + "installed": "Yüklendi", + "installing": "Kurulum", + "error": "Yükleme başarısız oldu", + "notInstalled": "Kurulu değil" + }, + "loading": "ACP verileri yükleniyor...", + "none": "Hiçbiri", + "saveSuccess": "Yapılandırma kaydedildi", + "saveFailed": "agent kaydedilemedi", + "deleteSuccess": "Başarıyla silindi", + "initialize": "Başlat", + "initializing": "Başlatılıyor...", + "initializeDescription": "Başlatma komutlarıyla açılan terminal", + "initializeSuccess": "Başlatma başladı", + "initializeFailed": "Başlatma başarısız oldu", + "missingFieldsTitle": "Ad ve komut gerekli", + "missingFieldsDesc": "Lütfen kaydetmeden önce hem adı hem de komutu girin.", + "command": "Emretmek", + "commandPlaceholder": "Yürütülebilir dosya veya komut dosyası yolu", + "args": "Argümanlar", + "argsPlaceholder": "İsteğe bağlı, boşluklarla ayrılmış. Tartışmaları bir arada tutmak için tırnak işaretleri kullanın.", + "env": "Ortam Değişkenleri", + "addEnv": "Değişken Ekle", + "envKeyPlaceholder": "ANAHTAR", + "envValuePlaceholder": "DEĞER", + "profileDialog": { + "addBuiltinTitle": "{name} Profili Ekle", + "editBuiltinTitle": "{name} Profilini Düzenle", + "addCustomTitle": "Özel Agent Ekle", + "editCustomTitle": "Özel Agent'yi Düzenle", + "builtinHint": "Her senaryo için farklı ön ayarlar kullanın ve bunları seçicide değiştirin.", + "customHint": "agent'nizi başlatmak için komutu, argümanları ve env değişkenlerini sağlayın.", + "profileName": "Profil Adı", + "profileNamePlaceholder": "örneğin İş istasyonu", + "agentName": "Agent Ad", + "agentNamePlaceholder": "örneğin Yerelim ACP" + }, + "profileManager": { + "title": "Profiller", + "description": "Kaydedilen başlatma profillerini değiştirin, düzenleyin veya silin.", + "count": "{count} Profilleri", + "empty": "Henüz profil yok.", + "active": "Aktif", + "setActive": "Aktif Olarak Ayarla", + "deleteConfirm": "\"{name}\" profili silinsin mi?", + "cannotDeleteTitle": "En az bir profili koruyun", + "cannotDeleteDesc": "Yerleşik agents en az bir yapılandırma gerektirir.", + "noAgent": "Profillerini yönetmek için bir agent seçin." + }, + "terminal": { + "title": "Başlatma Terminali", + "waiting": "Başlatmanın başlaması bekleniyor...", + "starting": "Başlatma işlemi başlatılıyor...", + "close": "Kapalı", + "closing": "Kapanıyor...", + "exitSuccess": "İşlem başarıyla tamamlandı (çıkış kodu: {code})", + "exitError": "İşlemden hatayla çıkıldı (çıkış kodu: {code})", + "processError": "İşlem hatası", + "paste": "Yapıştır", + "pasteError": "Panodan yapıştırılamadı", + "status": { + "idle": "Boşta", + "running": "Koşma", + "completed": "Tamamlanmış", + "error": "Hata" + } + }, + "dependency": { + "title": "Eksik Dış Bağımlılıklar", + "description": "Başlatmadan önce aşağıdaki bağımlılıkların kurulması gerekir.", + "installCommands": "Kurulum Komutları", + "downloadUrl": "İndirme Bağlantısı", + "copy": "Kopyala", + "copied": "Panoya kopyalandı", + "copyFailed": "Kopyalanamadı" + }, + "debug": { + "title": "ACP Hata Ayıklama", + "description": "Ham ACP çağrılarını \"{name}\" adresine gönderin ve yanıtları izleyin.", + "entry": "Hata ayıklama", + "healthCheck": "Sağlık Kontrolü", + "healthChecking": "Kontrol ediliyor...", + "healthCheckFailed": "Durum kontrolü başarısız oldu", + "workdirPlaceholder": "Boşsa agent varsayılanını kullanın", + "close": "Kapalı", + "customMethod": "Özel yöntem adı", + "customMethodPlaceholder": "örneğin oturum/ping", + "payloadHint": "Göndermeden önce JSON gövdesini düzenleyin.", + "format": "Biçim JSON", + "resetTemplate": "Şablonu sıfırla", + "clearHistory": "Geçmişi temizle", + "send": "İstek gönder", + "sending": "Gönderiliyor...", + "processReady": "Süreç hazır", + "processNotReady": "Başlamak için başlat", + "needInitialize": "İlk önce başlatmayı çalıştırın", + "events": "Olaylar", + "eventCount": "{count} öğeleri", + "empty": "Henüz hata ayıklama etkinliği yok.", + "parseError": "Geçersiz JSON verisi", + "customMethodRequired": "Dahili çağrılar için bir yöntem adı sağlayın", + "requestFailed": "İstek başarısız oldu", + "methods": { + "initialize": "başlatmak", + "newSession": "oturum/new", + "loadSession": "oturum/load", + "prompt": "oturum/prompt", + "cancel": "oturum/cancel", + "setSessionMode": "oturum/setMode", + "setSessionModel": "oturum/setModel", + "extMethod": "dahili/method", + "extNotification": "dahili/notification" + }, + "eventKinds": { + "request": "Rica etmek", + "response": "Cevap", + "notification": "Bildiri", + "permission": "İzin", + "lifecycle": "Yaşam döngüsü", + "stderr": "stderr", + "error": "Hata" + } + } + }, + "rateLimit": { + "title": "Oran Limiti", + "description": "API sınırlarının aşılmasını önlemek için kontrol isteği aralığı", + "intervalLimit": "Talep Aralığı", + "intervalUnit": "saniye", + "intervalHelper": "İstekler arasındaki minimum aralık, gerekmiyorsa hız sınırlamasını devre dışı bırakın", + "lastRequestTime": "Son Talep", + "queueLength": "Kuyruk Uzunluğu", + "nextAllowedTime": "Sonraki İzin Verildi", + "never": "Asla", + "justNow": "Şu anda", + "secondsAgo": "önce", + "minutesAgo": "m önce", + "immediately": "Şimdi", + "secondsLater": "sonra", + "confirmDisableTitle": "Hız Sınırını Devre Dışı Bırakmayı Onayla", + "confirmDisableMessage": "Değer 0'dan küçük veya 0'a eşit olamaz. Hız sınırlamasını devre dışı bırakmak istiyor musunuz?", + "confirmDisable": "Limiti Devre Dışı Bırak", + "disabled": "Hız Limiti Devre Dışı", + "disabledDescription": "Hız sınırlama devre dışı bırakıldı" + }, + "promptSetting": { + "resetToDefault": "Varsayılana sıfırla prompt", + "resetToDefaultSuccess": "prompt varsayılan sistemine başarıyla sıfırlayın", + "resetToDefaultFailed": "Sıfırlanamadı, lütfen tekrar deneyin" + }, + "skills": { + "title": "Skills", + "description": "Yapay zeka asistanını yönetin ve yapılandırın skills", + "draftSuggestions": { + "title": "Skill Taslakları Önerin", + "description": "Bir görev tamamlandıktan sonra, agent'nin geçici olarak yeniden kullanılabilir skill taslakları önermesine izin verin. Taslaklar, siz bunları manuel olarak içe aktarmayı seçene kadar geçici klasörde kalır." + }, + "openFolder": "Klasörü Aç", + "addSkill": "Skill ekle", + "empty": "Henüz skills yok", + "emptyHint": "Yeni bir skill yüklemek için \"Skill Ekle\"ye tıklayın", + "noResults": "Eşleşen skills bulunamadı", + "search": "skills'da ara...", + "count": "{count} skills", + "install": { + "title": "Skill'yi yükleyin", + "description": "skill kurulum yöntemini seçin", + "tabFolder": "Dosya", + "tabZip": "Posta Kodu", + "tabUrl": "URL", + "fromFolder": "Klasörden Yükle", + "selectFolder": "Skill Klasörünü seçin", + "folderHint": "Bir skill klasörü seçmek için tıklayın", + "folderTip": "skills'yi ~/.claude/skills/ gibi diğer istemcilerden içe aktarın", + "zipHint": "Bir ZIP dosyası seçmek için tıklayın", + "urlPlaceholder": "skill ZIP indirmesini girin URL", + "urlHint": "skill paketinin indirme bağlantısını girin", + "installButton": "Düzenlemek", + "installing": "Yükleniyor...", + "success": "Kurulum Başarılı", + "successMessage": "Skill {name} başarıyla kuruldu", + "failed": "Kurulum Başarısız", + "dragNotSupported": "Sürükleme desteklenmiyor, lütfen seçmek için tıklayın" + }, + "delete": { + "title": "Skill'yi sil", + "description": "skill {name} silmek istediğinizden emin misiniz? Bu eylem geri alınamaz.", + "success": "Silme Başarılı", + "successMessage": "Skill {name} başarıyla silindi", + "failed": "Silme Başarısız" + }, + "card": { + "scripts": "{count} komut dosyaları", + "env": "{count} ortam", + "pythonShort": "Py", + "nodeShort": "Node" + }, + "edit": { + "title": "Skill'yi düzenleyin", + "placeholder": "skill içeriğini burada düzenleyin...", + "readFailed": "Okunamadı", + "success": "Başarıyla Kaydedildi", + "failed": "Kaydedilemedi", + "name": "İsim", + "namePlaceholder": "Skill adı", + "nameHint": "Skill adı oluşturulduktan sonra değiştirilemez", + "description": "Tanım", + "descriptionPlaceholder": "Skill açıklaması", + "allowedTools": "İzin Verilen Araçlar", + "allowedToolsPlaceholder": "Oku, Grep, Bash", + "allowedToolsHint": "Araç adlarının virgülle ayrılmış listesi", + "content": "Skill İçerik", + "runtimeTitle": "Çalışma zamanı", + "runtimeHint": "Paketlenmiş komut dosyalarının Python ve Node çalışma zamanlarını nasıl çözeceğini seçin.", + "pythonRuntime": "Python Çalışma Zamanı", + "nodeRuntime": "Node Çalışma Zamanı", + "envTitle": "Ortam Değişkenleri", + "envWarning": "Yalnızca kullanıcı arayüzünde maskelenmiştir. Değerler skill sepet dosyasında düz metin olarak saklanır.", + "scriptsTitle": "Paketlenmiş Komut Dosyaları", + "scriptsHint": "Skill_run aracılığıyla yalnızca scripts/ altındaki komut dosyaları çalıştırılabilir.", + "noScripts": "Çalıştırılabilir komut dosyası algılanmadı", + "scriptEnabled": "Etkinleştirilmiş", + "scriptDescription": "Açıklamayı Geçersiz Kıl", + "scriptDescriptionPlaceholder": "agent'ye gösterilen isteğe bağlı açıklama", + "runtime": { + "auto": "Otomatik geri dönüş", + "system": "Sistem çalışma zamanı", + "builtin": "Yerleşik çalışma zamanı" + }, + "files": "Klasör İçeriği", + "noFiles": "Dosya yok" + }, + "conflict": { + "title": "Skill Zaten Var", + "description": "\"{name}\" adlı bir skill zaten mevcut. Üzerine yazmak istiyor musunuz?", + "overwrite": "Üzerine yaz" + }, + "sync": { + "title": "Senkronizasyon", + "import": "Diğer Araçlardan İçe Aktar...", + "export": "İhracat", + "importTitle": "Skills öğesini Diğer Araçlardan içe aktarın", + "exportTitle": "Skills öğesini Diğer Araçlara Aktarın", + "importDescription": "skills öğesini Claude Kodundan, İmleçten ve diğer araçlardan içe aktarın", + "exportDescription": "skills dosyasını diğer AI yardımcı araçlarına aktarın", + "step1Title": "Kaynak Aracını Seçin", + "step2Title": "İçe Aktarmak için Skills öğesini seçin", + "step3Title": "İçe Aktarmayı Onayla", + "exportStep1Title": "Dışa Aktarmak için Skills öğesini seçin", + "exportStep2Title": "Hedef Aracı Seçin", + "exportStep3Title": "Dışa Aktarmayı Onayla", + "scanning": "Tarama...", + "noToolsFound": "Yüklü araç algılanmadı", + "skillCount": "{count} skills algılandı", + "notInstalled": "Kurulu değil", + "selectedCount": "{count} seçildi", + "selectAll": "Tümünü Seç", + "deselectAll": "Tümünün Seçimini Kaldır", + "conflict": "Anlaşmazlık", + "conflictDescription": "\"{name}\" adlı bir skill zaten mevcut", + "batchAction": "Toplu İşlem", + "skip": "Atlamak", + "skipAll": "Tümünü Atla", + "overwrite": "Üzerine yaz", + "overwriteAll": "Tümünün Üzerine Yaz", + "rename": "Yeniden isimlendirmek", + "renameAll": "Tümünü Yeniden Adlandır", + "warnings": "Dönüşüm Uyarıları", + "previewing": "Önizleniyor...", + "importing": "İçe aktarılıyor ({current}/{total})...", + "exporting": "Dışa aktarılıyor ({current}/{total})...", + "importButton": "İçe aktarmak", + "exportButton": "İhracat", + "exportWarnings": "İhracat Uyarıları", + "noConflicts": "Çatışma yok", + "readyToExport": "Dışa aktarmaya hazır {count} skills", + "kiroOptions": "Kiro İhracat Seçenekleri", + "kiroInclusion": "Dahil Etme Modu", + "kiroOnDemand": "Talep üzerine", + "kiroOnDemandDesc": "Yalnızca kullanıcı tarafından açıkça talep edildiğinde kullanılır", + "kiroAlways": "Her zaman", + "kiroAlwaysDesc": "Her konuşmaya otomatik olarak dahil edilir", + "kiroConditional": "Koşullu", + "kiroConditionalDesc": "Dosya deseni eşleşmesine göre otomatik olarak dahil edilir", + "kiroFilePatterns": "Dosya Desenleri", + "kiroFilePatternsPlaceholder": "ör. **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Virgülle ayrılmış küresel desenler", + "scanError": "Tarama Başarısız", + "previewError": "Önizleme Başarısız", + "loadToolsError": "Araç listesi yüklenemedi", + "importSuccess": "İçe Aktarma Başarılı", + "importSuccessMessage": "{count} skills başarıyla içe aktarıldı", + "importPartial": "Kısmi İçe Aktarma Başarısı", + "importPartialMessage": "{success} başarılı oldu, {skipped} atlandı, {failed} başarısız oldu", + "importError": "İçe Aktarma Başarısız", + "exportSuccess": "Dışa Aktarma Başarılı", + "exportSuccessMessage": "Başarıyla dışa aktarıldı {count} skills", + "exportPartial": "Kısmi İhracat Başarısı", + "exportPartialMessage": "{success} başarılı oldu, {skipped} atlandı, {failed} başarısız oldu", + "exportError": "Dışa Aktarma Başarısız", + "resultSuccess": "Operasyon Başarılı", + "resultPartial": "Kısmi Başarı", + "imported": "İthal", + "exported": "Dışa aktarıldı", + "skipped": "Atlandı", + "failed": "Arızalı", + "failedItems": "Başarısız Öğeler" + }, + "syncStatus": { + "title": "Harici Araçlar", + "description": "skills öğesini diğer AI kodlama asistanlarından içe aktarın", + "scanning": "Araçlar taranıyor...", + "noToolsFound": "Hiçbir harici araç algılanmadı", + "skillCount": "{count} skills", + "notInstalled": "Kurulu değil", + "notAvailable": "Müsait değil", + "noSkills": "Hayır skills", + "import": "İçe aktarmak", + "syncing": "İçe aktarılıyor..." + }, + "syncPrompt": { + "title": "Yeni Skills Keşfedildi", + "description": "Diğer AI kodlama asistanlarında yeni skills bulduk. Bunları içe aktarmak ister misiniz?", + "dontShowAgain": "Bunu bir daha gösterme", + "skip": "Atlamak", + "importSelected": "Seçileni İçe Aktar" + } + }, + "environments": { + "title": "Ortamlar", + "description": "Oturumlarınız tarafından kullanılan proje dizinlerini inceleyin, bunları hızlı bir şekilde açın veya yeni sohbetler için varsayılan dizin olarak ayarlayın.", + "default": { + "title": "Varsayılan Dizin", + "description": "Manuel olarak farklı bir dizin seçmediğiniz sürece, yeni sohbetler bu dizini önceden seçer.", + "empty": "Varsayılan dizin ayarlanmamıştır." + }, + "history": { + "title": "Tarih", + "description": "Burada yalnızca oturumlar tarafından gerçekten kullanılan dizinler listelenir." + }, + "temp": { + "title": "Sıcaklık Dizinleri", + "description": "Geçici kökler veya uygulama tarafından yönetilen çalışma alanları altındaki dizinler burada gruplanır ve varsayılan olarak gizlenir." + }, + "actions": { + "refresh": "Yenile", + "showMissing": "Eksikleri Göster", + "open": "Açık", + "setDefault": "Varsayılanı Ayarla", + "clearDefault": "Varsayılanı Temizle", + "showTemp": "Sıcaklığı Göster", + "hideTemp": "Sıcaklığı Gizle" + }, + "badges": { + "default": "Varsayılan", + "temp": "Sıcaklık", + "missing": "Eksik", + "notInHistory": "Tarihte Değil" + }, + "meta": { + "sessions": "{count} oturumları", + "lastUsed": "Son kullanılan: {value}", + "never": "Asla" + }, + "empty": { + "regular": "Gösterilecek ortam yok.", + "temp": "Henüz geçici ortam yok." + }, + "errors": { + "openTitle": "Dizin Açılamadı" + } + }, + "remote": { + "title": "Uzak", + "description": "Telegram, Feishu / Lark, QQBot, Discord ve WeChat iLink uzaktan kumandasını tek bir yerden yapılandırın.", + "telegram": { + "title": "Telegram", + "description": "Doğrudan mesajlar, gruplar ve konu-konu uzaktan kontrolü için bir Telegram botu bağlayın.", + "botToken": "Bot token", + "botTokenPlaceholder": "Telegram bot token", + "botTokenDescription": "Telegram uzaktan kumanda için kullanılan Telegram bot token'yi girin." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Doğrudan mesajlar, grup sohbetleri ve konu başlıkları için bir Feishu botu bağlayın.", + "brand": "Marka", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "Uygulama kimliği", + "appIdPlaceholder": "Feishu uygulama kimliği", + "appSecret": "Uygulama Sırrı", + "appSecretPlaceholder": "Feishu uygulama sırrı", + "verificationToken": "Doğrulama token", + "verificationTokenPlaceholder": "Feishu doğrulama token", + "encryptKey": "Şifreleme Anahtarı (isteğe bağlı)", + "encryptKeyPlaceholder": "Etkinlik şifreleme etkinleştirilmediği sürece boş bırakın", + "botUser": "Bot kullanıcısı: {name} ({openId})", + "bindings": "Bağlantılar: {count}, eşleştirilmiş kullanıcılar: {pairedUserCount}", + "pairedUserOpenIds": "Eşlenen Kullanıcı Açık Kimlikleri", + "pairedUserOpenIdsPlaceholder": "örneğin ou_xxx, ou_yyy", + "accessRulesDescription": "Önce doğrudan mesajla eşleştirin. Gruplarda, yalnızca bottan {'@'} bahseden eşleştirilmiş kullanıcılar bir oturum başlatabilir.", + "accessRule1": "Doğrudan mesajla /pair [kod] ile eşleştirin.", + "accessRule2": "Gruplarda ve konularda, bot yalnızca eşleştirilmiş bir kullanıcı {'@'} bundan bahsettiğinde tepki verir." + }, + "discord": { + "title": "Discord", + "description": "DM'ler, kanaldan bahsetmeler ve eğik çizgi komutlu uzaktan kumanda için bir Discord bot bağlayın.", + "botToken": "Bot token", + "botTokenPlaceholder": "Discord bot token", + "remoteControlDescription": "Discord uzaktan kumanda kendi token botunu, ağ geçidini ve REST akışını kullanır.", + "accessRule1": "Geçerli Discord uç noktasını yetkilendirmek için DM'ye veya hedef kanala /pair [kod] gönderin.", + "accessRule2": "Kanal mesajları sohbete yalnızca bottan bahsedildiğinde girer, bu da normal sohbetin sürdürülmesini engeller." + }, + "sections": { + "credentials": "Kimlik bilgileri", + "remoteControl": "Uzaktan kumanda", + "notifications": "Bildirimler", + "accessRules": "Erişim Kuralları" + }, + "remoteControl": { + "description": "Her uzak uç noktayı bir oturuma bağlayın ve oturumu komutlar arasında kullanılabilir durumda tutun.", + "allowedUserIds": "İzin Verilen Kullanıcı Kimlikleri", + "allowedUserIdsPlaceholder": "örneğin 123456789, 987654321", + "defaultAgent": "Varsayılan Agent", + "defaultAgentPlaceholder": "Bir agent seçin", + "defaultWorkdir": "Varsayılan Dizin", + "defaultWorkdirPlaceholder": "Varsayılan bir dizin seçin", + "defaultWorkdirHelper": "Uzak oturumlar için çalışma alanı dizini. Varsayılan agent ACP olduğunda gereklidir.", + "openPairDialog": "Çift", + "manageBindings": "Bağlantıları Yönet", + "pairCode": "Çift Kodu", + "noPairCode": "Aktif çift kodu yok", + "pairCodeExpiresAt": "{time} tarihinde sona eriyor", + "pairDialogTitle": "{channel} Eşleştirme", + "pairDialogDescription": "Bir eşleştirme kodu oluşturun ve {channel} bot sohbetinizden eşleştirmeyi tamamlayın.", + "pairDialogInstructionTelegram": "Bu komutu Telegram botuna gönderin:", + "pairDialogInstructionFeishu": "Bu komutu doğrudan mesajla Feishu botuna gönderin:", + "pairDialogInstructionDiscord": "Bu komutu bir DM veya hedef kanaldaki Discord botuna gönderin:", + "bindingsDialogTitle": "{channel} Bağlamalar", + "bindingsDialogDescription": "Uzak uç nokta bağlamalarını tek tek kaldırın.", + "bindingsEmpty": "Henüz bağlama yok.", + "pairingSuccessTitle": "Eşleştirme tamamlandı", + "pairingSuccessDescription": "Eşleştirilmiş ana liste yenilendi.", + "pairDialogInstructionQQBot": "Bu komutu QQ bot sohbetine veya yetkili QQ grubuna gönderin:", + "authorizedPrincipalsTitle": "Yetkili Müdürler", + "authorizedPrincipalsDescription": "Bu {channel} hesapları oturumları eşleştirme ve kontrol etme yetkisine sahiptir.", + "authorizedPrincipalsEmpty": "Henüz yetkili müdür yok.", + "sessionBindingsTitle": "Oturum Bağlamaları", + "sessionBindingsDescription": "Aşağıdaki her uzak uç nokta şu anda bir DeepChat oturumuna bağlıdır." + }, + "hooks": { + "title": "Telegram Kancalar", + "description": "Kanca bildirimleri için aynı Telegram botunu yeniden kullanın.", + "chatId": "Sohbet Kimliği", + "chatIdPlaceholder": "örneğin 123456789", + "threadId": "Konu kimliği (isteğe bağlı)", + "threadIdPlaceholder": "İsteğe bağlı iş parçacığı kimliği" + }, + "status": { + "title": "Çalışma Zamanı Durumu", + "botUser": "Bot kullanıcısı: {username} ({id})", + "bindings": "Bağlamalar: {count}, yoklama farkı: {pollOffset}", + "states": { + "disabled": "Engelli", + "stopped": "Durduruldu", + "starting": "Başlangıç", + "running": "Koşma", + "backoff": "Başarısızlıktan sonra yeniden deneme", + "error": "Hata" + }, + "bindingOnly": "Bağlantılar: {count}, eşleştirilmiş sorumlular: {paired}" + }, + "overview": { + "telegram": "{bindingCount} bağlamaları, {pairedCount} eşleştirilmiş kullanıcılar", + "feishu": "{bindingCount} bağlamaları, {pairedCount} eşleştirilmiş kullanıcılar", + "hooksOn": "Açık", + "hooksOff": "kapalı", + "qqbot": "{bindingCount} bağlamaları, {pairedCount} eşleştirilmiş kullanıcılar", + "discord": "{bindingCount} bağlamaları, {pairedCount} eşleştirilmiş kanallar", + "weixinIlink": "{bindingCount} bağlamaları, {accountCount} hesapları, {connectedCount} bağlı" + }, + "bindingKinds": { + "dm": "DM", + "group": "Grup", + "topic": "Başlık" + }, + "qqbot": { + "title": "QQBot", + "description": "C2C sohbetleri ve yetkili grup bahsi tabanlı bot kontrolü için resmi bir QQ Botu bağlayın.", + "appId": "Uygulama kimliği", + "appIdPlaceholder": "QQ Bot Uygulama Kimliği", + "clientSecret": "Müşteri Sırrı", + "clientSecretPlaceholder": "QQ Bot istemci sırrı", + "remoteControlDescription": "QQ resmi açık kimlik tanımlayıcıları C2C ve gruplar arasında farklılık gösterir; bu nedenle doğrudan mesajlar kullanıcıları eşleştirirken, gruplar /pair. ile ayrı olarak yetkilendirilir.", + "pairedUserIds": "Eşleştirilmiş Kullanıcı OpenID'leri", + "pairedUserIdsPlaceholder": "örneğin user_openid_xxx, user_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Resmi bir WeChat iLink Bot'u QR oturum açma yoluyla bağlayın, ardından uzaktan kontrol oturumlarını yerleşik adaptör aracılığıyla yönlendirin.", + "loginDescription": "Resmi WeChat oturum açma penceresini açmak için aşağıdaki düğmeye tıklayın. Burada iLink Bot yetkilendirmesini tamamladığınızda bağlı hesap buraya otomatik olarak eklenecektir.", + "ownerOnlyNotice": "Bu ilk sürüm yalnızca QR-oturum açma sahibi hesabının DeepChat'yi kontrol etmesine izin verir.", + "connectButton": "Giriş Penceresini Aç", + "refreshQrCode": "Giriş Penceresini Yeniden Aç", + "loginDialogTitle": "WeChat iLink'e bağlanın", + "loginDialogDescription": "Resmi WeChat oturum açma sayfası ayrı bir pencerede açılır. Orada QR yetkilendirmesini tamamlayın ve bağlantı bitene kadar bu iletişim kutusunu açık tutun.", + "loginFailed": "WeChat iLink oturum açma işlemi başarısız oldu.", + "loginSuccessTitle": "WeChat iLink bağlandı", + "loginSuccessDescription": "{accountId} hesabı hazır.", + "accountsTitle": "Hesaplar", + "accountsDescription": "Bağlı her iLink Bot hesabı bağımsız olarak çalışır ve kendi bağlamalarını ve çalışma zamanı durumunu korur.", + "noAccounts": "Henüz bağlı WeChat iLink hesabı yok.", + "ownerUserId": "Sahip kullanıcı kimliği: {ownerUserId}", + "baseUrl": "Servis adresi: {baseUrl}", + "accountBindings": "Bağlamalar: {count}", + "remoteControlDescription": "WeChat iLink hesapları tarafından paylaşılan varsayılan agent ayarını yapın, ardından gelen oturumlar tarafından oluşturulan bağlamaları yönetin.", + "removeAccount": "Hesabı Kaldır", + "restartAccount": "Hesabı Yeniden Başlat", + "statusSummary": "{accounts} hesapları, {connected} bağlı, {bindings} bağlamaları", + "qrcodeAlt": "WeChat iLink QR kodu", + "loginWindowOpened": "Resmi WeChat oturum açma penceresi açıldı. Orada QR yetkilendirmesini tamamlayın.", + "loginSessionExpired": "Bu oturum açma oturumunun süresi doldu. Oturum açma penceresini yeniden açın ve tekrar deneyin.", + "loginResponseIncomplete": "WeChat iLink oturum açma yanıtı eksikti. Lütfen tekrar deneyin.", + "loginTimedOut": "WeChat iLink yetkilendirmesi beklenirken zaman aşımına uğradı. Oturum açma penceresini yeniden açın ve tekrar deneyin.", + "loginConnected": "WeChat iLink hesabı bağlandı." + } + }, + "plugins": { + "title": "Eklentiler", + "officialOnly": "Bu DeepChat sürümünde bulunan yerleşik resmi eklentileri yönetin.", + "refresh": "Yenile", + "empty": "Resmi eklenti yok", + "emptyTitle": "Yerleşik eklenti yok", + "emptyDescription": "Bu platformun bu DeepChat sürümünde yerleşik resmi eklentileri yoktur.", + "loadFailed": "Eklentiler yüklenemedi", + "actionFailed": "Eklenti işlemi başarısız oldu", + "install": "Düzenlemek", + "installFromFile": ".dcplugin'i seçin", + "openRelease": "GitHub Yayın", + "enable": "Olanak vermek", + "disable": "Devre dışı bırakmak", + "openSettings": "Ayarlar", + "runtime": "Çalışma zamanı", + "version": "Sürüm", + "command": "Emretmek", + "status": { + "enabled": "Etkinleştirilmiş", + "disabled": "Engelli", + "available": "Mevcut" + }, + "runtimeStates": { + "missing": "Eksik", + "installed": "Yüklendi", + "running": "Koşma", + "error": "Hata" + } + }, + "controlCenter": { + "groups": { + "overview": "Genel Bakış", + "setup": "Kurmak", + "models": "Agent Ayarlar", + "tools": "Yetenek Uzantıları", + "knowledge": "Bilgi", + "system": "Sistem" + }, + "overview": { + "title": "Ayarlara Genel Bakış", + "description": "Sağlayıcıyı, MCP, DeepChat Agent, verileri ve kullanım durumunu tek bir yerden inceleyin.", + "searchPlaceholder": "Arama ayarları, sağlayıcılar, modeller, agents, MCP...", + "providers": "Sağlayıcılar", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agent", + "data": "Son yedekleme zamanı", + "enabledCount": "{count} etkin", + "runningCount": "{count} çalışıyor", + "enabledAgentCount": "{count} agents etkin", + "providersDescription": "Sağlayıcı bağlantı durumu", + "deepchatAgentsDescription": "Agent yapılandırma giriş noktası", + "mcpOn": "MCP etkin", + "mcpOff": "MCP devre dışı", + "syncOn": "Senkronizasyon etkinleştirildi", + "syncOff": "Senkronizasyon devre dışı", + "backupNever": "Yedekleme: asla" + }, + "quickStart": { + "title": "Hızlı başlangıç", + "addApiKey": "API Key ekle", + "addApiKeyDesc": "Sağlayıcı erişimini yapılandırma", + "enableModel": "Modeli Etkinleştir", + "enableModelDesc": "Kullanılabilir bir modeli açın", + "startMcp": "MCP Sunucusunu Başlat", + "startMcpDesc": "Araç sunucularını başlat", + "backupNow": "Şimdi Yedekle", + "backupNowDesc": "Veri yedeklemesi oluştur" + }, + "needsAttention": { + "title": "Dikkat edilmesi gerekiyor", + "empty": "Hiçbir şeyin ilgiye ihtiyacı yok", + "noModels": "Hiçbir model etkin değil", + "privacyOff": "Gizlilik Modu kapalı", + "backupNever": "Yedekleme hiç çalışmadı" + }, + "activity": { + "title": "Son ayar değişiklikleri", + "description": "En yeni 2000 kaydı korurken en yeni 200 ayar değişikliğini gösterir.", + "when": "Zaman", + "category": "Kategori", + "change": "Değiştirmek", + "empty": "Yakın zamanda değişiklik yok", + "emptyDescription": "Başarılı ayar değişiklikleri burada görünecektir.", + "settingUpdated": "Güncellenen ayar: {key}", + "providerUpdated": "Güncellenen sağlayıcı: {name}", + "providerCreated": "Sağlayıcı eklendi: {name}", + "providerRemoved": "Sağlayıcı kaldırıldı: {name}", + "providerModelsRefreshed": "Yenilenen sağlayıcı modelleri: {name}", + "modelStatusChanged": "Güncellenen model durumu: {model}", + "modelBatchUpdated": "{count} modelleri güncellendi", + "mcpServerCreated": "MCP sunucusu eklendi: {name}", + "mcpServerUpdated": "MCP sunucusu güncellendi: {name}", + "mcpServerRemoved": "MCP sunucusu kaldırıldı: {name}", + "mcpServerStatusChanged": "MCP sunucusu değiştirildi: {name}", + "mcpGlobalStatusChanged": "MCP genel durumu değiştirildi: {status}", + "mcpServerStarted": "MCP sunucusu başlatıldı: {name}", + "mcpServerStopped": "MCP sunucusu durduruldu: {name}", + "mcpRegistryRefreshed": "MCP NPM kaydı yenilendi", + "backupCreated": "Yedekleme oluşturuldu: {name}", + "backupImported": "İçe aktarılan yedekleme: {name}", + "databaseRepaired": "Veritabanı onarımı tamamlandı: {status}" + } + } +} diff --git a/src/renderer/src/i18n/tr-TR/sync.json b/src/renderer/src/i18n/tr-TR/sync.json new file mode 100644 index 000000000..82ec1867e --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "{count} konuşma(lar)ı başarıyla içe aktarıldı." + }, + "error": { + "notEnabled": "Senkronizasyon etkin değil", + "folderNotExists": "Senkronizasyon klasörü mevcut değil", + "noValidBackup": "Senkronizasyon klasöründe geçerli bir yedekleme dosyası bulunamadı.", + "unsupportedBackupVersion": "Bu yedekleme, DeepChat'nin daha yeni bir sürümü tarafından oluşturuldu ve içe aktarılamaz.", + "dbNotExists": "Veritabanı dosyası mevcut değil", + "configNotExists": "Yapılandırma dosyası mevcut değil", + "tempDbFailed": "Geçici veritabanı yedekleme dosyası oluşturulamadı", + "tempConfigFailed": "Geçici yapılandırma yedekleme dosyası oluşturulamadı", + "importFailed": "İçe aktarma başarısız oldu, orijinal veriler geri yüklendi", + "importProcess": "İçe aktarma işlemi sırasında bir hata oluştu", + "unknown": "Bilinmeyen hata", + "encryptedBackupPasswordMissing": "Bu yedekleme şifrelenmiştir ancak yerel veritabanı anahtarı mevcut değildir. Önce şifrelenmiş veritabanının kilidini açın, ardından tekrar içe aktarın.", + "overwriteEncryptionMismatch": "Üzerine yazma içe aktarma, yedek ve geçerli veritabanının aynı şifreleme durumunu kullanmasını gerektirir." + } +} diff --git a/src/renderer/src/i18n/tr-TR/thread.json b/src/renderer/src/i18n/tr-TR/thread.json new file mode 100644 index 000000000..7e4d38b75 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Yeniden isimlendirmek", + "delete": "Silmek", + "cleanMessages": "Mesajları Temizle", + "pin": "Sabitle", + "unpin": "Sabitlemeyi kaldır", + "export": "İhracat", + "exportText": "Düz Metin", + "exportNowledgeMem": "Nowledge-mem" + }, + "export": { + "failed": "Dışa aktarma başarısız oldu", + "failedDesc": "Dışa aktarma işlemi sırasında bir hata oluştu, lütfen tekrar deneyin", + "nowledgeMemSubmitFailed": "Nowledge-mem Gönderimi Başarısız", + "nowledgeMemSubmitFailedDesc": "Konuşma nowledge-mem'e gönderilemedi", + "nowledgeMemSubmitPrompt": "Bu konuşmayı nowledge-mem'e göndermek ister misiniz?", + "nowledgeMemSubmitSuccess": "Nowledge-mem Gönderimi Başarılı", + "nowledgeMemSubmitSuccessDesc": "Görüşme başarıyla nowledge-mem'e gönderildi", + "nowledgeMemSuccessDesc": "Konuşma başarıyla noledge-mem formatına aktarıldı", + "success": "Dışa aktarma başarılı", + "nowledgeMemSuccess": "Nowledge-mem Dışa Aktarma Başarılı", + "successDesc": "Görüşme başarıyla dışa aktarıldı" + }, + "message": { + "toolbar": { + "save": "Kaydetmek" + } + }, + "toolbar": { + "save": "Kaydetmek", + "cancel": "İptal etmek", + "previousVariant": "Önceki Varyant", + "nextVariant": "Sonraki Varyant", + "copy": "Markdown olarak kopyala", + "copyImage": "Resim Olarak Kopyala", + "copyImageWithLongPress": "Görüntü Olarak Kopyala (üstten yakalamak için uzun basın)", + "copyFromTopSuccess": "Tam görüşme resmi kopyalandı", + "capturing": "Yakalanıyor...", + "retry": "Yenile", + "fork": "Yeni Sohbete Dallanma", + "edit": "Mesajı düzenle", + "delete": "Mesajı sil", + "trace": "İzleme İsteği" + } +} diff --git a/src/renderer/src/i18n/tr-TR/toolCall.json b/src/renderer/src/i18n/tr-TR/toolCall.json new file mode 100644 index 000000000..cd183453d --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Arıyorum...", + "response": "Koşma...", + "end": "Tamamlamak", + "error": "Hata", + "title": "Araç Çağrısı", + "clickToView": "Ayrıntıları görüntülemek için tıklayın", + "functionName": "İşlev Adı", + "permission": "İzin isteniyor...", + "params": "Fonksiyon Parametreleri", + "responseData": "Cevap", + "imagePreview": "Resim Önizleme", + "imagePreviewCount": "Resim önizlemesi yok | {count} resim önizlemesi | {count} resim önizlemesi", + "terminalOutput": "Terminal Çıkışı", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "{count} değiştirmeleri tamamlandı", + "fileOperation": "Dosya İşlemi", + "fileRead": "Dosyayı Oku", + "fileWrite": "Dosya Yaz", + "filePath": "Dosya Yolu", + "success": "Başarı", + "failed": "Arızalı" +} diff --git a/src/renderer/src/i18n/tr-TR/traceDialog.json b/src/renderer/src/i18n/tr-TR/traceDialog.json new file mode 100644 index 000000000..707795a95 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Önizleme İste", + "provider": "sağlayıcı", + "model": "Modeli", + "endpoint": "API Uç nokta", + "headers": "Başlıklar", + "body": "Talep Gövdesi", + "copyJson": "JSON kopyala", + "copySuccess": "Panoya kopyalandı", + "close": "Kapalı", + "loading": "Yükleniyor...", + "error": "Yüklenemedi", + "errorDesc": "İstek önizlemesi getirilemiyor, lütfen tekrar deneyin", + "notImplemented": "Desteklenmiyor", + "notImplementedDesc": "Bu sağlayıcı henüz istek önizlemesini uygulamadı", + "mayNotMatch": "Not: Bu önizleme mevcut görüşme ayarlarından yeniden oluşturulmuştur ve gerçek istek parametreleriyle tam olarak eşleşmeyebilir" +} diff --git a/src/renderer/src/i18n/tr-TR/update.json b/src/renderer/src/i18n/tr-TR/update.json new file mode 100644 index 000000000..5b3d995c3 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "Yeni Sürüm Bulundu", + "version": "Sürüm", + "releaseDate": "Yayın tarihi", + "releaseNotes": "Sürüm Notları", + "later": "Daha sonra", + "githubDownload": "GitHub İndir", + "officialDownload": "Resmi İndirme", + "checkUpdate": "Güncellemeleri Kontrol Et", + "downloading": "İndiriliyor", + "installNow": "Şimdi Yükle", + "installUpdate": "Güncellemeyi Yükle", + "versionAvailable": "{version} mevcut", + "autoUpdateFailed": "Otomatik güncelleme başarısız oldu. Lütfen aşağıdaki manuel indirme bağlantılarını kullanın.", + "topbarButton": "Güncelleme", + "autoUpdate": "Otomatik Güncelleme", + "restarting": "Yeniden başlatılıyor", + "alreadyUpToDate": "Zaten Güncel", + "alreadyUpToDateDesc": "DeepChat cihazınız zaten en son sürüme güncellenmiştir, herhangi bir güncelleme gerekmez." +} diff --git a/src/renderer/src/i18n/tr-TR/welcome.json b/src/renderer/src/i18n/tr-TR/welcome.json new file mode 100644 index 000000000..1e59a8f03 --- /dev/null +++ b/src/renderer/src/i18n/tr-TR/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "Hoş geldin", + "description": "DeepChat kurulumuna başlayalım" + }, + "provider": { + "title": "sağlayıcı", + "description": "Tercih ettiğiniz model sağlayıcınızı seçin" + }, + "configuration": { + "title": "Yapılandırma", + "description": "Kullanmak istediğiniz modelleri yapılandırın" + }, + "complete": { + "title": "Tamamlamak", + "description": "Her şey hazır ve yola çıkmaya hazır!" + } + }, + "title": "DeepChat'a hoş geldiniz", + "description": "Kurulum boyunca size yol gösterelim.", + "provider": { + "select": "Bir Sağlayıcı Seçin", + "apiUrl": "API URL", + "apiKey": "API Key", + "verifyLink": "Bağlantıyı Doğrula" + }, + "complete": { + "title": "Hepsi Bitti!", + "description": "Artık hazırsınız. Hadi başlayalım!" + }, + "buttons": { + "getStarted": "Başlayın", + "next": "Sonraki", + "back": "Geri" + }, + "page": { + "title": "DeepChat Agent'a hoş geldiniz", + "description": "Başlamak için bir model sağlayıcıya bağlanın", + "guide": { + "title": "Kurulum kılavuzu", + "description": "Geçerli adım: {step}", + "or": "veya", + "coreProgress": "Çekirdek kurulum ilerlemesi", + "optional": "İsteğe bağlı sonraki adımlar", + "actions": { + "continueSetup": "Kuruluma devam et", + "goToChat": "Sohbete git" + }, + "steps": { + "provider": "sağlayıcı", + "first-chat": "İlk sohbet", + "switch-model": "Modeli değiştir", + "mcp": "MCP", + "skills": "Skills", + "plugins": "Eklentiler" + } + }, + "browseProviders": "Tüm sağlayıcılara göz atın...", + "connectAgent": "veya bir agent bağlayın", + "acpTitle": "Bir ACP agent kurun", + "acpDescription": "Claude Kod, Kodeks, Kimi veya kendinize ait", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "DeepSeek", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "OpenRouter" + }, + "importProviders": "Diğer agents'dan içe aktar" + }, + "agentPage": { + "title": "Oluşturmaya Başlamak için bir Agent seçin", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "DeepChat Agent'yi yönet" + } +} diff --git a/src/renderer/src/i18n/vi-VN/about.json b/src/renderer/src/i18n/vi-VN/about.json new file mode 100644 index 000000000..ce05deabb --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/about.json @@ -0,0 +1,23 @@ +{ + "title": "DeepChat", + "description": "DeepChat là ứng dụng khách AI đa nền tảng, chuyên giúp nhiều người có thể tiếp cận AI hơn.", + "website": "Ghé thăm trang web của chúng tôi", + "deviceInfo": { + "title": "Thông tin thiết bị", + "platform": "Nền tảng", + "arch": "Kiến trúc", + "cpuModel": "Mẫu CPU", + "totalMemory": "Tổng bộ nhớ", + "osVersion": "Phiên bản hệ thống" + }, + "disclaimerButton": "Tuyên bố từ chối trách nhiệm", + "feedbackButton": "Phản hồi", + "disclaimerTitle": "Điều khoản sử dụng", + "checkUpdateButton": "Kiểm tra cập nhật", + "mockUpdateButton": "Cập nhật đã tải xuống mô phỏng", + "clearMockUpdateButton": "Xóa bản cập nhật giả", + "mockOnboardingButton": "Hướng dẫn mô phỏng lần chạy đầu tiên", + "updateChannel": "Cập nhật kênh", + "stableChannel": "Ổn định", + "betaChannel": "bản thử nghiệm" +} diff --git a/src/renderer/src/i18n/vi-VN/artifacts.json b/src/renderer/src/i18n/vi-VN/artifacts.json new file mode 100644 index 000000000..d3f84e345 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/artifacts.json @@ -0,0 +1,52 @@ +{ + "clickToOpen": "Bấm để mở", + "codeSnippet": "Đoạn mã", + "function": "chức năng", + "class": "lớp học", + "reactComponent": "Thành phần phản ứng", + "moduleImport": "Nhập mô-đun", + "variableDefinition": "Định nghĩa biến {name}", + "markdownDocument": "Tài liệu đánh dấu", + "htmlDocument": "Tài liệu HTML", + "svgImage": "Hình ảnh SVG", + "flowchart": "Lưu đồ", + "sequenceDiagram": "Sơ đồ trình tự", + "classDiagram": "Sơ đồ lớp", + "stateDiagram": "Sơ đồ trạng thái", + "erDiagram": "Sơ đồ ER", + "ganttChart": "Biểu đồ Gantt", + "pieChart": "Biểu đồ hình tròn", + "mermaidDiagram": "Sơ đồ nàng tiên cá", + "flowchartOf": "Sơ đồ của {name}", + "sequenceDiagramBetween": "Sơ đồ tuần tự giữa {participants}", + "classDiagramOf": "Sơ đồ lớp của {name}", + "stateDiagramOf": "Sơ đồ trạng thái của {name}", + "erDiagramOf": "Sơ đồ ER của {name}", + "pieChartOf": "Biểu đồ hình tròn của {name}", + "unknownDocument": "Tài liệu không xác định", + "preview": "Xem trước", + "code": "Mã", + "export": "Xuất khẩu", + "htmlPreviewTitle": "Xem trước HTML", + "svgPreviewTitle": "Xem trước SVG", + "copy": "Sao chép", + "copySuccess": "Đã sao chép", + "copySuccessDesc": "Đã sao chép nội dung vào clipboard", + "copyFailed": "Sao chép không thành công", + "copyFailedDesc": "Không sao chép được nội dung vào bảng nhớ tạm", + "copyAsImage": "Sao chép dưới dạng hình ảnh", + "copyImageSuccessDesc": "Đã sao chép hình ảnh vào bảng nhớ tạm", + "copyImageFailedDesc": "Không thể sao chép hình ảnh vào clipboard.", + "desktop": "Máy tính để bàn", + "tablet": "Máy tính bảng", + "mobile": "Điện thoại di động", + "responsive": "đáp ứng", + "width": "Chiều rộng", + "height": "Chiều cao", + "sanitizingSvg": "Đang dọn dẹp nội dung SVG...", + "svgSanitizationFailed": "Nội dung SVG không xác thực được bảo mật", + "noSvgContent": "Không có nội dung SVG", + "mermaid": { + "renderError": "Kết xuất không thành công: {message}" + } +} diff --git a/src/renderer/src/i18n/vi-VN/chat.json b/src/renderer/src/i18n/vi-VN/chat.json new file mode 100644 index 000000000..f045d7318 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/chat.json @@ -0,0 +1,381 @@ +{ + "input": { + "placeholder": "Hỏi DeepChat bất cứ điều gì, {'@'} đề cập đến các tập tin, / cho các lệnh", + "fileArea": "Vùng tệp", + "inputArea": "Khu vực đầu vào", + "functionSwitch": "Chuyển đổi chức năng", + "attach": "Đính kèm", + "voiceInput": "Ghi âm cục bộ", + "voiceInputStop": "Dừng ghi cục bộ", + "voiceRecognitionUnsupportedTitle": "Ghi âm cục bộ không có sẵn ở đây", + "voiceRecognitionUnsupportedDescription": "Sử dụng tính năng này trong môi trường trình duyệt hoặc máy tính để bàn có hỗ trợ ghi âm micrô.", + "voiceRecognitionPermissionDeniedTitle": "Truy cập micrô không khả dụng", + "voiceRecognitionPermissionDeniedDescription": "Cho phép DeepChat sử dụng micrô và thử lại.", + "voiceRecognitionErrorTitle": "Phiên âm âm thanh không thành công", + "voiceRecognitionErrorDescription": "Không thể hoàn tất việc chép âm thanh. Vui lòng thử lại sau.", + "send": "Gửi", + "steer": "Chỉ đạo", + "queue": "Hàng đợi", + "stop": "Dừng lại", + "fileSelect": "Chọn tệp", + "pasteFiles": "Dán tập tin từ clipboard", + "dropFiles": "Thả tập tin vào đây", + "promptFilesAdded": "Đã thêm tệp Prompt", + "promptFilesAddedDesc": "Đã thêm thành công tệp {count}", + "promptFilesError": "Lỗi xử lý tệp", + "promptFilesErrorDesc": "Không thể xử lý tệp {count}", + "historyPlaceholder": "(Nhấn Tab để tự động hoàn thành)", + "rateLimitQueue": "Hàng đợi {count}", + "rateLimitWait": "Đợi {seconds}", + "rateLimitQueueTooltip": "Yêu cầu {count} trong hàng đợi, khoảng thời gian {interval}", + "rateLimitReadyTooltip": "Sẵn sàng gửi, khoảng thời gian {interval}", + "rateLimitWaitingTooltip": "Đợi thêm {seconds}, khoảng {interval}", + "acpWorkdir": "Công việc ACP", + "acpWorkdirTooltip": "Đặt thư mục làm việc ACP", + "acpWorkdirSelect": "Chọn thư mục để sử dụng làm thư mục công việc ACP", + "acpWorkdirCurrent": "Công việc hiện tại: {path}", + "acpMode": "Chế độ", + "acpModeTooltip": "Chế độ hiện tại: {mode}", + "agentWorkspaceTooltip": "Đặt thư mục không gian làm việc Agent", + "agentWorkspaceSelect": "Chọn thư mục để sử dụng làm không gian làm việc", + "agentWorkspaceCurrent": "Không gian làm việc hiện tại: {path}", + "workspaceUnavailableTooltip": "Thư mục không tồn tại hoặc không thể truy cập: {path}", + "mcp": { + "badge": "MCP {count}", + "title": "Đã bật MCP", + "empty": "Không có dịch vụ nào được kích hoạt", + "openSettings": "Mở cài đặt MCP" + }, + "tools": { + "badge": "Công cụ", + "title": "Công cụ", + "mcpSection": "MCP", + "pluginSection": "Plugin", + "builtinSection": "Công cụ tích hợp", + "loading": "Đang tải công cụ...", + "builtinEmpty": "Không có công cụ tích hợp sẵn", + "groups": { + "agentFilesystem": "Hệ thống tập tin Agent", + "agentCore": "Lõi Agent", + "agentImageGeneration": "Tạo hình ảnh", + "agentSkills": "Agent Skills", + "deepchatSettings": "Cài đặt DeepChat", + "yobrowser": "Trình duyệt Yo" + } + }, + "fileUploadFailed": "Tệp đính kèm không thành công", + "fileUploadFailedDesc": "Không thể xử lý tệp {count}: {names}", + "fileUploadFailedMore": " và {count} khác", + "unnamedFile": "tập tin không tên", + "audioInputUnsupportedTitle": "Model hiện tại không hỗ trợ tệp đính kèm âm thanh", + "audioInputUnsupportedDescription": "Model {model} không hỗ trợ đầu vào âm thanh. Đã bỏ qua (các) tệp đính kèm âm thanh {count}." + }, + "pendingInput": { + "steer": "Chỉ đạo", + "queueCount": "Đang chờ gửi {count}/{max}", + "resumeQueue": "Tiếp tục gửi", + "toSteer": "Chỉ đạo", + "locked": "Đã khóa", + "reorder": "Sắp xếp lại", + "files": "Các tập tin {count}", + "attachmentsOnly": "Tệp đính kèm {count}", + "empty": "Tin nhắn trống", + "limitReached": "Làn chờ đã đầy (tối đa {max})." + }, + "features": { + "webSearch": "Tìm kiếm trên web", + "thoughtForSeconds": "Suy nghĩ cho {seconds}", + "thoughtForSecondsLoading": "Đang suy nghĩ về {seconds}...", + "artifactThinking": "Tư duy tạo tác", + "modeChanged": "Chế độ đã thay đổi thành: {mode}" + }, + "search": { + "results": "Đã tìm thấy trang web {0}", + "searching": "Đang tìm kiếm...", + "title": "Kết quả tìm kiếm", + "description": "Đã tìm thấy kết quả liên quan đến {0}", + "optimizing": "Tối ưu hóa truy vấn tìm kiếm...", + "reading": "Tìm kiếm và đọc các trang web...", + "error": "Tìm kiếm không thành công" + }, + "messages": { + "thinking": "Đang suy nghĩ...", + "rateLimitWaiting": "Đã đạt đến giới hạn tốc độ, đang chờ xếp hàng...", + "rateLimitCompactLoading": "Tỷ lệ giới hạn cho {seconds}...", + "rateLimitTitle": "Giới hạn tỷ lệ đang hoạt động", + "rateLimitQueue": "Vị trí xếp hàng", + "rateLimitEstimated": "Thời gian chờ ước tính", + "rateLimitQuickSettings": "Điều chỉnh giới hạn", + "rateLimitSwitchProvider": "Chuyển đổi nhà cung cấp", + "rateLimitImmediately": "bây giờ", + "rateLimitSeconds": "s", + "rateLimitMinutes": "tôi" + }, + "compaction": { + "compacting": "Nén bối cảnh...", + "compacted": "Bối cảnh đã được nén", + "commandDescription": "Bối cảnh hội thoại nhỏ gọn", + "noopTitle": "Không có ngữ cảnh để thu gọn", + "noopDescription": "Chưa có lịch sử hội thoại mới nào được thu gọn.", + "failedTitle": "Nén không thành công" + }, + "rateLimit": { + "queueTooltip": "Yêu cầu {count} trong hàng đợi, khoảng thời gian {interval}", + "readyTooltip": "Sẵn sàng gửi, khoảng thời gian {interval}", + "waitingTooltip": "Đợi thêm {seconds}, khoảng {interval}" + }, + "notify": { + "generationComplete": "Thế hệ đã hoàn tất", + "generationError": "Thế hệ không thành công" + }, + "toolCall": { + "title": "Cuộc gọi công cụ", + "calling": "Cuộc gọi công cụ đang diễn ra", + "response": "Phản hồi của công cụ", + "end": "Cuộc gọi công cụ đã kết thúc", + "error": "Lỗi gọi công cụ", + "clickToView": "Nhấn vào đây để xem chi tiết", + "functionName": "chức năng", + "params": "Thông số", + "responseData": "Dữ liệu phản hồi", + "subagents": { + "summary": "{mode} · {count} subagent", + "unnamedTask": "Nhiệm vụ không tên", + "mode": { + "parallel": "Song song", + "chain": "chuỗi" + }, + "status": { + "queued": "Đã xếp hàng", + "running": "Đang chạy", + "completed": "Đã hoàn thành", + "error": "Lỗi", + "cancelled": "Đã hủy", + "waiting_permission": "Đang chờ sự cho phép", + "waiting_question": "Đang chờ đầu vào" + } + } + }, + "mode": { + "current": "Chế độ hiện tại: {mode}", + "agent": "Agent", + "acpAgent": "ACP Agent" + }, + "topbar": { + "backToParent": "Quay lại trang gốc", + "share": "Chia sẻ", + "more": "Thêm" + }, + "subagents": { + "label": "Chất phụ" + }, + "advancedSettings": { + "button": "Nâng cao", + "title": "Cài đặt nâng cao", + "closeHint": "Esc để đóng", + "systemPrompt": "System Prompt", + "systemPromptPlaceholder": "Chọn một cài đặt trước", + "temperature": "Nhiệt độ", + "temperatureFixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 sửa nhiệt độ thành {enabled} khi tính năng suy nghĩ được bật và {disabled} khi tính năng này bị tắt.", + "contextLength": "Độ dài ngữ cảnh", + "maxTokens": "Tối đa Tokens", + "thinkingBudget": "Suy nghĩ về ngân sách", + "verbosity": "Độ dài", + "forceInterleavedThinkingCompat": "Suy nghĩ xen kẽ", + "forceInterleavedThinkingCompatDescription": "Kiểm soát xem phiên này có xử lý các thông báo lý luận và lệnh gọi công cụ bằng Tư duy xen kẽ hay không.", + "verbosityPlaceholder": "Chọn mức độ chi tiết", + "currentCustomPrompt": "tùy chỉnh hiện tại", + "useDefault": "Sử dụng mặc định", + "decreaseValue": "Giảm {label}", + "increaseValue": "Tăng {label}", + "toggleValue": "Chuyển đổi {label}", + "validation": { + "finiteNumber": "Phải là số hữu hạn", + "nonNegativeInteger": "Phải là số nguyên không âm", + "contextLengthAtLeastMaxTokens": "Phải lớn hơn hoặc bằng Max Tokens", + "maxTokensWithinContextLength": "Phải nhỏ hơn hoặc bằng Độ dài ngữ cảnh" + } + }, + "modelPicker": { + "empty": "Không tìm thấy mô hình nào", + "audioInputSupported": "Hỗ trợ đầu vào âm thanh" + }, + "audio": { + "play": "Chơi", + "pause": "Tạm dừng" + }, + "call": { + "title": "Cuộc gọi Voice.ai", + "description": "Nhấp để kết nối với nhân viên thoại Voice.ai, nói sau khi cuộc gọi được kết nối.", + "start": "Bắt đầu cuộc gọi thoại", + "stop": "Kết thúc cuộc gọi", + "end": "Cúp máy" + }, + "skills": { + "indicator": { + "active": "Kỹ năng được ghim {count}", + "none": "Không có kỹ năng được ghim" + }, + "panel": { + "title": "Đã ghim Skills", + "manage": "Quản lý", + "empty": "Không có kỹ năng nào được cài đặt" + } + }, + "workspace": { + "title": "Không gian làm việc", + "collapse": "Thu gọn", + "sections": { + "files": "Tập tin", + "git": "Git", + "artifacts": "Hiện vật", + "subagents": "Chất phụ" + }, + "plan": { + "section": "kế hoạch", + "empty": "Chưa có nhiệm vụ nào", + "itemAriaLabel": "{status}: {step}", + "status": { + "pending": "Đang chờ xử lý", + "in_progress": "Đang tiến hành", + "completed": "Đã hoàn thành", + "failed": "thất bại", + "skipped": "Đã bỏ qua" + } + }, + "files": { + "section": "Tập tin", + "empty": "Không có tập tin", + "loading": "Đang tải tập tin...", + "noWorkspace": { + "title": "Không có không gian làm việc", + "description": "Chọn hoặc kéo thư mục để đặt không gian làm việc", + "button": "Chọn thư mục" + }, + "contextMenu": { + "openFile": "Mở tập tin", + "revealInFolder": "Hiển thị trong trình quản lý tập tin", + "insertPath": "Chèn vào đầu vào" + } + }, + "git": { + "empty": "Không có sự khác biệt", + "clean": "Làm sạch cây làm việc", + "staged": "Đã dàn dựng", + "unstaged": "Chưa được dàn dựng" + }, + "subagents": { + "empty": "Chưa có phiên con nào", + "self": "bản thân", + "status": { + "working": "Đang chạy", + "error": "Lỗi", + "idle": "Nhàn rỗi" + } + }, + "browser": { + "section": "Trình duyệt", + "empty": "Chưa có tab nào" + }, + "terminal": { + "section": "thiết bị đầu cuối", + "empty": "Chưa có đầu ra", + "contextMenu": { + "terminate": "Chấm dứt", + "delete": "Xóa bản ghi", + "expand": "Mở rộng", + "collapse": "Thu gọn" + }, + "output": { + "truncated": "[cắt ngắn]" + }, + "noOutput": "Không có đầu ra", + "status": { + "running": "Đang chạy", + "completed": "thành công", + "failed": "thất bại", + "timed_out": "Đã hết thời gian", + "aborted": "Đã hủy bỏ" + } + } + }, + "newThread": { + "title": "Xây dựng và khám phá" + }, + "floatingWidget": { + "title": "Tổng quan về nhiệm vụ", + "collapse": "Thu gọn các phiên nổi", + "empty": "Chưa có phiên đại lý nào", + "executing": "hoạt động", + "sessionCount": "Phiên {count}", + "untitled": "Trò chuyện mới", + "status": { + "inProgress": "Đang tiến hành", + "done": "Xong", + "error": "Lỗi" + } + }, + "permissionMode": { + "default": "Quyền mặc định", + "fullAccess": "Toàn quyền truy cập" + }, + "sidebar": { + "allAgents": "Tất cả Agents", + "expandSidebar": "Mở rộng thanh bên", + "collapseSidebar": "Thu gọn thanh bên", + "remoteControlDisabled": "Đã tắt", + "remoteControlStatus": { + "disabled": "Điều khiển từ xa bị vô hiệu hóa", + "stopped": "Điều khiển từ xa đã dừng", + "starting": "Khởi động điều khiển từ xa", + "running": "Điều khiển từ xa đang chạy", + "backoff": "Đang thử lại điều khiển từ xa", + "error": "Lỗi điều khiển từ xa" + }, + "groupByDate": "Nhóm theo ngày", + "groupByProject": "Nhóm theo dự án", + "pinned": "Đã ghim", + "emptyTitle": "Chưa có cuộc trò chuyện nào", + "emptyDescription": "Bắt đầu một cuộc trò chuyện mới để bắt đầu", + "searchPlaceholder": "Tìm kiếm cuộc trò chuyện", + "searchAriaLabel": "Tìm kiếm cuộc trò chuyện", + "searchEmptyTitle": "Không có cuộc trò chuyện phù hợp", + "searchEmptyDescription": "Hãy thử một từ khóa tiêu đề khác" + }, + "spotlight": { + "placeholder": "Tìm kiếm cuộc trò chuyện, đại lý, cài đặt, hành động…", + "searching": "Đang tìm kiếm…", + "emptyTitle": "Không có kết quả phù hợp", + "emptyDescription": "Hãy thử từ khóa khác hoặc mở một phiên gần đây.", + "hints": "↑↓ di chuyển · Vào mở · Esc đóng · Home/End nhảy", + "kind": { + "session": "Phiên", + "message": "Tin nhắn", + "agent": "Agent", + "setting": "Cài đặt", + "action": "hành động" + } + }, + "inlineSearch": { + "placeholder": "Tìm kiếm trong cuộc trò chuyện", + "ariaLabel": "Tìm kiếm trong cuộc trò chuyện hiện tại", + "previous": "Trận đấu trước", + "next": "Trận đấu tiếp theo", + "close": "Đóng tìm kiếm" + }, + "onboarding": { + "agentSwitch": { + "title": "Chuyển sang DeepChat Agent", + "description": "Trước khi trò chuyện, hãy thoát khỏi ACP và quay lại luồng DeepChat tích hợp sẵn.", + "caption": "Nhấp vào nút tác nhân được đánh dấu ở thanh bên để tiếp tục." + }, + "switchModel": { + "description": "Chọn mô hình bạn muốn sử dụng cho cuộc trò chuyện DeepChat đầu tiên của mình.", + "caption": "Sử dụng trình chuyển đổi mô hình được đánh dấu và chọn bất kỳ mô hình nào có sẵn." + }, + "firstChat": { + "description": "Mọi thứ đã sẵn sàng. Nhập tin nhắn đầu tiên của bạn vào đây để hoàn tất quy trình giới thiệu.", + "caption": "Đèn chiếu vẫn ở trên hộp nhập cho đến khi bạn gửi tin nhắn đầu tiên." + } + } +} diff --git a/src/renderer/src/i18n/vi-VN/common.json b/src/renderer/src/i18n/vi-VN/common.json new file mode 100644 index 000000000..b1f871bd8 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/common.json @@ -0,0 +1,128 @@ +{ + "enabled": "Đã bật", + "disabled": "Đã tắt", + "loading": "Đang tải...", + "copySuccess": "Sao chép thành công", + "copySuccessDesc": "Đã sao chép nội dung vào clipboard", + "copyImageSuccess": "Sao chép thành công", + "copyImageSuccessDesc": "Đã sao chép hình ảnh vào bảng nhớ tạm", + "copyFailed": "Sao chép không thành công", + "copyFailedDesc": "Không sao chép được nội dung vào bảng nhớ tạm", + "copyCode": "Sao chép mã", + "copy": "Sao chép", + "copied": "Đã sao chép", + "paste": "Dán", + "export": "Xuất khẩu", + "newChat": "Trò chuyện mới", + "newTopic": "Chủ đề mới", + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "close": "Đóng", + "open": "Mở", + "next": "Tiếp theo", + "back": "Quay lại", + "error": { + "requestFailed": "Yêu cầu không thành công...", + "createChatFailed": "Không tạo được cuộc trò chuyện", + "selectChatFailed": "Không chọn được trò chuyện", + "renameChatFailed": "Không đổi tên được cuộc trò chuyện", + "deleteChatFailed": "Không xóa được cuộc trò chuyện", + "cleanMessagesFailed": "Không thể xóa tin nhắn", + "userCanceledGeneration": "Người dùng đã hủy tạo", + "sessionInterrupted": "Phiên bị gián đoạn bất ngờ, quá trình tạo không hoàn tất", + "noModelResponse": "Mô hình không trả về bất kỳ nội dung nào, có thể nó đã hết thời gian chờ", + "invalidJson": "Định dạng JSON không hợp lệ", + "maximumToolCallsReached": "Đã đạt đến số cuộc gọi công cụ tối đa", + "causeOfError": "Nguyên nhân có thể gây ra lỗi:", + "error400": "Yêu cầu không hợp lệ, có thể là vấn đề về tham số hoặc khả năng tương thích", + "error401": "Xác thực không thành công, có thể API Key hoặc miền không chính xác", + "error403": "Truy cập vào mô hình bị cấm, có thể không đủ số dư hoặc không được phép", + "error404": "Không tìm thấy URL đã yêu cầu, có thể tên miền hoặc kiểu máy không chính xác", + "error429": "Quá nhiều yêu cầu, có thể bị giới hạn bởi dịch vụ", + "error500": "Lỗi máy chủ, dịch vụ có thể không ổn định, vui lòng thử lại sau", + "error502": "Lỗi cổng, dịch vụ có thể không ổn định, vui lòng thử lại sau", + "error503": "Dịch vụ không khả dụng, dịch vụ có thể không ổn định, vui lòng thử lại sau", + "error504": "Hết thời gian yêu cầu, dịch vụ có thể không ổn định hoặc có thể có sự cố mạng, vui lòng kiểm tra cài đặt proxy và thử lại", + "operationFailed": "Thao tác không thành công", + "invalidQuestionRequest": "Yêu cầu câu hỏi không hợp lệ" + }, + "resetDataConfirmTitle": "Đặt lại tất cả dữ liệu?", + "resetDataConfirmDescription": "Điều này sẽ đặt lại tất cả dữ liệu của bạn về cài đặt mặc định. Không thể hoàn tác hành động này.", + "proxyMode": "Chế độ ủy nhiệm", + "proxyModeSelect": "Chọn Chế độ proxy", + "proxyModeSystem": "Proxy hệ thống", + "proxyModeNone": "Không có ủy quyền", + "proxyModeCustom": "Proxy tùy chỉnh", + "customProxyUrl": "Proxy tùy chỉnh URL", + "customProxyUrlPlaceholder": "Ví dụ: http://127.0.0.1:7890", + "invalidProxyUrl": "Proxy URL không hợp lệ, vui lòng nhập http/https URL hợp lệ", + "disclaimer": "Tuyên bố từ chối trách nhiệm", + "resetData": "Đặt lại dữ liệu", + "searchAssistantModel": "Trợ lý người mẫu", + "searchEngine": "Công cụ tìm kiếm", + "searchEngineSelect": "Chọn một công cụ tìm kiếm", + "searchPreview": "Xem trước tìm kiếm", + "language": "ngôn ngữ", + "languageSelect": "Chọn một ngôn ngữ", + "selectModel": "Chọn một mô hình", + "title": "Cài đặt chung", + "languageSystem": "Theo dõi hệ thống", + "watermarkTip": "Được tạo bởi AI", + "collapse": "Thu gọn", + "expand": "Mở rộng", + "image": "bức tranh", + "noContent": "Không có nội dung", + "preview": "Xem trước", + "source": "Nguồn", + "more": "Thêm", + "decrease": "Giảm", + "increase": "tăng", + "fontSmaller": "Phông chữ nhỏ hơn", + "fontReset": "Đặt lại phông chữ", + "fontLarger": "Phông chữ lớn hơn", + "zoomIn": "Phóng to", + "zoomOut": "Thu nhỏ", + "resetZoom": "Đặt lại thu phóng", + "add": "Thêm", + "reset": "Đặt lại", + "format": "định dạng", + "edit": "Chỉnh sửa", + "delete": "Xóa", + "save": "Lưu", + "clear": "Xóa", + "saved": "Đã lưu", + "unknownError": "Lỗi không xác định", + "testing": "Đang tiến hành thử nghiệm", + "saving": "Đang lưu", + "scrollLeft": "Cuộn sang trái", + "scrollRight": "Cuộn sang phải", + "history": "Lịch sử", + "minimize": "Giảm thiểu", + "maximize": "Tối đa hóa", + "restore": "Khôi phục", + "browser": { + "back": "Quay lại", + "forward": "Chuyển tiếp", + "reload": "Tải lại", + "addressLabel": "Thanh địa chỉ", + "addressPlaceholder": "Nhập URL", + "enterUrlToStart": "Nhập URL để bắt đầu duyệt", + "enterUrlDescription": "Nhập URL vào thanh địa chỉ bên trên để truy cập trang web", + "name": "Trình duyệt Yo" + }, + "size": { + "bytes": "{count} byte" + }, + "time": { + "today": "hôm nay", + "yesterday": "Hôm qua", + "lastWeek": "Tuần trước", + "older": "Cũ hơn" + }, + "project": { + "select": "Chọn dự án", + "none": "Không có dự án", + "recent": "dự án gần đây", + "openFolder": "Mở thư mục..." + } +} diff --git a/src/renderer/src/i18n/vi-VN/components.json b/src/renderer/src/i18n/vi-VN/components.json new file mode 100644 index 000000000..2c47fb7fd --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/components.json @@ -0,0 +1,70 @@ +{ + "emojiPicker": { + "search": "Tìm kiếm biểu tượng cảm xúc", + "smileys": "Mặt cười & Cảm xúc", + "people": "Con người & Cơ thể", + "animals": "Động vật & Thiên nhiên", + "food": "Đồ ăn & Đồ uống", + "travel": "Du lịch & Địa điểm", + "activities": "Hoạt động", + "objects": "Đối tượng", + "symbols": "Biểu tượng", + "flags": "Cờ" + }, + "messageBlockAction": { + "continue": "Tiếp tục", + "continued": "Tiếp tục" + }, + "messageBlockPermissionRequest": { + "title": "Cần có sự cho phép", + "allow": "Cho phép", + "allowOnce": "Cho phép một lần", + "allowForSession": "Cho phép phiên", + "allowOnceTooltip": "Thực hiện lệnh này một lần mà không lưu quyết định.", + "allowForSessionTooltip": "Hãy nhớ lệnh này chỉ cho cuộc trò chuyện này.", + "deny": "Từ chối", + "rememberChoice": "Hãy nhớ sự lựa chọn này", + "granted": "Đã cấp quyền", + "denied": "Quyền bị từ chối", + "riskLabel": "Rủi ro", + "type": { + "read": "Đọc quyền truy cập", + "write": "Viết quyền truy cập", + "all": "Toàn quyền truy cập", + "command": "Thực thi lệnh" + }, + "description": { + "read": "Cho phép '{toolName}' từ '{serverName}' thực hiện thao tác đọc?", + "write": "Cho phép '{toolName}' từ '{serverName}' thực hiện thao tác ghi?", + "all": "Cho phép '{toolName}' từ '{serverName}' thực hiện thao tác đọc và ghi?", + "command": "Thực hiện lệnh: {command}", + "commandWithRisk": "Thực hiện lệnh: {command}\n\nMức độ rủi ro: {riskLevel}\n\nĐề xuất: {suggestion}" + }, + "riskLevel": { + "low": "Thấp", + "medium": "Trung bình", + "high": "Cao", + "critical": "Quan trọng" + }, + "suggestion": { + "low": "Đây là lệnh chỉ đọc với tác động tối thiểu.", + "medium": "Lệnh này có thể thay đổi trạng thái hoặc cài đặt các phần phụ thuộc. Xem xét trước khi chạy.", + "high": "Lệnh này sửa đổi tập tin hoặc trạng thái hệ thống. Tiến hành cẩn thận.", + "critical": "Lệnh này có thể phá hoại hoặc truy cập vào mạng bên ngoài. Xác minh ý định." + } + }, + "promptParamsDialog": { + "title": "Cài đặt thông số {name}", + "description": "Vui lòng điền các thông số bên dưới. Các trường được đánh dấu * là bắt buộc.", + "required": "Trường này là bắt buộc." + }, + "messageBlockQuestionRequest": { + "title": "Câu hỏi", + "send": "Gửi", + "reject": "Từ chối", + "selected": "Đã chọn", + "rejected": "Bị từ chối", + "customPlaceholder": "Nhập câu trả lời của bạn...", + "answerLabel": "Trả lời" + } +} diff --git a/src/renderer/src/i18n/vi-VN/contextMenu.json b/src/renderer/src/i18n/vi-VN/contextMenu.json new file mode 100644 index 000000000..5c7cb7077 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/contextMenu.json @@ -0,0 +1,17 @@ +{ + "translate": { + "title": "Dịch", + "original": "Bản gốc", + "translated": "Dịch thuật", + "error": "Dịch không thành công" + }, + "askAI": { + "title": "Hỏi AI", + "question": "Câu hỏi", + "answer": "Trả lời", + "error": "Phản hồi AI không thành công" + }, + "copy": "Sao chép", + "paste": "Dán", + "cut": "Cắt" +} diff --git a/src/renderer/src/i18n/vi-VN/dialog.json b/src/renderer/src/i18n/vi-VN/dialog.json new file mode 100644 index 000000000..42c39f321 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/dialog.json @@ -0,0 +1,44 @@ +{ + "cancel": "Hủy bỏ", + "confirm": "Xác nhận", + "close": "Đóng", + "ok": "được rồi", + "delete": { + "title": "Bạn có chắc chắn muốn xóa cuộc trò chuyện này không?", + "description": "Không thể hoàn tác hành động này.", + "confirm": "Xóa" + }, + "rename": { + "title": "Đổi tên cuộc trò chuyện", + "description": "Vui lòng nhập tên mới cho cuộc trò chuyện." + }, + "cleanMessages": { + "title": "Xóa tất cả tin nhắn", + "description": "Thao tác này sẽ xóa tất cả tin nhắn và tập tin trong cuộc trò chuyện này. Bạn có chắc chắn muốn tiếp tục không?", + "confirm": "Xóa" + }, + "fork": { + "title": "Tạo chi nhánh", + "description": "Thao tác này sẽ sao chép tất cả tin nhắn từ tin nhắn đầu tiên sang tin nhắn hiện tại vào một cuộc trò chuyện mới nơi bạn có thể tiếp tục cuộc đối thoại.", + "confirm": "Tạo chi nhánh", + "tag": "chi nhánh" + }, + "error": { + "title": "Lỗi" + }, + "mutualExclusive": { + "title": { + "reasoning": "Xác nhận Kích hoạt lý luận", + "functionCall": "Xác nhận kích hoạt chức năng gọi" + }, + "message": { + "reasoning": "Việc kích hoạt lý luận sẽ tự động vô hiệu hóa chức năng gọi hàm. Đây là hạn chế của mẫu DeepSeek-V3.1 và không thể sử dụng đồng thời cả hai tính năng. Tiếp tục?", + "functionCall": "Việc kích hoạt chức năng gọi sẽ tự động vô hiệu hóa lý luận. Đây là hạn chế của mẫu DeepSeek-V3.1 và không thể sử dụng đồng thời cả hai tính năng. Tiếp tục?" + }, + "warningText": { + "reasoning": "Lưu ý: Việc bật lý luận sẽ tự động tắt chức năng gọi hàm, đây là yêu cầu của các mô hình DeepSeek-V3.1.", + "functionCall": "Lưu ý: Việc kích hoạt chức năng gọi hàm sẽ tự động vô hiệu hóa khả năng suy luận, đây là yêu cầu của các mô hình DeepSeek-V3.1." + }, + "confirmEnable": "Xác nhận kích hoạt" + } +} diff --git a/src/renderer/src/i18n/vi-VN/image.json b/src/renderer/src/i18n/vi-VN/image.json new file mode 100644 index 000000000..04afa0e5a --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/image.json @@ -0,0 +1,9 @@ +{ + "loadError": "Không tải được hình ảnh", + "loading": "Đang tải hình ảnh...", + "preview": "Xem trước hình ảnh", + "save": "Lưu hình ảnh", + "saveAs": "Lưu hình ảnh dưới dạng...", + "saveSuccess": "Đã lưu hình ảnh", + "saveFailed": "Không lưu được hình ảnh" +} diff --git a/src/renderer/src/i18n/vi-VN/index.ts b/src/renderer/src/i18n/vi-VN/index.ts new file mode 100644 index 000000000..d5d89a305 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/index.ts @@ -0,0 +1,59 @@ +import common from './common.json' +import image from './image.json' +import update from './update.json' +import routes from './routes.json' +import chat from './chat.json' +import model from './model.json' +import thread from './thread.json' +import dialog from './dialog.json' +import settings from './settings.json' +import mcp from './mcp.json' +import welcome from './welcome.json' +import artifacts from './artifacts.json' +import sync from './sync.json' +import toolCall from './toolCall.json' +import components from './components.json' +import about from './about.json' +import contextMenu from './contextMenu.json' +import promptSetting from './promptSetting.json' +import traceDialog from './traceDialog.json' +import plan from './plan.json' + +// Individual top-level keys +const others = { + Silicon: 'SiliconFlow', + Qiniu: 'Qiniu', + QwenLM: 'Qwen Model', + Doubao: 'Volcano Engine', + PPIO: 'PPIO Cloud', + Moonshot: 'Moonshot AI', + Hunyuan: 'Hunyuan', + DashScope: 'Alibaba Bailian', + Zhipu: 'Zhipu', + searchDisclaimer: + 'DeepChat chỉ là công cụ phụ trợ tổ chức và tóm tắt dữ liệu công khai được công cụ tìm kiếm trả về khi người dùng chủ động bắt đầu tìm kiếm, giúp người dùng xem và hiểu kết quả tìm kiếm thuận tiện hơn.\\n1. Sử dụng Dữ liệu Công cộng\\nPhần mềm này chỉ xử lý dữ liệu có sẵn công khai trên các trang web mục tiêu hoặc công cụ tìm kiếm mà không yêu cầu đăng nhập. Trước khi sử dụng, hãy nhớ xem xét và tuân thủ các điều khoản dịch vụ của trang web hoặc công cụ tìm kiếm mục tiêu để đảm bảo việc sử dụng của bạn là hợp pháp và tuân thủ.\\n2. Độ chính xác và trách nhiệm của thông tin\\nNội dung do phần mềm này sắp xếp và tạo ra chỉ mang tính chất tham khảo và không cấu thành bất kỳ hình thức tư vấn pháp lý, kinh doanh hoặc tư vấn nào khác. Nhà phát triển không đảm bảo về tính chính xác, đầy đủ, kịp thời hoặc hợp pháp của kết quả tìm kiếm và mọi hậu quả phát sinh từ việc sử dụng phần mềm này hoàn toàn là trách nhiệm của người dùng.\\n3. Điều khoản từ chối trách nhiệm\\nPhần mềm này được cung cấp "nguyên trạng" và các nhà phát triển không chịu bất kỳ bảo đảm hay trách nhiệm rõ ràng hay ngụ ý nào về hiệu suất, tính ổn định hoặc khả năng ứng dụng của phần mềm. Trong quá trình sử dụng phần mềm này, nhà phát triển không chịu trách nhiệm về mọi tranh chấp, tổn thất hoặc trách nhiệm pháp lý phát sinh do vi phạm luật pháp và quy định có liên quan hoặc các quy tắc của trang web mục tiêu.\\n4. Tự kỷ luật của người dùng\\nTrước khi sử dụng phần mềm này, người dùng phải hiểu đầy đủ và xác nhận rằng việc sử dụng của họ sẽ không vi phạm quyền sở hữu trí tuệ, bí mật thương mại hoặc các quyền hợp pháp khác của người khác. Mọi tranh chấp pháp lý và hậu quả phát sinh từ việc người dùng sử dụng phần mềm này không đúng cách đều là trách nhiệm của người dùng.\\nViệc sử dụng phần mềm này cho thấy rằng người dùng đã đọc, hiểu và đồng ý với tất cả các điều khoản của tuyên bố từ chối trách nhiệm này. Nếu bạn có bất kỳ thắc mắc nào, vui lòng tham khảo ý kiến ​​của cố vấn pháp lý chuyên nghiệp.' +} + +export default { + common, + image, + update, + routes, + chat, + model, + thread, + dialog, + settings, + mcp, + welcome, + artifacts, + sync, + toolCall, + components, + about, + contextMenu, + promptSetting, + traceDialog, + plan, + ...others +} diff --git a/src/renderer/src/i18n/vi-VN/mcp.json b/src/renderer/src/i18n/vi-VN/mcp.json new file mode 100644 index 000000000..256cbe384 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/mcp.json @@ -0,0 +1,307 @@ +{ + "tools": { + "searchPlaceholder": "Công cụ tìm kiếm...", + "noToolsAvailable": "Không có công cụ nào", + "selectToolToDebug": "Chọn một công cụ để gỡ lỗi", + "dialogDescription": "Các công cụ gỡ lỗi và kiểm tra được cung cấp bởi máy chủ MCP", + "toolsCount": "Công cụ {count}", + "availableTools": "Công cụ có sẵn", + "toolList": "Danh sách công cụ", + "functionDescription": "Mô tả chức năng", + "invalidJson": "Định dạng JSON không hợp lệ", + "inputHint": "Vui lòng nhập thông số ở định dạng JSON", + "required": "Bắt buộc", + "noDescription": "Không có mô tả", + "input": "Đối số", + "path": "Đường dẫn", + "pathPlaceholder": "Nhập đường dẫn tập tin", + "searchPattern": "Mẫu tìm kiếm", + "searchPatternPlaceholder": "Nhập biểu thức chính quy", + "filePattern": "Mẫu tệp", + "filePatternPlaceholder": "Nhập mẫu tệp, ví dụ: *.md", + "executeButton": "Công cụ thực thi", + "resultTitle": "kết quả", + "runningTool": "Công cụ thực hiện...", + "loading": "Đang tải...", + "error": "Tải không thành công", + "available": "{count} có sẵn", + "none": "Không có công cụ nào", + "title": "Công cụ MCP", + "description": "Các công cụ được cung cấp bởi máy chủ MCP", + "loadError": "Không thể tải công cụ", + "parameters": "Thông số", + "refresh": "Làm mới", + "disabled": "MCP bị vô hiệu hóa", + "enableToUse": "Vui lòng kích hoạt MCP để sử dụng công cụ", + "enabled": "Kích hoạt MCP", + "enabledDescription": "Kích hoạt chức năng MCP để sử dụng lệnh gọi công cụ", + "acpManagedHint": "Chế độ ACP: Quyền truy cập MCP được quản lý bởi cài đặt ACP Agent (chỉ đọc tại đây).", + "acpServersSelected": "Đã chọn {count} MCP", + "acpServersNone": "Không có máy chủ MCP nào được định cấu hình ", + "empty": "trống", + "jsonInputPlaceholder": "Nhập các thông số theo dạng JSON", + "type": "loại", + "annotations": "Chú thích", + "invalidJsonFormat": "Định dạng JSON không chính xác", + "allowedValues": "Giá trị được phép", + "arrayItemValues": "Giá trị mục mảng" + }, + "addServer": "Thêm máy chủ", + "addServerDialog": { + "description": "Định cấu hình máy chủ MCP mới", + "title": "Thêm máy chủ" + }, + "confirmDelete": { + "cancel": "Hủy bỏ", + "confirm": "Xóa", + "description": "Bạn có chắc chắn muốn xóa máy chủ {name} không? \nThao tác này không thể bị hủy bỏ.", + "title": "Xác nhận xóa" + }, + "confirmRemoveServer": "Bạn có chắc chắn muốn xóa máy chủ {name} không? \nThao tác này không thể bị hủy bỏ.", + "default": "mặc định", + "deleteServer": "Xóa máy chủ", + "description": "Quản lý và định cấu hình máy chủ và công cụ MCP (Giao thức bối cảnh mô hình)", + "editServer": "Chỉnh sửa máy chủ", + "editServerDialog": { + "description": "Chỉnh sửa cấu hình máy chủ MCP", + "title": "Chỉnh sửa máy chủ" + }, + "enableToAccess": "Vui lòng kích hoạt MCP để truy cập các tùy chọn cấu hình.", + "enabledDescription": "Khi được bật, tất cả các dịch vụ được bật sẽ tự động khởi động.", + "enabledTitle": "Kích hoạt MCP", + "isDefault": "Máy chủ mặc định", + "noServersFound": "Không tìm thấy máy chủ", + "removeDefault": "Xóa mặc định", + "removeServer": "Xóa máy chủ", + "removeServerDialog": { + "title": "Xóa máy chủ" + }, + "resetConfirm": "Khôi phục", + "resetConfirmDescription": "Hành động này khôi phục tất cả các máy chủ mặc định trong khi vẫn giữ lại các máy chủ tùy chỉnh của bạn. \nMọi sửa đổi đối với máy chủ mặc định sẽ bị mất.", + "resetConfirmTitle": "Khôi phục dịch vụ mặc định", + "resetToDefault": "Khôi phục dịch vụ mặc định", + "running": "Đang chạy", + "serverForm": { + "add": "Thêm", + "args": "Đối số", + "argsPlaceholder": "Nhập một đối số trên mỗi dòng", + "addArg": "Thêm đối số", + "argPlaceholder": "Nhập giá trị đối số", + "argsRequired": "Tham số không được để trống", + "autoApprove": "Tự động phê duyệt", + "autoApproveAll": "Tất cả", + "autoApproveHelp": "Chọn loại hoạt động yêu cầu ủy quyền tự động và thực hiện mà không cần xác nhận của người dùng", + "autoApproveRead": "Đọc", + "autoApproveWrite": "Viết", + "baseUrl": "Cơ sở URL", + "baseUrlPlaceholder": "Nhập máy chủ URL cơ bản (ví dụ: http://localhost:3000)", + "cancel": "Hủy bỏ", + "command": "Lệnh", + "commandPlaceholder": "Nhập lệnh", + "commandRequired": "Lệnh không thể trống", + "configImported": "Nhập cấu hình thành công", + "description": "Mô tả", + "descriptionPlaceholder": "Nhập mô tả máy chủ", + "descriptions": "Mô tả", + "descriptionsPlaceholder": "Nhập mô tả máy chủ", + "env": "Biến môi trường", + "envInvalid": "Các biến môi trường phải ở định dạng JSON hợp lệ", + "envPlaceholder": "Nhập các biến môi trường ở định dạng JSON", + "icon": "Biểu tượng", + "iconPlaceholder": "Biểu tượng nhập", + "icons": "Biểu tượng", + "iconsPlaceholder": "Nhập biểu tượng", + "jsonConfig": "Cấu hình JSON", + "jsonConfigExample": "Ví dụ về cấu hình JSON", + "jsonConfigIntro": "Bạn có thể dán trực tiếp cấu hình JSON hoặc chọn định cấu hình máy chủ theo cách thủ công.", + "jsonConfigPlaceholder": "Vui lòng dán cấu hình định dạng JSON của máy chủ MCP", + "name": "Tên máy chủ", + "namePlaceholder": "Nhập tên máy chủ", + "nameRequired": "Tên máy chủ không được để trống", + "parseAndContinue": "Phân tích và tiếp tục", + "parseError": "Lỗi phân tích cú pháp", + "parseSuccess": "Cấu hình được phân tích thành công", + "skipToManual": "Chuyển sang cấu hình thủ công", + "submit": "Gửi", + "folders": "Danh sách thư mục", + "addFolder": "Thêm thư mục", + "selectFolder": "Chọn thư mục", + "selectFolderError": "Không chọn được thư mục", + "noFoldersSelected": "Không có thư mục nào được chọn", + "type": "Loại máy chủ", + "typeInMemory": "Bộ nhớ", + "typePlaceholder": "Chọn loại máy chủ", + "typeSse": "Sự kiện do máy chủ gửi (SSE)", + "typeStdio": "Đầu vào và đầu ra tiêu chuẩn", + "update": "cập nhật" + }, + "serverList": "Danh sách máy chủ", + "setAsDefault": "Đặt làm máy chủ mặc định", + "setDefault": "Đặt làm mặc định", + "startServer": "Khởi động máy chủ", + "stopServer": "Dừng máy chủ", + "stopped": "Đã dừng", + "sampling": { + "title": "Yêu cầu lấy mẫu từ {server}", + "unknownServer": "Máy chủ không xác định", + "description": "Xem lại ngữ cảnh được chia sẻ bởi máy chủ MCP và chọn xem có tạo phản hồi hay không.", + "systemPrompt": "Hệ thống prompt", + "messagesTitle": "Bối cảnh hội thoại", + "preferencesTitle": "Tùy chọn mô hình", + "approve": "Phê duyệt", + "reject": "Từ chối", + "confirm": "Gửi phản hồi", + "confirming": "xác nhận…", + "sendResponse": "Gửi phản hồi", + "selectModel": "Chọn mẫu", + "respondWith": "Trả lời với:", + "maxTokensInfo": "Độ dài phản hồi tối đa: {maxTokens} tokens", + "visionWarning": "Kiểu máy đã chọn không hỗ trợ đầu vào bằng hình ảnh. Vui lòng chọn một mô hình có khả năng nhìn trước khi tiếp tục.", + "selectedModelLabel": "Phản hồi bằng {model} ({provider})", + "unsupportedMessage": "Loại nội dung này không được hỗ trợ.", + "noVisionModels": "Không có mô hình có khả năng nhìn nào được kích hoạt. Hãy bật mô hình tầm nhìn trong Cài đặt để tiếp tục.", + "noModels": "Không có mô hình đủ điều kiện nào được kích hoạt. Kích hoạt một mô hình áp dụng trong Cài đặt để tiếp tục.", + "imageAlt": "Hình ảnh {index}", + "unknownMime": "Loại MIME không xác định", + "unknownHint": "Gợi ý không tên", + "autoApproving": "Yêu cầu lấy mẫu MCP từ {server}", + "autoApproveIn": "Tự động phê duyệt trong {seconds} bằng {model}", + "reviewRequest": "Xem lại", + "sessionActive": "Phiên hoạt động - yêu cầu sẽ được phê duyệt tự động", + "contentType": { + "text": "văn bản", + "image": "Hình ảnh", + "audio": "Âm thanh" + }, + "preference": { + "cost": "Ưu tiên chi phí", + "speed": "Ưu tiên tốc độ", + "intelligence": "Ưu tiên thông minh", + "hints": "Gợi ý mẫu" + } + }, + "tabs": { + "servers": "Máy chủ", + "tools": "Công cụ" + }, + "title": "Cài đặt MCP", + "inmemory": { + "Artifacts": { + "desc": "Sản xuất các Cổ vật phong phú hơn trong DeepChat", + "name": "Hiện vật" + }, + "bochaSearch": { + "desc": "Bocha Tìm kiếm API https://open.bochaai.com/", + "name": "Tìm kiếm Bocha" + }, + "buildInFileSystem": { + "desc": "Cho phép DeepChat tương tác với hệ thống tệp cục bộ.", + "name": "Hệ thống tập tin" + }, + "braveSearch": { + "desc": "Brave Tìm kiếm API https://brave.com/search/api/", + "name": "Tìm kiếm Brave" + }, + "difyKnowledge": { + "desc": "Dịch vụ Tìm kiếm Cơ sở Kiến thức Dify, có thể truy xuất nội dung trong Cơ sở Kiến thức Dify", + "name": "Tìm kiếm cơ sở kiến thức Dify" + }, + "ragflowKnowledge": { + "name": "Tìm kiếm cơ sở kiến thức RAGFlow", + "desc": "Dịch vụ tìm kiếm cơ sở tri thức RAGFlow, có thể tìm kiếm nội dung cơ sở tri thức RAGFlow" + }, + "fastGptKnowledge": { + "name": "Tìm kiếm cơ sở kiến thức FastGPT", + "desc": "Dịch vụ tìm kiếm cơ sở tri thức FastGPT, có thể tìm kiếm nội dung cơ sở tri thức FastGPT" + }, + "deepchat-inmemory/custom-prompts-server": { + "desc": "DeepChat dịch vụ prompts tùy chỉnh tích hợp sẵn", + "name": "Prompt tùy chỉnh" + }, + "deepchat-inmemory/deep-research-server": { + "desc": "Nghiên cứu sâu tích hợp DeepChat được hỗ trợ bởi Tìm kiếm Bocha. Các mô hình ngữ cảnh dài được khuyến khích.", + "name": "Nghiên cứu sâu" + }, + "deepchat-inmemory/auto-prompting-server": { + "name": "Mẫu tự động Prompting", + "desc": "Tự động chọn prompt tùy chỉnh tốt nhất dựa trên đầu vào và điền vào mẫu một cách thông minh." + }, + "deepchat-inmemory/conversation-search-server": { + "name": "Tìm kiếm lịch sử hội thoại", + "desc": "DeepChat tìm kiếm lịch sử hội thoại tích hợp cho các cuộc trò chuyện và tin nhắn trong quá khứ." + }, + "builtinKnowledge": { + "desc": "DeepChat tìm kiếm cơ sở kiến thức tích hợp cho các tài liệu và hướng dẫn DeepChat.", + "name": "Tìm kiếm cơ sở kiến thức tích hợp" + }, + "deepchat/apple-server": { + "desc": "Cho phép người mẫu vận hành các ứng dụng macOS như Lịch, Danh bạ, Thư, Bản đồ, Ghi chú và Lời nhắc.", + "name": "Trợ lý hệ thống macOS" + } + }, + "prompts": { + "noPromptsAvailable": "Không có sẵn Prompt", + "noDescription": "Chưa có mô tả", + "selectPrompt": "Thông tin chi tiết về prompt đã chọn sẽ được hiển thị ở đây.", + "parameters": "Thông số", + "input": "Thông số", + "runningPrompt": "Đang tìm nạp prompt...", + "executeButton": "Nhận Prompt", + "resultTitle": "Chi tiết Prompt", + "invalidJson": "Định dạng JSON không hợp lệ", + "parametersHint": "Vui lòng nhập các thông số ở định dạng JSON, hỗ trợ định dạng tự động", + "resetToDefault": "Đặt lại về thông số mặc định", + "dialogDescription": "Gỡ lỗi và kiểm tra prompts do máy chủ MCP cung cấp" + }, + "resources": { + "noResourcesAvailable": "Không có sẵn tài nguyên", + "selectResource": "Chọn một tài nguyên để xem nội dung của nó.", + "loading": "Đang tải...", + "loadContent": "Tải nội dung", + "pleaseSelect": "Nhấn vào đây để xem chi tiết tài nguyên.", + "dialogDescription": "Duyệt và xem tài nguyên được cung cấp bởi máy chủ MCP" + }, + "errors": { + "loadConfigFailed": "Không tải được cấu hình MCP", + "setEnabledFailed": "Không thể đặt trạng thái kích hoạt MCP", + "getServerStatusFailed": "Không nhận được trạng thái cho máy chủ {serverName}", + "addServerFailed": "Không thêm được máy chủ", + "updateServerFailed": "Không thể cập nhật máy chủ", + "removeServerFailed": "Không thể xóa máy chủ", + "maxDefaultServersReached": "Đã đạt đến số lượng máy chủ mặc định tối đa (30)", + "toggleDefaultServerFailed": "Không chuyển đổi được trạng thái máy chủ mặc định", + "resetToDefaultFailed": "Không thể đặt lại về máy chủ mặc định", + "toggleServerFailed": "Không thể chuyển đổi máy chủ {serverName}", + "loadToolsFailed": "Không thể tải công cụ", + "loadPromptsFailed": "Không tải được prompts", + "loadResourcesFailed": "Không thể tải tài nguyên", + "callToolFailed": "Không gọi được công cụ {toolName}", + "toolCallError": "Lỗi gọi công cụ: {error}", + "mcpDisabled": "MCP bị vô hiệu hóa", + "getPromptFailed": "Không lấy được prompt", + "readResourceFailed": "Không đọc được tài nguyên", + "promptNotFound": "Không tìm thấy Prompt '{name}'", + "emptyPromptContent": "Prompt '{name}' không có nội dung", + "missingParameters": "Thiếu tham số bắt buộc: {params}", + "invalidParameters": "Tham số không hợp lệ cho: {params}" + }, + "market": { + "browseBuiltin": "Duyệt qua thị trường MCP tích hợp", + "builtinTitle": "Chợ MCP", + "poweredBy": "Được cung cấp bởi MCPRouter", + "keyGuide": "Nhận API Key", + "keyHelpText": "Xin vui lòng đi đến", + "keyHelpEnd": "để đăng ký API Key và điền vào ô nhập ở trên", + "apiKeyPlaceholder": "Nhập MCPRouter API Key", + "apiKeyRequiredTitle": "Cần có API Key", + "apiKeyRequiredDesc": "Vui lòng điền MCPRouter API Key trước khi cài đặt", + "install": "cài đặt", + "installed": "Đã cài đặt", + "installSuccess": "Cài đặt thành công", + "installFailed": "Cài đặt không thành công", + "noMore": "Không còn nữa", + "empty": "Không có dịch vụ", + "loadMore": "Tải thêm", + "pullDownToLoad": "Tiếp tục kéo xuống để tải thêm" + } +} diff --git a/src/renderer/src/i18n/vi-VN/model.json b/src/renderer/src/i18n/vi-VN/model.json new file mode 100644 index 000000000..2634d7b5e --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/model.json @@ -0,0 +1,54 @@ +{ + "search": { + "placeholder": "Tìm kiếm mô hình..." + }, + "error": { + "loadFailed": "Không tải được mô hình" + }, + "type": { + "custom": "Mẫu tùy chỉnh", + "official": "Mẫu chính thức" + }, + "add": { + "namePlaceholder": "Tên mẫu", + "idPlaceholder": "Mã mẫu", + "contextLengthPlaceholder": "Độ dài ngữ cảnh", + "maxTokensPlaceholder": "Tối đa Tokens" + }, + "actions": { + "add": "Thêm mô hình", + "enableAll": "Bật tất cả", + "disableAll": "Vô hiệu hóa tất cả" + }, + "sort": { + "status": "Theo trạng thái", + "name": "theo tên" + }, + "filter": { + "label": "Lọc", + "clearAll": "Xóa bộ lọc", + "visibleCount": "Đang hiển thị {visible} / {total}", + "capabilities": "Khả năng", + "types": "Các loại", + "capabilityOptions": { + "vision": "Tầm nhìn", + "functionCall": "Gọi hàm", + "reasoning": "Lý luận", + "search": "Tìm kiếm trên web" + }, + "typeOptions": { + "chat": "Trò chuyện", + "embedding": "Nhúng", + "rerank": "Xếp hạng lại", + "imageGeneration": "Tạo hình ảnh", + "videoGeneration": "Tạo video" + } + }, + "tags": { + "reasoning": "Lý luận", + "chat": "Trò chuyện", + "code": "Mã", + "writing": "Viết", + "analysis": "Phân tích" + } +} diff --git a/src/renderer/src/i18n/vi-VN/plan.json b/src/renderer/src/i18n/vi-VN/plan.json new file mode 100644 index 000000000..8b9eeff6d --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/plan.json @@ -0,0 +1,4 @@ +{ + "title": "Kế hoạch nhiệm vụ", + "completed": "hoàn thành" +} diff --git a/src/renderer/src/i18n/vi-VN/promptSetting.json b/src/renderer/src/i18n/vi-VN/promptSetting.json new file mode 100644 index 000000000..ebf3a5f6b --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/promptSetting.json @@ -0,0 +1,95 @@ +{ + "title": "Quản lý Prompt", + "addTitle": "Thêm Prompt", + "addDescription": "Tạo mẫu prompt tùy chỉnh mới", + "editTitle": "Chỉnh sửa Prompt", + "editDescription": "Sửa đổi mẫu prompt đã chọn", + "name": "Tên", + "namePlaceholder": "Nhập tên cho prompt của bạn", + "description": "Mô tả", + "descriptionPlaceholder": "Vui lòng nhập mô tả (tùy chọn)", + "promptContent": "Prompt", + "contentPlaceholder": "Vui lòng nhập nội dung prompt", + "basicInfo": "Thông tin cơ bản", + "contentTip": "Hỗ trợ các phần giữ chỗ biến như {openBrace}{openBrace}variable{closeBrace}{closeBrace}, bạn có thể xác định các tham số tương ứng trong phần tham số", + "noPrompt": "Chưa có Prompt nào", + "noPromptDesc": "Nhấp vào nút \"+\" ở góc trên cùng bên phải để tạo prompt đầu tiên của bạn.", + "active": "Đang hoạt động", + "noDescription": "Không có mô tả", + "customDate": "tùy chỉnh", + "showMore": "Hiển thị thêm", + "showLess": "Hiển thị ít hơn", + "export": "Xuất khẩu", + "import": "Nhập khẩu", + "exportSuccess": "Xuất thành công", + "exportFailed": "Xuất không thành công", + "importSuccess": "Nhập thành công", + "importFailed": "Nhập không thành công", + "importStats": "Đã thêm {added}, cập nhật {updated} prompts", + "parameters": "Thông số", + "addParameter": "Thêm tham số", + "noParameters": "Không có tham số", + "noParametersDesc": "Nhấp vào nút ở trên để thêm tham số, có thể được sử dụng để tạo các phần giữ chỗ biến trong prompts", + "parameterName": "Tên thông số", + "parameterDescription": "Mô tả thông số", + "parameterNamePlaceholder": "Vui lòng nhập tên thông số", + "parameterDescriptionPlaceholder": "Vui lòng nhập mô tả thông số", + "required": "Bắt buộc", + "characters": "nhân vật", + "fileManagement": "Quản lý tập tin", + "uploadFromDevice": "Tải lên từ thiết bị", + "uploadFromDeviceDesc": "Hỗ trợ văn bản, tài liệu, CSV, v.v.", + "uploadedFiles": "Tệp đã tải lên", + "noFiles": "Không có tập tin", + "noFilesUploadDesc": "Nhấp vào bên trên để tải tập tin lên", + "uploadSuccess": "Tải lên thành công", + "uploadedCount": "Đã tải lên tệp {count}", + "confirmDelete": "Bạn có chắc chắn muốn xóa prompt \"{name}\" không?", + "confirmDeleteDescription": "Không thể hoàn tác hành động này. prompt sẽ bị xóa vĩnh viễn.", + "confirmDeleteSystemPrompt": "Bạn có chắc chắn muốn xóa system prompt \"{name}\" không?", + "confirmDeleteSystemPromptDescription": "Không thể hoàn tác hành động này. system prompt sẽ bị xóa vĩnh viễn.", + "deleteSuccess": "Prompt Đã xóa", + "deleteFailed": "Không thể xóa Prompt", + "inactive": "Không hoạt động", + "clickToEnable": "Bấm để kích hoạt", + "clickToDisable": "Bấm để vô hiệu hóa", + "enableSuccess": "Đã bật Prompt", + "disableSuccess": "Prompt bị vô hiệu hóa", + "toggleFailed": "Không thể thay đổi trạng thái", + "enablePrompt": "Kích hoạt prompt này", + "sourceLocal": "Địa phương", + "sourceImported": "Đã nhập", + "sourceBuiltin": "Tích hợp sẵn", + "defaultSystemPrompt": "System Prompt mặc định", + "defaultSystemPromptPlaceholder": "Nhập system prompt mặc định sẽ được sử dụng cho tất cả các cuộc hội thoại mới...", + "defaultSystemPromptDescription": "prompt này sẽ áp dụng cho tất cả các cuộc hội thoại mới. Bạn có thể sửa đổi nó khi tạo một cuộc trò chuyện. Lưu ý rằng cài đặt này sẽ có hiệu lực vào lần tiếp theo bạn tạo cuộc trò chuyện mới.", + "typing": "Đang gõ...", + "saving": "Đang lưu...", + "saved": "Đã lưu", + "saveDefaultPromptFailed": "Không lưu được system prompt mặc định", + "systemPrompts": "System Prompt", + "customPrompts": "Prompt tùy chỉnh", + "addSystemPrompt": "Thêm System Prompt", + "addCustomPrompt": "Thêm Prompt tùy chỉnh", + "editSystemPrompt": "Chỉnh sửa System Prompt", + "addSystemPromptDesc": "Tạo system prompt mới", + "editSystemPromptDesc": "Sửa đổi system prompt đã chọn", + "selectSystemPrompt": "Chọn System Prompt", + "systemPromptDescription": "system prompt được chọn sẽ được sử dụng làm mặc định cho các cuộc hội thoại mới", + "emptySystemPromptOption": "Không có System Prompt", + "emptySystemPromptDescription": "Khi tùy chọn này được chọn, các cuộc hội thoại mới sẽ bắt đầu mà không có system prompt.", + "preview": "Xem trước", + "systemPromptChanged": "Hệ thống prompt đã thay đổi thành công", + "systemPromptChangeFailed": "Không thể thay đổi system prompt", + "systemPromptAdded": "Hệ thống prompt được thêm thành công", + "systemPromptAddedAndSwitched": "Đã thêm hệ thống prompt và tự động đặt làm mặc định", + "systemPromptUpdated": "Hệ thống prompt được cập nhật thành công", + "systemPromptSaveFailed": "Không lưu được system prompt", + "systemPromptDeleted": "Hệ thống prompt đã được xóa thành công", + "systemPromptDeleteFailed": "Không xóa được system prompt", + "systemPromptEditTip": "Tự động lưu khi mất tiêu điểm sau khi chỉnh sửa", + "resetToDefault": "Đặt lại về mặc định", + "resetToDefaultSuccess": "Đặt lại thành công nội dung mặc định", + "resetToDefaultFailed": "Không thể đặt lại về mặc định", + "parameterRequired": "Thông số bắt buộc" +} diff --git a/src/renderer/src/i18n/vi-VN/routes.json b/src/renderer/src/i18n/vi-VN/routes.json new file mode 100644 index 000000000..fbbed100b --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/routes.json @@ -0,0 +1,24 @@ +{ + "chat": "Trò chuyện", + "welcome": "Chào mừng", + "settings": "Cài đặt", + "settings-common": "Cài đặt chung", + "settings-provider": "Nhà cung cấp", + "settings-mcp": "Cài đặt MCP", + "settings-deepchat-agents": "DeepChat Agent", + "settings-database": "dữ liệu", + "settings-about": "Giới thiệu", + "settings-shortcut": "Phím tắt", + "settings-display": "Hiển thị", + "settings-knowledge-base": "Cơ sở kiến thức", + "settings-prompt": "Prompt", + "settings-mcp-market": "Chợ MCP", + "settings-acp": "ACP Agent", + "settings-skills": "Skills", + "settings-notifications-hooks": "móc", + "settings-dashboard": "Trang tổng quan", + "settings-environments": "Môi trường", + "settings-remote": "Từ xa", + "settings-plugins": "Plugin", + "settings-overview": "Tổng quan về cài đặt" +} diff --git a/src/renderer/src/i18n/vi-VN/settings.json b/src/renderer/src/i18n/vi-VN/settings.json new file mode 100644 index 000000000..d95132cf2 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/settings.json @@ -0,0 +1,2196 @@ +{ + "title": "Cài đặt", + "common": { + "title": "Cài đặt chung", + "resetData": "Đặt lại dữ liệu", + "language": "Ngôn ngữ", + "languageSelect": "Chọn ngôn ngữ", + "searchEngine": "Công cụ tìm kiếm", + "searchEngineSelect": "Chọn công cụ tìm kiếm", + "searchPreview": "Xem trước tìm kiếm", + "launchAtLoginEnabled": "Bắt đầu DeepChat khi đăng nhập", + "autoScrollEnabled": "Tự động cuộn trong khi tạo", + "privacyMode": "Chế độ riêng tư", + "privacyModeDescription": "Dừng các yêu cầu gửi đi tự động thuộc sở hữu của DeepChat:", + "privacyModeAutoUpdate": "Kiểm tra cập nhật ứng dụng", + "privacyModeProviderDb": "Làm mới siêu dữ liệu của nhà cung cấp và mô hình", + "privacyModeAcpRegistry": "Làm mới sổ đăng ký ACP và đồng bộ hóa biểu tượng", + "privacyModeNpmRegistry": "Tự động phát hiện đăng ký MCP npm", + "privacyModeManualActions": "Kiểm tra thủ công và hành động làm mới thủ công vẫn có sẵn.", + "privacyModeIntegrations": "Tích hợp bên thứ ba được định cấu hình vẫn có sẵn.", + "autoCompaction": { + "title": "Tự động nén", + "enabled": "Bật tự động nén", + "description": "Khi một cuộc trò chuyện đạt đến giới hạn cửa sổ ngữ cảnh mô hình, DeepChat có thể tự động tóm tắt lịch sử cũ hơn để phiên tiếp tục diễn ra. Nếu bị tắt, lịch sử tràn sẽ bị loại bỏ trực tiếp thay vì được tóm tắt.", + "thresholdLabel": "Ngưỡng kích hoạt", + "thresholdMin": "Sớm ({value}%)", + "thresholdMax": "Muộn ({value}%)", + "thresholdDescription": "Bắt đầu nén khi mức sử dụng prompt đạt đến mức chia sẻ này trong ngân sách lịch sử hiệu quả. Giá trị thấp hơn tạo ra nhiều khoảng trống hơn; giá trị cao hơn bảo tồn bối cảnh thô hơn.", + "retainPairsLabel": "Giữ lại các cặp tin nhắn gần đây", + "retainPairsValue": "(Các) cặp {count}", + "retainPairsDescription": "Giữ các cặp người dùng và trợ lý đã hoàn thành gần đây nhất bên ngoài quá trình nén. Truy vấn hiện tại không được bao gồm." + }, + "searchAssistantModel": "Trợ lý người mẫu", + "selectModel": "Chọn mẫu", + "proxyMode": "Chế độ ủy nhiệm", + "proxyModeSelect": "Chọn chế độ proxy", + "proxyModeSystem": "Proxy hệ thống", + "proxyModeNone": "Không có ủy quyền", + "proxyModeCustom": "Proxy tùy chỉnh", + "customProxyUrl": "Proxy tùy chỉnh URL", + "customProxyUrlPlaceholder": "Ví dụ: http://127.0.0.1:7890", + "invalidProxyUrl": "Proxy URL không hợp lệ, vui lòng nhập http/https URL hợp lệ", + "addCustomSearchEngine": "Thêm công cụ tìm kiếm tùy chỉnh", + "addCustomSearchEngineDesc": "Thêm công cụ tìm kiếm mới bằng cách cung cấp tên và tìm kiếm URL. URL phải bao gồm {query} làm phần giữ chỗ truy vấn.", + "searchEngineName": "Tên công cụ tìm kiếm", + "searchEngineNamePlaceholder": "Nhập tên công cụ tìm kiếm", + "searchEngineUrl": "Tìm kiếm URL", + "searchEngineUrlPlaceholder": "Ví dụ: https://a.com/search?q={'{'}query{'}'}", + "searchEngineUrlError": "URL phải bao gồm {'{'}query{'}'} làm phần giữ chỗ truy vấn", + "deleteCustomSearchEngine": "Xóa Công cụ Tìm kiếm Tùy chỉnh", + "deleteCustomSearchEngineDesc": "Bạn có chắc chắn muốn xóa công cụ tìm kiếm tùy chỉnh \"{name}\" không? Không thể hoàn tác hành động này.", + "testSearchEngine": "Kiểm tra công cụ tìm kiếm", + "testSearchEngineDesc": "Tìm kiếm thử nghiệm cho \"thời tiết\" sẽ được thực hiện bằng công cụ tìm kiếm {engine}.", + "testSearchEngineNote": "Nếu trang tìm kiếm yêu cầu đăng nhập hoặc các hành động khác, bạn có thể thực hiện chúng trong cửa sổ kiểm tra. Vui lòng đóng cửa sổ kiểm tra khi bạn hoàn tất.", + "theme": "chủ đề", + "themeSelect": "Chọn chủ đề", + "themeLight": "Ánh sáng", + "themeDark": "Tối", + "themeSystem": "Theo dõi hệ thống", + "closeToQuit": "Thoát ứng dụng khi đóng cửa sổ", + "contentProtectionDialogTitle": "Xác nhận thay đổi bảo vệ màn hình", + "contentProtectionEnableDesc": "Ngăn các ứng dụng chia sẻ màn hình chụp cửa sổ DeepChat để giúp bảo vệ quyền riêng tư của bạn. Không phải tất cả các ứng dụng đều tôn trọng cài đặt này; trong một số môi trường, cửa sổ màu đen có thể vẫn còn.", + "contentProtectionDisableDesc": "Cho phép các ứng dụng chia sẻ màn hình chụp cửa sổ DeepChat.", + "contentProtectionRestartNotice": "Việc thay đổi cài đặt này sẽ khởi động lại ứng dụng. Bạn có muốn tiếp tục không?", + "copyWithCotEnabled": "Sao chép chi tiết COT", + "traceDebugEnabled": "Cuộc gọi theo dõi", + "loggingEnabled": "Bật ghi nhật ký", + "loggingDialogTitle": "Xác nhận thay đổi cài đặt ghi nhật ký", + "loggingEnableDesc": "Việc bật ghi nhật ký sẽ giúp chúng tôi chẩn đoán sự cố và cải thiện ứng dụng. Tệp nhật ký có thể chứa thông tin nhạy cảm.", + "loggingDisableDesc": "Việc tắt tính năng ghi nhật ký sẽ ngừng thu thập nhật ký ứng dụng.", + "charactersUnit": "nhân vật", + "loggingRestartNotice": "Việc thay đổi cài đặt này sẽ khởi động lại ứng dụng. Bạn có muốn tiếp tục không?", + "openLogFolder": "Mở thư mục nhật ký", + "shortcut": { + "newChat": "Tạo cuộc trò chuyện mới", + "title": "Cài đặt phím tắt" + }, + "notifications": "Thông báo hệ thống", + "notificationsDesc": "Khi DeepChat không ở nền trước, nếu một phiên được tạo, thông báo hệ thống sẽ được gửi", + "contentProtection": "Bảo vệ chụp ảnh màn hình", + "fileMaxSize": "Kích thước tối đa của tệp", + "fileMaxSizeHint": "Giới hạn kích thước tối đa của một tệp được tải lên", + "defaultModel": { + "title": "Mẫu mặc định", + "chatModel": "Mô hình trò chuyện mặc định" + } + }, + "deepchatAgents": { + "title": "DeepChat Agent", + "description": "Quản lý các tác nhân DeepChat và các giá trị mặc định mà chúng đưa vào các phiên mới.", + "builtIn": "Tích hợp sẵn", + "editTitle": "Chỉnh sửa DeepChat Agent", + "createTitle": "Tạo DeepChat Agent", + "unnamed": "Agent chưa được đặt tên", + "name": "Tên", + "namePlaceholder": "Ví dụ: Nhà văn/Nghiên cứu/Dịch thuật", + "enabledLabel": "Đã bật", + "descriptionLabel": "Mô tả", + "descriptionPlaceholder": "Ghi chú tùy chọn về công việc của tác nhân này", + "avatarTitle": "Hình đại diện", + "avatarDefault": "Mặc định", + "avatarDefaultDesc": "DeepChat giữ biểu tượng tích hợp. Các đại lý khác sử dụng hình đại diện văn bản.", + "avatarLucide": "Biểu tượng Lucide", + "avatarLucideDesc": "Chọn biểu tượng Lucide và đặt màu light/dark.", + "avatarMonogram": "Chữ lồng", + "avatarMonogramDesc": "Sử dụng hai chữ cái Latinh hoặc ký tự CJK đầu tiên.", + "lucideIcon": "Tên biểu tượng Lucide", + "lightColor": "Màu sáng", + "darkColor": "Màu tối", + "monogramText": "Chữ lồng", + "monogramPlaceholder": "Ví dụ: WR/研", + "backgroundColor": "Màu nền", + "modelsTitle": "Mặc định của mô hình", + "chatModel": "Mô hình trò chuyện mặc định", + "assistantModel": "Trợ lý người mẫu", + "visionModel": "Mô hình tầm nhìn", + "imageGenerationModel": "Mô hình tạo hình ảnh", + "temperature": "Nhiệt độ", + "contextLength": "Độ dài ngữ cảnh", + "maxTokens": "Tối đa Tokens", + "thinkingBudget": "Suy nghĩ về ngân sách", + "reasoningEffort": "Nỗ lực lý luận", + "verbosity": "Độ dài", + "interleaved": "Buộc tương thích tư duy xen kẽ", + "systemPrompt": "system prompt mặc định", + "systemPromptPlaceholder": "Để trống cho system prompt trống", + "defaultProjectPath": "Thư mục mặc định (tùy chọn)", + "defaultProjectPathPlaceholder": "Để trống để sử dụng thư mục mặc định chung", + "permissionMode": "Quyền mặc định", + "permissionFullAccess": "Toàn quyền truy cập", + "permissionDefault": "Quyền mặc định", + "subagentsTitle": "Chất phụ", + "subagentsDescription": "Định cấu hình các vị trí phiên con có thể tái sử dụng được hiển thị cho subagent_orchestrator.", + "subagentsEnabled": "Kích hoạt subagent", + "subagentTargetType": "Loại mục tiêu", + "subagentTargetSelf": "bản thân", + "subagentTargetAgent": "Agent", + "subagentDisplayName": "Tên hiển thị", + "subagentDescription": "Mô tả vị trí", + "subagentTargetAgentLabel": "Đại lý mục tiêu", + "subagentLimit": "Khe cắm {count}/{max}", + "addSubagentSlot": "+ Thêm khe cắm", + "toolsTitle": "Công cụ tích hợp", + "compactionTitle": "Tự động nén", + "compactionEnabled": "Bật tự động nén", + "compactionDescription": "Các giá trị mặc định này chỉ ảnh hưởng đến các phiên DeepChat trong tương lai.", + "compactionThreshold": "Ngưỡng kích hoạt", + "compactionRetainPairs": "Giữ lại các cặp gần đây", + "deleteConfirm": "Xóa tác nhân \"{name}\"? Lịch sử của nó sẽ quay trở lại tác nhân DeepChat tích hợp sẵn." + }, + "notificationsHooks": { + "title": "móc", + "description": "Cấu hình các lệnh móc vòng đời.", + "events": { + "title": "Sự kiện", + "SessionStart": "Bắt đầu phiên", + "UserPromptSubmit": "Người dùng Prompt Gửi", + "PreToolUse": "Sử dụng công cụ trước", + "PostToolUse": "Đăng công cụ sử dụng", + "PostToolUseFailure": "Lỗi sử dụng công cụ", + "PermissionRequest": "Yêu cầu cấp phép", + "Stop": "Dừng lại", + "SessionEnd": "Kết thúc phiên" + }, + "commands": { + "title": "Lệnh móc", + "description": "Chạy các lệnh tùy chỉnh cho các sự kiện vòng đời đã chọn.", + "hint": "Toàn bộ tải trọng được gửi tới stdin dưới dạng JSON.", + "commandPlaceholder": "Lệnh chạy", + "commandLabel": "Lệnh", + "name": "Tên", + "namePlaceholder": "Tên móc", + "newHook": "Móc mới", + "empty": "Chưa có móc. Thêm một để bắt đầu.", + "defaultName": "Móc {index}", + "guideTitle": "Cách sử dụng", + "guideDescription": "Khi một sự kiện được kiểm tra kích hoạt, DeepChat sẽ chạy lệnh. Sự kiện hiện tại có sẵn từ stdin JSON, biến môi trường và phần giữ chỗ lệnh.", + "deliveryTitle": "Dữ liệu được truyền như thế nào", + "deliveryStdin": "Tải trọng đầy đủ được ghi vào stdin dưới dạng JSON.", + "deliveryPlaceholder": "Bạn có thể đặt phần giữ chỗ lệnh trực tiếp trong dòng lệnh.", + "deliveryEnv": "Siêu dữ liệu cốt lõi tương tự cũng được hiển thị dưới dạng các biến môi trường.", + "metadataOnly": "Trình giữ chỗ lệnh là tốt nhất cho siêu dữ liệu nhỏ. Đọc các trường chi tiết, quyền, cách sử dụng, dừng và lỗi prompt/tool từ stdin JSON.", + "stdinPreviewLabel": "ví dụ stdin", + "placeholdersTitle": "Phần giữ chỗ lệnh", + "placeholdersDescription": "Phần giữ chỗ được mở rộng trước khi thực thi, do đó chúng có thể được chuyển dưới dạng đối số lệnh.", + "envTitle": "Biến môi trường", + "examplesTitle": "Ví dụ", + "exampleNodeLabel": "Node.js", + "examplePythonLabel": "Python", + "examplePowerShellLabel": "PowerShell", + "fields": { + "event": "Tên sự kiện hiện tại", + "time": "Thời gian sự kiện ở định dạng ISO-8601", + "isTest": "Liệu lần chạy này có xuất phát từ nút Kiểm tra hay không", + "conversationId": "ID conversation/session hiện tại", + "workdir": "Đã giải quyết thư mục làm việc cho phiên", + "agentId": "ID đại lý hiện tại khi có sẵn", + "providerId": "ID nhà cung cấp hiện tại khi có sẵn", + "modelId": "ID mẫu hiện tại khi có sẵn", + "messageId": "ID tin nhắn người dùng hiện tại khi có sẵn", + "toolName": "Tên công cụ hiện tại khi có sẵn", + "toolCallId": "ID cuộc gọi công cụ hiện tại khi có sẵn" + } + }, + "test": { + "button": "kiểm tra", + "testing": "Đang thử nghiệm...", + "success": "thành công", + "failed": "thất bại", + "duration": "{ms} ms", + "statusCode": "HTTP {code}", + "exitCode": "Thoát {code}", + "retryAfter": "Thử lại sau {ms} ms", + "stdout": "thiết bị xuất chuẩn", + "stderr": "lỗi chuẩn" + } + }, + "data": { + "title": "Cài đặt dữ liệu", + "syncEnable": "Bật đồng bộ hóa dữ liệu", + "syncFolder": "Đồng bộ thư mục", + "openSyncFolder": "Mở thư mục đồng bộ hóa", + "lastSyncTime": "Thời gian đồng bộ hóa lần cuối", + "never": "không bao giờ", + "startBackup": "Sao lưu ngay", + "backingUp": "Đang sao lưu...", + "importData": "Nhập dữ liệu", + "incrementImport": "Nhập khẩu gia tăng", + "overwriteImport": "Ghi đè nhập", + "backupSelectLabel": "Chọn sao lưu", + "backupSelectDescription": "Chọn ảnh chụp nhanh sao lưu để nhập.", + "selectBackupPlaceholder": "Chọn bản sao lưu", + "noBackupsAvailable": "Không có bản sao lưu nào có sẵn. Chạy bản sao lưu trước.", + "importConfirmTitle": "Xác nhận nhập dữ liệu", + "importConfirmDescription": "Quá trình nhập sẽ ghi đè tất cả dữ liệu hiện tại, bao gồm cả lịch sử trò chuyện và cài đặt. Hãy chắc chắn rằng bạn đã sao lưu dữ liệu quan trọng. Dữ liệu sẽ tự động làm mới sau khi nhập.", + "importing": "Đang nhập khẩu...", + "confirmImport": "Xác nhận nhập", + "importSuccessTitle": "Nhập thành công", + "importErrorTitle": "Nhập không thành công", + "resetData": "Đặt lại dữ liệu", + "resetConfirmTitle": "Xác nhận đặt lại dữ liệu", + "resetConfirmDescription": "Vui lòng chọn loại dữ liệu để thiết lập lại. Thao tác này không thể hoàn tác và ứng dụng sẽ tự động khởi động lại sau khi đặt lại.", + "resetChatData": "Đặt lại dữ liệu trò chuyện", + "resetChatDataDesc": "Xóa tất cả lịch sử trò chuyện và bản ghi cuộc trò chuyện", + "resetKnowledgeData": "Đặt lại dữ liệu cơ sở kiến thức", + "resetKnowledgeDataDesc": "Xóa tất cả các tệp cơ sở tri thức và dữ liệu vectơ", + "resetConfig": "Đặt lại cấu hình", + "resetConfigDesc": "Xóa tất cả cài đặt ứng dụng, cấu hình mô hình và prompts tùy chỉnh", + "resetAll": "Hoàn tất thiết lập lại", + "resetAllDesc": "Xóa tất cả dữ liệu bao gồm lịch sử trò chuyện, cấu hình và tệp bộ đệm", + "resetting": "Đang đặt lại...", + "confirmReset": "Xác nhận đặt lại", + "resetCompleteDevTitle": "Hoàn tất thiết lập lại dữ liệu", + "resetCompleteDevMessage": "Vui lòng khởi động lại ứng dụng theo cách thủ công ở chế độ phát triển. Dừng quá trình hiện tại và chạy lại pnpm run dev", + "toast": { + "backupSuccessTitle": "Sao lưu thành công", + "backupSuccessMessage": "Sao lưu dữ liệu thành công" + }, + "syncSectionTitle": "Sao lưu và đồng bộ hóa", + "operationsSectionTitle": "Hoạt động dữ liệu", + "resetDataDescription": "Đặt lại trò chuyện, kiến thức, cấu hình hoặc tất cả dữ liệu theo loại.", + "databaseRepair": { + "title": "Sửa chữa cơ sở dữ liệu", + "description": "Phát hiện và tự động sửa chữa cơ sở dữ liệu", + "button": "Kiểm tra và sửa chữa cơ sở dữ liệu", + "running": "Kiểm tra và sửa chữa...", + "lastResultLabel": "Kết quả cuối cùng: {result}", + "summaryHealthy": "khỏe mạnh", + "summaryRepaired": "Đã sửa chữa (các) sự cố {count}", + "summaryRepairedWithManual": "Đã sửa chữa (các) sự cố {repaired}, (các) sự cố thủ công {manual}", + "summaryManualOnly": "(Các) vấn đề hướng dẫn sử dụng {manual} cần được chú ý", + "manualHint": "(Các) sự cố {count} vẫn yêu cầu xử lý thủ công.", + "toastSuggestedTitle": "Đề xuất sửa chữa cơ sở dữ liệu", + "toastSuggestedDescription": "DeepChat đã phát hiện sự cố lược đồ ({reason}). Bạn có thể chạy sửa chữa cơ sở dữ liệu ngay bây giờ.", + "toastAction": "Đi sửa chữa", + "toastHealthyTitle": "Cơ sở dữ liệu khỏe mạnh", + "toastHealthyDescription": "Không tìm thấy vấn đề về lược đồ.", + "toastCompletedTitle": "Sửa chữa cơ sở dữ liệu đã hoàn tất", + "toastRepairedDescription": "Đã sửa chữa (các) sự cố {count}.", + "toastManualDescription": "Đã sửa chữa (các) sự cố {repaired}. (Các) sự cố {manual} vẫn cần xử lý thủ công.", + "toastFailedTitle": "Sửa chữa cơ sở dữ liệu không thành công", + "toastFailedDescription": "Không thể hoàn tất quá trình sửa chữa cơ sở dữ liệu ngay bây giờ. Vui lòng kiểm tra nhật ký và thử lại.", + "reasons": { + "missing-table": "bàn bị thiếu", + "missing-column": "cột bị thiếu", + "column-count-mismatch": "số cột không khớp", + "type-mismatch": "loại cột không khớp" + } + }, + "databaseEncryption": { + "title": "Mã hóa cơ sở dữ liệu SQLite", + "description": "Mã hóa Agent.db bằng SQLCipher và yêu cầu mật khẩu SQLite khi không thể sử dụng tính năng mở khóa hệ thống.", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "cipher": "mật mã", + "systemUnlock": "Mở khóa hệ thống", + "startupUnlock": "Mở khóa khởi động", + "lastMigration": "Lần di chuyển cuối cùng", + "loading": "Đang tải", + "never": "không bao giờ", + "notRequired": "Không bắt buộc", + "systemUnlockAvailable": "Có sẵn", + "systemUnlockUnavailable": "Không có sẵn", + "systemUnlockMode": "Mở khóa hệ thống", + "manualUnlock": "Mật khẩu thủ công", + "currentPassword": "Mật khẩu hiện tại", + "newPassword": "Mật khẩu SQLite mới", + "confirmPassword": "Xác nhận mật khẩu", + "passwordMismatch": "Mật khẩu không khớp", + "systemCredentialStore": "Khi có sẵn bộ nhớ bảo mật hệ thống, DeepChat sẽ lưu mật khẩu SQLite trong kho thông tin xác thực của hệ điều hành (macOS Blockchain, Windows Credential Vault hoặc kho lưu trữ bí mật Linux). Sau một lần mở khóa thành công, các phần khởi động sau này thường tự động mở; bạn chỉ cần nhập lại khóa mã hóa sau khi di chuyển dữ liệu, khi thiếu thông tin xác thực hệ điều hành hoặc không thể giải mã được hoặc khi không có bộ lưu trữ an toàn.", + "safeStorageUnavailable": "Electron safeStorage không có sẵn trên hệ thống này. Sau khi kích hoạt mã hóa, bạn phải nhập mật khẩu mỗi lần khởi động.", + "enableButton": "Bật mã hóa", + "changeButton": "Thay đổi mật khẩu", + "disableButton": "Tắt mã hóa", + "enabledTitle": "Đã bật mã hóa cơ sở dữ liệu", + "changedTitle": "Mật khẩu SQLite đã thay đổi", + "disabledTitle": "Mã hóa cơ sở dữ liệu bị vô hiệu hóa", + "failedTitle": "Mã hóa cơ sở dữ liệu không thành công", + "failedDescription": "Hãy kiểm tra mật khẩu và thử lại.", + "setPasswordButton": "Đặt mật khẩu", + "enableDialogTitle": "Đặt mật khẩu SQLite", + "changeDialogTitle": "Đổi mật khẩu SQLite", + "disableDialogTitle": "Vô hiệu hóa mã hóa cơ sở dữ liệu", + "enableDialogDescription": "Tạo cơ sở dữ liệu SQLite được mã hóa và di chuyển dữ liệu cục bộ hiện tại vào đó.", + "changeDialogDescription": "Di chuyển cơ sở dữ liệu được mã hóa hiện tại sang cơ sở dữ liệu được mã hóa mới bằng mật khẩu mới.", + "disableDialogDescription": "Di chuyển cơ sở dữ liệu được mã hóa hiện tại trở lại cơ sở dữ liệu cục bộ dạng văn bản gốc.", + "cancelButton": "Hủy bỏ", + "unknown": "Không xác định" + }, + "modelConfigUpdate": { + "title": "Cập nhật cấu hình mẫu", + "descriptionPrefix": "Đồng bộ hóa dữ liệu mô hình từ ", + "linkLabel": "ThinkInAIXYZ/PublicProviderConf", + "descriptionSuffix": ".", + "button": "Cập nhật ngay", + "updating": "Đang cập nhật...", + "updatedTitle": "Đã cập nhật cấu hình mô hình", + "updatedDescription": "Siêu dữ liệu nhà cung cấp mới nhất đã được làm mới.", + "upToDateTitle": "Đã cập nhật", + "upToDateDescription": "Cấu hình mô hình cục bộ của bạn hiện đang sử dụng siêu dữ liệu mới nhất của nhà cung cấp.", + "failedTitle": "Cập nhật không thành công", + "failedDescription": "Không thể làm mới cấu hình mô hình ngay bây giờ. Vui lòng thử lại sau." + }, + "yoBrowser": { + "clearButton": "Xóa dữ liệu YoBrowser", + "clearFailedDescription": "Vui lòng thử lại hoặc kiểm tra nhật ký để biết thêm thông tin.", + "clearFailedTitle": "Xóa không thành công", + "clearedDescription": "Phiên hộp cát đã được đặt lại và tab liên quan sẽ được tải lại.", + "clearedTitle": "Đã xóa dữ liệu YoBrowser", + "clearing": "Dọn dẹp...", + "confirmAction": "Xóa ngay bây giờ", + "confirmDescription": "Cookie, bộ nhớ đệm, LocalStorage, IndexedDB và các dữ liệu khác của phiên YoBrowser sẽ bị xóa và bạn có thể cần phải đăng nhập lại vào trang web.", + "confirmTitle": "Xác nhận xóa dữ liệu YoBrowser?", + "description": "Hộp cát trình duyệt độc lập không chia sẻ cookie và bộ nhớ cục bộ với ứng dụng chính. \nDữ liệu YoBrowser có thể bị xóa chỉ bằng một cú nhấp chuột vào đây.", + "title": "Hộp cát YoBrowser" + }, + "privacyTitle": "Dữ liệu & Quyền riêng tư", + "privacyDescription": "Quản lý sao lưu, đồng bộ hóa, chế độ riêng tư, bảo trì và các hoạt động nguy hiểm.", + "dangerZone": { + "title": "Vùng nguy hiểm", + "description": "Đặt lại trò chuyện, kiến thức hoặc tất cả dữ liệu. Điều này không thể hoàn tác được." + }, + "providerImport": { + "entryTitle": "Nhập cài đặt nhà cung cấp", + "entryDescription": "Quét CC Switch, Alma, Cherry Studio, Hermes và OpenClaw để biết thông tin đăng nhập của nhà cung cấp và danh sách mẫu.", + "entryButton": "Nhập khẩu từ đại lý", + "dialogTitle": "Nhập từ đại lý khác", + "dialogDescription": "Trước tiên hãy chọn các ứng dụng được phát hiện, sau đó xem xét các nhà cung cấp mà DeepChat có thể nhập.", + "toastTitle": "Nhập nhà cung cấp đã hoàn tất", + "toastDescription": "(Các) nhà cung cấp {count} đã nhập.", + "steps": { + "scan": "Quét", + "providers": "Nhà cung cấp", + "done": "Xong" + }, + "scanningTitle": "Quét các tác nhân đã cài đặt", + "scanningDescription": "DeepChat kiểm tra các tệp cấu hình cục bộ đã biết mà không gửi dữ liệu đi bất cứ đâu.", + "scanFailedTitle": "Quét không thành công", + "sourcesTitle": "Nguồn được phát hiện", + "sourcesDescription": "Chọn một hoặc nhiều đại lý. Các tác nhân được chọn sẽ được xử lý theo thứ tự được hiển thị.", + "selectedSources": "Đã chọn {selected}/{total}", + "noSourcesTitle": "Không tìm thấy cấu hình nhà cung cấp có thể nhập", + "noSourcesDescription": "Trước tiên hãy cài đặt một trong các tác nhân được hỗ trợ hoặc định cấu hình thông tin xác thực của nhà cung cấp ở đó.", + "providersFound": "(Các) nhà cung cấp {count}", + "sourceProgress": "{current} của {total}", + "overwriteNote": "Nếu nhiều nhà cung cấp được chọn ánh xạ tới cùng một nhà cung cấp DeepChat thì nguồn sau sẽ ghi đè nguồn trước đó.", + "noProvidersTitle": "Không có dữ liệu nhà cung cấp trong nguồn này", + "noProvidersDescription": "Tác nhân này đã được chọn, nhưng không tìm thấy mục nhập nhà cung cấp có thể nhập nào.", + "apiKey": "Khóa {value}", + "noModels": "Không có danh sách mô hình", + "modelsImported": "(Các) mẫu {count}", + "importingTitle": "Nhà cung cấp nhập khẩu", + "importingDescription": "DeepChat đang viết các nhà cung cấp được chọn và các mục nhập mô hình tùy chỉnh.", + "doneTitle": "Tóm tắt nhập khẩu", + "doneDescription": "(Các) nhà cung cấp {count} đã nhập. Xem lại kết quả của mỗi nhà cung cấp bên dưới.", + "badges": { + "configured": "Đã định cấu hình" + }, + "sourceStatus": { + "found": "Đã tìm thấy", + "not_found": "Không tìm thấy", + "error": "Lỗi", + "unsupported_platform": "Nền tảng không được hỗ trợ" + }, + "targetKind": { + "builtin": "Tích hợp sẵn", + "custom": "tùy chỉnh", + "unsupported": "Không được hỗ trợ" + }, + "warnings": { + "already_configured": "Đã được cấu hình trong DeepChat nên nó không được chọn theo mặc định.", + "missing_api_key": "Thiếu khóa API hoặc điểm cuối bắt buộc.", + "unsupported_provider": "DeepChat không thể tự động nhập nhà cung cấp này.", + "overwrites_previous_selection": "Lựa chọn này xung đột với nguồn trước đó.", + "credential_only_import": "Chỉ khóa API sẽ được nhập; DeepChat giữ điểm cuối và thời gian chạy tích hợp sẵn." + }, + "conflicts": { + "overridesPrevious": "Lựa chọn này sẽ ghi đè lên nhà cung cấp đã chọn trước đó.", + "overwrittenByLater": "Nguồn được chọn sau này sẽ ghi đè lên nhà cung cấp này." + }, + "summary": { + "imported": "Đã nhập", + "created": "Đã tạo", + "updated": "Đã cập nhật", + "overwritten": "Ghi đè", + "models": "Người mẫu", + "skipped": "Đã bỏ qua" + }, + "resultStatus": { + "created": "Đã tạo", + "updated": "Đã cập nhật", + "skipped": "Đã bỏ qua", + "overwritten": "Ghi đè" + }, + "actions": { + "rescan": "Quét lại", + "selectAll": "Chọn tất cả", + "clearSelected": "Xóa", + "import": "Đã chọn nhập" + }, + "apiTypes": { + "openaiCompletions": "Số lần hoàn thành trò chuyện OpenAI", + "openai": "OpenAI", + "openaiResponses": "Phản hồi OpenAI", + "anthropic": "Anthropic", + "gemini": "Gemini", + "ollama": "Ollama", + "mistral": "AI của Mistral" + }, + "applyFailed": "Nhập không thành công: {message}" + } + }, + "dashboard": { + "badge": "Trang tổng quan sử dụng", + "title": "Trang tổng quan sử dụng", + "description": "Theo dõi việc sử dụng token, số lần truy cập bộ đệm và chi phí ước tính. Token và số liệu chi phí được ước tính từ thông tin công khai và một số nhà cung cấp hoặc thông báo trước đó có thể không đầy đủ, vì vậy hãy coi những số liệu này chỉ mang tính chất tham khảo.", + "actions": { + "refresh": "Làm mới" + }, + "backfill": { + "runningTitle": "Cập nhật dữ liệu sử dụng", + "runningDescription": "Dữ liệu sử dụng vẫn đang được cập nhật ở chế độ nền. Kết quả hiện tại đã có sẵn.", + "failedTitle": "Không cập nhật được dữ liệu sử dụng", + "failedDescription": "Hãy làm mới trang này hoặc thử lại sau." + }, + "error": { + "title": "Không tải được trang tổng quan", + "description": "Vui lòng thử lại sau." + }, + "empty": { + "title": "Chưa có số liệu thống kê sử dụng", + "description": "Mức sử dụng Token, số lần truy cập bộ nhớ đệm và chi phí ước tính sẽ xuất hiện ở đây sau khi có dữ liệu sử dụng.", + "historyNote": "Token và số liệu chi phí được ước tính từ thông tin công khai. Một số nhà cung cấp hoặc tin nhắn trước đó có thể không đầy đủ, vì vậy hãy coi những số liệu này chỉ mang tính chất tham khảo." + }, + "summary": { + "totalTokens": "Tổng tokens", + "totalTokensDescription": "Cho biết đầu vào và đầu ra tokens đóng góp như thế nào vào tổng số.", + "inputTokensLabel": "đầu vào", + "outputTokensLabel": "đầu ra", + "cachedTokens": "Đã lưu vào bộ nhớ đệm tokens", + "cachedTokensDescription": "Prompt tokens được cung cấp từ bộ đệm của nhà cung cấp.", + "cachedTokensCachedLabel": "Đã lưu vào bộ nhớ đệm", + "cachedTokensUncachedLabel": "Không được lưu vào bộ nhớ đệm", + "cacheHitRate": "Tỷ lệ truy cập bộ đệm", + "cacheHitRateDescription": "prompt tokens được lưu vào bộ nhớ đệm chia cho tổng đầu vào tokens.", + "estimatedCost": "Chi phí ước tính", + "estimatedCostDescription": "Ước tính bằng USD sử dụng giá của nhà cung cấp hoặc giá dự phòng AIHubMix.", + "estimatedCostTrendLabel": "Xu hướng trong 30 ngày qua", + "estimatedCostTrendEmpty": "Không có chi phí nào được ghi lại trong 30 ngày qua.", + "recordingStartedAt": "Đã bắt đầu ghi", + "recordingStartedAtDescription": "Bản ghi sử dụng sớm nhất hiện được lưu trữ trong bảng thông tin này.", + "withDeepChatDaysLabel": "Ngày bên nhau", + "withDeepChatDaysValue": "{days} ngày", + "withDeepChatDaysSentence": "Bạn đang ở ngày {days} với DeepChat.", + "withDeepChatDaysDescription": "Dựa trên hồ sơ sử dụng sớm nhất của bạn từ {date}.", + "withDeepChatDaysDescriptionUnavailable": "Chưa có hồ sơ sử dụng.", + "tokenUsage": "Cách sử dụng Token", + "nostalgiaLabel": "Tiếng vang", + "nostalgiaDaysValue": "{days} ngày", + "nostalgiaSessionsValue": "Phiên {count}", + "nostalgiaMessagesValue": "Tin nhắn {count}", + "nostalgiaDaysDetailLabel": "Ngày bên nhau", + "nostalgiaDaysDetail": "Bạn và DeepChat đã trải qua những ngày {days} bên nhau.", + "nostalgiaSessionsDetailLabel": "Phiên", + "nostalgiaSessionsDetail": "Bạn đã chia sẻ các phiên {count} với nhau.", + "nostalgiaMessagesDetailLabel": "Tin nhắn", + "nostalgiaMessagesDetail": "Bạn đã trao đổi tin nhắn {count}.", + "nostalgiaMostActiveDayLabel": "Ngày năng động nhất", + "nostalgiaMostActiveDayDetail": "{date} là ngày bạn năng động nhất với tin nhắn {count}." + }, + "calendar": { + "title": "Lịch đóng góp", + "description": "Mức sử dụng token hàng ngày trong 365 ngày qua.", + "legend": "Ít hơn đến nhiều hơn", + "tooltip": "{date}: {tokens} tokens" + }, + "breakdown": { + "providerTitle": "Nhà cung cấp hàng đầu", + "providerDescription": "Xếp hạng theo chi phí ước tính, sau đó theo tổng tokens.", + "modelTitle": "Người mẫu hàng đầu", + "modelDescription": "10 mẫu hàng đầu theo chi phí ước tính, sau đó là tổng tokens.", + "messages": "Tin nhắn {count}", + "empty": "Chưa có dữ liệu phân tích." + }, + "rtk": { + "title": "Tiết kiệm RTK", + "description": "tokens ước tính đã bị RTK ngăn không cho tiếp cận ngữ cảnh mô hình trong quá trình thực thi lệnh gốc DeepChat.", + "actions": { + "retry": "Thử lại kiểm tra" + }, + "status": { + "disabled": "Đã tắt", + "checking": "Kiểm tra", + "healthy": "khỏe mạnh", + "unhealthy": "Không có sẵn" + }, + "descriptionDisabled": "RTK bị tắt trong phiên ứng dụng này nên các lệnh sẽ chạy qua đường dẫn thực thi thông thường.", + "descriptionChecking": "DeepChat đang xác minh xem RTK có thể chạy chính xác trong môi trường hiện tại hay không.", + "descriptionHealthy": "RTK đang hoạt động để thực thi lệnh gốc DeepChat.", + "descriptionUnhealthy": "RTK không vượt qua được quá trình kiểm tra tình trạng khởi động và đã bị vô hiệu hóa đối với phiên ứng dụng này.", + "sourceLabel": "Nguồn thời gian chạy: {source}", + "source": { + "bundled": "Đi kèm", + "system": "Hệ thống", + "none": "Không có sẵn" + }, + "summary": { + "savedTokens": "Đã lưu tokens", + "commands": "Lệnh được theo dõi", + "avgSavingsPct": "Tiết kiệm trung bình", + "outputTokens": "Đầu ra được lọc" + } + }, + "unavailable": "N/A" + }, + "modelConfigItem": { + "chatFallbackWarning": "Khả năng Agent yếu: chỉ hỗ trợ các lệnh gọi công cụ dự phòng cũ" + }, + "model": { + "title": "Cài đặt mẫu", + "systemPrompt": { + "label": "System Prompt", + "placeholder": "Vui lòng nhập system prompt...", + "description": "Đặt system prompt cho trợ lý AI để xác định hành vi và vai trò của nó" + }, + "temperature": { + "label": "Nhiệt độ mẫu", + "description": "Kiểm soát tính ngẫu nhiên của đầu ra; giá trị cao hơn tạo ra nhiều phản hồi sáng tạo hơn" + }, + "contextLength": { + "label": "Độ dài ngữ cảnh", + "description": "Đặt độ dài tối đa của bối cảnh hội thoại" + }, + "responseLength": { + "label": "Độ dài phản hồi", + "description": "Đặt độ dài tối đa của phản hồi AI" + }, + "artifacts": { + "description": "Kích hoạt tính năng Artifacts cho phép AI tạo ra nội dung phong phú hơn", + "title": "Hiện vật" + }, + "addModel": "Thêm mô hình", + "configureModel": "Cấu hình mô hình", + "modelList": "Danh sách mẫu", + "provider": "Nhà cung cấp dịch vụ", + "providerSetting": "Cài đặt nhà cung cấp dịch vụ", + "selectModel": "Chọn một mô hình", + "form": { + "id": { + "label": "Mã định danh" + } + }, + "modelConfig": { + "cancel": "Hủy bỏ", + "contextLength": { + "description": "Đặt độ dài ngữ cảnh mà mô hình có thể xử lý", + "label": "Độ dài ngữ cảnh" + }, + "description": "Xin lưu ý rằng cấu hình này chỉ hợp lệ cho model hiện tại và sẽ không ảnh hưởng đến các model khác. Hãy sửa đổi nó một cách thận trọng. Các tham số không chính xác có thể khiến mô hình không hoạt động chính xác.", + "name": { + "label": "Tên mẫu", + "description": "Tên hiển thị của mô hình", + "placeholder": "Nhập tên mẫu", + "required": "Tên mẫu là bắt buộc", + "readonly": "Tên mẫu (chỉ đọc)" + }, + "id": { + "label": "Mã mẫu", + "description": "Mã định danh duy nhất của mô hình", + "placeholder": "Nhập ID mẫu", + "required": "ID mẫu là bắt buộc", + "readonly": "ID mẫu (chỉ đọc)", + "duplicate": "Một mô hình có ID này đã tồn tại" + }, + "createTitle": "Thêm mô hình tùy chỉnh", + "editTitle": "Chỉnh sửa cấu hình mô hình - {name}", + "speechRecognition": { + "label": "Nhận dạng giọng nói", + "description": "Kiểm soát xem mô hình này có cho phép nhập giọng nói bằng tính năng chuyển lời nói thành văn bản cục bộ hay không." + }, + "functionCall": { + "description": "Model có hỗ trợ các lệnh gọi hàm nguyên bản hay không (DeepChat sẽ tự động mô phỏng các lệnh gọi hàm sau khi tắt tùy chọn này)", + "label": "Lời gọi hàm" + }, + "maxTokens": { + "description": "Đặt số lượng tokens tối đa cho một đầu ra của mô hình", + "label": "Độ dài đầu ra tối đa" + }, + "reasoning": { + "description": "Mô hình này hỗ trợ lý luận", + "label": "Khả năng suy luận" + }, + "reasoningToggle": { + "description": "Kiểm soát xem lý luận có được bật theo mặc định cho mô hình này hay không", + "label": "Kích hoạt lý luận" + }, + "interleavedThinking": { + "label": "Suy nghĩ xen kẽ", + "description": "Kiểm soát xem mô hình này có xử lý các thông báo lý luận và lệnh gọi công cụ bằng Tư duy xen kẽ hay không. Mặc định của nhà cung cấp được áp dụng tự động." + }, + "thinkingBudget": { + "label": "Suy nghĩ về ngân sách", + "description": "Đặt độ dài token tối đa của quá trình tư duy để kiểm soát độ sâu lý luận", + "placeholder": "Nhập giá trị ngân sách dự kiến", + "range": "Phạm vi: {min} - {max}", + "validation": { + "required": "Vui lòng nhập giá trị ngân sách dự kiến", + "minValue": "Nghĩ rằng giá trị ngân sách dưới mức tối thiểu", + "maxValue": "Giá trị ngân sách suy nghĩ không thể vượt quá {max}" + } + }, + "resetConfirm": { + "confirm": "Xác nhận đặt lại", + "message": "Bạn có chắc chắn muốn đặt lại cấu hình của model này về mặc định không? \nHoạt động này là không thể hủy ngang.", + "title": "Xác nhận đặt lại" + }, + "reasoningEffort": { + "label": "Nỗ lực lý luận", + "description": "Kiểm soát độ sâu của lý luận mô hình; nỗ lực cao hơn tạo ra kết quả tốt hơn nhưng phản ứng chậm hơn", + "placeholder": "Lựa chọn nỗ lực lập luận", + "options": { + "none": "Không có - Không có lý do", + "minimal": "Tối thiểu - Phản hồi nhanh nhất", + "low": "Thấp - Nỗ lực thấp", + "medium": "Trung bình - Nỗ lực vừa phải", + "high": "Cao - Nỗ lực cao", + "xhigh": "XHigh - Nỗ lực tối đa", + "max": "Max - Nỗ lực tối đa" + } + }, + "verbosity": { + "label": "Độ dài", + "description": "Kiểm soát mức độ chi tiết và độ dài của phản hồi mô hình", + "placeholder": "Chọn mức độ chi tiết", + "options": { + "low": "Thấp - Câu trả lời ngắn gọn", + "medium": "Trung bình - Chi tiết cân bằng", + "high": "Cao - Đáp án chi tiết" + } + }, + "resetToDefault": "Đặt lại về mặc định", + "saveConfig": "Lưu cấu hình", + "useModelDefault": "Sử dụng cấu hình mặc định của mô hình", + "currentUsingModelDefault": "Hiện đang sử dụng cấu hình mặc định của mô hình", + "temperature": { + "description": "Kiểm soát tính ngẫu nhiên của đầu ra. Hầu hết các mô hình là 0-1 và một số hỗ trợ trong khoảng 0-2. Giá trị cao hơn làm tăng tính ngẫu nhiên.", + "fixedMoonshotKimi": "Moonshot Kimi K2.5/K2.6 sửa nhiệt độ thành {enabled} khi tính năng suy nghĩ được bật và {disabled} khi tính năng này bị tắt.", + "label": "Nhiệt độ" + }, + "title": "Thông số mô hình tùy chỉnh", + "type": { + "description": "Chọn loại mô hình", + "label": "Loại mô hình", + "options": { + "chat": "Mô hình ngôn ngữ", + "embedding": "Nhúng mô hình", + "imageGeneration": "Mô hình tạo hình ảnh", + "rerank": "Xếp hạng lại mô hình", + "videoGeneration": "Mô hình tạo video" + } + }, + "validation": { + "contextLengthMax": "Độ dài ngữ cảnh không thể vượt quá 10000000", + "contextLengthMin": "Độ dài ngữ cảnh phải lớn hơn 0", + "contextLengthRequired": "Độ dài ngữ cảnh không được để trống", + "maxTokensMax": "Độ dài đầu ra tối đa không thể vượt quá 1000000", + "maxTokensMin": "Độ dài đầu ra tối đa phải lớn hơn 0", + "maxTokensRequired": "Độ dài đầu ra tối đa không được để trống", + "temperatureMax": "Nhiệt độ phải nhỏ hơn hoặc bằng 2", + "temperatureMin": "Nhiệt độ phải lớn hơn hoặc bằng 0", + "temperatureRequired": "Nhiệt độ không thể trống", + "timeoutMin": "Thời gian chờ yêu cầu phải ít nhất là 1000ms", + "timeoutMax": "Thời gian chờ yêu cầu không thể vượt quá 3600000ms" + }, + "vision": { + "description": "Mô hình có hỗ trợ khả năng thị giác không?", + "label": "Khả năng thị giác" + }, + "apiEndpoint": { + "description": "Chọn điểm cuối OpenAI API được mô hình này sử dụng.", + "label": "Điểm cuối API", + "options": { + "chat": "Tạo văn bản", + "image": "Tạo hình ảnh", + "video": "Tạo video" + } + }, + "endpointType": { + "label": "Loại điểm cuối", + "description": "Chọn giao thức ngược dòng API mới sẽ sử dụng cho mô hình này.", + "placeholder": "Chọn loại điểm cuối", + "required": "Loại điểm cuối là bắt buộc", + "options": { + "openai": "Trò chuyện OpenAI", + "openai-response": "Phản hồi OpenAI", + "anthropic": "Tin nhắn Anthropic", + "gemini": "Gemini Bản địa", + "image-generation": "Tạo hình ảnh", + "video-generation": "Tạo video" + } + }, + "reasoningVisibility": { + "label": "Khả năng hiển thị lý luận", + "description": "Kiểm soát việc bỏ qua nội dung lý luận hay hiển thị dưới dạng ghi chú tóm tắt khi bật lý luận", + "placeholder": "Chọn khả năng hiển thị lý luận", + "options": { + "omitted": "Bỏ qua - Ẩn nội dung lý luận", + "summarized": "Tóm tắt - Hiển thị lý luận tóm tắt" + } + }, + "timeout": { + "label": "Yêu cầu hết thời gian chờ (ms)", + "description": "Đặt thời gian chờ cho một yêu cầu mô hình. Nếu vượt quá, yêu cầu sẽ bị hủy bỏ." + }, + "imageGeneration": { + "default": "Mặc định", + "size": { + "label": "Kích thước hình ảnh", + "custom": "tùy chỉnh", + "placeholder": "ví dụ: 2048x2048", + "experimental": "Kích thước trên 2560x1440 được OpenAI đánh dấu thử nghiệm.", + "validation": { + "invalid_format": "Sử dụng định dạng {width}x{height}.", + "invalid_multiple": "Chiều rộng và chiều cao phải là bội số của 16.", + "side_too_large": "Chiều rộng và chiều cao phải từ 3840px trở xuống.", + "aspect_ratio_too_large": "Cạnh dài không được lớn hơn 3 lần cạnh ngắn.", + "pixel_count_out_of_range": "Tổng số pixel phải nằm trong khoảng từ 655360 đến 8294400." + } + }, + "quality": { + "label": "chất lượng", + "options": { + "low": "Thấp", + "medium": "Trung bình", + "high": "Cao", + "auto": "Tự động" + } + }, + "outputFormat": { + "label": "định dạng đầu ra", + "options": { + "png": "PNG", + "jpeg": "JPEG", + "webp": "WebP" + } + }, + "outputCompression": { + "label": "nén", + "placeholder": "Mặc định: 100", + "validation": "Nén phải là số nguyên từ 0 đến 100." + }, + "background": { + "label": "Nền", + "options": { + "auto": "Tự động", + "opaque": "đục" + } + }, + "moderation": { + "label": "Kiểm duyệt", + "options": { + "auto": "Tự động", + "low": "Thấp" + } + } + }, + "videoGeneration": { + "size": { + "label": "Kích thước khung", + "placeholder": "ví dụ: 1280x720" + }, + "seconds": { + "label": "Giây", + "placeholder": "ví dụ: 5" + }, + "duration": { + "label": "Thời lượng", + "placeholder": "ví dụ: 5", + "description": "Được gửi qua extra_body.duration dành cho các điểm cuối video tương thích." + }, + "ratio": { + "label": "tỷ lệ khung hình", + "placeholder": "ví dụ: 16:9" + }, + "resolution": { + "label": "Độ phân giải", + "placeholder": "ví dụ: 720p" + }, + "watermark": { + "label": "Hình mờ", + "description": "Yêu cầu hình mờ phía nhà cung cấp khi điểm cuối ngược dòng hỗ trợ hình mờ đó." + }, + "generateAudio": { + "label": "Tạo âm thanh", + "description": "Yêu cầu bản âm thanh cùng với video được tạo khi được hỗ trợ." + } + } + } + }, + "provider": { + "search": "Nền tảng nhà cung cấp tìm kiếm…", + "enable": "Kích hoạt dịch vụ", + "enabled": "Đã bật", + "disabled": "Đã tắt", + "urlPlaceholder": "Vui lòng nhập API URL", + "keyPlaceholder": "Vui lòng nhập API Key", + "accessKeyIdPlaceholder": "Vui lòng nhập ID khóa truy cập AWS", + "secretAccessKeyPlaceholder": "Vui lòng nhập Khóa truy cập bí mật AWS", + "regionPlaceholder": "Vui lòng nhập khu vực AWS", + "vertexProjectId": "Mã dự án", + "vertexProjectIdPlaceholder": "Vui lòng nhập ID dự án Đám mây Google của bạn", + "vertexLocation": "khu vực", + "vertexLocationPlaceholder": "Vui lòng nhập khu vực (ví dụ: us-central1)", + "vertexServiceEmail": "Email tài khoản dịch vụ", + "vertexServiceEmailPlaceholder": "Vui lòng nhập email tài khoản dịch vụ", + "vertexPrivateKey": "Khóa riêng của tài khoản dịch vụ", + "vertexPrivateKeyPlaceholder": "Dán khóa riêng (hỗ trợ dòng đơn \\n)", + "vertexApiVersion": "Phiên bản API", + "vertexEndpointMode": "chế độ điểm cuối", + "vertexEndpointStandard": "Tiêu chuẩn (điểm cuối khu vực)", + "vertexEndpointExpress": "Express (điểm cuối toàn cầu)", + "verifyKey": "Xác minh khóa", + "howToGet": "Làm thế nào để có được", + "getKeyTip": "Vui lòng truy cập", + "getKeyTipEnd": "để có được API Key", + "urlFormat": "API Ví dụ: {defaultUrl}", + "urlFormatFill": "Điền vào API URL", + "openaiResponsesNotice": "OpenAI mặc định là Phản hồi API. Nếu điểm cuối của bên thứ ba chỉ hỗ trợ Hoàn thành trò chuyện, hãy sử dụng nhà cung cấp Hoàn thành OpenAI.", + "modifyBaseUrl": "sửa đổi", + "baseUrlLockedHint": "Nhà cung cấp này được ghim vào Base URL được đề xuất để giảm cấu hình sai.", + "refreshModelsWithMetadataHint": "Việc làm mới nhà cung cấp này sẽ đồng bộ hóa siêu dữ liệu ngược dòng trước, sau đó xây dựng lại danh sách mô hình cục bộ.", + "modelList": "Danh sách mẫu", + "enableModels": "Kích hoạt mô hình", + "disableAllModels": "Vô hiệu hóa tất cả các mô hình", + "modelsEnabled": "Mô hình đã được kích hoạt", + "noModelsEnabled": { + "title": "Không có mô hình nào được kích hoạt", + "description": "Vui lòng nhấp vào nút \"Bật mô hình\" để chọn thủ công các mô hình bạn muốn sử dụng." + }, + "verifyLink": "Xác minh liên kết", + "syncModelsFailed": "Không thể đồng bộ hóa mô hình...", + "addCustomProvider": "Thêm nhà cung cấp tùy chỉnh", + "delete": "Xóa", + "stopModel": "Dừng mô hình", + "pulling": "Đang kéo...", + "runModel": "Chạy mô hình", + "dialog": { + "disableModel": { + "title": "Xác nhận Vô hiệu hóa Model", + "content": "Bạn có chắc chắn muốn tắt kiểu máy \"{name}\" không?", + "confirm": "Vô hiệu hóa" + }, + "disableAllModels": { + "title": "Xác nhận Tắt tất cả các kiểu máy", + "content": "Bạn có chắc chắn muốn tắt tất cả các kiểu máy không?", + "confirm": "Vô hiệu hóa tất cả" + }, + "configModels": { + "title": "Cấu hình danh sách mô hình", + "description": "Chọn kiểu máy để bật hoặc tắt" + }, + "verify": { + "missingFields": "Vui lòng nhập API Key và API URL", + "failed": "Xác minh không thành công", + "success": "Xác minh thành công", + "failedDesc": "Xác minh cấu hình hoặc khóa API không thành công, vui lòng kiểm tra cấu hình của bạn", + "successDesc": "Khóa và cấu hình API đã được xác minh thành công, sẵn sàng sử dụng", + "connectionError": "Lỗi kết nối, vui lòng kiểm tra kết nối mạng và địa chỉ API", + "serverError": "Lỗi máy chủ, vui lòng thử lại sau", + "unauthorized": "Xác thực không thành công, API Key không hợp lệ hoặc đã hết hạn" + }, + "addCustomProvider": { + "title": "Thêm nhà cung cấp tùy chỉnh", + "description": "Vui lòng điền các thông tin cần thiết cho nhà cung cấp", + "name": "Tên", + "namePlaceholder": "Vui lòng nhập tên nhà cung cấp", + "apiType": "Loại API", + "apiTypePlaceholder": "Vui lòng chọn loại API", + "apiKey": "API Key", + "apiKeyPlaceholder": "Vui lòng nhập key API", + "baseUrl": "Cơ sở API URL", + "baseUrlPlaceholder": "Vui lòng nhập cơ sở API URL", + "enable": "Kích hoạt nhà cung cấp" + }, + "providerDeeplinkImport": { + "title": "Nhà cung cấp nhập khẩu", + "description": "Xem lại cấu hình nhà cung cấp được phân tích cú pháp trước khi áp dụng nó.", + "type": "loại", + "url": "URL", + "key": "Chìa khóa", + "overwriteWarning": "Quá trình nhập này sẽ ghi đè cấu hình nhà cung cấp hiện tại.", + "confirming": "Đang nhập khẩu..." + }, + "baseUrlUnlock": { + "title": "Xác nhận thay đổi cơ sở URL", + "description": "Không nên thay đổi Base URL cho nhà cung cấp này. Điểm cuối không chính xác có thể gây ra lỗi yêu cầu hoặc hành vi không mong muốn khác. Bạn vẫn có thể tiếp tục nếu bạn hiểu được rủi ro.", + "confirm": "Tiếp tục" + }, + "deleteProvider": { + "title": "Xác nhận Xóa nhà cung cấp", + "content": "Bạn có chắc chắn muốn xóa nhà cung cấp \"{name}\" không? Không thể hoàn tác hành động này.", + "confirm": "Xóa" + }, + "deleteModel": { + "title": "Xác nhận Xóa mô hình", + "content": "Bạn có chắc chắn muốn xóa mẫu \"{name}\" không? Không thể hoàn tác hành động này.", + "confirm": "Xóa" + }, + "pullModel": { + "title": "Mô hình kéo", + "description": "Chọn mô hình để tải xuống cục bộ", + "pull": "Kéo" + }, + "modelCheck": { + "title": "Kiểm tra mẫu", + "description": "Chọn một mô hình để kiểm tra khả năng kết nối và tính khả dụng", + "model": "Chọn mẫu", + "modelPlaceholder": "Vui lòng chọn mẫu để kiểm tra", + "test": "Bắt đầu kiểm tra", + "checking": "Đang thử nghiệm...", + "success": "Thử nghiệm mô hình thành công", + "failed": "Thử nghiệm mô hình không thành công", + "noModels": "Không có mẫu nào có sẵn cho nhà cung cấp này" + } + }, + "pullModels": "Mô hình kéo", + "refreshModels": "Làm mới mô hình", + "modelsRunning": "Người mẫu chạy bộ", + "runningModels": "Người mẫu chạy bộ", + "noRunningModels": "Không có mẫu chạy", + "deleteModel": "Xóa mô hình", + "deleteModelConfirm": "Bạn có chắc chắn muốn xóa mẫu \"{name}\" không? Không thể hoàn tác hành động này.", + "noLocalModels": "Không có mô hình địa phương", + "localModels": "Mô hình địa phương", + "azureApiVersion": "Phiên bản API", + "safety": { + "title": "Cài đặt an toàn", + "blockHighest": "Chặn rủi ro cao", + "blockMost": "Chặn rủi ro trung bình", + "blockNone": "Không bị chặn", + "blockSome": "Chặn rủi ro thấp" + }, + "serverList": "Danh sách máy chủ", + "totalServers": "Tổng số máy chủ", + "addServer": "Thêm máy chủ", + "autoStart": "Tự động bắt đầu", + "githubCopilotAuth": "GitHub Copilot xác thực", + "githubCopilotConnected": "Đã kết nối GitHub Copilot", + "githubCopilotNotConnected": "GitHub Copilot Không được kết nối", + "loginWithGitHub": "Đăng nhập bằng GitHub", + "loggingIn": "Đang đăng nhập...", + "githubCopilotClientId": "ID khách hàng tùy chỉnh", + "githubCopilotClientIdHint": "Tùy chọn. Để trống để sử dụng ID khách hàng mặc định được tích hợp sẵn. Chỉ ảnh hưởng đến xác thực GitHub Copilot.", + "githubCopilotLoginTip": "Cho phép DeepChat truy cập vào đăng ký GitHub Copilot của bạn. Cần có quyền 'read:user' và 'read:org' để truy cập Copilot API.", + "loginSuccess": "Đăng nhập thành công", + "loginFailed": "Đăng nhập không thành công", + "tokenValid": "Token hợp lệ", + "tokenInvalid": "Token không hợp lệ", + "disconnect": "Ngắt kết nối", + "disconnected": "Đã ngắt kết nối thành công", + "disconnectFailed": "Ngắt kết nối không thành công", + "keyStatus": { + "remaining": "Hạn ngạch còn lại", + "usage": "đã qua sử dụng" + }, + "refreshingModels": "Đang làm mới...", + "toast": { + "modelRunning": "Mô hình đang chạy", + "modelRunningDesc": "Vui lòng dừng mô hình {model} trước rồi xóa nó.", + "backupSuccessTitle": "Sao lưu hoàn tất", + "backupSuccessMessage": "Bản sao lưu được lưu tại {time} ({size})", + "importSuccessTitle": "Đã nhập xong", + "importSuccessMessage": "Đã nhập thành công cuộc hội thoại {count}", + "refreshModelsSuccessTitle": "Đã làm mới mô hình", + "refreshModelsSuccessDescription": "Danh sách mẫu mới nhất đã được đồng bộ hóa cho nhà cung cấp này.", + "refreshModelsSuccessDescriptionWithMetadata": "Siêu dữ liệu ngược dòng và danh sách mẫu máy mới nhất đã được đồng bộ hóa cho nhà cung cấp này.", + "refreshModelsFailedTitle": "Làm mới không thành công", + "refreshModelsFailedDescription": "Không thể làm mới mô hình cho nhà cung cấp này ngay bây giờ. Vui lòng thử lại sau.", + "refreshModelsFailedDescriptionWithMetadata": "Không thể làm mới siêu dữ liệu và mô hình ngược dòng cho nhà cung cấp này ngay bây giờ. Vui lòng thử lại sau." + }, + "modelscope": { + "mcpSync": { + "title": "Đồng bộ hóa dịch vụ MCP", + "description": "Đồng bộ hóa máy chủ MCP từ ModelScope sang cấu hình cục bộ, cho phép bổ sung nhanh các công cụ MCP phổ biến.", + "sync": "Bắt đầu đồng bộ hóa", + "syncing": "Đang đồng bộ hóa...", + "pageSize": "Kích thước trang", + "imported": "Dịch vụ {count} đã nhập", + "skipped": "Đã bỏ qua dịch vụ {count}", + "errors": "lỗi {count}", + "errorDetails": "Chi tiết lỗi", + "noApiKey": "Vui lòng định cấu hình ModelScope API Key trước", + "noServersFound": "Không tìm thấy dịch vụ MCP nào", + "authenticationFailed": "Xác thực không thành công, vui lòng kiểm tra API Key", + "convertingServers": "Đang chuyển đổi cấu hình máy chủ...", + "fetchingServers": "Lấy danh sách máy chủ MCP...", + "importingServers": "Đang nhập cấu hình máy chủ...", + "noOperationalUrls": "Không tìm thấy địa chỉ hoạt động có sẵn", + "pageNumber": "số trang", + "pageNumberPlaceholder": "Vui lòng nhập số trang", + "serverAlreadyExists": "Máy chủ đã tồn tại, bỏ qua nhập", + "syncComplete": "Hoàn thành đồng bộ", + "invalidServerData": "Dữ liệu máy chủ không hợp lệ" + }, + "apiKey": "API Key", + "apiKeyHelper": "Nhận API Key của bạn trong bảng điều khiển ModelScope", + "apiKeyPlaceholder": "Vui lòng nhập ModelScope API Key", + "baseUrl": "Địa chỉ API", + "baseUrlHelper": "Địa chỉ dịch vụ ModelScope API", + "connected": "Đã kết nối", + "connecting": "Đang kết nối...", + "description": "ModelScope là một nền tảng chia sẻ mô hình dưới dạng dịch vụ được ra mắt bởi Học viện Alibaba Damo", + "details": { + "apiConfig": "Cấu hình API", + "mcpSync": "Đồng bộ hóa MCP", + "modelManagement": "Quản lý người mẫu", + "operationalDescription": "Đồng bộ hóa các máy chủ MCP có thể được sử dụng trực tiếp trên nền tảng ModelScope", + "operationalServers": "Vận hành máy chủ", + "rateLimitConfig": "Cấu hình giới hạn tốc độ", + "safetySettings": "Cài đặt bảo mật", + "specialConfig": "Cấu hình đặc biệt", + "syncFromModelScope": "Đồng bộ hóa từ ModelScope", + "title": "Chi tiết cài đặt nhà cung cấp" + }, + "invalidKey": "API Key không hợp lệ", + "keyRequired": "Vui lòng nhập API Key", + "name": "ModelScope", + "networkError": "Lỗi kết nối mạng", + "notConnected": "Không được kết nối", + "verifyFailed": "Xác minh không thành công", + "verifySuccess": "Xác minh thành công" + }, + "tts": { + "title": "Chuyển văn bản thành giọng nói (TTS)", + "description": "Tạo lời nói từ văn bản. Giọng nói xuất hiện trong danh sách model bên dưới.", + "audioFormat": { + "label": "Định dạng âm thanh", + "placeholder": "Chọn định dạng", + "helper": "MP3 được khuyên dùng cho hầu hết các trường hợp." + }, + "language": { + "label": "Ngôn ngữ", + "placeholder": "ví dụ: vi", + "helper": "Hỗ trợ: en, ca, sv, es, fr, de, it, pt, pl, ru, nl." + }, + "model": { + "label": "Mô hình TTS", + "placeholder": "voiceai-tts-v1-mới nhất", + "helper": "Xem tài liệu Voice.ai để biết các kiểu máy được hỗ trợ." + }, + "agentId": { + "label": "ID giọng nói Agent", + "placeholder": "Dán ID tác nhân thoại", + "helper": "Cần thiết cho các cuộc gọi thoại theo thời gian thực." + }, + "temperature": { + "label": "Nhiệt độ", + "helper": "Kiểm soát tính ngẫu nhiên (0-2)." + }, + "topP": { + "label": "Top P", + "helper": "Lấy mẫu hạt nhân (0-1)." + } + }, + "apiKeyLabel": "API Key", + "apiUrlLabel": "API URL", + "configurationSaved": "Đã lưu cấu hình", + "configurationUpdated": "Đã cập nhật cấu hình", + "dataRefreshed": "Dữ liệu đã được làm mới", + "operationFailed": "Thao tác không thành công", + "operationSuccess": "Hoạt động thành công", + "settingsApplied": "Đã áp dụng cài đặt", + "bedrockLimitTip": "* Chỉ hỗ trợ Anthropic Claude (bao gồm các mẫu Opus, Sonnet, Haiku)", + "bedrockVerifyTip": "DeepChat sử dụng Claude 3.5 Sonnet để xác minh. Nếu bạn không có quyền gọi, việc xác minh sẽ thất bại. Điều này sẽ không ảnh hưởng đến việc sử dụng các mô hình khác.", + "center": { + "title": "Trung tâm nhà cung cấp", + "description": "Quản lý các kết nối, mô hình và cấu hình nâng cao của nhà cung cấp.", + "noApiUrl": "Không có API URL được định cấu hình", + "enabledModels": "Đã bật mô hình {count}", + "noAdvancedConfig": "Nhà cung cấp này không có cấu hình nâng cao bổ sung.", + "status": { + "connected": "Đã kết nối", + "keyMissing": "Thiếu chìa khóa", + "disabled": "Đã tắt", + "local": "Địa phương" + }, + "tabs": { + "connection": "Kết nối", + "models": "Người mẫu", + "advanced": "Nâng cao" + } + } + }, + "knowledgeBase": { + "title": "Cài đặt cơ sở kiến thức", + "addKnowledgeBase": "Thêm cơ sở kiến thức", + "selectKnowledgeBaseType": "Vui lòng chọn loại cơ sở kiến thức để thêm", + "difyDescription": "Kho kiến thức Dify giúp bạn quản lý và sử dụng dữ liệu tài liệu", + "comingSoon": "sắp ra mắt", + "featureNotAvailable": "Tính năng này hiện chưa có", + "addDifyConfig": "Thêm cấu hình Dify", + "apiKey": "API Key", + "datasetId": "ID tập dữ liệu", + "endpoint": "Điểm cuối API", + "configAdded": "Đã thêm cấu hình", + "configAddedDesc": "Cấu hình {name} đã được thêm thành công", + "addConfig": "Thêm cấu hình", + "moreComingSoon": "Sắp có thêm nhiều loại cơ sở kiến thức", + "configUpdated": "Đã cập nhật cấu hình", + "configUpdatedDesc": "Cấu hình {name} đã được cập nhật thành công", + "descriptionPlaceholder": "Ví dụ: Cơ sở kiến thức về tài liệu sản phẩm của công ty", + "ragflowTitle": "Cơ sở kiến thức RAGFlow", + "ragflowDescription": "RAGFlow là một hệ thống quản lý cơ sở tri thức mạnh mẽ hỗ trợ nhiều phương pháp truy xuất và tính năng quản lý tài liệu.", + "addRagflowConfig": "Thêm cấu hình RAGFlow", + "editRagflowConfig": "Chỉnh sửa cấu hình RAGFlow", + "dify": "Cơ sở kiến thức Dify", + "editDifyConfig": "Sửa đổi cấu hình Dify", + "fastgptTitle": "Cơ sở kiến thức FastGPT", + "fastgptDescription": "FastGPT là một hệ thống quản lý cơ sở tri thức mạnh mẽ hỗ trợ nhiều phương pháp truy xuất và tính năng quản lý tài liệu.", + "addFastGptConfig": "Thêm cấu hình FastGPT", + "editFastGptConfig": "Chỉnh sửa cấu hình FastGPT", + "builtInKnowledgeDescription": "Cơ sở kiến thức tích hợp cung cấp một số triển khai đơn giản cho phép thực hiện một số chức năng cơ bản trong môi trường ngoại tuyến.", + "builtInKnowledgeTitle": "Cơ sở kiến thức tích hợp", + "addBuiltinKnowledgeConfig": "Thêm cấu hình cơ sở kiến thức tích hợp", + "editBuiltinKnowledgeConfig": "Chỉnh sửa cấu hình cơ sở kiến thức tích hợp", + "chunkSize": "Kích thước khối", + "chunkSizeHelper": "Cắt tài liệu thành các phân đoạn, kích thước của mỗi phân đoạn không thể vượt quá giới hạn bối cảnh mô hình", + "chunkOverlap": "Kích thước chồng chéo", + "chunkOverlapHelper": "Lượng nội dung lặp lại giữa các khối văn bản liền kề đảm bảo vẫn có sự kết nối ngữ cảnh giữa các khối văn bản được phân đoạn, nâng cao hiệu quả tổng thể của việc xử lý mô hình các văn bản dài", + "selectEmbeddingModel": "Chọn mô hình nhúng", + "modelNotFound": "Không tìm thấy Nhà cung cấp dịch vụ {provider} hoặc model {model}", + "modelNotFoundDesc": "Đảm bảo mô hình được định cấu hình chính xác và mô hình được bật. \nBạn có thể kiểm tra cấu hình model trong cài đặt của nhà cung cấp dịch vụ.", + "removeBuiltinKnowledgeConfirmDesc": "Xóa cấu hình cơ sở kiến thức tích hợp sẽ xóa tất cả dữ liệu liên quan và không thể khôi phục được. Xin hãy thận trọng.", + "removeBuiltinKnowledgeConfirmTitle": "Xác nhận xóa kho kiến thức tích hợp {name}?", + "descriptionDesc": "Mô tả cơ sở tri thức để AI quyết định có lấy cơ sở tri thức này hay không", + "advanced": "Tùy chọn nâng cao", + "autoDetectDimensions": "Tự động phát hiện các kích thước được nhúng", + "autoDetectHelper": "Tự động phát hiện các kích thước được nhúng, tiêu thụ một lượng nhỏ Tokens", + "chunkOverlapPlaceholder": "Giá trị mặc định, không nên sửa đổi", + "chunkSizePlaceholder": "Giá trị mặc định, không nên sửa đổi", + "dimensions": "Nhúng kích thước", + "dimensionsPlaceholder": "Kích thước kích thước nhúng, chẳng hạn như 1024", + "selectEmbeddingModelHelper": "Các mô hình nhúng bị cấm sau khi tạo cơ sở tri thức", + "dimensionsHelper": "Đảm bảo mô hình hỗ trợ kích thước kích thước nhúng đã đặt", + "autoDetectDimensionsError": "Tự động phát hiện lỗi kích thước được nhúng", + "fragmentsNumber": "Số đoạn tài liệu được yêu cầu", + "fragmentsNumberHelper": "Càng nhiều đoạn tài liệu được yêu cầu thì càng có nhiều thông tin, nhưng càng cần sử dụng nhiều tokens", + "selectRerankModel": "Chọn mô hình xếp hạng lại", + "rerankModel": "Sắp xếp lại mô hình", + "embeddingModel": "Nhúng mô hình", + "return": "trở về", + "uploadHelper": "Bấm để tải lên hoặc kéo file vào đây", + "fileSupport": "Hỗ trợ các định dạng khác {accept} và {count}", + "searchKnowledge": "Tìm kiếm cơ sở kiến thức", + "searchKnowledgePlaceholder": "Vui lòng nhập nội dung truy vấn", + "noData": "Chưa có dữ liệu", + "file": "tài liệu", + "uploadProcessing": "Đang tải lên", + "uploadCompleted": "Tải lên đã hoàn tất", + "reAdd": "Tải lên lại", + "uploadError": "Tải lên không thành công", + "delete": "xóa", + "reason": "lý do", + "deleteSuccess": "Xóa thành công", + "copy": "sao chép", + "copySuccess": "Sao chép thành công", + "source": "nguồn", + "normalized": "Chuẩn hóa L2", + "normalizedHelper": "Vui lòng xác nhận rằng mô hình hỗ trợ chuẩn hóa L2 của vectơ đầu ra", + "dialog": { + "beforequit": { + "cancel": "Hủy bỏ", + "confirm": "xác nhận", + "title": "Xác nhận thoát", + "description": "Có một nhiệm vụ cơ sở kiến thức đang chạy. Bạn có chắc chắn thoát khỏi phần mềm không? \nCác tác vụ bị hủy bỏ có thể được khôi phục sau khi khởi động lại phần mềm." + } + }, + "searchError": "Truy vấn không thành công", + "processing": "Đang tải lên", + "paused": "tạm dừng tải lên", + "unknown": "Trạng thái không xác định", + "reAddFile": { + "title": "Xác nhận tải lên lại", + "content": "Bạn có chắc chắn tải lại tệp \"{fileName}\" lên không?" + }, + "nowledgeMem": { + "title": "Xuất Mem Nowledge", + "description": "Xuất các cuộc hội thoại sang dịch vụ Nowledge Mem.", + "testConnection": "Kiểm tra kết nối", + "configuration": "Cấu hình", + "baseUrl": "Cơ sở URL", + "apiKey": "API Key", + "apiKeyHint": "Tùy chọn. Nếu dịch vụ của bạn yêu cầu khóa API, hãy nhập khóa đó vào đây.", + "timeout": "Hết giờ", + "saveConfig": "Lưu", + "resetConfig": "Đặt lại", + "seconds": "giây" + }, + "deleteFile": { + "title": "Xóa xác nhận tập tin", + "content": "Bạn có chắc chắn xóa tệp \"{fileName}\" không? \nThao tác này không được khôi phục." + }, + "resumeAllPausedTasks": "Phục hồi bằng một cú nhấp chuột", + "pauseAllRunningTasks": "Tạm dừng bằng một cú nhấp chuột", + "separators": "Khối phân cách", + "separatorsHelper": "Dấu phân cách phân đoạn tài liệu, một dấu phân cách đơn được đặt trong dấu ngoặc kép (\"\") và các dấu phân cách được phân tách bằng dấu phẩy (,)", + "invalidSeparators": "Dấu phân cách không hợp lệ", + "selectLanguage": "Chọn một cài đặt trước", + "separatorsPreset": "Đang tải cài đặt trước" + }, + "mcp": { + "title": "Cài đặt MCP", + "description": "Quản lý và định cấu hình máy chủ và công cụ MCP (Giao thức bối cảnh mô hình)", + "enabledTitle": "Kích hoạt MCP", + "enabledDescription": "Bật hoặc tắt chức năng và công cụ MCP", + "enableToAccess": "Vui lòng kích hoạt MCP để truy cập các tùy chọn cấu hình", + "marketplace": "Đi tới Chợ MCP để cài đặt chỉ bằng một cú nhấp chuột", + "marketMenu": { + "higress": "Higress" + }, + "technicalDetails": "Chi tiết kỹ thuật", + "httpServer": "Máy chủ HTTP", + "localProcess": "Quy trình cục bộ", + "restartServer": "Khởi động lại máy chủ", + "viewLogs": "Xem nhật ký", + "starting": "Bắt đầu", + "error": "Lỗi", + "tabs": { + "servers": "Máy chủ", + "tools": "Công cụ", + "prompts": "Prompt", + "resources": "Tài nguyên" + }, + "serverList": "Danh sách máy chủ", + "totalServers": "Tổng số máy chủ", + "addServer": "Thêm máy chủ", + "running": "Đang chạy", + "stopped": "Đã dừng", + "stopServer": "Dừng máy chủ", + "startServer": "Khởi động máy chủ", + "noServersFound": "Không tìm thấy máy chủ", + "addServerDialog": { + "title": "Thêm máy chủ", + "description": "Định cấu hình máy chủ MCP mới" + }, + "editServerDialog": { + "title": "Chỉnh sửa máy chủ", + "description": "Chỉnh sửa cấu hình máy chủ MCP" + }, + "serverForm": { + "name": "Tên máy chủ", + "namePlaceholder": "Nhập tên máy chủ", + "nameRequired": "Tên máy chủ là bắt buộc", + "type": "Loại máy chủ", + "typePlaceholder": "Chọn loại máy chủ", + "typeStdio": "Đầu vào và đầu ra tiêu chuẩn (Stdio)", + "typeSse": "Sự kiện do máy chủ gửi (SSE)", + "typeInMemory": "Trong bộ nhớ", + "typeHttp": "Truyền yêu cầu HTTP (HTTP)", + "baseUrl": "Cơ sở URL", + "baseUrlPlaceholder": "Nhập cơ sở máy chủ URL (ví dụ: http://localhost:3000)", + "command": "Lệnh", + "commandPlaceholder": "Nhập lệnh", + "commandRequired": "Lệnh là bắt buộc", + "args": "Đối số", + "argsPlaceholder": "Nhập một đối số trên mỗi dòng", + "addArg": "Thêm đối số", + "argPlaceholder": "Nhập giá trị đối số", + "argsRequired": "Đối số là bắt buộc", + "env": "Biến môi trường", + "envPlaceholder": "Nhập các biến môi trường ở định dạng JSON", + "envInvalid": "Biến môi trường phải hợp lệ JSON", + "description": "Mô tả", + "descriptionPlaceholder": "Nhập mô tả máy chủ", + "descriptions": "Mô tả", + "descriptionsPlaceholder": "Nhập mô tả máy chủ", + "icon": "Biểu tượng", + "iconPlaceholder": "Biểu tượng nhập", + "icons": "Biểu tượng", + "iconsPlaceholder": "Biểu tượng nhập", + "autoApprove": "Tự động phê duyệt", + "autoApproveAll": "Tất cả", + "autoApproveRead": "Đọc", + "autoApproveWrite": "Viết", + "autoApproveHelp": "Chọn loại hoạt động để tự động phê duyệt mà không cần xác nhận của người dùng", + "submit": "Gửi", + "add": "Thêm", + "update": "cập nhật", + "cancel": "Hủy bỏ", + "jsonConfigIntro": "Bạn có thể dán trực tiếp cấu hình JSON hoặc chọn định cấu hình máy chủ theo cách thủ công.", + "jsonConfig": "Cấu hình JSON", + "jsonConfigPlaceholder": "Dán cấu hình máy chủ MCP của bạn ở định dạng JSON", + "jsonConfigExample": "Ví dụ về cấu hình JSON", + "parseSuccess": "Cấu hình được phân tích cú pháp", + "configImported": "Cấu hình được nhập thành công", + "parseError": "Lỗi phân tích cú pháp", + "skipToManual": "Chuyển tới Cấu hình thủ công", + "parseAndContinue": "Phân tích & Tiếp tục", + "jsonParseError": "Phân tích cú pháp JSON không thành công", + "browseMarketplace": "Duyệt qua thị trường MCP", + "imageModel": "Mô hình tầm nhìn", + "customHeadersParseError": "Phân tích cú pháp tiêu đề tùy chỉnh không thành công", + "customHeaders": "Tiêu đề yêu cầu tùy chỉnh", + "clickToEdit": "Click để chỉnh sửa và xem toàn bộ nội dung", + "invalidKeyValueFormat": "Định dạng tiêu đề yêu cầu không chính xác, vui lòng kiểm tra xem đầu vào có đúng không.", + "npmRegistry": "Sổ đăng ký NPM tùy chỉnh", + "npmRegistryPlaceholder": "Thiết lập Custom NPM Register, để hệ thống tự động chọn cái nhanh nhất", + "browseHigress": "Xem thị trường Higress MCP", + "selectFolderError": "Lỗi chọn thư mục", + "folders": "Thư mục được phép", + "addFolder": "Thêm thư mục", + "noFoldersSelected": "Không có thư mục nào được chọn", + "useE2B": "Kích hoạt hộp cát E2B", + "e2bDescription": "Thực thi mã Python bằng hộp cát E2B", + "e2bApiKey": "ApiKey E2B", + "e2bApiKeyPlaceholder": "Nhập Khóa Api E2B của bạn tại đây, chẳng hạn như e2b_1111xx*******", + "e2bApiKeyHelp": "Truy cập e2b.dev để lấy ApiKey của bạn", + "e2bApiKeyRequired": "Phải nhập ApiKey để kích hoạt chức năng E2B" + }, + "deleteServer": "Xóa máy chủ", + "editServer": "Chỉnh sửa máy chủ", + "setDefault": "Đặt làm mặc định", + "removeDefault": "Xóa mặc định", + "isDefault": "Máy chủ mặc định", + "default": "Mặc định", + "setAsDefault": "Đặt làm mặc định", + "removeServer": "Xóa máy chủ", + "autoStart": "Tự động bắt đầu", + "confirmRemoveServer": "Bạn có chắc chắn muốn xóa máy chủ {name} không? Không thể hoàn tác hành động này.", + "removeServerDialog": { + "title": "Xóa máy chủ" + }, + "confirmDelete": { + "title": "Xác nhận Xóa", + "description": "Bạn có chắc chắn muốn xóa máy chủ {name} không? Không thể hoàn tác hành động này.", + "confirm": "Xóa", + "cancel": "Hủy bỏ" + }, + "resetToDefault": "Đặt lại về mặc định", + "resetConfirmTitle": "Đặt lại về máy chủ mặc định", + "resetConfirmDescription": "Điều này sẽ khôi phục tất cả các máy chủ mặc định trong khi vẫn giữ các máy chủ tùy chỉnh của bạn. Mọi sửa đổi đối với máy chủ mặc định sẽ bị mất.", + "resetConfirm": "Đặt lại", + "builtInServers": "Máy chủ tích hợp", + "customServers": "Máy chủ tùy chỉnh", + "builtIn": "Tích hợp sẵn", + "cannotRemoveBuiltIn": "Không thể xóa máy chủ tích hợp", + "builtInServerCannotBeRemoved": "Không thể xóa máy chủ tích hợp, chỉ có thể sửa đổi các tham số và biến môi trường", + "maxDefaultServersReached": "Chỉ có thể đặt tối đa 3 máy chủ mặc định", + "removeDefaultFirst": "Vui lòng xóa một số máy chủ mặc định trước", + "higressMarket": "Đi tới Cài đặt Higress MCP", + "npmRegistry": { + "title": "Nguồn NPM", + "currentSource": "Nguồn hiện tại", + "cached": "Đã lưu vào bộ nhớ đệm", + "lastChecked": "Kiểm tra lần cuối", + "refresh": "Làm mới", + "advanced": "Nâng cao", + "advancedSettings": "Cài đặt nâng cao", + "advancedSettingsDesc": "Định cấu hình các tùy chọn đăng ký NPM nâng cao, bao gồm cài đặt nguồn tùy chỉnh và tự động phát hiện", + "autoDetect": "Tự động phát hiện nguồn tối ưu", + "autoDetectDesc": "Tự động phát hiện và sử dụng sổ đăng ký NPM nhanh nhất khi khởi động", + "customSource": "Nguồn tùy chỉnh", + "customSourcePlaceholder": "Nhập sổ đăng ký NPM tùy chỉnh URL", + "currentCustom": "Nguồn tùy chỉnh hiện tại", + "justNow": "Vừa rồi", + "minutesAgo": "{minutes} phút trước", + "hoursAgo": "{hours} giờ trước", + "daysAgo": "{days} ngày trước", + "refreshSuccess": "Đăng ký NPM được làm mới thành công", + "refreshSuccessDesc": "Phát hiện lại và cập nhật sổ đăng ký NPM tối ưu", + "refreshFailed": "Làm mới sổ đăng ký NPM không thành công", + "autoDetectUpdated": "Đã cập nhật cài đặt tự động phát hiện", + "autoDetectEnabled": "Đã bật tính năng đăng ký NPM tối ưu tự động phát hiện", + "autoDetectDisabled": "Tự động phát hiện bị tắt, sẽ sử dụng sổ đăng ký mặc định", + "updateFailed": "Cập nhật cài đặt không thành công", + "customSourceSet": "Bộ nguồn tùy chỉnh", + "customSourceSetDesc": "Bộ đăng ký NPM tùy chỉnh: {registry}", + "customSourceCleared": "Đã xóa nguồn tùy chỉnh", + "customSourceClearedDesc": "Đã xóa sổ đăng ký NPM tùy chỉnh, sẽ sử dụng tính năng tự động phát hiện", + "invalidUrl": "URL không hợp lệ", + "invalidUrlDesc": "Vui lòng nhập địa chỉ HTTP hoặc HTTPS hợp lệ", + "testing": "Kiểm tra sổ đăng ký NPM", + "testingDesc": "Đang kiểm tra kết nối với {registry}...", + "testFailed": "Kiểm tra đăng ký NPM không thành công", + "testFailedDesc": "Không thể kết nối với {registry}, lỗi: {error}. Vui lòng kiểm tra xem URL có chính xác hoặc kết nối mạng không.", + "redetectingOptimal": "Phát hiện lại sổ đăng ký NPM tối ưu...", + "redetectComplete": "Việc phát hiện lại đã hoàn tất", + "redetectCompleteDesc": "Đã phát hiện và thiết lập sổ đăng ký NPM tối ưu hiện tại", + "redetectFailed": "Phát hiện lại không thành công", + "redetectFailedDesc": "Không thể phát hiện lại sổ đăng ký tối ưu, sẽ sử dụng cấu hình mặc định" + }, + "managedServerReadOnly": "Dịch vụ được quản lý DeepChat", + "managedServerReadOnlyDesc": "Quản lý sự hỗ trợ và quyền từ cài đặt plugin sở hữu.", + "center": { + "title": "Trung tâm MCP", + "running": "Đang chạy", + "builtIn": "Tích hợp sẵn", + "custom": "tùy chỉnh", + "searchPlaceholder": "Tìm kiếm máy chủ MCP...", + "noResults": "Không có máy chủ MCP phù hợp", + "command": "Lệnh / URL", + "filters": { + "all": "Tất cả", + "running": "Đang chạy", + "stopped": "Đã dừng", + "builtIn": "Tích hợp sẵn", + "custom": "tùy chỉnh" + } + } + }, + "about": { + "title": "Về chúng tôi", + "version": "Phiên bản", + "checkUpdate": "Kiểm tra cập nhật", + "checking": "Đang kiểm tra...", + "latestVersion": "Phiên bản mới nhất" + }, + "display": { + "fontTitle": "Phông chữ", + "fontFamily": "Phông chữ giao diện", + "fontFamilyDesc": "Chọn phông chữ giao diện người dùng chính. Để trống để sử dụng ngăn xếp tích hợp.", + "codeFontFamily": "Phông chữ đơn cách", + "codeFontFamilyDesc": "Áp dụng cho các khối mã và bất kỳ vùng đơn cách nào.", + "fontDefaultLabel": "Mặc định (ngăn xếp tích hợp)", + "fontSearchPlaceholder": "Tìm kiếm phông chữ", + "fontSearchEmpty": "Không có phông chữ phù hợp", + "fontReset": "Đặt lại về mặc định", + "fontSystemLoading": "Đang tải phông chữ hệ thống...", + "fontUsageHint": "Một số giao diện yêu cầu khởi động lại ứng dụng để có hiệu lực. Nếu không có phông chữ, nó sẽ tự động quay về phông chữ mặc định.", + "fontSize": "Kích thước văn bản", + "text-sm": "nhỏ", + "text-base": "Trung bình", + "text-lg": "lớn", + "text-xl": "X-Lớn", + "text-2xl": "XX-Lớn", + "floatingButton": "Nút nổi", + "floatingButtonDesc": "Hiển thị nút nổi trên desktop để kích hoạt nhanh cửa sổ ứng dụng" + }, + "shortcuts": { + "title": "Cài đặt phím tắt", + "pressKeys": "Nhấn phím", + "pressEnterToSave": "Nhấn Enter để lưu, Esc để hủy", + "noModifierOnly": "Không thể chỉ sử dụng phím bổ trợ làm phím tắt", + "keyConflict": "Xung đột phím tắt, vui lòng chọn tổ hợp khác", + "clearShortcut": "Xóa phím tắt", + "cleanHistory": "Xóa lịch sử trò chuyện", + "deleteConversation": "Xóa cuộc trò chuyện", + "goSettings": "Mở Cài đặt", + "hideWindow": "Ẩn cửa sổ", + "quitApp": "Thoát khỏi ứng dụng", + "toggleSidebar": "Chuyển đổi thanh bên", + "toggleWorkspace": "Chuyển đổi không gian làm việc", + "zoomIn": "Phóng to ", + "zoomOut": "Thu nhỏ ", + "zoomReset": "Đặt lại thu phóng", + "newWindow": "Mở một cửa sổ mới", + "showHideWindow": "Cửa sổ Show/Hide", + "newConversation": "Cuộc trò chuyện mới", + "quickSearch": "Tìm kiếm tiêu điểm", + "closeWindow": "Đóng cửa sổ hiện tại" + }, + "acp": { + "title": "ACP Agent", + "description": "Quản lý các tác nhân Giao thức Máy khách Agent cục bộ do DeepChat bắt đầu.", + "enabledTitle": "Kích hoạt ACP", + "enabledDescription": "Khi được bật, các tác nhân ACP được định cấu hình sẽ xuất hiện dưới dạng mô hình trong bộ chọn.", + "useBuiltinRuntimeTitle": "Sử dụng Thời gian chạy tích hợp DeepChat", + "useBuiltinRuntimeDescription": "Khi được bật, bỏ qua các lệnh uv và nút hệ thống, sử dụng các phiên bản đi kèm của DeepChat.", + "enableToAccess": "Kích hoạt ACP để định cấu hình các tác nhân.", + "registryInstallEntry": "Cài đặt Agent", + "registryInstallEntryDescription": "Tìm kiếm và cài đặt các tác nhân từ ACP Register, sau đó quay lại đây để kích hoạt và định cấu hình chúng.", + "addCustomAgent": "Thêm Agent tùy chỉnh", + "customEmpty": "Chưa có đại lý tùy chỉnh nào.", + "customDeleteConfirm": "Xóa tác nhân tùy chỉnh \"{name}\"?", + "builtinSectionTitle": "Agents tích hợp", + "builtinSectionDescription": "Mỗi tác nhân tích hợp có thể có nhiều hồ sơ khởi chạy. Chỉ những đại lý được kích hoạt có hồ sơ đang hoạt động mới xuất hiện trong danh sách mô hình.", + "builtinHint": "Khởi chạy {name} với các cài đặt này.", + "disabledBadge": "Đã tắt", + "manageProfiles": "Hồ sơ", + "addProfile": "Thêm hồ sơ", + "activeProfile": "Hồ sơ hoạt động", + "profilePlaceholder": "Chọn một hồ sơ", + "profileSwitched": "Đã chuyển hồ sơ", + "customSectionTitle": "Agents tùy chỉnh", + "customSectionDescription": "Gói bất kỳ lệnh tương thích ACP nào dưới dạng mục nhập mô hình có thể sử dụng lại.", + "mcpAccessTitle": "Máy chủ MCP được phép", + "mcpAccessEmpty": "Hiện tại không có MCP tùy chọn.", + "mcpAccessBadge": "MCP {count}", + "sharedMcpTitle": "MCP được chia sẻ", + "sharedMcpDescription": "Tất cả các tác nhân ACP đều có chung lựa chọn truy cập MCP.", + "installedSectionTitle": "Đã cài đặt Agents", + "installedSectionDescription": "Chỉ các tác nhân đăng ký đã cài đặt mới xuất hiện ở đây để kích hoạt, kiểm tra và ghi đè env.", + "installedCount": "Đã cài đặt {count}", + "installedEmptyTitle": "Chưa có đại lý đăng ký nào được cài đặt", + "installedEmptyDescription": "Trước tiên hãy cài đặt một tác nhân từ Sổ đăng ký ACP, sau đó định cấu hình tác nhân đó tại đây.", + "registryOverlayEmpty": "Không có đại lý nào phù hợp với bộ lọc hiện tại.", + "registryInstallAction": "cài đặt", + "registryUninstallAction": "Gỡ cài đặt", + "registryUninstallConfirm": "Gỡ cài đặt \"{name}\"?", + "registryUninstallDescription": "DeepChat sẽ vô hiệu hóa tác nhân này và xóa dữ liệu cài đặt được quản lý cục bộ khi có thể. Bạn có thể cài đặt lại nó sau từ ACP Register.", + "registryUninstallFailed": "Không thể gỡ cài đặt tác nhân", + "registryInstallTitle": "Cơ quan đăng ký ACP", + "registryInstallDescription": "Tìm kiếm, lọc và cài đặt các tác nhân ACP. Định cấu hình lại chúng trong cài đặt sau khi cài đặt.", + "registryLearnMore": "Tìm hiểu thêm", + "registryRepository": "Kho lưu trữ", + "installFilters": { + "all": "Tất cả", + "installed": "Đã cài đặt", + "notInstalled": "Chưa được cài đặt" + }, + "loading": "Đang tải dữ liệu ACP...", + "none": "không có", + "saveSuccess": "Đã lưu cấu hình", + "saveFailed": "Không lưu được đại diện", + "deleteSuccess": "Đã xóa thành công", + "initialize": "Khởi tạo", + "initializing": "Đang khởi tạo...", + "initializeDescription": "Terminal được mở bằng các lệnh khởi tạo", + "initializeSuccess": "Bắt đầu khởi tạo", + "initializeFailed": "Khởi tạo không thành công", + "missingFieldsTitle": "Tên và lệnh là bắt buộc", + "missingFieldsDesc": "Vui lòng điền cả tên và lệnh trước khi lưu.", + "command": "Lệnh", + "commandPlaceholder": "Đường dẫn thực thi hoặc tập lệnh", + "args": "Đối số", + "argsPlaceholder": "Tùy chọn, cách nhau bằng dấu cách. Sử dụng dấu ngoặc kép để giữ các cuộc tranh luận lại với nhau.", + "env": "Biến môi trường", + "addEnv": "Thêm biến", + "envKeyPlaceholder": "CHÌA KHÓA", + "envValuePlaceholder": "GIÁ TRỊ", + "profileDialog": { + "addBuiltinTitle": "Thêm hồ sơ {name}", + "editBuiltinTitle": "Chỉnh sửa hồ sơ {name}", + "addCustomTitle": "Thêm Agent tùy chỉnh", + "editCustomTitle": "Chỉnh sửa Agent tùy chỉnh", + "builtinHint": "Sử dụng các cài đặt trước khác nhau cho từng kịch bản và chuyển đổi chúng trong bộ chọn.", + "customHint": "Cung cấp lệnh, đối số và các biến env để khởi chạy tác nhân của bạn.", + "profileName": "Tên hồ sơ", + "profileNamePlaceholder": "ví dụ: máy trạm", + "agentName": "Tên Agent", + "agentNamePlaceholder": "ví dụ: ACP địa phương của tôi" + }, + "profileManager": { + "title": "Hồ sơ", + "description": "Chuyển đổi, chỉnh sửa hoặc xóa hồ sơ khởi chạy đã lưu.", + "count": "Hồ sơ {count}", + "empty": "Chưa có hồ sơ nào.", + "active": "Đang hoạt động", + "setActive": "Đặt hoạt động", + "deleteConfirm": "Xóa hồ sơ \"{name}\"?", + "cannotDeleteTitle": "Giữ ít nhất một hồ sơ", + "cannotDeleteDesc": "Các tác nhân tích hợp yêu cầu ít nhất một cấu hình.", + "noAgent": "Chọn một đại lý để quản lý hồ sơ của nó." + }, + "terminal": { + "title": "Thiết bị đầu cuối khởi tạo", + "waiting": "Đang chờ quá trình khởi tạo bắt đầu...", + "starting": "Đang bắt đầu khởi tạo...", + "close": "Đóng", + "closing": "Đang đóng...", + "exitSuccess": "Quá trình hoàn tất thành công (mã thoát: {code})", + "exitError": "Quá trình đã thoát có lỗi (mã thoát: {code})", + "processError": "Lỗi quy trình", + "paste": "Dán", + "pasteError": "Không thể dán từ bảng nhớ tạm", + "status": { + "idle": "Nhàn rỗi", + "running": "Đang chạy", + "completed": "Đã hoàn thành", + "error": "Lỗi" + } + }, + "dependency": { + "title": "Thiếu phụ thuộc bên ngoài", + "description": "Các phụ thuộc sau đây cần được cài đặt trước khi khởi tạo.", + "installCommands": "Lệnh cài đặt", + "downloadUrl": "Liên kết tải xuống", + "copy": "Sao chép", + "copied": "Đã sao chép vào bảng nhớ tạm", + "copyFailed": "Không sao chép được" + }, + "debug": { + "title": "Gỡ lỗi ACP", + "description": "Gửi cuộc gọi ACP thô tới \"{name}\" và xem phản hồi.", + "entry": "Gỡ lỗi", + "workdirPlaceholder": "Sử dụng mặc định của tác nhân nếu trống", + "close": "Đóng", + "customMethod": "Tên phương thức tùy chỉnh", + "customMethodPlaceholder": "ví dụ: session/ping", + "payloadHint": "Chỉnh sửa nội dung JSON trước khi gửi.", + "format": "Định dạng JSON", + "resetTemplate": "Đặt lại mẫu", + "clearHistory": "Xóa lịch sử", + "send": "Gửi yêu cầu", + "sending": "Đang gửi...", + "processReady": "Quá trình đã sẵn sàng", + "processNotReady": "Khởi tạo để bắt đầu", + "needInitialize": "Chạy khởi tạo trước", + "events": "Sự kiện", + "eventCount": "Vật phẩm {count}", + "empty": "Chưa có sự kiện gỡ lỗi nào.", + "parseError": "Tải trọng JSON không hợp lệ", + "customMethodRequired": "Cung cấp tên phương thức cho cuộc gọi mở rộng", + "requestFailed": "Yêu cầu không thành công", + "methods": { + "initialize": "khởi tạo", + "newSession": "session/new", + "loadSession": "session/load", + "prompt": "session/prompt", + "cancel": "session/cancel", + "setSessionMode": "session/setMode", + "setSessionModel": "session/setModel", + "extMethod": "ext/method", + "extNotification": "ext/notification" + }, + "eventKinds": { + "request": "Yêu cầu", + "response": "phản hồi", + "notification": "Thông báo", + "permission": "Quyền", + "lifecycle": "Vòng đời", + "stderr": "lỗi chuẩn", + "error": "Lỗi" + }, + "healthCheck": "Kiểm tra sức khỏe", + "healthChecking": "Đang kiểm tra...", + "healthCheckFailed": "Kiểm tra sức khỏe không thành công" + }, + "registryCount": "Đại lý {count}", + "registryEmpty": "Không có đại lý đăng ký nào có sẵn cho các bộ lọc hiện tại.", + "registryRefresh": "Làm mới sổ đăng ký", + "registryRepair": "sửa chữa", + "registrySearchPlaceholder": "Tìm kiếm Cơ quan đăng ký ACP Agents...", + "filters": { + "all": "Tất cả trạng thái", + "enabled": "Chỉ kích hoạt", + "installed": "Chỉ được cài đặt", + "attention": "Cần chú ý" + }, + "envOverrideTitle": "Ghi đè biến môi trường", + "envOverridePlaceholder": "Một KEY=VALUE trên mỗi dòng", + "installState": { + "installed": "Đã cài đặt", + "installing": "Đang cài đặt", + "error": "Cài đặt không thành công", + "notInstalled": "Chưa được cài đặt" + } + }, + "rateLimit": { + "title": "Giới hạn tỷ lệ", + "description": "Kiểm soát khoảng thời gian yêu cầu để tránh vượt quá giới hạn API", + "intervalLimit": "Khoảng thời gian yêu cầu", + "intervalUnit": "giây", + "intervalHelper": "Khoảng cách tối thiểu giữa các yêu cầu, vô hiệu hóa giới hạn tốc độ nếu không cần thiết", + "lastRequestTime": "Yêu cầu cuối cùng", + "queueLength": "Độ dài hàng đợi", + "nextAllowedTime": "Tiếp theo Được phép", + "never": "không bao giờ", + "justNow": "Vừa rồi", + "secondsAgo": "cách đây", + "minutesAgo": "cách đây vài phút", + "immediately": "bây giờ", + "secondsLater": "lát nữa", + "confirmDisableTitle": "Xác nhận Tắt giới hạn tỷ lệ", + "confirmDisableMessage": "Giá trị không thể nhỏ hơn hoặc bằng 0. Bạn có muốn tắt giới hạn tốc độ không?", + "confirmDisable": "Vô hiệu hóa giới hạn", + "disabled": "Giới hạn tỷ lệ bị vô hiệu hóa", + "disabledDescription": "Giới hạn tỷ lệ đã bị vô hiệu hóa" + }, + "promptSetting": { + "resetToDefault": "Đặt lại về mặc định prompt", + "resetToDefaultSuccess": "Đặt lại về mặc định system prompt thành công", + "resetToDefaultFailed": "Không đặt lại được, vui lòng thử lại" + }, + "skills": { + "title": "Skills", + "description": "Quản lý và cấu hình các kỹ năng trợ lý AI", + "draftSuggestions": { + "title": "Đề xuất bản thảo kỹ năng", + "description": "Sau khi hoàn thành một nhiệm vụ, hãy cho phép nhân viên đề xuất các bản nháp kỹ năng có thể sử dụng lại tạm thời. Các bản nháp vẫn nằm trong thư mục tạm thời cho đến khi bạn chọn nhập chúng theo cách thủ công." + }, + "openFolder": "Mở thư mục", + "addSkill": "Thêm kỹ năng", + "empty": "Chưa có kỹ năng", + "emptyHint": "Nhấp vào \"Thêm kỹ năng\" để cài đặt kỹ năng mới", + "noResults": "Không tìm thấy kỹ năng phù hợp", + "search": "Kỹ năng tìm kiếm...", + "count": "Kỹ năng {count}", + "install": { + "title": "Cài đặt kỹ năng", + "description": "Chọn phương pháp cài đặt kỹ năng", + "tabFolder": "Thư mục", + "tabZip": "Mã ZIP", + "tabUrl": "URL", + "fromFolder": "Cài đặt từ thư mục", + "selectFolder": "Chọn thư mục kỹ năng", + "folderHint": "Bấm để chọn thư mục kỹ năng", + "folderTip": "Nhập kỹ năng từ các khách hàng khác như ~/.claude/skills/", + "zipHint": "Nhấp để chọn tệp ZIP", + "urlPlaceholder": "Nhập kỹ năng ZIP tải xuống URL", + "urlHint": "Nhập link tải gói kỹ năng", + "installButton": "cài đặt", + "installing": "Đang cài đặt...", + "success": "Cài đặt thành công", + "successMessage": "Kỹ năng {name} đã được cài đặt thành công", + "failed": "Cài đặt không thành công", + "dragNotSupported": "Kéo không được hỗ trợ, vui lòng bấm vào để chọn" + }, + "delete": { + "title": "Xóa kỹ năng", + "description": "Bạn có chắc chắn muốn xóa kỹ năng {name} không? Không thể hoàn tác hành động này.", + "success": "Xóa thành công", + "successMessage": "Kỹ năng {name} đã được xóa thành công", + "failed": "Xóa không thành công" + }, + "card": { + "scripts": "Tập lệnh {count}", + "env": "{count} môi trường", + "pythonShort": "Py", + "nodeShort": "nút" + }, + "edit": { + "title": "Chỉnh sửa kỹ năng", + "placeholder": "Chỉnh sửa nội dung kỹ năng ở đây...", + "readFailed": "Không đọc được", + "success": "Đã lưu thành công", + "failed": "Không lưu được", + "name": "Tên", + "namePlaceholder": "Tên kỹ năng", + "nameHint": "Tên kỹ năng không thể thay đổi sau khi tạo", + "description": "Mô tả", + "descriptionPlaceholder": "Mô tả kỹ năng", + "allowedTools": "Công cụ được phép", + "allowedToolsPlaceholder": "Đọc, Grep, Bash", + "allowedToolsHint": "Danh sách tên công cụ được phân tách bằng dấu phẩy", + "content": "Nội dung kỹ năng", + "runtimeTitle": "Thời gian chạy", + "runtimeHint": "Chọn cách các tập lệnh đi kèm giải quyết thời gian chạy Python và Node.", + "pythonRuntime": "Thời gian chạy Python", + "nodeRuntime": "Thời gian chạy nút", + "envTitle": "Biến môi trường", + "envWarning": "Chỉ ẩn trong giao diện người dùng. Các giá trị được lưu trữ dưới dạng văn bản thuần túy trong tệp sidecar kỹ năng.", + "scriptsTitle": "Tập lệnh đi kèm", + "scriptsHint": "Chỉ các tập lệnh trong scripts/ mới có thể chạy qua Skill_run.", + "noScripts": "Không phát hiện thấy tập lệnh có thể chạy nào", + "scriptEnabled": "Đã bật", + "scriptDescription": "Ghi đè mô tả", + "scriptDescriptionPlaceholder": "Mô tả tùy chọn được hiển thị cho đại lý", + "runtime": { + "auto": "Tự động dự phòng", + "system": "Thời gian chạy hệ thống", + "builtin": "Thời gian chạy tích hợp" + }, + "files": "Nội dung thư mục", + "noFiles": "Không có tập tin" + }, + "conflict": { + "title": "Kỹ năng đã tồn tại", + "description": "Một kỹ năng có tên \"{name}\" đã tồn tại. Bạn có muốn ghi đè lên nó không?", + "overwrite": "Ghi đè" + }, + "sync": { + "title": "Đồng bộ hóa", + "import": "Nhập từ Công cụ khác...", + "export": "Xuất khẩu", + "importTitle": "Nhập Skills từ các công cụ khác", + "exportTitle": "Xuất Skills sang các công cụ khác", + "importDescription": "Nhập kỹ năng từ Claude Code, Cursor và các công cụ khác", + "exportDescription": "Xuất kỹ năng sang các công cụ trợ lý AI khác", + "step1Title": "Chọn công cụ nguồn", + "step2Title": "Chọn Skills để nhập", + "step3Title": "Xác nhận nhập", + "exportStep1Title": "Chọn Skills để xuất", + "exportStep2Title": "Chọn công cụ mục tiêu", + "exportStep3Title": "Xác nhận xuất", + "scanning": "Đang quét...", + "noToolsFound": "Không phát hiện thấy công cụ đã cài đặt nào", + "skillCount": "Đã phát hiện thấy kỹ năng {count}", + "notInstalled": "Chưa được cài đặt", + "selectedCount": "{count} đã chọn", + "selectAll": "Chọn tất cả", + "deselectAll": "Bỏ chọn tất cả", + "conflict": "Xung đột", + "conflictDescription": "Một kỹ năng có tên \"{name}\" đã tồn tại", + "batchAction": "Hành động hàng loạt", + "skip": "Bỏ qua", + "skipAll": "Bỏ qua tất cả", + "overwrite": "Ghi đè", + "overwriteAll": "Ghi đè tất cả", + "rename": "Đổi tên", + "renameAll": "Đổi tên tất cả", + "warnings": "Cảnh báo chuyển đổi", + "previewing": "Đang xem trước...", + "importing": "Đang nhập ({current}/{total})...", + "exporting": "Đang xuất ({current}/{total})...", + "importButton": "Nhập khẩu", + "exportButton": "Xuất khẩu", + "exportWarnings": "Cảnh báo xuất khẩu", + "noConflicts": "Không có xung đột", + "readyToExport": "Sẵn sàng xuất khẩu kỹ năng {count}", + "kiroOptions": "Tùy chọn xuất Kiro", + "kiroInclusion": "Chế độ bao gồm", + "kiroOnDemand": "theo yêu cầu", + "kiroOnDemandDesc": "Chỉ được sử dụng khi người dùng yêu cầu rõ ràng", + "kiroAlways": "Luôn luôn", + "kiroAlwaysDesc": "Tự động được đưa vào mọi cuộc trò chuyện", + "kiroConditional": "có điều kiện", + "kiroConditionalDesc": "Tự động đưa vào dựa trên việc khớp mẫu tệp", + "kiroFilePatterns": "Mẫu tệp", + "kiroFilePatternsPlaceholder": "ví dụ: **/*.ts, src/**/*.vue", + "kiroFilePatternsHint": "Các mẫu hình cầu được phân tách bằng dấu phẩy", + "scanError": "Quét không thành công", + "previewError": "Xem trước không thành công", + "loadToolsError": "Không thể tải danh sách công cụ", + "importSuccess": "Nhập thành công", + "importSuccessMessage": "Đã nhập thành công kỹ năng {count}", + "importPartial": "Nhập thành công một phần", + "importPartialMessage": "{success} đã thành công, {skipped} bị bỏ qua, {failed} không thành công", + "importError": "Nhập không thành công", + "exportSuccess": "Xuất thành công", + "exportSuccessMessage": "Đã xuất thành công các kỹ năng {count}", + "exportPartial": "Xuất khẩu một phần thành công", + "exportPartialMessage": "{success} đã thành công, {skipped} bị bỏ qua, {failed} không thành công", + "exportError": "Xuất không thành công", + "resultSuccess": "Hoạt động thành công", + "resultPartial": "Thành công một phần", + "imported": "Đã nhập", + "exported": "Đã xuất", + "skipped": "Đã bỏ qua", + "failed": "thất bại", + "failedItems": "Mục không thành công" + }, + "syncStatus": { + "title": "Công cụ bên ngoài", + "description": "Nhập kỹ năng từ các trợ lý mã hóa AI khác", + "scanning": "Đang quét công cụ...", + "noToolsFound": "Không phát hiện thấy công cụ bên ngoài nào", + "skillCount": "Kỹ năng {count}", + "notInstalled": "Chưa được cài đặt", + "notAvailable": "Không có sẵn", + "noSkills": "Không có kỹ năng", + "import": "Nhập khẩu", + "syncing": "Đang nhập khẩu..." + }, + "syncPrompt": { + "title": "Đã phát hiện Skills mới", + "description": "Chúng tôi đã tìm thấy những kỹ năng mới trong các trợ lý mã hóa AI khác. Bạn có muốn nhập chúng không?", + "dontShowAgain": "Đừng hiển thị lại điều này", + "skip": "Bỏ qua", + "importSelected": "Nhập đã chọn" + } + }, + "environments": { + "title": "Môi trường", + "description": "Xem lại các thư mục dự án được các phiên của bạn sử dụng, mở nhanh chúng hoặc đặt một thư mục làm mặc định cho các cuộc trò chuyện mới.", + "default": { + "title": "Thư mục mặc định", + "description": "Các cuộc trò chuyện mới chọn trước thư mục này trừ khi bạn chọn một thư mục khác theo cách thủ công.", + "empty": "Không có thư mục mặc định nào được đặt." + }, + "history": { + "title": "Lịch sử", + "description": "Chỉ những thư mục thực sự được sử dụng bởi các phiên mới được liệt kê ở đây." + }, + "temp": { + "title": "Thư mục tạm thời", + "description": "Các thư mục trong thư mục gốc tạm thời hoặc không gian làm việc do ứng dụng quản lý được nhóm ở đây và ẩn theo mặc định." + }, + "actions": { + "refresh": "Làm mới", + "showMissing": "Hiển thị Thiếu", + "open": "Mở", + "setDefault": "Đặt mặc định", + "clearDefault": "Xóa mặc định", + "showTemp": "Hiển thị nhiệt độ", + "hideTemp": "Ẩn nhiệt độ" + }, + "badges": { + "default": "Mặc định", + "temp": "Nhiệt độ", + "missing": "Thiếu", + "notInHistory": "Không có trong Lịch sử" + }, + "meta": { + "sessions": "Phiên {count}", + "lastUsed": "Lần sử dụng cuối cùng: {value}", + "never": "không bao giờ" + }, + "empty": { + "regular": "Không có môi trường để hiển thị.", + "temp": "Chưa có môi trường tạm thời." + }, + "errors": { + "openTitle": "Không mở được thư mục" + } + }, + "remote": { + "title": "Từ xa", + "description": "Định cấu hình điều khiển từ xa Telegram, Feishu / Lark, QQBot, Discord và WeChat iLink ở một nơi.", + "telegram": { + "title": "Telegram", + "description": "Kết nối bot Telegram để nhắn tin trực tiếp, nhóm và điều khiển từ xa theo chủ đề.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Telegram bot token", + "botTokenDescription": "Nhập bot Telegram token được sử dụng cho điều khiển từ xa Telegram." + }, + "feishu": { + "title": "Feishu / Lark", + "description": "Kết nối bot Feishu để nhắn tin trực tiếp, trò chuyện nhóm và chuỗi chủ đề.", + "brand": "Thương hiệu", + "brandFeishu": "Feishu", + "brandLark": "Lark", + "appId": "ID ứng dụng", + "appIdPlaceholder": "ID ứng dụng Feishu", + "appSecret": "Bí mật ứng dụng", + "appSecretPlaceholder": "Bí mật ứng dụng Feishu", + "verificationToken": "Xác minh Token", + "verificationTokenPlaceholder": "Xác minh Feishu token", + "encryptKey": "Khóa mã hóa (tùy chọn)", + "encryptKeyPlaceholder": "Để trống trừ khi bật mã hóa sự kiện", + "botUser": "Người dùng bot: {name} ({openId})", + "bindings": "Ràng buộc: {count}, người dùng được ghép nối: {pairedUserCount}", + "pairedUserOpenIds": "ID mở của người dùng được ghép nối", + "pairedUserOpenIdsPlaceholder": "ví dụ: ou_xxx, ou_yyy", + "accessRulesDescription": "Trước tiên hãy ghép nối bằng tin nhắn trực tiếp. Trong nhóm, chỉ những người dùng được ghép nối mà {'@'} đề cập đến bot mới có thể thúc đẩy một phiên.", + "accessRule1": "Ghép nối trong tin nhắn trực tiếp với /pair [mã].", + "accessRule2": "Trong các nhóm và chủ đề, bot chỉ phản ứng khi người dùng được ghép nối {'@'} đề cập đến nó." + }, + "discord": { + "title": "Discord", + "description": "Kết nối bot Discord cho DM, đề cập kênh và điều khiển từ xa bằng lệnh gạch chéo.", + "botToken": "Bot Token", + "botTokenPlaceholder": "Discord bot token", + "remoteControlDescription": "Điều khiển từ xa Discord sử dụng bot token, cổng và luồng REST riêng.", + "accessRule1": "Gửi /cặp [mã] trong kênh DM hoặc kênh đích để cấp phép cho điểm cuối Discord hiện tại.", + "accessRule2": "Tin nhắn kênh chỉ tham gia cuộc trò chuyện khi bot được nhắc đến, điều này tránh việc tiếp tục trò chuyện thông thường." + }, + "sections": { + "credentials": "Thông tin xác thực", + "remoteControl": "Điều khiển từ xa", + "notifications": "Thông báo", + "accessRules": "Quy tắc truy cập" + }, + "remoteControl": { + "description": "Liên kết mỗi điểm cuối từ xa với một phiên và giữ cho phiên đó luôn sẵn sàng trên các lệnh.", + "allowedUserIds": "ID người dùng được phép", + "allowedUserIdsPlaceholder": "ví dụ: 123456789, 987654321", + "defaultAgent": "Agent mặc định", + "defaultAgentPlaceholder": "Chọn đại lý", + "defaultWorkdir": "Thư mục mặc định", + "defaultWorkdirPlaceholder": "Chọn thư mục mặc định", + "defaultWorkdirHelper": "Thư mục không gian làm việc cho các phiên từ xa. Bắt buộc khi tác nhân mặc định là ACP.", + "openPairDialog": "Cặp", + "manageBindings": "Quản lý ràng buộc", + "pairCode": "Mã cặp", + "noPairCode": "Không có mã cặp hoạt động", + "pairCodeExpiresAt": "Hết hạn lúc {time}", + "pairDialogTitle": "Ghép nối {channel}", + "pairDialogDescription": "Tạo mã ghép nối và hoàn tất ghép nối từ cuộc trò chuyện bot {channel} của bạn.", + "pairDialogInstructionTelegram": "Gửi lệnh này tới bot Telegram:", + "pairDialogInstructionFeishu": "Gửi lệnh này tới bot Feishu bằng tin nhắn trực tiếp:", + "pairDialogInstructionDiscord": "Gửi lệnh này tới bot Discord trong kênh DM hoặc kênh mục tiêu:", + "bindingsDialogTitle": "Ràng buộc {channel}", + "bindingsDialogDescription": "Loại bỏ từng ràng buộc điểm cuối từ xa.", + "bindingsEmpty": "Chưa có ràng buộc nào.", + "pairingSuccessTitle": "Ghép nối hoàn tất", + "pairingSuccessDescription": "Danh sách chính được ghép nối đã được làm mới.", + "pairDialogInstructionQQBot": "Gửi lệnh này đến cuộc trò chuyện bot QQ hoặc nhóm QQ được ủy quyền:", + "authorizedPrincipalsTitle": "Hiệu trưởng được ủy quyền", + "authorizedPrincipalsDescription": "Các tài khoản {channel} này được phép ghép nối và kiểm soát các phiên.", + "authorizedPrincipalsEmpty": "Chưa có hiệu trưởng được ủy quyền.", + "sessionBindingsTitle": "Ràng buộc phiên", + "sessionBindingsDescription": "Mỗi điểm cuối từ xa bên dưới hiện được liên kết với một phiên DeepChat." + }, + "hooks": { + "title": "Móc Telegram", + "description": "Sử dụng lại bot Telegram tương tự cho các thông báo hook.", + "chatId": "ID trò chuyện", + "chatIdPlaceholder": "ví dụ: 123456789", + "threadId": "ID chủ đề (tùy chọn)", + "threadIdPlaceholder": "ID chủ đề tùy chọn" + }, + "status": { + "title": "Trạng thái thời gian chạy", + "botUser": "Người dùng bot: {username} ({id})", + "bindings": "Các ràng buộc: {count}, phần bù thăm dò: {pollOffset}", + "states": { + "disabled": "Đã tắt", + "stopped": "Đã dừng", + "starting": "Bắt đầu", + "running": "Đang chạy", + "backoff": "Thử lại sau khi thất bại", + "error": "Lỗi" + }, + "bindingOnly": "Các ràng buộc: {count}, các nguyên tắc ghép đôi: {paired}" + }, + "overview": { + "telegram": "Liên kết {bindingCount}, người dùng được ghép nối {pairedCount}", + "feishu": "Liên kết {bindingCount}, người dùng được ghép nối {pairedCount}", + "hooksOn": "trên", + "hooksOff": "tắt", + "qqbot": "Liên kết {bindingCount}, người dùng được ghép nối {pairedCount}", + "discord": "Các liên kết {bindingCount}, các kênh được ghép nối {pairedCount}", + "weixinIlink": "Liên kết {bindingCount}, tài khoản {accountCount}, {connectedCount} được kết nối" + }, + "bindingKinds": { + "dm": "DM", + "group": "Nhóm", + "topic": "chủ đề" + }, + "qqbot": { + "title": "QQBot", + "description": "Kết nối QQ Bot chính thức để trò chuyện C2C và kiểm soát bot dựa trên đề cập của nhóm được ủy quyền.", + "appId": "ID ứng dụng", + "appIdPlaceholder": "ID ứng dụng QQ Bot", + "clientSecret": "Bí mật khách hàng", + "clientSecretPlaceholder": "Bí mật khách hàng QQ Bot", + "remoteControlDescription": "Mã định danh openid chính thức của QQ khác nhau giữa C2C và các nhóm, do đó, tin nhắn trực tiếp sẽ ghép nối người dùng trong khi các nhóm được ủy quyền riêng bằng /pair.", + "pairedUserIds": "OpenID người dùng được ghép nối", + "pairedUserIdsPlaceholder": "ví dụ: user_openid_xxx, user_openid_yyy" + }, + "weixinIlink": { + "title": "WeChat iLink", + "description": "Kết nối WeChat iLink Bot chính thức thông qua đăng nhập QR, sau đó định tuyến các phiên điều khiển từ xa thông qua bộ điều hợp tích hợp.", + "loginDescription": "Nhấp vào nút bên dưới để mở cửa sổ đăng nhập WeChat chính thức. Hoàn tất ủy quyền iLink Bot tại đó và tài khoản được kết nối sẽ tự động được thêm vào đây.", + "ownerOnlyNotice": "Phiên bản đầu tiên này chỉ cho phép tài khoản chủ sở hữu đăng nhập QR kiểm soát DeepChat.", + "connectButton": "Mở cửa sổ đăng nhập", + "refreshQrCode": "Mở lại cửa sổ đăng nhập", + "loginDialogTitle": "Kết nối WeChat iLink", + "loginDialogDescription": "Trang đăng nhập WeChat chính thức sẽ mở trong một cửa sổ riêng. Hoàn tất ủy quyền QR ở đó và giữ hộp thoại này mở cho đến khi kết nối kết thúc.", + "loginFailed": "WeChat đăng nhập iLink không thành công.", + "loginSuccessTitle": "WeChat iLink đã kết nối", + "loginSuccessDescription": "Tài khoản {accountId} đã sẵn sàng.", + "accountsTitle": "Tài khoản", + "accountsDescription": "Mỗi tài khoản iLink Bot được kết nối sẽ chạy độc lập và giữ các ràng buộc cũng như trạng thái thời gian chạy riêng.", + "noAccounts": "Chưa có tài khoản iLink WeChat nào được kết nối.", + "ownerUserId": "ID người dùng chủ sở hữu: {ownerUserId}", + "baseUrl": "Cơ sở URL: {baseUrl}", + "accountBindings": "Ràng buộc: {count}", + "remoteControlDescription": "Đặt tác nhân mặc định được chia sẻ bởi các tài khoản iLink WeChat, sau đó quản lý các liên kết được tạo bởi các phiên đến.", + "removeAccount": "Xóa tài khoản", + "restartAccount": "Khởi động lại tài khoản", + "statusSummary": "Tài khoản {accounts}, {connected} được kết nối, liên kết {bindings}", + "qrcodeAlt": "Mã QR WeChat iLink", + "loginWindowOpened": "Cửa sổ đăng nhập WeChat chính thức đã được mở. Hoàn thành ủy quyền QR ở đó.", + "loginSessionExpired": "Phiên đăng nhập này đã hết hạn. Mở lại cửa sổ đăng nhập và thử lại.", + "loginResponseIncomplete": "Phản hồi đăng nhập iLink WeChat không đầy đủ. Vui lòng thử lại.", + "loginTimedOut": "Đã hết thời gian chờ ủy quyền iLink WeChat. Mở lại cửa sổ đăng nhập và thử lại.", + "loginConnected": "Tài khoản iLink WeChat đã được kết nối." + } + }, + "plugins": { + "title": "Plugin", + "officialOnly": "Quản lý các plugin chính thức tích hợp sẵn có trong phiên bản DeepChat này.", + "refresh": "Làm mới", + "empty": "Không có plugin chính thức nào có sẵn", + "emptyTitle": "Không có plugin tích hợp sẵn", + "emptyDescription": "Nền tảng này không có plugin chính thức tích hợp sẵn trong phiên bản DeepChat này.", + "loadFailed": "Không thể tải plugin", + "actionFailed": "Thao tác plugin không thành công", + "install": "cài đặt", + "installFromFile": "Chọn .dcplugin", + "openRelease": "Phát hành GitHub", + "enable": "Kích hoạt", + "disable": "Vô hiệu hóa", + "openSettings": "Cài đặt", + "runtime": "Thời gian chạy", + "version": "Phiên bản", + "command": "Lệnh", + "status": { + "enabled": "Đã bật", + "disabled": "Đã tắt", + "available": "Có sẵn" + }, + "runtimeStates": { + "missing": "Thiếu", + "installed": "Đã cài đặt", + "running": "Đang chạy", + "error": "Lỗi" + } + }, + "controlCenter": { + "groups": { + "overview": "Tổng quan", + "setup": "thiết lập", + "models": "Cài đặt Agent", + "tools": "Tiện ích mở rộng khả năng", + "knowledge": "Kiến thức", + "system": "Hệ thống" + }, + "overview": { + "title": "Tổng quan về cài đặt", + "description": "Xem lại nhà cung cấp, MCP, DeepChat Agent, dữ liệu và trạng thái sử dụng ở một nơi.", + "searchPlaceholder": "Tìm kiếm cài đặt, nhà cung cấp, model, đại lý, MCP...", + "providers": "Nhà cung cấp", + "mcp": "MCP", + "deepchatAgents": "DeepChat Agent", + "data": "Lần sao lưu cuối cùng", + "enabledCount": "Đã bật {count}", + "runningCount": "{count} đang chạy", + "enabledAgentCount": "Đã bật tác nhân {count}", + "providersDescription": "Trạng thái kết nối của nhà cung cấp", + "deepchatAgentsDescription": "Điểm vào cấu hình Agent", + "mcpOn": "Đã bật MCP", + "mcpOff": "MCP bị vô hiệu hóa", + "syncOn": "Đã bật đồng bộ hóa", + "syncOff": "Đã tắt đồng bộ hóa", + "backupNever": "Sao lưu: không bao giờ" + }, + "quickStart": { + "title": "Bắt đầu nhanh", + "addApiKey": "Thêm API Key", + "addApiKeyDesc": "Định cấu hình quyền truy cập của nhà cung cấp", + "enableModel": "Kích hoạt mô hình", + "enableModelDesc": "Bật mô hình có thể sử dụng", + "startMcp": "Khởi động máy chủ MCP", + "startMcpDesc": "Khởi động máy chủ công cụ", + "backupNow": "Sao lưu ngay", + "backupNowDesc": "Tạo bản sao lưu dữ liệu" + }, + "needsAttention": { + "title": "Cần chú ý", + "empty": "Không có gì cần chú ý", + "noModels": "Không có mô hình nào được kích hoạt", + "privacyOff": "Chế độ bảo mật đang tắt", + "backupNever": "Sao lưu chưa bao giờ chạy" + }, + "activity": { + "title": "Thay đổi cài đặt gần đây", + "description": "Hiển thị 200 thay đổi cài đặt mới nhất trong khi vẫn giữ lại 2000 bản ghi mới nhất.", + "when": "thời gian", + "category": "Danh mục", + "change": "Thay đổi", + "empty": "Không có thay đổi gần đây", + "emptyDescription": "Thay đổi cài đặt thành công sẽ xuất hiện ở đây.", + "settingUpdated": "Cài đặt đã cập nhật: {key}", + "providerUpdated": "Nhà cung cấp được cập nhật: {name}", + "providerCreated": "Nhà cung cấp đã thêm: {name}", + "providerRemoved": "Nhà cung cấp đã xóa: {name}", + "providerModelsRefreshed": "Mô hình nhà cung cấp được làm mới: {name}", + "modelStatusChanged": "Trạng thái mô hình được cập nhật: {model}", + "modelBatchUpdated": "Đã cập nhật các mẫu {count}", + "mcpServerCreated": "Đã thêm máy chủ MCP: {name}", + "mcpServerUpdated": "Máy chủ MCP đã cập nhật: {name}", + "mcpServerRemoved": "Đã xóa máy chủ MCP: {name}", + "mcpServerStatusChanged": "Máy chủ MCP đã chuyển đổi: {name}", + "mcpGlobalStatusChanged": "Trạng thái toàn cầu của MCP đã được chuyển đổi: {status}", + "mcpServerStarted": "Đã khởi động máy chủ MCP: {name}", + "mcpServerStopped": "Máy chủ MCP đã dừng: {name}", + "mcpRegistryRefreshed": "Đã làm mới sổ đăng ký NPM MCP", + "backupCreated": "Đã tạo bản sao lưu: {name}", + "backupImported": "Bản sao lưu đã nhập: {name}", + "databaseRepaired": "Sửa chữa cơ sở dữ liệu đã hoàn tất: {status}" + } + } +} diff --git a/src/renderer/src/i18n/vi-VN/sync.json b/src/renderer/src/i18n/vi-VN/sync.json new file mode 100644 index 000000000..63cef2369 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/sync.json @@ -0,0 +1,20 @@ +{ + "success": { + "importComplete": "Đã nhập thành công (các) cuộc trò chuyện {count}." + }, + "error": { + "notEnabled": "Đồng bộ hóa chưa được bật", + "folderNotExists": "Thư mục đồng bộ hóa không tồn tại", + "noValidBackup": "Không tìm thấy tệp sao lưu hợp lệ nào trong thư mục đồng bộ hóa.", + "unsupportedBackupVersion": "Bản sao lưu này được tạo bởi phiên bản mới hơn của DeepChat và không thể nhập được.", + "dbNotExists": "Tệp cơ sở dữ liệu không tồn tại", + "configNotExists": "Tập tin cấu hình không tồn tại", + "tempDbFailed": "Không tạo được tệp sao lưu cơ sở dữ liệu tạm thời", + "tempConfigFailed": "Không tạo được tệp sao lưu cấu hình tạm thời", + "importFailed": "Nhập không thành công, dữ liệu gốc đã được khôi phục", + "importProcess": "Đã xảy ra lỗi trong quá trình nhập", + "unknown": "Lỗi không xác định", + "encryptedBackupPasswordMissing": "Bản sao lưu này được mã hóa nhưng không có khóa cơ sở dữ liệu cục bộ. Mở khóa cơ sở dữ liệu được mã hóa trước, sau đó nhập lại.", + "overwriteEncryptionMismatch": "Quá trình nhập ghi đè yêu cầu bản sao lưu và cơ sở dữ liệu hiện tại sử dụng cùng trạng thái mã hóa." + } +} diff --git a/src/renderer/src/i18n/vi-VN/thread.json b/src/renderer/src/i18n/vi-VN/thread.json new file mode 100644 index 000000000..94580cc5e --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/thread.json @@ -0,0 +1,46 @@ +{ + "actions": { + "rename": "Đổi tên", + "delete": "Xóa", + "cleanMessages": "Xóa tin nhắn", + "pin": "Ghim", + "unpin": "Bỏ ghim", + "export": "Xuất khẩu", + "exportText": "Văn bản thuần túy", + "exportNowledgeMem": "Nowledge-mem" + }, + "toolbar": { + "save": "Lưu", + "cancel": "Hủy bỏ", + "previousVariant": "Biến thể trước đó", + "nextVariant": "Biến thể tiếp theo", + "copy": "Sao chép dưới dạng Markdown", + "copyImage": "Sao chép dưới dạng hình ảnh", + "copyImageWithLongPress": "Sao chép dưới dạng hình ảnh (nhấn và giữ để chụp từ trên xuống)", + "copyFromTopSuccess": "Đã sao chép toàn bộ hình ảnh cuộc trò chuyện", + "capturing": "Đang chụp...", + "retry": "tái sinh", + "fork": "Chi nhánh đến cuộc trò chuyện mới", + "edit": "Chỉnh sửa tin nhắn", + "delete": "Xóa tin nhắn", + "trace": "Yêu cầu theo dõi" + }, + "message": { + "toolbar": { + "save": "Lưu" + } + }, + "export": { + "failed": "Xuất không thành công", + "failedDesc": "Đã xảy ra lỗi trong quá trình xuất, vui lòng thử lại", + "success": "Xuất thành công", + "successDesc": "Cuộc hội thoại đã được xuất thành công", + "nowledgeMemSuccess": "Xuất Nowledge-mem thành công", + "nowledgeMemSuccessDesc": "Cuộc hội thoại đã được xuất thành công sang định dạng nowledge-mem", + "nowledgeMemSubmitPrompt": "Bạn có muốn gửi cuộc trò chuyện này tới nowledge-mem không?", + "nowledgeMemSubmitSuccess": "Gửi Nowledge-mem thành công", + "nowledgeMemSubmitSuccessDesc": "Cuộc trò chuyện đã được gửi thành công tới nowledge-mem", + "nowledgeMemSubmitFailed": "Gửi Nowledge-mem không thành công", + "nowledgeMemSubmitFailedDesc": "Không thể gửi cuộc trò chuyện tới nowledge-mem" + } +} diff --git a/src/renderer/src/i18n/vi-VN/toolCall.json b/src/renderer/src/i18n/vi-VN/toolCall.json new file mode 100644 index 000000000..ba46b21db --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/toolCall.json @@ -0,0 +1,25 @@ +{ + "calling": "Đang gọi...", + "response": "Đang chạy...", + "end": "Xong", + "error": "Lỗi", + "title": "Cuộc gọi công cụ", + "clickToView": "Nhấn vào đây để xem chi tiết", + "functionName": "Tên chức năng", + "permission": "Đang yêu cầu sự cho phép...", + "params": "Thông số chức năng", + "responseData": "phản hồi", + "imagePreview": "Xem trước hình ảnh", + "imagePreviewCount": "Không có bản xem trước hình ảnh | Xem trước một hình ảnh | Xem trước hình ảnh {count}", + "terminalOutput": "Đầu ra thiết bị đầu cuối", + "badge": { + "rtk": "RTK" + }, + "replacementsCount": "Đã hoàn thành việc thay thế {count}", + "fileOperation": "Thao tác với tệp", + "fileRead": "Đọc tệp", + "fileWrite": "Viết tập tin", + "filePath": "Đường dẫn tệp", + "success": "thành công", + "failed": "thất bại" +} diff --git a/src/renderer/src/i18n/vi-VN/traceDialog.json b/src/renderer/src/i18n/vi-VN/traceDialog.json new file mode 100644 index 000000000..fb81ddce5 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/traceDialog.json @@ -0,0 +1,17 @@ +{ + "title": "Yêu cầu xem trước", + "provider": "nhà cung cấp", + "model": "người mẫu", + "endpoint": "Điểm cuối API", + "headers": "Tiêu đề", + "body": "Nội dung yêu cầu", + "copyJson": "Sao chép JSON", + "copySuccess": "Đã sao chép vào bảng nhớ tạm", + "close": "Đóng", + "loading": "Đang tải...", + "error": "Không tải được", + "errorDesc": "Không thể tìm nạp bản xem trước yêu cầu, vui lòng thử lại", + "notImplemented": "Không được hỗ trợ", + "notImplementedDesc": "Nhà cung cấp này chưa triển khai bản xem trước yêu cầu", + "mayNotMatch": "Lưu ý: Bản xem trước này được xây dựng lại từ cài đặt cuộc trò chuyện hiện tại và có thể không khớp chính xác với các tham số yêu cầu thực tế" +} diff --git a/src/renderer/src/i18n/vi-VN/update.json b/src/renderer/src/i18n/vi-VN/update.json new file mode 100644 index 000000000..dcf417078 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/update.json @@ -0,0 +1,20 @@ +{ + "newVersion": "Đã tìm thấy phiên bản mới", + "version": "Phiên bản", + "releaseDate": "Ngày phát hành", + "releaseNotes": "Ghi chú phát hành", + "later": "sau này", + "githubDownload": "Tải xuống GitHub", + "officialDownload": "Tải xuống chính thức", + "checkUpdate": "Kiểm tra cập nhật", + "downloading": "Đang tải xuống", + "installNow": "Cài đặt ngay", + "installUpdate": "Cài đặt bản cập nhật", + "versionAvailable": "{version} có sẵn", + "autoUpdateFailed": "Cập nhật tự động không thành công. Vui lòng sử dụng các liên kết tải xuống thủ công bên dưới.", + "topbarButton": "cập nhật", + "autoUpdate": "Tự động cập nhật", + "restarting": "Khởi động lại", + "alreadyUpToDate": "Đã cập nhật", + "alreadyUpToDateDesc": "DeepChat của bạn đã được cập nhật lên phiên bản mới nhất, không cần cập nhật." +} diff --git a/src/renderer/src/i18n/vi-VN/welcome.json b/src/renderer/src/i18n/vi-VN/welcome.json new file mode 100644 index 000000000..b0f98b524 --- /dev/null +++ b/src/renderer/src/i18n/vi-VN/welcome.json @@ -0,0 +1,79 @@ +{ + "steps": { + "welcome": { + "title": "Chào mừng", + "description": "Hãy bắt đầu thiết lập DeepChat" + }, + "provider": { + "title": "nhà cung cấp", + "description": "Chọn nhà cung cấp mô hình ưa thích của bạn" + }, + "configuration": { + "title": "Cấu hình", + "description": "Cấu hình các mô hình bạn muốn sử dụng" + }, + "complete": { + "title": "Hoàn thành", + "description": "Tất cả đã sẵn sàng và sẵn sàng để đi!" + } + }, + "title": "Chào mừng đến với DeepChat", + "description": "Hãy hướng dẫn bạn cách thiết lập.", + "provider": { + "select": "Chọn nhà cung cấp", + "apiUrl": "API URL", + "apiKey": "API Key", + "verifyLink": "Xác minh liên kết" + }, + "complete": { + "title": "Tất cả đã hoàn tất!", + "description": "Bạn đã sẵn sàng. Hãy bắt đầu!" + }, + "buttons": { + "getStarted": "Bắt đầu", + "next": "Tiếp theo", + "back": "Quay lại" + }, + "page": { + "title": "Chào mừng đến với DeepChat Agent", + "description": "Kết nối nhà cung cấp mô hình để bắt đầu", + "guide": { + "title": "Hướng dẫn thiết lập", + "description": "Bước hiện tại: {step}", + "or": "hoặc", + "coreProgress": "Tiến trình thiết lập cốt lõi", + "optional": "Các bước tiếp theo tùy chọn", + "actions": { + "continueSetup": "Tiếp tục thiết lập", + "goToChat": "Đi tới trò chuyện" + }, + "steps": { + "provider": "nhà cung cấp", + "first-chat": "Cuộc trò chuyện đầu tiên", + "switch-model": "Chuyển đổi mô hình", + "mcp": "MCP", + "skills": "Skills", + "plugins": "Plugin" + } + }, + "browseProviders": "Duyệt qua tất cả các nhà cung cấp...", + "connectAgent": "hoặc kết nối đại lý", + "acpTitle": "Thiết lập đại lý ACP", + "acpDescription": "Claude Code, Codex, Kimi hoặc của riêng bạn", + "providers": { + "claude": "Claude", + "openai": "OpenAI", + "deepseek": "tìm kiếm sâu", + "gemini": "Gemini", + "ollama": "Ollama", + "openrouter": "Bộ định tuyến mở" + }, + "importProviders": "Nhập từ đại lý khác" + }, + "agentPage": { + "title": "Chọn Agent để bắt đầu tạo", + "deepchatType": "DeepChat Agent", + "acpType": "ACP Agent", + "manageAgents": "Quản lý DeepChat Agent" + } +} diff --git a/src/shared/i18n.ts b/src/shared/i18n.ts index 65bcc36f6..ebfd29c31 100644 --- a/src/shared/i18n.ts +++ b/src/shared/i18n.ts @@ -11,6 +11,14 @@ export const supportedLocales = [ 'ja', 'ko', 'fr', + 'es-ES', + 'de-DE', + 'tr-TR', + 'id-ID', + 'ms-MY', + 'it-IT', + 'pl-PL', + 'vi-VN', 'de', 'es', 'pt-BR', @@ -232,6 +240,273 @@ export const contextMenuTranslations: Record = { } } +Object.assign(contextMenuTranslations, { + 'es-ES': { + copy: 'Copiar', + paste: 'Pegar', + cut: 'Cortar', + selectAll: 'Seleccionar todo', + undo: 'Deshacer', + redo: 'Rehacer', + saveImage: 'Guardar imagen...', + copyImage: 'Copiar imagen', + open: 'Abrir/Ocultar', + checkForUpdates: 'Buscar actualizaciones', + quit: 'Salir', + translate: 'Traducir', + askAI: 'Preguntar a la IA', + newThreadFromSelection: 'Nuevo hilo desde la selección', + file: 'Archivo', + edit: 'Editar', + view: 'Ver', + window: 'Ventana', + settings: 'Ajustes...', + newConversation: 'Nueva conversación', + newWindow: 'Nueva ventana', + closeWindow: 'Cerrar ventana', + quickSearch: 'Búsqueda rápida', + toggleSidebar: 'Mostrar/ocultar barra lateral', + toggleWorkspace: 'Mostrar/ocultar espacio de trabajo', + cleanChatHistory: 'Borrar historial de chat', + deleteConversation: 'Eliminar conversación', + zoomIn: 'Acercar', + zoomOut: 'Alejar', + resetZoom: 'Tamaño real', + showHide: 'Mostrar/ocultar DeepChat' + }, + 'de-DE': { + copy: 'Kopieren', + paste: 'Einfügen', + cut: 'Ausschneiden', + selectAll: 'Alles auswählen', + undo: 'Rückgängig', + redo: 'Wiederholen', + saveImage: 'Bild speichern...', + copyImage: 'Bild kopieren', + open: 'Öffnen/Ausblenden', + checkForUpdates: 'Nach Updates suchen', + quit: 'Beenden', + translate: 'Übersetzen', + askAI: 'KI fragen', + newThreadFromSelection: 'Neuer Thread aus Auswahl', + file: 'Datei', + edit: 'Bearbeiten', + view: 'Ansicht', + window: 'Fenster', + settings: 'Einstellungen...', + newConversation: 'Neue Unterhaltung', + newWindow: 'Neues Fenster', + closeWindow: 'Fenster schließen', + quickSearch: 'Schnellsuche', + toggleSidebar: 'Seitenleiste ein-/ausblenden', + toggleWorkspace: 'Arbeitsbereich ein-/ausblenden', + cleanChatHistory: 'Chatverlauf löschen', + deleteConversation: 'Unterhaltung löschen', + zoomIn: 'Vergrößern', + zoomOut: 'Verkleinern', + resetZoom: 'Originalgröße', + showHide: 'DeepChat ein-/ausblenden' + }, + 'tr-TR': { + copy: 'Kopyala', + paste: 'Yapıştır', + cut: 'Kes', + selectAll: 'Tümünü seç', + undo: 'Geri al', + redo: 'Yinele', + saveImage: 'Görseli kaydet...', + copyImage: 'Görseli kopyala', + open: 'Aç/Gizle', + checkForUpdates: 'Güncellemeleri denetle', + quit: 'Çık', + translate: 'Çevir', + askAI: "AI'a sor", + newThreadFromSelection: 'Seçimden yeni konuşma', + file: 'Dosya', + edit: 'Düzenle', + view: 'Görünüm', + window: 'Pencere', + settings: 'Ayarlar...', + newConversation: 'Yeni konuşma', + newWindow: 'Yeni pencere', + closeWindow: 'Pencereyi kapat', + quickSearch: 'Hızlı arama', + toggleSidebar: 'Kenar çubuğunu göster/gizle', + toggleWorkspace: 'Çalışma alanını göster/gizle', + cleanChatHistory: 'Sohbet geçmişini temizle', + deleteConversation: 'Konuşmayı sil', + zoomIn: 'Yakınlaştır', + zoomOut: 'Uzaklaştır', + resetZoom: 'Gerçek boyut', + showHide: "DeepChat'i göster/gizle" + }, + 'id-ID': { + copy: 'Salin', + paste: 'Tempel', + cut: 'Potong', + selectAll: 'Pilih semua', + undo: 'Urungkan', + redo: 'Ulangi', + saveImage: 'Simpan gambar...', + copyImage: 'Salin gambar', + open: 'Buka/Sembunyikan', + checkForUpdates: 'Periksa pembaruan', + quit: 'Keluar', + translate: 'Terjemahkan', + askAI: 'Tanya AI', + newThreadFromSelection: 'Percakapan baru dari pilihan', + file: 'File', + edit: 'Edit', + view: 'Tampilan', + window: 'Jendela', + settings: 'Pengaturan...', + newConversation: 'Percakapan baru', + newWindow: 'Jendela baru', + closeWindow: 'Tutup jendela', + quickSearch: 'Pencarian cepat', + toggleSidebar: 'Tampilkan/sembunyikan bilah sisi', + toggleWorkspace: 'Tampilkan/sembunyikan ruang kerja', + cleanChatHistory: 'Hapus riwayat chat', + deleteConversation: 'Hapus percakapan', + zoomIn: 'Perbesar', + zoomOut: 'Perkecil', + resetZoom: 'Ukuran sebenarnya', + showHide: 'Tampilkan/sembunyikan DeepChat' + }, + 'ms-MY': { + copy: 'Salin', + paste: 'Tampal', + cut: 'Potong', + selectAll: 'Pilih semua', + undo: 'Buat asal', + redo: 'Buat semula', + saveImage: 'Simpan imej...', + copyImage: 'Salin imej', + open: 'Buka/Sembunyikan', + checkForUpdates: 'Semak kemas kini', + quit: 'Keluar', + translate: 'Terjemah', + askAI: 'Tanya AI', + newThreadFromSelection: 'Perbualan baharu daripada pilihan', + file: 'Fail', + edit: 'Edit', + view: 'Paparan', + window: 'Tetingkap', + settings: 'Tetapan...', + newConversation: 'Perbualan baharu', + newWindow: 'Tetingkap baharu', + closeWindow: 'Tutup tetingkap', + quickSearch: 'Carian pantas', + toggleSidebar: 'Tunjuk/sembunyikan bar sisi', + toggleWorkspace: 'Tunjuk/sembunyikan ruang kerja', + cleanChatHistory: 'Kosongkan sejarah sembang', + deleteConversation: 'Padam perbualan', + zoomIn: 'Zum masuk', + zoomOut: 'Zum keluar', + resetZoom: 'Saiz sebenar', + showHide: 'Tunjuk/sembunyikan DeepChat' + }, + 'it-IT': { + copy: 'Copia', + paste: 'Incolla', + cut: 'Taglia', + selectAll: 'Seleziona tutto', + undo: 'Annulla', + redo: 'Ripeti', + saveImage: 'Salva immagine...', + copyImage: 'Copia immagine', + open: 'Apri/Nascondi', + checkForUpdates: 'Controlla aggiornamenti', + quit: 'Esci', + translate: 'Traduci', + askAI: "Chiedi all'AI", + newThreadFromSelection: 'Nuova conversazione dalla selezione', + file: 'File', + edit: 'Modifica', + view: 'Vista', + window: 'Finestra', + settings: 'Impostazioni...', + newConversation: 'Nuova conversazione', + newWindow: 'Nuova finestra', + closeWindow: 'Chiudi finestra', + quickSearch: 'Ricerca rapida', + toggleSidebar: 'Mostra/nascondi barra laterale', + toggleWorkspace: 'Mostra/nascondi area di lavoro', + cleanChatHistory: 'Cancella cronologia chat', + deleteConversation: 'Elimina conversazione', + zoomIn: 'Ingrandisci', + zoomOut: 'Riduci', + resetZoom: 'Dimensioni reali', + showHide: 'Mostra/nascondi DeepChat' + }, + 'pl-PL': { + copy: 'Kopiuj', + paste: 'Wklej', + cut: 'Wytnij', + selectAll: 'Zaznacz wszystko', + undo: 'Cofnij', + redo: 'Ponów', + saveImage: 'Zapisz obraz...', + copyImage: 'Kopiuj obraz', + open: 'Otwórz/Ukryj', + checkForUpdates: 'Sprawdź aktualizacje', + quit: 'Zakończ', + translate: 'Tłumacz', + askAI: 'Zapytaj AI', + newThreadFromSelection: 'Nowy wątek z zaznaczenia', + file: 'Plik', + edit: 'Edycja', + view: 'Widok', + window: 'Okno', + settings: 'Ustawienia...', + newConversation: 'Nowa rozmowa', + newWindow: 'Nowe okno', + closeWindow: 'Zamknij okno', + quickSearch: 'Szybkie wyszukiwanie', + toggleSidebar: 'Pokaż/ukryj pasek boczny', + toggleWorkspace: 'Pokaż/ukryj obszar roboczy', + cleanChatHistory: 'Wyczyść historię czatu', + deleteConversation: 'Usuń rozmowę', + zoomIn: 'Powiększ', + zoomOut: 'Pomniejsz', + resetZoom: 'Rzeczywisty rozmiar', + showHide: 'Pokaż/ukryj DeepChat' + }, + 'vi-VN': { + copy: 'Sao chép', + paste: 'Dán', + cut: 'Cắt', + selectAll: 'Chọn tất cả', + undo: 'Hoàn tác', + redo: 'Làm lại', + saveImage: 'Lưu hình ảnh...', + copyImage: 'Sao chép hình ảnh', + open: 'Mở/Ẩn', + checkForUpdates: 'Kiểm tra cập nhật', + quit: 'Thoát', + translate: 'Dịch', + askAI: 'Hỏi AI', + newThreadFromSelection: 'Tạo cuộc trò chuyện từ vùng chọn', + file: 'Tệp', + edit: 'Chỉnh sửa', + view: 'Xem', + window: 'Cửa sổ', + settings: 'Cài đặt...', + newConversation: 'Cuộc trò chuyện mới', + newWindow: 'Cửa sổ mới', + closeWindow: 'Đóng cửa sổ', + quickSearch: 'Tìm kiếm nhanh', + toggleSidebar: 'Hiện/ẩn thanh bên', + toggleWorkspace: 'Hiện/ẩn không gian làm việc', + cleanChatHistory: 'Xóa lịch sử trò chuyện', + deleteConversation: 'Xóa cuộc trò chuyện', + zoomIn: 'Phóng to', + zoomOut: 'Thu nhỏ', + resetZoom: 'Kích thước thực', + showHide: 'Hiện/ẩn DeepChat' + } +}) + // Error message translations export const errorMessageTranslations: Record = { 'zh-CN': { @@ -453,6 +728,205 @@ export const errorMessageTranslations: Record = { } } +Object.assign(errorMessageTranslations, { + 'es-ES': { + mcpConnectionErrorTitle: 'Error de conexión MCP', + mcpConnectionErrorMessage: 'No se pudo conectar al servidor MCP', + addMcpServerErrorTitle: 'No se pudo añadir el servidor', + addMcpServerDuplicateMessage: + 'El nombre de servidor "{serverName}" ya existe. Elige otro nombre.', + getMcpToolListErrorTitle: 'No se pudieron obtener las definiciones de herramientas', + getMcpToolListErrorMessage: + "No se pudo recuperar la lista de herramientas del servidor '{serverName}': {errorMessage}", + genericErrorTitle: 'Error', + genericErrorMessage: 'Se ha producido un error', + needRagflowConfig: 'Debes proporcionar la configuración de la base de conocimiento RAGFlow', + needDifyConfig: 'Debes proporcionar la configuración de la base de conocimiento Dify', + needAtLeastOneRagflowConfig: + 'Debes proporcionar al menos una configuración de base de conocimiento RAGFlow', + needAtLeastOneDifyConfig: + 'Debes proporcionar al menos una configuración de base de conocimiento Dify', + needRagflowApiKey: 'Debes proporcionar la API Key de RAGFlow', + needDifyApiKey: 'Debes proporcionar la API Key de Dify', + needRagflowDatasetIds: 'Debes proporcionar al menos un Dataset ID de RAGFlow', + needDifyDatasetId: 'Debes proporcionar el Dataset ID de Dify', + needRagflowEndpoint: 'Debes proporcionar el Endpoint de RAGFlow', + needDifyEndpoint: 'Debes proporcionar el Endpoint de Dify', + needKnowledgeBaseDescription: + 'Debes proporcionar una descripción de esta base de conocimiento para ayudar a la IA a decidir si debe consultarla' + }, + 'de-DE': { + mcpConnectionErrorTitle: 'MCP-Verbindungsfehler', + mcpConnectionErrorMessage: 'Verbindung zum MCP-Server fehlgeschlagen', + addMcpServerErrorTitle: 'Server konnte nicht hinzugefügt werden', + addMcpServerDuplicateMessage: + 'Der Servername "{serverName}" ist bereits vorhanden. Wählen Sie einen anderen Namen.', + getMcpToolListErrorTitle: 'Tooldefinitionen konnten nicht abgerufen werden', + getMcpToolListErrorMessage: + "Die Toolliste konnte vom Server '{serverName}' nicht abgerufen werden: {errorMessage}", + genericErrorTitle: 'Fehler', + genericErrorMessage: 'Es ist ein Fehler aufgetreten', + needRagflowConfig: 'Die Konfiguration der RAGFlow-Wissensdatenbank muss angegeben werden', + needDifyConfig: 'Die Konfiguration der Dify-Wissensdatenbank muss angegeben werden', + needAtLeastOneRagflowConfig: + 'Mindestens eine Konfiguration der RAGFlow-Wissensdatenbank muss angegeben werden', + needAtLeastOneDifyConfig: + 'Mindestens eine Konfiguration der Dify-Wissensdatenbank muss angegeben werden', + needRagflowApiKey: 'Die API Key für RAGFlow muss angegeben werden', + needDifyApiKey: 'Die API Key für Dify muss angegeben werden', + needRagflowDatasetIds: 'Mindestens eine RAGFlow Dataset ID muss angegeben werden', + needDifyDatasetId: 'Die Dify Dataset ID muss angegeben werden', + needRagflowEndpoint: 'Der RAGFlow Endpoint muss angegeben werden', + needDifyEndpoint: 'Der Dify Endpoint muss angegeben werden', + needKnowledgeBaseDescription: + 'Für diese Wissensdatenbank muss eine Beschreibung angegeben werden, damit die KI entscheiden kann, ob sie sie abrufen soll' + }, + 'tr-TR': { + mcpConnectionErrorTitle: 'MCP bağlantı hatası', + mcpConnectionErrorMessage: 'MCP sunucusuna bağlanılamadı', + addMcpServerErrorTitle: 'Sunucu eklenemedi', + addMcpServerDuplicateMessage: + '"{serverName}" sunucu adı zaten var. Lütfen farklı bir ad seçin.', + getMcpToolListErrorTitle: 'Araç tanımları alınamadı', + getMcpToolListErrorMessage: + "'{serverName}' sunucusundan araç listesi alınamadı: {errorMessage}", + genericErrorTitle: 'Hata', + genericErrorMessage: 'Bir hata oluştu', + needRagflowConfig: 'RAGFlow bilgi tabanı yapılandırması sağlanmalıdır', + needDifyConfig: 'Dify bilgi tabanı yapılandırması sağlanmalıdır', + needAtLeastOneRagflowConfig: 'En az bir RAGFlow bilgi tabanı yapılandırması sağlanmalıdır', + needAtLeastOneDifyConfig: 'En az bir Dify bilgi tabanı yapılandırması sağlanmalıdır', + needRagflowApiKey: 'RAGFlow API Key sağlanmalıdır', + needDifyApiKey: 'Dify API Key sağlanmalıdır', + needRagflowDatasetIds: 'En az bir RAGFlow Dataset ID sağlanmalıdır', + needDifyDatasetId: 'Dify Dataset ID sağlanmalıdır', + needRagflowEndpoint: 'RAGFlow Endpoint sağlanmalıdır', + needDifyEndpoint: 'Dify Endpoint sağlanmalıdır', + needKnowledgeBaseDescription: + "AI'ın bu bilgi tabanını getirip getirmeyeceğine karar verebilmesi için bir açıklama sağlanmalıdır" + }, + 'id-ID': { + mcpConnectionErrorTitle: 'Kesalahan koneksi MCP', + mcpConnectionErrorMessage: 'Gagal terhubung ke server MCP', + addMcpServerErrorTitle: 'Gagal menambahkan server', + addMcpServerDuplicateMessage: 'Nama server "{serverName}" sudah ada. Pilih nama lain.', + getMcpToolListErrorTitle: 'Gagal mendapatkan definisi alat', + getMcpToolListErrorMessage: + "Tidak dapat mengambil daftar alat dari server '{serverName}': {errorMessage}", + genericErrorTitle: 'Kesalahan', + genericErrorMessage: 'Terjadi kesalahan', + needRagflowConfig: 'Konfigurasi basis pengetahuan RAGFlow perlu disediakan', + needDifyConfig: 'Konfigurasi basis pengetahuan Dify perlu disediakan', + needAtLeastOneRagflowConfig: + 'Setidaknya satu konfigurasi basis pengetahuan RAGFlow perlu disediakan', + needAtLeastOneDifyConfig: 'Setidaknya satu konfigurasi basis pengetahuan Dify perlu disediakan', + needRagflowApiKey: 'API Key RAGFlow perlu disediakan', + needDifyApiKey: 'API Key Dify perlu disediakan', + needRagflowDatasetIds: 'Setidaknya satu Dataset ID RAGFlow perlu disediakan', + needDifyDatasetId: 'Dataset ID Dify perlu disediakan', + needRagflowEndpoint: 'Endpoint RAGFlow perlu disediakan', + needDifyEndpoint: 'Endpoint Dify perlu disediakan', + needKnowledgeBaseDescription: + 'Deskripsi basis pengetahuan ini perlu disediakan agar AI dapat memutuskan apakah perlu mengambilnya' + }, + 'ms-MY': { + mcpConnectionErrorTitle: 'Ralat sambungan MCP', + mcpConnectionErrorMessage: 'Gagal menyambung ke pelayan MCP', + addMcpServerErrorTitle: 'Gagal menambah pelayan', + addMcpServerDuplicateMessage: 'Nama pelayan "{serverName}" sudah wujud. Sila pilih nama lain.', + getMcpToolListErrorTitle: 'Gagal mendapatkan definisi alat', + getMcpToolListErrorMessage: + "Tidak dapat mendapatkan senarai alat daripada pelayan '{serverName}': {errorMessage}", + genericErrorTitle: 'Ralat', + genericErrorMessage: 'Ralat telah berlaku', + needRagflowConfig: 'Konfigurasi pangkalan pengetahuan RAGFlow perlu diberikan', + needDifyConfig: 'Konfigurasi pangkalan pengetahuan Dify perlu diberikan', + needAtLeastOneRagflowConfig: + 'Sekurang-kurangnya satu konfigurasi pangkalan pengetahuan RAGFlow perlu diberikan', + needAtLeastOneDifyConfig: + 'Sekurang-kurangnya satu konfigurasi pangkalan pengetahuan Dify perlu diberikan', + needRagflowApiKey: 'API Key RAGFlow perlu diberikan', + needDifyApiKey: 'API Key Dify perlu diberikan', + needRagflowDatasetIds: 'Sekurang-kurangnya satu Dataset ID RAGFlow perlu diberikan', + needDifyDatasetId: 'Dataset ID Dify perlu diberikan', + needRagflowEndpoint: 'Endpoint RAGFlow perlu diberikan', + needDifyEndpoint: 'Endpoint Dify perlu diberikan', + needKnowledgeBaseDescription: + 'Penerangan untuk pangkalan pengetahuan ini perlu diberikan supaya AI boleh memutuskan sama ada perlu mendapatkannya' + }, + 'it-IT': { + mcpConnectionErrorTitle: 'Errore di connessione MCP', + mcpConnectionErrorMessage: 'Connessione al server MCP non riuscita', + addMcpServerErrorTitle: 'Impossibile aggiungere il server', + addMcpServerDuplicateMessage: 'Il nome server "{serverName}" esiste già. Scegli un altro nome.', + getMcpToolListErrorTitle: 'Impossibile ottenere le definizioni degli strumenti', + getMcpToolListErrorMessage: + "Impossibile recuperare l'elenco degli strumenti dal server '{serverName}': {errorMessage}", + genericErrorTitle: 'Errore', + genericErrorMessage: 'Si è verificato un errore', + needRagflowConfig: 'Devi fornire la configurazione della base di conoscenza RAGFlow', + needDifyConfig: 'Devi fornire la configurazione della base di conoscenza Dify', + needAtLeastOneRagflowConfig: + 'Devi fornire almeno una configurazione della base di conoscenza RAGFlow', + needAtLeastOneDifyConfig: + 'Devi fornire almeno una configurazione della base di conoscenza Dify', + needRagflowApiKey: 'Devi fornire la API Key di RAGFlow', + needDifyApiKey: 'Devi fornire la API Key di Dify', + needRagflowDatasetIds: 'Devi fornire almeno un Dataset ID di RAGFlow', + needDifyDatasetId: 'Devi fornire il Dataset ID di Dify', + needRagflowEndpoint: 'Devi fornire l’Endpoint di RAGFlow', + needDifyEndpoint: 'Devi fornire l’Endpoint di Dify', + needKnowledgeBaseDescription: + 'Devi fornire una descrizione di questa base di conoscenza per aiutare l’AI a decidere se recuperarla' + }, + 'pl-PL': { + mcpConnectionErrorTitle: 'Błąd połączenia MCP', + mcpConnectionErrorMessage: 'Nie udało się połączyć z serwerem MCP', + addMcpServerErrorTitle: 'Nie udało się dodać serwera', + addMcpServerDuplicateMessage: 'Nazwa serwera "{serverName}" już istnieje. Wybierz inną nazwę.', + getMcpToolListErrorTitle: 'Nie udało się pobrać definicji narzędzi', + getMcpToolListErrorMessage: + "Nie można pobrać listy narzędzi z serwera '{serverName}': {errorMessage}", + genericErrorTitle: 'Błąd', + genericErrorMessage: 'Wystąpił błąd', + needRagflowConfig: 'Wymagana jest konfiguracja bazy wiedzy RAGFlow', + needDifyConfig: 'Wymagana jest konfiguracja bazy wiedzy Dify', + needAtLeastOneRagflowConfig: 'Wymagana jest co najmniej jedna konfiguracja bazy wiedzy RAGFlow', + needAtLeastOneDifyConfig: 'Wymagana jest co najmniej jedna konfiguracja bazy wiedzy Dify', + needRagflowApiKey: 'Wymagana jest API Key RAGFlow', + needDifyApiKey: 'Wymagana jest API Key Dify', + needRagflowDatasetIds: 'Wymagany jest co najmniej jeden Dataset ID RAGFlow', + needDifyDatasetId: 'Wymagany jest Dataset ID Dify', + needRagflowEndpoint: 'Wymagany jest Endpoint RAGFlow', + needDifyEndpoint: 'Wymagany jest Endpoint Dify', + needKnowledgeBaseDescription: + 'Wymagany jest opis tej bazy wiedzy, aby AI mogła zdecydować, czy ją pobrać' + }, + 'vi-VN': { + mcpConnectionErrorTitle: 'Lỗi kết nối MCP', + mcpConnectionErrorMessage: 'Không thể kết nối tới máy chủ MCP', + addMcpServerErrorTitle: 'Không thể thêm máy chủ', + addMcpServerDuplicateMessage: 'Tên máy chủ "{serverName}" đã tồn tại. Vui lòng chọn tên khác.', + getMcpToolListErrorTitle: 'Không thể lấy định nghĩa công cụ', + getMcpToolListErrorMessage: + "Không thể lấy danh sách công cụ từ máy chủ '{serverName}': {errorMessage}", + genericErrorTitle: 'Lỗi', + genericErrorMessage: 'Đã xảy ra lỗi', + needRagflowConfig: 'Cần cung cấp cấu hình cơ sở kiến thức RAGFlow', + needDifyConfig: 'Cần cung cấp cấu hình cơ sở kiến thức Dify', + needAtLeastOneRagflowConfig: 'Cần cung cấp ít nhất một cấu hình cơ sở kiến thức RAGFlow', + needAtLeastOneDifyConfig: 'Cần cung cấp ít nhất một cấu hình cơ sở kiến thức Dify', + needRagflowApiKey: 'Cần cung cấp API Key RAGFlow', + needDifyApiKey: 'Cần cung cấp API Key Dify', + needRagflowDatasetIds: 'Cần cung cấp ít nhất một Dataset ID RAGFlow', + needDifyDatasetId: 'Cần cung cấp Dataset ID Dify', + needRagflowEndpoint: 'Cần cung cấp Endpoint RAGFlow', + needDifyEndpoint: 'Cần cung cấp Endpoint Dify', + needKnowledgeBaseDescription: + 'Cần cung cấp mô tả cho cơ sở kiến thức này để AI quyết định có cần truy xuất hay không' + } +}) + /** * Get the best matching translation based on language code * @param locale Language code diff --git a/src/shared/types/chatSettings.ts b/src/shared/types/chatSettings.ts index c1a596270..df2a810c9 100644 --- a/src/shared/types/chatSettings.ts +++ b/src/shared/types/chatSettings.ts @@ -12,6 +12,14 @@ export type ChatLanguage = | 'pt-BR' | 'da-DK' | 'he-IL' + | 'es-ES' + | 'de-DE' + | 'tr-TR' + | 'id-ID' + | 'ms-MY' + | 'it-IT' + | 'pl-PL' + | 'vi-VN' export type ChatTheme = 'dark' | 'light' | 'system'