From ef8bef26d15ae94beb89335cb64c73ff60e74e30 Mon Sep 17 00:00:00 2001 From: Craig Allan-McWilliams Date: Tue, 16 Jun 2026 16:40:41 +0100 Subject: [PATCH 1/2] feat(i18n): add 10 European language locales Adds full UI translations for Spanish (es), French (fr), German (de), Italian (it), Ukrainian (uk), Polish (pl), Swedish (sv), Norwegian (no), Dutch (nl) and Romanian (ro), alongside the existing English and Chinese. - New locale files under src/renderer/i18n/locales/ (all 866 keys, native orthography, interpolation placeholders preserved) - Register the locales and extend supportedLngs in i18n/config.ts - Add the languages to the Settings -> General language switcher The browser/UI language detector already picks these up automatically. Complements the Memory-settings English-fallback fix in #246 (the new locales include those keys). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../components/settings/SettingsGeneral.tsx | 10 + src/renderer/i18n/config.ts | 46 +- src/renderer/i18n/locales/de.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/es.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/fr.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/it.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/nl.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/no.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/pl.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/ro.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/sv.json | 954 ++++++++++++++++++ src/renderer/i18n/locales/uk.json | 954 ++++++++++++++++++ 12 files changed, 9581 insertions(+), 15 deletions(-) create mode 100644 src/renderer/i18n/locales/de.json create mode 100644 src/renderer/i18n/locales/es.json create mode 100644 src/renderer/i18n/locales/fr.json create mode 100644 src/renderer/i18n/locales/it.json create mode 100644 src/renderer/i18n/locales/nl.json create mode 100644 src/renderer/i18n/locales/no.json create mode 100644 src/renderer/i18n/locales/pl.json create mode 100644 src/renderer/i18n/locales/ro.json create mode 100644 src/renderer/i18n/locales/sv.json create mode 100644 src/renderer/i18n/locales/uk.json diff --git a/src/renderer/components/settings/SettingsGeneral.tsx b/src/renderer/components/settings/SettingsGeneral.tsx index d4d51b55..cc941213 100644 --- a/src/renderer/components/settings/SettingsGeneral.tsx +++ b/src/renderer/components/settings/SettingsGeneral.tsx @@ -21,6 +21,16 @@ export function SettingsGeneral() { const languages = [ { code: 'en', nativeName: 'English' }, { code: 'zh', nativeName: '中文' }, + { code: 'es', nativeName: 'Español' }, + { code: 'fr', nativeName: 'Français' }, + { code: 'de', nativeName: 'Deutsch' }, + { code: 'it', nativeName: 'Italiano' }, + { code: 'uk', nativeName: 'Українська' }, + { code: 'pl', nativeName: 'Polski' }, + { code: 'sv', nativeName: 'Svenska' }, + { code: 'no', nativeName: 'Norsk' }, + { code: 'nl', nativeName: 'Nederlands' }, + { code: 'ro', nativeName: 'Română' }, ]; const themeOptions = [ diff --git a/src/renderer/i18n/config.ts b/src/renderer/i18n/config.ts index 6855c8e5..60836607 100644 --- a/src/renderer/i18n/config.ts +++ b/src/renderer/i18n/config.ts @@ -4,29 +4,45 @@ import LanguageDetector from 'i18next-browser-languagedetector'; import enTranslations from './locales/en.json'; import zhTranslations from './locales/zh.json'; +import esTranslations from './locales/es.json'; +import frTranslations from './locales/fr.json'; +import deTranslations from './locales/de.json'; +import itTranslations from './locales/it.json'; +import ukTranslations from './locales/uk.json'; +import plTranslations from './locales/pl.json'; +import svTranslations from './locales/sv.json'; +import noTranslations from './locales/no.json'; +import nlTranslations from './locales/nl.json'; +import roTranslations from './locales/ro.json'; i18n - .use(LanguageDetector) // 自动检测浏览器语言 - .use(initReactI18next) // 初始化 react-i18next + .use(LanguageDetector) // auto-detect the browser/UI language + .use(initReactI18next) // initialize react-i18next .init({ resources: { - en: { - translation: enTranslations, - }, - zh: { - translation: zhTranslations, - }, + en: { translation: enTranslations }, + zh: { translation: zhTranslations }, + es: { translation: esTranslations }, + fr: { translation: frTranslations }, + de: { translation: deTranslations }, + it: { translation: itTranslations }, + uk: { translation: ukTranslations }, + pl: { translation: plTranslations }, + sv: { translation: svTranslations }, + no: { translation: noTranslations }, + nl: { translation: nlTranslations }, + ro: { translation: roTranslations }, }, - fallbackLng: 'en', // 默认语言 - supportedLngs: ['en', 'zh'], // 支持的语言 + fallbackLng: 'en', // default language + supportedLngs: ['en', 'zh', 'es', 'fr', 'de', 'it', 'uk', 'pl', 'sv', 'no', 'nl', 'ro'], interpolation: { - escapeValue: false, // React 已经处理了 XSS + escapeValue: false, // React already guards against XSS }, - pluralSeparator: '_', // 复数分隔符 - contextSeparator: '_', // 上下文分隔符 + pluralSeparator: '_', // plural separator + contextSeparator: '_', // context separator detection: { - order: ['localStorage', 'navigator'], // 先检查 localStorage,再检查浏览器语言 - caches: ['localStorage'], // 将语言选择保存到 localStorage + order: ['localStorage', 'navigator'], // check localStorage first, then the browser language + caches: ['localStorage'], // persist the language choice to localStorage lookupLocalStorage: 'i18nextLng', // localStorage key }, }); diff --git a/src/renderer/i18n/locales/de.json b/src/renderer/i18n/locales/de.json new file mode 100644 index 00000000..57b516f4 --- /dev/null +++ b/src/renderer/i18n/locales/de.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Speichern", + "cancel": "Abbrechen", + "delete": "Löschen", + "edit": "Bearbeiten", + "add": "Hinzufügen", + "close": "Schließen", + "loading": "Wird geladen...", + "error": "Fehler", + "success": "Erfolg", + "saving": "Wird gespeichert...", + "saved": "Erfolgreich gespeichert!", + "sure": "Sind Sie sicher?", + "yes": "Ja", + "no": "Nein", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "install": "Installieren", + "optional": "optional", + "appLogoAlt": "Open Cowork Logo", + "pastedImageAlt": "Eingefügt {{index}}" + }, + "welcome": { + "title": "Wie kann ich Ihnen heute helfen?", + "placeholder": "Beschreiben Sie, was Sie tun möchten...", + "createFile": "Datei erstellen", + "crunchData": "Daten verarbeiten", + "organizeFiles": "Dateien organisieren", + "checkEmails": "E-Mails prüfen", + "searchPapers": "Papers suchen & zusammenfassen", + "summarizePapersToNotion": "Papers in Notion zusammenfassen", + "selectWorkingFolder": "Arbeitsordner auswählen (erforderlich)", + "selectWorkingFolderFailed": "Arbeitsordner konnte nicht ausgewählt werden", + "attachFiles": "Dateien anhängen", + "letsGo": "Los geht's", + "starting": "Wird gestartet...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Open Cowork Logo", + "pastedImageAlt": "Eingefügt {{index}}", + "quickPromptCreate": "Erstelle eine neue Datei für mich", + "quickPromptCrunch": "Hilf mir, Daten zu analysieren und zu verarbeiten", + "quickPromptOrganize": "Hilf mir, meine Dateien und Ordner zu organisieren", + "quickPromptEmail": "Hilf mir, mit Chrome die neuen E-Mails der letzten drei Tage in meinem Gmail und NetEase Mail zusammenzufassen. Beachte, dass die gespeicherten Konten bereits das vollständige E-Mail-Suffix enthalten. Wenn das E-Mail-Suffix auf der Webseite oder in einem Screenshot bereits vorausgefüllt ist, gib es daher nicht erneut ein, um einen fehlgeschlagenen Login zu vermeiden. Prüfe außerdem zuerst, ob die entsprechenden Kontodaten gespeichert sind. Wenn der Benutzername oder das Passwort für einen bestimmten E-Mail-Dienst nicht gespeichert ist, kannst du dieses E-Mail-Konto überspringen.", + "quickPromptPapers": "Bitte hilf mir, mit Chrome Papers zum Thema [Agent] aus den letzten zwei Tagen zu suchen und zusammenzufassen.\nQuellwebseiten:\n1. HuggingFace Daily Papers. Bitte gib die Vote-Information und eine kurze Zusammenfassung an. Beachte, dass am Wochenende möglicherweise keine Papers enthalten sind, sodass du die Papers der Vortage prüfen musst. Stelle aber sicher, dass es insgesamt zwei Tage sind.", + "quickPromptNotion": "Hilf mir, drei repräsentative Survey-Papers zum Thema Agents zu recherchieren und sie auf einer Notion-Seite mit dem Titel \"Agent Survey\" hinzuzufügen. Gib für jedes Paper den Titel, die Autoren, das Publikationsorgan/-jahr und eine kurze Zusammenfassung der wichtigsten Beiträge an.", + "apiNotConfigured": "API noch nicht konfiguriert. Bitte richten Sie in den Einstellungen Ihren API-Anbieter und -Schlüssel ein.", + "goToSettings": "Zu den Einstellungen" + }, + "settings": { + "title": "Einstellungen", + "apiSettings": "API-Einstellungen", + "apiSettingsDesc": "API-Anbieter und -Schlüssel konfigurieren", + "sandbox": "Sandbox", + "sandboxDesc": "Isolierte Ausführungsumgebung", + "connectors": "MCP-Konnektoren", + "connectorsDesc": "Browser- & Tool-Integrationen", + "skills": "Skills", + "skillsDesc": "Eigene Skills verwalten", + "memory": "Speicher", + "memoryDesc": "Langzeitspeicher und Workspace-Erfahrung verwalten", + "schedule": "Zeitpläne", + "scheduleDesc": "Wecker-artige Prompt-Automatisierung", + "remote": "Fernsteuerung", + "remoteDesc": "Open Cowork über Feishu und andere Kanäle nutzen", + "logs": "Protokolle", + "logsDesc": "Anwendungsprotokolle anzeigen und exportieren", + "panelDesc": "Workspace, Tools und Kontoverhalten konfigurieren.", + "general": "Allgemein", + "generalDesc": "Darstellung, Sprache & Voreinstellungen" + }, + "general": { + "appearance": "Darstellung", + "theme": "Design", + "themeLight": "Hell", + "themeDark": "Dunkel", + "themeSystem": "System", + "language": "Sprache" + }, + "memory": { + "title": "Speicher", + "description": "Der globale Kernspeicher bewahrt stabile Präferenzen, während der Workspace-Erfahrungsspeicher projektspezifisches Wissen aus mehreren Sitzungen ablegt.", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "toggleHint": "Beim Ausschalten stoppen künftige Erfassung und automatischer Abruf, bestehende Einträge bleiben aber erhalten.", + "enableAction": "Speicher aktivieren", + "disableAction": "Speicher deaktivieren", + "enabledStatus": "Speicher ist aktiviert", + "disabledStatus": "Speicher ist deaktiviert", + "coreCount": "Kerneinträge", + "sessionCount": "Sitzungszusammenfassungen", + "chunkCount": "Erfahrungs-Chunks", + "workspaceCount": "Workspaces", + "latestIngestion": "Letzte Erfassung", + "noIngestionYet": "Noch keine Erfassung aufgezeichnet", + "health": "Zustand", + "healthy": "Fehlerfrei, keine kürzlichen Ausfälle", + "failedSessions": "Bei {{count}} Sitzung(en) ist die letzte Erfassung fehlgeschlagen", + "searchTitle": "Suchen & Prüfen", + "searchDescription": "Speicher nach aktuellem Workspace oder global durchsuchen und dann Zusammenfassungen und Rohauszüge prüfen.", + "searchPlaceholder": "Präferenzen, frühere Implementierungen, Entscheidungen suchen...", + "searchAction": "Suchen", + "scopeWorkspace": "Aktueller Workspace", + "scopeAll": "Gesamter Speicher", + "scopeGlobal": "Nur Kernspeicher", + "currentWorkspace": "Aktueller Workspace", + "groupCore": "Kernspeicher", + "groupSessions": "Sitzungszusammenfassungen", + "groupChunks": "Chunk-Treffer", + "detailTitle": "Detail", + "noSelection": "Wählen Sie ein Ergebnis aus, um die vollständige Zusammenfassung und den Quellauszug zu prüfen.", + "noResults": "Keine Ergebnisse", + "maintenanceTitle": "Wartung", + "maintenanceDescription": "Erfahrungsspeicher für den aktuellen Workspace neu aufbauen oder gespeicherte Daten löschen.", + "rebuildWorkspace": "Aktuellen Workspace neu aufbauen", + "clearWorkspace": "Aktuellen Workspace leeren", + "clearCore": "Kernspeicher leeren", + "rebuildConfirm": "Erfahrungsspeicher für den aktuellen Workspace neu aufbauen? Dabei werden historische Sitzungen dieses Workspace erneut gescannt.", + "clearWorkspaceConfirm": "Erfahrungsspeicher für den aktuellen Workspace leeren? Das kann nicht rückgängig gemacht werden.", + "clearCoreConfirm": "Gesamten globalen Kernspeicher leeren? Das kann nicht rückgängig gemacht werden.", + "rebuildSuccess": "Workspace-Speicher neu aufgebaut", + "clearWorkspaceSuccess": "Workspace-Speicher geleert", + "clearCoreSuccess": "Kernspeicher geleert", + "runtimeTitle": "Laufzeitkonfiguration", + "runtimeDescription": "Standardmäßig wird die aktive API-Konfiguration übernommen. Hier passen Sie hauptsächlich Navigationstiefe, Embedding und das Verzeichnis auf der Festplatte an.", + "runtimeSaved": "Laufzeitkonfiguration des Speichers gespeichert", + "saveRuntime": "Laufzeitkonfiguration speichern", + "storageRoot": "Speicher-Stammverzeichnis", + "noWorkspace": "Noch kein Workspace", + "maxNavSteps": "Navigationsschritte", + "ingestionConcurrency": "Aufbau-Parallelität", + "useEmbedding": "Embedding-Abruf aktivieren", + "evalEnabled": "Echte Modell-Evaluierung aktivieren", + "evalArtifactsRoot": "Verzeichnis für Evaluierungs-Artefakte", + "evalMaxRounds": "Evaluierungsrunden", + "promptIterationRounds": "Prompt-Iterationsrunden", + "llmConfig": "Speicher-LLM", + "embeddingConfig": "Embedding", + "inheritActive": "Aktive API übernehmen", + "modelOverride": "Modell überschreiben", + "baseUrlOverride": "Base URL überschreiben", + "apiKeyOverride": "API Key überschreiben", + "allSources": "Alle Quellen", + "groupRawSessions": "Roh-Sitzungen", + "sourceFile": "Quelldatei", + "inspectSession": "Sitzungsspeicher prüfen", + "inspectSessionHint": "Wählen Sie eine Sitzung oder einen Chunk aus den Ergebnissen oben, um sie zu prüfen.", + "revealInFinder": "Im Finder anzeigen", + "rebuildAll": "Gesamten Speicher neu aufbauen", + "rebuildAllConfirm": "Dadurch wird der gesamte Speicher geleert und neu aufgebaut. Fortfahren?", + "rebuildAllSuccess": "Gesamter Speicher neu aufgebaut: {{sessionCount}} Sitzung(en), {{workspaceCount}} Quell-Workspace(s)", + "filesTitle": "Rohdatei-Betrachter", + "filesDescription": "Zeigt die Artefakte core / unified experience / session_state / eval genau so an, wie sie auf die Festplatte geschrieben werden.", + "fileList": "Dateiliste", + "refreshFiles": "Aktualisieren", + "noFiles": "Noch keine Speicherdateien", + "fileContent": "Dateiinhalt", + "emptyFile": "Datei ist leer", + "selectFileHint": "Wählen Sie links eine Datei aus, um ihr Roh-JSON anzuzeigen." + }, + "language": { + "english": "Englisch", + "chinese": "Chinesisch", + "selectLanguage": "Sprache auswählen", + "currentLanguage": "Aktuelle Sprache" + }, + "api": { + "firstRunTitle": "API einrichten", + "firstRunSubtitle": "Konfigurieren Sie einen Anbieter, um Open Cowork zu nutzen", + "settingsTitle": "API-Einstellungen", + "settingsSubtitle": "Anbieter-, Schlüssel- und Modelleinstellungen verwalten", + "configSet": "Konfigurationssatz", + "defaultSetTag": "Standard", + "saveAs": "Speichern unter", + "renameSet": "Umbenennen", + "deleteSet": "Satz löschen", + "saveAndSwitch": "Speichern & wechseln", + "discardAndSwitch": "Verwerfen & wechseln", + "currentSetSavingHint": "\"Einstellungen speichern\" aktualisiert nur den aktuell ausgewählten Konfigurationssatz.", + "unsavedCurrentSetHint": "Der aktuelle Konfigurationssatz hat ungespeicherte Änderungen.", + "unsavedSwitchPrompt": "Der aktuelle Konfigurationssatz hat ungespeicherte Änderungen. Wählen Sie eine Aktion, bevor Sie zu \"{{name}}\" wechseln.", + "configSetSaveAsPrompt": "Geben Sie einen Namen für den neuen Konfigurationssatz ein", + "configSetRenamePrompt": "Geben Sie einen neuen Namen für diesen Konfigurationssatz ein", + "configSetDeleteConfirm": "Konfigurationssatz \"{{name}}\" löschen?", + "configSetNameRequired": "Name des Konfigurationssatzes erforderlich", + "configSetLimitReached": "Sie können bis zu {{count}} Konfigurationssätze speichern", + "configSetCreated": "Konfigurationssatz erstellt", + "configSetRenamed": "Konfigurationssatz umbenannt", + "configSetDeleted": "Konfigurationssatz gelöscht", + "configSetSwitched": "Konfigurationssatz gewechselt", + "defaultConfigSetName": "Standard", + "configSetFallbackName": "Konfigurationssatz {{index}}", + "provider": "API-Anbieter", + "providerDescription": "Wählen Sie die Anbieterfamilie und den groben Protokollstil für diesen Workspace.", + "apiKey": "API Key", + "enterApiKey": "Geben Sie Ihren API Key ein", + "apiKeyDescription": "Lokal gespeichert und auf den aktiven Konfigurationssatz beschränkt.", + "protocol": "Protokoll", + "baseUrl": "Base URL", + "model": "Modell", + "usePreset": "Voreinstellung verwenden", + "custom": "Benutzerdefiniert", + "moreModels": "Weitere Modelle", + "noModelsAvailable": "Keine Modelle verfügbar", + "selectProtocol": "Wählen Sie das kompatible Protokoll für den Dienst", + "enterOllamaUrl": "Geben Sie die OpenAI-kompatible Ollama-Dienst-URL ein", + "enterOpenAIUrl": "Geben Sie die OpenAI-kompatible Dienst-URL ein", + "enterAnthropicUrl": "Geben Sie die Anthropic-kompatible Dienst-URL ein", + "enterGeminiUrl": "Geben Sie eine Gemini-kompatible Base URL ein", + "enterModelId": "Modell-ID eingeben, z. B. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Bitte wählen Sie ein Modell", + "contextWindow": "Kontextfenster", + "contextWindowPlaceholder": "Automatisch erkennen", + "maxOutputTokens": "Max. Output-Token", + "maxOutputTokensPlaceholder": "Automatisch erkennen", + "contextWindowHint": "Für automatische Erkennung leer lassen. Nur überschreiben, wenn das Modell falsche Limits meldet.", + "saveFailed": "Einstellungen konnten nicht gespeichert werden. Bitte erneut versuchen.", + "getStarted": "Loslegen", + "saveSettings": "Einstellungen speichern", + "openSettingsAction": "API-Einstellungen öffnen", + "configRequiredActiveSet": "Der aktuelle Konfigurationssatz hat keine nutzbaren Zugangsdaten. Schließen Sie zuerst die Einrichtung in den API-Einstellungen ab.", + "testConnection": "Verbindung testen", + "testingConnection": "Wird getestet...", + "refreshModels": "Modelle aktualisieren", + "refreshingModels": "Wird aktualisiert...", + "refreshModelsFailed": "Modelle konnten nicht aktualisiert werden. Prüfen Sie URL oder Dienststatus.", + "manualModel": "Manuelles Modell", + "useDetectedModels": "Erkannte Modelle verwenden", + "discoverLocalOllama": "Lokales Ollama finden", + "discoveringLocalOllama": "Wird gesucht...", + "discoverLocalOllamaHint": "Geben Sie zuerst Ihren Ollama-Endpunkt ein. Modelle werden automatisch abgerufen; manuelle Eingabe ist nur bei fehlgeschlagener Erkennung nötig.", + "localOllamaDiscovered": "Lokales Ollama mit {{count}} verfügbaren Modell(en) gefunden.", + "localOllamaNotFound": "Kein lokaler Ollama-Dienst gefunden. Starten Sie ihn mit `ollama serve` und versuchen Sie es erneut.", + "localOllamaNoModels": "Ein lokaler Ollama-Dienst wurde gefunden, stellt aber derzeit keine Modelle bereit.", + "localOllamaModelUnavailable": "Lokales Ollama gefunden, aber Modell {{model}} konnte keine minimale Inferenzanfrage abschließen.", + "localOllamaModelLoading": "Lokales Ollama gefunden, aber das Modell wird noch in den Speicher geladen. Große Modelle können bis zu eine Minute dauern.", + "enableThinking": "Denkmodus aktivieren", + "enableThinkingHint": "Zeigt Claudes Denkprozess Schritt für Schritt. Das schafft mehr Transparenz, kann aber den Token-Verbrauch erhöhen.", + "enableThinkingOllamaHint": "Die meisten Ollama-Modelle unterstützen keinen Denkmodus. Nur aktivieren, wenn Ihr Modell ihn ausdrücklich unterstützt.", + "testSuccess": "Verbindung erfolgreich ({{ms}} ms)", + "testSuccessNeedSave": "Verbindungstest bestanden. Speichern Sie die Einstellungen, bevor Sie eine Sitzung starten.", + "testError": { + "missing_key": "API Key ist erforderlich", + "missing_base_url": "Für diesen Anbieter ist eine Base URL erforderlich", + "unauthorized": "Ungültiger API Key oder nicht autorisiert", + "not_found": "Endpunkt nicht gefunden. Prüfen Sie die Base URL", + "rate_limited": "Ratenbegrenzung oder Kontingent überschritten", + "server_error": "Dienstfehler. Bitte später erneut versuchen", + "network_error": "Netzwerkfehler. Prüfen Sie Ihre Verbindung", + "ollama_not_running": "Keine Verbindung zu Ollama möglich. Stellen Sie sicher, dass Ollama läuft (ollama serve).", + "ollama_loading": "Ollama lädt das Modell in den Speicher. Große Modelle können 30–120 Sekunden dauern. Bitte warten und erneut versuchen.", + "unknown": "Verbindung fehlgeschlagen" + }, + "guidance": { + "commonSetupsTitle": "Gängige Anbieter-Setups", + "commonSetupsHint": "Empfohlenes Setup prüfen oder anwenden", + "apply": "Anwenden", + "detectedBadge": "Erkannt", + "preferProviderTab": "{{service}} erkannt. Dieser Dienst lässt sich meist einfacher über den dedizierten {{provider}}-Tab konfigurieren.", + "protocolMismatch": "{{service}} erkannt. Empfohlenes Protokoll: {{recommendedProtocol}}.", + "protocolLooksGood": "{{service}} erkannt. Ihr aktuelles Protokoll entspricht bereits dem empfohlenen {{recommendedProtocol}}-Setup.", + "baseUrlHint": "{{service}} erkannt. Empfohlenes {{recommendedProtocol}}-Setup: {{baseUrl}}. Beispielmodell: {{model}}.", + "genericBaseUrlHint": "Das sieht nach einem benutzerdefinierten {{recommendedProtocol}}-kompatiblen Endpunkt aus. Empfohlenes Base-URL-Format: {{baseUrl}}. Beispielmodell: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Dienst", + "protocol": "Protokoll", + "baseUrl": "Base URL", + "model": "Beispielmodell", + "notes": "Hinweise", + "action": "Aktion" + }, + "errorHints": { + "emptyProbeGeneric": "Der Endpunkt lieferte eine leere Probe-Antwort. Das bedeutet meist, dass das gewählte Protokoll oder Modell mit dem Dienst inkompatibel ist.", + "emptyProbeDetected": "{{service}} lieferte eine leere Probe-Antwort. Versuchen Sie das empfohlene {{recommendedProtocol}}-Setup und prüfen Sie die Modell-ID für diesen Endpunkt.", + "emptyProbePreferProvider": "{{service}} lieferte eine leere Probe-Antwort. Versuchen Sie den dedizierten {{provider}}-Tab, statt ihn als generischen benutzerdefinierten Endpunkt zu konfigurieren.", + "probeMismatchGeneric": "Der Endpunkt antwortete, aber nicht im von dieser Probe erwarteten Format. Das deutet meist auf eine Protokoll- oder Modellinkompatibilität hin.", + "probeMismatchDetected": "{{service}} antwortete mit einem unerwarteten Probe-Format. Versuchen Sie das empfohlene {{recommendedProtocol}}-Setup und prüfen Sie die Modell-ID für diesen Endpunkt." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Bevorzugen Sie den dedizierten OpenRouter-Anbieter-Tab, außer Sie debuggen ein benutzerdefiniertes Relay." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Verwenden Sie den OpenAI-kompatiblen Modus und kopieren Sie die exakte Modell-ID aus den DeepSeek-Docs." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Verwenden Sie den Coding-Endpunkt im Anthropic-kompatiblen Modus. Prüfen Sie die exakte Coding-Modell-ID in den Moonshot-Docs." + }, + "glm": { + "name": "GLM / BigModel (Anthropic-Route)", + "note": "Verwenden Sie die Anthropic-kompatible Route, wenn der Endpunktpfad /api/anthropic enthält." + }, + "ollama": { + "name": "Ollama", + "note": "Bevorzugen Sie den dedizierten Ollama-Anbieter-Tab für lokale Modellerkennung und -aktualisierung." + }, + "gemini": { + "name": "Gemini benutzerdefinierter Endpunkt", + "note": "Verwenden Sie den Gemini-kompatiblen Modus und die exakte vom Endpunkt bereitgestellte Modell-ID." + }, + "minimax": { + "name": "MiniMax", + "note": "Verwenden Sie den OpenAI-kompatiblen Modus, außer Ihr MiniMax-Gateway dokumentiert ein anderes Protokoll." + }, + "genericOpenAI": { + "name": "Generisch OpenAI-kompatibel", + "note": "Verwenden Sie dies für benutzerdefinierte Relays, Gateways oder Inferenzserver, die die OpenAI-API nachbilden." + } + } + }, + "newSet": "Neuer Satz", + "createSetTitle": "Konfigurationssatz erstellen", + "saveAsTitle": "Als Konfigurationssatz speichern", + "createSetNamePlaceholder": "Name des Konfigurationssatzes eingeben", + "renameSetTitle": "Konfigurationssatz umbenennen", + "unsavedBeforeActionPrompt": "Der aktuelle Konfigurationssatz hat ungespeicherte Änderungen. Wählen Sie eine Aktion vor \"{{action}}\".", + "newSetDefaultName": "Neuer Konfigurationssatz", + "copyNameSuffix": "Kopie", + "currentSetLabel": "Aktueller Satz: ", + "unsavedBadge": "Ungespeichert", + "saveAndContinue": "Speichern & fortfahren", + "discardAndContinue": "Verwerfen & fortfahren", + "currentSetName": "Satzname", + "renameInlineHint": "Direkt bearbeiten. Mit Enter oder Verlassen des Felds automatisch speichern", + "switchSetLabel": "Zu einem anderen Satz wechseln", + "switchSetPlaceholder": "Satz zum Wechseln auswählen", + "noOtherSetHint": "Kein anderer Satz verfügbar", + "configSetMissing": "Konfigurationssatz nicht gefunden", + "configSetCloneSourceMissing": "Kein zu klonender Konfigurationssatz gefunden", + "configSetSystemDeleteForbidden": "Der Standard-Konfigurationssatz kann nicht gelöscht werden", + "configSetKeepOne": "Behalten Sie mindestens einen Konfigurationssatz", + "diagnostic": { + "runDiagnostics": "Verbindung diagnostizieren", + "runQuickDiagnostics": "Schnelldiagnose", + "runDeepDiagnostics": "Tiefe Inferenzprüfung", + "running": "Diagnose läuft...", + "step": { + "dns": "DNS-Auflösung", + "tcp": "TCP-Verbindung", + "tls": "TLS-Handshake", + "auth": "API-Authentifizierung", + "model": "Modellverifizierung" + }, + "status": { + "pending": "Ausstehend", + "running": "Wird geprüft...", + "ok": "OK", + "fail": "Fehlgeschlagen", + "skip": "Übersprungen" + }, + "overallSuccess": "Alle Prüfungen bestanden ({{ms}} ms)", + "overallFail": "Diagnose bei {{step}} fehlgeschlagen", + "advisory": { + "not_deep_verified": "Der Endpunkt ist erreichbar und das gewählte Modell ist gelistet, aber es wurde noch keine Live-Inferenz durchgeführt.", + "model_loading": "Der Endpunkt ist erreichbar, aber das Modell wird möglicherweise noch in den Speicher geladen." + }, + "latency": "{{ms}} ms", + "fix": { + "dns_resolve_failed": "Hostname {{host}} kann nicht aufgelöst werden. Bitte prüfen Sie, ob die URL korrekt ist.", + "tcp_connect_failed": "Keine Verbindung zu {{host}} möglich. Bitte prüfen Sie Ihr Netzwerk oder die Firewall-Einstellungen.", + "tls_handshake_failed": "TLS-Handshake fehlgeschlagen. Ursache kann ein Zertifikatsproblem oder Proxy-Eingriff sein.", + "missing_api_key": "API Key fehlt oder ist ungültig. Bitte prüfen Sie Ihren Schlüssel.", + "auth_invalid_key": "API Key ist ungültig oder abgelaufen. Bitte prüfen Sie, ob der Schlüssel korrekt ist.", + "auth_endpoint_not_found": "API-Endpunkt nicht gefunden. Bitte prüfen Sie, ob die Base URL korrekt ist.", + "auth_request_failed": "Authentifizierungsanfrage fehlgeschlagen. Bitte prüfen Sie Ihre Konfiguration.", + "model_network_error": "Modell {{model}} nicht erreichbar. Prüfen Sie Netzwerk, VPN oder Proxy-Einstellungen.", + "model_rate_limited": "Modell {{model}} unterliegt derzeit einer Ratenbegrenzung oder das Kontingent ist erschöpft. Bitte später erneut versuchen.", + "model_request_failed": "Anfrage an Modell {{model}} auf Anbieterseite fehlgeschlagen. Bitte später erneut versuchen.", + "model_unavailable": "Modell {{model}} ist nicht verfügbar. Bitte prüfen Sie den Modellnamen.", + "ollama_no_models_loaded": "Der Endpunkt ist erreichbar, lieferte aber keine Modelle. Laden Sie zuerst ein Modell in Ollama.", + "ollama_model_not_listed": "Modell {{model}} ist nicht in der Modellliste des Endpunkts. Wählen Sie ein erkanntes Modell oder wechseln Sie zur manuellen Eingabe.", + "ollama_model_loading": "Modell {{model}} wird möglicherweise noch geladen. Versuchen Sie die tiefe Prüfung gleich erneut.", + "model_cold_start": "Das Modell wird möglicherweise noch in den GPU-/CPU-Speicher geladen. Große Modelle (7B+) können bei der ersten Nutzung 30–120 Sekunden dauern. Versuchen Sie es in Kürze erneut." + } + } + }, + "window": { + "minimize": "Minimieren", + "maximize": "Maximieren", + "restore": "Wiederherstellen", + "close": "Schließen" + }, + "sandbox": { + "title": "Sandbox-Umgebung", + "wslDesc": "Befehle in einer WSL2-Linux-Umgebung ausführen für bessere Isolierung und Sicherheit unter Windows.", + "limaDesc": "Befehle in einer Lima-VM ausführen für bessere Isolierung und Sicherheit unter macOS.", + "nativeDesc": "Befehle laufen direkt auf Ihrem System (nativer Linux-Modus).", + "enableSandbox": "Sandbox-Modus aktivieren", + "comingSoon": "Demnächst — in Entwicklung", + "readyStatus": "Sandbox bereit und aktiv", + "notReadyStatus": "Sandbox aktiviert, aber nicht vollständig konfiguriert", + "disabledStatus": "Sandbox deaktiviert - Befehle laufen direkt auf dem System", + "enabledWillSetup": "Sandbox aktiviert. Umgebung wird eingerichtet...", + "disabled": "Sandbox-Modus deaktiviert", + "failedToLoad": "Sandbox-Status konnte nicht geladen werden", + "failedToSave": "Sandbox-Einstellungen konnten nicht gespeichert werden", + "statusRefreshed": "Status aktualisiert", + "checkFailed": "Sandbox-Status konnte nicht geprüft werden", + "environmentStatus": "Umgebungsstatus", + "checkStatus": "Status prüfen", + "platform": "Plattform", + "mode": "Modus", + "status": "Status", + "native": "Nativ", + "wslAvailable": "WSL2 verfügbar", + "limaAvailable": "Lima verfügbar", + "vmCreated": "VM-Instanz erstellt", + "vmRunning": "VM läuft", + "wslNotInstalled": "WSL2 ist nicht installiert", + "wslInstallHint": "Installieren Sie WSL2 für bessere Isolierung. Führen Sie diesen Befehl in PowerShell als Administrator aus:", + "limaNotInstalled": "Lima ist nicht installiert", + "limaInstallHint": "Installieren Sie Lima für bessere Isolierung. Führen Sie diesen Befehl im Terminal aus:", + "linuxNative": "Linux führt Befehle nativ ohne zusätzliches Sandboxing aus.", + "nodeInstalled": "Node.js erfolgreich installiert", + "nodeInstallFailed": "Node.js konnte nicht installiert werden", + "pythonInstalled": "Python erfolgreich installiert", + "pythonInstallFailed": "Python konnte nicht installiert werden", + "start": "Starten", + "stop": "Stoppen", + "limaStarted": "Lima-VM gestartet", + "limaStartFailed": "Lima-VM konnte nicht gestartet werden", + "limaStopped": "Lima-VM gestoppt", + "limaStopFailed": "Lima-VM konnte nicht gestoppt werden", + "settingUp": "Wird eingerichtet...", + "retrySetup": "Einrichtung wiederholen", + "setupComplete": "Sandbox-Einrichtung abgeschlossen", + "setupFailed": "Sandbox-Einrichtung fehlgeschlagen", + "helpText1": "Die Sandbox bietet eine isolierte Umgebung zum sicheren Ausführen von Befehlen.", + "helpText2": "Für volle Sandbox-Unterstützung ist WSL2 (Windows) oder eine Lima-VM (macOS) erforderlich.", + "setupTitle": "Sandbox wird eingerichtet", + "setupSubtitle": "Beim ersten Start muss eine sichere Ausführungsumgebung konfiguriert werden.", + "progressLabel": "Fortschritt", + "continuingNative": "Es wird im nativen Ausführungsmodus fortgefahren.", + "retryLima": "Lima neu starten versuchen", + "retryingLima": "Lima wird neu gestartet...", + "continueNative": "Mit nativem Modus fortfahren", + "configuredSuccess": "Sandbox konfiguriert. Code kann jetzt sicher ausgeführt werden.", + "nativeFallbackSuccess": "Die native Systemumgebung wird zur Befehlsausführung verwendet.", + "footerWsl": "WSL2-Sandbox", + "footerLima": "Lima-Sandbox", + "footerNative": "Nativer Modus", + "configuring": "Wird konfiguriert...", + "syncFiles_one": "{{count}} Datei", + "syncFiles_other": "{{count}} Dateien", + "syncExplanation": "Projektdateien werden zur sicheren Codeausführung in die isolierte Sandbox synchronisiert.", + "syncFirst": "Die erste Synchronisierung ist langsamer,", + "syncFollowup": "inkrementelle Synchronisierungen sind schneller.", + "checkingWsl": "WSL2-Umgebung wird geprüft...", + "checkingLima": "Lima-Umgebung wird geprüft...", + "creatingLima": "Lima-VM wird erstellt...", + "startingLima": "Lima-VM wird gestartet...", + "installingNode": "Node.js wird installiert...", + "installingPython": "Python wird installiert...", + "installingPip": "pip wird installiert...", + "installingDeps": "Skill-Abhängigkeiten werden installiert...", + "setupFailedMessage": "Sandbox-Einrichtung fehlgeschlagen", + "sandboxDisabledMessage": "Sandbox deaktiviert", + "nativeModeMessage": "Nativer Ausführungsmodus wird verwendet", + "wslNotDetectedMessage": "WSL2 nicht erkannt, nativer Modus wird verwendet", + "limaNotDetectedMessage": "Lima nicht erkannt, nativer Modus wird verwendet", + "nodeInstallFailedMessage": "Node.js-Installation fehlgeschlagen", + "wslReadyMessage": "WSL2-Sandbox bereit", + "limaReadyMessage": "Lima-Sandbox bereit", + "limaCreateFailedMessage": "Erstellung der Lima-VM fehlgeschlagen", + "limaStartFailedMessage": "Start der Lima-VM fehlgeschlagen", + "setupDetailSandboxDisabled": "Nativer Ausführungsmodus wird verwendet (Sandbox in Einstellungen deaktiviert)", + "setupDetailLinuxNative": "Linux führt Befehle direkt aus", + "setupDetailInstallWsl": "WSL2 für bessere Sandbox-Isolierung installieren", + "setupDetailInstallNodeWsl": "Bitte installieren Sie Node.js manuell in WSL", + "setupDetailInstallNodeWslRuntime": "Node.js-Laufzeit wird in {{distro}} installiert", + "setupDetailInstallPythonWslRuntime": "Python-Laufzeit wird in {{distro}} installiert", + "setupDetailInstallPipWslRuntime": "Python-Paketmanager wird in {{distro}} installiert", + "setupDetailInstallDeps": "markitdown, pypdf, pdfplumber für PDF-/PPTX-Skills werden installiert", + "setupDetailInstallLima": "Lima für bessere Sandbox-Isolierung installieren (brew install lima)", + "setupDetailCreateLima": "Der erste Start erfordert einen Image-Download und kann einige Minuten dauern", + "setupDetailStartLima": "Der VM-Start kann einige Minuten dauern", + "setupDetailInstallNodeLima": "Node.js-Laufzeit wird in der Lima-VM installiert", + "setupDetailInstallPythonLima": "Python-Laufzeit wird in der Lima-VM installiert", + "syncingFilesMessage": "Dateien werden in die Sandbox synchronisiert...", + "syncingSkillsMessage": "Skills werden konfiguriert...", + "syncReadyMessage": "Sandbox bereit", + "syncFailedMessage": "Sandbox-Synchronisierung fehlgeschlagen", + "syncDetailWsl": "Projektdateien werden in die isolierte WSL-Umgebung kopiert", + "syncDetailLima": "Projektdateien werden in die isolierte Lima-Umgebung kopiert", + "syncDetailSkills": "Integrierte Skills werden in die Sandbox kopiert", + "syncDetailFallback": "Rückfall auf den Direktzugriffsmodus (weniger sicher)", + "syncDetailCompleted": "{{count}} Dateien synchronisiert" + }, + "mcp": { + "noConnectors": "Keine Konnektoren konfiguriert", + "addConnector": "Konnektor hinzufügen, um MCP-Tools zu aktivieren", + "toolsAvailable": "{{count}} Tool verfügbar", + "toolsAvailable_plural": "{{count}} Tools verfügbar", + "connected": "Verbunden", + "notConnected": "Nicht verbunden", + "connecting": "Wird verbunden...", + "failed": "Verbindung fehlgeschlagen", + "chromeHint": "Ein neues Chrome-Debug-Fenster öffnet sich automatisch, wenn der Port nicht verfügbar ist", + "quickAddPresets": "Schnell-Voreinstellungen", + "show": "Anzeigen", + "hide": "Ausblenden", + "addCustomConnector": "Eigenen Konnektor hinzufügen", + "configure": "Konfigurieren", + "added": "Hinzugefügt", + "requiresToken": "Token erforderlich", + "editConnector": "Konnektor bearbeiten", + "addConnectorTitle": "Eigenen Konnektor hinzufügen", + "name": "Name", + "namePlaceholder": "Chrome MCP Server", + "type": "Typ", + "typeStdioLocal": "STDIO (lokal)", + "typeSseRemote": "SSE (remote)", + "typeStreamableHttp": "HTTP (streambar)", + "command": "Befehl", + "commandPlaceholder": "npx", + "arguments": "Argumente", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Leerzeichen-getrennte Argumente", + "url": "URL", + "enableConnector": "Diesen Konnektor aktivieren", + "presetAlreadyConfigured": "Konnektor \"{{name}}\" ist bereits konfiguriert", + "envValuePlaceholder": "Wert eingeben", + "removeVar": "Entfernen", + "loadServersFailed": "Konnektoren konnten nicht geladen werden", + "saveServerFailed": "Konnektor konnte nicht gespeichert werden", + "deleteServerFailed": "Konnektor konnte nicht gelöscht werden", + "deleteConnectorConfirm": "Diesen Konnektor löschen?", + "commandRequired": "Befehl ist erforderlich", + "urlRequired": "URL ist erforderlich", + "toolCount": "{{count}} Tools", + "callCount": "{{count}} Aufrufe" + }, + "credentials": { + "envVars": "Umgebungsvariablen", + "enterEnvVar": "Name der Umgebungsvariable eingeben (z. B. NOTION_TOKEN):", + "usedForTokens": "Wird für Token und Geheimnisse verwendet (z. B. NOTION_TOKEN)", + "noEnvVars": "Keine Umgebungsvariablen konfiguriert" + }, + "skills": { + "storagePathHint": "Wählen Sie, wo eigene Skills liegen und wie die App sie aktualisiert.", + "builtinSkillsDesc": "Integrierte Skills sind in der App enthalten und können bei Bedarf umgeschaltet werden.", + "pluginsTitle": "Plugins & Importe", + "pluginsDesc": "Marketplace-Plugins durchsuchen oder eigene Skills aus einem lokalen Ordner importieren.", + "title": "📦 Skills", + "description": "Skills erweitern Claudes Fähigkeiten um spezialisiertes Wissen und Werkzeuge.", + "builtinSkills": "Integrierte Skills", + "customSkills": "Eigene Skills", + "noCustomSkills": "Keine eigenen Skills installiert", + "installSkillsDesc": "Installieren Sie Skills, um Claudes Fähigkeiten zu erweitern", + "browsePlugins": "Plugins durchsuchen", + "pluginListTitle": "Claude Plugin Marketplace durchsuchen", + "pluginSkillCount": "Installierbare Skills: {{count}}", + "pluginComponents": "Komponenten: Skills {{skills}} · Befehle {{commands}} · Agenten {{agents}} · Hooks {{hooks}} · MCP {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Komponentendetails sind nach der Installation verfügbar.", + "pluginInstall": "Installieren", + "pluginInstalled": "Installiert", + "pluginInstallSuccess": "Plugin \"{{name}}\" erfolgreich installiert", + "pluginInstallFailed": "Plugin konnte nicht installiert werden", + "pluginNoSkills": "Dieses Plugin hat in V1 keine installierbaren Skills", + "pluginNoComponents": "Dieses Plugin hat keine ladbaren Komponenten", + "pluginManage": "Verwalten", + "pluginEnable": "Aktivieren", + "pluginDisable": "Deaktivieren", + "pluginUninstall": "Plugin \"{{name}}\" deinstallieren?", + "pluginManageUninstall": "Deinstallieren", + "pluginUninstalled": "Plugin \"{{name}}\" wurde deinstalliert", + "pluginComponentHooksDisabledByDefault": "Dieses Plugin enthält Hooks. Hooks sind standardmäßig deaktiviert und können nach der Installation in den Verwaltungseinstellungen aktiviert werden.", + "pluginComponentMcpDisabledByDefault": "Dieses Plugin enthält MCP. MCP ist standardmäßig deaktiviert und kann nach der Installation in den Verwaltungseinstellungen aktiviert werden.", + "pluginAppliedInRuntime": "Plugin-Einstellungen werden derzeit zur Laufzeit angewendet", + "pluginDisabled": "Plugin ist derzeit deaktiviert", + "noPluginsFound": "Keine Plugins verfügbar", + "storagePathTitle": "Skills-Speicherverzeichnis", + "storagePathUnavailable": "Speicherpfad nicht verfügbar", + "selectStoragePath": "Verzeichnis auswählen", + "openStoragePath": "Verzeichnis öffnen", + "refreshSkills": "Skills aktualisieren", + "storagePathUpdated": "Speicher aktualisiert. {{migrated}} Skills migriert, {{skipped}} übersprungen", + "storagePathUpdateFailed": "Skills-Speicherpfad konnte nicht aktualisiert werden", + "storagePathOpenFailed": "Skills-Speicherpfad konnte nicht geöffnet werden", + "storagePathFallback": "Rückfall auf das Standard-Skills-Verzeichnis. Bitte prüfen Sie Ihren konfigurierten Pfad.", + "storageWatcherError": "Fehler beim Überwachen des Skills-Verzeichnisses: {{message}} (Polling-Fallback aktiviert).", + "installSkillFromFolder": "Skill aus Ordner installieren", + "deleteSkill": "Skill \"{{name}}\" löschen?", + "failedToLoad": "Skills konnten nicht geladen werden", + "failedToInstall": "Skill konnte nicht installiert werden", + "failedToDelete": "Skill konnte nicht gelöscht werden", + "failedToToggle": "Skill konnte nicht umgeschaltet werden" + }, + "logs": { + "actionsTitle": "Protokoll-Aktionen", + "title": "Anwendungsprotokolle", + "description": "Diagnose-Bundles zur Fehlersuche anzeigen und exportieren. Protokolle rotieren automatisch nach 10 MB, und Exporte enthalten zudem aktuelle Sitzungs- und Fehlerzusammenfassungen.", + "inventoryDescription": "Aktueller Protokollbestand und Speicherbedarf.", + "recentDescription": "Aktuelle Anwendungsprotokolle zur Einsicht. Sie können auch dann ein Diagnose-Bundle exportieren, wenn noch keine Protokolldatei existiert.", + "directoryDescription": "Aktueller Speicherort der Anwendungsprotokolle auf der Festplatte.", + "actionsDescription": "Diagnose-Bundle exportieren, Protokollverzeichnis anzeigen oder Protokolldateien löschen.", + "enableDevLogs": "Entwicklerprotokolle aktivieren", + "enableDevLogsDesc": "Detaillierte Protokolle zur Fehlersuche aufzeichnen. Deaktivieren, um Speicherplatz zu sparen.", + "devLogsEnabled": "Entwicklerprotokolle aktiviert", + "devLogsDisabled": "Entwicklerprotokolle deaktiviert", + "toggleFailed": "Entwicklerprotokolle konnten nicht umgeschaltet werden", + "logFiles": "Protokolldateien", + "totalSize": "Gesamtgröße", + "noLogFiles": "Keine Protokolldateien gefunden", + "logsDirectory": "Protokollverzeichnis:", + "exportZip": "Diagnose exportieren", + "openFolder": "Ordner öffnen", + "clearAll": "Alle löschen", + "clearConfirm": "Sind Sie sicher, dass Sie alle Protokolldateien löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "exportSuccess": "Diagnose erfolgreich exportiert nach {{path}}", + "clearSuccess": "{{count}} Protokolldatei(en) gelöscht", + "exportFailed": "Protokolle konnten nicht exportiert werden", + "clearFailed": "Protokolle konnten nicht gelöscht werden", + "helpText1": "Das exportierte Diagnose-Bundle enthält App-Protokolle, einen bereinigten Laufzeit-Snapshot und standardmäßig reine Metadaten-Zusammenfassungen zu Sitzungen/Fehlern ohne Nachrichteninhalte.", + "helpText2": "Das Teilen dieses Bundles hilft uns meist, Probleme deutlich schneller einzugrenzen, egal ob sie aus der UI, der Tool-Ausführung oder der lokalen Umgebung stammen." + }, + "sidebar": { + "recents": "Zuletzt verwendet", + "expandToView": "Zum Anzeigen der Aufgaben erweitern", + "noTasks": "Noch keine Aufgaben", + "noTasksHint": "Starten Sie einen neuen Chat, um zu bauen, zu recherchieren oder Dateien zu bearbeiten.", + "search": "Unterhaltungen durchsuchen...", + "deleteAll": "Alle Unterhaltungen löschen", + "localTasks": "Diese Aufgaben laufen lokal und werden nicht zwischen Geräten synchronisiert.", + "apiConfigured": "API konfiguriert", + "apiNotConfigured": "API nicht konfiguriert", + "user": "Benutzer", + "newTask": "Neuer Chat", + "newTaskHint": "Eine neue Unterhaltung starten", + "today": "Heute", + "yesterday": "Gestern", + "previousWeek": "Letzte 7 Tage", + "older": "Älter", + "settings": "Einstellungen", + "themeToggle": "Design umschalten", + "manage": "Verwalten", + "selectAll": "Alle auswählen", + "deselectAll": "Alle abwählen", + "nSelected": "{{count}} ausgewählt", + "batchDeleteConfirm": "{{count}} Unterhaltungen löschen? Das kann nicht rückgängig gemacht werden.", + "cancel": "Abbrechen", + "confirmDelete": "Löschen" + }, + "chat": { + "sendMessage": "Nachricht senden", + "stop": "Stoppen", + "processing": "Wird verarbeitet...", + "typeMessage": "Nachricht eingeben...", + "loadingConversation": "Unterhaltung wird geladen...", + "startConversation": "Unterhaltung starten", + "startFailed": "Sitzung konnte nicht gestartet werden. Bitte erneut versuchen.", + "disclaimer": "Open Cowork ist KI-gestützt und kann Fehler machen. Bitte prüfen Sie Antworten doppelt.", + "noModel": "Kein Modell", + "connectorCount_one": "{{count}} Konnektor", + "connectorCount_other": "{{count}} Konnektoren" + }, + "context": { + "progress": "Fortschritt", + "artifacts": "Artefakte", + "context": "Kontext", + "workingDirectory": "Arbeitsverzeichnis", + "toolsUsed": "Verwendete Tools", + "mcpConnectors": "MCP-Konnektoren", + "copied": "Kopiert!", + "noToolsUsedYet": "Noch keine Tools verwendet", + "toolsUsedLabel": "Verwendete Tools:", + "noFolderSelected": "Kein Ordner ausgewählt", + "expandPanel": "Panel erweitern", + "collapsePanel": "Panel einklappen", + "queuedMessages": "Wartende Nachrichten: {{count}}", + "stepsWillShow": "Schritte erscheinen, während sich die Aufgabe entfaltet.", + "noArtifactsYet": "Noch keine Artefakte", + "revealFailed": "Datei nicht auffindbar. Bitte prüfen Sie, ob der Pfad existiert.", + "fileCreated": "Datei erstellt", + "callNumber": "Aufruf Nr. {{number}}", + "input": "Eingabe:", + "output": "Ausgabe:", + "tokenUsage": "Token-Verbrauch", + "inputTokens": "Eingabe", + "outputTokens": "Ausgabe", + "totalTokens": "Gesamt", + "changeDir": "Verzeichnis wechseln", + "changeDirFailed": "Verzeichnis konnte nicht gewechselt werden", + "copyPath": "Pfad kopieren", + "openInFileManager": "Im Dateimanager öffnen", + "contextUsage": "Kontextnutzung", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Anfrage", + "queued": "In Warteschlange", + "cancelled": "Abgebrochen", + "emptyMessage": "Leere Nachricht", + "emptyText": "(leerer Text)", + "copyMessage": "Nachricht kopieren", + "revealInFolder": "Im Ordner anzeigen", + "pastedContentAlt": "Eingefügter Inhalt", + "taskProgress": "Aufgabenfortschritt", + "noQuestions": "Keine Fragen", + "question": "Frage", + "thinking": "Denkt nach", + "executionTime": "Ausführungszeit: {{time}}" + }, + "schedule": { + "createTitle": "Zeitplan erstellen", + "editTitle": "Zeitplan bearbeiten", + "autoTitleLabel": "Automatischer Titel (zur Identifizierung von Sitzungen)", + "autoTitleChangedHint": "Prompt geändert. Der Titel wird nach dem Speichern neu generiert.", + "autoTitleUnchangedHint": "Bleibt der Prompt gleich, wird der bestehende Titel beibehalten.", + "autoTitleEditingChanged": "Nach dem Speichern wird der Titel aus dem Prompt mit dem Präfix [Geplante Aufgabe] neu generiert.", + "autoTitleEditingUnchanged": "Nach dem Speichern wird der Titel mit dem Präfix [Geplante Aufgabe] generiert.", + "autoTitleCreating": "Nach dem Speichern wird der Titel mit dem Präfix [Geplante Aufgabe] und einer Modellzusammenfassung generiert.", + "promptPlaceholder": "Prompt, der zur geplanten Zeit automatisch ausgeführt wird", + "cwdPlaceholder": "Arbeitsverzeichnis (standardmäßig der aktuelle Workspace)", + "executionTime": "Ausführungszeit", + "executionTimeHint": "Neue Zeitpläne bevorzugen Multi-Slot-Timing; ältere Intervallregeln können weiterhin bearbeitet werden.", + "enabled": "Aktiviert", + "mode": "Ausführungsmodus", + "weekday": "Wochentage", + "weekdayPlaceholder": "Wochentage auswählen", + "times": "Zeitslots", + "timePlaceholder": "Zeiten auswählen", + "legacyIntervalNotice": "Diese Aufgabe stammt aus einer älteren Festintervall-Regel und behält diesen Modus beim Speichern.", + "onceTimeLabel": "Wählen Sie die einmalige Ausführungszeit", + "legacyStartTimeLabel": "Wählen Sie die Startzeit für die ältere Intervallregel", + "dailyHint": "Wird täglich automatisch zu diesen Zeiten ausgeführt.", + "weeklyHint": "Wird automatisch an den ausgewählten Wochentagen und Zeitslots ausgeführt.", + "saveChanges": "Änderungen speichern", + "createTask": "Aufgabe erstellen", + "cancelEdit": "Bearbeiten abbrechen", + "listHint": "Das Deaktivieren blockiert nur künftige automatische Ausführungen. Bereits gestartete Sitzungen müssen manuell aus der Sitzungsliste gestoppt werden.", + "empty": "Noch keine Zeitpläne", + "loadFailed": "Zeitpläne konnten nicht geladen werden", + "promptRequired": "Geben Sie den auszuführenden Prompt ein", + "dailyTimesRequired": "Wählen Sie mindestens einen täglichen Zeitslot", + "weeklyTimesRequired": "Wählen Sie mindestens einen wöchentlichen Zeitslot", + "weekdayRequired": "Wählen Sie mindestens einen Wochentag", + "invalidTime": "Geben Sie eine gültige Ausführungszeit ein", + "nextRunCalculationFailed": "Die aktuelle Regel kann die nächste Ausführungszeit nicht berechnen", + "futureTimeRequired": "Die Ausführungszeit muss in der Zukunft liegen. Nutzen Sie Jetzt ausführen, um sie sofort auszulösen.", + "taskMissing": "Aufgabe existiert nicht mehr oder wurde gelöscht", + "updated": "Zeitplan aktualisiert", + "created": "Zeitplan erstellt", + "saveFailed": "Zeitplan konnte nicht gespeichert werden", + "toggleFailed": "Zeitplanzustand konnte nicht umgeschaltet werden", + "runNowSuccess": "Sofortige Ausführung ausgelöst", + "runNowFailed": "Sofortige Ausführung fehlgeschlagen", + "noSessionToStop": "Diese Aufgabe hat keine zu stoppende Ausführungssitzung", + "sessionNotRunning": "Diese Aufgabe hat derzeit keine laufende Sitzung", + "stopSent": "Stopp-Befehl gesendet", + "stopFailed": "Ausführung konnte nicht gestoppt werden", + "deleteConfirm": "Zeitplan \"{{title}}\" löschen?", + "deleted": "Zeitplan gelöscht", + "deleteFailed": "Zeitplan konnte nicht gelöscht werden", + "statusRunning": "Läuft", + "statusFinished": "Abgeschlossen", + "statusUnknown": "Unbekannt", + "statusNone": "Keine", + "taskEnabled": "Aktiviert", + "taskDisabled": "Deaktiviert", + "nextRun": "Nächste Ausführung: {{value}}", + "nextRunNone": "Nächste Ausführung: Keine", + "strategy": "Zeitplanregel: {{value}}", + "lastRun": "Letzte Ausführung: {{value}}", + "lastRunNever": "Letzte Ausführung: Noch nicht ausgeführt", + "recentSession": "Letzte Sitzung: {{value}}", + "sessionStatus": "Sitzungsstatus: {{value}}", + "cwd": "Verzeichnis: {{value}}", + "lastError": "Letzter Fehler: {{value}}", + "disable": "Deaktivieren", + "enable": "Aktivieren", + "runNow": "Jetzt ausführen", + "stopExecution": "Ausführung stoppen", + "edit": "Bearbeiten", + "delete": "Löschen", + "stopRunTitleActive": "Die letzte Ausführungssitzung dieser Aufgabe stoppen", + "stopRunTitleIdle": "Diese Aufgabe hat derzeit keine laufende Sitzung", + "repeatEveryMinute_one": "Alle {{count}} Minute", + "repeatEveryMinute_other": "Alle {{count}} Minuten", + "repeatEveryHour_one": "Alle {{count}} Stunde", + "repeatEveryHour_other": "Alle {{count}} Stunden", + "repeatEveryDay_one": "Alle {{count}} Tag", + "repeatEveryDay_other": "Alle {{count}} Tage", + "ruleDaily": "Täglich um {{times}}", + "ruleWeekly": "Wöchentlich am {{weekdays}} um {{times}}", + "ruleOnce": "Einmalig", + "previewNextRun": "Nächste erwartete Ausführung: {{value}}", + "previewSelectValidTime": "Wählen Sie eine gültige Ausführungszeit", + "previewSelectAtLeastOne": "Wählen Sie mindestens einen gültigen Zeitslot", + "previewAutoFind": "Das System wählt automatisch die nächste Ausführungszeit: {{value}}", + "weekdayMonday": "Mo", + "weekdayTuesday": "Di", + "weekdayWednesday": "Mi", + "weekdayThursday": "Do", + "weekdayFriday": "Fr", + "weekdaySaturday": "Sa", + "weekdaySunday": "So", + "modeOnce": "Einmalig", + "modeDaily": "Täglich", + "modeWeekly": "Wöchentlich", + "repeatUnitMinute": "Minute", + "repeatUnitHour": "Stunde", + "repeatUnitDay": "Tag", + "unknownWeekday": "Unbekannt", + "pickerEditTimes": "Zeitslots bearbeiten", + "pickerAnyHHmm": "Sie können einen beliebigen `HH:mm`-Wert eingeben", + "pickerSelectedCount_one": "{{count}} ausgewählt", + "pickerSelectedCount_other": "{{count}} ausgewählt", + "pickerAdd": "Hinzufügen", + "pickerSelectedTimes": "Ausgewählte Zeiten", + "pickerNone": "Noch keine Zeitslots ausgewählt", + "pickerSuggestions": "Vorschläge" + }, + "remote": { + "title": "Fernsteuerung", + "statusRunning": "Läuft. Über Feishu verfügbar.", + "statusStopped": "Gestoppt", + "startService": "Dienst starten", + "stopService": "Dienst stoppen", + "activeSessions": "Aktive Sitzungen", + "authorizedUsers": "Autorisierte Benutzer", + "pendingApprovals": "Ausstehende Genehmigungen", + "pairingRequests": "Kopplungsanfragen, die auf Genehmigung warten", + "unknownUser": "Unbekannter Benutzer", + "pairingCode": "Kopplungscode", + "approve": "Genehmigen", + "stepFeishu": "Feishu-Einrichtung", + "stepConnection": "Verbindung", + "stepAdvanced": "Erweitert", + "feishuTitle": "Feishu-Bot-Einrichtung", + "feishuDesc": "Erstellen Sie eine App in der Feishu Open Platform und tragen Sie hier die Zugangsdaten ein.", + "dmPolicy": "DM-Autorisierungsrichtlinie", + "policyPairing": "Kopplungsverifizierung", + "policyPairingDesc": "Benutzer müssen einen Kopplungscode eingeben.", + "policyAllowlist": "Zulassungsliste", + "policyAllowlistDesc": "Nur bestimmte Benutzer sind zugelassen.", + "policyOpen": "Offener Zugriff", + "policyOpenDesc": "Jeder kann den Bot nutzen.", + "openFeishu": "Feishu Open Platform öffnen", + "slackTitle": "Slack-Bot-Einrichtung", + "slackDesc": "Erstellen Sie eine Slack-App, installieren Sie sie in Ihrem Workspace und tragen Sie hier die Zugangsdaten ein.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (für Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Stellt eine ausgehende Verbindung zu Slack her. Keine öffentliche IP erforderlich.", + "openSlack": "Slack API öffnen", + "connectionTitle": "Verbindungsmodus", + "connectionDesc": "Wählen Sie, wie die Feishu-Server mit Ihrem Computer kommunizieren.", + "longConnection": "Langverbindungsmodus", + "recommended": "Empfohlen", + "longConnectionDesc": "Die App stellt eine ausgehende Verbindung zu den Feishu-Servern her. Keine öffentliche IP oder ngrok erforderlich.", + "noPublicInternet": "Keine Exposition gegenüber dem öffentlichen Internet", + "outOfBox": "Funktioniert sofort", + "stableReliable": "Stabil und zuverlässig", + "webhookMode": "Webhook-Modus", + "webhookDesc": "Feishu sendet Nachrichten an Ihren Server. Eine öffentlich erreichbare Adresse ist erforderlich.", + "localWebhookUrl": "Lokale Webhook-URL", + "useBuiltInNgrok": "Integriertes ngrok verwenden", + "ngrokHelpPrefix": "Kostenlos erhältlich bei", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunnel verbunden", + "longConnectionHint": "Gehen Sie in der Feishu Open Platform zu Events & Callbacks > Ereigniskonfiguration und stellen Sie den Abonnementmodus auf Langverbindung um.", + "advancedTitle": "Erweiterte Einstellungen", + "advancedDesc": "Verhalten der Fernsteuerung anpassen.", + "defaultWorkingDirectory": "Standard-Arbeitsverzeichnis", + "defaultWorkingDirectoryPlaceholder": "Zum Beispiel: C:\\Users\\ihr-name\\Projects", + "defaultWorkingDirectoryHint": "Dies ist das Standardverzeichnis für KI-Befehle. Sie können es in einer Nachricht auch mit `[cwd:path]` überschreiben.", + "gatewayPort": "Dienst-Port", + "autoApproveSafeTools": "Sichere Tools automatisch genehmigen", + "autoApproveSafeToolsDesc": "Sichere Tools wie Dateilesevorgänge und Browser-Operationen automatisch zulassen.", + "saveConfig": "Konfiguration speichern", + "authorizedUsersTitle": "Autorisierte Benutzer ({{count}})", + "revokeAccess": "Zugriff entziehen", + "quickStart": "Schnellstart", + "quickStartStep1": "Erstellen Sie eine App in der Feishu Open Platform und fügen Sie die Bot-Funktion hinzu.", + "quickStartStep2": "Kopieren Sie die App ID und das App Secret in die obigen Felder.", + "quickStartStep3": "Aktivieren Sie diese Berechtigungen in den Berechtigungseinstellungen:", + "quickStartStep4": "Wählen Sie in Feishus Ereigniskonfiguration den Langverbindungs-Ereignismodus.", + "quickStartStep5Prefix": "Abonnieren Sie das", + "quickStartStep5Suffix": "Ereignis.", + "quickStartStep6": "Veröffentlichen Sie die App und klicken Sie dann auf Dienst starten.", + "started": "Fernsteuerung gestartet", + "stopped": "Fernsteuerung gestoppt", + "actionFailed": "Vorgang fehlgeschlagen", + "configSaved": "Konfiguration gespeichert", + "saveFailed": "Konfiguration konnte nicht gespeichert werden", + "pairingApproved": "Kopplung genehmigt", + "approveFailed": "Kopplung konnte nicht genehmigt werden", + "reject": "Ablehnen", + "pairingRejected": "Kopplung abgelehnt", + "rejectFailed": "Kopplung konnte nicht abgelehnt werden", + "pairingGuideTitle": "Kopplungsanleitung", + "pairingGuideStep1": "Öffnen Sie Feishu und finden Sie den Bot", + "pairingGuideStep2": "Senden Sie eine beliebige Nachricht, um die Kopplung zu starten", + "pairingGuideStep3": "Genehmigen Sie die Kopplungsanfrage unten", + "pairingGuideStep4": "Fertig — der Benutzer kann jetzt mit dem Bot chatten", + "waitingForPairing": "Warten, dass Benutzer die Kopplung starten...", + "expiresIn": "Läuft ab in {{time}}", + "userRemoved": "Benutzer entfernt", + "revokeFailed": "Benutzer konnte nicht entfernt werden", + "copied": "Kopiert" + }, + "time": { + "now": "jetzt" + }, + "permission": { + "permissionRequired": "Berechtigung erforderlich", + "tool": "Tool:", + "input": "Eingabe:", + "warning": "Diese Aktion kann Ihr System verändern. Bitte sorgfältig prüfen.", + "deny": "Verweigern", + "allow": "Zulassen", + "alwaysAllow": "Dieses Tool immer zulassen", + "useTool": "Das Tool {{toolName}} verwenden", + "toolDescriptions": { + "write": "Dateien auf Ihrem System schreiben", + "edit": "Bestehende Dateien auf Ihrem System bearbeiten", + "bash": "Shell-Befehle ausführen", + "webFetch": "Daten aus dem Web abrufen", + "webSearch": "Im Web suchen", + "read_file": "Dateien im Workspace lesen", + "write_file": "Dateien im Workspace schreiben", + "edit_file": "Dateien im Workspace bearbeiten", + "list_directory": "Verzeichnisinhalte im Workspace auflisten", + "execute_command": "Shell-Befehle im Workspace ausführen", + "glob": "Dateien nach Muster suchen", + "grep": "Dateiinhalte durchsuchen" + } + }, + "sudo": { + "title": "Administratorberechtigung erforderlich", + "description": "Der folgende Befehl erfordert Administratorrechte:", + "passwordLabel": "Passwort", + "passwordPlaceholder": "Geben Sie Ihr Passwort ein", + "cancel": "Abbrechen", + "execute": "Ausführen", + "warning": "Ihr Passwort wird nur für diesen Befehl verwendet und nicht gespeichert." + }, + "errorBoundary": { + "title": "Etwas ist schiefgelaufen", + "description": "In der Anwendung ist ein unerwarteter Fehler aufgetreten. Sie können einen Wiederherstellungsversuch starten, indem Sie auf die Schaltfläche unten klicken.", + "details": "Fehlerdetails", + "retry": "Erneut versuchen" + } +} diff --git a/src/renderer/i18n/locales/es.json b/src/renderer/i18n/locales/es.json new file mode 100644 index 00000000..9f3d1083 --- /dev/null +++ b/src/renderer/i18n/locales/es.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Guardar", + "cancel": "Cancelar", + "delete": "Eliminar", + "edit": "Editar", + "add": "Añadir", + "close": "Cerrar", + "loading": "Cargando...", + "error": "Error", + "success": "Éxito", + "saving": "Guardando...", + "saved": "¡Guardado correctamente!", + "sure": "¿Estás seguro?", + "yes": "Sí", + "no": "No", + "enable": "Activar", + "disable": "Desactivar", + "install": "Instalar", + "optional": "opcional", + "appLogoAlt": "Logotipo de Open Cowork", + "pastedImageAlt": "Pegado {{index}}" + }, + "welcome": { + "title": "¿Cómo puedo ayudarte hoy?", + "placeholder": "Describe lo que te gustaría hacer...", + "createFile": "Crear un archivo", + "crunchData": "Procesar datos", + "organizeFiles": "Organizar archivos", + "checkEmails": "Revisar correos", + "searchPapers": "Buscar y resumir artículos", + "summarizePapersToNotion": "Resumir artículos en Notion", + "selectWorkingFolder": "Seleccionar carpeta de trabajo (obligatorio)", + "selectWorkingFolderFailed": "No se pudo seleccionar la carpeta de trabajo", + "attachFiles": "Adjuntar archivos", + "letsGo": "Vamos", + "starting": "Iniciando...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Logotipo de Open Cowork", + "pastedImageAlt": "Pegado {{index}}", + "quickPromptCreate": "Crea un nuevo archivo para mí", + "quickPromptCrunch": "Ayúdame a analizar y procesar datos", + "quickPromptOrganize": "Ayúdame a organizar mis archivos y carpetas", + "quickPromptEmail": "Ayúdame a usar Chrome para resumir los nuevos correos de los últimos tres días en mi Gmail y NetEase Mail. Ten en cuenta que las cuentas guardadas ya incluyen el sufijo completo del correo. Por lo tanto, si el sufijo del correo ya está rellenado previamente en la página web o en una captura de pantalla, no lo vuelvas a introducir, para evitar un fallo de inicio de sesión. Además, comprueba primero si las credenciales de la cuenta correspondiente están guardadas. Si el nombre de usuario o la contraseña de un servicio de correo determinado no están guardados, puedes omitir esa cuenta de correo.", + "quickPromptPapers": "Por favor, ayúdame a usar Chrome para buscar y resumir artículos relacionados con [Agent] en un plazo de dos días.\nSitios web de origen:\n1. HuggingFace Daily Papers. Por favor, incluye la información de votos y un breve resumen. Ten en cuenta que es posible que no incluya artículos durante el fin de semana, por lo que quizá necesites revisar los artículos de días anteriores. Pero asegúrate de que haya un total de dos días.", + "quickPromptNotion": "Ayúdame a investigar tres artículos de revisión representativos relacionados con agentes y añádelos en una página de Notion titulada \"Agent Survey\". Para cada artículo, incluye el título, los autores, el lugar/año de publicación y un breve resumen de las contribuciones principales.", + "apiNotConfigured": "La API aún no está configurada. Ve a Configuración para definir tu proveedor de API y tu clave.", + "goToSettings": "Ir a Configuración" + }, + "settings": { + "title": "Configuración", + "apiSettings": "Configuración de la API", + "apiSettingsDesc": "Configurar el proveedor de API y la clave", + "sandbox": "Sandbox", + "sandboxDesc": "Entorno de ejecución aislado", + "connectors": "Conectores MCP", + "connectorsDesc": "Integraciones de navegador y herramientas", + "skills": "Habilidades", + "skillsDesc": "Gestionar habilidades personalizadas", + "memory": "Memoria", + "memoryDesc": "Gestionar la memoria a largo plazo y la experiencia del espacio de trabajo", + "schedule": "Programaciones", + "scheduleDesc": "Automatización de instrucciones tipo alarma", + "remote": "Control remoto", + "remoteDesc": "Usa Open Cowork desde Feishu y otros canales", + "logs": "Registros", + "logsDesc": "Ver y exportar los registros de la aplicación", + "panelDesc": "Configura tu espacio de trabajo, herramientas y comportamiento de la cuenta.", + "general": "General", + "generalDesc": "Apariencia, idioma y preferencias" + }, + "general": { + "appearance": "Apariencia", + "theme": "Tema", + "themeLight": "Claro", + "themeDark": "Oscuro", + "themeSystem": "Sistema", + "language": "Idioma" + }, + "memory": { + "title": "Memoria", + "description": "La memoria principal global almacena preferencias estables, mientras que la memoria de experiencia del espacio de trabajo almacena conocimiento multironda específico del proyecto.", + "enabled": "Activada", + "disabled": "Desactivada", + "toggleHint": "Desactivar esto detiene la futura incorporación y la recuperación automática, pero conserva los registros existentes.", + "enableAction": "Activar memoria", + "disableAction": "Desactivar memoria", + "enabledStatus": "La memoria está activada", + "disabledStatus": "La memoria está desactivada", + "coreCount": "Entradas principales", + "sessionCount": "Resúmenes de sesión", + "chunkCount": "Fragmentos de experiencia", + "workspaceCount": "Espacios de trabajo", + "latestIngestion": "Última incorporación", + "noIngestionYet": "Aún no se ha registrado ninguna incorporación", + "health": "Estado", + "healthy": "Correcto, sin fallos recientes", + "failedSessions": "{{count}} sesión(es) fallaron en su última incorporación", + "searchTitle": "Buscar e inspeccionar", + "searchDescription": "Busca en la memoria por el espacio de trabajo actual o globalmente, y luego inspecciona los resúmenes y los extractos sin procesar.", + "searchPlaceholder": "Buscar preferencias, implementaciones previas, decisiones...", + "searchAction": "Buscar", + "scopeWorkspace": "Espacio de trabajo actual", + "scopeAll": "Toda la memoria", + "scopeGlobal": "Solo la memoria principal", + "currentWorkspace": "Espacio de trabajo actual", + "groupCore": "Memoria principal", + "groupSessions": "Resúmenes de sesión", + "groupChunks": "Coincidencias de fragmentos", + "detailTitle": "Detalle", + "noSelection": "Selecciona un resultado para inspeccionar el resumen completo y el extracto de origen.", + "noResults": "Sin resultados", + "maintenanceTitle": "Mantenimiento", + "maintenanceDescription": "Reconstruye la memoria de experiencia del espacio de trabajo actual o borra los datos guardados.", + "rebuildWorkspace": "Reconstruir el espacio de trabajo actual", + "clearWorkspace": "Borrar el espacio de trabajo actual", + "clearCore": "Borrar la memoria principal", + "rebuildConfirm": "¿Reconstruir la memoria de experiencia del espacio de trabajo actual? Esto vuelve a analizar las sesiones históricas de ese espacio de trabajo.", + "clearWorkspaceConfirm": "¿Borrar la memoria de experiencia del espacio de trabajo actual? Esto no se puede deshacer.", + "clearCoreConfirm": "¿Borrar toda la memoria principal global? Esto no se puede deshacer.", + "rebuildSuccess": "Memoria del espacio de trabajo reconstruida", + "clearWorkspaceSuccess": "Memoria del espacio de trabajo borrada", + "clearCoreSuccess": "Memoria principal borrada", + "runtimeTitle": "Configuración de tiempo de ejecución", + "runtimeDescription": "De forma predeterminada, esto hereda la configuración de API actualmente activa. Aquí ajustas principalmente la profundidad de navegación, el embedding y el directorio en disco.", + "runtimeSaved": "Configuración de tiempo de ejecución de la memoria guardada", + "saveRuntime": "Guardar la configuración de tiempo de ejecución", + "storageRoot": "Raíz de almacenamiento", + "noWorkspace": "Aún no hay espacio de trabajo", + "maxNavSteps": "Pasos de navegación", + "ingestionConcurrency": "Concurrencia de reconstrucción", + "useEmbedding": "Activar la recuperación por embedding", + "evalEnabled": "Activar la evaluación con modelo real", + "evalArtifactsRoot": "Directorio de artefactos de evaluación", + "evalMaxRounds": "Rondas de evaluación", + "promptIterationRounds": "Rondas de iteración de instrucciones", + "llmConfig": "LLM de memoria", + "embeddingConfig": "Embedding", + "inheritActive": "Heredar la API activa", + "modelOverride": "Anular el modelo", + "baseUrlOverride": "Anular la Base URL", + "apiKeyOverride": "Anular la API Key", + "allSources": "Todas las fuentes", + "groupRawSessions": "Sesiones sin procesar", + "sourceFile": "Archivo de origen", + "inspectSession": "Inspeccionar la memoria de sesión", + "inspectSessionHint": "Selecciona una sesión o un fragmento de los resultados anteriores para inspeccionarlo.", + "revealInFinder": "Mostrar en Finder", + "rebuildAll": "Reconstruir toda la memoria", + "rebuildAllConfirm": "Esto borrará y reconstruirá toda la memoria. ¿Continuar?", + "rebuildAllSuccess": "Se reconstruyó toda la memoria: {{sessionCount}} sesión(es), {{workspaceCount}} espacio(s) de trabajo de origen", + "filesTitle": "Visor de archivos sin procesar", + "filesDescription": "Visualiza los artefactos de core / experiencia unificada / session_state / eval exactamente como se escriben en el disco.", + "fileList": "Lista de archivos", + "refreshFiles": "Actualizar", + "noFiles": "Aún no hay archivos de memoria", + "fileContent": "Contenido del archivo", + "emptyFile": "El archivo está vacío", + "selectFileHint": "Selecciona un archivo a la izquierda para ver su JSON sin procesar." + }, + "language": { + "english": "Inglés", + "chinese": "Chino", + "selectLanguage": "Seleccionar idioma", + "currentLanguage": "Idioma actual" + }, + "api": { + "firstRunTitle": "Configurar la API", + "firstRunSubtitle": "Configura un proveedor para empezar a usar Open Cowork", + "settingsTitle": "Configuración de la API", + "settingsSubtitle": "Gestionar el proveedor, la clave y la configuración del modelo", + "configSet": "Conjunto de configuración", + "defaultSetTag": "Predeterminado", + "saveAs": "Guardar como", + "renameSet": "Cambiar nombre", + "deleteSet": "Eliminar conjunto", + "saveAndSwitch": "Guardar y cambiar", + "discardAndSwitch": "Descartar y cambiar", + "currentSetSavingHint": "\"Guardar configuración\" actualiza únicamente el conjunto de configuración seleccionado actualmente.", + "unsavedCurrentSetHint": "El conjunto de configuración actual tiene cambios sin guardar.", + "unsavedSwitchPrompt": "El conjunto de configuración actual tiene cambios sin guardar. Elige una acción antes de cambiar a \"{{name}}\".", + "configSetSaveAsPrompt": "Introduce un nombre para el nuevo conjunto de configuración", + "configSetRenamePrompt": "Introduce un nuevo nombre para este conjunto de configuración", + "configSetDeleteConfirm": "¿Eliminar el conjunto de configuración \"{{name}}\"?", + "configSetNameRequired": "Se requiere el nombre del conjunto de configuración", + "configSetLimitReached": "Puedes guardar hasta {{count}} conjuntos de configuración", + "configSetCreated": "Conjunto de configuración creado", + "configSetRenamed": "Se cambió el nombre del conjunto de configuración", + "configSetDeleted": "Conjunto de configuración eliminado", + "configSetSwitched": "Conjunto de configuración cambiado", + "defaultConfigSetName": "Predeterminado", + "configSetFallbackName": "Conjunto de configuración {{index}}", + "provider": "Proveedor de API", + "providerDescription": "Elige la familia de proveedor y el estilo de protocolo general para este espacio de trabajo.", + "apiKey": "API Key", + "enterApiKey": "Introduce tu API Key", + "apiKeyDescription": "Se guarda localmente y se limita al conjunto de configuración activo.", + "protocol": "Protocolo", + "baseUrl": "Base URL", + "model": "Modelo", + "usePreset": "Usar preajuste", + "custom": "Personalizado", + "moreModels": "Más modelos", + "noModelsAvailable": "No hay modelos disponibles", + "selectProtocol": "Selecciona el protocolo compatible con el servicio", + "enterOllamaUrl": "Introduce la URL del servicio de Ollama compatible con OpenAI", + "enterOpenAIUrl": "Introduce la URL del servicio compatible con OpenAI", + "enterAnthropicUrl": "Introduce la URL del servicio compatible con Anthropic", + "enterGeminiUrl": "Introduce una Base URL compatible con Gemini", + "enterModelId": "Introduce el ID del modelo, p. ej., deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Por favor, selecciona un modelo", + "contextWindow": "Ventana de contexto", + "contextWindowPlaceholder": "Detectar automáticamente", + "maxOutputTokens": "Máximo de tokens de salida", + "maxOutputTokensPlaceholder": "Detectar automáticamente", + "contextWindowHint": "Déjalo vacío para la detección automática. Anúlalo solo si el modelo informa de límites incorrectos.", + "saveFailed": "No se pudo guardar la configuración. Por favor, inténtalo de nuevo.", + "getStarted": "Comenzar", + "saveSettings": "Guardar configuración", + "openSettingsAction": "Abrir la configuración de la API", + "configRequiredActiveSet": "El conjunto de configuración actual no tiene credenciales utilizables. Completa primero la configuración en Configuración de la API.", + "testConnection": "Probar conexión", + "testingConnection": "Probando...", + "refreshModels": "Actualizar modelos", + "refreshingModels": "Actualizando...", + "refreshModelsFailed": "No se pudieron actualizar los modelos. Comprueba la URL o el estado del servicio.", + "manualModel": "Modelo manual", + "useDetectedModels": "Usar los modelos detectados", + "discoverLocalOllama": "Encontrar Ollama local", + "discoveringLocalOllama": "Buscando...", + "discoverLocalOllamaHint": "Introduce primero tu endpoint de Ollama. Los modelos se obtendrán automáticamente, y la entrada manual solo es necesaria si la detección falla.", + "localOllamaDiscovered": "Se encontró Ollama local con {{count}} modelo(s) disponible(s).", + "localOllamaNotFound": "No se encontró ningún servicio local de Ollama. Inícialo con `ollama serve` e inténtalo de nuevo.", + "localOllamaNoModels": "Se encontró un servicio local de Ollama, pero actualmente no expone ningún modelo.", + "localOllamaModelUnavailable": "Se encontró Ollama local, pero el modelo {{model}} no pudo completar una solicitud de inferencia mínima.", + "localOllamaModelLoading": "Se encontró Ollama local, pero el modelo todavía se está cargando en memoria. Los modelos grandes pueden tardar hasta un minuto.", + "enableThinking": "Activar el modo de razonamiento", + "enableThinkingHint": "Muestra el proceso de razonamiento de Claude paso a paso. Esto proporciona más transparencia, pero puede aumentar el uso de tokens.", + "enableThinkingOllamaHint": "La mayoría de los modelos de Ollama no admiten el modo de razonamiento. Actívalo solo si tu modelo lo admite explícitamente.", + "testSuccess": "Conexión correcta ({{ms}}ms)", + "testSuccessNeedSave": "La prueba de conexión se superó. Guarda la configuración antes de iniciar una sesión.", + "testError": { + "missing_key": "Se requiere la API Key", + "missing_base_url": "Se requiere la Base URL para este proveedor", + "unauthorized": "API Key no válida o no autorizada", + "not_found": "Endpoint no encontrado. Comprueba la Base URL", + "rate_limited": "Límite de tasa alcanzado o cuota superada", + "server_error": "Error del servicio. Por favor, inténtalo de nuevo más tarde", + "network_error": "Error de red. Comprueba tu conexión", + "ollama_not_running": "No se puede conectar a Ollama. Por favor, asegúrate de que Ollama se esté ejecutando (ollama serve).", + "ollama_loading": "Ollama está cargando el modelo en memoria. Los modelos grandes pueden tardar de 30 a 120 segundos. Por favor, espera e inténtalo de nuevo.", + "unknown": "La conexión falló" + }, + "guidance": { + "commonSetupsTitle": "Configuraciones comunes de proveedores", + "commonSetupsHint": "Revisa o aplica una configuración recomendada", + "apply": "Aplicar", + "detectedBadge": "Detectado", + "preferProviderTab": "Se detectó {{service}}. Este servicio suele ser más fácil de configurar desde la pestaña dedicada de {{provider}}.", + "protocolMismatch": "Se detectó {{service}}. Protocolo recomendado: {{recommendedProtocol}}.", + "protocolLooksGood": "Se detectó {{service}}. Tu protocolo actual ya coincide con la configuración recomendada de {{recommendedProtocol}}.", + "baseUrlHint": "Se detectó {{service}}. Configuración recomendada de {{recommendedProtocol}}: {{baseUrl}}. Modelo de ejemplo: {{model}}.", + "genericBaseUrlHint": "Esto parece un endpoint personalizado compatible con {{recommendedProtocol}}. Formato de Base URL recomendado: {{baseUrl}}. Modelo de ejemplo: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Servicio", + "protocol": "Protocolo", + "baseUrl": "Base URL", + "model": "Modelo de ejemplo", + "notes": "Notas", + "action": "Acción" + }, + "errorHints": { + "emptyProbeGeneric": "El endpoint devolvió una respuesta de sondeo vacía. Esto suele significar que el protocolo o el modelo seleccionado es incompatible con el servicio.", + "emptyProbeDetected": "{{service}} devolvió una respuesta de sondeo vacía. Prueba la configuración recomendada de {{recommendedProtocol}} y verifica el ID del modelo para ese endpoint.", + "emptyProbePreferProvider": "{{service}} devolvió una respuesta de sondeo vacía. Prueba la pestaña dedicada de {{provider}} en lugar de configurarlo como un endpoint personalizado genérico.", + "probeMismatchGeneric": "El endpoint respondió, pero no en el formato esperado por este sondeo. Esto suele indicar una incompatibilidad de protocolo o de modelo.", + "probeMismatchDetected": "{{service}} respondió con un formato de sondeo inesperado. Prueba la configuración recomendada de {{recommendedProtocol}} y verifica el ID del modelo para ese endpoint." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Prefiere la pestaña dedicada del proveedor OpenRouter a menos que estés depurando un relé personalizado." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Usa el modo compatible con OpenAI y copia el ID exacto del modelo desde la documentación de DeepSeek." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Usa el endpoint de coding con el modo compatible con Anthropic. Verifica el ID exacto del modelo de coding en la documentación de Moonshot." + }, + "glm": { + "name": "GLM / BigModel (ruta Anthropic)", + "note": "Usa la ruta compatible con Anthropic cuando la ruta del endpoint incluya /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Prefiere la pestaña dedicada del proveedor Ollama para la detección y actualización de modelos locales." + }, + "gemini": { + "name": "Endpoint personalizado de Gemini", + "note": "Usa el modo compatible con Gemini y el ID exacto del modelo expuesto por el endpoint." + }, + "minimax": { + "name": "MiniMax", + "note": "Usa el modo compatible con OpenAI a menos que tu gateway de MiniMax documente otro protocolo." + }, + "genericOpenAI": { + "name": "Genérico compatible con OpenAI", + "note": "Usa esto para relés, gateways o servidores de inferencia personalizados que imitan la API de OpenAI." + } + } + }, + "newSet": "Nuevo conjunto", + "createSetTitle": "Crear conjunto de configuración", + "saveAsTitle": "Guardar como conjunto de configuración", + "createSetNamePlaceholder": "Introduce el nombre del conjunto de configuración", + "renameSetTitle": "Cambiar el nombre del conjunto de configuración", + "unsavedBeforeActionPrompt": "El conjunto de configuración actual tiene cambios sin guardar. Elige una acción antes de \"{{action}}\".", + "newSetDefaultName": "Nuevo conjunto de configuración", + "copyNameSuffix": "Copia", + "currentSetLabel": "Conjunto actual: ", + "unsavedBadge": "Sin guardar", + "saveAndContinue": "Guardar y continuar", + "discardAndContinue": "Descartar y continuar", + "currentSetName": "Nombre del conjunto", + "renameInlineHint": "Edita directamente. Pulsa Intro o haz clic fuera para guardar automáticamente", + "switchSetLabel": "Cambiar a otro conjunto", + "switchSetPlaceholder": "Selecciona un conjunto al que cambiar", + "noOtherSetHint": "No hay otro conjunto disponible", + "configSetMissing": "Conjunto de configuración no encontrado", + "configSetCloneSourceMissing": "No se pudo encontrar un conjunto de configuración para clonar", + "configSetSystemDeleteForbidden": "El conjunto de configuración predeterminado no se puede eliminar", + "configSetKeepOne": "Conserva al menos un conjunto de configuración", + "diagnostic": { + "runDiagnostics": "Diagnosticar conexión", + "runQuickDiagnostics": "Diagnóstico rápido", + "runDeepDiagnostics": "Comprobación de inferencia profunda", + "running": "Diagnosticando...", + "step": { + "dns": "Resolución DNS", + "tcp": "Conexión TCP", + "tls": "Negociación TLS", + "auth": "Autenticación de la API", + "model": "Verificación del modelo" + }, + "status": { + "pending": "Pendiente", + "running": "Comprobando...", + "ok": "Correcto", + "fail": "Fallido", + "skip": "Omitido" + }, + "overallSuccess": "Todas las comprobaciones se superaron ({{ms}}ms)", + "overallFail": "El diagnóstico falló en {{step}}", + "advisory": { + "not_deep_verified": "El endpoint es accesible y el modelo seleccionado aparece en la lista, pero todavía no se ha realizado ninguna inferencia en vivo.", + "model_loading": "El endpoint es accesible, pero es posible que el modelo todavía se esté cargando en memoria." + }, + "latency": "{{ms}}ms", + "fix": { + "dns_resolve_failed": "No se puede resolver el nombre de host {{host}}. Por favor, comprueba si la URL es correcta.", + "tcp_connect_failed": "No se puede conectar a {{host}}. Por favor, comprueba tu red o la configuración del firewall.", + "tls_handshake_failed": "Falló la negociación TLS. Esto puede deberse a un problema con el certificado o a la interferencia de un proxy.", + "missing_api_key": "Falta la API Key o no es válida. Por favor, comprueba tu clave.", + "auth_invalid_key": "La API Key no es válida o ha caducado. Por favor, comprueba si la clave es correcta.", + "auth_endpoint_not_found": "Endpoint de la API no encontrado. Por favor, comprueba si la Base URL es correcta.", + "auth_request_failed": "La solicitud de autenticación falló. Por favor, comprueba tu configuración.", + "model_network_error": "No se pudo acceder al modelo {{model}}. Comprueba tu red, VPN o la configuración del proxy.", + "model_rate_limited": "El modelo {{model}} tiene actualmente un límite de tasa o está sin cuota. Por favor, inténtalo de nuevo más tarde.", + "model_request_failed": "La solicitud del modelo {{model}} falló del lado del proveedor. Por favor, inténtalo de nuevo más tarde.", + "model_unavailable": "El modelo {{model}} no está disponible. Por favor, verifica el nombre del modelo.", + "ollama_no_models_loaded": "El endpoint es accesible, pero no devolvió ningún modelo. Descarga primero un modelo en Ollama.", + "ollama_model_not_listed": "El modelo {{model}} no está en la lista de modelos del endpoint. Elige un modelo detectado o cambia a la entrada manual.", + "ollama_model_loading": "Es posible que el modelo {{model}} todavía se esté cargando. Vuelve a intentar la comprobación profunda en un momento.", + "model_cold_start": "Es posible que el modelo todavía se esté cargando en la memoria de la GPU/CPU. Los modelos grandes (7B+) pueden tardar de 30 a 120 segundos en el primer uso. Inténtalo de nuevo en breve." + } + } + }, + "window": { + "minimize": "Minimizar", + "maximize": "Maximizar", + "restore": "Restaurar", + "close": "Cerrar" + }, + "sandbox": { + "title": "Entorno de sandbox", + "wslDesc": "Ejecuta comandos en el entorno Linux de WSL2 para un mejor aislamiento y seguridad en Windows.", + "limaDesc": "Ejecuta comandos en la VM de Lima para un mejor aislamiento y seguridad en macOS.", + "nativeDesc": "Los comandos se ejecutan directamente en tu sistema (modo nativo de Linux).", + "enableSandbox": "Activar el modo sandbox", + "comingSoon": "Próximamente — en desarrollo", + "readyStatus": "Sandbox listo y en ejecución", + "notReadyStatus": "Sandbox activado pero no completamente configurado", + "disabledStatus": "Sandbox desactivado: los comandos se ejecutan directamente en el sistema", + "enabledWillSetup": "Sandbox activado. Configurando el entorno...", + "disabled": "Modo sandbox desactivado", + "failedToLoad": "No se pudo cargar el estado del sandbox", + "failedToSave": "No se pudo guardar la configuración del sandbox", + "statusRefreshed": "Estado actualizado", + "checkFailed": "No se pudo comprobar el estado del sandbox", + "environmentStatus": "Estado del entorno", + "checkStatus": "Comprobar estado", + "platform": "Plataforma", + "mode": "Modo", + "status": "Estado", + "native": "Nativo", + "wslAvailable": "WSL2 disponible", + "limaAvailable": "Lima disponible", + "vmCreated": "Instancia de VM creada", + "vmRunning": "VM en ejecución", + "wslNotInstalled": "WSL2 no está instalado", + "wslInstallHint": "Instala WSL2 para un mejor aislamiento. Ejecuta este comando en PowerShell como administrador:", + "limaNotInstalled": "Lima no está instalado", + "limaInstallHint": "Instala Lima para un mejor aislamiento. Ejecuta este comando en el Terminal:", + "linuxNative": "Linux ejecuta los comandos de forma nativa sin sandboxing adicional.", + "nodeInstalled": "Node.js se instaló correctamente", + "nodeInstallFailed": "No se pudo instalar Node.js", + "pythonInstalled": "Python se instaló correctamente", + "pythonInstallFailed": "No se pudo instalar Python", + "start": "Iniciar", + "stop": "Detener", + "limaStarted": "VM de Lima iniciada", + "limaStartFailed": "No se pudo iniciar la VM de Lima", + "limaStopped": "VM de Lima detenida", + "limaStopFailed": "No se pudo detener la VM de Lima", + "settingUp": "Configurando...", + "retrySetup": "Reintentar configuración", + "setupComplete": "Configuración del sandbox completada", + "setupFailed": "La configuración del sandbox falló", + "helpText1": "El sandbox proporciona un entorno aislado para ejecutar comandos de forma segura.", + "helpText2": "Se requiere WSL2 (Windows) o la VM de Lima (macOS) para el soporte completo del sandbox.", + "setupTitle": "Configurando el sandbox", + "setupSubtitle": "La primera ejecución requiere configurar un entorno de ejecución seguro.", + "progressLabel": "Progreso", + "continuingNative": "Continuando con el modo de ejecución nativo.", + "retryLima": "Intentar reiniciar Lima", + "retryingLima": "Reiniciando Lima...", + "continueNative": "Continuar con el modo nativo", + "configuredSuccess": "Sandbox configurado. El código ya puede ejecutarse de forma segura.", + "nativeFallbackSuccess": "Usando el entorno nativo del sistema para la ejecución de comandos.", + "footerWsl": "Sandbox WSL2", + "footerLima": "Sandbox Lima", + "footerNative": "Modo nativo", + "configuring": "Configurando...", + "syncFiles_one": "{{count}} archivo", + "syncFiles_other": "{{count}} archivos", + "syncExplanation": "Sincronizando los archivos del proyecto al sandbox aislado para una ejecución segura del código.", + "syncFirst": "La primera sincronización es más lenta,", + "syncFollowup": "las sincronizaciones incrementales serán más rápidas.", + "checkingWsl": "Comprobando el entorno WSL2...", + "checkingLima": "Comprobando el entorno Lima...", + "creatingLima": "Creando la VM de Lima...", + "startingLima": "Iniciando la VM de Lima...", + "installingNode": "Instalando Node.js...", + "installingPython": "Instalando Python...", + "installingPip": "Instalando pip...", + "installingDeps": "Instalando las dependencias de las habilidades...", + "setupFailedMessage": "La configuración del sandbox falló", + "sandboxDisabledMessage": "Sandbox desactivado", + "nativeModeMessage": "Usando el modo de ejecución nativo", + "wslNotDetectedMessage": "WSL2 no detectado, usando el modo nativo", + "limaNotDetectedMessage": "Lima no detectado, usando el modo nativo", + "nodeInstallFailedMessage": "La instalación de Node.js falló", + "wslReadyMessage": "Sandbox WSL2 listo", + "limaReadyMessage": "Sandbox Lima listo", + "limaCreateFailedMessage": "La creación de la VM de Lima falló", + "limaStartFailedMessage": "El arranque de la VM de Lima falló", + "setupDetailSandboxDisabled": "Usando el modo de ejecución nativo (sandbox desactivado en la configuración)", + "setupDetailLinuxNative": "Linux ejecuta los comandos directamente", + "setupDetailInstallWsl": "Instala WSL2 para un mejor aislamiento del sandbox", + "setupDetailInstallNodeWsl": "Por favor, instala Node.js manualmente en WSL", + "setupDetailInstallNodeWslRuntime": "Instalando el entorno de ejecución de Node.js en {{distro}}", + "setupDetailInstallPythonWslRuntime": "Instalando el entorno de ejecución de Python en {{distro}}", + "setupDetailInstallPipWslRuntime": "Instalando el gestor de paquetes de Python en {{distro}}", + "setupDetailInstallDeps": "Instalando markitdown, pypdf, pdfplumber para las habilidades de PDF/PPTX", + "setupDetailInstallLima": "Instala Lima para un mejor aislamiento del sandbox (brew install lima)", + "setupDetailCreateLima": "La primera ejecución requiere descargar la imagen y puede tardar unos minutos", + "setupDetailStartLima": "El arranque de la VM puede tardar unos minutos", + "setupDetailInstallNodeLima": "Instalando el entorno de ejecución de Node.js en la VM de Lima", + "setupDetailInstallPythonLima": "Instalando el entorno de ejecución de Python en la VM de Lima", + "syncingFilesMessage": "Sincronizando archivos al sandbox...", + "syncingSkillsMessage": "Configurando las habilidades...", + "syncReadyMessage": "Sandbox listo", + "syncFailedMessage": "La sincronización del sandbox falló", + "syncDetailWsl": "Copiando los archivos del proyecto al entorno WSL aislado", + "syncDetailLima": "Copiando los archivos del proyecto al entorno Lima aislado", + "syncDetailSkills": "Copiando las habilidades integradas al sandbox", + "syncDetailFallback": "Recurriendo al modo de acceso directo (menos seguro)", + "syncDetailCompleted": "Se sincronizaron {{count}} archivos" + }, + "mcp": { + "noConnectors": "No hay conectores configurados", + "addConnector": "Añade un conector para activar las herramientas MCP", + "toolsAvailable": "{{count}} herramienta disponible", + "toolsAvailable_plural": "{{count}} herramientas disponibles", + "connected": "Conectado", + "notConnected": "No conectado", + "connecting": "Conectando...", + "failed": "La conexión falló", + "chromeHint": "Se abrirá automáticamente una nueva ventana de depuración de Chrome si el puerto no está disponible", + "quickAddPresets": "Preajustes de adición rápida", + "show": "Mostrar", + "hide": "Ocultar", + "addCustomConnector": "Añadir conector personalizado", + "configure": "Configurar", + "added": "Añadido", + "requiresToken": "Requiere token", + "editConnector": "Editar conector", + "addConnectorTitle": "Añadir conector personalizado", + "name": "Nombre", + "namePlaceholder": "Servidor MCP de Chrome", + "type": "Tipo", + "typeStdioLocal": "STDIO (local)", + "typeSseRemote": "SSE (remoto)", + "typeStreamableHttp": "HTTP (transmisible)", + "command": "Comando", + "commandPlaceholder": "npx", + "arguments": "Argumentos", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Argumentos separados por espacios", + "url": "URL", + "enableConnector": "Activar este conector", + "presetAlreadyConfigured": "El conector \"{{name}}\" ya está configurado", + "envValuePlaceholder": "Introduce el valor", + "removeVar": "Eliminar", + "loadServersFailed": "No se pudieron cargar los conectores", + "saveServerFailed": "No se pudo guardar el conector", + "deleteServerFailed": "No se pudo eliminar el conector", + "deleteConnectorConfirm": "¿Eliminar este conector?", + "commandRequired": "Se requiere el comando", + "urlRequired": "Se requiere la URL", + "toolCount": "{{count}} herramientas", + "callCount": "{{count}} llamadas" + }, + "credentials": { + "envVars": "Variables de entorno", + "enterEnvVar": "Introduce el nombre de la variable de entorno (p. ej., NOTION_TOKEN):", + "usedForTokens": "Se usa para tokens y secretos (p. ej., NOTION_TOKEN)", + "noEnvVars": "No hay variables de entorno configuradas" + }, + "skills": { + "storagePathHint": "Elige dónde residen las habilidades personalizadas y cómo las actualiza la aplicación.", + "builtinSkillsDesc": "Las habilidades integradas se incluyen con la aplicación y se pueden activar o desactivar cuando sea necesario.", + "pluginsTitle": "Plugins e importaciones", + "pluginsDesc": "Explora los plugins del marketplace o importa habilidades personalizadas desde una carpeta local.", + "title": "📦 Habilidades", + "description": "Las habilidades amplían las capacidades de Claude con conocimiento y herramientas especializadas.", + "builtinSkills": "Habilidades integradas", + "customSkills": "Habilidades personalizadas", + "noCustomSkills": "No hay habilidades personalizadas instaladas", + "installSkillsDesc": "Instala habilidades para ampliar las capacidades de Claude", + "browsePlugins": "Explorar plugins", + "pluginListTitle": "Explorar el Marketplace de plugins de Claude", + "pluginSkillCount": "Habilidades instalables: {{count}}", + "pluginComponents": "Componentes: habilidades {{skills}} · comandos {{commands}} · agentes {{agents}} · hooks {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Los detalles de los componentes estarán disponibles tras la instalación.", + "pluginInstall": "Instalar", + "pluginInstalled": "Instalado", + "pluginInstallSuccess": "El plugin \"{{name}}\" se instaló correctamente", + "pluginInstallFailed": "No se pudo instalar el plugin", + "pluginNoSkills": "Este plugin no tiene habilidades instalables en V1", + "pluginNoComponents": "Este plugin no tiene componentes cargables", + "pluginManage": "Gestionar", + "pluginEnable": "Activar", + "pluginDisable": "Desactivar", + "pluginUninstall": "¿Desinstalar el plugin \"{{name}}\"?", + "pluginManageUninstall": "Desinstalar", + "pluginUninstalled": "El plugin \"{{name}}\" se desinstaló", + "pluginComponentHooksDisabledByDefault": "Este plugin incluye hooks. Los hooks están desactivados de forma predeterminada y se pueden activar en la configuración de gestión tras la instalación.", + "pluginComponentMcpDisabledByDefault": "Este plugin incluye MCP. MCP está desactivado de forma predeterminada y se puede activar en la configuración de gestión tras la instalación.", + "pluginAppliedInRuntime": "La configuración del plugin está actualmente aplicada en tiempo de ejecución", + "pluginDisabled": "El plugin está actualmente desactivado", + "noPluginsFound": "No hay plugins disponibles", + "storagePathTitle": "Directorio de almacenamiento de habilidades", + "storagePathUnavailable": "Ruta de almacenamiento no disponible", + "selectStoragePath": "Seleccionar directorio", + "openStoragePath": "Abrir directorio", + "refreshSkills": "Actualizar habilidades", + "storagePathUpdated": "Almacenamiento actualizado. Se migraron {{migrated}} habilidades, se omitieron {{skipped}}", + "storagePathUpdateFailed": "No se pudo actualizar la ruta de almacenamiento de habilidades", + "storagePathOpenFailed": "No se pudo abrir la ruta de almacenamiento de habilidades", + "storagePathFallback": "Se recurrió al directorio de habilidades predeterminado. Por favor, verifica la ruta que configuraste.", + "storageWatcherError": "Error del observador del directorio de habilidades: {{message}} (recurso alternativo de sondeo activado).", + "installSkillFromFolder": "Instalar habilidad desde una carpeta", + "deleteSkill": "¿Eliminar la habilidad \"{{name}}\"?", + "failedToLoad": "No se pudieron cargar las habilidades", + "failedToInstall": "No se pudo instalar la habilidad", + "failedToDelete": "No se pudo eliminar la habilidad", + "failedToToggle": "No se pudo activar o desactivar la habilidad" + }, + "logs": { + "actionsTitle": "Acciones de registro", + "title": "Registros de la aplicación", + "description": "Visualiza y exporta paquetes de diagnóstico para la depuración. Los registros rotan automáticamente al superar los 10MB, y las exportaciones también incluyen resúmenes recientes de sesiones y errores.", + "inventoryDescription": "Inventario de registros actual y espacio de almacenamiento ocupado.", + "recentDescription": "Registros recientes de la aplicación disponibles para su inspección. Aún puedes exportar un paquete de diagnóstico incluso cuando todavía no existe ningún archivo de registro.", + "directoryDescription": "Ubicación actual en disco de los registros de la aplicación.", + "actionsDescription": "Exporta un paquete de diagnóstico, muestra el directorio de registros o borra los archivos de registro.", + "enableDevLogs": "Activar los registros de desarrollador", + "enableDevLogsDesc": "Registra logs detallados para la depuración. Desactívalo para reducir el uso del disco.", + "devLogsEnabled": "Registros de desarrollador activados", + "devLogsDisabled": "Registros de desarrollador desactivados", + "toggleFailed": "No se pudieron activar o desactivar los registros de desarrollador", + "logFiles": "Archivos de registro", + "totalSize": "Tamaño total", + "noLogFiles": "No se encontraron archivos de registro", + "logsDirectory": "Directorio de registros:", + "exportZip": "Exportar diagnóstico", + "openFolder": "Abrir carpeta", + "clearAll": "Borrar todo", + "clearConfirm": "¿Estás seguro de que quieres borrar todos los archivos de registro? Esta acción no se puede deshacer.", + "exportSuccess": "Diagnóstico exportado correctamente a {{path}}", + "clearSuccess": "Se borraron {{count}} archivo(s) de registro", + "exportFailed": "No se pudieron exportar los registros", + "clearFailed": "No se pudieron borrar los registros", + "helpText1": "El paquete de diagnóstico exportado incluye los registros de la aplicación, una instantánea redactada del tiempo de ejecución y resúmenes de sesiones/errores solo con metadatos, sin el cuerpo de los mensajes de forma predeterminada.", + "helpText2": "Compartir ese paquete suele permitirnos acotar los problemas mucho más rápido, ya provengan de la interfaz, de la ejecución de herramientas o del entorno local." + }, + "sidebar": { + "recents": "Recientes", + "expandToView": "Expandir para ver las tareas", + "noTasks": "Aún no hay tareas", + "noTasksHint": "Inicia un nuevo chat para empezar a construir, investigar o editar archivos.", + "search": "Buscar conversaciones...", + "deleteAll": "Eliminar todas las conversaciones", + "localTasks": "Estas tareas se ejecutan localmente y no se sincronizan entre dispositivos.", + "apiConfigured": "API configurada", + "apiNotConfigured": "API no configurada", + "user": "Usuario", + "newTask": "Nuevo chat", + "newTaskHint": "Inicia una conversación nueva", + "today": "Hoy", + "yesterday": "Ayer", + "previousWeek": "7 días anteriores", + "older": "Anteriores", + "settings": "Configuración", + "themeToggle": "Cambiar tema", + "manage": "Gestionar", + "selectAll": "Seleccionar todo", + "deselectAll": "Deseleccionar todo", + "nSelected": "{{count}} seleccionados", + "batchDeleteConfirm": "¿Eliminar {{count}} conversaciones? Esto no se puede deshacer.", + "cancel": "Cancelar", + "confirmDelete": "Eliminar" + }, + "chat": { + "sendMessage": "Enviar mensaje", + "stop": "Detener", + "processing": "Procesando...", + "typeMessage": "Escribe un mensaje...", + "loadingConversation": "Cargando conversación...", + "startConversation": "Inicia la conversación", + "startFailed": "No se pudo iniciar la sesión. Por favor, inténtalo de nuevo.", + "disclaimer": "Open Cowork funciona con IA y puede cometer errores. Por favor, verifica las respuestas.", + "noModel": "Sin modelo", + "connectorCount_one": "{{count}} conector", + "connectorCount_other": "{{count}} conectores" + }, + "context": { + "progress": "Progreso", + "artifacts": "Artefactos", + "context": "Contexto", + "workingDirectory": "Directorio de trabajo", + "toolsUsed": "Herramientas usadas", + "mcpConnectors": "Conectores MCP", + "copied": "¡Copiado!", + "noToolsUsedYet": "Aún no se han usado herramientas", + "toolsUsedLabel": "Herramientas usadas:", + "noFolderSelected": "No hay ninguna carpeta seleccionada", + "expandPanel": "Expandir panel", + "collapsePanel": "Contraer panel", + "queuedMessages": "Mensajes en cola: {{count}}", + "stepsWillShow": "Los pasos se mostrarán a medida que la tarea avance.", + "noArtifactsYet": "Aún no hay artefactos", + "revealFailed": "No se pudo localizar el archivo. Por favor, comprueba si la ruta existe.", + "fileCreated": "Archivo creado", + "callNumber": "Llamada n.º {{number}}", + "input": "Entrada:", + "output": "Salida:", + "tokenUsage": "Uso de tokens", + "inputTokens": "Entrada", + "outputTokens": "Salida", + "totalTokens": "Total", + "changeDir": "Cambiar de directorio", + "changeDirFailed": "No se pudo cambiar de directorio", + "copyPath": "Copiar ruta", + "openInFileManager": "Abrir en el gestor de archivos", + "contextUsage": "Uso del contexto", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Solicitud", + "queued": "En cola", + "cancelled": "Cancelado", + "emptyMessage": "Mensaje vacío", + "emptyText": "(texto vacío)", + "copyMessage": "Copiar mensaje", + "revealInFolder": "Mostrar en la carpeta", + "pastedContentAlt": "Contenido pegado", + "taskProgress": "Progreso de la tarea", + "noQuestions": "Sin preguntas", + "question": "Pregunta", + "thinking": "Pensando", + "executionTime": "Tiempo de ejecución: {{time}}" + }, + "schedule": { + "createTitle": "Crear programación", + "editTitle": "Editar programación", + "autoTitleLabel": "Título automático (se usa para identificar las sesiones)", + "autoTitleChangedHint": "La instrucción cambió. El título se regenerará tras guardar.", + "autoTitleUnchangedHint": "Si la instrucción permanece igual, se conservará el título existente.", + "autoTitleEditingChanged": "Tras guardar, el título se regenerará a partir de la instrucción con un prefijo [Tarea programada].", + "autoTitleEditingUnchanged": "Tras guardar, el título se generará con un prefijo [Tarea programada].", + "autoTitleCreating": "Tras guardar, el título se generará con un prefijo [Tarea programada] y un resumen del modelo.", + "promptPlaceholder": "Instrucción que se ejecutará automáticamente a la hora programada", + "cwdPlaceholder": "Directorio de trabajo (de forma predeterminada, el espacio de trabajo actual)", + "executionTime": "Momento de ejecución", + "executionTimeHint": "Las nuevas programaciones prefieren el horario multifranja; las reglas de intervalo heredadas todavía se pueden editar.", + "enabled": "Activada", + "mode": "Modo de ejecución", + "weekday": "Días de la semana", + "weekdayPlaceholder": "Selecciona los días de la semana", + "times": "Franjas horarias", + "timePlaceholder": "Selecciona las horas", + "legacyIntervalNotice": "Esta tarea proviene de una regla de intervalo fijo heredada y conservará ese modo al guardarse.", + "onceTimeLabel": "Elige la hora de ejecución única", + "legacyStartTimeLabel": "Elige la hora de inicio para la regla de intervalo heredada", + "dailyHint": "Se ejecuta automáticamente a estas horas todos los días.", + "weeklyHint": "Se ejecuta automáticamente en los días de la semana y las franjas horarias seleccionadas.", + "saveChanges": "Guardar cambios", + "createTask": "Crear tarea", + "cancelEdit": "Cancelar edición", + "listHint": "Desactivarla solo bloquea las futuras ejecuciones automáticas. Las sesiones ya iniciadas deben detenerse manualmente desde la lista de sesiones.", + "empty": "Aún no hay programaciones", + "loadFailed": "No se pudieron cargar las programaciones", + "promptRequired": "Introduce la instrucción que se ejecutará", + "dailyTimesRequired": "Selecciona al menos una franja horaria diaria", + "weeklyTimesRequired": "Selecciona al menos una franja horaria semanal", + "weekdayRequired": "Selecciona al menos un día de la semana", + "invalidTime": "Introduce una hora de ejecución válida", + "nextRunCalculationFailed": "La regla actual no puede calcular la próxima hora de ejecución", + "futureTimeRequired": "La hora de ejecución debe ser posterior a la actual. Usa Ejecutar ahora si quieres activarla de inmediato.", + "taskMissing": "La tarea ya no existe o fue eliminada", + "updated": "Programación actualizada", + "created": "Programación creada", + "saveFailed": "No se pudo guardar la programación", + "toggleFailed": "No se pudo cambiar el estado de la programación", + "runNowSuccess": "Se activó una ejecución inmediata", + "runNowFailed": "No se pudo ejecutar de inmediato", + "noSessionToStop": "Esta tarea no tiene ninguna sesión de ejecución que detener", + "sessionNotRunning": "Esta tarea no tiene actualmente una sesión en ejecución", + "stopSent": "Comando de detención enviado", + "stopFailed": "No se pudo detener la ejecución", + "deleteConfirm": "¿Eliminar la programación \"{{title}}\"?", + "deleted": "Programación eliminada", + "deleteFailed": "No se pudo eliminar la programación", + "statusRunning": "En ejecución", + "statusFinished": "Finalizada", + "statusUnknown": "Desconocido", + "statusNone": "Ninguno", + "taskEnabled": "Activada", + "taskDisabled": "Desactivada", + "nextRun": "Próxima ejecución: {{value}}", + "nextRunNone": "Próxima ejecución: Ninguna", + "strategy": "Regla de programación: {{value}}", + "lastRun": "Última ejecución: {{value}}", + "lastRunNever": "Última ejecución: Aún no se ha ejecutado", + "recentSession": "Última sesión: {{value}}", + "sessionStatus": "Estado de la sesión: {{value}}", + "cwd": "Directorio: {{value}}", + "lastError": "Último error: {{value}}", + "disable": "Desactivar", + "enable": "Activar", + "runNow": "Ejecutar ahora", + "stopExecution": "Detener ejecución", + "edit": "Editar", + "delete": "Eliminar", + "stopRunTitleActive": "Detén la última sesión de ejecución de esta tarea", + "stopRunTitleIdle": "Esta tarea no tiene actualmente una sesión en ejecución", + "repeatEveryMinute_one": "Cada {{count}} minuto", + "repeatEveryMinute_other": "Cada {{count}} minutos", + "repeatEveryHour_one": "Cada {{count}} hora", + "repeatEveryHour_other": "Cada {{count}} horas", + "repeatEveryDay_one": "Cada {{count}} día", + "repeatEveryDay_other": "Cada {{count}} días", + "ruleDaily": "Todos los días a las {{times}}", + "ruleWeekly": "Cada semana los {{weekdays}} a las {{times}}", + "ruleOnce": "Una sola vez", + "previewNextRun": "Próxima ejecución prevista: {{value}}", + "previewSelectValidTime": "Elige una hora de ejecución válida", + "previewSelectAtLeastOne": "Elige al menos una franja horaria válida", + "previewAutoFind": "El sistema elegirá automáticamente la próxima hora de ejecución: {{value}}", + "weekdayMonday": "Lun", + "weekdayTuesday": "Mar", + "weekdayWednesday": "Mié", + "weekdayThursday": "Jue", + "weekdayFriday": "Vie", + "weekdaySaturday": "Sáb", + "weekdaySunday": "Dom", + "modeOnce": "Una sola vez", + "modeDaily": "Diaria", + "modeWeekly": "Semanal", + "repeatUnitMinute": "Minuto", + "repeatUnitHour": "Hora", + "repeatUnitDay": "Día", + "unknownWeekday": "Desconocido", + "pickerEditTimes": "Editar franjas horarias", + "pickerAnyHHmm": "Puedes introducir cualquier valor `HH:mm`", + "pickerSelectedCount_one": "{{count}} seleccionada", + "pickerSelectedCount_other": "{{count}} seleccionadas", + "pickerAdd": "Añadir", + "pickerSelectedTimes": "Horas seleccionadas", + "pickerNone": "Aún no se ha seleccionado ninguna franja horaria", + "pickerSuggestions": "Sugerencias" + }, + "remote": { + "title": "Control remoto", + "statusRunning": "En ejecución. Disponible a través de Feishu.", + "statusStopped": "Detenido", + "startService": "Iniciar servicio", + "stopService": "Detener servicio", + "activeSessions": "Sesiones activas", + "authorizedUsers": "Usuarios autorizados", + "pendingApprovals": "Aprobaciones pendientes", + "pairingRequests": "Solicitudes de emparejamiento pendientes de aprobación", + "unknownUser": "Usuario desconocido", + "pairingCode": "Código de emparejamiento", + "approve": "Aprobar", + "stepFeishu": "Configuración de Feishu", + "stepConnection": "Conexión", + "stepAdvanced": "Avanzado", + "feishuTitle": "Configuración del bot de Feishu", + "feishuDesc": "Crea una app en Feishu Open Platform y luego rellena las credenciales aquí.", + "dmPolicy": "Política de autorización de mensajes directos", + "policyPairing": "Verificación por emparejamiento", + "policyPairingDesc": "Los usuarios deben introducir un código de emparejamiento.", + "policyAllowlist": "Lista de permitidos", + "policyAllowlistDesc": "Solo se permiten usuarios específicos.", + "policyOpen": "Acceso abierto", + "policyOpenDesc": "Cualquiera puede usar el bot.", + "openFeishu": "Abrir Feishu Open Platform", + "slackTitle": "Configuración del bot de Slack", + "slackDesc": "Crea una app de Slack, instálala en tu workspace y luego rellena las credenciales aquí.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (para el modo Socket)", + "slackSocketMode": "Modo Socket", + "slackSocketModeDesc": "Conéctate hacia Slack. No se requiere IP pública.", + "openSlack": "Abrir Slack API", + "connectionTitle": "Modo de conexión", + "connectionDesc": "Elige cómo se comunican los servidores de Feishu con tu ordenador.", + "longConnection": "Modo de conexión persistente", + "recommended": "Recomendado", + "longConnectionDesc": "La app se conecta hacia los servidores de Feishu. No se requiere IP pública ni ngrok.", + "noPublicInternet": "Sin exposición a internet pública", + "outOfBox": "Funciona desde el primer momento", + "stableReliable": "Estable y fiable", + "webhookMode": "Modo webhook", + "webhookDesc": "Feishu envía los mensajes a tu servidor. Se requiere una dirección accesible públicamente.", + "localWebhookUrl": "URL del webhook local", + "useBuiltInNgrok": "Usar el ngrok integrado", + "ngrokHelpPrefix": "Consigue uno gratis en", + "ngrokHelpSuffix": "", + "tunnelConnected": "Túnel conectado", + "longConnectionHint": "En Feishu Open Platform, ve a Events & Callbacks > Event Configuration y cambia el modo de suscripción a conexión persistente.", + "advancedTitle": "Configuración avanzada", + "advancedDesc": "Personaliza el comportamiento del control remoto.", + "defaultWorkingDirectory": "Directorio de trabajo predeterminado", + "defaultWorkingDirectoryPlaceholder": "Por ejemplo: C:\\Users\\tu-nombre\\Projects", + "defaultWorkingDirectoryHint": "Este es el directorio predeterminado para los comandos de IA. También puedes anularlo en un mensaje con `[cwd:path]`.", + "gatewayPort": "Puerto del servicio", + "autoApproveSafeTools": "Aprobar automáticamente las herramientas seguras", + "autoApproveSafeToolsDesc": "Permite automáticamente las herramientas seguras, como las lecturas de archivos y las operaciones del navegador.", + "saveConfig": "Guardar configuración", + "authorizedUsersTitle": "Usuarios autorizados ({{count}})", + "revokeAccess": "Revocar acceso", + "quickStart": "Inicio rápido", + "quickStartStep1": "Crea una app en Feishu Open Platform y añade la capacidad de Bot.", + "quickStartStep2": "Copia el App ID y el App Secret en los campos de arriba.", + "quickStartStep3": "Activa estos permisos en la configuración de permisos:", + "quickStartStep4": "En la Event Configuration de Feishu, elige el modo de eventos de conexión persistente.", + "quickStartStep5Prefix": "Suscríbete al evento", + "quickStartStep5Suffix": ".", + "quickStartStep6": "Publica la app y luego haz clic en Iniciar servicio.", + "started": "Control remoto iniciado", + "stopped": "Control remoto detenido", + "actionFailed": "La operación falló", + "configSaved": "Configuración guardada", + "saveFailed": "No se pudo guardar la configuración", + "pairingApproved": "Emparejamiento aprobado", + "approveFailed": "No se pudo aprobar el emparejamiento", + "reject": "Rechazar", + "pairingRejected": "Emparejamiento rechazado", + "rejectFailed": "No se pudo rechazar el emparejamiento", + "pairingGuideTitle": "Guía de emparejamiento", + "pairingGuideStep1": "Abre Feishu y encuentra el bot", + "pairingGuideStep2": "Envía cualquier mensaje para iniciar el emparejamiento", + "pairingGuideStep3": "Aprueba la solicitud de emparejamiento a continuación", + "pairingGuideStep4": "Listo: el usuario ya puede chatear con el bot", + "waitingForPairing": "Esperando a que los usuarios inicien el emparejamiento...", + "expiresIn": "Caduca en {{time}}", + "userRemoved": "Usuario eliminado", + "revokeFailed": "No se pudo eliminar al usuario", + "copied": "Copiado" + }, + "time": { + "now": "ahora" + }, + "permission": { + "permissionRequired": "Permiso requerido", + "tool": "Herramienta:", + "input": "Entrada:", + "warning": "Esta acción puede modificar tu sistema. Revísala con cuidado.", + "deny": "Denegar", + "allow": "Permitir", + "alwaysAllow": "Permitir siempre esta herramienta", + "useTool": "Usar la herramienta {{toolName}}", + "toolDescriptions": { + "write": "Escribir en archivos de tu sistema", + "edit": "Editar archivos existentes de tu sistema", + "bash": "Ejecutar comandos de shell", + "webFetch": "Obtener datos de la web", + "webSearch": "Buscar en la web", + "read_file": "Leer archivos del espacio de trabajo", + "write_file": "Escribir archivos en el espacio de trabajo", + "edit_file": "Editar archivos del espacio de trabajo", + "list_directory": "Listar el contenido de directorios del espacio de trabajo", + "execute_command": "Ejecutar comandos de shell en el espacio de trabajo", + "glob": "Buscar archivos por patrón", + "grep": "Buscar en el contenido de los archivos" + } + }, + "sudo": { + "title": "Se requiere permiso de administrador", + "description": "El siguiente comando requiere privilegios de administrador:", + "passwordLabel": "Contraseña", + "passwordPlaceholder": "Introduce tu contraseña", + "cancel": "Cancelar", + "execute": "Ejecutar", + "warning": "Tu contraseña solo se usará para este comando y no se almacenará." + }, + "errorBoundary": { + "title": "Algo salió mal", + "description": "Se produjo un error inesperado en la aplicación. Puedes intentar recuperarte haciendo clic en el botón de abajo.", + "details": "Detalles del error", + "retry": "Intentar de nuevo" + } +} diff --git a/src/renderer/i18n/locales/fr.json b/src/renderer/i18n/locales/fr.json new file mode 100644 index 00000000..3d38d6f2 --- /dev/null +++ b/src/renderer/i18n/locales/fr.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Enregistrer", + "cancel": "Annuler", + "delete": "Supprimer", + "edit": "Modifier", + "add": "Ajouter", + "close": "Fermer", + "loading": "Chargement...", + "error": "Erreur", + "success": "Succès", + "saving": "Enregistrement...", + "saved": "Enregistré avec succès !", + "sure": "Êtes-vous sûr ?", + "yes": "Oui", + "no": "Non", + "enable": "Activer", + "disable": "Désactiver", + "install": "Installer", + "optional": "facultatif", + "appLogoAlt": "Logo Open Cowork", + "pastedImageAlt": "Collé {{index}}" + }, + "welcome": { + "title": "Comment puis-je vous aider aujourd'hui ?", + "placeholder": "Décrivez ce que vous souhaitez faire...", + "createFile": "Créer un fichier", + "crunchData": "Analyser des données", + "organizeFiles": "Organiser des fichiers", + "checkEmails": "Consulter les e-mails", + "searchPapers": "Rechercher et résumer des articles", + "summarizePapersToNotion": "Résumer des articles dans Notion", + "selectWorkingFolder": "Sélectionner le dossier de travail (requis)", + "selectWorkingFolderFailed": "Échec de la sélection du dossier de travail", + "attachFiles": "Joindre des fichiers", + "letsGo": "C'est parti", + "starting": "Démarrage...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Logo Open Cowork", + "pastedImageAlt": "Collé {{index}}", + "quickPromptCreate": "Créez un nouveau fichier pour moi", + "quickPromptCrunch": "Aidez-moi à analyser et traiter des données", + "quickPromptOrganize": "Aidez-moi à organiser mes fichiers et dossiers", + "quickPromptEmail": "Aidez-moi à utiliser Chrome pour résumer les nouveaux e-mails des trois derniers jours dans mon Gmail et ma boîte NetEase Mail. Notez que les comptes enregistrés incluent déjà le suffixe complet de l'adresse e-mail. Par conséquent, si le suffixe de l'e-mail est déjà pré-rempli sur la page web ou dans une capture d'écran, ne le saisissez pas à nouveau, afin d'éviter un échec de connexion. Vérifiez aussi d'abord si les identifiants du compte correspondant sont enregistrés. Si le nom d'utilisateur ou le mot de passe d'un service de messagerie donné n'est pas enregistré, vous pouvez ignorer ce compte e-mail.", + "quickPromptPapers": "Veuillez m'aider à utiliser Chrome pour rechercher et résumer des articles liés à [Agent] sur deux jours.\nSites sources :\n1. HuggingFace Daily Papers. Veuillez inclure les informations de vote et un bref résumé. Notez qu'il peut ne pas y avoir d'articles le week-end, vous devrez donc peut-être consulter les articles des jours précédents. Mais assurez-vous d'avoir un total de deux jours.", + "quickPromptNotion": "Aidez-moi à rechercher trois articles de synthèse représentatifs liés aux agents, et ajoutez-les sous une page Notion intitulée \"Agent Survey\". Pour chaque article, incluez le titre, les auteurs, le lieu/l'année de publication, et un bref résumé des principales contributions.", + "apiNotConfigured": "L'API n'est pas encore configurée. Veuillez aller dans les Paramètres pour configurer votre fournisseur d'API et votre clé.", + "goToSettings": "Aller aux paramètres" + }, + "settings": { + "title": "Paramètres", + "apiSettings": "Paramètres de l'API", + "apiSettingsDesc": "Configurer le fournisseur d'API et la clé", + "sandbox": "Bac à sable", + "sandboxDesc": "Environnement d'exécution isolé", + "connectors": "Connecteurs MCP", + "connectorsDesc": "Intégrations de navigateur et d'outils", + "skills": "Compétences", + "skillsDesc": "Gérer les compétences personnalisées", + "memory": "Mémoire", + "memoryDesc": "Gérer la mémoire à long terme et l'expérience de l'espace de travail", + "schedule": "Planifications", + "scheduleDesc": "Automatisation de prompts façon alarme", + "remote": "Contrôle à distance", + "remoteDesc": "Utiliser Open Cowork depuis Feishu et d'autres canaux", + "logs": "Journaux", + "logsDesc": "Afficher et exporter les journaux de l'application", + "panelDesc": "Configurez votre espace de travail, vos outils et le comportement de votre compte.", + "general": "Général", + "generalDesc": "Apparence, langue et préférences" + }, + "general": { + "appearance": "Apparence", + "theme": "Thème", + "themeLight": "Clair", + "themeDark": "Sombre", + "themeSystem": "Système", + "language": "Langue" + }, + "memory": { + "title": "Mémoire", + "description": "La mémoire centrale globale stocke les préférences stables, tandis que la mémoire d'expérience de l'espace de travail stocke les connaissances multi-tours propres au projet.", + "enabled": "Activée", + "disabled": "Désactivée", + "toggleHint": "La désactivation arrête l'ingestion future et le rappel automatique, mais conserve les enregistrements existants.", + "enableAction": "Activer la mémoire", + "disableAction": "Désactiver la mémoire", + "enabledStatus": "La mémoire est activée", + "disabledStatus": "La mémoire est désactivée", + "coreCount": "Entrées centrales", + "sessionCount": "Résumés de session", + "chunkCount": "Fragments d'expérience", + "workspaceCount": "Espaces de travail", + "latestIngestion": "Dernière ingestion", + "noIngestionYet": "Aucune ingestion enregistrée pour l'instant", + "health": "État", + "healthy": "Sain, sans échec récent", + "failedSessions": "{{count}} session(s) ont échoué lors de leur dernière ingestion", + "searchTitle": "Rechercher et inspecter", + "searchDescription": "Recherchez dans la mémoire par espace de travail actuel ou globalement, puis inspectez les résumés et les extraits bruts.", + "searchPlaceholder": "Rechercher des préférences, des implémentations précédentes, des décisions...", + "searchAction": "Rechercher", + "scopeWorkspace": "Espace de travail actuel", + "scopeAll": "Toute la mémoire", + "scopeGlobal": "Mémoire centrale uniquement", + "currentWorkspace": "Espace de travail actuel", + "groupCore": "Mémoire centrale", + "groupSessions": "Résumés de session", + "groupChunks": "Correspondances de fragments", + "detailTitle": "Détail", + "noSelection": "Sélectionnez un résultat pour inspecter le résumé complet et l'extrait source.", + "noResults": "Aucun résultat", + "maintenanceTitle": "Maintenance", + "maintenanceDescription": "Reconstruire la mémoire d'expérience de l'espace de travail actuel ou effacer les données enregistrées.", + "rebuildWorkspace": "Reconstruire l'espace de travail actuel", + "clearWorkspace": "Effacer l'espace de travail actuel", + "clearCore": "Effacer la mémoire centrale", + "rebuildConfirm": "Reconstruire la mémoire d'expérience de l'espace de travail actuel ? Cela réanalyse les sessions historiques de cet espace de travail.", + "clearWorkspaceConfirm": "Effacer la mémoire d'expérience de l'espace de travail actuel ? Cette action est irréversible.", + "clearCoreConfirm": "Effacer toute la mémoire centrale globale ? Cette action est irréversible.", + "rebuildSuccess": "Mémoire de l'espace de travail reconstruite", + "clearWorkspaceSuccess": "Mémoire de l'espace de travail effacée", + "clearCoreSuccess": "Mémoire centrale effacée", + "runtimeTitle": "Configuration d'exécution", + "runtimeDescription": "Par défaut, cela hérite de la configuration d'API actuellement active. Ici, vous ajustez principalement la profondeur de navigation, l'embedding et le répertoire sur disque.", + "runtimeSaved": "Configuration d'exécution de la mémoire enregistrée", + "saveRuntime": "Enregistrer la configuration d'exécution", + "storageRoot": "Racine de stockage", + "noWorkspace": "Aucun espace de travail pour l'instant", + "maxNavSteps": "Étapes de navigation", + "ingestionConcurrency": "Concurrence de reconstruction", + "useEmbedding": "Activer la récupération par embedding", + "evalEnabled": "Activer l'évaluation par modèle réel", + "evalArtifactsRoot": "Répertoire des artefacts d'évaluation", + "evalMaxRounds": "Tours d'évaluation", + "promptIterationRounds": "Tours d'itération de prompt", + "llmConfig": "LLM de la mémoire", + "embeddingConfig": "Embedding", + "inheritActive": "Hériter de l'API active", + "modelOverride": "Remplacement du modèle", + "baseUrlOverride": "Remplacement de la Base URL", + "apiKeyOverride": "Remplacement de l'API Key", + "allSources": "Toutes les sources", + "groupRawSessions": "Sessions brutes", + "sourceFile": "Fichier source", + "inspectSession": "Inspecter la mémoire de session", + "inspectSessionHint": "Sélectionnez une session ou un fragment dans les résultats ci-dessus pour l'inspecter.", + "revealInFinder": "Afficher dans le Finder", + "rebuildAll": "Reconstruire toute la mémoire", + "rebuildAllConfirm": "Cela va effacer et reconstruire toute la mémoire. Continuer ?", + "rebuildAllSuccess": "Toute la mémoire reconstruite : {{sessionCount}} session(s), {{workspaceCount}} espace(s) de travail source", + "filesTitle": "Visionneuse de fichiers bruts", + "filesDescription": "Afficher les artefacts core / unified experience / session_state / eval exactement tels qu'ils sont écrits sur le disque.", + "fileList": "Liste de fichiers", + "refreshFiles": "Actualiser", + "noFiles": "Aucun fichier de mémoire pour l'instant", + "fileContent": "Contenu du fichier", + "emptyFile": "Le fichier est vide", + "selectFileHint": "Sélectionnez un fichier à gauche pour afficher son JSON brut." + }, + "language": { + "english": "Anglais", + "chinese": "Chinois", + "selectLanguage": "Sélectionner la langue", + "currentLanguage": "Langue actuelle" + }, + "api": { + "firstRunTitle": "Configurer l'API", + "firstRunSubtitle": "Configurez un fournisseur pour commencer à utiliser Open Cowork", + "settingsTitle": "Paramètres de l'API", + "settingsSubtitle": "Gérer le fournisseur, la clé et les paramètres du modèle", + "configSet": "Jeu de configuration", + "defaultSetTag": "Par défaut", + "saveAs": "Enregistrer sous", + "renameSet": "Renommer", + "deleteSet": "Supprimer le jeu", + "saveAndSwitch": "Enregistrer et changer", + "discardAndSwitch": "Abandonner et changer", + "currentSetSavingHint": "\"Enregistrer les paramètres\" met à jour uniquement le jeu de configuration actuellement sélectionné.", + "unsavedCurrentSetHint": "Le jeu de configuration actuel comporte des modifications non enregistrées.", + "unsavedSwitchPrompt": "Le jeu de configuration actuel comporte des modifications non enregistrées. Choisissez une action avant de passer à \"{{name}}\".", + "configSetSaveAsPrompt": "Saisissez un nom pour le nouveau jeu de configuration", + "configSetRenamePrompt": "Saisissez un nouveau nom pour ce jeu de configuration", + "configSetDeleteConfirm": "Supprimer le jeu de configuration \"{{name}}\" ?", + "configSetNameRequired": "Le nom du jeu de configuration est requis", + "configSetLimitReached": "Vous pouvez enregistrer jusqu'à {{count}} jeux de configuration", + "configSetCreated": "Jeu de configuration créé", + "configSetRenamed": "Jeu de configuration renommé", + "configSetDeleted": "Jeu de configuration supprimé", + "configSetSwitched": "Jeu de configuration changé", + "defaultConfigSetName": "Par défaut", + "configSetFallbackName": "Jeu de configuration {{index}}", + "provider": "Fournisseur d'API", + "providerDescription": "Choisissez la famille de fournisseurs et le style de protocole général pour cet espace de travail.", + "apiKey": "API Key", + "enterApiKey": "Saisissez votre API Key", + "apiKeyDescription": "Enregistrée localement et limitée au jeu de configuration actif.", + "protocol": "Protocole", + "baseUrl": "Base URL", + "model": "Modèle", + "usePreset": "Utiliser un préréglage", + "custom": "Personnalisé", + "moreModels": "Plus de modèles", + "noModelsAvailable": "Aucun modèle disponible", + "selectProtocol": "Sélectionnez le protocole compatible pour le service", + "enterOllamaUrl": "Saisissez l'URL du service Ollama compatible OpenAI", + "enterOpenAIUrl": "Saisissez l'URL du service compatible OpenAI", + "enterAnthropicUrl": "Saisissez l'URL du service compatible Anthropic", + "enterGeminiUrl": "Saisissez une Base URL compatible Gemini", + "enterModelId": "Saisissez l'ID du modèle, par ex. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Veuillez sélectionner un modèle", + "contextWindow": "Fenêtre de contexte", + "contextWindowPlaceholder": "Détection automatique", + "maxOutputTokens": "Tokens de sortie max", + "maxOutputTokensPlaceholder": "Détection automatique", + "contextWindowHint": "Laissez vide pour la détection automatique. Ne remplacez que si le modèle signale des limites incorrectes.", + "saveFailed": "Échec de l'enregistrement des paramètres. Veuillez réessayer.", + "getStarted": "Commencer", + "saveSettings": "Enregistrer les paramètres", + "openSettingsAction": "Ouvrir les paramètres de l'API", + "configRequiredActiveSet": "Le jeu de configuration actuel ne dispose pas d'identifiants utilisables. Terminez d'abord la configuration dans les paramètres de l'API.", + "testConnection": "Tester la connexion", + "testingConnection": "Test en cours...", + "refreshModels": "Actualiser les modèles", + "refreshingModels": "Actualisation...", + "refreshModelsFailed": "Échec de l'actualisation des modèles. Vérifiez l'URL ou l'état du service.", + "manualModel": "Modèle manuel", + "useDetectedModels": "Utiliser les modèles détectés", + "discoverLocalOllama": "Trouver Ollama local", + "discoveringLocalOllama": "Recherche...", + "discoverLocalOllamaHint": "Saisissez d'abord votre point de terminaison Ollama. Les modèles seront récupérés automatiquement, et la saisie manuelle n'est nécessaire que si la détection échoue.", + "localOllamaDiscovered": "Ollama local trouvé avec {{count}} modèle(s) disponible(s).", + "localOllamaNotFound": "Aucun service Ollama local n'a été trouvé. Démarrez-le avec `ollama serve` et réessayez.", + "localOllamaNoModels": "Un service Ollama local a été trouvé, mais il n'expose actuellement aucun modèle.", + "localOllamaModelUnavailable": "Ollama local trouvé, mais le modèle {{model}} n'a pas pu effectuer une requête d'inférence minimale.", + "localOllamaModelLoading": "Ollama local trouvé, mais le modèle est encore en cours de chargement en mémoire. Les grands modèles peuvent prendre jusqu'à une minute.", + "enableThinking": "Activer le mode réflexion", + "enableThinkingHint": "Affiche le processus de réflexion de Claude étape par étape. Cela offre plus de transparence mais peut augmenter l'utilisation de tokens.", + "enableThinkingOllamaHint": "La plupart des modèles Ollama ne prennent pas en charge le mode réflexion. Activez-le uniquement si votre modèle le prend explicitement en charge.", + "testSuccess": "Connexion réussie ({{ms}}ms)", + "testSuccessNeedSave": "Test de connexion réussi. Enregistrez les paramètres avant de démarrer une session.", + "testError": { + "missing_key": "L'API Key est requise", + "missing_base_url": "La Base URL est requise pour ce fournisseur", + "unauthorized": "API Key invalide ou non autorisée", + "not_found": "Point de terminaison introuvable. Vérifiez la Base URL", + "rate_limited": "Limite de débit ou quota dépassé", + "server_error": "Erreur de service. Veuillez réessayer plus tard", + "network_error": "Erreur réseau. Vérifiez votre connexion", + "ollama_not_running": "Impossible de se connecter à Ollama. Veuillez vous assurer qu'Ollama est en cours d'exécution (ollama serve).", + "ollama_loading": "Ollama charge le modèle en mémoire. Les grands modèles peuvent prendre 30 à 120 secondes. Veuillez patienter et réessayer.", + "unknown": "Échec de la connexion" + }, + "guidance": { + "commonSetupsTitle": "Configurations de fournisseurs courantes", + "commonSetupsHint": "Examiner ou appliquer une configuration recommandée", + "apply": "Appliquer", + "detectedBadge": "Détecté", + "preferProviderTab": "{{service}} détecté. Ce service est généralement plus facile à configurer depuis l'onglet {{provider}} dédié.", + "protocolMismatch": "{{service}} détecté. Protocole recommandé : {{recommendedProtocol}}.", + "protocolLooksGood": "{{service}} détecté. Votre protocole actuel correspond déjà à la configuration {{recommendedProtocol}} recommandée.", + "baseUrlHint": "{{service}} détecté. Configuration {{recommendedProtocol}} recommandée : {{baseUrl}}. Modèle exemple : {{model}}.", + "genericBaseUrlHint": "Cela ressemble à un point de terminaison personnalisé compatible {{recommendedProtocol}}. Format de base URL recommandé : {{baseUrl}}. Modèle exemple : {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Service", + "protocol": "Protocole", + "baseUrl": "Base URL", + "model": "Modèle exemple", + "notes": "Notes", + "action": "Action" + }, + "errorHints": { + "emptyProbeGeneric": "Le point de terminaison a renvoyé une réponse de sonde vide. Cela signifie généralement que le protocole ou le modèle sélectionné est incompatible avec le service.", + "emptyProbeDetected": "{{service}} a renvoyé une réponse de sonde vide. Essayez la configuration {{recommendedProtocol}} recommandée et vérifiez l'ID du modèle pour ce point de terminaison.", + "emptyProbePreferProvider": "{{service}} a renvoyé une réponse de sonde vide. Essayez l'onglet {{provider}} dédié plutôt que de le configurer comme un point de terminaison personnalisé générique.", + "probeMismatchGeneric": "Le point de terminaison a répondu, mais pas dans le format attendu par cette sonde. Cela indique généralement une incompatibilité de protocole ou de modèle.", + "probeMismatchDetected": "{{service}} a répondu avec un format de sonde inattendu. Essayez la configuration {{recommendedProtocol}} recommandée et vérifiez l'ID du modèle pour ce point de terminaison." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Préférez l'onglet fournisseur OpenRouter dédié, sauf si vous déboguez un relais personnalisé." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Utilisez le mode compatible OpenAI et copiez l'ID exact du modèle depuis la documentation DeepSeek." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Utilisez le point de terminaison coding en mode compatible Anthropic. Vérifiez bien l'ID exact du modèle coding dans la documentation Moonshot." + }, + "glm": { + "name": "GLM / BigModel (route Anthropic)", + "note": "Utilisez la route compatible Anthropic lorsque le chemin du point de terminaison inclut /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Préférez l'onglet fournisseur Ollama dédié pour la découverte et l'actualisation des modèles locaux." + }, + "gemini": { + "name": "Point de terminaison Gemini personnalisé", + "note": "Utilisez le mode compatible Gemini et l'ID exact du modèle exposé par le point de terminaison." + }, + "minimax": { + "name": "MiniMax", + "note": "Utilisez le mode compatible OpenAI, sauf si votre passerelle MiniMax documente un autre protocole." + }, + "genericOpenAI": { + "name": "Compatible OpenAI générique", + "note": "Utilisez ceci pour les relais, passerelles ou serveurs d'inférence personnalisés qui imitent l'API OpenAI." + } + } + }, + "newSet": "Nouveau jeu", + "createSetTitle": "Créer un jeu de configuration", + "saveAsTitle": "Enregistrer comme jeu de configuration", + "createSetNamePlaceholder": "Saisissez le nom du jeu de configuration", + "renameSetTitle": "Renommer le jeu de configuration", + "unsavedBeforeActionPrompt": "Le jeu de configuration actuel comporte des modifications non enregistrées. Choisissez une action avant \"{{action}}\".", + "newSetDefaultName": "Nouveau jeu de configuration", + "copyNameSuffix": "Copie", + "currentSetLabel": "Jeu actuel : ", + "unsavedBadge": "Non enregistré", + "saveAndContinue": "Enregistrer et continuer", + "discardAndContinue": "Abandonner et continuer", + "currentSetName": "Nom du jeu", + "renameInlineHint": "Modifiez directement. Appuyez sur Entrée ou cliquez ailleurs pour enregistrer automatiquement", + "switchSetLabel": "Passer à un autre jeu", + "switchSetPlaceholder": "Sélectionnez un jeu vers lequel basculer", + "noOtherSetHint": "Aucun autre jeu disponible", + "configSetMissing": "Jeu de configuration introuvable", + "configSetCloneSourceMissing": "Impossible de trouver un jeu de configuration à cloner", + "configSetSystemDeleteForbidden": "Le jeu de configuration par défaut ne peut pas être supprimé", + "configSetKeepOne": "Conservez au moins un jeu de configuration", + "diagnostic": { + "runDiagnostics": "Diagnostiquer la connexion", + "runQuickDiagnostics": "Diagnostic rapide", + "runDeepDiagnostics": "Vérification d'inférence approfondie", + "running": "Diagnostic en cours...", + "step": { + "dns": "Résolution DNS", + "tcp": "Connexion TCP", + "tls": "Handshake TLS", + "auth": "Authentification API", + "model": "Vérification du modèle" + }, + "status": { + "pending": "En attente", + "running": "Vérification...", + "ok": "OK", + "fail": "Échec", + "skip": "Ignoré" + }, + "overallSuccess": "Toutes les vérifications réussies ({{ms}}ms)", + "overallFail": "Le diagnostic a échoué à {{step}}", + "advisory": { + "not_deep_verified": "Le point de terminaison est accessible et le modèle sélectionné est répertorié, mais aucune inférence en direct n'a encore été effectuée.", + "model_loading": "Le point de terminaison est accessible, mais le modèle est peut-être encore en cours de chargement en mémoire." + }, + "latency": "{{ms}}ms", + "fix": { + "dns_resolve_failed": "Impossible de résoudre le nom d'hôte {{host}}. Veuillez vérifier que l'URL est correcte.", + "tcp_connect_failed": "Impossible de se connecter à {{host}}. Veuillez vérifier vos paramètres réseau ou pare-feu.", + "tls_handshake_failed": "Le handshake TLS a échoué. Cela peut être dû à un problème de certificat ou à une interférence de proxy.", + "missing_api_key": "L'API Key est manquante ou invalide. Veuillez vérifier votre clé.", + "auth_invalid_key": "L'API Key est invalide ou expirée. Veuillez vérifier que la clé est correcte.", + "auth_endpoint_not_found": "Point de terminaison de l'API introuvable. Veuillez vérifier que la Base URL est correcte.", + "auth_request_failed": "La requête d'authentification a échoué. Veuillez vérifier votre configuration.", + "model_network_error": "Impossible d'atteindre le modèle {{model}}. Vérifiez vos paramètres réseau, VPN ou proxy.", + "model_rate_limited": "Le modèle {{model}} est actuellement soumis à une limite de débit ou hors quota. Veuillez réessayer plus tard.", + "model_request_failed": "La requête au modèle {{model}} a échoué côté fournisseur. Veuillez réessayer plus tard.", + "model_unavailable": "Le modèle {{model}} n'est pas disponible. Veuillez vérifier le nom du modèle.", + "ollama_no_models_loaded": "Le point de terminaison est accessible, mais il n'a renvoyé aucun modèle. Téléchargez d'abord un modèle dans Ollama.", + "ollama_model_not_listed": "Le modèle {{model}} n'est pas dans la liste des modèles du point de terminaison. Choisissez un modèle détecté ou passez à la saisie manuelle.", + "ollama_model_loading": "Le modèle {{model}} est peut-être encore en cours de chargement. Réessayez la vérification approfondie dans un instant.", + "model_cold_start": "Le modèle est peut-être encore en cours de chargement en mémoire GPU/CPU. Les grands modèles (7B+) peuvent prendre 30 à 120 secondes à la première utilisation. Réessayez sous peu." + } + } + }, + "window": { + "minimize": "Réduire", + "maximize": "Agrandir", + "restore": "Restaurer", + "close": "Fermer" + }, + "sandbox": { + "title": "Environnement bac à sable", + "wslDesc": "Exécutez les commandes dans l'environnement Linux WSL2 pour une meilleure isolation et sécurité sous Windows.", + "limaDesc": "Exécutez les commandes dans une VM Lima pour une meilleure isolation et sécurité sous macOS.", + "nativeDesc": "Les commandes s'exécutent directement sur votre système (mode natif Linux).", + "enableSandbox": "Activer le mode bac à sable", + "comingSoon": "Bientôt disponible — en cours de développement", + "readyStatus": "Bac à sable prêt et en cours d'exécution", + "notReadyStatus": "Bac à sable activé mais pas entièrement configuré", + "disabledStatus": "Bac à sable désactivé - les commandes s'exécutent directement sur le système", + "enabledWillSetup": "Bac à sable activé. Configuration de l'environnement...", + "disabled": "Mode bac à sable désactivé", + "failedToLoad": "Échec du chargement de l'état du bac à sable", + "failedToSave": "Échec de l'enregistrement des paramètres du bac à sable", + "statusRefreshed": "État actualisé", + "checkFailed": "Échec de la vérification de l'état du bac à sable", + "environmentStatus": "État de l'environnement", + "checkStatus": "Vérifier l'état", + "platform": "Plateforme", + "mode": "Mode", + "status": "État", + "native": "Natif", + "wslAvailable": "WSL2 disponible", + "limaAvailable": "Lima disponible", + "vmCreated": "Instance VM créée", + "vmRunning": "VM en cours d'exécution", + "wslNotInstalled": "WSL2 n'est pas installé", + "wslInstallHint": "Installez WSL2 pour une meilleure isolation. Exécutez cette commande dans PowerShell en tant qu'administrateur :", + "limaNotInstalled": "Lima n'est pas installé", + "limaInstallHint": "Installez Lima pour une meilleure isolation. Exécutez cette commande dans le Terminal :", + "linuxNative": "Linux exécute les commandes nativement sans bac à sable supplémentaire.", + "nodeInstalled": "Node.js installé avec succès", + "nodeInstallFailed": "Échec de l'installation de Node.js", + "pythonInstalled": "Python installé avec succès", + "pythonInstallFailed": "Échec de l'installation de Python", + "start": "Démarrer", + "stop": "Arrêter", + "limaStarted": "VM Lima démarrée", + "limaStartFailed": "Échec du démarrage de la VM Lima", + "limaStopped": "VM Lima arrêtée", + "limaStopFailed": "Échec de l'arrêt de la VM Lima", + "settingUp": "Configuration...", + "retrySetup": "Réessayer la configuration", + "setupComplete": "Configuration du bac à sable terminée", + "setupFailed": "Échec de la configuration du bac à sable", + "helpText1": "Le bac à sable fournit un environnement isolé pour exécuter les commandes en toute sécurité.", + "helpText2": "WSL2 (Windows) ou la VM Lima (macOS) est requis pour une prise en charge complète du bac à sable.", + "setupTitle": "Configuration du bac à sable", + "setupSubtitle": "La première exécution nécessite la configuration d'un environnement d'exécution sécurisé.", + "progressLabel": "Progression", + "continuingNative": "Poursuite en mode d'exécution natif.", + "retryLima": "Essayer de redémarrer Lima", + "retryingLima": "Redémarrage de Lima...", + "continueNative": "Continuer en mode natif", + "configuredSuccess": "Bac à sable configuré. Le code peut maintenant être exécuté en toute sécurité.", + "nativeFallbackSuccess": "Utilisation de l'environnement système natif pour l'exécution des commandes.", + "footerWsl": "Bac à sable WSL2", + "footerLima": "Bac à sable Lima", + "footerNative": "Mode natif", + "configuring": "Configuration...", + "syncFiles_one": "{{count}} fichier", + "syncFiles_other": "{{count}} fichiers", + "syncExplanation": "Synchronisation des fichiers du projet vers le bac à sable isolé pour une exécution de code sécurisée.", + "syncFirst": "La première synchronisation est plus lente,", + "syncFollowup": "les synchronisations incrémentielles seront plus rapides.", + "checkingWsl": "Vérification de l'environnement WSL2...", + "checkingLima": "Vérification de l'environnement Lima...", + "creatingLima": "Création de la VM Lima...", + "startingLima": "Démarrage de la VM Lima...", + "installingNode": "Installation de Node.js...", + "installingPython": "Installation de Python...", + "installingPip": "Installation de pip...", + "installingDeps": "Installation des dépendances des compétences...", + "setupFailedMessage": "Échec de la configuration du bac à sable", + "sandboxDisabledMessage": "Bac à sable désactivé", + "nativeModeMessage": "Utilisation du mode d'exécution natif", + "wslNotDetectedMessage": "WSL2 non détecté, utilisation du mode natif", + "limaNotDetectedMessage": "Lima non détecté, utilisation du mode natif", + "nodeInstallFailedMessage": "Échec de l'installation de Node.js", + "wslReadyMessage": "Bac à sable WSL2 prêt", + "limaReadyMessage": "Bac à sable Lima prêt", + "limaCreateFailedMessage": "Échec de la création de la VM Lima", + "limaStartFailedMessage": "Échec du démarrage de la VM Lima", + "setupDetailSandboxDisabled": "Utilisation du mode d'exécution natif (bac à sable désactivé dans les paramètres)", + "setupDetailLinuxNative": "Linux exécute les commandes directement", + "setupDetailInstallWsl": "Installez WSL2 pour une meilleure isolation du bac à sable", + "setupDetailInstallNodeWsl": "Veuillez installer Node.js manuellement dans WSL", + "setupDetailInstallNodeWslRuntime": "Installation du runtime Node.js dans {{distro}}", + "setupDetailInstallPythonWslRuntime": "Installation du runtime Python dans {{distro}}", + "setupDetailInstallPipWslRuntime": "Installation du gestionnaire de paquets Python dans {{distro}}", + "setupDetailInstallDeps": "Installation de markitdown, pypdf, pdfplumber pour les compétences PDF/PPTX", + "setupDetailInstallLima": "Installez Lima pour une meilleure isolation du bac à sable (brew install lima)", + "setupDetailCreateLima": "La première exécution nécessite le téléchargement de l'image et peut prendre quelques minutes", + "setupDetailStartLima": "Le démarrage de la VM peut prendre quelques minutes", + "setupDetailInstallNodeLima": "Installation du runtime Node.js dans la VM Lima", + "setupDetailInstallPythonLima": "Installation du runtime Python dans la VM Lima", + "syncingFilesMessage": "Synchronisation des fichiers vers le bac à sable...", + "syncingSkillsMessage": "Configuration des compétences...", + "syncReadyMessage": "Bac à sable prêt", + "syncFailedMessage": "Échec de la synchronisation du bac à sable", + "syncDetailWsl": "Copie des fichiers du projet vers l'environnement WSL isolé", + "syncDetailLima": "Copie des fichiers du projet vers l'environnement Lima isolé", + "syncDetailSkills": "Copie des compétences intégrées vers le bac à sable", + "syncDetailFallback": "Repli sur le mode d'accès direct (moins sécurisé)", + "syncDetailCompleted": "{{count}} fichiers synchronisés" + }, + "mcp": { + "noConnectors": "Aucun connecteur configuré", + "addConnector": "Ajoutez un connecteur pour activer les outils MCP", + "toolsAvailable": "{{count}} outil disponible", + "toolsAvailable_plural": "{{count}} outils disponibles", + "connected": "Connecté", + "notConnected": "Non connecté", + "connecting": "Connexion...", + "failed": "Échec de la connexion", + "chromeHint": "Une nouvelle fenêtre de débogage Chrome s'ouvrira automatiquement si le port n'est pas disponible", + "quickAddPresets": "Préréglages d'ajout rapide", + "show": "Afficher", + "hide": "Masquer", + "addCustomConnector": "Ajouter un connecteur personnalisé", + "configure": "Configurer", + "added": "Ajouté", + "requiresToken": "Token requis", + "editConnector": "Modifier le connecteur", + "addConnectorTitle": "Ajouter un connecteur personnalisé", + "name": "Nom", + "namePlaceholder": "Chrome MCP Server", + "type": "Type", + "typeStdioLocal": "STDIO (local)", + "typeSseRemote": "SSE (distant)", + "typeStreamableHttp": "HTTP (streamable)", + "command": "Commande", + "commandPlaceholder": "npx", + "arguments": "Arguments", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Arguments séparés par des espaces", + "url": "URL", + "enableConnector": "Activer ce connecteur", + "presetAlreadyConfigured": "Le connecteur \"{{name}}\" est déjà configuré", + "envValuePlaceholder": "Saisissez une valeur", + "removeVar": "Supprimer", + "loadServersFailed": "Échec du chargement des connecteurs", + "saveServerFailed": "Échec de l'enregistrement du connecteur", + "deleteServerFailed": "Échec de la suppression du connecteur", + "deleteConnectorConfirm": "Supprimer ce connecteur ?", + "commandRequired": "La commande est requise", + "urlRequired": "L'URL est requise", + "toolCount": "{{count}} outils", + "callCount": "{{count}} appels" + }, + "credentials": { + "envVars": "Variables d'environnement", + "enterEnvVar": "Saisissez le nom de la variable d'environnement (par ex. NOTION_TOKEN) :", + "usedForTokens": "Utilisé pour les tokens et les secrets (par ex. NOTION_TOKEN)", + "noEnvVars": "Aucune variable d'environnement configurée" + }, + "skills": { + "storagePathHint": "Choisissez où sont stockées les compétences personnalisées et comment l'application les actualise.", + "builtinSkillsDesc": "Les compétences intégrées sont fournies avec l'application et peuvent être activées au besoin.", + "pluginsTitle": "Plugins et imports", + "pluginsDesc": "Parcourez les plugins de la marketplace ou importez des compétences personnalisées depuis un dossier local.", + "title": "📦 Compétences", + "description": "Les compétences étendent les capacités de Claude avec des connaissances et des outils spécialisés.", + "builtinSkills": "Compétences intégrées", + "customSkills": "Compétences personnalisées", + "noCustomSkills": "Aucune compétence personnalisée installée", + "installSkillsDesc": "Installez des compétences pour étendre les capacités de Claude", + "browsePlugins": "Parcourir les plugins", + "pluginListTitle": "Parcourir la marketplace de plugins Claude", + "pluginSkillCount": "Compétences installables : {{count}}", + "pluginComponents": "Composants : compétences {{skills}} · commandes {{commands}} · agents {{agents}} · hooks {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Les détails des composants seront disponibles après l'installation.", + "pluginInstall": "Installer", + "pluginInstalled": "Installé", + "pluginInstallSuccess": "Plugin \"{{name}}\" installé avec succès", + "pluginInstallFailed": "Échec de l'installation du plugin", + "pluginNoSkills": "Ce plugin n'a aucune compétence installable en V1", + "pluginNoComponents": "Ce plugin n'a aucun composant chargeable", + "pluginManage": "Gérer", + "pluginEnable": "Activer", + "pluginDisable": "Désactiver", + "pluginUninstall": "Désinstaller le plugin \"{{name}}\" ?", + "pluginManageUninstall": "Désinstaller", + "pluginUninstalled": "Le plugin \"{{name}}\" a été désinstallé", + "pluginComponentHooksDisabledByDefault": "Ce plugin inclut des hooks. Les hooks sont désactivés par défaut et peuvent être activés dans les paramètres de gestion après l'installation.", + "pluginComponentMcpDisabledByDefault": "Ce plugin inclut MCP. MCP est désactivé par défaut et peut être activé dans les paramètres de gestion après l'installation.", + "pluginAppliedInRuntime": "Les paramètres du plugin sont actuellement appliqués à l'exécution", + "pluginDisabled": "Le plugin est actuellement désactivé", + "noPluginsFound": "Aucun plugin disponible", + "storagePathTitle": "Répertoire de stockage des compétences", + "storagePathUnavailable": "Chemin de stockage indisponible", + "selectStoragePath": "Sélectionner le répertoire", + "openStoragePath": "Ouvrir le répertoire", + "refreshSkills": "Actualiser les compétences", + "storagePathUpdated": "Stockage mis à jour. {{migrated}} compétences migrées, {{skipped}} ignorées", + "storagePathUpdateFailed": "Échec de la mise à jour du chemin de stockage des compétences", + "storagePathOpenFailed": "Échec de l'ouverture du chemin de stockage des compétences", + "storagePathFallback": "Repli sur le répertoire de compétences par défaut. Veuillez vérifier le chemin configuré.", + "storageWatcherError": "Erreur du surveillant du répertoire de compétences : {{message}} (repli sur le polling activé).", + "installSkillFromFolder": "Installer une compétence depuis un dossier", + "deleteSkill": "Supprimer la compétence \"{{name}}\" ?", + "failedToLoad": "Échec du chargement des compétences", + "failedToInstall": "Échec de l'installation de la compétence", + "failedToDelete": "Échec de la suppression de la compétence", + "failedToToggle": "Échec de la modification de l'état de la compétence" + }, + "logs": { + "actionsTitle": "Actions sur les journaux", + "title": "Journaux de l'application", + "description": "Affichez et exportez des ensembles de diagnostics pour le débogage. Les journaux pivotent automatiquement après 10 Mo, et les exports incluent également les résumés récents de sessions et d'erreurs.", + "inventoryDescription": "Inventaire actuel des journaux et empreinte de stockage.", + "recentDescription": "Journaux récents de l'application disponibles pour inspection. Vous pouvez toujours exporter un ensemble de diagnostics même si aucun fichier journal n'existe encore.", + "directoryDescription": "Emplacement actuel sur disque des journaux de l'application.", + "actionsDescription": "Exportez un ensemble de diagnostics, affichez le répertoire des journaux ou effacez les fichiers journaux.", + "enableDevLogs": "Activer les journaux développeur", + "enableDevLogsDesc": "Enregistre des journaux détaillés pour le débogage. Désactivez pour réduire l'utilisation du disque.", + "devLogsEnabled": "Journaux développeur activés", + "devLogsDisabled": "Journaux développeur désactivés", + "toggleFailed": "Échec de la modification des journaux développeur", + "logFiles": "Fichiers journaux", + "totalSize": "Taille totale", + "noLogFiles": "Aucun fichier journal trouvé", + "logsDirectory": "Répertoire des journaux :", + "exportZip": "Exporter les diagnostics", + "openFolder": "Ouvrir le dossier", + "clearAll": "Tout effacer", + "clearConfirm": "Êtes-vous sûr de vouloir effacer tous les fichiers journaux ? Cette action est irréversible.", + "exportSuccess": "Diagnostics exportés avec succès vers {{path}}", + "clearSuccess": "{{count}} fichier(s) journal effacé(s)", + "exportFailed": "Échec de l'exportation des journaux", + "clearFailed": "Échec de l'effacement des journaux", + "helpText1": "L'ensemble de diagnostics exporté inclut les journaux de l'application, un instantané d'exécution expurgé, et des résumés de sessions/erreurs uniquement basés sur les métadonnées, sans corps de message par défaut.", + "helpText2": "Partager cet ensemble nous permet généralement de cerner les problèmes beaucoup plus rapidement, qu'ils proviennent de l'interface, de l'exécution d'outils ou de l'environnement local." + }, + "sidebar": { + "recents": "Récents", + "expandToView": "Développer pour afficher les tâches", + "noTasks": "Aucune tâche pour l'instant", + "noTasksHint": "Démarrez une nouvelle discussion pour commencer à créer, rechercher ou modifier des fichiers.", + "search": "Rechercher des conversations...", + "deleteAll": "Supprimer toutes les conversations", + "localTasks": "Ces tâches s'exécutent localement et ne sont pas synchronisées entre les appareils.", + "apiConfigured": "API configurée", + "apiNotConfigured": "API non configurée", + "user": "Utilisateur", + "newTask": "Nouvelle discussion", + "newTaskHint": "Démarrer une nouvelle conversation", + "today": "Aujourd'hui", + "yesterday": "Hier", + "previousWeek": "7 derniers jours", + "older": "Plus ancien", + "settings": "Paramètres", + "themeToggle": "Basculer le thème", + "manage": "Gérer", + "selectAll": "Tout sélectionner", + "deselectAll": "Tout désélectionner", + "nSelected": "{{count}} sélectionné(s)", + "batchDeleteConfirm": "Supprimer {{count}} conversations ? Cette action est irréversible.", + "cancel": "Annuler", + "confirmDelete": "Supprimer" + }, + "chat": { + "sendMessage": "Envoyer le message", + "stop": "Arrêter", + "processing": "Traitement...", + "typeMessage": "Saisissez un message...", + "loadingConversation": "Chargement de la conversation...", + "startConversation": "Démarrer la conversation", + "startFailed": "Échec du démarrage de la session. Veuillez réessayer.", + "disclaimer": "Open Cowork est alimenté par l'IA et peut faire des erreurs. Veuillez vérifier les réponses.", + "noModel": "Aucun modèle", + "connectorCount_one": "{{count}} connecteur", + "connectorCount_other": "{{count}} connecteurs" + }, + "context": { + "progress": "Progression", + "artifacts": "Artefacts", + "context": "Contexte", + "workingDirectory": "Répertoire de travail", + "toolsUsed": "Outils utilisés", + "mcpConnectors": "Connecteurs MCP", + "copied": "Copié !", + "noToolsUsedYet": "Aucun outil utilisé pour l'instant", + "toolsUsedLabel": "Outils utilisés :", + "noFolderSelected": "Aucun dossier sélectionné", + "expandPanel": "Développer le panneau", + "collapsePanel": "Réduire le panneau", + "queuedMessages": "Messages en file d'attente : {{count}}", + "stepsWillShow": "Les étapes s'afficheront au fur et à mesure de la tâche.", + "noArtifactsYet": "Aucun artefact pour l'instant", + "revealFailed": "Impossible de localiser le fichier. Veuillez vérifier que le chemin existe.", + "fileCreated": "Fichier créé", + "callNumber": "Appel n°{{number}}", + "input": "Entrée :", + "output": "Sortie :", + "tokenUsage": "Utilisation des tokens", + "inputTokens": "Entrée", + "outputTokens": "Sortie", + "totalTokens": "Total", + "changeDir": "Changer de répertoire", + "changeDirFailed": "Échec du changement de répertoire", + "copyPath": "Copier le chemin", + "openInFileManager": "Ouvrir dans le gestionnaire de fichiers", + "contextUsage": "Utilisation du contexte", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Requête", + "queued": "En file d'attente", + "cancelled": "Annulé", + "emptyMessage": "Message vide", + "emptyText": "(texte vide)", + "copyMessage": "Copier le message", + "revealInFolder": "Afficher dans le dossier", + "pastedContentAlt": "Contenu collé", + "taskProgress": "Progression de la tâche", + "noQuestions": "Aucune question", + "question": "Question", + "thinking": "Réflexion", + "executionTime": "Temps d'exécution : {{time}}" + }, + "schedule": { + "createTitle": "Créer une planification", + "editTitle": "Modifier la planification", + "autoTitleLabel": "Titre automatique (utilisé pour identifier les sessions)", + "autoTitleChangedHint": "Le prompt a changé. Le titre sera régénéré après l'enregistrement.", + "autoTitleUnchangedHint": "Si le prompt reste le même, le titre existant sera conservé.", + "autoTitleEditingChanged": "Après l'enregistrement, le titre sera régénéré à partir du prompt avec un préfixe [Tâche planifiée].", + "autoTitleEditingUnchanged": "Après l'enregistrement, le titre sera généré avec un préfixe [Tâche planifiée].", + "autoTitleCreating": "Après l'enregistrement, le titre sera généré avec un préfixe [Tâche planifiée] et un résumé du modèle.", + "promptPlaceholder": "Prompt à exécuter automatiquement à l'heure planifiée", + "cwdPlaceholder": "Répertoire de travail (par défaut, l'espace de travail actuel)", + "executionTime": "Horaire d'exécution", + "executionTimeHint": "Les nouvelles planifications privilégient les horaires multi-créneaux ; les règles d'intervalle héritées peuvent encore être modifiées.", + "enabled": "Activée", + "mode": "Mode d'exécution", + "weekday": "Jours de la semaine", + "weekdayPlaceholder": "Sélectionnez les jours de la semaine", + "times": "Créneaux horaires", + "timePlaceholder": "Sélectionnez les heures", + "legacyIntervalNotice": "Cette tâche provient d'une règle héritée à intervalle fixe et conservera ce mode lors de l'enregistrement.", + "onceTimeLabel": "Choisissez l'heure d'exécution unique", + "legacyStartTimeLabel": "Choisissez l'heure de début pour la règle d'intervalle héritée", + "dailyHint": "Exécuter automatiquement à ces heures chaque jour.", + "weeklyHint": "Exécuter automatiquement les jours de la semaine et créneaux horaires sélectionnés.", + "saveChanges": "Enregistrer les modifications", + "createTask": "Créer la tâche", + "cancelEdit": "Annuler la modification", + "listHint": "La désactivation bloque uniquement les exécutions automatiques futures. Les sessions déjà démarrées doivent être arrêtées manuellement depuis la liste des sessions.", + "empty": "Aucune planification pour l'instant", + "loadFailed": "Échec du chargement des planifications", + "promptRequired": "Saisissez le prompt à exécuter", + "dailyTimesRequired": "Sélectionnez au moins un créneau horaire quotidien", + "weeklyTimesRequired": "Sélectionnez au moins un créneau horaire hebdomadaire", + "weekdayRequired": "Sélectionnez au moins un jour de la semaine", + "invalidTime": "Saisissez une heure d'exécution valide", + "nextRunCalculationFailed": "La règle actuelle ne peut pas calculer la prochaine heure d'exécution", + "futureTimeRequired": "L'heure d'exécution doit être ultérieure à maintenant. Utilisez Exécuter maintenant si vous souhaitez la déclencher immédiatement.", + "taskMissing": "La tâche n'existe plus ou a été supprimée", + "updated": "Planification mise à jour", + "created": "Planification créée", + "saveFailed": "Échec de l'enregistrement de la planification", + "toggleFailed": "Échec de la modification de l'état de la planification", + "runNowSuccess": "Exécution immédiate déclenchée", + "runNowFailed": "Échec de l'exécution immédiate", + "noSessionToStop": "Cette tâche n'a aucune session d'exécution à arrêter", + "sessionNotRunning": "Cette tâche n'a actuellement aucune session en cours d'exécution", + "stopSent": "Commande d'arrêt envoyée", + "stopFailed": "Échec de l'arrêt de l'exécution", + "deleteConfirm": "Supprimer la planification \"{{title}}\" ?", + "deleted": "Planification supprimée", + "deleteFailed": "Échec de la suppression de la planification", + "statusRunning": "En cours d'exécution", + "statusFinished": "Terminée", + "statusUnknown": "Inconnu", + "statusNone": "Aucun", + "taskEnabled": "Activée", + "taskDisabled": "Désactivée", + "nextRun": "Prochaine exécution : {{value}}", + "nextRunNone": "Prochaine exécution : Aucune", + "strategy": "Règle de planification : {{value}}", + "lastRun": "Dernière exécution : {{value}}", + "lastRunNever": "Dernière exécution : Pas encore exécutée", + "recentSession": "Dernière session : {{value}}", + "sessionStatus": "État de la session : {{value}}", + "cwd": "Répertoire : {{value}}", + "lastError": "Dernière erreur : {{value}}", + "disable": "Désactiver", + "enable": "Activer", + "runNow": "Exécuter maintenant", + "stopExecution": "Arrêter l'exécution", + "edit": "Modifier", + "delete": "Supprimer", + "stopRunTitleActive": "Arrêter la dernière session d'exécution de cette tâche", + "stopRunTitleIdle": "Cette tâche n'a actuellement aucune session en cours d'exécution", + "repeatEveryMinute_one": "Toutes les {{count}} minute", + "repeatEveryMinute_other": "Toutes les {{count}} minutes", + "repeatEveryHour_one": "Toutes les {{count}} heure", + "repeatEveryHour_other": "Toutes les {{count}} heures", + "repeatEveryDay_one": "Tous les {{count}} jour", + "repeatEveryDay_other": "Tous les {{count}} jours", + "ruleDaily": "Chaque jour à {{times}}", + "ruleWeekly": "Chaque semaine le {{weekdays}} à {{times}}", + "ruleOnce": "Unique", + "previewNextRun": "Prochaine exécution prévue : {{value}}", + "previewSelectValidTime": "Choisissez une heure d'exécution valide", + "previewSelectAtLeastOne": "Choisissez au moins un créneau horaire valide", + "previewAutoFind": "Le système choisira automatiquement la prochaine heure d'exécution : {{value}}", + "weekdayMonday": "Lun", + "weekdayTuesday": "Mar", + "weekdayWednesday": "Mer", + "weekdayThursday": "Jeu", + "weekdayFriday": "Ven", + "weekdaySaturday": "Sam", + "weekdaySunday": "Dim", + "modeOnce": "Unique", + "modeDaily": "Quotidien", + "modeWeekly": "Hebdomadaire", + "repeatUnitMinute": "Minute", + "repeatUnitHour": "Heure", + "repeatUnitDay": "Jour", + "unknownWeekday": "Inconnu", + "pickerEditTimes": "Modifier les créneaux horaires", + "pickerAnyHHmm": "Vous pouvez saisir n'importe quelle valeur `HH:mm`", + "pickerSelectedCount_one": "{{count}} sélectionné", + "pickerSelectedCount_other": "{{count}} sélectionnés", + "pickerAdd": "Ajouter", + "pickerSelectedTimes": "Heures sélectionnées", + "pickerNone": "Aucun créneau horaire sélectionné pour l'instant", + "pickerSuggestions": "Suggestions" + }, + "remote": { + "title": "Contrôle à distance", + "statusRunning": "En cours d'exécution. Disponible via Feishu.", + "statusStopped": "Arrêté", + "startService": "Démarrer le service", + "stopService": "Arrêter le service", + "activeSessions": "Sessions actives", + "authorizedUsers": "Utilisateurs autorisés", + "pendingApprovals": "Approbations en attente", + "pairingRequests": "Demandes de jumelage en attente d'approbation", + "unknownUser": "Utilisateur inconnu", + "pairingCode": "Code de jumelage", + "approve": "Approuver", + "stepFeishu": "Configuration de Feishu", + "stepConnection": "Connexion", + "stepAdvanced": "Avancé", + "feishuTitle": "Configuration du bot Feishu", + "feishuDesc": "Créez une application sur la Feishu Open Platform, puis renseignez les identifiants ici.", + "dmPolicy": "Politique d'autorisation des messages directs", + "policyPairing": "Vérification par jumelage", + "policyPairingDesc": "Les utilisateurs doivent saisir un code de jumelage.", + "policyAllowlist": "Liste d'autorisation", + "policyAllowlistDesc": "Seuls des utilisateurs spécifiques sont autorisés.", + "policyOpen": "Accès ouvert", + "policyOpenDesc": "Tout le monde peut utiliser le bot.", + "openFeishu": "Ouvrir la Feishu Open Platform", + "slackTitle": "Configuration du bot Slack", + "slackDesc": "Créez une application Slack, installez-la dans votre espace de travail, puis renseignez les identifiants ici.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (pour Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Se connecter vers l'extérieur à Slack. Aucune IP publique requise.", + "openSlack": "Ouvrir l'API Slack", + "connectionTitle": "Mode de connexion", + "connectionDesc": "Choisissez comment les serveurs Feishu communiquent avec votre ordinateur.", + "longConnection": "Mode connexion longue", + "recommended": "Recommandé", + "longConnectionDesc": "L'application se connecte vers l'extérieur aux serveurs Feishu. Aucune IP publique ni ngrok requis.", + "noPublicInternet": "Aucune exposition à l'internet public", + "outOfBox": "Fonctionne immédiatement", + "stableReliable": "Stable et fiable", + "webhookMode": "Mode webhook", + "webhookDesc": "Feishu transmet les messages à votre serveur. Une adresse accessible publiquement est requise.", + "localWebhookUrl": "URL de webhook locale", + "useBuiltInNgrok": "Utiliser le ngrok intégré", + "ngrokHelpPrefix": "Obtenez-en un gratuitement sur", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunnel connecté", + "longConnectionHint": "Dans la Feishu Open Platform, allez dans Événements et rappels > Configuration des événements et basculez le mode d'abonnement sur connexion longue.", + "advancedTitle": "Paramètres avancés", + "advancedDesc": "Personnalisez le comportement du contrôle à distance.", + "defaultWorkingDirectory": "Répertoire de travail par défaut", + "defaultWorkingDirectoryPlaceholder": "Par exemple : C:\\Users\\votre-nom\\Projects", + "defaultWorkingDirectoryHint": "Il s'agit du répertoire par défaut pour les commandes de l'IA. Vous pouvez aussi le remplacer dans un message avec `[cwd:path]`.", + "gatewayPort": "Port du service", + "autoApproveSafeTools": "Approuver automatiquement les outils sûrs", + "autoApproveSafeToolsDesc": "Autoriser automatiquement les outils sûrs tels que la lecture de fichiers et les opérations de navigateur.", + "saveConfig": "Enregistrer la configuration", + "authorizedUsersTitle": "Utilisateurs autorisés ({{count}})", + "revokeAccess": "Révoquer l'accès", + "quickStart": "Démarrage rapide", + "quickStartStep1": "Créez une application sur la Feishu Open Platform et ajoutez la capacité Bot.", + "quickStartStep2": "Copiez l'App ID et l'App Secret dans les champs ci-dessus.", + "quickStartStep3": "Activez ces autorisations dans les paramètres d'autorisation :", + "quickStartStep4": "Dans la configuration des événements de Feishu, choisissez le mode d'événement par connexion longue.", + "quickStartStep5Prefix": "Abonnez-vous à l'événement", + "quickStartStep5Suffix": ".", + "quickStartStep6": "Publiez l'application, puis cliquez sur Démarrer le service.", + "started": "Contrôle à distance démarré", + "stopped": "Contrôle à distance arrêté", + "actionFailed": "Échec de l'opération", + "configSaved": "Configuration enregistrée", + "saveFailed": "Échec de l'enregistrement de la configuration", + "pairingApproved": "Jumelage approuvé", + "approveFailed": "Échec de l'approbation du jumelage", + "reject": "Rejeter", + "pairingRejected": "Jumelage rejeté", + "rejectFailed": "Échec du rejet du jumelage", + "pairingGuideTitle": "Guide de jumelage", + "pairingGuideStep1": "Ouvrez Feishu et trouvez le bot", + "pairingGuideStep2": "Envoyez n'importe quel message pour lancer le jumelage", + "pairingGuideStep3": "Approuvez la demande de jumelage ci-dessous", + "pairingGuideStep4": "Terminé — l'utilisateur peut maintenant discuter avec le bot", + "waitingForPairing": "En attente que les utilisateurs lancent le jumelage...", + "expiresIn": "Expire dans {{time}}", + "userRemoved": "Utilisateur supprimé", + "revokeFailed": "Échec de la suppression de l'utilisateur", + "copied": "Copié" + }, + "time": { + "now": "maintenant" + }, + "permission": { + "permissionRequired": "Autorisation requise", + "tool": "Outil :", + "input": "Entrée :", + "warning": "Cette action peut modifier votre système. Examinez attentivement.", + "deny": "Refuser", + "allow": "Autoriser", + "alwaysAllow": "Toujours autoriser cet outil", + "useTool": "Utiliser l'outil {{toolName}}", + "toolDescriptions": { + "write": "Écrire dans des fichiers sur votre système", + "edit": "Modifier des fichiers existants sur votre système", + "bash": "Exécuter des commandes shell", + "webFetch": "Récupérer des données sur le web", + "webSearch": "Rechercher sur le web", + "read_file": "Lire des fichiers dans l'espace de travail", + "write_file": "Écrire des fichiers dans l'espace de travail", + "edit_file": "Modifier des fichiers dans l'espace de travail", + "list_directory": "Lister le contenu d'un répertoire dans l'espace de travail", + "execute_command": "Exécuter des commandes shell dans l'espace de travail", + "glob": "Rechercher des fichiers par motif", + "grep": "Rechercher dans le contenu des fichiers" + } + }, + "sudo": { + "title": "Autorisation administrateur requise", + "description": "La commande suivante nécessite des privilèges d'administrateur :", + "passwordLabel": "Mot de passe", + "passwordPlaceholder": "Saisissez votre mot de passe", + "cancel": "Annuler", + "execute": "Exécuter", + "warning": "Votre mot de passe sera utilisé uniquement pour cette commande et ne sera pas stocké." + }, + "errorBoundary": { + "title": "Une erreur s'est produite", + "description": "Une erreur inattendue s'est produite dans l'application. Vous pouvez essayer de récupérer en cliquant sur le bouton ci-dessous.", + "details": "Détails de l'erreur", + "retry": "Réessayer" + } +} diff --git a/src/renderer/i18n/locales/it.json b/src/renderer/i18n/locales/it.json new file mode 100644 index 00000000..e8744a6a --- /dev/null +++ b/src/renderer/i18n/locales/it.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Salva", + "cancel": "Annulla", + "delete": "Elimina", + "edit": "Modifica", + "add": "Aggiungi", + "close": "Chiudi", + "loading": "Caricamento...", + "error": "Errore", + "success": "Operazione riuscita", + "saving": "Salvataggio...", + "saved": "Salvato con successo!", + "sure": "Sei sicuro?", + "yes": "Sì", + "no": "No", + "enable": "Abilita", + "disable": "Disabilita", + "install": "Installa", + "optional": "facoltativo", + "appLogoAlt": "Logo Open Cowork", + "pastedImageAlt": "Incollata {{index}}" + }, + "welcome": { + "title": "Come posso aiutarti oggi?", + "placeholder": "Descrivi cosa vorresti fare...", + "createFile": "Crea un file", + "crunchData": "Elabora dati", + "organizeFiles": "Organizza file", + "checkEmails": "Controlla le email", + "searchPapers": "Cerca e riassumi articoli", + "summarizePapersToNotion": "Riassumi articoli su Notion", + "selectWorkingFolder": "Seleziona cartella di lavoro (obbligatorio)", + "selectWorkingFolderFailed": "Impossibile selezionare la cartella di lavoro", + "attachFiles": "Allega file", + "letsGo": "Iniziamo", + "starting": "Avvio...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Logo Open Cowork", + "pastedImageAlt": "Incollata {{index}}", + "quickPromptCreate": "Crea un nuovo file per me", + "quickPromptCrunch": "Aiutami ad analizzare ed elaborare i dati", + "quickPromptOrganize": "Aiutami a organizzare i miei file e le cartelle", + "quickPromptEmail": "Aiutami a usare Chrome per riassumere le nuove email degli ultimi tre giorni nelle mie caselle Gmail e NetEase Mail. Tieni presente che gli account salvati includono già il suffisso completo dell'email. Pertanto, se il suffisso dell'email è già precompilato nella pagina web o in uno screenshot, non inserirlo di nuovo, per evitare l'errore di accesso. Inoltre, verifica prima se le credenziali dell'account corrispondente sono salvate. Se il nome utente o la password per un determinato servizio email non sono salvati, puoi saltare quell'account email.", + "quickPromptPapers": "Aiutami a usare Chrome per cercare e riassumere articoli relativi ad [Agent] negli ultimi due giorni.\nSiti di origine:\n1. HuggingFace Daily Papers. Includi le informazioni sui voti e un breve riassunto. Tieni presente che potrebbe non includere articoli nel fine settimana, quindi potresti dover controllare gli articoli dei giorni precedenti. Assicurati però che ci sia un totale di due giorni.", + "quickPromptNotion": "Aiutami a ricercare tre articoli di rassegna rappresentativi relativi agli agenti e aggiungili a una pagina di Notion intitolata \"Agent Survey\". Per ogni articolo includi il titolo, gli autori, la sede/anno di pubblicazione e un breve riassunto dei contributi principali.", + "apiNotConfigured": "API non ancora configurata. Vai in Impostazioni per configurare il tuo provider API e la chiave.", + "goToSettings": "Vai alle Impostazioni" + }, + "settings": { + "title": "Impostazioni", + "apiSettings": "Impostazioni API", + "apiSettingsDesc": "Configura il provider API e la chiave", + "sandbox": "Sandbox", + "sandboxDesc": "Ambiente di esecuzione isolato", + "connectors": "Connettori MCP", + "connectorsDesc": "Integrazioni con browser e strumenti", + "skills": "Skill", + "skillsDesc": "Gestisci skill personalizzate", + "memory": "Memoria", + "memoryDesc": "Gestisci la memoria a lungo termine e l'esperienza del workspace", + "schedule": "Pianificazioni", + "scheduleDesc": "Automazione di prompt in stile sveglia", + "remote": "Controllo remoto", + "remoteDesc": "Usa Open Cowork da Feishu e altri canali", + "logs": "Log", + "logsDesc": "Visualizza ed esporta i log dell'applicazione", + "panelDesc": "Configura il tuo workspace, gli strumenti e il comportamento dell'account.", + "general": "Generale", + "generalDesc": "Aspetto, lingua e preferenze" + }, + "general": { + "appearance": "Aspetto", + "theme": "Tema", + "themeLight": "Chiaro", + "themeDark": "Scuro", + "themeSystem": "Sistema", + "language": "Lingua" + }, + "memory": { + "title": "Memoria", + "description": "La memoria centrale globale conserva le preferenze stabili, mentre la memoria dell'esperienza del workspace conserva la conoscenza multi-turno specifica del progetto.", + "enabled": "Abilitata", + "disabled": "Disabilitata", + "toggleHint": "Disattivandola interrompi l'acquisizione futura e il richiamo automatico, ma mantieni i record esistenti.", + "enableAction": "Abilita memoria", + "disableAction": "Disabilita memoria", + "enabledStatus": "La memoria è abilitata", + "disabledStatus": "La memoria è disabilitata", + "coreCount": "Voci centrali", + "sessionCount": "Riassunti delle sessioni", + "chunkCount": "Frammenti di esperienza", + "workspaceCount": "Workspace", + "latestIngestion": "Ultima acquisizione", + "noIngestionYet": "Nessuna acquisizione registrata finora", + "health": "Stato", + "healthy": "In salute, senza errori recenti", + "failedSessions": "{{count}} sessione/i ha/hanno avuto un errore nell'ultima acquisizione", + "searchTitle": "Cerca e ispeziona", + "searchDescription": "Cerca nella memoria per workspace corrente o a livello globale, poi ispeziona riassunti ed estratti grezzi.", + "searchPlaceholder": "Cerca preferenze, implementazioni precedenti, decisioni...", + "searchAction": "Cerca", + "scopeWorkspace": "Workspace corrente", + "scopeAll": "Tutta la memoria", + "scopeGlobal": "Solo memoria centrale", + "currentWorkspace": "Workspace corrente", + "groupCore": "Memoria centrale", + "groupSessions": "Riassunti delle sessioni", + "groupChunks": "Corrispondenze di frammenti", + "detailTitle": "Dettaglio", + "noSelection": "Seleziona un risultato per ispezionare il riassunto completo e l'estratto di origine.", + "noResults": "Nessun risultato", + "maintenanceTitle": "Manutenzione", + "maintenanceDescription": "Ricostruisci la memoria dell'esperienza per il workspace corrente o cancella i dati salvati.", + "rebuildWorkspace": "Ricostruisci workspace corrente", + "clearWorkspace": "Cancella workspace corrente", + "clearCore": "Cancella memoria centrale", + "rebuildConfirm": "Ricostruire la memoria dell'esperienza per il workspace corrente? Questo riscansiona le sessioni storiche di quel workspace.", + "clearWorkspaceConfirm": "Cancellare la memoria dell'esperienza per il workspace corrente? Questa operazione non può essere annullata.", + "clearCoreConfirm": "Cancellare tutta la memoria centrale globale? Questa operazione non può essere annullata.", + "rebuildSuccess": "Memoria del workspace ricostruita", + "clearWorkspaceSuccess": "Memoria del workspace cancellata", + "clearCoreSuccess": "Memoria centrale cancellata", + "runtimeTitle": "Configurazione di runtime", + "runtimeDescription": "Per impostazione predefinita eredita la configurazione API attualmente attiva. Qui regoli principalmente la profondità di navigazione, l'embedding e la directory su disco.", + "runtimeSaved": "Configurazione di runtime della memoria salvata", + "saveRuntime": "Salva configurazione di runtime", + "storageRoot": "Radice di archiviazione", + "noWorkspace": "Nessun workspace ancora", + "maxNavSteps": "Passi di navigazione", + "ingestionConcurrency": "Concorrenza di ricostruzione", + "useEmbedding": "Abilita recupero tramite embedding", + "evalEnabled": "Abilita valutazione con modello reale", + "evalArtifactsRoot": "Directory degli artefatti di valutazione", + "evalMaxRounds": "Round di valutazione", + "promptIterationRounds": "Round di iterazione del prompt", + "llmConfig": "LLM della memoria", + "embeddingConfig": "Embedding", + "inheritActive": "Eredita API attiva", + "modelOverride": "Override del modello", + "baseUrlOverride": "Override del Base URL", + "apiKeyOverride": "Override dell'API Key", + "allSources": "Tutte le fonti", + "groupRawSessions": "Sessioni grezze", + "sourceFile": "File di origine", + "inspectSession": "Ispeziona memoria della sessione", + "inspectSessionHint": "Seleziona una sessione o un frammento dai risultati sopra per ispezionarlo.", + "revealInFinder": "Mostra in Finder", + "rebuildAll": "Ricostruisci tutta la memoria", + "rebuildAllConfirm": "Questo cancellerà e ricostruirà tutta la memoria. Continuare?", + "rebuildAllSuccess": "Ricostruita tutta la memoria: {{sessionCount}} sessione/i, {{workspaceCount}} workspace di origine", + "filesTitle": "Visualizzatore file grezzi", + "filesDescription": "Visualizza gli artefatti core / esperienza unificata / session_state / eval esattamente come vengono scritti su disco.", + "fileList": "Elenco file", + "refreshFiles": "Aggiorna", + "noFiles": "Nessun file di memoria ancora", + "fileContent": "Contenuto del file", + "emptyFile": "Il file è vuoto", + "selectFileHint": "Seleziona un file a sinistra per visualizzarne il JSON grezzo." + }, + "language": { + "english": "Inglese", + "chinese": "Cinese", + "selectLanguage": "Seleziona lingua", + "currentLanguage": "Lingua corrente" + }, + "api": { + "firstRunTitle": "Configura API", + "firstRunSubtitle": "Configura un provider per iniziare a usare Open Cowork", + "settingsTitle": "Impostazioni API", + "settingsSubtitle": "Gestisci le impostazioni di provider, chiave e modello", + "configSet": "Set di configurazione", + "defaultSetTag": "Predefinito", + "saveAs": "Salva con nome", + "renameSet": "Rinomina", + "deleteSet": "Elimina set", + "saveAndSwitch": "Salva e cambia", + "discardAndSwitch": "Scarta e cambia", + "currentSetSavingHint": "\"Salva impostazioni\" aggiorna solo il set di configurazione attualmente selezionato.", + "unsavedCurrentSetHint": "Il set di configurazione corrente ha modifiche non salvate.", + "unsavedSwitchPrompt": "Il set di configurazione corrente ha modifiche non salvate. Scegli un'azione prima di passare a \"{{name}}\".", + "configSetSaveAsPrompt": "Inserisci un nome per il nuovo set di configurazione", + "configSetRenamePrompt": "Inserisci un nuovo nome per questo set di configurazione", + "configSetDeleteConfirm": "Eliminare il set di configurazione \"{{name}}\"?", + "configSetNameRequired": "Il nome del set di configurazione è obbligatorio", + "configSetLimitReached": "Puoi salvare fino a {{count}} set di configurazione", + "configSetCreated": "Set di configurazione creato", + "configSetRenamed": "Set di configurazione rinominato", + "configSetDeleted": "Set di configurazione eliminato", + "configSetSwitched": "Set di configurazione cambiato", + "defaultConfigSetName": "Predefinito", + "configSetFallbackName": "Set di configurazione {{index}}", + "provider": "Provider API", + "providerDescription": "Scegli la famiglia di provider e lo stile di protocollo generale per questo workspace.", + "apiKey": "API Key", + "enterApiKey": "Inserisci la tua API Key", + "apiKeyDescription": "Salvata localmente e limitata al set di configurazione attivo.", + "protocol": "Protocollo", + "baseUrl": "Base URL", + "model": "Modello", + "usePreset": "Usa preset", + "custom": "Personalizzato", + "moreModels": "Altri modelli", + "noModelsAvailable": "Nessun modello disponibile", + "selectProtocol": "Seleziona il protocollo compatibile per il servizio", + "enterOllamaUrl": "Inserisci l'URL del servizio Ollama compatibile con OpenAI", + "enterOpenAIUrl": "Inserisci l'URL del servizio compatibile con OpenAI", + "enterAnthropicUrl": "Inserisci l'URL del servizio compatibile con Anthropic", + "enterGeminiUrl": "Inserisci un Base URL compatibile con Gemini", + "enterModelId": "Inserisci l'ID del modello, ad es. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Seleziona un modello", + "contextWindow": "Finestra di contesto", + "contextWindowPlaceholder": "Rilevamento automatico", + "maxOutputTokens": "Token di output massimi", + "maxOutputTokensPlaceholder": "Rilevamento automatico", + "contextWindowHint": "Lascia vuoto per il rilevamento automatico. Sovrascrivi solo se il modello riporta limiti errati.", + "saveFailed": "Impossibile salvare le impostazioni. Riprova.", + "getStarted": "Inizia", + "saveSettings": "Salva impostazioni", + "openSettingsAction": "Apri impostazioni API", + "configRequiredActiveSet": "Il set di configurazione corrente non ha credenziali utilizzabili. Completa prima la configurazione nelle Impostazioni API.", + "testConnection": "Prova connessione", + "testingConnection": "Test in corso...", + "refreshModels": "Aggiorna modelli", + "refreshingModels": "Aggiornamento...", + "refreshModelsFailed": "Impossibile aggiornare i modelli. Controlla l'URL o lo stato del servizio.", + "manualModel": "Modello manuale", + "useDetectedModels": "Usa modelli rilevati", + "discoverLocalOllama": "Trova Ollama locale", + "discoveringLocalOllama": "Ricerca...", + "discoverLocalOllamaHint": "Inserisci prima il tuo endpoint Ollama. I modelli verranno recuperati automaticamente, e l'inserimento manuale è necessario solo se il rilevamento fallisce.", + "localOllamaDiscovered": "Trovato Ollama locale con {{count}} modello/i disponibile/i.", + "localOllamaNotFound": "Nessun servizio Ollama locale trovato. Avvialo con `ollama serve` e riprova.", + "localOllamaNoModels": "Trovato un servizio Ollama locale, ma al momento non espone alcun modello.", + "localOllamaModelUnavailable": "Trovato Ollama locale, ma il modello {{model}} non ha potuto completare una richiesta di inferenza minima.", + "localOllamaModelLoading": "Trovato Ollama locale, ma il modello è ancora in caricamento in memoria. I modelli di grandi dimensioni possono richiedere fino a un minuto.", + "enableThinking": "Abilita modalità ragionamento", + "enableThinkingHint": "Mostra il processo di ragionamento di Claude passo dopo passo. Questo offre maggiore trasparenza ma può aumentare l'uso di token.", + "enableThinkingOllamaHint": "La maggior parte dei modelli Ollama non supporta la modalità ragionamento. Abilita solo se il tuo modello la supporta esplicitamente.", + "testSuccess": "Connessione riuscita ({{ms}}ms)", + "testSuccessNeedSave": "Test di connessione superato. Salva le impostazioni prima di avviare una sessione.", + "testError": { + "missing_key": "L'API Key è obbligatoria", + "missing_base_url": "Il Base URL è obbligatorio per questo provider", + "unauthorized": "API Key non valida o non autorizzata", + "not_found": "Endpoint non trovato. Controlla il Base URL", + "rate_limited": "Limite di frequenza raggiunto o quota superata", + "server_error": "Errore del servizio. Riprova più tardi", + "network_error": "Errore di rete. Controlla la tua connessione", + "ollama_not_running": "Impossibile connettersi a Ollama. Assicurati che Ollama sia in esecuzione (ollama serve).", + "ollama_loading": "Ollama sta caricando il modello in memoria. I modelli di grandi dimensioni possono richiedere 30-120 secondi. Attendi e riprova.", + "unknown": "Connessione non riuscita" + }, + "guidance": { + "commonSetupsTitle": "Configurazioni comuni dei provider", + "commonSetupsHint": "Esamina o applica una configurazione consigliata", + "apply": "Applica", + "detectedBadge": "Rilevato", + "preferProviderTab": "Rilevato {{service}}. Questo servizio è di solito più facile da configurare dalla scheda dedicata {{provider}}.", + "protocolMismatch": "Rilevato {{service}}. Protocollo consigliato: {{recommendedProtocol}}.", + "protocolLooksGood": "Rilevato {{service}}. Il tuo protocollo attuale corrisponde già alla configurazione {{recommendedProtocol}} consigliata.", + "baseUrlHint": "Rilevato {{service}}. Configurazione {{recommendedProtocol}} consigliata: {{baseUrl}}. Modello di esempio: {{model}}.", + "genericBaseUrlHint": "Questo sembra un endpoint personalizzato compatibile con {{recommendedProtocol}}. Formato Base URL consigliato: {{baseUrl}}. Modello di esempio: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Servizio", + "protocol": "Protocollo", + "baseUrl": "Base URL", + "model": "Modello di esempio", + "notes": "Note", + "action": "Azione" + }, + "errorHints": { + "emptyProbeGeneric": "L'endpoint ha restituito una risposta di prova vuota. Questo di solito significa che il protocollo o il modello selezionato non è compatibile con il servizio.", + "emptyProbeDetected": "{{service}} ha restituito una risposta di prova vuota. Prova la configurazione {{recommendedProtocol}} consigliata e verifica l'ID del modello per quell'endpoint.", + "emptyProbePreferProvider": "{{service}} ha restituito una risposta di prova vuota. Prova la scheda dedicata {{provider}} invece di configurarlo come un generico endpoint personalizzato.", + "probeMismatchGeneric": "L'endpoint ha risposto, ma non nel formato previsto da questa prova. Questo di solito indica un'incompatibilità di protocollo o di modello.", + "probeMismatchDetected": "{{service}} ha risposto con un formato di prova inatteso. Prova la configurazione {{recommendedProtocol}} consigliata e verifica l'ID del modello per quell'endpoint." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Preferisci la scheda dedicata del provider OpenRouter a meno che tu non stia eseguendo il debug di un relay personalizzato." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Usa la modalità compatibile con OpenAI e copia l'esatto ID del modello dalla documentazione di DeepSeek." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Usa l'endpoint di coding con la modalità compatibile con Anthropic. Verifica l'esatto ID del modello di coding nella documentazione di Moonshot." + }, + "glm": { + "name": "GLM / BigModel (route Anthropic)", + "note": "Usa la route compatibile con Anthropic quando il percorso dell'endpoint include /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Preferisci la scheda dedicata del provider Ollama per il rilevamento e l'aggiornamento dei modelli locali." + }, + "gemini": { + "name": "Endpoint personalizzato Gemini", + "note": "Usa la modalità compatibile con Gemini e l'esatto ID del modello esposto dall'endpoint." + }, + "minimax": { + "name": "MiniMax", + "note": "Usa la modalità compatibile con OpenAI a meno che il tuo gateway MiniMax non documenti un altro protocollo." + }, + "genericOpenAI": { + "name": "Generico compatibile con OpenAI", + "note": "Usa questa opzione per relay, gateway o server di inferenza personalizzati che imitano l'API OpenAI." + } + } + }, + "newSet": "Nuovo set", + "createSetTitle": "Crea set di configurazione", + "saveAsTitle": "Salva come set di configurazione", + "createSetNamePlaceholder": "Inserisci il nome del set di configurazione", + "renameSetTitle": "Rinomina set di configurazione", + "unsavedBeforeActionPrompt": "Il set di configurazione corrente ha modifiche non salvate. Scegli un'azione prima di \"{{action}}\".", + "newSetDefaultName": "Nuovo set di configurazione", + "copyNameSuffix": "Copia", + "currentSetLabel": "Set corrente: ", + "unsavedBadge": "Non salvato", + "saveAndContinue": "Salva e continua", + "discardAndContinue": "Scarta e continua", + "currentSetName": "Nome del set", + "renameInlineHint": "Modifica direttamente. Premi Invio o sposta il focus per salvare automaticamente", + "switchSetLabel": "Passa a un altro set", + "switchSetPlaceholder": "Seleziona un set a cui passare", + "noOtherSetHint": "Nessun altro set disponibile", + "configSetMissing": "Set di configurazione non trovato", + "configSetCloneSourceMissing": "Impossibile trovare un set di configurazione da clonare", + "configSetSystemDeleteForbidden": "Il set di configurazione predefinito non può essere eliminato", + "configSetKeepOne": "Mantieni almeno un set di configurazione", + "diagnostic": { + "runDiagnostics": "Diagnostica connessione", + "runQuickDiagnostics": "Diagnostica rapida", + "runDeepDiagnostics": "Verifica di inferenza approfondita", + "running": "Diagnostica in corso...", + "step": { + "dns": "Risoluzione DNS", + "tcp": "Connessione TCP", + "tls": "Handshake TLS", + "auth": "Autenticazione API", + "model": "Verifica del modello" + }, + "status": { + "pending": "In attesa", + "running": "Verifica...", + "ok": "OK", + "fail": "Non riuscito", + "skip": "Saltato" + }, + "overallSuccess": "Tutte le verifiche superate ({{ms}}ms)", + "overallFail": "Diagnostica fallita a {{step}}", + "advisory": { + "not_deep_verified": "L'endpoint è raggiungibile e il modello selezionato è elencato, ma non è ancora stata eseguita alcuna inferenza dal vivo.", + "model_loading": "L'endpoint è raggiungibile, ma il modello potrebbe essere ancora in caricamento in memoria." + }, + "latency": "{{ms}}ms", + "fix": { + "dns_resolve_failed": "Impossibile risolvere l'hostname {{host}}. Verifica che l'URL sia corretto.", + "tcp_connect_failed": "Impossibile connettersi a {{host}}. Controlla le impostazioni di rete o del firewall.", + "tls_handshake_failed": "Handshake TLS fallito. Potrebbe essere causato da un problema di certificato o da un'interferenza del proxy.", + "missing_api_key": "L'API Key è mancante o non valida. Controlla la tua chiave.", + "auth_invalid_key": "L'API Key non è valida o è scaduta. Verifica che la chiave sia corretta.", + "auth_endpoint_not_found": "Endpoint API non trovato. Verifica che il Base URL sia corretto.", + "auth_request_failed": "Richiesta di autenticazione fallita. Controlla la tua configurazione.", + "model_network_error": "Impossibile raggiungere il modello {{model}}. Controlla le impostazioni di rete, VPN o proxy.", + "model_rate_limited": "Il modello {{model}} ha attualmente raggiunto il limite di frequenza o ha esaurito la quota. Riprova più tardi.", + "model_request_failed": "La richiesta del modello {{model}} è fallita lato provider. Riprova più tardi.", + "model_unavailable": "Il modello {{model}} non è disponibile. Verifica il nome del modello.", + "ollama_no_models_loaded": "L'endpoint è raggiungibile, ma non ha restituito alcun modello. Scarica prima un modello in Ollama.", + "ollama_model_not_listed": "Il modello {{model}} non è nell'elenco dei modelli dell'endpoint. Scegli un modello rilevato o passa all'inserimento manuale.", + "ollama_model_loading": "Il modello {{model}} potrebbe essere ancora in caricamento. Riprova la verifica approfondita tra poco.", + "model_cold_start": "Il modello potrebbe essere ancora in caricamento nella memoria GPU/CPU. I modelli di grandi dimensioni (7B+) possono richiedere 30-120 secondi al primo utilizzo. Riprova tra poco." + } + } + }, + "window": { + "minimize": "Riduci a icona", + "maximize": "Ingrandisci", + "restore": "Ripristina", + "close": "Chiudi" + }, + "sandbox": { + "title": "Ambiente sandbox", + "wslDesc": "Esegui i comandi nell'ambiente Linux WSL2 per un migliore isolamento e sicurezza su Windows.", + "limaDesc": "Esegui i comandi nella VM Lima per un migliore isolamento e sicurezza su macOS.", + "nativeDesc": "I comandi vengono eseguiti direttamente sul tuo sistema (modalità nativa Linux).", + "enableSandbox": "Abilita modalità sandbox", + "comingSoon": "In arrivo — in fase di sviluppo", + "readyStatus": "Sandbox pronta e in esecuzione", + "notReadyStatus": "Sandbox abilitata ma non completamente configurata", + "disabledStatus": "Sandbox disabilitata - i comandi vengono eseguiti direttamente sul sistema", + "enabledWillSetup": "Sandbox abilitata. Configurazione dell'ambiente...", + "disabled": "Modalità sandbox disabilitata", + "failedToLoad": "Impossibile caricare lo stato della sandbox", + "failedToSave": "Impossibile salvare le impostazioni della sandbox", + "statusRefreshed": "Stato aggiornato", + "checkFailed": "Impossibile verificare lo stato della sandbox", + "environmentStatus": "Stato dell'ambiente", + "checkStatus": "Verifica stato", + "platform": "Piattaforma", + "mode": "Modalità", + "status": "Stato", + "native": "Nativa", + "wslAvailable": "WSL2 disponibile", + "limaAvailable": "Lima disponibile", + "vmCreated": "Istanza VM creata", + "vmRunning": "VM in esecuzione", + "wslNotInstalled": "WSL2 non è installato", + "wslInstallHint": "Installa WSL2 per un migliore isolamento. Esegui questo comando in PowerShell come amministratore:", + "limaNotInstalled": "Lima non è installato", + "limaInstallHint": "Installa Lima per un migliore isolamento. Esegui questo comando nel Terminale:", + "linuxNative": "Linux esegue i comandi in modo nativo senza sandboxing aggiuntivo.", + "nodeInstalled": "Node.js installato con successo", + "nodeInstallFailed": "Impossibile installare Node.js", + "pythonInstalled": "Python installato con successo", + "pythonInstallFailed": "Impossibile installare Python", + "start": "Avvia", + "stop": "Arresta", + "limaStarted": "VM Lima avviata", + "limaStartFailed": "Impossibile avviare la VM Lima", + "limaStopped": "VM Lima arrestata", + "limaStopFailed": "Impossibile arrestare la VM Lima", + "settingUp": "Configurazione...", + "retrySetup": "Riprova configurazione", + "setupComplete": "Configurazione della sandbox completata", + "setupFailed": "Configurazione della sandbox fallita", + "helpText1": "La sandbox offre un ambiente isolato per eseguire i comandi in sicurezza.", + "helpText2": "WSL2 (Windows) o la VM Lima (macOS) è necessaria per il supporto completo della sandbox.", + "setupTitle": "Configurazione della sandbox", + "setupSubtitle": "Il primo avvio richiede la configurazione di un ambiente di esecuzione sicuro.", + "progressLabel": "Avanzamento", + "continuingNative": "Si prosegue con la modalità di esecuzione nativa.", + "retryLima": "Prova a riavviare Lima", + "retryingLima": "Riavvio di Lima...", + "continueNative": "Continua con la modalità nativa", + "configuredSuccess": "Sandbox configurata. Il codice può ora essere eseguito in sicurezza.", + "nativeFallbackSuccess": "Si usa l'ambiente di sistema nativo per l'esecuzione dei comandi.", + "footerWsl": "Sandbox WSL2", + "footerLima": "Sandbox Lima", + "footerNative": "Modalità nativa", + "configuring": "Configurazione...", + "syncFiles_one": "{{count}} file", + "syncFiles_other": "{{count}} file", + "syncExplanation": "Sincronizzazione dei file del progetto nella sandbox isolata per l'esecuzione sicura del codice.", + "syncFirst": "La prima sincronizzazione è più lenta,", + "syncFollowup": "le sincronizzazioni incrementali saranno più veloci.", + "checkingWsl": "Verifica dell'ambiente WSL2...", + "checkingLima": "Verifica dell'ambiente Lima...", + "creatingLima": "Creazione della VM Lima...", + "startingLima": "Avvio della VM Lima...", + "installingNode": "Installazione di Node.js...", + "installingPython": "Installazione di Python...", + "installingPip": "Installazione di pip...", + "installingDeps": "Installazione delle dipendenze delle skill...", + "setupFailedMessage": "Configurazione della sandbox fallita", + "sandboxDisabledMessage": "Sandbox disabilitata", + "nativeModeMessage": "Si usa la modalità di esecuzione nativa", + "wslNotDetectedMessage": "WSL2 non rilevato, si usa la modalità nativa", + "limaNotDetectedMessage": "Lima non rilevato, si usa la modalità nativa", + "nodeInstallFailedMessage": "Installazione di Node.js fallita", + "wslReadyMessage": "Sandbox WSL2 pronta", + "limaReadyMessage": "Sandbox Lima pronta", + "limaCreateFailedMessage": "Creazione della VM Lima fallita", + "limaStartFailedMessage": "Avvio della VM Lima fallito", + "setupDetailSandboxDisabled": "Si usa la modalità di esecuzione nativa (sandbox disabilitata nelle impostazioni)", + "setupDetailLinuxNative": "Linux esegue i comandi direttamente", + "setupDetailInstallWsl": "Installa WSL2 per un migliore isolamento della sandbox", + "setupDetailInstallNodeWsl": "Installa Node.js manualmente in WSL", + "setupDetailInstallNodeWslRuntime": "Installazione del runtime Node.js in {{distro}}", + "setupDetailInstallPythonWslRuntime": "Installazione del runtime Python in {{distro}}", + "setupDetailInstallPipWslRuntime": "Installazione del gestore di pacchetti Python in {{distro}}", + "setupDetailInstallDeps": "Installazione di markitdown, pypdf, pdfplumber per le skill PDF/PPTX", + "setupDetailInstallLima": "Installa Lima per un migliore isolamento della sandbox (brew install lima)", + "setupDetailCreateLima": "Il primo avvio richiede il download dell'immagine e può richiedere alcuni minuti", + "setupDetailStartLima": "L'avvio della VM può richiedere alcuni minuti", + "setupDetailInstallNodeLima": "Installazione del runtime Node.js nella VM Lima", + "setupDetailInstallPythonLima": "Installazione del runtime Python nella VM Lima", + "syncingFilesMessage": "Sincronizzazione dei file nella sandbox...", + "syncingSkillsMessage": "Configurazione delle skill...", + "syncReadyMessage": "Sandbox pronta", + "syncFailedMessage": "Sincronizzazione della sandbox fallita", + "syncDetailWsl": "Copia dei file del progetto nell'ambiente WSL isolato", + "syncDetailLima": "Copia dei file del progetto nell'ambiente Lima isolato", + "syncDetailSkills": "Copia delle skill integrate nella sandbox", + "syncDetailFallback": "Ripiego sulla modalità di accesso diretto (meno sicura)", + "syncDetailCompleted": "Sincronizzati {{count}} file" + }, + "mcp": { + "noConnectors": "Nessun connettore configurato", + "addConnector": "Aggiungi un connettore per abilitare gli strumenti MCP", + "toolsAvailable": "{{count}} strumento disponibile", + "toolsAvailable_plural": "{{count}} strumenti disponibili", + "connected": "Connesso", + "notConnected": "Non connesso", + "connecting": "Connessione...", + "failed": "Connessione non riuscita", + "chromeHint": "Una nuova finestra di debug di Chrome si aprirà automaticamente se la porta non è disponibile", + "quickAddPresets": "Preset di aggiunta rapida", + "show": "Mostra", + "hide": "Nascondi", + "addCustomConnector": "Aggiungi connettore personalizzato", + "configure": "Configura", + "added": "Aggiunto", + "requiresToken": "Richiede token", + "editConnector": "Modifica connettore", + "addConnectorTitle": "Aggiungi connettore personalizzato", + "name": "Nome", + "namePlaceholder": "Chrome MCP Server", + "type": "Tipo", + "typeStdioLocal": "STDIO (locale)", + "typeSseRemote": "SSE (remoto)", + "typeStreamableHttp": "HTTP (streamable)", + "command": "Comando", + "commandPlaceholder": "npx", + "arguments": "Argomenti", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Argomenti separati da spazi", + "url": "URL", + "enableConnector": "Abilita questo connettore", + "presetAlreadyConfigured": "Il connettore \"{{name}}\" è già configurato", + "envValuePlaceholder": "Inserisci valore", + "removeVar": "Rimuovi", + "loadServersFailed": "Impossibile caricare i connettori", + "saveServerFailed": "Impossibile salvare il connettore", + "deleteServerFailed": "Impossibile eliminare il connettore", + "deleteConnectorConfirm": "Eliminare questo connettore?", + "commandRequired": "Il comando è obbligatorio", + "urlRequired": "L'URL è obbligatorio", + "toolCount": "{{count}} strumenti", + "callCount": "{{count}} chiamate" + }, + "credentials": { + "envVars": "Variabili d'ambiente", + "enterEnvVar": "Inserisci il nome della variabile d'ambiente (ad es. NOTION_TOKEN):", + "usedForTokens": "Usata per token e segreti (ad es. NOTION_TOKEN)", + "noEnvVars": "Nessuna variabile d'ambiente configurata" + }, + "skills": { + "storagePathHint": "Scegli dove risiedono le skill personalizzate e come l'app le aggiorna.", + "builtinSkillsDesc": "Le skill integrate sono fornite con l'app e possono essere attivate quando necessario.", + "pluginsTitle": "Plugin e importazioni", + "pluginsDesc": "Sfoglia i plugin del marketplace o importa skill personalizzate da una cartella locale.", + "title": "📦 Skill", + "description": "Le skill estendono le capacità di Claude con conoscenze e strumenti specializzati.", + "builtinSkills": "Skill integrate", + "customSkills": "Skill personalizzate", + "noCustomSkills": "Nessuna skill personalizzata installata", + "installSkillsDesc": "Installa skill per estendere le capacità di Claude", + "browsePlugins": "Sfoglia plugin", + "pluginListTitle": "Sfoglia il marketplace di plugin di Claude", + "pluginSkillCount": "Skill installabili: {{count}}", + "pluginComponents": "Componenti: skill {{skills}} · comandi {{commands}} · agent {{agents}} · hook {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "I dettagli dei componenti saranno disponibili dopo l'installazione.", + "pluginInstall": "Installa", + "pluginInstalled": "Installato", + "pluginInstallSuccess": "Plugin \"{{name}}\" installato con successo", + "pluginInstallFailed": "Impossibile installare il plugin", + "pluginNoSkills": "Questo plugin non ha skill installabili nella V1", + "pluginNoComponents": "Questo plugin non ha componenti caricabili", + "pluginManage": "Gestisci", + "pluginEnable": "Abilita", + "pluginDisable": "Disabilita", + "pluginUninstall": "Disinstallare il plugin \"{{name}}\"?", + "pluginManageUninstall": "Disinstalla", + "pluginUninstalled": "Il plugin \"{{name}}\" è stato disinstallato", + "pluginComponentHooksDisabledByDefault": "Questo plugin include hook. Gli hook sono disabilitati per impostazione predefinita e possono essere abilitati nelle impostazioni di gestione dopo l'installazione.", + "pluginComponentMcpDisabledByDefault": "Questo plugin include MCP. MCP è disabilitato per impostazione predefinita e può essere abilitato nelle impostazioni di gestione dopo l'installazione.", + "pluginAppliedInRuntime": "Le impostazioni del plugin sono attualmente applicate in fase di runtime", + "pluginDisabled": "Il plugin è attualmente disabilitato", + "noPluginsFound": "Nessun plugin disponibile", + "storagePathTitle": "Directory di archiviazione delle skill", + "storagePathUnavailable": "Percorso di archiviazione non disponibile", + "selectStoragePath": "Seleziona directory", + "openStoragePath": "Apri directory", + "refreshSkills": "Aggiorna skill", + "storagePathUpdated": "Archiviazione aggiornata. Migrate {{migrated}} skill, saltate {{skipped}}", + "storagePathUpdateFailed": "Impossibile aggiornare il percorso di archiviazione delle skill", + "storagePathOpenFailed": "Impossibile aprire il percorso di archiviazione delle skill", + "storagePathFallback": "Si è tornati alla directory predefinita delle skill. Verifica il percorso configurato.", + "storageWatcherError": "Errore del watcher della directory delle skill: {{message}} (ripiego sul polling abilitato).", + "installSkillFromFolder": "Installa skill da cartella", + "deleteSkill": "Eliminare la skill \"{{name}}\"?", + "failedToLoad": "Impossibile caricare le skill", + "failedToInstall": "Impossibile installare la skill", + "failedToDelete": "Impossibile eliminare la skill", + "failedToToggle": "Impossibile attivare/disattivare la skill" + }, + "logs": { + "actionsTitle": "Azioni sui log", + "title": "Log dell'applicazione", + "description": "Visualizza ed esporta pacchetti diagnostici per il debug. I log ruotano automaticamente dopo 10MB e le esportazioni includono anche i riassunti recenti di sessioni ed errori.", + "inventoryDescription": "Inventario corrente dei log e spazio occupato.", + "recentDescription": "Log recenti dell'applicazione disponibili per l'ispezione. Puoi comunque esportare un pacchetto diagnostico anche quando non esiste ancora alcun file di log.", + "directoryDescription": "Posizione corrente su disco dei log dell'applicazione.", + "actionsDescription": "Esporta un pacchetto diagnostico, mostra la directory dei log o cancella i file di log.", + "enableDevLogs": "Abilita log per sviluppatori", + "enableDevLogsDesc": "Registra log dettagliati per il debug. Disabilita per ridurre l'uso del disco.", + "devLogsEnabled": "Log per sviluppatori abilitati", + "devLogsDisabled": "Log per sviluppatori disabilitati", + "toggleFailed": "Impossibile attivare/disattivare i log per sviluppatori", + "logFiles": "File di log", + "totalSize": "Dimensione totale", + "noLogFiles": "Nessun file di log trovato", + "logsDirectory": "Directory dei log:", + "exportZip": "Esporta diagnostica", + "openFolder": "Apri cartella", + "clearAll": "Cancella tutto", + "clearConfirm": "Sei sicuro di voler cancellare tutti i file di log? Questa azione non può essere annullata.", + "exportSuccess": "Diagnostica esportata con successo in {{path}}", + "clearSuccess": "Cancellati {{count}} file di log", + "exportFailed": "Impossibile esportare i log", + "clearFailed": "Impossibile cancellare i log", + "helpText1": "Il pacchetto diagnostico esportato include i log dell'app, uno snapshot di runtime con dati oscurati e riassunti di sessioni/errori contenenti solo metadati, senza il corpo dei messaggi per impostazione predefinita.", + "helpText2": "Condividere quel pacchetto di solito ci consente di individuare i problemi molto più rapidamente, che provengano dall'interfaccia, dall'esecuzione degli strumenti o dall'ambiente locale." + }, + "sidebar": { + "recents": "Recenti", + "expandToView": "Espandi per vedere le attività", + "noTasks": "Nessuna attività ancora", + "noTasksHint": "Avvia una nuova chat per iniziare a creare, fare ricerche o modificare file.", + "search": "Cerca conversazioni...", + "deleteAll": "Elimina tutte le conversazioni", + "localTasks": "Queste attività vengono eseguite localmente e non sono sincronizzate tra i dispositivi.", + "apiConfigured": "API configurata", + "apiNotConfigured": "API non configurata", + "user": "Utente", + "newTask": "Nuova chat", + "newTaskHint": "Avvia una nuova conversazione", + "today": "Oggi", + "yesterday": "Ieri", + "previousWeek": "Ultimi 7 giorni", + "older": "Più vecchie", + "settings": "Impostazioni", + "themeToggle": "Cambia tema", + "manage": "Gestisci", + "selectAll": "Seleziona tutto", + "deselectAll": "Deseleziona tutto", + "nSelected": "{{count}} selezionate", + "batchDeleteConfirm": "Eliminare {{count}} conversazioni? Questa operazione non può essere annullata.", + "cancel": "Annulla", + "confirmDelete": "Elimina" + }, + "chat": { + "sendMessage": "Invia messaggio", + "stop": "Arresta", + "processing": "Elaborazione...", + "typeMessage": "Scrivi un messaggio...", + "loadingConversation": "Caricamento della conversazione...", + "startConversation": "Avvia la conversazione", + "startFailed": "Impossibile avviare la sessione. Riprova.", + "disclaimer": "Open Cowork è basato sull'IA e può commettere errori. Verifica sempre le risposte.", + "noModel": "Nessun modello", + "connectorCount_one": "{{count}} connettore", + "connectorCount_other": "{{count}} connettori" + }, + "context": { + "progress": "Avanzamento", + "artifacts": "Artefatti", + "context": "Contesto", + "workingDirectory": "Directory di lavoro", + "toolsUsed": "Strumenti usati", + "mcpConnectors": "Connettori MCP", + "copied": "Copiato!", + "noToolsUsedYet": "Nessuno strumento usato finora", + "toolsUsedLabel": "Strumenti usati:", + "noFolderSelected": "Nessuna cartella selezionata", + "expandPanel": "Espandi pannello", + "collapsePanel": "Comprimi pannello", + "queuedMessages": "Messaggi in coda: {{count}}", + "stepsWillShow": "I passi appariranno man mano che l'attività procede.", + "noArtifactsYet": "Nessun artefatto ancora", + "revealFailed": "Impossibile individuare il file. Verifica che il percorso esista.", + "fileCreated": "File creato", + "callNumber": "Chiamata #{{number}}", + "input": "Input:", + "output": "Output:", + "tokenUsage": "Utilizzo dei token", + "inputTokens": "Input", + "outputTokens": "Output", + "totalTokens": "Totale", + "changeDir": "Cambia directory", + "changeDirFailed": "Impossibile cambiare directory", + "copyPath": "Copia percorso", + "openInFileManager": "Apri nel file manager", + "contextUsage": "Utilizzo del contesto", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Richiesta", + "queued": "In coda", + "cancelled": "Annullato", + "emptyMessage": "Messaggio vuoto", + "emptyText": "(testo vuoto)", + "copyMessage": "Copia messaggio", + "revealInFolder": "Mostra nella cartella", + "pastedContentAlt": "Contenuto incollato", + "taskProgress": "Avanzamento dell'attività", + "noQuestions": "Nessuna domanda", + "question": "Domanda", + "thinking": "Ragionamento", + "executionTime": "Tempo di esecuzione: {{time}}" + }, + "schedule": { + "createTitle": "Crea pianificazione", + "editTitle": "Modifica pianificazione", + "autoTitleLabel": "Titolo automatico (usato per identificare le sessioni)", + "autoTitleChangedHint": "Prompt modificato. Il titolo verrà rigenerato dopo il salvataggio.", + "autoTitleUnchangedHint": "Se il prompt rimane invariato, il titolo esistente verrà mantenuto.", + "autoTitleEditingChanged": "Dopo il salvataggio, il titolo verrà rigenerato dal prompt con il prefisso [Scheduled Task].", + "autoTitleEditingUnchanged": "Dopo il salvataggio, il titolo verrà generato con il prefisso [Scheduled Task].", + "autoTitleCreating": "Dopo il salvataggio, il titolo verrà generato con il prefisso [Scheduled Task] e un riassunto del modello.", + "promptPlaceholder": "Prompt da eseguire automaticamente all'orario pianificato", + "cwdPlaceholder": "Directory di lavoro (predefinita al workspace corrente)", + "executionTime": "Tempistica di esecuzione", + "executionTimeHint": "Le nuove pianificazioni preferiscono la tempistica a più fasce orarie; le regole a intervallo legacy possono ancora essere modificate.", + "enabled": "Abilitata", + "mode": "Modalità di esecuzione", + "weekday": "Giorni della settimana", + "weekdayPlaceholder": "Seleziona i giorni della settimana", + "times": "Fasce orarie", + "timePlaceholder": "Seleziona gli orari", + "legacyIntervalNotice": "Questa attività proviene da una regola legacy a intervallo fisso e manterrà quella modalità una volta salvata.", + "onceTimeLabel": "Scegli l'orario di esecuzione una tantum", + "legacyStartTimeLabel": "Scegli l'orario di inizio per la regola a intervallo legacy", + "dailyHint": "Esegui automaticamente a questi orari ogni giorno.", + "weeklyHint": "Esegui automaticamente nei giorni della settimana e nelle fasce orarie selezionati.", + "saveChanges": "Salva modifiche", + "createTask": "Crea attività", + "cancelEdit": "Annulla modifica", + "listHint": "Disabilitare blocca solo le esecuzioni automatiche future. Le sessioni già avviate devono essere arrestate manualmente dall'elenco delle sessioni.", + "empty": "Nessuna pianificazione ancora", + "loadFailed": "Impossibile caricare le pianificazioni", + "promptRequired": "Inserisci il prompt da eseguire", + "dailyTimesRequired": "Seleziona almeno una fascia oraria giornaliera", + "weeklyTimesRequired": "Seleziona almeno una fascia oraria settimanale", + "weekdayRequired": "Seleziona almeno un giorno della settimana", + "invalidTime": "Inserisci un orario di esecuzione valido", + "nextRunCalculationFailed": "La regola corrente non può calcolare il prossimo orario di esecuzione", + "futureTimeRequired": "L'orario di esecuzione deve essere successivo a ora. Usa Esegui ora se vuoi attivarla immediatamente.", + "taskMissing": "L'attività non esiste più o è stata eliminata", + "updated": "Pianificazione aggiornata", + "created": "Pianificazione creata", + "saveFailed": "Impossibile salvare la pianificazione", + "toggleFailed": "Impossibile cambiare lo stato della pianificazione", + "runNowSuccess": "Esecuzione immediata attivata", + "runNowFailed": "Impossibile eseguire immediatamente", + "noSessionToStop": "Questa attività non ha una sessione di esecuzione da arrestare", + "sessionNotRunning": "Questa attività non ha attualmente una sessione in esecuzione", + "stopSent": "Comando di arresto inviato", + "stopFailed": "Impossibile arrestare l'esecuzione", + "deleteConfirm": "Eliminare la pianificazione \"{{title}}\"?", + "deleted": "Pianificazione eliminata", + "deleteFailed": "Impossibile eliminare la pianificazione", + "statusRunning": "In esecuzione", + "statusFinished": "Terminata", + "statusUnknown": "Sconosciuto", + "statusNone": "Nessuno", + "taskEnabled": "Abilitata", + "taskDisabled": "Disabilitata", + "nextRun": "Prossima esecuzione: {{value}}", + "nextRunNone": "Prossima esecuzione: Nessuna", + "strategy": "Regola di pianificazione: {{value}}", + "lastRun": "Ultima esecuzione: {{value}}", + "lastRunNever": "Ultima esecuzione: Non ancora eseguita", + "recentSession": "Ultima sessione: {{value}}", + "sessionStatus": "Stato della sessione: {{value}}", + "cwd": "Directory: {{value}}", + "lastError": "Ultimo errore: {{value}}", + "disable": "Disabilita", + "enable": "Abilita", + "runNow": "Esegui ora", + "stopExecution": "Arresta esecuzione", + "edit": "Modifica", + "delete": "Elimina", + "stopRunTitleActive": "Arresta l'ultima sessione di esecuzione per questa attività", + "stopRunTitleIdle": "Questa attività non ha attualmente una sessione in esecuzione", + "repeatEveryMinute_one": "Ogni {{count}} minuto", + "repeatEveryMinute_other": "Ogni {{count}} minuti", + "repeatEveryHour_one": "Ogni {{count}} ora", + "repeatEveryHour_other": "Ogni {{count}} ore", + "repeatEveryDay_one": "Ogni {{count}} giorno", + "repeatEveryDay_other": "Ogni {{count}} giorni", + "ruleDaily": "Ogni giorno alle {{times}}", + "ruleWeekly": "Ogni settimana il {{weekdays}} alle {{times}}", + "ruleOnce": "Una tantum", + "previewNextRun": "Prossima esecuzione prevista: {{value}}", + "previewSelectValidTime": "Scegli un orario di esecuzione valido", + "previewSelectAtLeastOne": "Scegli almeno una fascia oraria valida", + "previewAutoFind": "Il sistema sceglierà automaticamente il prossimo orario di esecuzione: {{value}}", + "weekdayMonday": "Lun", + "weekdayTuesday": "Mar", + "weekdayWednesday": "Mer", + "weekdayThursday": "Gio", + "weekdayFriday": "Ven", + "weekdaySaturday": "Sab", + "weekdaySunday": "Dom", + "modeOnce": "Una tantum", + "modeDaily": "Giornaliera", + "modeWeekly": "Settimanale", + "repeatUnitMinute": "Minuto", + "repeatUnitHour": "Ora", + "repeatUnitDay": "Giorno", + "unknownWeekday": "Sconosciuto", + "pickerEditTimes": "Modifica fasce orarie", + "pickerAnyHHmm": "Puoi inserire qualsiasi valore `HH:mm`", + "pickerSelectedCount_one": "{{count}} selezionato", + "pickerSelectedCount_other": "{{count}} selezionati", + "pickerAdd": "Aggiungi", + "pickerSelectedTimes": "Orari selezionati", + "pickerNone": "Nessuna fascia oraria selezionata ancora", + "pickerSuggestions": "Suggerimenti" + }, + "remote": { + "title": "Controllo remoto", + "statusRunning": "In esecuzione. Disponibile tramite Feishu.", + "statusStopped": "Arrestato", + "startService": "Avvia servizio", + "stopService": "Arresta servizio", + "activeSessions": "Sessioni attive", + "authorizedUsers": "Utenti autorizzati", + "pendingApprovals": "Approvazioni in sospeso", + "pairingRequests": "Richieste di abbinamento in attesa di approvazione", + "unknownUser": "Utente sconosciuto", + "pairingCode": "Codice di abbinamento", + "approve": "Approva", + "stepFeishu": "Configurazione Feishu", + "stepConnection": "Connessione", + "stepAdvanced": "Avanzate", + "feishuTitle": "Configurazione del bot Feishu", + "feishuDesc": "Crea un'app nella Feishu Open Platform, poi inserisci qui le credenziali.", + "dmPolicy": "Politica di autorizzazione dei messaggi diretti", + "policyPairing": "Verifica con abbinamento", + "policyPairingDesc": "Gli utenti devono inserire un codice di abbinamento.", + "policyAllowlist": "Lista consentiti", + "policyAllowlistDesc": "Sono ammessi solo utenti specifici.", + "policyOpen": "Accesso aperto", + "policyOpenDesc": "Chiunque può usare il bot.", + "openFeishu": "Apri la Feishu Open Platform", + "slackTitle": "Configurazione del bot Slack", + "slackDesc": "Crea un'app Slack, installala nel tuo workspace, poi inserisci qui le credenziali.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (per Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Connettiti verso Slack. Non è richiesto alcun IP pubblico.", + "openSlack": "Apri la Slack API", + "connectionTitle": "Modalità di connessione", + "connectionDesc": "Scegli come i server Feishu comunicano con il tuo computer.", + "longConnection": "Modalità connessione persistente", + "recommended": "Consigliato", + "longConnectionDesc": "L'app si connette verso i server Feishu. Non è richiesto alcun IP pubblico o ngrok.", + "noPublicInternet": "Nessuna esposizione a internet pubblico", + "outOfBox": "Funziona da subito", + "stableReliable": "Stabile e affidabile", + "webhookMode": "Modalità webhook", + "webhookDesc": "Feishu invia i messaggi al tuo server. È richiesto un indirizzo raggiungibile pubblicamente.", + "localWebhookUrl": "URL del webhook locale", + "useBuiltInNgrok": "Usa ngrok integrato", + "ngrokHelpPrefix": "Ottienine uno gratuitamente da", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunnel connesso", + "longConnectionHint": "Nella Feishu Open Platform, vai su Eventi e callback > Configurazione eventi e imposta la modalità di sottoscrizione su connessione persistente.", + "advancedTitle": "Impostazioni avanzate", + "advancedDesc": "Personalizza il comportamento del controllo remoto.", + "defaultWorkingDirectory": "Directory di lavoro predefinita", + "defaultWorkingDirectoryPlaceholder": "Per esempio: C:\\Users\\tuo-nome\\Progetti", + "defaultWorkingDirectoryHint": "Questa è la directory predefinita per i comandi dell'IA. Puoi anche sovrascriverla in un messaggio con `[cwd:path]`.", + "gatewayPort": "Porta del servizio", + "autoApproveSafeTools": "Approva automaticamente gli strumenti sicuri", + "autoApproveSafeToolsDesc": "Consenti automaticamente gli strumenti sicuri come la lettura di file e le operazioni del browser.", + "saveConfig": "Salva configurazione", + "authorizedUsersTitle": "Utenti autorizzati ({{count}})", + "revokeAccess": "Revoca accesso", + "quickStart": "Avvio rapido", + "quickStartStep1": "Crea un'app nella Feishu Open Platform e aggiungi la capacità Bot.", + "quickStartStep2": "Copia l'App ID e l'App Secret nei campi sopra.", + "quickStartStep3": "Abilita questi permessi nelle impostazioni dei permessi:", + "quickStartStep4": "Nella Configurazione eventi di Feishu, scegli la modalità eventi a connessione persistente.", + "quickStartStep5Prefix": "Sottoscrivi l'evento", + "quickStartStep5Suffix": ".", + "quickStartStep6": "Pubblica l'app, poi clicca su Avvia servizio.", + "started": "Controllo remoto avviato", + "stopped": "Controllo remoto arrestato", + "actionFailed": "Operazione non riuscita", + "configSaved": "Configurazione salvata", + "saveFailed": "Impossibile salvare la configurazione", + "pairingApproved": "Abbinamento approvato", + "approveFailed": "Impossibile approvare l'abbinamento", + "reject": "Rifiuta", + "pairingRejected": "Abbinamento rifiutato", + "rejectFailed": "Impossibile rifiutare l'abbinamento", + "pairingGuideTitle": "Guida all'abbinamento", + "pairingGuideStep1": "Apri Feishu e trova il bot", + "pairingGuideStep2": "Invia un messaggio qualsiasi per avviare l'abbinamento", + "pairingGuideStep3": "Approva la richiesta di abbinamento qui sotto", + "pairingGuideStep4": "Fatto — l'utente può ora chattare con il bot", + "waitingForPairing": "In attesa che gli utenti avviino l'abbinamento...", + "expiresIn": "Scade tra {{time}}", + "userRemoved": "Utente rimosso", + "revokeFailed": "Impossibile rimuovere l'utente", + "copied": "Copiato" + }, + "time": { + "now": "ora" + }, + "permission": { + "permissionRequired": "Permesso richiesto", + "tool": "Strumento:", + "input": "Input:", + "warning": "Questa azione può modificare il tuo sistema. Esamina con attenzione.", + "deny": "Nega", + "allow": "Consenti", + "alwaysAllow": "Consenti sempre questo strumento", + "useTool": "Usa lo strumento {{toolName}}", + "toolDescriptions": { + "write": "Scrivere su file nel tuo sistema", + "edit": "Modificare file esistenti nel tuo sistema", + "bash": "Eseguire comandi della shell", + "webFetch": "Recuperare dati dal web", + "webSearch": "Cercare sul web", + "read_file": "Leggere file nel workspace", + "write_file": "Scrivere file nel workspace", + "edit_file": "Modificare file nel workspace", + "list_directory": "Elencare il contenuto delle directory nel workspace", + "execute_command": "Eseguire comandi della shell nel workspace", + "glob": "Cercare file per pattern", + "grep": "Cercare nel contenuto dei file" + } + }, + "sudo": { + "title": "Permesso di amministratore richiesto", + "description": "Il seguente comando richiede privilegi di amministratore:", + "passwordLabel": "Password", + "passwordPlaceholder": "Inserisci la tua password", + "cancel": "Annulla", + "execute": "Esegui", + "warning": "La tua password verrà usata solo per questo comando e non verrà memorizzata." + }, + "errorBoundary": { + "title": "Qualcosa è andato storto", + "description": "Si è verificato un errore imprevisto nell'applicazione. Puoi provare a recuperare cliccando il pulsante qui sotto.", + "details": "Dettagli dell'errore", + "retry": "Riprova" + } +} diff --git a/src/renderer/i18n/locales/nl.json b/src/renderer/i18n/locales/nl.json new file mode 100644 index 00000000..fb401f7c --- /dev/null +++ b/src/renderer/i18n/locales/nl.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Opslaan", + "cancel": "Annuleren", + "delete": "Verwijderen", + "edit": "Bewerken", + "add": "Toevoegen", + "close": "Sluiten", + "loading": "Laden...", + "error": "Fout", + "success": "Gelukt", + "saving": "Opslaan...", + "saved": "Succesvol opgeslagen!", + "sure": "Weet je het zeker?", + "yes": "Ja", + "no": "Nee", + "enable": "Inschakelen", + "disable": "Uitschakelen", + "install": "Installeren", + "optional": "optioneel", + "appLogoAlt": "Open Cowork-logo", + "pastedImageAlt": "Geplakt {{index}}" + }, + "welcome": { + "title": "Waarmee kan ik je vandaag helpen?", + "placeholder": "Beschrijf wat je wilt doen...", + "createFile": "Een bestand maken", + "crunchData": "Gegevens verwerken", + "organizeFiles": "Bestanden organiseren", + "checkEmails": "E-mails controleren", + "searchPapers": "Papers zoeken en samenvatten", + "summarizePapersToNotion": "Papers samenvatten naar Notion", + "selectWorkingFolder": "Werkmap selecteren (vereist)", + "selectWorkingFolderFailed": "Werkmap selecteren mislukt", + "attachFiles": "Bestanden bijvoegen", + "letsGo": "Aan de slag", + "starting": "Starten...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Open Cowork-logo", + "pastedImageAlt": "Geplakt {{index}}", + "quickPromptCreate": "Maak een nieuw bestand voor me", + "quickPromptCrunch": "Help me gegevens te analyseren en te verwerken", + "quickPromptOrganize": "Help me mijn bestanden en mappen te organiseren", + "quickPromptEmail": "Help me Chrome te gebruiken om de nieuwe e-mails van de afgelopen drie dagen in mijn Gmail en NetEase Mail samen te vatten. Let op: de opgeslagen accounts bevatten al het volledige e-mailachtervoegsel. Als het e-mailachtervoegsel dus al vooraf is ingevuld op de webpagina of in een schermafbeelding, voer het dan niet opnieuw in, om aanmeldfouten te voorkomen. Controleer ook eerst of de bijbehorende accountgegevens zijn opgeslagen. Als de gebruikersnaam of het wachtwoord voor een bepaalde e-maildienst niet is opgeslagen, kun je dat e-mailaccount overslaan.", + "quickPromptPapers": "Help me Chrome te gebruiken om papers gerelateerd aan [Agent] van de afgelopen twee dagen te zoeken en samen te vatten.\nBronwebsites:\n1. HuggingFace Daily Papers. Voeg de steminformatie en een korte samenvatting toe. Let op: in het weekend zijn er mogelijk geen papers, dus je moet wellicht de papers van eerdere dagen controleren. Zorg er echter voor dat er in totaal twee dagen zijn.", + "quickPromptNotion": "Help me drie representatieve overzichtspapers gerelateerd aan agents te onderzoeken en voeg ze toe onder een Notion-pagina met de titel \"Agent Survey\". Vermeld voor elke paper de titel, auteurs, publicatieplaats/-jaar en een korte samenvatting van de belangrijkste bijdragen.", + "apiNotConfigured": "API nog niet geconfigureerd. Ga naar Instellingen om je API-provider en -sleutel in te stellen.", + "goToSettings": "Naar Instellingen" + }, + "settings": { + "title": "Instellingen", + "apiSettings": "API-instellingen", + "apiSettingsDesc": "API-provider en -sleutel configureren", + "sandbox": "Sandbox", + "sandboxDesc": "Geïsoleerde uitvoeromgeving", + "connectors": "MCP-connectoren", + "connectorsDesc": "Browser- en toolintegraties", + "skills": "Vaardigheden", + "skillsDesc": "Aangepaste vaardigheden beheren", + "memory": "Geheugen", + "memoryDesc": "Langetermijngeheugen en werkruimte-ervaring beheren", + "schedule": "Planningen", + "scheduleDesc": "Wekkergestuurde promptautomatisering", + "remote": "Bediening op afstand", + "remoteDesc": "Gebruik Open Cowork vanuit Feishu en andere kanalen", + "logs": "Logboeken", + "logsDesc": "Applicatielogboeken bekijken en exporteren", + "panelDesc": "Configureer je werkruimte, tools en accountgedrag.", + "general": "Algemeen", + "generalDesc": "Weergave, taal en voorkeuren" + }, + "general": { + "appearance": "Weergave", + "theme": "Thema", + "themeLight": "Licht", + "themeDark": "Donker", + "themeSystem": "Systeem", + "language": "Taal" + }, + "memory": { + "title": "Geheugen", + "description": "Het globale kerngeheugen bewaart stabiele voorkeuren, terwijl het werkruimte-ervaringsgeheugen projectspecifieke kennis over meerdere beurten bewaart.", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "toggleHint": "Dit uitschakelen stopt toekomstige verwerking en automatische ophaling, maar behoudt bestaande records.", + "enableAction": "Geheugen inschakelen", + "disableAction": "Geheugen uitschakelen", + "enabledStatus": "Geheugen is ingeschakeld", + "disabledStatus": "Geheugen is uitgeschakeld", + "coreCount": "Kernvermeldingen", + "sessionCount": "Sessiesamenvattingen", + "chunkCount": "Ervaringsfragmenten", + "workspaceCount": "Werkruimten", + "latestIngestion": "Laatste verwerking", + "noIngestionYet": "Nog geen verwerking geregistreerd", + "health": "Gezondheid", + "healthy": "Gezond, zonder recente fouten", + "failedSessions": "Bij {{count}} sessie(s) is de laatste verwerking mislukt", + "searchTitle": "Zoeken en inspecteren", + "searchDescription": "Zoek in het geheugen op basis van de huidige werkruimte of globaal, en inspecteer vervolgens samenvattingen en ruwe fragmenten.", + "searchPlaceholder": "Zoek voorkeuren, eerdere implementaties, beslissingen...", + "searchAction": "Zoeken", + "scopeWorkspace": "Huidige werkruimte", + "scopeAll": "Alle geheugen", + "scopeGlobal": "Alleen kerngeheugen", + "currentWorkspace": "Huidige werkruimte", + "groupCore": "Kerngeheugen", + "groupSessions": "Sessiesamenvattingen", + "groupChunks": "Fragmenttreffers", + "detailTitle": "Detail", + "noSelection": "Selecteer een resultaat om de volledige samenvatting en het bronfragment te inspecteren.", + "noResults": "Geen resultaten", + "maintenanceTitle": "Onderhoud", + "maintenanceDescription": "Bouw het ervaringsgeheugen voor de huidige werkruimte opnieuw op of wis opgeslagen gegevens.", + "rebuildWorkspace": "Huidige werkruimte opnieuw opbouwen", + "clearWorkspace": "Huidige werkruimte wissen", + "clearCore": "Kerngeheugen wissen", + "rebuildConfirm": "Ervaringsgeheugen voor de huidige werkruimte opnieuw opbouwen? Hiermee worden historische sessies in die werkruimte opnieuw gescand.", + "clearWorkspaceConfirm": "Ervaringsgeheugen voor de huidige werkruimte wissen? Dit kan niet ongedaan worden gemaakt.", + "clearCoreConfirm": "Alle globale kerngeheugen wissen? Dit kan niet ongedaan worden gemaakt.", + "rebuildSuccess": "Werkruimtegeheugen opnieuw opgebouwd", + "clearWorkspaceSuccess": "Werkruimtegeheugen gewist", + "clearCoreSuccess": "Kerngeheugen gewist", + "runtimeTitle": "Runtime-configuratie", + "runtimeDescription": "Standaard erft dit de momenteel actieve API-configuratie. Hier stem je vooral de navigatiediepte, embedding en de map op schijf af.", + "runtimeSaved": "Geheugen-runtime-configuratie opgeslagen", + "saveRuntime": "Runtime-configuratie opslaan", + "storageRoot": "Opslaghoofdmap", + "noWorkspace": "Nog geen werkruimte", + "maxNavSteps": "Navigatiestappen", + "ingestionConcurrency": "Opnieuw opbouwen gelijktijdigheid", + "useEmbedding": "Embedding-ophaling inschakelen", + "evalEnabled": "Evaluatie met echt model inschakelen", + "evalArtifactsRoot": "Map met evaluatieartefacten", + "evalMaxRounds": "Evaluatierondes", + "promptIterationRounds": "Prompt-iteratierondes", + "llmConfig": "Geheugen-LLM", + "embeddingConfig": "Embedding", + "inheritActive": "Actieve API erven", + "modelOverride": "Modeloverschrijving", + "baseUrlOverride": "Base URL-overschrijving", + "apiKeyOverride": "API Key-overschrijving", + "allSources": "Alle bronnen", + "groupRawSessions": "Ruwe sessies", + "sourceFile": "Bronbestand", + "inspectSession": "Sessiegeheugen inspecteren", + "inspectSessionHint": "Selecteer een sessie of fragment uit de bovenstaande resultaten om het te inspecteren.", + "revealInFinder": "Tonen in Finder", + "rebuildAll": "Alle geheugen opnieuw opbouwen", + "rebuildAllConfirm": "Hiermee wordt alle geheugen gewist en opnieuw opgebouwd. Doorgaan?", + "rebuildAllSuccess": "Alle geheugen opnieuw opgebouwd: {{sessionCount}} sessie(s), {{workspaceCount}} bronwerkruimte(n)", + "filesTitle": "Ruwe-bestandsviewer", + "filesDescription": "Bekijk de core / unified experience / session_state / eval-artefacten precies zoals ze naar schijf worden geschreven.", + "fileList": "Bestandslijst", + "refreshFiles": "Vernieuwen", + "noFiles": "Nog geen geheugenbestanden", + "fileContent": "Bestandsinhoud", + "emptyFile": "Bestand is leeg", + "selectFileHint": "Selecteer links een bestand om de ruwe JSON te bekijken." + }, + "language": { + "english": "Engels", + "chinese": "Chinees", + "selectLanguage": "Taal selecteren", + "currentLanguage": "Huidige taal" + }, + "api": { + "firstRunTitle": "API instellen", + "firstRunSubtitle": "Configureer een provider om Open Cowork te gaan gebruiken", + "settingsTitle": "API-instellingen", + "settingsSubtitle": "Provider-, sleutel- en modelinstellingen beheren", + "configSet": "Configuratieset", + "defaultSetTag": "Standaard", + "saveAs": "Opslaan als", + "renameSet": "Hernoemen", + "deleteSet": "Set verwijderen", + "saveAndSwitch": "Opslaan en wisselen", + "discardAndSwitch": "Verwerpen en wisselen", + "currentSetSavingHint": "\"Instellingen opslaan\" werkt alleen de momenteel geselecteerde configuratieset bij.", + "unsavedCurrentSetHint": "De huidige configuratieset heeft niet-opgeslagen wijzigingen.", + "unsavedSwitchPrompt": "De huidige configuratieset heeft niet-opgeslagen wijzigingen. Kies een actie voordat je overschakelt naar \"{{name}}\".", + "configSetSaveAsPrompt": "Voer een naam in voor de nieuwe configuratieset", + "configSetRenamePrompt": "Voer een nieuwe naam in voor deze configuratieset", + "configSetDeleteConfirm": "Configuratieset \"{{name}}\" verwijderen?", + "configSetNameRequired": "Een naam voor de configuratieset is vereist", + "configSetLimitReached": "Je kunt maximaal {{count}} configuratiesets opslaan", + "configSetCreated": "Configuratieset gemaakt", + "configSetRenamed": "Configuratieset hernoemd", + "configSetDeleted": "Configuratieset verwijderd", + "configSetSwitched": "Configuratieset gewisseld", + "defaultConfigSetName": "Standaard", + "configSetFallbackName": "Configuratieset {{index}}", + "provider": "API-provider", + "providerDescription": "Kies de providerfamilie en de algemene protocolstijl voor deze werkruimte.", + "apiKey": "API Key", + "enterApiKey": "Voer je API Key in", + "apiKeyDescription": "Lokaal opgeslagen en beperkt tot de actieve configuratieset.", + "protocol": "Protocol", + "baseUrl": "Base URL", + "model": "Model", + "usePreset": "Voorinstelling gebruiken", + "custom": "Aangepast", + "moreModels": "Meer modellen", + "noModelsAvailable": "Geen modellen beschikbaar", + "selectProtocol": "Selecteer het compatibele protocol voor de service", + "enterOllamaUrl": "Voer de Ollama OpenAI-compatibele service-URL in", + "enterOpenAIUrl": "Voer een OpenAI-compatibele service-URL in", + "enterAnthropicUrl": "Voer een Anthropic-compatibele service-URL in", + "enterGeminiUrl": "Voer een Gemini-compatibele base URL in", + "enterModelId": "Voer model-ID in, bijv. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Selecteer een model", + "contextWindow": "Contextvenster", + "contextWindowPlaceholder": "Automatisch detecteren", + "maxOutputTokens": "Max. uitvoertokens", + "maxOutputTokensPlaceholder": "Automatisch detecteren", + "contextWindowHint": "Laat leeg voor automatische detectie. Overschrijf alleen als het model onjuiste limieten rapporteert.", + "saveFailed": "Instellingen opslaan mislukt. Probeer het opnieuw.", + "getStarted": "Aan de slag", + "saveSettings": "Instellingen opslaan", + "openSettingsAction": "API-instellingen openen", + "configRequiredActiveSet": "De huidige configuratieset heeft geen bruikbare inloggegevens. Voltooi eerst de installatie in API-instellingen.", + "testConnection": "Verbinding testen", + "testingConnection": "Testen...", + "refreshModels": "Modellen vernieuwen", + "refreshingModels": "Vernieuwen...", + "refreshModelsFailed": "Modellen vernieuwen mislukt. Controleer de URL of servicestatus.", + "manualModel": "Handmatig model", + "useDetectedModels": "Gedetecteerde modellen gebruiken", + "discoverLocalOllama": "Lokale Ollama zoeken", + "discoveringLocalOllama": "Zoeken...", + "discoverLocalOllamaHint": "Voer eerst je Ollama-eindpunt in. Modellen worden automatisch opgehaald; handmatige invoer is alleen nodig als de detectie mislukt.", + "localOllamaDiscovered": "Lokale Ollama gevonden met {{count}} beschikbaar model/modellen.", + "localOllamaNotFound": "Er is geen lokale Ollama-service gevonden. Start deze met `ollama serve` en probeer het opnieuw.", + "localOllamaNoModels": "Er is een lokale Ollama-service gevonden, maar deze stelt momenteel geen modellen beschikbaar.", + "localOllamaModelUnavailable": "Lokale Ollama gevonden, maar model {{model}} kon geen minimale inferentieaanvraag voltooien.", + "localOllamaModelLoading": "Lokale Ollama gevonden, maar het model wordt nog in het geheugen geladen. Grote modellen kunnen tot een minuut duren.", + "enableThinking": "Denkmodus inschakelen", + "enableThinkingHint": "Toon het denkproces van Claude stap voor stap. Dit geeft meer transparantie, maar kan het tokengebruik verhogen.", + "enableThinkingOllamaHint": "De meeste Ollama-modellen ondersteunen geen denkmodus. Schakel dit alleen in als je model dit expliciet ondersteunt.", + "testSuccess": "Verbinding gelukt ({{ms}}ms)", + "testSuccessNeedSave": "Verbindingstest geslaagd. Sla de instellingen op voordat je een sessie start.", + "testError": { + "missing_key": "API Key is vereist", + "missing_base_url": "Base URL is vereist voor deze provider", + "unauthorized": "Ongeldige API Key of niet geautoriseerd", + "not_found": "Eindpunt niet gevonden. Controleer de Base URL", + "rate_limited": "Snelheidslimiet bereikt of quota overschreden", + "server_error": "Servicefout. Probeer het later opnieuw", + "network_error": "Netwerkfout. Controleer je verbinding", + "ollama_not_running": "Kan geen verbinding maken met Ollama. Zorg ervoor dat Ollama actief is (ollama serve).", + "ollama_loading": "Ollama laadt het model in het geheugen. Grote modellen kunnen 30-120 seconden duren. Wacht even en probeer het opnieuw.", + "unknown": "Verbinding mislukt" + }, + "guidance": { + "commonSetupsTitle": "Veelvoorkomende providerinstellingen", + "commonSetupsHint": "Bekijk of pas een aanbevolen instelling toe", + "apply": "Toepassen", + "detectedBadge": "Gedetecteerd", + "preferProviderTab": "{{service}} gedetecteerd. Deze service is meestal eenvoudiger te configureren via het speciale {{provider}}-tabblad.", + "protocolMismatch": "{{service}} gedetecteerd. Aanbevolen protocol: {{recommendedProtocol}}.", + "protocolLooksGood": "{{service}} gedetecteerd. Je huidige protocol komt al overeen met de aanbevolen {{recommendedProtocol}}-instelling.", + "baseUrlHint": "{{service}} gedetecteerd. Aanbevolen {{recommendedProtocol}}-instelling: {{baseUrl}}. Voorbeeldmodel: {{model}}.", + "genericBaseUrlHint": "Dit lijkt op een aangepast {{recommendedProtocol}}-compatibel eindpunt. Aanbevolen base URL-indeling: {{baseUrl}}. Voorbeeldmodel: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Service", + "protocol": "Protocol", + "baseUrl": "Base URL", + "model": "Voorbeeldmodel", + "notes": "Opmerkingen", + "action": "Actie" + }, + "errorHints": { + "emptyProbeGeneric": "Het eindpunt gaf een lege probereactie terug. Dit betekent meestal dat het geselecteerde protocol of model niet compatibel is met de service.", + "emptyProbeDetected": "{{service}} gaf een lege probereactie terug. Probeer de aanbevolen {{recommendedProtocol}}-instelling en controleer het model-ID voor dat eindpunt.", + "emptyProbePreferProvider": "{{service}} gaf een lege probereactie terug. Probeer het speciale {{provider}}-tabblad in plaats van het te configureren als een algemeen aangepast eindpunt.", + "probeMismatchGeneric": "Het eindpunt reageerde, maar niet in de indeling die door deze probe wordt verwacht. Dit wijst meestal op een protocol- of modelcompatibiliteitsmismatch.", + "probeMismatchDetected": "{{service}} reageerde met een onverwachte probe-indeling. Probeer de aanbevolen {{recommendedProtocol}}-instelling en controleer het model-ID voor dat eindpunt." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Geef de voorkeur aan het speciale OpenRouter-providertabblad, tenzij je een aangepaste relay aan het debuggen bent." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Gebruik de OpenAI-compatibele modus en kopieer het exacte model-ID uit de DeepSeek-documentatie." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Gebruik het coding-eindpunt met de Anthropic-compatibele modus. Controleer het exacte coding-model-ID in de Moonshot-documentatie." + }, + "glm": { + "name": "GLM / BigModel (Anthropic-route)", + "note": "Gebruik de Anthropic-compatibele route wanneer het eindpuntpad /api/anthropic bevat." + }, + "ollama": { + "name": "Ollama", + "note": "Geef de voorkeur aan het speciale Ollama-providertabblad voor het detecteren en vernieuwen van lokale modellen." + }, + "gemini": { + "name": "Gemini aangepast eindpunt", + "note": "Gebruik de Gemini-compatibele modus en het exacte model-ID dat door het eindpunt wordt blootgesteld." + }, + "minimax": { + "name": "MiniMax", + "note": "Gebruik de OpenAI-compatibele modus, tenzij je MiniMax-gateway een ander protocol documenteert." + }, + "genericOpenAI": { + "name": "Algemeen OpenAI-compatibel", + "note": "Gebruik dit voor aangepaste relays, gateways of inferentieservers die de OpenAI API nabootsen." + } + } + }, + "newSet": "Nieuwe set", + "createSetTitle": "Configuratieset maken", + "saveAsTitle": "Opslaan als configuratieset", + "createSetNamePlaceholder": "Voer naam configuratieset in", + "renameSetTitle": "Configuratieset hernoemen", + "unsavedBeforeActionPrompt": "De huidige configuratieset heeft niet-opgeslagen wijzigingen. Kies een actie voordat je \"{{action}}\" uitvoert.", + "newSetDefaultName": "Nieuwe configuratieset", + "copyNameSuffix": "Kopie", + "currentSetLabel": "Huidige set: ", + "unsavedBadge": "Niet-opgeslagen", + "saveAndContinue": "Opslaan en doorgaan", + "discardAndContinue": "Verwerpen en doorgaan", + "currentSetName": "Setnaam", + "renameInlineHint": "Bewerk direct. Druk op Enter of klik weg om automatisch op te slaan", + "switchSetLabel": "Naar een andere set wisselen", + "switchSetPlaceholder": "Selecteer een set om naar te wisselen", + "noOtherSetHint": "Geen andere set beschikbaar", + "configSetMissing": "Configuratieset niet gevonden", + "configSetCloneSourceMissing": "Kon geen configuratieset vinden om te klonen", + "configSetSystemDeleteForbidden": "De standaardconfiguratieset kan niet worden verwijderd", + "configSetKeepOne": "Behoud ten minste één configuratieset", + "diagnostic": { + "runDiagnostics": "Verbinding diagnosticeren", + "runQuickDiagnostics": "Snelle diagnose", + "runDeepDiagnostics": "Diepe inferentiecontrole", + "running": "Diagnosticeren...", + "step": { + "dns": "DNS-resolutie", + "tcp": "TCP-verbinding", + "tls": "TLS-handshake", + "auth": "API-authenticatie", + "model": "Modelverificatie" + }, + "status": { + "pending": "In behandeling", + "running": "Controleren...", + "ok": "OK", + "fail": "Mislukt", + "skip": "Overgeslagen" + }, + "overallSuccess": "Alle controles geslaagd ({{ms}}ms)", + "overallFail": "Diagnose mislukt bij {{step}}", + "advisory": { + "not_deep_verified": "Het eindpunt is bereikbaar en het geselecteerde model staat in de lijst, maar er is nog geen live inferentie uitgevoerd.", + "model_loading": "Het eindpunt is bereikbaar, maar het model wordt mogelijk nog in het geheugen geladen." + }, + "latency": "{{ms}}ms", + "fix": { + "dns_resolve_failed": "Kan hostnaam {{host}} niet omzetten. Controleer of de URL correct is.", + "tcp_connect_failed": "Kan geen verbinding maken met {{host}}. Controleer je netwerk- of firewallinstellingen.", + "tls_handshake_failed": "TLS-handshake mislukt. Dit kan worden veroorzaakt door een certificaatprobleem of proxy-interferentie.", + "missing_api_key": "API Key ontbreekt of is ongeldig. Controleer je sleutel.", + "auth_invalid_key": "API Key is ongeldig of verlopen. Controleer of de sleutel correct is.", + "auth_endpoint_not_found": "API-eindpunt niet gevonden. Controleer of de Base URL correct is.", + "auth_request_failed": "Authenticatieaanvraag mislukt. Controleer je configuratie.", + "model_network_error": "Kon model {{model}} niet bereiken. Controleer je netwerk-, VPN- of proxy-instellingen.", + "model_rate_limited": "Model {{model}} heeft momenteel een snelheidslimiet bereikt of het quota is op. Probeer het later opnieuw.", + "model_request_failed": "Aanvraag voor model {{model}} mislukt aan de providerzijde. Probeer het later opnieuw.", + "model_unavailable": "Model {{model}} is niet beschikbaar. Controleer de modelnaam.", + "ollama_no_models_loaded": "Het eindpunt is bereikbaar, maar gaf geen modellen terug. Haal eerst een model op in Ollama.", + "ollama_model_not_listed": "Model {{model}} staat niet in de modellijst van het eindpunt. Kies een gedetecteerd model of schakel over naar handmatige invoer.", + "ollama_model_loading": "Model {{model}} wordt mogelijk nog geladen. Probeer de diepe controle zo meteen opnieuw.", + "model_cold_start": "Het model wordt mogelijk nog in het GPU/CPU-geheugen geladen. Grote modellen (7B+) kunnen bij het eerste gebruik 30-120 seconden duren. Probeer het zo meteen opnieuw." + } + } + }, + "window": { + "minimize": "Minimaliseren", + "maximize": "Maximaliseren", + "restore": "Herstellen", + "close": "Sluiten" + }, + "sandbox": { + "title": "Sandbox-omgeving", + "wslDesc": "Voer commando's uit in de WSL2 Linux-omgeving voor betere isolatie en beveiliging op Windows.", + "limaDesc": "Voer commando's uit in de Lima-VM voor betere isolatie en beveiliging op macOS.", + "nativeDesc": "Commando's worden direct op je systeem uitgevoerd (native Linux-modus).", + "enableSandbox": "Sandboxmodus inschakelen", + "comingSoon": "Binnenkort beschikbaar - in ontwikkeling", + "readyStatus": "Sandbox gereed en actief", + "notReadyStatus": "Sandbox ingeschakeld maar niet volledig geconfigureerd", + "disabledStatus": "Sandbox uitgeschakeld - commando's worden direct op het systeem uitgevoerd", + "enabledWillSetup": "Sandbox ingeschakeld. Omgeving instellen...", + "disabled": "Sandboxmodus uitgeschakeld", + "failedToLoad": "Sandboxstatus laden mislukt", + "failedToSave": "Sandboxinstellingen opslaan mislukt", + "statusRefreshed": "Status vernieuwd", + "checkFailed": "Sandboxstatus controleren mislukt", + "environmentStatus": "Omgevingsstatus", + "checkStatus": "Status controleren", + "platform": "Platform", + "mode": "Modus", + "status": "Status", + "native": "Native", + "wslAvailable": "WSL2 beschikbaar", + "limaAvailable": "Lima beschikbaar", + "vmCreated": "VM-instantie gemaakt", + "vmRunning": "VM actief", + "wslNotInstalled": "WSL2 is niet geïnstalleerd", + "wslInstallHint": "Installeer WSL2 voor betere isolatie. Voer dit commando uit in PowerShell als Administrator:", + "limaNotInstalled": "Lima is niet geïnstalleerd", + "limaInstallHint": "Installeer Lima voor betere isolatie. Voer dit commando uit in Terminal:", + "linuxNative": "Linux voert commando's native uit zonder extra sandboxing.", + "nodeInstalled": "Node.js succesvol geïnstalleerd", + "nodeInstallFailed": "Node.js installeren mislukt", + "pythonInstalled": "Python succesvol geïnstalleerd", + "pythonInstallFailed": "Python installeren mislukt", + "start": "Starten", + "stop": "Stoppen", + "limaStarted": "Lima-VM gestart", + "limaStartFailed": "Lima-VM starten mislukt", + "limaStopped": "Lima-VM gestopt", + "limaStopFailed": "Lima-VM stoppen mislukt", + "settingUp": "Instellen...", + "retrySetup": "Installatie opnieuw proberen", + "setupComplete": "Sandboxinstallatie voltooid", + "setupFailed": "Sandboxinstallatie mislukt", + "helpText1": "Sandbox biedt een geïsoleerde omgeving om commando's veilig uit te voeren.", + "helpText2": "WSL2 (Windows) of Lima-VM (macOS) is vereist voor volledige sandbox-ondersteuning.", + "setupTitle": "Sandbox instellen", + "setupSubtitle": "Bij de eerste keer uitvoeren moet er een veilige uitvoeromgeving worden geconfigureerd.", + "progressLabel": "Voortgang", + "continuingNative": "Doorgaan met native uitvoermodus.", + "retryLima": "Lima opnieuw proberen te starten", + "retryingLima": "Lima opnieuw starten...", + "continueNative": "Doorgaan met native modus", + "configuredSuccess": "Sandbox geconfigureerd. Code kan nu veilig worden uitgevoerd.", + "nativeFallbackSuccess": "De native systeemomgeving wordt gebruikt voor het uitvoeren van commando's.", + "footerWsl": "WSL2-sandbox", + "footerLima": "Lima-sandbox", + "footerNative": "Native modus", + "configuring": "Configureren...", + "syncFiles_one": "{{count}} bestand", + "syncFiles_other": "{{count}} bestanden", + "syncExplanation": "Projectbestanden synchroniseren naar de geïsoleerde sandbox voor veilige code-uitvoering.", + "syncFirst": "De eerste synchronisatie is langzamer,", + "syncFollowup": "incrementele synchronisaties zijn sneller.", + "checkingWsl": "WSL2-omgeving controleren...", + "checkingLima": "Lima-omgeving controleren...", + "creatingLima": "Lima-VM maken...", + "startingLima": "Lima-VM starten...", + "installingNode": "Node.js installeren...", + "installingPython": "Python installeren...", + "installingPip": "pip installeren...", + "installingDeps": "Vaardigheidsafhankelijkheden installeren...", + "setupFailedMessage": "Sandboxinstallatie mislukt", + "sandboxDisabledMessage": "Sandbox uitgeschakeld", + "nativeModeMessage": "Native uitvoermodus wordt gebruikt", + "wslNotDetectedMessage": "WSL2 niet gedetecteerd, native modus wordt gebruikt", + "limaNotDetectedMessage": "Lima niet gedetecteerd, native modus wordt gebruikt", + "nodeInstallFailedMessage": "Node.js-installatie mislukt", + "wslReadyMessage": "WSL2-sandbox gereed", + "limaReadyMessage": "Lima-sandbox gereed", + "limaCreateFailedMessage": "Lima-VM maken mislukt", + "limaStartFailedMessage": "Lima-VM starten mislukt", + "setupDetailSandboxDisabled": "Native uitvoermodus wordt gebruikt (sandbox uitgeschakeld in instellingen)", + "setupDetailLinuxNative": "Linux voert commando's direct uit", + "setupDetailInstallWsl": "Installeer WSL2 voor betere sandboxisolatie", + "setupDetailInstallNodeWsl": "Installeer Node.js handmatig in WSL", + "setupDetailInstallNodeWslRuntime": "Node.js-runtime installeren in {{distro}}", + "setupDetailInstallPythonWslRuntime": "Python-runtime installeren in {{distro}}", + "setupDetailInstallPipWslRuntime": "Python-pakketbeheerder installeren in {{distro}}", + "setupDetailInstallDeps": "markitdown, pypdf, pdfplumber installeren voor PDF/PPTX-vaardigheden", + "setupDetailInstallLima": "Installeer Lima voor betere sandboxisolatie (brew install lima)", + "setupDetailCreateLima": "De eerste keer uitvoeren vereist een image-download en kan enkele minuten duren", + "setupDetailStartLima": "Het starten van de VM kan enkele minuten duren", + "setupDetailInstallNodeLima": "Node.js-runtime installeren in Lima-VM", + "setupDetailInstallPythonLima": "Python-runtime installeren in Lima-VM", + "syncingFilesMessage": "Bestanden synchroniseren naar sandbox...", + "syncingSkillsMessage": "Vaardigheden configureren...", + "syncReadyMessage": "Sandbox gereed", + "syncFailedMessage": "Sandboxsynchronisatie mislukt", + "syncDetailWsl": "Projectbestanden kopiëren naar geïsoleerde WSL-omgeving", + "syncDetailLima": "Projectbestanden kopiëren naar geïsoleerde Lima-omgeving", + "syncDetailSkills": "Ingebouwde vaardigheden kopiëren naar sandbox", + "syncDetailFallback": "Terugvallen op directe toegangsmodus (minder veilig)", + "syncDetailCompleted": "{{count}} bestanden gesynchroniseerd" + }, + "mcp": { + "noConnectors": "Geen connectoren geconfigureerd", + "addConnector": "Voeg een connector toe om MCP-tools in te schakelen", + "toolsAvailable": "{{count}} tool beschikbaar", + "toolsAvailable_plural": "{{count}} tools beschikbaar", + "connected": "Verbonden", + "notConnected": "Niet verbonden", + "connecting": "Verbinden...", + "failed": "Verbinding mislukt", + "chromeHint": "Er wordt automatisch een nieuw Chrome-debugvenster geopend als de poort niet beschikbaar is", + "quickAddPresets": "Voorinstellingen snel toevoegen", + "show": "Tonen", + "hide": "Verbergen", + "addCustomConnector": "Aangepaste connector toevoegen", + "configure": "Configureren", + "added": "Toegevoegd", + "requiresToken": "Vereist token", + "editConnector": "Connector bewerken", + "addConnectorTitle": "Aangepaste connector toevoegen", + "name": "Naam", + "namePlaceholder": "Chrome MCP Server", + "type": "Type", + "typeStdioLocal": "STDIO (lokaal)", + "typeSseRemote": "SSE (op afstand)", + "typeStreamableHttp": "HTTP (Streamable)", + "command": "Commando", + "commandPlaceholder": "npx", + "arguments": "Argumenten", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Door spaties gescheiden argumenten", + "url": "URL", + "enableConnector": "Deze connector inschakelen", + "presetAlreadyConfigured": "Connector \"{{name}}\" is al geconfigureerd", + "envValuePlaceholder": "Voer waarde in", + "removeVar": "Verwijderen", + "loadServersFailed": "Connectoren laden mislukt", + "saveServerFailed": "Connector opslaan mislukt", + "deleteServerFailed": "Connector verwijderen mislukt", + "deleteConnectorConfirm": "Deze connector verwijderen?", + "commandRequired": "Commando is vereist", + "urlRequired": "URL is vereist", + "toolCount": "{{count}} tools", + "callCount": "{{count}} aanroepen" + }, + "credentials": { + "envVars": "Omgevingsvariabelen", + "enterEnvVar": "Voer de naam van de omgevingsvariabele in (bijv. NOTION_TOKEN):", + "usedForTokens": "Gebruikt voor tokens en geheimen (bijv. NOTION_TOKEN)", + "noEnvVars": "Geen omgevingsvariabelen geconfigureerd" + }, + "skills": { + "storagePathHint": "Kies waar aangepaste vaardigheden worden opgeslagen en hoe de app ze vernieuwt.", + "builtinSkillsDesc": "Ingebouwde vaardigheden worden met de app meegeleverd en kunnen indien nodig worden in- of uitgeschakeld.", + "pluginsTitle": "Plug-ins en imports", + "pluginsDesc": "Blader door marktplaats-plug-ins of importeer aangepaste vaardigheden uit een lokale map.", + "title": "📦 Vaardigheden", + "description": "Vaardigheden breiden de mogelijkheden van Claude uit met gespecialiseerde kennis en tools.", + "builtinSkills": "Ingebouwde vaardigheden", + "customSkills": "Aangepaste vaardigheden", + "noCustomSkills": "Geen aangepaste vaardigheden geïnstalleerd", + "installSkillsDesc": "Installeer vaardigheden om de mogelijkheden van Claude uit te breiden", + "browsePlugins": "Plug-ins bekijken", + "pluginListTitle": "Bekijk de Claude Plugin Marketplace", + "pluginSkillCount": "Installeerbare vaardigheden: {{count}}", + "pluginComponents": "Componenten: vaardigheden {{skills}} · commando's {{commands}} · agents {{agents}} · hooks {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Componentdetails zijn beschikbaar na installatie.", + "pluginInstall": "Installeren", + "pluginInstalled": "Geïnstalleerd", + "pluginInstallSuccess": "Plug-in \"{{name}}\" succesvol geïnstalleerd", + "pluginInstallFailed": "Plug-in installeren mislukt", + "pluginNoSkills": "Deze plug-in heeft geen installeerbare vaardigheden in V1", + "pluginNoComponents": "Deze plug-in heeft geen laadbare componenten", + "pluginManage": "Beheren", + "pluginEnable": "Inschakelen", + "pluginDisable": "Uitschakelen", + "pluginUninstall": "Plug-in \"{{name}}\" verwijderen?", + "pluginManageUninstall": "Verwijderen", + "pluginUninstalled": "Plug-in \"{{name}}\" is verwijderd", + "pluginComponentHooksDisabledByDefault": "Deze plug-in bevat hooks. Hooks zijn standaard uitgeschakeld en kunnen na installatie worden ingeschakeld in de beheerinstellingen.", + "pluginComponentMcpDisabledByDefault": "Deze plug-in bevat MCP. MCP is standaard uitgeschakeld en kan na installatie worden ingeschakeld in de beheerinstellingen.", + "pluginAppliedInRuntime": "Plug-in-instellingen worden momenteel tijdens runtime toegepast", + "pluginDisabled": "Plug-in is momenteel uitgeschakeld", + "noPluginsFound": "Geen plug-ins beschikbaar", + "storagePathTitle": "Opslagmap voor vaardigheden", + "storagePathUnavailable": "Opslagpad niet beschikbaar", + "selectStoragePath": "Map selecteren", + "openStoragePath": "Map openen", + "refreshSkills": "Vaardigheden vernieuwen", + "storagePathUpdated": "Opslag bijgewerkt. {{migrated}} vaardigheden gemigreerd, {{skipped}} overgeslagen", + "storagePathUpdateFailed": "Opslagpad voor vaardigheden bijwerken mislukt", + "storagePathOpenFailed": "Opslagpad voor vaardigheden openen mislukt", + "storagePathFallback": "Teruggevallen op de standaardmap voor vaardigheden. Controleer je geconfigureerde pad.", + "storageWatcherError": "Fout in mapbewaking voor vaardigheden: {{message}} (polling-fallback ingeschakeld).", + "installSkillFromFolder": "Vaardigheid uit map installeren", + "deleteSkill": "Vaardigheid \"{{name}}\" verwijderen?", + "failedToLoad": "Vaardigheden laden mislukt", + "failedToInstall": "Vaardigheid installeren mislukt", + "failedToDelete": "Vaardigheid verwijderen mislukt", + "failedToToggle": "Vaardigheid in-/uitschakelen mislukt" + }, + "logs": { + "actionsTitle": "Logacties", + "title": "Applicatielogboeken", + "description": "Bekijk en exporteer diagnostische bundels voor foutopsporing. Logboeken rouleren automatisch na 10 MB, en exports bevatten ook recente sessie- en foutsamenvattingen.", + "inventoryDescription": "Huidige loginventaris en opslagvoetafdruk.", + "recentDescription": "Recente applicatielogboeken beschikbaar voor inspectie. Je kunt nog steeds een diagnostische bundel exporteren, zelfs als er nog geen logbestand bestaat.", + "directoryDescription": "Huidige locatie op schijf voor applicatielogboeken.", + "actionsDescription": "Exporteer een diagnostische bundel, toon de logmap of wis logbestanden.", + "enableDevLogs": "Ontwikkelaarslogboeken inschakelen", + "enableDevLogsDesc": "Gedetailleerde logboeken vastleggen voor foutopsporing. Schakel uit om schijfgebruik te verminderen.", + "devLogsEnabled": "Ontwikkelaarslogboeken ingeschakeld", + "devLogsDisabled": "Ontwikkelaarslogboeken uitgeschakeld", + "toggleFailed": "Ontwikkelaarslogboeken in-/uitschakelen mislukt", + "logFiles": "Logbestanden", + "totalSize": "Totale grootte", + "noLogFiles": "Geen logbestanden gevonden", + "logsDirectory": "Logmap:", + "exportZip": "Diagnostiek exporteren", + "openFolder": "Map openen", + "clearAll": "Alles wissen", + "clearConfirm": "Weet je zeker dat je alle logbestanden wilt wissen? Deze actie kan niet ongedaan worden gemaakt.", + "exportSuccess": "Diagnostiek succesvol geëxporteerd naar {{path}}", + "clearSuccess": "{{count}} logbestand(en) gewist", + "exportFailed": "Logboeken exporteren mislukt", + "clearFailed": "Logboeken wissen mislukt", + "helpText1": "De geëxporteerde diagnostische bundel bevat standaard app-logboeken, een geredigeerde runtime-momentopname en alleen-metadata sessie-/foutsamenvattingen zonder berichtinhoud.", + "helpText2": "Het delen van die bundel helpt ons meestal om problemen veel sneller te lokaliseren, of ze nu afkomstig zijn van de UI, tooluitvoering of lokale omgeving." + }, + "sidebar": { + "recents": "Recent", + "expandToView": "Uitvouwen om taken te bekijken", + "noTasks": "Nog geen taken", + "noTasksHint": "Start een nieuwe chat om te beginnen met bouwen, onderzoeken of bestanden bewerken.", + "search": "Gesprekken zoeken...", + "deleteAll": "Alle gesprekken verwijderen", + "localTasks": "Deze taken worden lokaal uitgevoerd en worden niet tussen apparaten gesynchroniseerd.", + "apiConfigured": "API geconfigureerd", + "apiNotConfigured": "API niet geconfigureerd", + "user": "Gebruiker", + "newTask": "Nieuwe chat", + "newTaskHint": "Start een nieuw gesprek", + "today": "Vandaag", + "yesterday": "Gisteren", + "previousWeek": "Vorige 7 dagen", + "older": "Ouder", + "settings": "Instellingen", + "themeToggle": "Thema wisselen", + "manage": "Beheren", + "selectAll": "Alles selecteren", + "deselectAll": "Selectie opheffen", + "nSelected": "{{count}} geselecteerd", + "batchDeleteConfirm": "{{count}} gesprekken verwijderen? Dit kan niet ongedaan worden gemaakt.", + "cancel": "Annuleren", + "confirmDelete": "Verwijderen" + }, + "chat": { + "sendMessage": "Bericht verzenden", + "stop": "Stoppen", + "processing": "Verwerken...", + "typeMessage": "Typ een bericht...", + "loadingConversation": "Gesprek laden...", + "startConversation": "Start het gesprek", + "startFailed": "Sessie starten mislukt. Probeer het opnieuw.", + "disclaimer": "Open Cowork is AI-gestuurd en kan fouten maken. Controleer de antwoorden goed.", + "noModel": "Geen model", + "connectorCount_one": "{{count}} connector", + "connectorCount_other": "{{count}} connectoren" + }, + "context": { + "progress": "Voortgang", + "artifacts": "Artefacten", + "context": "Context", + "workingDirectory": "Werkmap", + "toolsUsed": "Gebruikte tools", + "mcpConnectors": "MCP-connectoren", + "copied": "Gekopieerd!", + "noToolsUsedYet": "Nog geen tools gebruikt", + "toolsUsedLabel": "Gebruikte tools:", + "noFolderSelected": "Geen map geselecteerd", + "expandPanel": "Paneel uitvouwen", + "collapsePanel": "Paneel invouwen", + "queuedMessages": "Berichten in wachtrij: {{count}}", + "stepsWillShow": "Stappen worden weergegeven naarmate de taak vordert.", + "noArtifactsYet": "Nog geen artefacten", + "revealFailed": "Kan het bestand niet vinden. Controleer of het pad bestaat.", + "fileCreated": "Bestand gemaakt", + "callNumber": "Aanroep #{{number}}", + "input": "Invoer:", + "output": "Uitvoer:", + "tokenUsage": "Tokengebruik", + "inputTokens": "Invoer", + "outputTokens": "Uitvoer", + "totalTokens": "Totaal", + "changeDir": "Map wijzigen", + "changeDirFailed": "Map wijzigen mislukt", + "copyPath": "Pad kopiëren", + "openInFileManager": "Openen in bestandsbeheer", + "contextUsage": "Contextgebruik", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Aanvraag", + "queued": "In wachtrij", + "cancelled": "Geannuleerd", + "emptyMessage": "Leeg bericht", + "emptyText": "(lege tekst)", + "copyMessage": "Bericht kopiëren", + "revealInFolder": "Tonen in map", + "pastedContentAlt": "Geplakte inhoud", + "taskProgress": "Taakvoortgang", + "noQuestions": "Geen vragen", + "question": "Vraag", + "thinking": "Denken", + "executionTime": "Uitvoertijd: {{time}}" + }, + "schedule": { + "createTitle": "Planning maken", + "editTitle": "Planning bewerken", + "autoTitleLabel": "Automatische titel (gebruikt om sessies te identificeren)", + "autoTitleChangedHint": "Prompt gewijzigd. De titel wordt na het opslaan opnieuw gegenereerd.", + "autoTitleUnchangedHint": "Als de prompt hetzelfde blijft, wordt de bestaande titel behouden.", + "autoTitleEditingChanged": "Na het opslaan wordt de titel opnieuw gegenereerd op basis van de prompt met een [Scheduled Task]-voorvoegsel.", + "autoTitleEditingUnchanged": "Na het opslaan wordt de titel gegenereerd met een [Scheduled Task]-voorvoegsel.", + "autoTitleCreating": "Na het opslaan wordt de titel gegenereerd met een [Scheduled Task]-voorvoegsel en een modelsamenvatting.", + "promptPlaceholder": "Prompt om automatisch uit te voeren op de geplande tijd", + "cwdPlaceholder": "Werkmap (standaard de huidige werkruimte)", + "executionTime": "Uitvoertiming", + "executionTimeHint": "Nieuwe planningen geven de voorkeur aan timing met meerdere tijdvakken; oudere intervalregels kunnen nog steeds worden bewerkt.", + "enabled": "Ingeschakeld", + "mode": "Uitvoermodus", + "weekday": "Weekdagen", + "weekdayPlaceholder": "Selecteer weekdagen", + "times": "Tijdvakken", + "timePlaceholder": "Selecteer tijden", + "legacyIntervalNotice": "Deze taak is afkomstig van een oudere regel met vast interval en behoudt die modus bij het opslaan.", + "onceTimeLabel": "Kies de eenmalige uitvoertijd", + "legacyStartTimeLabel": "Kies de starttijd voor de oudere intervalregel", + "dailyHint": "Wordt elke dag automatisch op deze tijden uitgevoerd.", + "weeklyHint": "Wordt automatisch uitgevoerd op de geselecteerde weekdagen en tijdvakken.", + "saveChanges": "Wijzigingen opslaan", + "createTask": "Taak maken", + "cancelEdit": "Bewerken annuleren", + "listHint": "Uitschakelen blokkeert alleen toekomstige automatische uitvoeringen. Reeds gestarte sessies moeten handmatig worden gestopt vanuit de sessielijst.", + "empty": "Nog geen planningen", + "loadFailed": "Planningen laden mislukt", + "promptRequired": "Voer de uit te voeren prompt in", + "dailyTimesRequired": "Selecteer ten minste één dagelijks tijdvak", + "weeklyTimesRequired": "Selecteer ten minste één wekelijks tijdvak", + "weekdayRequired": "Selecteer ten minste één weekdag", + "invalidTime": "Voer een geldige uitvoertijd in", + "nextRunCalculationFailed": "De huidige regel kan de volgende uitvoertijd niet berekenen", + "futureTimeRequired": "De uitvoertijd moet later zijn dan nu. Gebruik Nu uitvoeren als je het direct wilt activeren.", + "taskMissing": "Taak bestaat niet meer of is verwijderd", + "updated": "Planning bijgewerkt", + "created": "Planning gemaakt", + "saveFailed": "Planning opslaan mislukt", + "toggleFailed": "Planningsstatus in-/uitschakelen mislukt", + "runNowSuccess": "Een directe uitvoering geactiveerd", + "runNowFailed": "Direct uitvoeren mislukt", + "noSessionToStop": "Deze taak heeft geen uitvoersessie om te stoppen", + "sessionNotRunning": "Deze taak heeft momenteel geen actieve sessie", + "stopSent": "Stopcommando verzonden", + "stopFailed": "Uitvoering stoppen mislukt", + "deleteConfirm": "Planning \"{{title}}\" verwijderen?", + "deleted": "Planning verwijderd", + "deleteFailed": "Planning verwijderen mislukt", + "statusRunning": "Actief", + "statusFinished": "Voltooid", + "statusUnknown": "Onbekend", + "statusNone": "Geen", + "taskEnabled": "Ingeschakeld", + "taskDisabled": "Uitgeschakeld", + "nextRun": "Volgende uitvoering: {{value}}", + "nextRunNone": "Volgende uitvoering: Geen", + "strategy": "Planningsregel: {{value}}", + "lastRun": "Laatste uitvoering: {{value}}", + "lastRunNever": "Laatste uitvoering: Nog niet uitgevoerd", + "recentSession": "Laatste sessie: {{value}}", + "sessionStatus": "Sessiestatus: {{value}}", + "cwd": "Map: {{value}}", + "lastError": "Laatste fout: {{value}}", + "disable": "Uitschakelen", + "enable": "Inschakelen", + "runNow": "Nu uitvoeren", + "stopExecution": "Uitvoering stoppen", + "edit": "Bewerken", + "delete": "Verwijderen", + "stopRunTitleActive": "Stop de laatste uitvoersessie voor deze taak", + "stopRunTitleIdle": "Deze taak heeft momenteel geen actieve sessie", + "repeatEveryMinute_one": "Elke {{count}} minuut", + "repeatEveryMinute_other": "Elke {{count}} minuten", + "repeatEveryHour_one": "Elk {{count}} uur", + "repeatEveryHour_other": "Elke {{count}} uur", + "repeatEveryDay_one": "Elke {{count}} dag", + "repeatEveryDay_other": "Elke {{count}} dagen", + "ruleDaily": "Elke dag om {{times}}", + "ruleWeekly": "Elke week op {{weekdays}} om {{times}}", + "ruleOnce": "Eenmalig", + "previewNextRun": "Volgende verwachte uitvoering: {{value}}", + "previewSelectValidTime": "Kies een geldige uitvoertijd", + "previewSelectAtLeastOne": "Kies ten minste één geldig tijdvak", + "previewAutoFind": "Het systeem kiest automatisch de volgende uitvoertijd: {{value}}", + "weekdayMonday": "Ma", + "weekdayTuesday": "Di", + "weekdayWednesday": "Wo", + "weekdayThursday": "Do", + "weekdayFriday": "Vr", + "weekdaySaturday": "Za", + "weekdaySunday": "Zo", + "modeOnce": "Eenmalig", + "modeDaily": "Dagelijks", + "modeWeekly": "Wekelijks", + "repeatUnitMinute": "Minuut", + "repeatUnitHour": "Uur", + "repeatUnitDay": "Dag", + "unknownWeekday": "Onbekend", + "pickerEditTimes": "Tijdvakken bewerken", + "pickerAnyHHmm": "Je kunt elke `HH:mm`-waarde invoeren", + "pickerSelectedCount_one": "{{count}} geselecteerd", + "pickerSelectedCount_other": "{{count}} geselecteerd", + "pickerAdd": "Toevoegen", + "pickerSelectedTimes": "Geselecteerde tijden", + "pickerNone": "Nog geen tijdvakken geselecteerd", + "pickerSuggestions": "Suggesties" + }, + "remote": { + "title": "Bediening op afstand", + "statusRunning": "Actief. Beschikbaar via Feishu.", + "statusStopped": "Gestopt", + "startService": "Service starten", + "stopService": "Service stoppen", + "activeSessions": "Actieve sessies", + "authorizedUsers": "Geautoriseerde gebruikers", + "pendingApprovals": "Goedkeuringen in behandeling", + "pairingRequests": "Koppelverzoeken die op goedkeuring wachten", + "unknownUser": "Onbekende gebruiker", + "pairingCode": "Koppelcode", + "approve": "Goedkeuren", + "stepFeishu": "Feishu-installatie", + "stepConnection": "Verbinding", + "stepAdvanced": "Geavanceerd", + "feishuTitle": "Feishu-bot instellen", + "feishuDesc": "Maak een app in het Feishu Open Platform en vul hier vervolgens de inloggegevens in.", + "dmPolicy": "DM-autorisatiebeleid", + "policyPairing": "Koppelverificatie", + "policyPairingDesc": "Gebruikers moeten een koppelcode invoeren.", + "policyAllowlist": "Toegestane lijst", + "policyAllowlistDesc": "Alleen specifieke gebruikers zijn toegestaan.", + "policyOpen": "Open toegang", + "policyOpenDesc": "Iedereen kan de bot gebruiken.", + "openFeishu": "Feishu Open Platform openen", + "slackTitle": "Slack-bot instellen", + "slackDesc": "Maak een Slack-app, installeer deze in je werkruimte en vul hier vervolgens de inloggegevens in.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (voor Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Maak een uitgaande verbinding met Slack. Geen openbaar IP vereist.", + "openSlack": "Slack API openen", + "connectionTitle": "Verbindingsmodus", + "connectionDesc": "Kies hoe Feishu-servers met je computer communiceren.", + "longConnection": "Modus met langlopende verbinding", + "recommended": "Aanbevolen", + "longConnectionDesc": "De app maakt een uitgaande verbinding met Feishu-servers. Geen openbaar IP of ngrok vereist.", + "noPublicInternet": "Geen blootstelling aan openbaar internet", + "outOfBox": "Werkt direct uit de doos", + "stableReliable": "Stabiel en betrouwbaar", + "webhookMode": "Webhook-modus", + "webhookDesc": "Feishu pusht berichten naar je server. Een openbaar bereikbaar adres is vereist.", + "localWebhookUrl": "Lokale webhook-URL", + "useBuiltInNgrok": "Ingebouwde ngrok gebruiken", + "ngrokHelpPrefix": "Verkrijg er gratis een bij", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunnel verbonden", + "longConnectionHint": "Ga in het Feishu Open Platform naar Events & Callbacks > Event Configuration en zet de abonnementsmodus op langlopende verbinding.", + "advancedTitle": "Geavanceerde instellingen", + "advancedDesc": "Pas het gedrag van bediening op afstand aan.", + "defaultWorkingDirectory": "Standaardwerkmap", + "defaultWorkingDirectoryPlaceholder": "Bijvoorbeeld: C:\\Users\\jouw-naam\\Projects", + "defaultWorkingDirectoryHint": "Dit is de standaardmap voor AI-commando's. Je kunt deze ook in een bericht overschrijven met `[cwd:path]`.", + "gatewayPort": "Servicepoort", + "autoApproveSafeTools": "Veilige tools automatisch goedkeuren", + "autoApproveSafeToolsDesc": "Sta automatisch veilige tools toe, zoals het lezen van bestanden en browserbewerkingen.", + "saveConfig": "Configuratie opslaan", + "authorizedUsersTitle": "Geautoriseerde gebruikers ({{count}})", + "revokeAccess": "Toegang intrekken", + "quickStart": "Snelstart", + "quickStartStep1": "Maak een app in het Feishu Open Platform en voeg de Bot-mogelijkheid toe.", + "quickStartStep2": "Kopieer de App ID en App Secret naar de bovenstaande velden.", + "quickStartStep3": "Schakel deze machtigingen in bij de machtigingsinstellingen:", + "quickStartStep4": "Kies in de Event Configuration van Feishu de eventmodus met langlopende verbinding.", + "quickStartStep5Prefix": "Abonneer je op het", + "quickStartStep5Suffix": "-event.", + "quickStartStep6": "Publiceer de app en klik vervolgens op Service starten.", + "started": "Bediening op afstand gestart", + "stopped": "Bediening op afstand gestopt", + "actionFailed": "Bewerking mislukt", + "configSaved": "Configuratie opgeslagen", + "saveFailed": "Configuratie opslaan mislukt", + "pairingApproved": "Koppeling goedgekeurd", + "approveFailed": "Koppeling goedkeuren mislukt", + "reject": "Afwijzen", + "pairingRejected": "Koppeling afgewezen", + "rejectFailed": "Koppeling afwijzen mislukt", + "pairingGuideTitle": "Koppelhandleiding", + "pairingGuideStep1": "Open Feishu en zoek de bot", + "pairingGuideStep2": "Stuur een willekeurig bericht om de koppeling te starten", + "pairingGuideStep3": "Keur het koppelverzoek hieronder goed", + "pairingGuideStep4": "Klaar - de gebruiker kan nu met de bot chatten", + "waitingForPairing": "Wachten tot gebruikers de koppeling starten...", + "expiresIn": "Verloopt over {{time}}", + "userRemoved": "Gebruiker verwijderd", + "revokeFailed": "Gebruiker verwijderen mislukt", + "copied": "Gekopieerd" + }, + "time": { + "now": "nu" + }, + "permission": { + "permissionRequired": "Machtiging vereist", + "tool": "Tool:", + "input": "Invoer:", + "warning": "Deze actie kan je systeem wijzigen. Bekijk dit zorgvuldig.", + "deny": "Weigeren", + "allow": "Toestaan", + "alwaysAllow": "Deze tool altijd toestaan", + "useTool": "De tool {{toolName}} gebruiken", + "toolDescriptions": { + "write": "Naar bestanden op je systeem schrijven", + "edit": "Bestaande bestanden op je systeem bewerken", + "bash": "Shell-commando's uitvoeren", + "webFetch": "Gegevens van het web ophalen", + "webSearch": "Op het web zoeken", + "read_file": "Bestanden in de werkruimte lezen", + "write_file": "Bestanden in de werkruimte schrijven", + "edit_file": "Bestanden in de werkruimte bewerken", + "list_directory": "Mapinhoud in de werkruimte weergeven", + "execute_command": "Shell-commando's in de werkruimte uitvoeren", + "glob": "Bestanden op patroon zoeken", + "grep": "Bestandsinhoud doorzoeken" + } + }, + "sudo": { + "title": "Beheerdersmachtiging vereist", + "description": "Het volgende commando vereist beheerdersrechten:", + "passwordLabel": "Wachtwoord", + "passwordPlaceholder": "Voer je wachtwoord in", + "cancel": "Annuleren", + "execute": "Uitvoeren", + "warning": "Je wachtwoord wordt alleen voor dit commando gebruikt en wordt niet opgeslagen." + }, + "errorBoundary": { + "title": "Er is iets misgegaan", + "description": "Er is een onverwachte fout opgetreden in de applicatie. Je kunt proberen te herstellen door op de onderstaande knop te klikken.", + "details": "Foutdetails", + "retry": "Opnieuw proberen" + } +} diff --git a/src/renderer/i18n/locales/no.json b/src/renderer/i18n/locales/no.json new file mode 100644 index 00000000..ad433c44 --- /dev/null +++ b/src/renderer/i18n/locales/no.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Lagre", + "cancel": "Avbryt", + "delete": "Slett", + "edit": "Rediger", + "add": "Legg til", + "close": "Lukk", + "loading": "Laster...", + "error": "Feil", + "success": "Vellykket", + "saving": "Lagrer...", + "saved": "Lagret!", + "sure": "Er du sikker?", + "yes": "Ja", + "no": "Nei", + "enable": "Aktiver", + "disable": "Deaktiver", + "install": "Installer", + "optional": "valgfritt", + "appLogoAlt": "Open Cowork-logo", + "pastedImageAlt": "Limt inn {{index}}" + }, + "welcome": { + "title": "Hvordan kan jeg hjelpe deg i dag?", + "placeholder": "Beskriv hva du vil gjøre...", + "createFile": "Opprett en fil", + "crunchData": "Behandle data", + "organizeFiles": "Organiser filer", + "checkEmails": "Sjekk e-poster", + "searchPapers": "Søk og oppsummer artikler", + "summarizePapersToNotion": "Oppsummer artikler til Notion", + "selectWorkingFolder": "Velg arbeidsmappe (påkrevd)", + "selectWorkingFolderFailed": "Kunne ikke velge arbeidsmappe", + "attachFiles": "Legg ved filer", + "letsGo": "Sett i gang", + "starting": "Starter...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Open Cowork-logo", + "pastedImageAlt": "Limt inn {{index}}", + "quickPromptCreate": "Opprett en ny fil for meg", + "quickPromptCrunch": "Hjelp meg å analysere og behandle data", + "quickPromptOrganize": "Hjelp meg å organisere filene og mappene mine", + "quickPromptEmail": "Hjelp meg å bruke Chrome til å oppsummere de nye e-postene fra de siste tre dagene i Gmail og NetEase Mail. Merk at de lagrede kontoene allerede inkluderer hele e-postsuffikset. Derfor, hvis e-postsuffikset allerede er forhåndsutfylt på nettsiden eller i et skjermbilde, ikke skriv det inn igjen, for å unngå at innloggingen mislykkes. Sjekk også først om de tilhørende kontolegitimasjonene er lagret. Hvis brukernavnet eller passordet for en gitt e-posttjeneste ikke er lagret, kan du hoppe over den e-postkontoen.", + "quickPromptPapers": "Hjelp meg å bruke Chrome til å søke etter og oppsummere artikler relatert til [Agent] innen to dager.\nKildenettsteder:\n1. HuggingFace Daily Papers. Inkluder stemmeinformasjonen og et kort sammendrag. Merk at det kanskje ikke inkluderer artikler i helgen, så du må kanskje sjekke artiklene fra tidligere dager. Men pass på at det er totalt to dager.", + "quickPromptNotion": "Hjelp meg å undersøke tre representative oversiktsartikler relatert til agenter, og legg dem til under en Notion-side med tittelen \"Agent Survey\". For hver artikkel, inkluder tittelen, forfatterne, publiseringskanal/-år og et kort sammendrag av hovedbidragene.", + "apiNotConfigured": "API er ikke konfigurert ennå. Gå til Innstillinger for å sette opp API-leverandøren og -nøkkelen din.", + "goToSettings": "Gå til Innstillinger" + }, + "settings": { + "title": "Innstillinger", + "apiSettings": "API-innstillinger", + "apiSettingsDesc": "Konfigurer API-leverandør og -nøkkel", + "sandbox": "Sandkasse", + "sandboxDesc": "Isolert kjøringsmiljø", + "connectors": "MCP-koblinger", + "connectorsDesc": "Nettleser- og verktøyintegrasjoner", + "skills": "Ferdigheter", + "skillsDesc": "Administrer egendefinerte ferdigheter", + "memory": "Minne", + "memoryDesc": "Administrer langtidsminne og arbeidsområdeerfaring", + "schedule": "Tidsplaner", + "scheduleDesc": "Alarmlignende automatisering av instruksjoner", + "remote": "Fjernstyring", + "remoteDesc": "Bruk Open Cowork fra Feishu og andre kanaler", + "logs": "Logger", + "logsDesc": "Vis og eksporter applikasjonslogger", + "panelDesc": "Konfigurer arbeidsområdet, verktøyene og kontooppførselen din.", + "general": "Generelt", + "generalDesc": "Utseende, språk og preferanser" + }, + "general": { + "appearance": "Utseende", + "theme": "Tema", + "themeLight": "Lyst", + "themeDark": "Mørkt", + "themeSystem": "System", + "language": "Språk" + }, + "memory": { + "title": "Minne", + "description": "Globalt kjerneminne lagrer stabile preferanser, mens arbeidsområdets erfaringsminne lagrer prosjektspesifikk kunnskap over flere økter.", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "toggleHint": "Å slå dette av stopper fremtidig innhenting og automatisk gjenkalling, men beholder eksisterende oppføringer.", + "enableAction": "Aktiver minne", + "disableAction": "Deaktiver minne", + "enabledStatus": "Minne er aktivert", + "disabledStatus": "Minne er deaktivert", + "coreCount": "Kjerneoppføringer", + "sessionCount": "Øktsammendrag", + "chunkCount": "Erfaringsbiter", + "workspaceCount": "Arbeidsområder", + "latestIngestion": "Siste innhenting", + "noIngestionYet": "Ingen innhenting registrert ennå", + "health": "Tilstand", + "healthy": "Sunn, uten nylige feil", + "failedSessions": "{{count}} økt(er) mislyktes med sin siste innhenting", + "searchTitle": "Søk og inspiser", + "searchDescription": "Søk i minnet etter gjeldende arbeidsområde eller globalt, og inspiser deretter sammendrag og rådata-utdrag.", + "searchPlaceholder": "Søk i preferanser, tidligere implementeringer, beslutninger...", + "searchAction": "Søk", + "scopeWorkspace": "Gjeldende arbeidsområde", + "scopeAll": "Alt minne", + "scopeGlobal": "Kun kjerneminne", + "currentWorkspace": "Gjeldende arbeidsområde", + "groupCore": "Kjerneminne", + "groupSessions": "Øktsammendrag", + "groupChunks": "Bittreff", + "detailTitle": "Detalj", + "noSelection": "Velg et resultat for å inspisere hele sammendraget og kildeutdraget.", + "noResults": "Ingen resultater", + "maintenanceTitle": "Vedlikehold", + "maintenanceDescription": "Bygg om erfaringsminnet for gjeldende arbeidsområde eller tøm lagrede data.", + "rebuildWorkspace": "Bygg om gjeldende arbeidsområde", + "clearWorkspace": "Tøm gjeldende arbeidsområde", + "clearCore": "Tøm kjerneminne", + "rebuildConfirm": "Bygge om erfaringsminnet for gjeldende arbeidsområde? Dette skanner historiske økter i det arbeidsområdet på nytt.", + "clearWorkspaceConfirm": "Tømme erfaringsminnet for gjeldende arbeidsområde? Dette kan ikke angres.", + "clearCoreConfirm": "Tømme alt globalt kjerneminne? Dette kan ikke angres.", + "rebuildSuccess": "Arbeidsområdeminnet ble bygget om", + "clearWorkspaceSuccess": "Arbeidsområdeminnet ble tømt", + "clearCoreSuccess": "Kjerneminnet ble tømt", + "runtimeTitle": "Kjøretidskonfigurasjon", + "runtimeDescription": "Som standard arver dette den aktive API-konfigurasjonen. Her justerer du hovedsakelig navigasjonsdybde, embedding og katalogen på disk.", + "runtimeSaved": "Kjøretidskonfigurasjon for minne lagret", + "saveRuntime": "Lagre kjøretidskonfigurasjon", + "storageRoot": "Lagringsrot", + "noWorkspace": "Ingen arbeidsområde ennå", + "maxNavSteps": "Navigasjonstrinn", + "ingestionConcurrency": "Samtidighet ved ombygging", + "useEmbedding": "Aktiver embedding-gjenfinning", + "evalEnabled": "Aktiver evaluering med ekte modell", + "evalArtifactsRoot": "Katalog for evalueringsartefakter", + "evalMaxRounds": "Evalueringsrunder", + "promptIterationRounds": "Iterasjonsrunder for instruksjon", + "llmConfig": "Minne-LLM", + "embeddingConfig": "Embedding", + "inheritActive": "Arv aktiv API", + "modelOverride": "Overstyr modell", + "baseUrlOverride": "Overstyr Base URL", + "apiKeyOverride": "Overstyr API-nøkkel", + "allSources": "Alle kilder", + "groupRawSessions": "Råøkter", + "sourceFile": "Kildefil", + "inspectSession": "Inspiser øktminne", + "inspectSessionHint": "Velg en økt eller bit fra resultatene ovenfor for å inspisere den.", + "revealInFinder": "Vis i Finder", + "rebuildAll": "Bygg om alt minne", + "rebuildAllConfirm": "Dette tømmer og bygger om alt minne. Fortsette?", + "rebuildAllSuccess": "Bygde om alt minne: {{sessionCount}} økt(er), {{workspaceCount}} kildearbeidsområde(r)", + "filesTitle": "Råfilviser", + "filesDescription": "Vis kjerne- / samlet erfaring / session_state / eval-artefakter nøyaktig slik de skrives til disk.", + "fileList": "Filliste", + "refreshFiles": "Oppdater", + "noFiles": "Ingen minnefiler ennå", + "fileContent": "Filinnhold", + "emptyFile": "Filen er tom", + "selectFileHint": "Velg en fil til venstre for å vise dens rå JSON." + }, + "language": { + "english": "Engelsk", + "chinese": "Kinesisk", + "selectLanguage": "Velg språk", + "currentLanguage": "Gjeldende språk" + }, + "api": { + "firstRunTitle": "Sett opp API", + "firstRunSubtitle": "Konfigurer en leverandør for å begynne å bruke Open Cowork", + "settingsTitle": "API-innstillinger", + "settingsSubtitle": "Administrer innstillinger for leverandør, nøkkel og modell", + "configSet": "Konfigurasjonssett", + "defaultSetTag": "Standard", + "saveAs": "Lagre som", + "renameSet": "Gi nytt navn", + "deleteSet": "Slett sett", + "saveAndSwitch": "Lagre og bytt", + "discardAndSwitch": "Forkast og bytt", + "currentSetSavingHint": "\"Lagre innstillinger\" oppdaterer kun det valgte konfigurasjonssettet.", + "unsavedCurrentSetHint": "Gjeldende konfigurasjonssett har ulagrede endringer.", + "unsavedSwitchPrompt": "Gjeldende konfigurasjonssett har ulagrede endringer. Velg en handling før du bytter til \"{{name}}\".", + "configSetSaveAsPrompt": "Skriv inn et navn for det nye konfigurasjonssettet", + "configSetRenamePrompt": "Skriv inn et nytt navn for dette konfigurasjonssettet", + "configSetDeleteConfirm": "Slette konfigurasjonssettet \"{{name}}\"?", + "configSetNameRequired": "Navn på konfigurasjonssett er påkrevd", + "configSetLimitReached": "Du kan lagre opptil {{count}} konfigurasjonssett", + "configSetCreated": "Konfigurasjonssett opprettet", + "configSetRenamed": "Konfigurasjonssett fikk nytt navn", + "configSetDeleted": "Konfigurasjonssett slettet", + "configSetSwitched": "Konfigurasjonssett byttet", + "defaultConfigSetName": "Standard", + "configSetFallbackName": "Konfigurasjonssett {{index}}", + "provider": "API-leverandør", + "providerDescription": "Velg leverandørfamilien og den overordnede protokollstilen for dette arbeidsområdet.", + "apiKey": "API-nøkkel", + "enterApiKey": "Skriv inn API-nøkkelen din", + "apiKeyDescription": "Lagres lokalt og er avgrenset til det aktive konfigurasjonssettet.", + "protocol": "Protokoll", + "baseUrl": "Base URL", + "model": "Modell", + "usePreset": "Bruk forhåndsinnstilling", + "custom": "Egendefinert", + "moreModels": "Flere modeller", + "noModelsAvailable": "Ingen modeller tilgjengelig", + "selectProtocol": "Velg den kompatible protokollen for tjenesten", + "enterOllamaUrl": "Skriv inn URL-en til den OpenAI-kompatible Ollama-tjenesten", + "enterOpenAIUrl": "Skriv inn URL til OpenAI-kompatibel tjeneste", + "enterAnthropicUrl": "Skriv inn URL til Anthropic-kompatibel tjeneste", + "enterGeminiUrl": "Skriv inn en Gemini-kompatibel Base URL", + "enterModelId": "Skriv inn modell-ID, f.eks. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Velg en modell", + "contextWindow": "Kontekstvindu", + "contextWindowPlaceholder": "Oppdag automatisk", + "maxOutputTokens": "Maks utdata-tokens", + "maxOutputTokensPlaceholder": "Oppdag automatisk", + "contextWindowHint": "La stå tomt for automatisk oppdagelse. Overstyr kun hvis modellen rapporterer feil grenser.", + "saveFailed": "Kunne ikke lagre innstillinger. Prøv igjen.", + "getStarted": "Kom i gang", + "saveSettings": "Lagre innstillinger", + "openSettingsAction": "Åpne API-innstillinger", + "configRequiredActiveSet": "Gjeldende konfigurasjonssett har ikke brukbar legitimasjon. Fullfør oppsettet i API-innstillinger først.", + "testConnection": "Test tilkobling", + "testingConnection": "Tester...", + "refreshModels": "Oppdater modeller", + "refreshingModels": "Oppdaterer...", + "refreshModelsFailed": "Kunne ikke oppdatere modeller. Sjekk URL-en eller tjenestestatusen.", + "manualModel": "Manuell modell", + "useDetectedModels": "Bruk oppdagede modeller", + "discoverLocalOllama": "Finn lokal Ollama", + "discoveringLocalOllama": "Finner...", + "discoverLocalOllamaHint": "Skriv inn Ollama-endepunktet ditt først. Modeller hentes automatisk, og manuell inntasting er bare nødvendig hvis oppdagelsen mislykkes.", + "localOllamaDiscovered": "Fant lokal Ollama med {{count}} tilgjengelig(e) modell(er).", + "localOllamaNotFound": "Ingen lokal Ollama-tjeneste ble funnet. Start den med `ollama serve` og prøv igjen.", + "localOllamaNoModels": "Fant en lokal Ollama-tjeneste, men den eksponerer for øyeblikket ingen modeller.", + "localOllamaModelUnavailable": "Fant lokal Ollama, men modellen {{model}} kunne ikke fullføre en minimal inferensforespørsel.", + "localOllamaModelLoading": "Fant lokal Ollama, men modellen lastes fortsatt inn i minnet. Store modeller kan ta opptil ett minutt.", + "enableThinking": "Aktiver tenkemodus", + "enableThinkingHint": "Vis Claudes tankeprosess trinn for trinn. Dette gir mer åpenhet, men kan øke tokenbruken.", + "enableThinkingOllamaHint": "De fleste Ollama-modeller støtter ikke tenkemodus. Aktiver kun hvis modellen din uttrykkelig støtter det.", + "testSuccess": "Tilkobling vellykket ({{ms}} ms)", + "testSuccessNeedSave": "Tilkoblingstesten besto. Lagre innstillingene før du starter en økt.", + "testError": { + "missing_key": "API-nøkkel er påkrevd", + "missing_base_url": "Base URL er påkrevd for denne leverandøren", + "unauthorized": "Ugyldig API-nøkkel eller uautorisert", + "not_found": "Endepunktet ble ikke funnet. Sjekk Base URL", + "rate_limited": "Hastighetsbegrenset eller kvote overskredet", + "server_error": "Tjenestefeil. Prøv igjen senere", + "network_error": "Nettverksfeil. Sjekk tilkoblingen din", + "ollama_not_running": "Kan ikke koble til Ollama. Sørg for at Ollama kjører (ollama serve).", + "ollama_loading": "Ollama laster modellen inn i minnet. Store modeller kan ta 30–120 sekunder. Vent litt og prøv igjen.", + "unknown": "Tilkobling mislyktes" + }, + "guidance": { + "commonSetupsTitle": "Vanlige leverandøroppsett", + "commonSetupsHint": "Se gjennom eller bruk et anbefalt oppsett", + "apply": "Bruk", + "detectedBadge": "Oppdaget", + "preferProviderTab": "Oppdaget {{service}}. Denne tjenesten er vanligvis enklere å konfigurere fra den dedikerte {{provider}}-fanen.", + "protocolMismatch": "Oppdaget {{service}}. Anbefalt protokoll: {{recommendedProtocol}}.", + "protocolLooksGood": "Oppdaget {{service}}. Den gjeldende protokollen din samsvarer allerede med det anbefalte {{recommendedProtocol}}-oppsettet.", + "baseUrlHint": "Oppdaget {{service}}. Anbefalt {{recommendedProtocol}}-oppsett: {{baseUrl}}. Eksempelmodell: {{model}}.", + "genericBaseUrlHint": "Dette ser ut som et egendefinert {{recommendedProtocol}}-kompatibelt endepunkt. Anbefalt Base URL-format: {{baseUrl}}. Eksempelmodell: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Tjeneste", + "protocol": "Protokoll", + "baseUrl": "Base URL", + "model": "Eksempelmodell", + "notes": "Notater", + "action": "Handling" + }, + "errorHints": { + "emptyProbeGeneric": "Endepunktet returnerte et tomt sonderingssvar. Dette betyr vanligvis at den valgte protokollen eller modellen er inkompatibel med tjenesten.", + "emptyProbeDetected": "{{service}} returnerte et tomt sonderingssvar. Prøv det anbefalte {{recommendedProtocol}}-oppsettet og bekreft modell-ID-en for det endepunktet.", + "emptyProbePreferProvider": "{{service}} returnerte et tomt sonderingssvar. Prøv den dedikerte {{provider}}-fanen i stedet for å konfigurere det som et generisk egendefinert endepunkt.", + "probeMismatchGeneric": "Endepunktet svarte, men ikke i formatet denne sonderingen forventet. Dette peker vanligvis på en uoverensstemmelse i protokoll- eller modellkompatibilitet.", + "probeMismatchDetected": "{{service}} svarte med et uventet sonderingsformat. Prøv det anbefalte {{recommendedProtocol}}-oppsettet og bekreft modell-ID-en for det endepunktet." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Foretrekk den dedikerte OpenRouter-leverandørfanen med mindre du feilsøker et egendefinert relé." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Bruk OpenAI-kompatibel modus og kopier den nøyaktige modell-ID-en fra DeepSeek-dokumentasjonen." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Bruk koding-endepunktet med Anthropic-kompatibel modus. Dobbeltsjekk den nøyaktige koding-modell-ID-en fra Moonshot-dokumentasjonen." + }, + "glm": { + "name": "GLM / BigModel (Anthropic-rute)", + "note": "Bruk den Anthropic-kompatible ruten når endepunktstien inkluderer /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Foretrekk den dedikerte Ollama-leverandørfanen for oppdagelse og oppdatering av lokale modeller." + }, + "gemini": { + "name": "Gemini egendefinert endepunkt", + "note": "Bruk Gemini-kompatibel modus og den nøyaktige modell-ID-en som eksponeres av endepunktet." + }, + "minimax": { + "name": "MiniMax", + "note": "Bruk OpenAI-kompatibel modus med mindre MiniMax-gatewayen din dokumenterer en annen protokoll." + }, + "genericOpenAI": { + "name": "Generisk OpenAI-kompatibel", + "note": "Bruk dette for egendefinerte reléer, gatewayer eller inferensservere som etterligner OpenAI-API-et." + } + } + }, + "newSet": "Nytt sett", + "createSetTitle": "Opprett konfigurasjonssett", + "saveAsTitle": "Lagre som konfigurasjonssett", + "createSetNamePlaceholder": "Skriv inn navn på konfigurasjonssett", + "renameSetTitle": "Gi nytt navn til konfigurasjonssett", + "unsavedBeforeActionPrompt": "Gjeldende konfigurasjonssett har ulagrede endringer. Velg en handling før \"{{action}}\".", + "newSetDefaultName": "Nytt konfigurasjonssett", + "copyNameSuffix": "Kopi", + "currentSetLabel": "Gjeldende sett: ", + "unsavedBadge": "Ulagret", + "saveAndContinue": "Lagre og fortsett", + "discardAndContinue": "Forkast og fortsett", + "currentSetName": "Settnavn", + "renameInlineHint": "Rediger direkte. Trykk Enter eller klikk utenfor for å lagre automatisk", + "switchSetLabel": "Bytt til et annet sett", + "switchSetPlaceholder": "Velg et sett å bytte til", + "noOtherSetHint": "Ingen andre sett tilgjengelig", + "configSetMissing": "Konfigurasjonssett ikke funnet", + "configSetCloneSourceMissing": "Kunne ikke finne et konfigurasjonssett å klone", + "configSetSystemDeleteForbidden": "Standard konfigurasjonssett kan ikke slettes", + "configSetKeepOne": "Behold minst ett konfigurasjonssett", + "diagnostic": { + "runDiagnostics": "Diagnostiser tilkobling", + "runQuickDiagnostics": "Rask diagnose", + "runDeepDiagnostics": "Dyp inferenssjekk", + "running": "Diagnostiserer...", + "step": { + "dns": "DNS-oppslag", + "tcp": "TCP-tilkobling", + "tls": "TLS-håndtrykk", + "auth": "API-autentisering", + "model": "Modellverifisering" + }, + "status": { + "pending": "Venter", + "running": "Sjekker...", + "ok": "OK", + "fail": "Mislyktes", + "skip": "Hoppet over" + }, + "overallSuccess": "Alle sjekker besto ({{ms}} ms)", + "overallFail": "Diagnosen mislyktes ved {{step}}", + "advisory": { + "not_deep_verified": "Endepunktet er tilgjengelig og den valgte modellen er oppført, men ingen sanntidsinferens er utført ennå.", + "model_loading": "Endepunktet er tilgjengelig, men modellen lastes kanskje fortsatt inn i minnet." + }, + "latency": "{{ms}} ms", + "fix": { + "dns_resolve_failed": "Kan ikke slå opp vertsnavnet {{host}}. Sjekk om URL-en er riktig.", + "tcp_connect_failed": "Kan ikke koble til {{host}}. Sjekk nettverket eller brannmurinnstillingene dine.", + "tls_handshake_failed": "TLS-håndtrykket mislyktes. Dette kan skyldes et sertifikatproblem eller proxy-forstyrrelse.", + "missing_api_key": "API-nøkkelen mangler eller er ugyldig. Sjekk nøkkelen din.", + "auth_invalid_key": "API-nøkkelen er ugyldig eller utløpt. Sjekk om nøkkelen er riktig.", + "auth_endpoint_not_found": "API-endepunktet ble ikke funnet. Sjekk om Base URL er riktig.", + "auth_request_failed": "Autentiseringsforespørselen mislyktes. Sjekk konfigurasjonen din.", + "model_network_error": "Kunne ikke nå modellen {{model}}. Sjekk nettverket, VPN- eller proxy-innstillingene dine.", + "model_rate_limited": "Modellen {{model}} er for øyeblikket hastighetsbegrenset eller tom for kvote. Prøv igjen senere.", + "model_request_failed": "Forespørselen til modellen {{model}} mislyktes på leverandørsiden. Prøv igjen senere.", + "model_unavailable": "Modellen {{model}} er ikke tilgjengelig. Bekreft modellnavnet.", + "ollama_no_models_loaded": "Endepunktet er tilgjengelig, men det returnerte ingen modeller. Hent en modell i Ollama først.", + "ollama_model_not_listed": "Modellen {{model}} er ikke i endepunktets modelliste. Velg en oppdaget modell eller bytt til manuell inntasting.", + "ollama_model_loading": "Modellen {{model}} lastes kanskje fortsatt. Prøv dypsjekken igjen om litt.", + "model_cold_start": "Modellen lastes kanskje fortsatt inn i GPU-/CPU-minnet. Store modeller (7B+) kan ta 30–120 sekunder ved første bruk. Prøv igjen snart." + } + } + }, + "window": { + "minimize": "Minimer", + "maximize": "Maksimer", + "restore": "Gjenopprett", + "close": "Lukk" + }, + "sandbox": { + "title": "Sandkassemiljø", + "wslDesc": "Kjør kommandoer i WSL2 Linux-miljøet for bedre isolasjon og sikkerhet på Windows.", + "limaDesc": "Kjør kommandoer i Lima VM for bedre isolasjon og sikkerhet på macOS.", + "nativeDesc": "Kommandoer kjøres direkte på systemet ditt (Linux nativ modus).", + "enableSandbox": "Aktiver sandkassemodus", + "comingSoon": "Kommer snart — under utvikling", + "readyStatus": "Sandkasse klar og kjører", + "notReadyStatus": "Sandkasse aktivert, men ikke fullstendig konfigurert", + "disabledStatus": "Sandkasse deaktivert – kommandoer kjøres direkte på systemet", + "enabledWillSetup": "Sandkasse aktivert. Setter opp miljøet...", + "disabled": "Sandkassemodus deaktivert", + "failedToLoad": "Kunne ikke laste sandkassestatus", + "failedToSave": "Kunne ikke lagre sandkasseinnstillinger", + "statusRefreshed": "Status oppdatert", + "checkFailed": "Kunne ikke sjekke sandkassestatus", + "environmentStatus": "Miljøstatus", + "checkStatus": "Sjekk status", + "platform": "Plattform", + "mode": "Modus", + "status": "Status", + "native": "Nativ", + "wslAvailable": "WSL2 tilgjengelig", + "limaAvailable": "Lima tilgjengelig", + "vmCreated": "VM-instans opprettet", + "vmRunning": "VM kjører", + "wslNotInstalled": "WSL2 er ikke installert", + "wslInstallHint": "Installer WSL2 for bedre isolasjon. Kjør denne kommandoen i PowerShell som administrator:", + "limaNotInstalled": "Lima er ikke installert", + "limaInstallHint": "Installer Lima for bedre isolasjon. Kjør denne kommandoen i Terminal:", + "linuxNative": "Linux kjører kommandoer nativt uten ekstra sandkasse.", + "nodeInstalled": "Node.js installert", + "nodeInstallFailed": "Kunne ikke installere Node.js", + "pythonInstalled": "Python installert", + "pythonInstallFailed": "Kunne ikke installere Python", + "start": "Start", + "stop": "Stopp", + "limaStarted": "Lima VM startet", + "limaStartFailed": "Kunne ikke starte Lima VM", + "limaStopped": "Lima VM stoppet", + "limaStopFailed": "Kunne ikke stoppe Lima VM", + "settingUp": "Setter opp...", + "retrySetup": "Prøv oppsett på nytt", + "setupComplete": "Sandkasseoppsett fullført", + "setupFailed": "Sandkasseoppsett mislyktes", + "helpText1": "Sandkassen gir et isolert miljø for å kjøre kommandoer trygt.", + "helpText2": "WSL2 (Windows) eller Lima VM (macOS) kreves for full sandkassestøtte.", + "setupTitle": "Setter opp sandkasse", + "setupSubtitle": "Første kjøring krever konfigurasjon av et sikkert kjøringsmiljø.", + "progressLabel": "Fremdrift", + "continuingNative": "Fortsetter med nativ kjøringsmodus.", + "retryLima": "Prøv å starte Lima på nytt", + "retryingLima": "Starter Lima på nytt...", + "continueNative": "Fortsett med nativ modus", + "configuredSuccess": "Sandkasse konfigurert. Kode kan nå kjøres trygt.", + "nativeFallbackSuccess": "Bruker det native systemmiljøet for kommandokjøring.", + "footerWsl": "WSL2-sandkasse", + "footerLima": "Lima-sandkasse", + "footerNative": "Nativ modus", + "configuring": "Konfigurerer...", + "syncFiles_one": "{{count}} fil", + "syncFiles_other": "{{count}} filer", + "syncExplanation": "Synkroniserer prosjektfiler til den isolerte sandkassen for sikker kodekjøring.", + "syncFirst": "Første synkronisering er tregere,", + "syncFollowup": "inkrementelle synkroniseringer vil være raskere.", + "checkingWsl": "Sjekker WSL2-miljøet...", + "checkingLima": "Sjekker Lima-miljøet...", + "creatingLima": "Oppretter Lima VM...", + "startingLima": "Starter Lima VM...", + "installingNode": "Installerer Node.js...", + "installingPython": "Installerer Python...", + "installingPip": "Installerer pip...", + "installingDeps": "Installerer ferdighetsavhengigheter...", + "setupFailedMessage": "Sandkasseoppsett mislyktes", + "sandboxDisabledMessage": "Sandkasse deaktivert", + "nativeModeMessage": "Bruker nativ kjøringsmodus", + "wslNotDetectedMessage": "WSL2 ikke oppdaget, bruker nativ modus", + "limaNotDetectedMessage": "Lima ikke oppdaget, bruker nativ modus", + "nodeInstallFailedMessage": "Installasjon av Node.js mislyktes", + "wslReadyMessage": "WSL2-sandkasse klar", + "limaReadyMessage": "Lima-sandkasse klar", + "limaCreateFailedMessage": "Oppretting av Lima VM mislyktes", + "limaStartFailedMessage": "Oppstart av Lima VM mislyktes", + "setupDetailSandboxDisabled": "Bruker nativ kjøringsmodus (sandkasse deaktivert i innstillingene)", + "setupDetailLinuxNative": "Linux kjører kommandoer direkte", + "setupDetailInstallWsl": "Installer WSL2 for bedre sandkasseisolasjon", + "setupDetailInstallNodeWsl": "Installer Node.js manuelt i WSL", + "setupDetailInstallNodeWslRuntime": "Installerer Node.js-kjøretid i {{distro}}", + "setupDetailInstallPythonWslRuntime": "Installerer Python-kjøretid i {{distro}}", + "setupDetailInstallPipWslRuntime": "Installerer Python-pakkebehandler i {{distro}}", + "setupDetailInstallDeps": "Installerer markitdown, pypdf, pdfplumber for PDF-/PPTX-ferdigheter", + "setupDetailInstallLima": "Installer Lima for bedre sandkasseisolasjon (brew install lima)", + "setupDetailCreateLima": "Første kjøring krever nedlasting av image og kan ta noen minutter", + "setupDetailStartLima": "VM-oppstart kan ta noen minutter", + "setupDetailInstallNodeLima": "Installerer Node.js-kjøretid i Lima VM", + "setupDetailInstallPythonLima": "Installerer Python-kjøretid i Lima VM", + "syncingFilesMessage": "Synkroniserer filer til sandkassen...", + "syncingSkillsMessage": "Konfigurerer ferdigheter...", + "syncReadyMessage": "Sandkasse klar", + "syncFailedMessage": "Sandkassesynkronisering mislyktes", + "syncDetailWsl": "Kopierer prosjektfiler til det isolerte WSL-miljøet", + "syncDetailLima": "Kopierer prosjektfiler til det isolerte Lima-miljøet", + "syncDetailSkills": "Kopierer innebygde ferdigheter til sandkassen", + "syncDetailFallback": "Faller tilbake til direkte tilgangsmodus (mindre sikker)", + "syncDetailCompleted": "Synkroniserte {{count}} filer" + }, + "mcp": { + "noConnectors": "Ingen koblinger konfigurert", + "addConnector": "Legg til en kobling for å aktivere MCP-verktøy", + "toolsAvailable": "{{count}} verktøy tilgjengelig", + "toolsAvailable_plural": "{{count}} verktøy tilgjengelig", + "connected": "Tilkoblet", + "notConnected": "Ikke tilkoblet", + "connecting": "Kobler til...", + "failed": "Tilkobling mislyktes", + "chromeHint": "Et nytt Chrome-feilsøkingsvindu åpnes automatisk hvis porten er utilgjengelig", + "quickAddPresets": "Forhåndsinnstillinger for hurtigtillegg", + "show": "Vis", + "hide": "Skjul", + "addCustomConnector": "Legg til egendefinert kobling", + "configure": "Konfigurer", + "added": "Lagt til", + "requiresToken": "Krever token", + "editConnector": "Rediger kobling", + "addConnectorTitle": "Legg til egendefinert kobling", + "name": "Navn", + "namePlaceholder": "Chrome MCP Server", + "type": "Type", + "typeStdioLocal": "STDIO (lokal)", + "typeSseRemote": "SSE (ekstern)", + "typeStreamableHttp": "HTTP (strømmebar)", + "command": "Kommando", + "commandPlaceholder": "npx", + "arguments": "Argumenter", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Mellomromsadskilte argumenter", + "url": "URL", + "enableConnector": "Aktiver denne koblingen", + "presetAlreadyConfigured": "Koblingen \"{{name}}\" er allerede konfigurert", + "envValuePlaceholder": "Skriv inn verdi", + "removeVar": "Fjern", + "loadServersFailed": "Kunne ikke laste koblinger", + "saveServerFailed": "Kunne ikke lagre kobling", + "deleteServerFailed": "Kunne ikke slette kobling", + "deleteConnectorConfirm": "Slette denne koblingen?", + "commandRequired": "Kommando er påkrevd", + "urlRequired": "URL er påkrevd", + "toolCount": "{{count}} verktøy", + "callCount": "{{count}} kall" + }, + "credentials": { + "envVars": "Miljøvariabler", + "enterEnvVar": "Skriv inn navn på miljøvariabel (f.eks. NOTION_TOKEN):", + "usedForTokens": "Brukes til tokens og hemmeligheter (f.eks. NOTION_TOKEN)", + "noEnvVars": "Ingen miljøvariabler konfigurert" + }, + "skills": { + "storagePathHint": "Velg hvor egendefinerte ferdigheter ligger og hvordan appen oppdaterer dem.", + "builtinSkillsDesc": "Innebygde ferdigheter følger med appen og kan slås av og på ved behov.", + "pluginsTitle": "Programtillegg og importer", + "pluginsDesc": "Bla gjennom programtillegg i markedsplassen eller importer egendefinerte ferdigheter fra en lokal mappe.", + "title": "📦 Ferdigheter", + "description": "Ferdigheter utvider Claudes evner med spesialisert kunnskap og verktøy.", + "builtinSkills": "Innebygde ferdigheter", + "customSkills": "Egendefinerte ferdigheter", + "noCustomSkills": "Ingen egendefinerte ferdigheter installert", + "installSkillsDesc": "Installer ferdigheter for å utvide Claudes evner", + "browsePlugins": "Bla gjennom programtillegg", + "pluginListTitle": "Bla gjennom Claude-programtilleggsmarkedet", + "pluginSkillCount": "Installerbare ferdigheter: {{count}}", + "pluginComponents": "Komponenter: ferdigheter {{skills}} · kommandoer {{commands}} · agenter {{agents}} · hooks {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Komponentdetaljer blir tilgjengelige etter installasjon.", + "pluginInstall": "Installer", + "pluginInstalled": "Installert", + "pluginInstallSuccess": "Programtillegget \"{{name}}\" ble installert", + "pluginInstallFailed": "Kunne ikke installere programtillegg", + "pluginNoSkills": "Dette programtillegget har ingen installerbare ferdigheter i V1", + "pluginNoComponents": "Dette programtillegget har ingen lastbare komponenter", + "pluginManage": "Administrer", + "pluginEnable": "Aktiver", + "pluginDisable": "Deaktiver", + "pluginUninstall": "Avinstallere programtillegget \"{{name}}\"?", + "pluginManageUninstall": "Avinstaller", + "pluginUninstalled": "Programtillegget \"{{name}}\" ble avinstallert", + "pluginComponentHooksDisabledByDefault": "Dette programtillegget inkluderer hooks. Hooks er deaktivert som standard og kan aktiveres i administrasjonsinnstillingene etter installasjon.", + "pluginComponentMcpDisabledByDefault": "Dette programtillegget inkluderer MCP. MCP er deaktivert som standard og kan aktiveres i administrasjonsinnstillingene etter installasjon.", + "pluginAppliedInRuntime": "Programtilleggsinnstillinger brukes for øyeblikket under kjøring", + "pluginDisabled": "Programtillegget er for øyeblikket deaktivert", + "noPluginsFound": "Ingen programtillegg tilgjengelig", + "storagePathTitle": "Lagringskatalog for ferdigheter", + "storagePathUnavailable": "Lagringssti utilgjengelig", + "selectStoragePath": "Velg katalog", + "openStoragePath": "Åpne katalog", + "refreshSkills": "Oppdater ferdigheter", + "storagePathUpdated": "Lagring oppdatert. Migrerte {{migrated}} ferdigheter, hoppet over {{skipped}}", + "storagePathUpdateFailed": "Kunne ikke oppdatere lagringssti for ferdigheter", + "storagePathOpenFailed": "Kunne ikke åpne lagringssti for ferdigheter", + "storagePathFallback": "Falt tilbake til standard ferdighetskatalog. Bekreft den konfigurerte stien din.", + "storageWatcherError": "Feil i overvåking av ferdighetskatalog: {{message}} (polling-reserve aktivert).", + "installSkillFromFolder": "Installer ferdighet fra mappe", + "deleteSkill": "Slette ferdigheten \"{{name}}\"?", + "failedToLoad": "Kunne ikke laste ferdigheter", + "failedToInstall": "Kunne ikke installere ferdighet", + "failedToDelete": "Kunne ikke slette ferdighet", + "failedToToggle": "Kunne ikke slå av/på ferdighet" + }, + "logs": { + "actionsTitle": "Logghandlinger", + "title": "Applikasjonslogger", + "description": "Vis og eksporter diagnosepakker for feilsøking. Logger roteres automatisk etter 10 MB, og eksporter inkluderer også nylige økt- og feilsammendrag.", + "inventoryDescription": "Gjeldende loggoversikt og lagringsfotavtrykk.", + "recentDescription": "Nylige applikasjonslogger tilgjengelig for inspeksjon. Du kan fortsatt eksportere en diagnosepakke selv om ingen loggfil finnes ennå.", + "directoryDescription": "Gjeldende plassering på disk for applikasjonslogger.", + "actionsDescription": "Eksporter en diagnosepakke, vis loggkatalogen eller tøm loggfiler.", + "enableDevLogs": "Aktiver utviklerlogger", + "enableDevLogsDesc": "Registrer detaljerte logger for feilsøking. Deaktiver for å redusere diskbruk.", + "devLogsEnabled": "Utviklerlogger aktivert", + "devLogsDisabled": "Utviklerlogger deaktivert", + "toggleFailed": "Kunne ikke slå av/på utviklerlogger", + "logFiles": "Loggfiler", + "totalSize": "Total størrelse", + "noLogFiles": "Ingen loggfiler funnet", + "logsDirectory": "Loggkatalog:", + "exportZip": "Eksporter diagnostikk", + "openFolder": "Åpne mappe", + "clearAll": "Tøm alt", + "clearConfirm": "Er du sikker på at du vil tømme alle loggfiler? Denne handlingen kan ikke angres.", + "exportSuccess": "Diagnostikk eksportert til {{path}}", + "clearSuccess": "Tømte {{count}} loggfil(er)", + "exportFailed": "Kunne ikke eksportere logger", + "clearFailed": "Kunne ikke tømme logger", + "helpText1": "Den eksporterte diagnosepakken inkluderer applogger, et redigert kjøretidsbilde og metadata-baserte økt-/feilsammendrag uten meldingsinnhold som standard.", + "helpText2": "Å dele den pakken lar oss vanligvis innsnevre problemer mye raskere, enten de kommer fra grensesnittet, verktøykjøring eller det lokale miljøet." + }, + "sidebar": { + "recents": "Nylige", + "expandToView": "Utvid for å se oppgaver", + "noTasks": "Ingen oppgaver ennå", + "noTasksHint": "Start en ny chat for å begynne å bygge, undersøke eller redigere filer.", + "search": "Søk i samtaler...", + "deleteAll": "Slett alle samtaler", + "localTasks": "Disse oppgavene kjøres lokalt og synkroniseres ikke på tvers av enheter.", + "apiConfigured": "API konfigurert", + "apiNotConfigured": "API ikke konfigurert", + "user": "Bruker", + "newTask": "Ny chat", + "newTaskHint": "Start en ny samtale", + "today": "I dag", + "yesterday": "I går", + "previousWeek": "Siste 7 dager", + "older": "Eldre", + "settings": "Innstillinger", + "themeToggle": "Bytt tema", + "manage": "Administrer", + "selectAll": "Velg alle", + "deselectAll": "Fjern alle valg", + "nSelected": "{{count}} valgt", + "batchDeleteConfirm": "Slette {{count}} samtaler? Dette kan ikke angres.", + "cancel": "Avbryt", + "confirmDelete": "Slett" + }, + "chat": { + "sendMessage": "Send melding", + "stop": "Stopp", + "processing": "Behandler...", + "typeMessage": "Skriv en melding...", + "loadingConversation": "Laster samtale...", + "startConversation": "Start samtalen", + "startFailed": "Kunne ikke starte økt. Prøv igjen.", + "disclaimer": "Open Cowork er AI-drevet og kan gjøre feil. Dobbeltsjekk svarene.", + "noModel": "Ingen modell", + "connectorCount_one": "{{count}} kobling", + "connectorCount_other": "{{count}} koblinger" + }, + "context": { + "progress": "Fremdrift", + "artifacts": "Artefakter", + "context": "Kontekst", + "workingDirectory": "Arbeidskatalog", + "toolsUsed": "Brukte verktøy", + "mcpConnectors": "MCP-koblinger", + "copied": "Kopiert!", + "noToolsUsedYet": "Ingen verktøy brukt ennå", + "toolsUsedLabel": "Brukte verktøy:", + "noFolderSelected": "Ingen mappe valgt", + "expandPanel": "Utvid panel", + "collapsePanel": "Skjul panel", + "queuedMessages": "Meldinger i kø: {{count}}", + "stepsWillShow": "Trinn vises etter hvert som oppgaven utfolder seg.", + "noArtifactsYet": "Ingen artefakter ennå", + "revealFailed": "Kan ikke finne filen. Sjekk om stien finnes.", + "fileCreated": "Fil opprettet", + "callNumber": "Kall nr. {{number}}", + "input": "Inndata:", + "output": "Utdata:", + "tokenUsage": "Tokenbruk", + "inputTokens": "Inndata", + "outputTokens": "Utdata", + "totalTokens": "Totalt", + "changeDir": "Endre katalog", + "changeDirFailed": "Kunne ikke endre katalog", + "copyPath": "Kopier sti", + "openInFileManager": "Åpne i filbehandler", + "contextUsage": "Kontekstbruk", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Forespørsel", + "queued": "I kø", + "cancelled": "Avbrutt", + "emptyMessage": "Tom melding", + "emptyText": "(tom tekst)", + "copyMessage": "Kopier melding", + "revealInFolder": "Vis i mappe", + "pastedContentAlt": "Limt inn innhold", + "taskProgress": "Oppgavefremdrift", + "noQuestions": "Ingen spørsmål", + "question": "Spørsmål", + "thinking": "Tenker", + "executionTime": "Kjøretid: {{time}}" + }, + "schedule": { + "createTitle": "Opprett tidsplan", + "editTitle": "Rediger tidsplan", + "autoTitleLabel": "Automatisk tittel (brukes til å identifisere økter)", + "autoTitleChangedHint": "Instruksjonen ble endret. Tittelen genereres på nytt etter lagring.", + "autoTitleUnchangedHint": "Hvis instruksjonen forblir den samme, beholdes den eksisterende tittelen.", + "autoTitleEditingChanged": "Etter lagring genereres tittelen på nytt fra instruksjonen med prefikset [Planlagt oppgave].", + "autoTitleEditingUnchanged": "Etter lagring genereres tittelen med prefikset [Planlagt oppgave].", + "autoTitleCreating": "Etter lagring genereres tittelen med prefikset [Planlagt oppgave] og et modellsammendrag.", + "promptPlaceholder": "Instruksjon som skal kjøres automatisk på planlagt tidspunkt", + "cwdPlaceholder": "Arbeidskatalog (faller tilbake til gjeldende arbeidsområde)", + "executionTime": "Kjøretidspunkt", + "executionTimeHint": "Nye tidsplaner foretrekker tidsstyring med flere tidsluker; eldre intervallregler kan fortsatt redigeres.", + "enabled": "Aktivert", + "mode": "Kjøremodus", + "weekday": "Ukedager", + "weekdayPlaceholder": "Velg ukedager", + "times": "Tidsluker", + "timePlaceholder": "Velg tidspunkter", + "legacyIntervalNotice": "Denne oppgaven kommer fra en eldre regel med fast intervall og beholder den modusen når den lagres.", + "onceTimeLabel": "Velg tidspunkt for engangskjøring", + "legacyStartTimeLabel": "Velg starttidspunkt for den eldre intervallregelen", + "dailyHint": "Kjør automatisk på disse tidspunktene hver dag.", + "weeklyHint": "Kjør automatisk på de valgte ukedagene og tidslukene.", + "saveChanges": "Lagre endringer", + "createTask": "Opprett oppgave", + "cancelEdit": "Avbryt redigering", + "listHint": "Å deaktivere blokkerer bare fremtidige automatiske kjøringer. Allerede startede økter må stoppes manuelt fra øktlisten.", + "empty": "Ingen tidsplaner ennå", + "loadFailed": "Kunne ikke laste tidsplaner", + "promptRequired": "Skriv inn instruksjonen som skal kjøres", + "dailyTimesRequired": "Velg minst én daglig tidsluke", + "weeklyTimesRequired": "Velg minst én ukentlig tidsluke", + "weekdayRequired": "Velg minst én ukedag", + "invalidTime": "Skriv inn et gyldig kjøretidspunkt", + "nextRunCalculationFailed": "Gjeldende regel kan ikke beregne neste kjøretidspunkt", + "futureTimeRequired": "Kjøretidspunktet må være senere enn nå. Bruk Kjør nå hvis du vil utløse det umiddelbart.", + "taskMissing": "Oppgaven finnes ikke lenger eller ble slettet", + "updated": "Tidsplan oppdatert", + "created": "Tidsplan opprettet", + "saveFailed": "Kunne ikke lagre tidsplan", + "toggleFailed": "Kunne ikke endre tilstand for tidsplan", + "runNowSuccess": "Utløste en umiddelbar kjøring", + "runNowFailed": "Kunne ikke kjøre umiddelbart", + "noSessionToStop": "Denne oppgaven har ingen kjøringsøkt å stoppe", + "sessionNotRunning": "Denne oppgaven har for øyeblikket ingen kjørende økt", + "stopSent": "Stoppkommando sendt", + "stopFailed": "Kunne ikke stoppe kjøring", + "deleteConfirm": "Slette tidsplanen \"{{title}}\"?", + "deleted": "Tidsplan slettet", + "deleteFailed": "Kunne ikke slette tidsplan", + "statusRunning": "Kjører", + "statusFinished": "Fullført", + "statusUnknown": "Ukjent", + "statusNone": "Ingen", + "taskEnabled": "Aktivert", + "taskDisabled": "Deaktivert", + "nextRun": "Neste kjøring: {{value}}", + "nextRunNone": "Neste kjøring: Ingen", + "strategy": "Tidsplanregel: {{value}}", + "lastRun": "Siste kjøring: {{value}}", + "lastRunNever": "Siste kjøring: Ikke kjørt ennå", + "recentSession": "Siste økt: {{value}}", + "sessionStatus": "Øktstatus: {{value}}", + "cwd": "Katalog: {{value}}", + "lastError": "Siste feil: {{value}}", + "disable": "Deaktiver", + "enable": "Aktiver", + "runNow": "Kjør nå", + "stopExecution": "Stopp kjøring", + "edit": "Rediger", + "delete": "Slett", + "stopRunTitleActive": "Stopp den siste kjøringsøkten for denne oppgaven", + "stopRunTitleIdle": "Denne oppgaven har for øyeblikket ingen kjørende økt", + "repeatEveryMinute_one": "Hvert {{count}} minutt", + "repeatEveryMinute_other": "Hvert {{count}} minutt", + "repeatEveryHour_one": "Hver {{count}} time", + "repeatEveryHour_other": "Hver {{count}} time", + "repeatEveryDay_one": "Hver {{count}} dag", + "repeatEveryDay_other": "Hver {{count}} dag", + "ruleDaily": "Hver dag kl. {{times}}", + "ruleWeekly": "Hver uke på {{weekdays}} kl. {{times}}", + "ruleOnce": "Engangs", + "previewNextRun": "Neste forventede kjøring: {{value}}", + "previewSelectValidTime": "Velg et gyldig kjøretidspunkt", + "previewSelectAtLeastOne": "Velg minst én gyldig tidsluke", + "previewAutoFind": "Systemet velger automatisk neste kjøretidspunkt: {{value}}", + "weekdayMonday": "Man", + "weekdayTuesday": "Tir", + "weekdayWednesday": "Ons", + "weekdayThursday": "Tor", + "weekdayFriday": "Fre", + "weekdaySaturday": "Lør", + "weekdaySunday": "Søn", + "modeOnce": "Engangs", + "modeDaily": "Daglig", + "modeWeekly": "Ukentlig", + "repeatUnitMinute": "Minutt", + "repeatUnitHour": "Time", + "repeatUnitDay": "Dag", + "unknownWeekday": "Ukjent", + "pickerEditTimes": "Rediger tidsluker", + "pickerAnyHHmm": "Du kan skrive inn en hvilken som helst `HH:mm`-verdi", + "pickerSelectedCount_one": "{{count}} valgt", + "pickerSelectedCount_other": "{{count}} valgt", + "pickerAdd": "Legg til", + "pickerSelectedTimes": "Valgte tidspunkter", + "pickerNone": "Ingen tidsluker valgt ennå", + "pickerSuggestions": "Forslag" + }, + "remote": { + "title": "Fjernstyring", + "statusRunning": "Kjører. Tilgjengelig via Feishu.", + "statusStopped": "Stoppet", + "startService": "Start tjeneste", + "stopService": "Stopp tjeneste", + "activeSessions": "Aktive økter", + "authorizedUsers": "Autoriserte brukere", + "pendingApprovals": "Ventende godkjenninger", + "pairingRequests": "Paringsforespørsler som venter på godkjenning", + "unknownUser": "Ukjent bruker", + "pairingCode": "Paringskode", + "approve": "Godkjenn", + "stepFeishu": "Feishu-oppsett", + "stepConnection": "Tilkobling", + "stepAdvanced": "Avansert", + "feishuTitle": "Oppsett av Feishu-bot", + "feishuDesc": "Opprett en app i Feishu Open Platform, og fyll deretter inn legitimasjonen her.", + "dmPolicy": "Autorisasjonsregler for direktemeldinger", + "policyPairing": "Paringsverifisering", + "policyPairingDesc": "Brukere må skrive inn en paringskode.", + "policyAllowlist": "Tillatelsesliste", + "policyAllowlistDesc": "Bare bestemte brukere er tillatt.", + "policyOpen": "Åpen tilgang", + "policyOpenDesc": "Hvem som helst kan bruke boten.", + "openFeishu": "Åpne Feishu Open Platform", + "slackTitle": "Oppsett av Slack-bot", + "slackDesc": "Opprett en Slack-app, installer den i arbeidsområdet ditt, og fyll deretter inn legitimasjonen her.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (for Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Koble utover til Slack. Ingen offentlig IP påkrevd.", + "openSlack": "Åpne Slack API", + "connectionTitle": "Tilkoblingsmodus", + "connectionDesc": "Velg hvordan Feishu-servere kommuniserer med datamaskinen din.", + "longConnection": "Modus for vedvarende tilkobling", + "recommended": "Anbefalt", + "longConnectionDesc": "Appen kobler utover til Feishu-servere. Ingen offentlig IP eller ngrok påkrevd.", + "noPublicInternet": "Ingen eksponering mot det offentlige internett", + "outOfBox": "Fungerer rett ut av boksen", + "stableReliable": "Stabil og pålitelig", + "webhookMode": "Webhook-modus", + "webhookDesc": "Feishu sender meldinger til serveren din. En offentlig tilgjengelig adresse er påkrevd.", + "localWebhookUrl": "Lokal webhook-URL", + "useBuiltInNgrok": "Bruk innebygd ngrok", + "ngrokHelpPrefix": "Skaff en gratis fra", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunnel tilkoblet", + "longConnectionHint": "I Feishu Open Platform, gå til Events & Callbacks > Event Configuration og bytt abonnementsmodusen til vedvarende tilkobling.", + "advancedTitle": "Avanserte innstillinger", + "advancedDesc": "Tilpass fjernstyringsoppførselen.", + "defaultWorkingDirectory": "Standard arbeidskatalog", + "defaultWorkingDirectoryPlaceholder": "For eksempel: C:\\Users\\ditt-navn\\Projects", + "defaultWorkingDirectoryHint": "Dette er standardkatalogen for AI-kommandoer. Du kan også overstyre den i en melding med `[cwd:sti]`.", + "gatewayPort": "Tjenesteport", + "autoApproveSafeTools": "Godkjenn trygge verktøy automatisk", + "autoApproveSafeToolsDesc": "Tillat automatisk trygge verktøy som fillesing og nettleseroperasjoner.", + "saveConfig": "Lagre konfigurasjon", + "authorizedUsersTitle": "Autoriserte brukere ({{count}})", + "revokeAccess": "Opphev tilgang", + "quickStart": "Hurtigstart", + "quickStartStep1": "Opprett en app i Feishu Open Platform og legg til Bot-funksjonen.", + "quickStartStep2": "Kopier App ID og App Secret inn i feltene ovenfor.", + "quickStartStep3": "Aktiver disse tillatelsene i tillatelsesinnstillingene:", + "quickStartStep4": "I Feishus Event Configuration, velg hendelsesmodusen for vedvarende tilkobling.", + "quickStartStep5Prefix": "Abonner på", + "quickStartStep5Suffix": "hendelsen.", + "quickStartStep6": "Publiser appen, og klikk deretter Start tjeneste.", + "started": "Fjernstyring startet", + "stopped": "Fjernstyring stoppet", + "actionFailed": "Operasjonen mislyktes", + "configSaved": "Konfigurasjon lagret", + "saveFailed": "Kunne ikke lagre konfigurasjon", + "pairingApproved": "Paring godkjent", + "approveFailed": "Kunne ikke godkjenne paring", + "reject": "Avslå", + "pairingRejected": "Paring avslått", + "rejectFailed": "Kunne ikke avslå paring", + "pairingGuideTitle": "Paringsveiledning", + "pairingGuideStep1": "Åpne Feishu og finn boten", + "pairingGuideStep2": "Send en hvilken som helst melding for å starte paring", + "pairingGuideStep3": "Godkjenn paringsforespørselen nedenfor", + "pairingGuideStep4": "Ferdig — brukeren kan nå chatte med boten", + "waitingForPairing": "Venter på at brukere skal starte paring...", + "expiresIn": "Utløper om {{time}}", + "userRemoved": "Bruker fjernet", + "revokeFailed": "Kunne ikke fjerne bruker", + "copied": "Kopiert" + }, + "time": { + "now": "nå" + }, + "permission": { + "permissionRequired": "Tillatelse påkrevd", + "tool": "Verktøy:", + "input": "Inndata:", + "warning": "Denne handlingen kan endre systemet ditt. Gå nøye gjennom.", + "deny": "Avslå", + "allow": "Tillat", + "alwaysAllow": "Tillat alltid dette verktøyet", + "useTool": "Bruk verktøyet {{toolName}}", + "toolDescriptions": { + "write": "Skrive til filer på systemet ditt", + "edit": "Redigere eksisterende filer på systemet ditt", + "bash": "Kjøre skallkommandoer", + "webFetch": "Hente data fra nettet", + "webSearch": "Søke på nettet", + "read_file": "Lese filer i arbeidsområdet", + "write_file": "Skrive filer i arbeidsområdet", + "edit_file": "Redigere filer i arbeidsområdet", + "list_directory": "Liste kataloginnhold i arbeidsområdet", + "execute_command": "Kjøre skallkommandoer i arbeidsområdet", + "glob": "Søke i filer etter mønster", + "grep": "Søke i filinnhold" + } + }, + "sudo": { + "title": "Administratortillatelse påkrevd", + "description": "Følgende kommando krever administratorrettigheter:", + "passwordLabel": "Passord", + "passwordPlaceholder": "Skriv inn passordet ditt", + "cancel": "Avbryt", + "execute": "Kjør", + "warning": "Passordet ditt brukes kun til denne kommandoen og lagres ikke." + }, + "errorBoundary": { + "title": "Noe gikk galt", + "description": "En uventet feil oppstod i applikasjonen. Du kan prøve å gjenopprette ved å klikke på knappen nedenfor.", + "details": "Feildetaljer", + "retry": "Prøv igjen" + } +} diff --git a/src/renderer/i18n/locales/pl.json b/src/renderer/i18n/locales/pl.json new file mode 100644 index 00000000..615690e7 --- /dev/null +++ b/src/renderer/i18n/locales/pl.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Zapisz", + "cancel": "Anuluj", + "delete": "Usuń", + "edit": "Edytuj", + "add": "Dodaj", + "close": "Zamknij", + "loading": "Ładowanie...", + "error": "Błąd", + "success": "Sukces", + "saving": "Zapisywanie...", + "saved": "Zapisano pomyślnie!", + "sure": "Czy na pewno?", + "yes": "Tak", + "no": "Nie", + "enable": "Włącz", + "disable": "Wyłącz", + "install": "Zainstaluj", + "optional": "opcjonalne", + "appLogoAlt": "Logo Open Cowork", + "pastedImageAlt": "Wklejono {{index}}" + }, + "welcome": { + "title": "W czym mogę dziś pomóc?", + "placeholder": "Opisz, co chcesz zrobić...", + "createFile": "Utwórz plik", + "crunchData": "Przetwarzaj dane", + "organizeFiles": "Uporządkuj pliki", + "checkEmails": "Sprawdź e-maile", + "searchPapers": "Wyszukaj i podsumuj artykuły", + "summarizePapersToNotion": "Podsumuj artykuły do Notion", + "selectWorkingFolder": "Wybierz folder roboczy (wymagane)", + "selectWorkingFolderFailed": "Nie udało się wybrać folderu roboczego", + "attachFiles": "Załącz pliki", + "letsGo": "Zaczynamy", + "starting": "Uruchamianie...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Logo Open Cowork", + "pastedImageAlt": "Wklejono {{index}}", + "quickPromptCreate": "Utwórz dla mnie nowy plik", + "quickPromptCrunch": "Pomóż mi przeanalizować i przetworzyć dane", + "quickPromptOrganize": "Pomóż mi uporządkować pliki i foldery", + "quickPromptEmail": "Pomóż mi użyć Chrome, aby podsumować nowe e-maile z ostatnich trzech dni w moim Gmailu i poczcie NetEase. Pamiętaj, że zapisane konta zawierają już pełną końcówkę adresu e-mail. Dlatego jeśli końcówka adresu e-mail jest już wstępnie wypełniona na stronie lub na zrzucie ekranu, nie wpisuj jej ponownie, aby uniknąć niepowodzenia logowania. Najpierw sprawdź też, czy odpowiednie dane uwierzytelniające konta są zapisane. Jeśli nazwa użytkownika lub hasło dla danej usługi e-mail nie jest zapisane, możesz pominąć to konto e-mail.", + "quickPromptPapers": "Pomóż mi użyć Chrome, aby wyszukać i podsumować artykuły związane z [Agent] w ciągu dwóch dni.\nŹródłowe strony:\n1. HuggingFace Daily Papers. Uwzględnij informacje o liczbie głosów oraz krótkie podsumowanie. Pamiętaj, że mogą nie pojawić się artykuły z weekendu, więc może być konieczne sprawdzenie artykułów z poprzednich dni. Upewnij się jednak, że łącznie obejmują dwa dni.", + "quickPromptNotion": "Pomóż mi zbadać trzy reprezentatywne artykuły przeglądowe związane z agentami i dodaj je pod stroną Notion zatytułowaną \"Agent Survey\". Dla każdego artykułu uwzględnij tytuł, autorów, miejsce/rok publikacji oraz krótkie podsumowanie głównych osiągnięć.", + "apiNotConfigured": "API nie zostało jeszcze skonfigurowane. Przejdź do Ustawień, aby skonfigurować dostawcę API i klucz.", + "goToSettings": "Przejdź do Ustawień" + }, + "settings": { + "title": "Ustawienia", + "apiSettings": "Ustawienia API", + "apiSettingsDesc": "Skonfiguruj dostawcę API i klucz", + "sandbox": "Piaskownica", + "sandboxDesc": "Izolowane środowisko wykonawcze", + "connectors": "Łączniki MCP", + "connectorsDesc": "Integracje przeglądarki i narzędzi", + "skills": "Umiejętności", + "skillsDesc": "Zarządzaj niestandardowymi umiejętnościami", + "memory": "Pamięć", + "memoryDesc": "Zarządzaj pamięcią długoterminową i doświadczeniem obszaru roboczego", + "schedule": "Harmonogramy", + "scheduleDesc": "Automatyzacja promptów w stylu alarmu", + "remote": "Zdalne sterowanie", + "remoteDesc": "Korzystaj z Open Cowork przez Feishu i inne kanały", + "logs": "Dzienniki", + "logsDesc": "Wyświetlaj i eksportuj dzienniki aplikacji", + "panelDesc": "Skonfiguruj obszar roboczy, narzędzia i zachowanie konta.", + "general": "Ogólne", + "generalDesc": "Wygląd, język i preferencje" + }, + "general": { + "appearance": "Wygląd", + "theme": "Motyw", + "themeLight": "Jasny", + "themeDark": "Ciemny", + "themeSystem": "Systemowy", + "language": "Język" + }, + "memory": { + "title": "Pamięć", + "description": "Globalna pamięć podstawowa przechowuje stabilne preferencje, a pamięć doświadczenia obszaru roboczego przechowuje wielowątkową wiedzę specyficzną dla projektu.", + "enabled": "Włączona", + "disabled": "Wyłączona", + "toggleHint": "Wyłączenie tej opcji zatrzymuje przyszłe pozyskiwanie i automatyczne przywoływanie, ale zachowuje istniejące rekordy.", + "enableAction": "Włącz pamięć", + "disableAction": "Wyłącz pamięć", + "enabledStatus": "Pamięć jest włączona", + "disabledStatus": "Pamięć jest wyłączona", + "coreCount": "Wpisy podstawowe", + "sessionCount": "Podsumowania sesji", + "chunkCount": "Fragmenty doświadczenia", + "workspaceCount": "Obszary robocze", + "latestIngestion": "Ostatnie pozyskiwanie", + "noIngestionYet": "Nie zarejestrowano jeszcze pozyskiwania", + "health": "Kondycja", + "healthy": "W dobrej kondycji, bez ostatnich błędów", + "failedSessions": "{{count}} sesja(e) nie powiodła(y) ostatniego pozyskiwania", + "searchTitle": "Wyszukiwanie i przeglądanie", + "searchDescription": "Przeszukuj pamięć według bieżącego obszaru roboczego lub globalnie, a następnie przeglądaj podsumowania i surowe fragmenty.", + "searchPlaceholder": "Wyszukaj preferencje, poprzednie implementacje, decyzje...", + "searchAction": "Szukaj", + "scopeWorkspace": "Bieżący obszar roboczy", + "scopeAll": "Cała pamięć", + "scopeGlobal": "Tylko pamięć podstawowa", + "currentWorkspace": "Bieżący obszar roboczy", + "groupCore": "Pamięć podstawowa", + "groupSessions": "Podsumowania sesji", + "groupChunks": "Trafienia we fragmentach", + "detailTitle": "Szczegóły", + "noSelection": "Wybierz wynik, aby przejrzeć pełne podsumowanie i fragment źródłowy.", + "noResults": "Brak wyników", + "maintenanceTitle": "Konserwacja", + "maintenanceDescription": "Przebuduj pamięć doświadczenia dla bieżącego obszaru roboczego lub wyczyść zapisane dane.", + "rebuildWorkspace": "Przebuduj bieżący obszar roboczy", + "clearWorkspace": "Wyczyść bieżący obszar roboczy", + "clearCore": "Wyczyść pamięć podstawową", + "rebuildConfirm": "Przebudować pamięć doświadczenia dla bieżącego obszaru roboczego? Spowoduje to ponowne przeskanowanie historycznych sesji w tym obszarze roboczym.", + "clearWorkspaceConfirm": "Wyczyścić pamięć doświadczenia dla bieżącego obszaru roboczego? Tej operacji nie można cofnąć.", + "clearCoreConfirm": "Wyczyścić całą globalną pamięć podstawową? Tej operacji nie można cofnąć.", + "rebuildSuccess": "Pamięć obszaru roboczego przebudowana", + "clearWorkspaceSuccess": "Pamięć obszaru roboczego wyczyszczona", + "clearCoreSuccess": "Pamięć podstawowa wyczyszczona", + "runtimeTitle": "Konfiguracja środowiska wykonawczego", + "runtimeDescription": "Domyślnie dziedziczy obecnie aktywną konfigurację API. Tutaj głównie dostrajasz głębokość nawigacji, embedding oraz katalog na dysku.", + "runtimeSaved": "Konfiguracja środowiska wykonawczego pamięci zapisana", + "saveRuntime": "Zapisz konfigurację środowiska wykonawczego", + "storageRoot": "Katalog główny pamięci", + "noWorkspace": "Brak obszaru roboczego", + "maxNavSteps": "Kroki nawigacji", + "ingestionConcurrency": "Równoległość przebudowy", + "useEmbedding": "Włącz wyszukiwanie embedding", + "evalEnabled": "Włącz ocenę na rzeczywistym modelu", + "evalArtifactsRoot": "Katalog artefaktów oceny", + "evalMaxRounds": "Rundy oceny", + "promptIterationRounds": "Rundy iteracji promptu", + "llmConfig": "LLM pamięci", + "embeddingConfig": "Embedding", + "inheritActive": "Dziedzicz aktywne API", + "modelOverride": "Zastąpienie modelu", + "baseUrlOverride": "Zastąpienie Base URL", + "apiKeyOverride": "Zastąpienie klucza API", + "allSources": "Wszystkie źródła", + "groupRawSessions": "Surowe sesje", + "sourceFile": "Plik źródłowy", + "inspectSession": "Przejrzyj pamięć sesji", + "inspectSessionHint": "Wybierz sesję lub fragment z powyższych wyników, aby go przejrzeć.", + "revealInFinder": "Pokaż w Finder", + "rebuildAll": "Przebuduj całą pamięć", + "rebuildAllConfirm": "Spowoduje to wyczyszczenie i przebudowę całej pamięci. Kontynuować?", + "rebuildAllSuccess": "Przebudowano całą pamięć: {{sessionCount}} sesja(e), {{workspaceCount}} źródłowy(ch) obszar(ów) roboczy(ch)", + "filesTitle": "Podgląd surowych plików", + "filesDescription": "Wyświetl artefakty core / unified experience / session_state / eval dokładnie tak, jak są zapisane na dysku.", + "fileList": "Lista plików", + "refreshFiles": "Odśwież", + "noFiles": "Brak plików pamięci", + "fileContent": "Zawartość pliku", + "emptyFile": "Plik jest pusty", + "selectFileHint": "Wybierz plik po lewej stronie, aby wyświetlić jego surowy JSON." + }, + "language": { + "english": "Angielski", + "chinese": "Chiński", + "selectLanguage": "Wybierz język", + "currentLanguage": "Bieżący język" + }, + "api": { + "firstRunTitle": "Skonfiguruj API", + "firstRunSubtitle": "Skonfiguruj dostawcę, aby zacząć korzystać z Open Cowork", + "settingsTitle": "Ustawienia API", + "settingsSubtitle": "Zarządzaj ustawieniami dostawcy, klucza i modelu", + "configSet": "Zestaw konfiguracji", + "defaultSetTag": "Domyślny", + "saveAs": "Zapisz jako", + "renameSet": "Zmień nazwę", + "deleteSet": "Usuń zestaw", + "saveAndSwitch": "Zapisz i przełącz", + "discardAndSwitch": "Odrzuć i przełącz", + "currentSetSavingHint": "\"Zapisz ustawienia\" aktualizuje tylko obecnie wybrany zestaw konfiguracji.", + "unsavedCurrentSetHint": "Bieżący zestaw konfiguracji ma niezapisane zmiany.", + "unsavedSwitchPrompt": "Bieżący zestaw konfiguracji ma niezapisane zmiany. Wybierz akcję przed przełączeniem na \"{{name}}\".", + "configSetSaveAsPrompt": "Wprowadź nazwę nowego zestawu konfiguracji", + "configSetRenamePrompt": "Wprowadź nową nazwę dla tego zestawu konfiguracji", + "configSetDeleteConfirm": "Usunąć zestaw konfiguracji \"{{name}}\"?", + "configSetNameRequired": "Nazwa zestawu konfiguracji jest wymagana", + "configSetLimitReached": "Możesz zapisać maksymalnie {{count}} zestawów konfiguracji", + "configSetCreated": "Zestaw konfiguracji utworzony", + "configSetRenamed": "Zmieniono nazwę zestawu konfiguracji", + "configSetDeleted": "Zestaw konfiguracji usunięty", + "configSetSwitched": "Zestaw konfiguracji przełączony", + "defaultConfigSetName": "Domyślny", + "configSetFallbackName": "Zestaw konfiguracji {{index}}", + "provider": "Dostawca API", + "providerDescription": "Wybierz rodzinę dostawców oraz ogólny styl protokołu dla tego obszaru roboczego.", + "apiKey": "Klucz API", + "enterApiKey": "Wprowadź swój klucz API", + "apiKeyDescription": "Zapisywany lokalnie i ograniczony do aktywnego zestawu konfiguracji.", + "protocol": "Protokół", + "baseUrl": "Base URL", + "model": "Model", + "usePreset": "Użyj ustawienia wstępnego", + "custom": "Niestandardowy", + "moreModels": "Więcej modeli", + "noModelsAvailable": "Brak dostępnych modeli", + "selectProtocol": "Wybierz zgodny protokół dla usługi", + "enterOllamaUrl": "Wprowadź adres URL usługi Ollama zgodnej z OpenAI", + "enterOpenAIUrl": "Wprowadź adres URL usługi zgodnej z OpenAI", + "enterAnthropicUrl": "Wprowadź adres URL usługi zgodnej z Anthropic", + "enterGeminiUrl": "Wprowadź Base URL zgodny z Gemini", + "enterModelId": "Wprowadź identyfikator modelu, np. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Wybierz model", + "contextWindow": "Okno kontekstu", + "contextWindowPlaceholder": "Wykryj automatycznie", + "maxOutputTokens": "Maksymalna liczba tokenów wyjściowych", + "maxOutputTokensPlaceholder": "Wykryj automatycznie", + "contextWindowHint": "Pozostaw puste, aby wykryć automatycznie. Zastąp tylko wtedy, gdy model zgłasza nieprawidłowe limity.", + "saveFailed": "Nie udało się zapisać ustawień. Spróbuj ponownie.", + "getStarted": "Rozpocznij", + "saveSettings": "Zapisz ustawienia", + "openSettingsAction": "Otwórz ustawienia API", + "configRequiredActiveSet": "Bieżący zestaw konfiguracji nie zawiera użytecznych danych uwierzytelniających. Najpierw zakończ konfigurację w Ustawieniach API.", + "testConnection": "Testuj połączenie", + "testingConnection": "Testowanie...", + "refreshModels": "Odśwież modele", + "refreshingModels": "Odświeżanie...", + "refreshModelsFailed": "Nie udało się odświeżyć modeli. Sprawdź adres URL lub stan usługi.", + "manualModel": "Model ręczny", + "useDetectedModels": "Użyj wykrytych modeli", + "discoverLocalOllama": "Znajdź lokalną Ollama", + "discoveringLocalOllama": "Wyszukiwanie...", + "discoverLocalOllamaHint": "Najpierw wprowadź punkt końcowy Ollama. Modele zostaną pobrane automatycznie, a ręczne wprowadzanie jest potrzebne tylko, jeśli wykrywanie się nie powiedzie.", + "localOllamaDiscovered": "Znaleziono lokalną Ollama z {{count}} dostępnym(i) modelem(ami).", + "localOllamaNotFound": "Nie znaleziono lokalnej usługi Ollama. Uruchom ją poleceniem `ollama serve` i spróbuj ponownie.", + "localOllamaNoModels": "Znaleziono lokalną usługę Ollama, ale obecnie nie udostępnia ona żadnych modeli.", + "localOllamaModelUnavailable": "Znaleziono lokalną Ollama, ale model {{model}} nie mógł ukończyć minimalnego żądania wnioskowania.", + "localOllamaModelLoading": "Znaleziono lokalną Ollama, ale model wciąż ładuje się do pamięci. Duże modele mogą zająć nawet minutę.", + "enableThinking": "Włącz tryb myślenia", + "enableThinkingHint": "Pokaż proces myślenia Claude krok po kroku. Zapewnia to większą przejrzystość, ale może zwiększyć zużycie tokenów.", + "enableThinkingOllamaHint": "Większość modeli Ollama nie obsługuje trybu myślenia. Włącz tylko, jeśli Twój model wyraźnie go obsługuje.", + "testSuccess": "Połączenie udane ({{ms}}ms)", + "testSuccessNeedSave": "Test połączenia zaliczony. Zapisz ustawienia przed rozpoczęciem sesji.", + "testError": { + "missing_key": "Klucz API jest wymagany", + "missing_base_url": "Base URL jest wymagany dla tego dostawcy", + "unauthorized": "Nieprawidłowy klucz API lub brak autoryzacji", + "not_found": "Nie znaleziono punktu końcowego. Sprawdź Base URL", + "rate_limited": "Przekroczono limit zapytań lub wyczerpano przydział", + "server_error": "Błąd usługi. Spróbuj ponownie później", + "network_error": "Błąd sieci. Sprawdź połączenie", + "ollama_not_running": "Nie można połączyć się z Ollama. Upewnij się, że Ollama jest uruchomiona (ollama serve).", + "ollama_loading": "Ollama ładuje model do pamięci. Duże modele mogą zająć od 30 do 120 sekund. Poczekaj i spróbuj ponownie.", + "unknown": "Połączenie nieudane" + }, + "guidance": { + "commonSetupsTitle": "Typowe konfiguracje dostawców", + "commonSetupsHint": "Przejrzyj lub zastosuj zalecaną konfigurację", + "apply": "Zastosuj", + "detectedBadge": "Wykryto", + "preferProviderTab": "Wykryto {{service}}. Tę usługę zwykle łatwiej skonfigurować z dedykowanej zakładki {{provider}}.", + "protocolMismatch": "Wykryto {{service}}. Zalecany protokół: {{recommendedProtocol}}.", + "protocolLooksGood": "Wykryto {{service}}. Twój bieżący protokół już odpowiada zalecanej konfiguracji {{recommendedProtocol}}.", + "baseUrlHint": "Wykryto {{service}}. Zalecana konfiguracja {{recommendedProtocol}}: {{baseUrl}}. Przykładowy model: {{model}}.", + "genericBaseUrlHint": "To wygląda na niestandardowy punkt końcowy zgodny z {{recommendedProtocol}}. Zalecany format Base URL: {{baseUrl}}. Przykładowy model: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Usługa", + "protocol": "Protokół", + "baseUrl": "Base URL", + "model": "Przykładowy model", + "notes": "Uwagi", + "action": "Akcja" + }, + "errorHints": { + "emptyProbeGeneric": "Punkt końcowy zwrócił pustą odpowiedź próbną. Zwykle oznacza to, że wybrany protokół lub model jest niezgodny z usługą.", + "emptyProbeDetected": "{{service}} zwrócił pustą odpowiedź próbną. Wypróbuj zalecaną konfigurację {{recommendedProtocol}} i zweryfikuj identyfikator modelu dla tego punktu końcowego.", + "emptyProbePreferProvider": "{{service}} zwrócił pustą odpowiedź próbną. Wypróbuj dedykowaną zakładkę {{provider}} zamiast konfigurować ją jako ogólny niestandardowy punkt końcowy.", + "probeMismatchGeneric": "Punkt końcowy odpowiedział, ale nie w formacie oczekiwanym przez tę próbę. Zwykle wskazuje to na niezgodność protokołu lub modelu.", + "probeMismatchDetected": "{{service}} odpowiedział nieoczekiwanym formatem próby. Wypróbuj zalecaną konfigurację {{recommendedProtocol}} i zweryfikuj identyfikator modelu dla tego punktu końcowego." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Preferuj dedykowaną zakładkę dostawcy OpenRouter, chyba że debugujesz niestandardowy przekaźnik." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Użyj trybu zgodnego z OpenAI i skopiuj dokładny identyfikator modelu z dokumentacji DeepSeek." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Użyj punktu końcowego coding w trybie zgodnym z Anthropic. Dokładnie sprawdź identyfikator modelu coding w dokumentacji Moonshot." + }, + "glm": { + "name": "GLM / BigModel (trasa Anthropic)", + "note": "Użyj trasy zgodnej z Anthropic, gdy ścieżka punktu końcowego zawiera /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Preferuj dedykowaną zakładkę dostawcy Ollama do wykrywania i odświeżania modeli lokalnych." + }, + "gemini": { + "name": "Niestandardowy punkt końcowy Gemini", + "note": "Użyj trybu zgodnego z Gemini oraz dokładnego identyfikatora modelu udostępnianego przez punkt końcowy." + }, + "minimax": { + "name": "MiniMax", + "note": "Użyj trybu zgodnego z OpenAI, chyba że Twoja brama MiniMax dokumentuje inny protokół." + }, + "genericOpenAI": { + "name": "Ogólny zgodny z OpenAI", + "note": "Użyj tego dla niestandardowych przekaźników, bram lub serwerów wnioskowania naśladujących API OpenAI." + } + } + }, + "newSet": "Nowy zestaw", + "createSetTitle": "Utwórz zestaw konfiguracji", + "saveAsTitle": "Zapisz jako zestaw konfiguracji", + "createSetNamePlaceholder": "Wprowadź nazwę zestawu konfiguracji", + "renameSetTitle": "Zmień nazwę zestawu konfiguracji", + "unsavedBeforeActionPrompt": "Bieżący zestaw konfiguracji ma niezapisane zmiany. Wybierz akcję przed \"{{action}}\".", + "newSetDefaultName": "Nowy zestaw konfiguracji", + "copyNameSuffix": "Kopia", + "currentSetLabel": "Bieżący zestaw: ", + "unsavedBadge": "Niezapisane", + "saveAndContinue": "Zapisz i kontynuuj", + "discardAndContinue": "Odrzuć i kontynuuj", + "currentSetName": "Nazwa zestawu", + "renameInlineHint": "Edytuj bezpośrednio. Naciśnij Enter lub kliknij poza polem, aby zapisać automatycznie", + "switchSetLabel": "Przełącz na inny zestaw", + "switchSetPlaceholder": "Wybierz zestaw do przełączenia", + "noOtherSetHint": "Brak innego dostępnego zestawu", + "configSetMissing": "Nie znaleziono zestawu konfiguracji", + "configSetCloneSourceMissing": "Nie udało się znaleźć zestawu konfiguracji do sklonowania", + "configSetSystemDeleteForbidden": "Domyślnego zestawu konfiguracji nie można usunąć", + "configSetKeepOne": "Zachowaj co najmniej jeden zestaw konfiguracji", + "diagnostic": { + "runDiagnostics": "Diagnozuj połączenie", + "runQuickDiagnostics": "Szybka diagnostyka", + "runDeepDiagnostics": "Głęboka kontrola wnioskowania", + "running": "Diagnozowanie...", + "step": { + "dns": "Rozwiązywanie DNS", + "tcp": "Połączenie TCP", + "tls": "Uzgadnianie TLS", + "auth": "Uwierzytelnianie API", + "model": "Weryfikacja modelu" + }, + "status": { + "pending": "Oczekuje", + "running": "Sprawdzanie...", + "ok": "OK", + "fail": "Nieudane", + "skip": "Pominięto" + }, + "overallSuccess": "Wszystkie kontrole zaliczone ({{ms}}ms)", + "overallFail": "Diagnostyka nie powiodła się na etapie {{step}}", + "advisory": { + "not_deep_verified": "Punkt końcowy jest osiągalny, a wybrany model jest wymieniony, ale nie wykonano jeszcze rzeczywistego wnioskowania.", + "model_loading": "Punkt końcowy jest osiągalny, ale model może wciąż ładować się do pamięci." + }, + "latency": "{{ms}}ms", + "fix": { + "dns_resolve_failed": "Nie można rozwiązać nazwy hosta {{host}}. Sprawdź, czy adres URL jest poprawny.", + "tcp_connect_failed": "Nie można połączyć się z {{host}}. Sprawdź ustawienia sieci lub zapory.", + "tls_handshake_failed": "Uzgadnianie TLS nie powiodło się. Może to być spowodowane problemem z certyfikatem lub ingerencją serwera proxy.", + "missing_api_key": "Brak klucza API lub jest on nieprawidłowy. Sprawdź swój klucz.", + "auth_invalid_key": "Klucz API jest nieprawidłowy lub wygasł. Sprawdź, czy klucz jest poprawny.", + "auth_endpoint_not_found": "Nie znaleziono punktu końcowego API. Sprawdź, czy Base URL jest poprawny.", + "auth_request_failed": "Żądanie uwierzytelnienia nie powiodło się. Sprawdź swoją konfigurację.", + "model_network_error": "Nie można połączyć się z modelem {{model}}. Sprawdź ustawienia sieci, VPN lub serwera proxy.", + "model_rate_limited": "Model {{model}} ma obecnie przekroczony limit zapytań lub wyczerpany przydział. Spróbuj ponownie później.", + "model_request_failed": "Żądanie modelu {{model}} nie powiodło się po stronie dostawcy. Spróbuj ponownie później.", + "model_unavailable": "Model {{model}} jest niedostępny. Zweryfikuj nazwę modelu.", + "ollama_no_models_loaded": "Punkt końcowy jest osiągalny, ale nie zwrócił żadnych modeli. Najpierw pobierz model w Ollama.", + "ollama_model_not_listed": "Modelu {{model}} nie ma na liście modeli punktu końcowego. Wybierz wykryty model lub przełącz się na wprowadzanie ręczne.", + "ollama_model_loading": "Model {{model}} może wciąż się ładować. Spróbuj ponownie głębokiej kontroli za chwilę.", + "model_cold_start": "Model może wciąż ładować się do pamięci GPU/CPU. Duże modele (7B+) mogą zająć od 30 do 120 sekund przy pierwszym użyciu. Spróbuj ponownie za chwilę." + } + } + }, + "window": { + "minimize": "Minimalizuj", + "maximize": "Maksymalizuj", + "restore": "Przywróć", + "close": "Zamknij" + }, + "sandbox": { + "title": "Środowisko piaskownicy", + "wslDesc": "Uruchamiaj polecenia w środowisku WSL2 Linux dla lepszej izolacji i bezpieczeństwa w systemie Windows.", + "limaDesc": "Uruchamiaj polecenia w maszynie wirtualnej Lima dla lepszej izolacji i bezpieczeństwa w systemie macOS.", + "nativeDesc": "Polecenia uruchamiane bezpośrednio w Twoim systemie (tryb natywny Linux).", + "enableSandbox": "Włącz tryb piaskownicy", + "comingSoon": "Wkrótce — w trakcie opracowywania", + "readyStatus": "Piaskownica gotowa i działa", + "notReadyStatus": "Piaskownica włączona, ale nie w pełni skonfigurowana", + "disabledStatus": "Piaskownica wyłączona — polecenia uruchamiane bezpośrednio w systemie", + "enabledWillSetup": "Piaskownica włączona. Konfigurowanie środowiska...", + "disabled": "Tryb piaskownicy wyłączony", + "failedToLoad": "Nie udało się załadować stanu piaskownicy", + "failedToSave": "Nie udało się zapisać ustawień piaskownicy", + "statusRefreshed": "Stan odświeżony", + "checkFailed": "Nie udało się sprawdzić stanu piaskownicy", + "environmentStatus": "Stan środowiska", + "checkStatus": "Sprawdź stan", + "platform": "Platforma", + "mode": "Tryb", + "status": "Stan", + "native": "Natywny", + "wslAvailable": "WSL2 dostępne", + "limaAvailable": "Lima dostępna", + "vmCreated": "Instancja maszyny wirtualnej utworzona", + "vmRunning": "Maszyna wirtualna działa", + "wslNotInstalled": "WSL2 nie jest zainstalowane", + "wslInstallHint": "Zainstaluj WSL2 dla lepszej izolacji. Uruchom to polecenie w PowerShell jako Administrator:", + "limaNotInstalled": "Lima nie jest zainstalowana", + "limaInstallHint": "Zainstaluj Lima dla lepszej izolacji. Uruchom to polecenie w Terminalu:", + "linuxNative": "Linux uruchamia polecenia natywnie bez dodatkowej piaskownicy.", + "nodeInstalled": "Node.js zainstalowano pomyślnie", + "nodeInstallFailed": "Nie udało się zainstalować Node.js", + "pythonInstalled": "Python zainstalowano pomyślnie", + "pythonInstallFailed": "Nie udało się zainstalować Pythona", + "start": "Uruchom", + "stop": "Zatrzymaj", + "limaStarted": "Maszyna wirtualna Lima uruchomiona", + "limaStartFailed": "Nie udało się uruchomić maszyny wirtualnej Lima", + "limaStopped": "Maszyna wirtualna Lima zatrzymana", + "limaStopFailed": "Nie udało się zatrzymać maszyny wirtualnej Lima", + "settingUp": "Konfigurowanie...", + "retrySetup": "Ponów konfigurację", + "setupComplete": "Konfiguracja piaskownicy ukończona", + "setupFailed": "Konfiguracja piaskownicy nie powiodła się", + "helpText1": "Piaskownica zapewnia izolowane środowisko do bezpiecznego uruchamiania poleceń.", + "helpText2": "WSL2 (Windows) lub maszyna wirtualna Lima (macOS) jest wymagana do pełnej obsługi piaskownicy.", + "setupTitle": "Konfigurowanie piaskownicy", + "setupSubtitle": "Pierwsze uruchomienie wymaga skonfigurowania bezpiecznego środowiska wykonawczego.", + "progressLabel": "Postęp", + "continuingNative": "Kontynuowanie w trybie wykonywania natywnego.", + "retryLima": "Spróbuj ponownie uruchomić Lima", + "retryingLima": "Ponowne uruchamianie Lima...", + "continueNative": "Kontynuuj w trybie natywnym", + "configuredSuccess": "Piaskownica skonfigurowana. Kod może być teraz wykonywany bezpiecznie.", + "nativeFallbackSuccess": "Używanie natywnego środowiska systemowego do wykonywania poleceń.", + "footerWsl": "Piaskownica WSL2", + "footerLima": "Piaskownica Lima", + "footerNative": "Tryb natywny", + "configuring": "Konfigurowanie...", + "syncFiles_one": "{{count}} plik", + "syncFiles_other": "{{count}} plików", + "syncExplanation": "Synchronizowanie plików projektu z izolowaną piaskownicą w celu bezpiecznego wykonywania kodu.", + "syncFirst": "Pierwsza synchronizacja jest wolniejsza,", + "syncFollowup": "kolejne synchronizacje będą szybsze.", + "checkingWsl": "Sprawdzanie środowiska WSL2...", + "checkingLima": "Sprawdzanie środowiska Lima...", + "creatingLima": "Tworzenie maszyny wirtualnej Lima...", + "startingLima": "Uruchamianie maszyny wirtualnej Lima...", + "installingNode": "Instalowanie Node.js...", + "installingPython": "Instalowanie Pythona...", + "installingPip": "Instalowanie pip...", + "installingDeps": "Instalowanie zależności umiejętności...", + "setupFailedMessage": "Konfiguracja piaskownicy nie powiodła się", + "sandboxDisabledMessage": "Piaskownica wyłączona", + "nativeModeMessage": "Używanie trybu wykonywania natywnego", + "wslNotDetectedMessage": "Nie wykryto WSL2, używanie trybu natywnego", + "limaNotDetectedMessage": "Nie wykryto Lima, używanie trybu natywnego", + "nodeInstallFailedMessage": "Instalacja Node.js nie powiodła się", + "wslReadyMessage": "Piaskownica WSL2 gotowa", + "limaReadyMessage": "Piaskownica Lima gotowa", + "limaCreateFailedMessage": "Tworzenie maszyny wirtualnej Lima nie powiodło się", + "limaStartFailedMessage": "Uruchamianie maszyny wirtualnej Lima nie powiodło się", + "setupDetailSandboxDisabled": "Używanie trybu wykonywania natywnego (piaskownica wyłączona w ustawieniach)", + "setupDetailLinuxNative": "Linux uruchamia polecenia bezpośrednio", + "setupDetailInstallWsl": "Zainstaluj WSL2 dla lepszej izolacji piaskownicy", + "setupDetailInstallNodeWsl": "Zainstaluj Node.js ręcznie w WSL", + "setupDetailInstallNodeWslRuntime": "Instalowanie środowiska wykonawczego Node.js w {{distro}}", + "setupDetailInstallPythonWslRuntime": "Instalowanie środowiska wykonawczego Python w {{distro}}", + "setupDetailInstallPipWslRuntime": "Instalowanie menedżera pakietów Python w {{distro}}", + "setupDetailInstallDeps": "Instalowanie markitdown, pypdf, pdfplumber dla umiejętności PDF/PPTX", + "setupDetailInstallLima": "Zainstaluj Lima dla lepszej izolacji piaskownicy (brew install lima)", + "setupDetailCreateLima": "Pierwsze uruchomienie wymaga pobrania obrazu i może zająć kilka minut", + "setupDetailStartLima": "Uruchamianie maszyny wirtualnej może zająć kilka minut", + "setupDetailInstallNodeLima": "Instalowanie środowiska wykonawczego Node.js w maszynie wirtualnej Lima", + "setupDetailInstallPythonLima": "Instalowanie środowiska wykonawczego Python w maszynie wirtualnej Lima", + "syncingFilesMessage": "Synchronizowanie plików z piaskownicą...", + "syncingSkillsMessage": "Konfigurowanie umiejętności...", + "syncReadyMessage": "Piaskownica gotowa", + "syncFailedMessage": "Synchronizacja piaskownicy nie powiodła się", + "syncDetailWsl": "Kopiowanie plików projektu do izolowanego środowiska WSL", + "syncDetailLima": "Kopiowanie plików projektu do izolowanego środowiska Lima", + "syncDetailSkills": "Kopiowanie wbudowanych umiejętności do piaskownicy", + "syncDetailFallback": "Przechodzenie do trybu bezpośredniego dostępu (mniej bezpieczne)", + "syncDetailCompleted": "Zsynchronizowano {{count}} plików" + }, + "mcp": { + "noConnectors": "Brak skonfigurowanych łączników", + "addConnector": "Dodaj łącznik, aby włączyć narzędzia MCP", + "toolsAvailable": "Dostępne {{count}} narzędzie", + "toolsAvailable_plural": "Dostępne {{count}} narzędzia", + "connected": "Połączono", + "notConnected": "Nie połączono", + "connecting": "Łączenie...", + "failed": "Połączenie nieudane", + "chromeHint": "Nowe okno debugowania Chrome otworzy się automatycznie, jeśli port jest niedostępny", + "quickAddPresets": "Szybkie dodawanie ustawień wstępnych", + "show": "Pokaż", + "hide": "Ukryj", + "addCustomConnector": "Dodaj niestandardowy łącznik", + "configure": "Skonfiguruj", + "added": "Dodano", + "requiresToken": "Wymaga tokenu", + "editConnector": "Edytuj łącznik", + "addConnectorTitle": "Dodaj niestandardowy łącznik", + "name": "Nazwa", + "namePlaceholder": "Chrome MCP Server", + "type": "Typ", + "typeStdioLocal": "STDIO (lokalny)", + "typeSseRemote": "SSE (zdalny)", + "typeStreamableHttp": "HTTP (strumieniowy)", + "command": "Polecenie", + "commandPlaceholder": "npx", + "arguments": "Argumenty", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Argumenty oddzielone spacjami", + "url": "URL", + "enableConnector": "Włącz ten łącznik", + "presetAlreadyConfigured": "Łącznik \"{{name}}\" jest już skonfigurowany", + "envValuePlaceholder": "Wprowadź wartość", + "removeVar": "Usuń", + "loadServersFailed": "Nie udało się załadować łączników", + "saveServerFailed": "Nie udało się zapisać łącznika", + "deleteServerFailed": "Nie udało się usunąć łącznika", + "deleteConnectorConfirm": "Usunąć ten łącznik?", + "commandRequired": "Polecenie jest wymagane", + "urlRequired": "URL jest wymagany", + "toolCount": "{{count}} narzędzi", + "callCount": "{{count}} wywołań" + }, + "credentials": { + "envVars": "Zmienne środowiskowe", + "enterEnvVar": "Wprowadź nazwę zmiennej środowiskowej (np. NOTION_TOKEN):", + "usedForTokens": "Używane do tokenów i sekretów (np. NOTION_TOKEN)", + "noEnvVars": "Brak skonfigurowanych zmiennych środowiskowych" + }, + "skills": { + "storagePathHint": "Wybierz, gdzie przechowywane są niestandardowe umiejętności i jak aplikacja je odświeża.", + "builtinSkillsDesc": "Wbudowane umiejętności są dostarczane z aplikacją i można je włączać w razie potrzeby.", + "pluginsTitle": "Wtyczki i importy", + "pluginsDesc": "Przeglądaj wtyczki z marketplace lub importuj niestandardowe umiejętności z lokalnego folderu.", + "title": "📦 Umiejętności", + "description": "Umiejętności rozszerzają możliwości Claude o specjalistyczną wiedzę i narzędzia.", + "builtinSkills": "Wbudowane umiejętności", + "customSkills": "Niestandardowe umiejętności", + "noCustomSkills": "Brak zainstalowanych niestandardowych umiejętności", + "installSkillsDesc": "Zainstaluj umiejętności, aby rozszerzyć możliwości Claude", + "browsePlugins": "Przeglądaj wtyczki", + "pluginListTitle": "Przeglądaj Claude Plugin Marketplace", + "pluginSkillCount": "Umiejętności do zainstalowania: {{count}}", + "pluginComponents": "Komponenty: umiejętności {{skills}} · polecenia {{commands}} · agenci {{agents}} · haki {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Szczegóły komponentów będą dostępne po instalacji.", + "pluginInstall": "Zainstaluj", + "pluginInstalled": "Zainstalowano", + "pluginInstallSuccess": "Wtyczka \"{{name}}\" zainstalowana pomyślnie", + "pluginInstallFailed": "Nie udało się zainstalować wtyczki", + "pluginNoSkills": "Ta wtyczka nie ma umiejętności do zainstalowania w V1", + "pluginNoComponents": "Ta wtyczka nie ma komponentów do załadowania", + "pluginManage": "Zarządzaj", + "pluginEnable": "Włącz", + "pluginDisable": "Wyłącz", + "pluginUninstall": "Odinstalować wtyczkę \"{{name}}\"?", + "pluginManageUninstall": "Odinstaluj", + "pluginUninstalled": "Wtyczka \"{{name}}\" została odinstalowana", + "pluginComponentHooksDisabledByDefault": "Ta wtyczka zawiera haki. Haki są domyślnie wyłączone i można je włączyć w ustawieniach zarządzania po instalacji.", + "pluginComponentMcpDisabledByDefault": "Ta wtyczka zawiera MCP. MCP jest domyślnie wyłączone i można je włączyć w ustawieniach zarządzania po instalacji.", + "pluginAppliedInRuntime": "Ustawienia wtyczki są obecnie stosowane w środowisku wykonawczym", + "pluginDisabled": "Wtyczka jest obecnie wyłączona", + "noPluginsFound": "Brak dostępnych wtyczek", + "storagePathTitle": "Katalog przechowywania umiejętności", + "storagePathUnavailable": "Ścieżka przechowywania niedostępna", + "selectStoragePath": "Wybierz katalog", + "openStoragePath": "Otwórz katalog", + "refreshSkills": "Odśwież umiejętności", + "storagePathUpdated": "Pamięć zaktualizowana. Przeniesiono {{migrated}} umiejętności, pominięto {{skipped}}", + "storagePathUpdateFailed": "Nie udało się zaktualizować ścieżki przechowywania umiejętności", + "storagePathOpenFailed": "Nie udało się otworzyć ścieżki przechowywania umiejętności", + "storagePathFallback": "Powrócono do domyślnego katalogu umiejętności. Zweryfikuj skonfigurowaną ścieżkę.", + "storageWatcherError": "Błąd obserwatora katalogu umiejętności: {{message}} (włączono mechanizm awaryjny odpytywania).", + "installSkillFromFolder": "Zainstaluj umiejętność z folderu", + "deleteSkill": "Usunąć umiejętność \"{{name}}\"?", + "failedToLoad": "Nie udało się załadować umiejętności", + "failedToInstall": "Nie udało się zainstalować umiejętności", + "failedToDelete": "Nie udało się usunąć umiejętności", + "failedToToggle": "Nie udało się przełączyć umiejętności" + }, + "logs": { + "actionsTitle": "Akcje dziennika", + "title": "Dzienniki aplikacji", + "description": "Wyświetlaj i eksportuj pakiety diagnostyczne do debugowania. Dzienniki są automatycznie rotowane po 10 MB, a eksporty zawierają również ostatnie podsumowania sesji i błędów.", + "inventoryDescription": "Bieżący inwentarz dzienników i zajętość pamięci.", + "recentDescription": "Ostatnie dzienniki aplikacji dostępne do przeglądania. Możesz nadal wyeksportować pakiet diagnostyczny, nawet gdy żaden plik dziennika jeszcze nie istnieje.", + "directoryDescription": "Bieżąca lokalizacja na dysku dla dzienników aplikacji.", + "actionsDescription": "Wyeksportuj pakiet diagnostyczny, pokaż katalog dzienników lub wyczyść pliki dzienników.", + "enableDevLogs": "Włącz dzienniki deweloperskie", + "enableDevLogsDesc": "Rejestruj szczegółowe dzienniki do debugowania. Wyłącz, aby zmniejszyć zużycie dysku.", + "devLogsEnabled": "Dzienniki deweloperskie włączone", + "devLogsDisabled": "Dzienniki deweloperskie wyłączone", + "toggleFailed": "Nie udało się przełączyć dzienników deweloperskich", + "logFiles": "Pliki dzienników", + "totalSize": "Całkowity rozmiar", + "noLogFiles": "Nie znaleziono plików dzienników", + "logsDirectory": "Katalog dzienników:", + "exportZip": "Eksportuj diagnostykę", + "openFolder": "Otwórz folder", + "clearAll": "Wyczyść wszystko", + "clearConfirm": "Czy na pewno chcesz wyczyścić wszystkie pliki dzienników? Tej operacji nie można cofnąć.", + "exportSuccess": "Diagnostyka wyeksportowana pomyślnie do {{path}}", + "clearSuccess": "Wyczyszczono {{count}} plik(ów) dzienników", + "exportFailed": "Nie udało się wyeksportować dzienników", + "clearFailed": "Nie udało się wyczyścić dzienników", + "helpText1": "Wyeksportowany pakiet diagnostyczny zawiera dzienniki aplikacji, zredagowany zrzut środowiska wykonawczego oraz domyślnie tylko podsumowania sesji/błędów zawierające metadane, bez treści wiadomości.", + "helpText2": "Udostępnienie tego pakietu zwykle pozwala nam znacznie szybciej zawęzić problemy, niezależnie od tego, czy pochodzą z interfejsu użytkownika, wykonywania narzędzi czy lokalnego środowiska." + }, + "sidebar": { + "recents": "Ostatnie", + "expandToView": "Rozwiń, aby wyświetlić zadania", + "noTasks": "Brak zadań", + "noTasksHint": "Rozpocznij nowy czat, aby zacząć tworzyć, badać lub edytować pliki.", + "search": "Szukaj rozmów...", + "deleteAll": "Usuń wszystkie rozmowy", + "localTasks": "Te zadania działają lokalnie i nie są synchronizowane między urządzeniami.", + "apiConfigured": "API skonfigurowane", + "apiNotConfigured": "API nieskonfigurowane", + "user": "Użytkownik", + "newTask": "Nowy czat", + "newTaskHint": "Rozpocznij nową rozmowę", + "today": "Dzisiaj", + "yesterday": "Wczoraj", + "previousWeek": "Poprzednie 7 dni", + "older": "Starsze", + "settings": "Ustawienia", + "themeToggle": "Przełącz motyw", + "manage": "Zarządzaj", + "selectAll": "Zaznacz wszystko", + "deselectAll": "Odznacz wszystko", + "nSelected": "Zaznaczono {{count}}", + "batchDeleteConfirm": "Usunąć {{count}} rozmów? Tej operacji nie można cofnąć.", + "cancel": "Anuluj", + "confirmDelete": "Usuń" + }, + "chat": { + "sendMessage": "Wyślij wiadomość", + "stop": "Zatrzymaj", + "processing": "Przetwarzanie...", + "typeMessage": "Wpisz wiadomość...", + "loadingConversation": "Ładowanie rozmowy...", + "startConversation": "Rozpocznij rozmowę", + "startFailed": "Nie udało się rozpocząć sesji. Spróbuj ponownie.", + "disclaimer": "Open Cowork działa w oparciu o AI i może popełniać błędy. Zawsze sprawdzaj odpowiedzi.", + "noModel": "Brak modelu", + "connectorCount_one": "{{count}} łącznik", + "connectorCount_other": "{{count}} łączników" + }, + "context": { + "progress": "Postęp", + "artifacts": "Artefakty", + "context": "Kontekst", + "workingDirectory": "Katalog roboczy", + "toolsUsed": "Użyte narzędzia", + "mcpConnectors": "Łączniki MCP", + "copied": "Skopiowano!", + "noToolsUsedYet": "Nie użyto jeszcze żadnych narzędzi", + "toolsUsedLabel": "Użyte narzędzia:", + "noFolderSelected": "Nie wybrano folderu", + "expandPanel": "Rozwiń panel", + "collapsePanel": "Zwiń panel", + "queuedMessages": "Wiadomości w kolejce: {{count}}", + "stepsWillShow": "Kroki pojawią się w miarę postępu zadania.", + "noArtifactsYet": "Brak artefaktów", + "revealFailed": "Nie można zlokalizować pliku. Sprawdź, czy ścieżka istnieje.", + "fileCreated": "Plik utworzony", + "callNumber": "Wywołanie #{{number}}", + "input": "Wejście:", + "output": "Wyjście:", + "tokenUsage": "Zużycie tokenów", + "inputTokens": "Wejście", + "outputTokens": "Wyjście", + "totalTokens": "Łącznie", + "changeDir": "Zmień katalog", + "changeDirFailed": "Nie udało się zmienić katalogu", + "copyPath": "Kopiuj ścieżkę", + "openInFileManager": "Otwórz w menedżerze plików", + "contextUsage": "Zużycie kontekstu", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Żądanie", + "queued": "W kolejce", + "cancelled": "Anulowano", + "emptyMessage": "Pusta wiadomość", + "emptyText": "(pusty tekst)", + "copyMessage": "Kopiuj wiadomość", + "revealInFolder": "Pokaż w folderze", + "pastedContentAlt": "Wklejona zawartość", + "taskProgress": "Postęp zadania", + "noQuestions": "Brak pytań", + "question": "Pytanie", + "thinking": "Myślenie", + "executionTime": "Czas wykonania: {{time}}" + }, + "schedule": { + "createTitle": "Utwórz harmonogram", + "editTitle": "Edytuj harmonogram", + "autoTitleLabel": "Tytuł automatyczny (używany do identyfikacji sesji)", + "autoTitleChangedHint": "Prompt zmieniony. Tytuł zostanie wygenerowany ponownie po zapisaniu.", + "autoTitleUnchangedHint": "Jeśli prompt pozostanie taki sam, istniejący tytuł zostanie zachowany.", + "autoTitleEditingChanged": "Po zapisaniu tytuł zostanie wygenerowany ponownie na podstawie promptu z prefiksem [Zadanie zaplanowane].", + "autoTitleEditingUnchanged": "Po zapisaniu tytuł zostanie wygenerowany z prefiksem [Zadanie zaplanowane].", + "autoTitleCreating": "Po zapisaniu tytuł zostanie wygenerowany z prefiksem [Zadanie zaplanowane] i podsumowaniem modelu.", + "promptPlaceholder": "Prompt do automatycznego uruchomienia o zaplanowanej godzinie", + "cwdPlaceholder": "Katalog roboczy (domyślnie bieżący obszar roboczy)", + "executionTime": "Czas uruchomienia", + "executionTimeHint": "Nowe harmonogramy preferują czasy wielosegmentowe; starsze reguły interwałowe można nadal edytować.", + "enabled": "Włączony", + "mode": "Tryb uruchamiania", + "weekday": "Dni tygodnia", + "weekdayPlaceholder": "Wybierz dni tygodnia", + "times": "Przedziały czasowe", + "timePlaceholder": "Wybierz godziny", + "legacyIntervalNotice": "To zadanie pochodzi ze starszej reguły o stałym interwale i zachowa ten tryb po zapisaniu.", + "onceTimeLabel": "Wybierz jednorazowy czas wykonania", + "legacyStartTimeLabel": "Wybierz czas rozpoczęcia dla starszej reguły interwałowej", + "dailyHint": "Uruchamiaj automatycznie o tych godzinach każdego dnia.", + "weeklyHint": "Uruchamiaj automatycznie w wybrane dni tygodnia i przedziały czasowe.", + "saveChanges": "Zapisz zmiany", + "createTask": "Utwórz zadanie", + "cancelEdit": "Anuluj edycję", + "listHint": "Wyłączenie blokuje tylko przyszłe automatyczne uruchomienia. Już rozpoczęte sesje należy zatrzymać ręcznie z listy sesji.", + "empty": "Brak harmonogramów", + "loadFailed": "Nie udało się załadować harmonogramów", + "promptRequired": "Wprowadź prompt do uruchomienia", + "dailyTimesRequired": "Wybierz co najmniej jeden dzienny przedział czasowy", + "weeklyTimesRequired": "Wybierz co najmniej jeden tygodniowy przedział czasowy", + "weekdayRequired": "Wybierz co najmniej jeden dzień tygodnia", + "invalidTime": "Wprowadź prawidłowy czas wykonania", + "nextRunCalculationFailed": "Bieżąca reguła nie może obliczyć następnego czasu uruchomienia", + "futureTimeRequired": "Czas wykonania musi być późniejszy niż teraz. Użyj opcji Uruchom teraz, jeśli chcesz uruchomić je natychmiast.", + "taskMissing": "Zadanie już nie istnieje lub zostało usunięte", + "updated": "Harmonogram zaktualizowany", + "created": "Harmonogram utworzony", + "saveFailed": "Nie udało się zapisać harmonogramu", + "toggleFailed": "Nie udało się przełączyć stanu harmonogramu", + "runNowSuccess": "Uruchomiono natychmiastowe wykonanie", + "runNowFailed": "Nie udało się uruchomić natychmiast", + "noSessionToStop": "To zadanie nie ma sesji wykonawczej do zatrzymania", + "sessionNotRunning": "To zadanie nie ma obecnie działającej sesji", + "stopSent": "Polecenie zatrzymania wysłane", + "stopFailed": "Nie udało się zatrzymać wykonania", + "deleteConfirm": "Usunąć harmonogram \"{{title}}\"?", + "deleted": "Harmonogram usunięty", + "deleteFailed": "Nie udało się usunąć harmonogramu", + "statusRunning": "Działa", + "statusFinished": "Zakończono", + "statusUnknown": "Nieznany", + "statusNone": "Brak", + "taskEnabled": "Włączony", + "taskDisabled": "Wyłączony", + "nextRun": "Następne uruchomienie: {{value}}", + "nextRunNone": "Następne uruchomienie: Brak", + "strategy": "Reguła harmonogramu: {{value}}", + "lastRun": "Ostatnie uruchomienie: {{value}}", + "lastRunNever": "Ostatnie uruchomienie: Jeszcze nie uruchomiono", + "recentSession": "Ostatnia sesja: {{value}}", + "sessionStatus": "Stan sesji: {{value}}", + "cwd": "Katalog: {{value}}", + "lastError": "Ostatni błąd: {{value}}", + "disable": "Wyłącz", + "enable": "Włącz", + "runNow": "Uruchom teraz", + "stopExecution": "Zatrzymaj uruchomienie", + "edit": "Edytuj", + "delete": "Usuń", + "stopRunTitleActive": "Zatrzymaj ostatnią sesję wykonawczą dla tego zadania", + "stopRunTitleIdle": "To zadanie nie ma obecnie działającej sesji", + "repeatEveryMinute_one": "Co {{count}} minutę", + "repeatEveryMinute_other": "Co {{count}} minut", + "repeatEveryHour_one": "Co {{count}} godzinę", + "repeatEveryHour_other": "Co {{count}} godzin", + "repeatEveryDay_one": "Co {{count}} dzień", + "repeatEveryDay_other": "Co {{count}} dni", + "ruleDaily": "Codziennie o {{times}}", + "ruleWeekly": "Co tydzień w {{weekdays}} o {{times}}", + "ruleOnce": "Jednorazowo", + "previewNextRun": "Następne oczekiwane uruchomienie: {{value}}", + "previewSelectValidTime": "Wybierz prawidłowy czas wykonania", + "previewSelectAtLeastOne": "Wybierz co najmniej jeden prawidłowy przedział czasowy", + "previewAutoFind": "System automatycznie wybierze następny czas uruchomienia: {{value}}", + "weekdayMonday": "Pon", + "weekdayTuesday": "Wt", + "weekdayWednesday": "Śr", + "weekdayThursday": "Czw", + "weekdayFriday": "Pt", + "weekdaySaturday": "Sob", + "weekdaySunday": "Nd", + "modeOnce": "Jednorazowo", + "modeDaily": "Codziennie", + "modeWeekly": "Co tydzień", + "repeatUnitMinute": "Minuta", + "repeatUnitHour": "Godzina", + "repeatUnitDay": "Dzień", + "unknownWeekday": "Nieznany", + "pickerEditTimes": "Edytuj przedziały czasowe", + "pickerAnyHHmm": "Możesz wprowadzić dowolną wartość `HH:mm`", + "pickerSelectedCount_one": "Wybrano {{count}}", + "pickerSelectedCount_other": "Wybrano {{count}}", + "pickerAdd": "Dodaj", + "pickerSelectedTimes": "Wybrane godziny", + "pickerNone": "Nie wybrano jeszcze żadnych przedziałów czasowych", + "pickerSuggestions": "Sugestie" + }, + "remote": { + "title": "Zdalne sterowanie", + "statusRunning": "Działa. Dostępne przez Feishu.", + "statusStopped": "Zatrzymano", + "startService": "Uruchom usługę", + "stopService": "Zatrzymaj usługę", + "activeSessions": "Aktywne sesje", + "authorizedUsers": "Autoryzowani użytkownicy", + "pendingApprovals": "Oczekujące zatwierdzenia", + "pairingRequests": "Żądania parowania oczekujące na zatwierdzenie", + "unknownUser": "Nieznany użytkownik", + "pairingCode": "Kod parowania", + "approve": "Zatwierdź", + "stepFeishu": "Konfiguracja Feishu", + "stepConnection": "Połączenie", + "stepAdvanced": "Zaawansowane", + "feishuTitle": "Konfiguracja bota Feishu", + "feishuDesc": "Utwórz aplikację na Feishu Open Platform, a następnie wprowadź tutaj dane uwierzytelniające.", + "dmPolicy": "Zasady autoryzacji wiadomości prywatnych", + "policyPairing": "Weryfikacja parowania", + "policyPairingDesc": "Użytkownicy muszą wprowadzić kod parowania.", + "policyAllowlist": "Lista dozwolonych", + "policyAllowlistDesc": "Dozwoleni są tylko określeni użytkownicy.", + "policyOpen": "Otwarty dostęp", + "policyOpenDesc": "Każdy może korzystać z bota.", + "openFeishu": "Otwórz Feishu Open Platform", + "slackTitle": "Konfiguracja bota Slack", + "slackDesc": "Utwórz aplikację Slack, zainstaluj ją w swoim obszarze roboczym, a następnie wprowadź tutaj dane uwierzytelniające.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (dla Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Połącz się wychodząco ze Slack. Publiczny adres IP nie jest wymagany.", + "openSlack": "Otwórz Slack API", + "connectionTitle": "Tryb połączenia", + "connectionDesc": "Wybierz, w jaki sposób serwery Feishu komunikują się z Twoim komputerem.", + "longConnection": "Tryb połączenia trwałego", + "recommended": "Zalecane", + "longConnectionDesc": "Aplikacja łączy się wychodząco z serwerami Feishu. Publiczny adres IP ani ngrok nie są wymagane.", + "noPublicInternet": "Brak ekspozycji w publicznym internecie", + "outOfBox": "Działa od razu", + "stableReliable": "Stabilne i niezawodne", + "webhookMode": "Tryb webhook", + "webhookDesc": "Feishu wysyła wiadomości na Twój serwer. Wymagany jest publicznie dostępny adres.", + "localWebhookUrl": "Lokalny adres URL webhook", + "useBuiltInNgrok": "Użyj wbudowanego ngrok", + "ngrokHelpPrefix": "Pobierz go za darmo z", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunel połączony", + "longConnectionHint": "Na Feishu Open Platform przejdź do Events & Callbacks > Event Configuration i przełącz tryb subskrypcji na połączenie trwałe.", + "advancedTitle": "Ustawienia zaawansowane", + "advancedDesc": "Dostosuj zachowanie zdalnego sterowania.", + "defaultWorkingDirectory": "Domyślny katalog roboczy", + "defaultWorkingDirectoryPlaceholder": "Na przykład: C:\\Users\\twoja-nazwa\\Projects", + "defaultWorkingDirectoryHint": "To jest domyślny katalog dla poleceń AI. Możesz go również zastąpić w wiadomości za pomocą `[cwd:path]`.", + "gatewayPort": "Port usługi", + "autoApproveSafeTools": "Automatycznie zatwierdzaj bezpieczne narzędzia", + "autoApproveSafeToolsDesc": "Automatycznie zezwalaj na bezpieczne narzędzia, takie jak odczyt plików i operacje przeglądarki.", + "saveConfig": "Zapisz konfigurację", + "authorizedUsersTitle": "Autoryzowani użytkownicy ({{count}})", + "revokeAccess": "Cofnij dostęp", + "quickStart": "Szybki start", + "quickStartStep1": "Utwórz aplikację na Feishu Open Platform i dodaj funkcję bota.", + "quickStartStep2": "Skopiuj App ID i App Secret do powyższych pól.", + "quickStartStep3": "Włącz te uprawnienia w ustawieniach uprawnień:", + "quickStartStep4": "W konfiguracji zdarzeń Feishu wybierz tryb zdarzeń z połączeniem trwałym.", + "quickStartStep5Prefix": "Subskrybuj zdarzenie", + "quickStartStep5Suffix": ".", + "quickStartStep6": "Opublikuj aplikację, a następnie kliknij Uruchom usługę.", + "started": "Zdalne sterowanie uruchomione", + "stopped": "Zdalne sterowanie zatrzymane", + "actionFailed": "Operacja nie powiodła się", + "configSaved": "Konfiguracja zapisana", + "saveFailed": "Nie udało się zapisać konfiguracji", + "pairingApproved": "Parowanie zatwierdzone", + "approveFailed": "Nie udało się zatwierdzić parowania", + "reject": "Odrzuć", + "pairingRejected": "Parowanie odrzucone", + "rejectFailed": "Nie udało się odrzucić parowania", + "pairingGuideTitle": "Przewodnik parowania", + "pairingGuideStep1": "Otwórz Feishu i znajdź bota", + "pairingGuideStep2": "Wyślij dowolną wiadomość, aby rozpocząć parowanie", + "pairingGuideStep3": "Zatwierdź poniższe żądanie parowania", + "pairingGuideStep4": "Gotowe — użytkownik może teraz rozmawiać z botem", + "waitingForPairing": "Oczekiwanie na rozpoczęcie parowania przez użytkowników...", + "expiresIn": "Wygasa za {{time}}", + "userRemoved": "Użytkownik usunięty", + "revokeFailed": "Nie udało się usunąć użytkownika", + "copied": "Skopiowano" + }, + "time": { + "now": "teraz" + }, + "permission": { + "permissionRequired": "Wymagane uprawnienie", + "tool": "Narzędzie:", + "input": "Wejście:", + "warning": "Ta akcja może zmodyfikować Twój system. Sprawdź ją uważnie.", + "deny": "Odmów", + "allow": "Zezwól", + "alwaysAllow": "Zawsze zezwalaj na to narzędzie", + "useTool": "Użyj narzędzia {{toolName}}", + "toolDescriptions": { + "write": "Zapis do plików w Twoim systemie", + "edit": "Edycja istniejących plików w Twoim systemie", + "bash": "Wykonywanie poleceń powłoki", + "webFetch": "Pobieranie danych z sieci", + "webSearch": "Wyszukiwanie w sieci", + "read_file": "Odczyt plików w obszarze roboczym", + "write_file": "Zapis plików w obszarze roboczym", + "edit_file": "Edycja plików w obszarze roboczym", + "list_directory": "Wyświetlanie zawartości katalogu w obszarze roboczym", + "execute_command": "Wykonywanie poleceń powłoki w obszarze roboczym", + "glob": "Wyszukiwanie plików według wzorca", + "grep": "Wyszukiwanie w zawartości plików" + } + }, + "sudo": { + "title": "Wymagane uprawnienia administratora", + "description": "Następujące polecenie wymaga uprawnień administratora:", + "passwordLabel": "Hasło", + "passwordPlaceholder": "Wprowadź swoje hasło", + "cancel": "Anuluj", + "execute": "Wykonaj", + "warning": "Twoje hasło zostanie użyte tylko do tego polecenia i nie będzie przechowywane." + }, + "errorBoundary": { + "title": "Coś poszło nie tak", + "description": "W aplikacji wystąpił nieoczekiwany błąd. Możesz spróbować przywrócić działanie, klikając przycisk poniżej.", + "details": "Szczegóły błędu", + "retry": "Spróbuj ponownie" + } +} diff --git a/src/renderer/i18n/locales/ro.json b/src/renderer/i18n/locales/ro.json new file mode 100644 index 00000000..324d68d6 --- /dev/null +++ b/src/renderer/i18n/locales/ro.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Salvează", + "cancel": "Anulează", + "delete": "Șterge", + "edit": "Editează", + "add": "Adaugă", + "close": "Închide", + "loading": "Se încarcă...", + "error": "Eroare", + "success": "Succes", + "saving": "Se salvează...", + "saved": "Salvat cu succes!", + "sure": "Ești sigur?", + "yes": "Da", + "no": "Nu", + "enable": "Activează", + "disable": "Dezactivează", + "install": "Instalează", + "optional": "opțional", + "appLogoAlt": "Logo Open Cowork", + "pastedImageAlt": "Lipit {{index}}" + }, + "welcome": { + "title": "Cu ce te pot ajuta astăzi?", + "placeholder": "Descrie ce ai vrea să faci...", + "createFile": "Creează un fișier", + "crunchData": "Procesează date", + "organizeFiles": "Organizează fișiere", + "checkEmails": "Verifică e-mailurile", + "searchPapers": "Caută și rezumă articole", + "summarizePapersToNotion": "Rezumă articole în Notion", + "selectWorkingFolder": "Selectează folderul de lucru (obligatoriu)", + "selectWorkingFolderFailed": "Selectarea folderului de lucru a eșuat", + "attachFiles": "Atașează fișiere", + "letsGo": "Să începem", + "starting": "Se pornește...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Logo Open Cowork", + "pastedImageAlt": "Lipit {{index}}", + "quickPromptCreate": "Creează un fișier nou pentru mine", + "quickPromptCrunch": "Ajută-mă să analizez și să procesez date", + "quickPromptOrganize": "Ajută-mă să îmi organizez fișierele și folderele", + "quickPromptEmail": "Ajută-mă să folosesc Chrome pentru a rezuma e-mailurile noi din ultimele trei zile din Gmail și NetEase Mail. Reține că în conturile salvate este deja inclus sufixul complet al adresei de e-mail. Prin urmare, dacă sufixul adresei este deja precompletat pe pagina web sau într-o captură de ecran, nu îl introduce din nou, pentru a evita eșecul autentificării. De asemenea, verifică mai întâi dacă acreditările contului respectiv sunt salvate. Dacă numele de utilizator sau parola pentru un anumit serviciu de e-mail nu este salvată, poți omite acel cont de e-mail.", + "quickPromptPapers": "Te rog ajută-mă să folosesc Chrome pentru a căuta și rezuma articole legate de [Agent] din ultimele două zile.\nSurse:\n1. HuggingFace Daily Papers. Te rog include informațiile despre voturi și un scurt rezumat. Reține că este posibil să nu existe articole în weekend, așa că poate fi necesar să verifici articolele din zilele anterioare. Dar asigură-te că există în total două zile.", + "quickPromptNotion": "Ajută-mă să cercetez trei articole de tip survey reprezentative legate de agenți și adaugă-le sub o pagină Notion intitulată \"Agent Survey\". Pentru fiecare articol, include titlul, autorii, locul/anul publicării și un scurt rezumat al principalelor contribuții.", + "apiNotConfigured": "API-ul nu este încă configurat. Mergi la Setări pentru a configura furnizorul API și cheia.", + "goToSettings": "Mergi la Setări" + }, + "settings": { + "title": "Setări", + "apiSettings": "Setări API", + "apiSettingsDesc": "Configurează furnizorul și cheia API", + "sandbox": "Sandbox", + "sandboxDesc": "Mediu de execuție izolat", + "connectors": "Conectori MCP", + "connectorsDesc": "Integrări de browser și instrumente", + "skills": "Abilități", + "skillsDesc": "Gestionează abilitățile personalizate", + "memory": "Memorie", + "memoryDesc": "Gestionează memoria pe termen lung și experiența spațiului de lucru", + "schedule": "Programări", + "scheduleDesc": "Automatizare a prompturilor în stil alarmă", + "remote": "Control la distanță", + "remoteDesc": "Folosește Open Cowork din Feishu și alte canale", + "logs": "Jurnale", + "logsDesc": "Vizualizează și exportă jurnalele aplicației", + "panelDesc": "Configurează spațiul de lucru, instrumentele și comportamentul contului.", + "general": "General", + "generalDesc": "Aspect, limbă și preferințe" + }, + "general": { + "appearance": "Aspect", + "theme": "Temă", + "themeLight": "Luminoasă", + "themeDark": "Întunecată", + "themeSystem": "Sistem", + "language": "Limbă" + }, + "memory": { + "title": "Memorie", + "description": "Memoria globală de bază stochează preferințe stabile, în timp ce memoria de experiență a spațiului de lucru stochează cunoștințe multi-tur specifice proiectului.", + "enabled": "Activată", + "disabled": "Dezactivată", + "toggleHint": "Dezactivarea oprește viitoarea ingestie și reapelarea automată, dar păstrează înregistrările existente.", + "enableAction": "Activează memoria", + "disableAction": "Dezactivează memoria", + "enabledStatus": "Memoria este activată", + "disabledStatus": "Memoria este dezactivată", + "coreCount": "Intrări de bază", + "sessionCount": "Rezumate de sesiuni", + "chunkCount": "Fragmente de experiență", + "workspaceCount": "Spații de lucru", + "latestIngestion": "Ultima ingestie", + "noIngestionYet": "Nicio ingestie înregistrată încă", + "health": "Stare", + "healthy": "Sănătos, fără eșecuri recente", + "failedSessions": "{{count}} sesiune (sesiuni) au eșuat la ultima ingestie", + "searchTitle": "Caută și inspectează", + "searchDescription": "Caută în memorie după spațiul de lucru curent sau global, apoi inspectează rezumate și extrase brute.", + "searchPlaceholder": "Caută preferințe, implementări anterioare, decizii...", + "searchAction": "Caută", + "scopeWorkspace": "Spațiul de lucru curent", + "scopeAll": "Toată memoria", + "scopeGlobal": "Doar memoria de bază", + "currentWorkspace": "Spațiul de lucru curent", + "groupCore": "Memorie de bază", + "groupSessions": "Rezumate de sesiuni", + "groupChunks": "Potriviri de fragmente", + "detailTitle": "Detaliu", + "noSelection": "Selectează un rezultat pentru a inspecta rezumatul complet și extrasul sursă.", + "noResults": "Niciun rezultat", + "maintenanceTitle": "Întreținere", + "maintenanceDescription": "Reconstruiește memoria de experiență pentru spațiul de lucru curent sau șterge datele salvate.", + "rebuildWorkspace": "Reconstruiește spațiul de lucru curent", + "clearWorkspace": "Șterge spațiul de lucru curent", + "clearCore": "Șterge memoria de bază", + "rebuildConfirm": "Reconstruiești memoria de experiență pentru spațiul de lucru curent? Aceasta rescanează sesiunile istorice din acel spațiu de lucru.", + "clearWorkspaceConfirm": "Ștergi memoria de experiență pentru spațiul de lucru curent? Această acțiune nu poate fi anulată.", + "clearCoreConfirm": "Ștergi toată memoria globală de bază? Această acțiune nu poate fi anulată.", + "rebuildSuccess": "Memoria spațiului de lucru a fost reconstruită", + "clearWorkspaceSuccess": "Memoria spațiului de lucru a fost ștearsă", + "clearCoreSuccess": "Memoria de bază a fost ștearsă", + "runtimeTitle": "Configurație de execuție", + "runtimeDescription": "În mod implicit, aceasta moștenește configurația API activă curentă. Aici reglezi în principal adâncimea de navigare, embedding-ul și directorul de pe disc.", + "runtimeSaved": "Configurația de execuție a memoriei a fost salvată", + "saveRuntime": "Salvează configurația de execuție", + "storageRoot": "Rădăcina de stocare", + "noWorkspace": "Niciun spațiu de lucru încă", + "maxNavSteps": "Pași de navigare", + "ingestionConcurrency": "Concurență la reconstruire", + "useEmbedding": "Activează recuperarea prin embedding", + "evalEnabled": "Activează evaluarea cu model real", + "evalArtifactsRoot": "Directorul artefactelor de evaluare", + "evalMaxRounds": "Runde de evaluare", + "promptIterationRounds": "Runde de iterare a promptului", + "llmConfig": "LLM pentru memorie", + "embeddingConfig": "Embedding", + "inheritActive": "Moștenește API-ul activ", + "modelOverride": "Suprascriere model", + "baseUrlOverride": "Suprascriere Base URL", + "apiKeyOverride": "Suprascriere cheie API", + "allSources": "Toate sursele", + "groupRawSessions": "Sesiuni brute", + "sourceFile": "Fișier sursă", + "inspectSession": "Inspectează memoria sesiunii", + "inspectSessionHint": "Selectează o sesiune sau un fragment din rezultatele de mai sus pentru a-l inspecta.", + "revealInFinder": "Arată în Finder", + "rebuildAll": "Reconstruiește toată memoria", + "rebuildAllConfirm": "Aceasta va șterge și reconstrui toată memoria. Continui?", + "rebuildAllSuccess": "Toată memoria a fost reconstruită: {{sessionCount}} sesiune (sesiuni), {{workspaceCount}} spațiu (spații) de lucru sursă", + "filesTitle": "Vizualizator de fișiere brute", + "filesDescription": "Vizualizează artefactele core / unified experience / session_state / eval exact așa cum sunt scrise pe disc.", + "fileList": "Lista de fișiere", + "refreshFiles": "Reîmprospătează", + "noFiles": "Niciun fișier de memorie încă", + "fileContent": "Conținutul fișierului", + "emptyFile": "Fișierul este gol", + "selectFileHint": "Selectează un fișier din stânga pentru a-i vizualiza JSON-ul brut." + }, + "language": { + "english": "Engleză", + "chinese": "Chineză", + "selectLanguage": "Selectează limba", + "currentLanguage": "Limba curentă" + }, + "api": { + "firstRunTitle": "Configurează API-ul", + "firstRunSubtitle": "Configurează un furnizor pentru a începe să folosești Open Cowork", + "settingsTitle": "Setări API", + "settingsSubtitle": "Gestionează setările de furnizor, cheie și model", + "configSet": "Set de configurare", + "defaultSetTag": "Implicit", + "saveAs": "Salvează ca", + "renameSet": "Redenumește", + "deleteSet": "Șterge setul", + "saveAndSwitch": "Salvează și comută", + "discardAndSwitch": "Renunță și comută", + "currentSetSavingHint": "\"Salvează setările\" actualizează doar setul de configurare selectat curent.", + "unsavedCurrentSetHint": "Setul de configurare curent are modificări nesalvate.", + "unsavedSwitchPrompt": "Setul de configurare curent are modificări nesalvate. Alege o acțiune înainte de a comuta la \"{{name}}\".", + "configSetSaveAsPrompt": "Introdu un nume pentru noul set de configurare", + "configSetRenamePrompt": "Introdu un nume nou pentru acest set de configurare", + "configSetDeleteConfirm": "Ștergi setul de configurare \"{{name}}\"?", + "configSetNameRequired": "Numele setului de configurare este obligatoriu", + "configSetLimitReached": "Poți salva până la {{count}} seturi de configurare", + "configSetCreated": "Set de configurare creat", + "configSetRenamed": "Set de configurare redenumit", + "configSetDeleted": "Set de configurare șters", + "configSetSwitched": "Set de configurare comutat", + "defaultConfigSetName": "Implicit", + "configSetFallbackName": "Set de configurare {{index}}", + "provider": "Furnizor API", + "providerDescription": "Alege familia de furnizori și stilul general de protocol pentru acest spațiu de lucru.", + "apiKey": "Cheie API", + "enterApiKey": "Introdu cheia API", + "apiKeyDescription": "Salvată local și asociată setului de configurare activ.", + "protocol": "Protocol", + "baseUrl": "Base URL", + "model": "Model", + "usePreset": "Folosește presetare", + "custom": "Personalizat", + "moreModels": "Mai multe modele", + "noModelsAvailable": "Niciun model disponibil", + "selectProtocol": "Selectează protocolul compatibil pentru serviciu", + "enterOllamaUrl": "Introdu URL-ul serviciului Ollama compatibil cu OpenAI", + "enterOpenAIUrl": "Introdu URL-ul serviciului compatibil cu OpenAI", + "enterAnthropicUrl": "Introdu URL-ul serviciului compatibil cu Anthropic", + "enterGeminiUrl": "Introdu un Base URL compatibil cu Gemini", + "enterModelId": "Introdu ID-ul modelului, de ex. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Te rog selectează un model", + "contextWindow": "Fereastră de context", + "contextWindowPlaceholder": "Detectare automată", + "maxOutputTokens": "Token-uri maxime de ieșire", + "maxOutputTokensPlaceholder": "Detectare automată", + "contextWindowHint": "Lasă gol pentru detectare automată. Suprascrie doar dacă modelul raportează limite incorecte.", + "saveFailed": "Salvarea setărilor a eșuat. Te rog încearcă din nou.", + "getStarted": "Începe", + "saveSettings": "Salvează setările", + "openSettingsAction": "Deschide setările API", + "configRequiredActiveSet": "Setul de configurare curent nu are acreditări utilizabile. Finalizează mai întâi configurarea în Setări API.", + "testConnection": "Testează conexiunea", + "testingConnection": "Se testează...", + "refreshModels": "Reîmprospătează modelele", + "refreshingModels": "Se reîmprospătează...", + "refreshModelsFailed": "Reîmprospătarea modelelor a eșuat. Verifică URL-ul sau starea serviciului.", + "manualModel": "Model manual", + "useDetectedModels": "Folosește modelele detectate", + "discoverLocalOllama": "Găsește Ollama local", + "discoveringLocalOllama": "Se caută...", + "discoverLocalOllamaHint": "Introdu mai întâi endpoint-ul Ollama. Modelele vor fi preluate automat, iar introducerea manuală este necesară doar dacă descoperirea eșuează.", + "localOllamaDiscovered": "S-a găsit Ollama local cu {{count}} model(e) disponibil(e).", + "localOllamaNotFound": "Nu a fost găsit niciun serviciu Ollama local. Pornește-l cu `ollama serve` și încearcă din nou.", + "localOllamaNoModels": "S-a găsit un serviciu Ollama local, dar acesta nu expune momentan niciun model.", + "localOllamaModelUnavailable": "S-a găsit Ollama local, dar modelul {{model}} nu a putut finaliza o cerere de inferență minimală.", + "localOllamaModelLoading": "S-a găsit Ollama local, dar modelul încă se încarcă în memorie. Modelele mari pot dura până la un minut.", + "enableThinking": "Activează modul de gândire", + "enableThinkingHint": "Afișează procesul de gândire al lui Claude pas cu pas. Aceasta oferă mai multă transparență, dar poate crește consumul de token-uri.", + "enableThinkingOllamaHint": "Majoritatea modelelor Ollama nu acceptă modul de gândire. Activează doar dacă modelul tău îl acceptă explicit.", + "testSuccess": "Conexiune reușită ({{ms}}ms)", + "testSuccessNeedSave": "Testul de conexiune a trecut. Salvează setările înainte de a porni o sesiune.", + "testError": { + "missing_key": "Cheia API este obligatorie", + "missing_base_url": "Base URL este obligatoriu pentru acest furnizor", + "unauthorized": "Cheie API invalidă sau neautorizată", + "not_found": "Endpoint negăsit. Verifică Base URL", + "rate_limited": "Limită de rată depășită sau cotă epuizată", + "server_error": "Eroare de serviciu. Te rog încearcă mai târziu", + "network_error": "Eroare de rețea. Verifică-ți conexiunea", + "ollama_not_running": "Nu se poate conecta la Ollama. Te rog asigură-te că Ollama rulează (ollama serve).", + "ollama_loading": "Ollama încarcă modelul în memorie. Modelele mari pot dura 30–120 de secunde. Te rog așteaptă și încearcă din nou.", + "unknown": "Conexiunea a eșuat" + }, + "guidance": { + "commonSetupsTitle": "Configurări frecvente de furnizori", + "commonSetupsHint": "Revizuiește sau aplică o configurare recomandată", + "apply": "Aplică", + "detectedBadge": "Detectat", + "preferProviderTab": "S-a detectat {{service}}. Acest serviciu este de obicei mai ușor de configurat din fila dedicată {{provider}}.", + "protocolMismatch": "S-a detectat {{service}}. Protocol recomandat: {{recommendedProtocol}}.", + "protocolLooksGood": "S-a detectat {{service}}. Protocolul tău curent corespunde deja configurării recomandate {{recommendedProtocol}}.", + "baseUrlHint": "S-a detectat {{service}}. Configurare {{recommendedProtocol}} recomandată: {{baseUrl}}. Model exemplu: {{model}}.", + "genericBaseUrlHint": "Acesta pare a fi un endpoint personalizat compatibil cu {{recommendedProtocol}}. Format de Base URL recomandat: {{baseUrl}}. Model exemplu: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Serviciu", + "protocol": "Protocol", + "baseUrl": "Base URL", + "model": "Model exemplu", + "notes": "Note", + "action": "Acțiune" + }, + "errorHints": { + "emptyProbeGeneric": "Endpoint-ul a returnat un răspuns de probă gol. De obicei aceasta înseamnă că protocolul sau modelul selectat este incompatibil cu serviciul.", + "emptyProbeDetected": "{{service}} a returnat un răspuns de probă gol. Încearcă configurarea {{recommendedProtocol}} recomandată și verifică ID-ul modelului pentru acel endpoint.", + "emptyProbePreferProvider": "{{service}} a returnat un răspuns de probă gol. Încearcă fila dedicată {{provider}} în loc să-l configurezi ca endpoint personalizat generic.", + "probeMismatchGeneric": "Endpoint-ul a răspuns, dar nu în formatul așteptat de această probă. De obicei aceasta indică o nepotrivire de protocol sau de compatibilitate a modelului.", + "probeMismatchDetected": "{{service}} a răspuns cu un format de probă neașteptat. Încearcă configurarea {{recommendedProtocol}} recomandată și verifică ID-ul modelului pentru acel endpoint." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Preferă fila dedicată de furnizor OpenRouter, cu excepția cazului în care depanezi un releu personalizat." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Folosește modul compatibil cu OpenAI și copiază ID-ul exact al modelului din documentația DeepSeek." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Folosește endpoint-ul de coding cu modul compatibil cu Anthropic. Verifică ID-ul exact al modelului de coding din documentația Moonshot." + }, + "glm": { + "name": "GLM / BigModel (rută Anthropic)", + "note": "Folosește ruta compatibilă cu Anthropic când calea endpoint-ului include /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Preferă fila dedicată de furnizor Ollama pentru descoperirea și reîmprospătarea modelelor locale." + }, + "gemini": { + "name": "Endpoint personalizat Gemini", + "note": "Folosește modul compatibil cu Gemini și ID-ul exact al modelului expus de endpoint." + }, + "minimax": { + "name": "MiniMax", + "note": "Folosește modul compatibil cu OpenAI, cu excepția cazului în care gateway-ul tău MiniMax documentează un alt protocol." + }, + "genericOpenAI": { + "name": "Generic compatibil cu OpenAI", + "note": "Folosește acest mod pentru relee, gateway-uri sau servere de inferență personalizate care imită API-ul OpenAI." + } + } + }, + "newSet": "Set nou", + "createSetTitle": "Creează set de configurare", + "saveAsTitle": "Salvează ca set de configurare", + "createSetNamePlaceholder": "Introdu numele setului de configurare", + "renameSetTitle": "Redenumește setul de configurare", + "unsavedBeforeActionPrompt": "Setul de configurare curent are modificări nesalvate. Alege o acțiune înainte de \"{{action}}\".", + "newSetDefaultName": "Set de configurare nou", + "copyNameSuffix": "Copie", + "currentSetLabel": "Set curent: ", + "unsavedBadge": "Nesalvat", + "saveAndContinue": "Salvează și continuă", + "discardAndContinue": "Renunță și continuă", + "currentSetName": "Nume set", + "renameInlineHint": "Editează direct. Apasă Enter sau dă click în afară pentru a salva automat", + "switchSetLabel": "Comută la alt set", + "switchSetPlaceholder": "Selectează un set la care să comuți", + "noOtherSetHint": "Niciun alt set disponibil", + "configSetMissing": "Setul de configurare nu a fost găsit", + "configSetCloneSourceMissing": "Nu s-a putut găsi un set de configurare de clonat", + "configSetSystemDeleteForbidden": "Setul de configurare implicit nu poate fi șters", + "configSetKeepOne": "Păstrează cel puțin un set de configurare", + "diagnostic": { + "runDiagnostics": "Diagnostichează conexiunea", + "runQuickDiagnostics": "Diagnostic rapid", + "runDeepDiagnostics": "Verificare profundă de inferență", + "running": "Se diagnostichează...", + "step": { + "dns": "Rezolvare DNS", + "tcp": "Conexiune TCP", + "tls": "Negociere TLS", + "auth": "Autentificare API", + "model": "Verificare model" + }, + "status": { + "pending": "În așteptare", + "running": "Se verifică...", + "ok": "OK", + "fail": "Eșuat", + "skip": "Omis" + }, + "overallSuccess": "Toate verificările au trecut ({{ms}}ms)", + "overallFail": "Diagnosticul a eșuat la {{step}}", + "advisory": { + "not_deep_verified": "Endpoint-ul este accesibil și modelul selectat este listat, dar nu s-a efectuat încă nicio inferență live.", + "model_loading": "Endpoint-ul este accesibil, dar modelul s-ar putea să se încarce încă în memorie." + }, + "latency": "{{ms}}ms", + "fix": { + "dns_resolve_failed": "Nu se poate rezolva numele de gazdă {{host}}. Te rog verifică dacă URL-ul este corect.", + "tcp_connect_failed": "Nu se poate conecta la {{host}}. Te rog verifică-ți rețeaua sau setările firewall-ului.", + "tls_handshake_failed": "Negocierea TLS a eșuat. Aceasta poate fi cauzată de o problemă de certificat sau de interferența unui proxy.", + "missing_api_key": "Cheia API lipsește sau este invalidă. Te rog verifică-ți cheia.", + "auth_invalid_key": "Cheia API este invalidă sau expirată. Te rog verifică dacă cheia este corectă.", + "auth_endpoint_not_found": "Endpoint-ul API nu a fost găsit. Te rog verifică dacă Base URL este corect.", + "auth_request_failed": "Cererea de autentificare a eșuat. Te rog verifică-ți configurația.", + "model_network_error": "Nu s-a putut ajunge la modelul {{model}}. Verifică-ți rețeaua, VPN-ul sau setările de proxy.", + "model_rate_limited": "Modelul {{model}} are momentan limită de rată sau cotă epuizată. Te rog încearcă mai târziu.", + "model_request_failed": "Cererea către modelul {{model}} a eșuat de partea furnizorului. Te rog încearcă mai târziu.", + "model_unavailable": "Modelul {{model}} nu este disponibil. Te rog verifică numele modelului.", + "ollama_no_models_loaded": "Endpoint-ul este accesibil, dar nu a returnat niciun model. Descarcă mai întâi un model în Ollama.", + "ollama_model_not_listed": "Modelul {{model}} nu se află în lista de modele a endpoint-ului. Alege un model detectat sau comută la introducerea manuală.", + "ollama_model_loading": "Modelul {{model}} s-ar putea să se încarce încă. Încearcă verificarea profundă din nou în câteva momente.", + "model_cold_start": "Modelul s-ar putea să se încarce încă în memoria GPU/CPU. Modelele mari (7B+) pot dura 30–120 de secunde la prima utilizare. Încearcă din nou în scurt timp." + } + } + }, + "window": { + "minimize": "Minimizează", + "maximize": "Maximizează", + "restore": "Restaurează", + "close": "Închide" + }, + "sandbox": { + "title": "Mediu Sandbox", + "wslDesc": "Rulează comenzi în mediul WSL2 Linux pentru izolare și securitate mai bune pe Windows.", + "limaDesc": "Rulează comenzi în VM-ul Lima pentru izolare și securitate mai bune pe macOS.", + "nativeDesc": "Comenzile rulează direct pe sistemul tău (mod nativ Linux).", + "enableSandbox": "Activează modul Sandbox", + "comingSoon": "În curând — în dezvoltare", + "readyStatus": "Sandbox gata și în execuție", + "notReadyStatus": "Sandbox activat, dar nu complet configurat", + "disabledStatus": "Sandbox dezactivat - comenzile rulează direct pe sistem", + "enabledWillSetup": "Sandbox activat. Se configurează mediul...", + "disabled": "Mod Sandbox dezactivat", + "failedToLoad": "Încărcarea stării sandbox-ului a eșuat", + "failedToSave": "Salvarea setărilor sandbox-ului a eșuat", + "statusRefreshed": "Stare reîmprospătată", + "checkFailed": "Verificarea stării sandbox-ului a eșuat", + "environmentStatus": "Starea mediului", + "checkStatus": "Verifică starea", + "platform": "Platformă", + "mode": "Mod", + "status": "Stare", + "native": "Nativ", + "wslAvailable": "WSL2 disponibil", + "limaAvailable": "Lima disponibil", + "vmCreated": "Instanță VM creată", + "vmRunning": "VM în execuție", + "wslNotInstalled": "WSL2 nu este instalat", + "wslInstallHint": "Instalează WSL2 pentru o izolare mai bună. Rulează această comandă în PowerShell ca Administrator:", + "limaNotInstalled": "Lima nu este instalat", + "limaInstallHint": "Instalează Lima pentru o izolare mai bună. Rulează această comandă în Terminal:", + "linuxNative": "Linux rulează comenzile nativ fără sandboxing suplimentar.", + "nodeInstalled": "Node.js instalat cu succes", + "nodeInstallFailed": "Instalarea Node.js a eșuat", + "pythonInstalled": "Python instalat cu succes", + "pythonInstallFailed": "Instalarea Python a eșuat", + "start": "Pornește", + "stop": "Oprește", + "limaStarted": "VM-ul Lima a pornit", + "limaStartFailed": "Pornirea VM-ului Lima a eșuat", + "limaStopped": "VM-ul Lima s-a oprit", + "limaStopFailed": "Oprirea VM-ului Lima a eșuat", + "settingUp": "Se configurează...", + "retrySetup": "Reîncearcă configurarea", + "setupComplete": "Configurare sandbox completă", + "setupFailed": "Configurarea sandbox-ului a eșuat", + "helpText1": "Sandbox-ul oferă un mediu izolat pentru rularea în siguranță a comenzilor.", + "helpText2": "WSL2 (Windows) sau VM-ul Lima (macOS) este necesar pentru suport complet de sandbox.", + "setupTitle": "Se configurează Sandbox", + "setupSubtitle": "Prima rulare necesită configurarea unui mediu de execuție securizat.", + "progressLabel": "Progres", + "continuingNative": "Se continuă cu modul de execuție nativ.", + "retryLima": "Încearcă să repornești Lima", + "retryingLima": "Se repornește Lima...", + "continueNative": "Continuă cu modul nativ", + "configuredSuccess": "Sandbox configurat. Codul poate fi acum executat în siguranță.", + "nativeFallbackSuccess": "Se folosește mediul nativ al sistemului pentru execuția comenzilor.", + "footerWsl": "Sandbox WSL2", + "footerLima": "Sandbox Lima", + "footerNative": "Mod nativ", + "configuring": "Se configurează...", + "syncFiles_one": "{{count}} fișier", + "syncFiles_other": "{{count}} fișiere", + "syncExplanation": "Se sincronizează fișierele proiectului către sandbox-ul izolat pentru execuția securizată a codului.", + "syncFirst": "Prima sincronizare este mai lentă,", + "syncFollowup": "sincronizările incrementale vor fi mai rapide.", + "checkingWsl": "Se verifică mediul WSL2...", + "checkingLima": "Se verifică mediul Lima...", + "creatingLima": "Se creează VM-ul Lima...", + "startingLima": "Se pornește VM-ul Lima...", + "installingNode": "Se instalează Node.js...", + "installingPython": "Se instalează Python...", + "installingPip": "Se instalează pip...", + "installingDeps": "Se instalează dependențele abilităților...", + "setupFailedMessage": "Configurarea sandbox-ului a eșuat", + "sandboxDisabledMessage": "Sandbox dezactivat", + "nativeModeMessage": "Se folosește modul de execuție nativ", + "wslNotDetectedMessage": "WSL2 nu a fost detectat, se folosește modul nativ", + "limaNotDetectedMessage": "Lima nu a fost detectat, se folosește modul nativ", + "nodeInstallFailedMessage": "Instalarea Node.js a eșuat", + "wslReadyMessage": "Sandbox WSL2 gata", + "limaReadyMessage": "Sandbox Lima gata", + "limaCreateFailedMessage": "Crearea VM-ului Lima a eșuat", + "limaStartFailedMessage": "Pornirea VM-ului Lima a eșuat", + "setupDetailSandboxDisabled": "Se folosește modul de execuție nativ (sandbox dezactivat în setări)", + "setupDetailLinuxNative": "Linux rulează comenzile direct", + "setupDetailInstallWsl": "Instalează WSL2 pentru o izolare sandbox mai bună", + "setupDetailInstallNodeWsl": "Te rog instalează Node.js manual în WSL", + "setupDetailInstallNodeWslRuntime": "Se instalează runtime-ul Node.js în {{distro}}", + "setupDetailInstallPythonWslRuntime": "Se instalează runtime-ul Python în {{distro}}", + "setupDetailInstallPipWslRuntime": "Se instalează managerul de pachete Python în {{distro}}", + "setupDetailInstallDeps": "Se instalează markitdown, pypdf, pdfplumber pentru abilitățile PDF/PPTX", + "setupDetailInstallLima": "Instalează Lima pentru o izolare sandbox mai bună (brew install lima)", + "setupDetailCreateLima": "Prima rulare necesită descărcarea imaginii și poate dura câteva minute", + "setupDetailStartLima": "Pornirea VM-ului poate dura câteva minute", + "setupDetailInstallNodeLima": "Se instalează runtime-ul Node.js în VM-ul Lima", + "setupDetailInstallPythonLima": "Se instalează runtime-ul Python în VM-ul Lima", + "syncingFilesMessage": "Se sincronizează fișierele către sandbox...", + "syncingSkillsMessage": "Se configurează abilitățile...", + "syncReadyMessage": "Sandbox gata", + "syncFailedMessage": "Sincronizarea sandbox-ului a eșuat", + "syncDetailWsl": "Se copiază fișierele proiectului în mediul WSL izolat", + "syncDetailLima": "Se copiază fișierele proiectului în mediul Lima izolat", + "syncDetailSkills": "Se copiază abilitățile încorporate în sandbox", + "syncDetailFallback": "Se revine la modul de acces direct (mai puțin sigur)", + "syncDetailCompleted": "S-au sincronizat {{count}} fișiere" + }, + "mcp": { + "noConnectors": "Niciun conector configurat", + "addConnector": "Adaugă un conector pentru a activa instrumentele MCP", + "toolsAvailable": "{{count}} instrument disponibil", + "toolsAvailable_plural": "{{count}} instrumente disponibile", + "connected": "Conectat", + "notConnected": "Neconectat", + "connecting": "Se conectează...", + "failed": "Conexiunea a eșuat", + "chromeHint": "O nouă fereastră de depanare Chrome se va deschide automat dacă portul este indisponibil", + "quickAddPresets": "Presetări de adăugare rapidă", + "show": "Arată", + "hide": "Ascunde", + "addCustomConnector": "Adaugă conector personalizat", + "configure": "Configurează", + "added": "Adăugat", + "requiresToken": "Necesită token", + "editConnector": "Editează conectorul", + "addConnectorTitle": "Adaugă conector personalizat", + "name": "Nume", + "namePlaceholder": "Chrome MCP Server", + "type": "Tip", + "typeStdioLocal": "STDIO (Local)", + "typeSseRemote": "SSE (Remote)", + "typeStreamableHttp": "HTTP (Streamable)", + "command": "Comandă", + "commandPlaceholder": "npx", + "arguments": "Argumente", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Argumente separate prin spațiu", + "url": "URL", + "enableConnector": "Activează acest conector", + "presetAlreadyConfigured": "Conectorul \"{{name}}\" este deja configurat", + "envValuePlaceholder": "Introdu valoarea", + "removeVar": "Elimină", + "loadServersFailed": "Încărcarea conectorilor a eșuat", + "saveServerFailed": "Salvarea conectorului a eșuat", + "deleteServerFailed": "Ștergerea conectorului a eșuat", + "deleteConnectorConfirm": "Ștergi acest conector?", + "commandRequired": "Comanda este obligatorie", + "urlRequired": "URL-ul este obligatoriu", + "toolCount": "{{count}} instrumente", + "callCount": "{{count}} apeluri" + }, + "credentials": { + "envVars": "Variabile de mediu", + "enterEnvVar": "Introdu numele variabilei de mediu (de ex. NOTION_TOKEN):", + "usedForTokens": "Folosit pentru token-uri și secrete (de ex. NOTION_TOKEN)", + "noEnvVars": "Nicio variabilă de mediu configurată" + }, + "skills": { + "storagePathHint": "Alege unde se află abilitățile personalizate și cum le reîmprospătează aplicația.", + "builtinSkillsDesc": "Abilitățile încorporate vin cu aplicația și pot fi comutate la nevoie.", + "pluginsTitle": "Pluginuri și importuri", + "pluginsDesc": "Răsfoiește pluginurile din marketplace sau importă abilități personalizate dintr-un folder local.", + "title": "📦 Abilități", + "description": "Abilitățile extind capacitățile lui Claude cu cunoștințe și instrumente specializate.", + "builtinSkills": "Abilități încorporate", + "customSkills": "Abilități personalizate", + "noCustomSkills": "Nicio abilitate personalizată instalată", + "installSkillsDesc": "Instalează abilități pentru a extinde capacitățile lui Claude", + "browsePlugins": "Răsfoiește pluginuri", + "pluginListTitle": "Răsfoiește Claude Plugin Marketplace", + "pluginSkillCount": "Abilități instalabile: {{count}}", + "pluginComponents": "Componente: abilități {{skills}} · comenzi {{commands}} · agenți {{agents}} · hook-uri {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Detaliile componentelor vor fi disponibile după instalare.", + "pluginInstall": "Instalează", + "pluginInstalled": "Instalat", + "pluginInstallSuccess": "Pluginul \"{{name}}\" a fost instalat cu succes", + "pluginInstallFailed": "Instalarea pluginului a eșuat", + "pluginNoSkills": "Acest plugin nu are abilități instalabile în V1", + "pluginNoComponents": "Acest plugin nu are componente încărcabile", + "pluginManage": "Gestionează", + "pluginEnable": "Activează", + "pluginDisable": "Dezactivează", + "pluginUninstall": "Dezinstalezi pluginul \"{{name}}\"?", + "pluginManageUninstall": "Dezinstalează", + "pluginUninstalled": "Pluginul \"{{name}}\" a fost dezinstalat", + "pluginComponentHooksDisabledByDefault": "Acest plugin include hook-uri. Hook-urile sunt dezactivate implicit și pot fi activate în setările de gestionare după instalare.", + "pluginComponentMcpDisabledByDefault": "Acest plugin include MCP. MCP este dezactivat implicit și poate fi activat în setările de gestionare după instalare.", + "pluginAppliedInRuntime": "Setările pluginului sunt aplicate momentan în timpul execuției", + "pluginDisabled": "Pluginul este momentan dezactivat", + "noPluginsFound": "Niciun plugin disponibil", + "storagePathTitle": "Directorul de stocare al abilităților", + "storagePathUnavailable": "Calea de stocare indisponibilă", + "selectStoragePath": "Selectează directorul", + "openStoragePath": "Deschide directorul", + "refreshSkills": "Reîmprospătează abilitățile", + "storagePathUpdated": "Stocare actualizată. {{migrated}} abilități migrate, {{skipped}} omise", + "storagePathUpdateFailed": "Actualizarea căii de stocare a abilităților a eșuat", + "storagePathOpenFailed": "Deschiderea căii de stocare a abilităților a eșuat", + "storagePathFallback": "S-a revenit la directorul implicit de abilități. Te rog verifică calea configurată.", + "storageWatcherError": "Eroare a supraveghetorului directorului de abilități: {{message}} (revenire la polling activată).", + "installSkillFromFolder": "Instalează abilitate din folder", + "deleteSkill": "Ștergi abilitatea \"{{name}}\"?", + "failedToLoad": "Încărcarea abilităților a eșuat", + "failedToInstall": "Instalarea abilității a eșuat", + "failedToDelete": "Ștergerea abilității a eșuat", + "failedToToggle": "Comutarea abilității a eșuat" + }, + "logs": { + "actionsTitle": "Acțiuni jurnal", + "title": "Jurnalele aplicației", + "description": "Vizualizează și exportă pachete de diagnostic pentru depanare. Jurnalele se rotesc automat după 10MB, iar exporturile includ și rezumate recente de sesiuni și erori.", + "inventoryDescription": "Inventarul curent al jurnalelor și amprenta de stocare.", + "recentDescription": "Jurnale recente ale aplicației disponibile pentru inspecție. Poți exporta un pachet de diagnostic chiar dacă nu există încă niciun fișier de jurnal.", + "directoryDescription": "Locația curentă pe disc pentru jurnalele aplicației.", + "actionsDescription": "Exportă un pachet de diagnostic, arată directorul de jurnale sau șterge fișierele de jurnal.", + "enableDevLogs": "Activează jurnalele pentru dezvoltatori", + "enableDevLogsDesc": "Înregistrează jurnale detaliate pentru depanare. Dezactivează pentru a reduce utilizarea discului.", + "devLogsEnabled": "Jurnale pentru dezvoltatori activate", + "devLogsDisabled": "Jurnale pentru dezvoltatori dezactivate", + "toggleFailed": "Comutarea jurnalelor pentru dezvoltatori a eșuat", + "logFiles": "Fișiere de jurnal", + "totalSize": "Dimensiune totală", + "noLogFiles": "Niciun fișier de jurnal găsit", + "logsDirectory": "Directorul jurnalelor:", + "exportZip": "Exportă diagnosticul", + "openFolder": "Deschide folderul", + "clearAll": "Șterge tot", + "clearConfirm": "Ești sigur că vrei să ștergi toate fișierele de jurnal? Această acțiune nu poate fi anulată.", + "exportSuccess": "Diagnosticul a fost exportat cu succes în {{path}}", + "clearSuccess": "S-au șters {{count}} fișier(e) de jurnal", + "exportFailed": "Exportul jurnalelor a eșuat", + "clearFailed": "Ștergerea jurnalelor a eșuat", + "helpText1": "Pachetul de diagnostic exportat include jurnalele aplicației, o captură de execuție anonimizată și rezumate de sesiuni/erori doar cu metadate, fără corpul mesajelor în mod implicit.", + "helpText2": "Partajarea acelui pachet ne permite de obicei să restrângem problemele mult mai rapid, fie că provin din interfață, din execuția instrumentelor sau din mediul local." + }, + "sidebar": { + "recents": "Recente", + "expandToView": "Extinde pentru a vedea sarcinile", + "noTasks": "Nicio sarcină încă", + "noTasksHint": "Începe un chat nou pentru a construi, cerceta sau edita fișiere.", + "search": "Caută conversații...", + "deleteAll": "Șterge toate conversațiile", + "localTasks": "Aceste sarcini rulează local și nu sunt sincronizate între dispozitive.", + "apiConfigured": "API configurat", + "apiNotConfigured": "API neconfigurat", + "user": "Utilizator", + "newTask": "Chat nou", + "newTaskHint": "Începe o conversație nouă", + "today": "Astăzi", + "yesterday": "Ieri", + "previousWeek": "Ultimele 7 zile", + "older": "Mai vechi", + "settings": "Setări", + "themeToggle": "Comută tema", + "manage": "Gestionează", + "selectAll": "Selectează tot", + "deselectAll": "Deselectează tot", + "nSelected": "{{count}} selectate", + "batchDeleteConfirm": "Ștergi {{count}} conversații? Această acțiune nu poate fi anulată.", + "cancel": "Anulează", + "confirmDelete": "Șterge" + }, + "chat": { + "sendMessage": "Trimite mesajul", + "stop": "Oprește", + "processing": "Se procesează...", + "typeMessage": "Scrie un mesaj...", + "loadingConversation": "Se încarcă conversația...", + "startConversation": "Începe conversația", + "startFailed": "Pornirea sesiunii a eșuat. Te rog încearcă din nou.", + "disclaimer": "Open Cowork este bazat pe AI și poate face greșeli. Te rog verifică din nou răspunsurile.", + "noModel": "Niciun model", + "connectorCount_one": "{{count}} conector", + "connectorCount_other": "{{count}} conectori" + }, + "context": { + "progress": "Progres", + "artifacts": "Artefacte", + "context": "Context", + "workingDirectory": "Director de lucru", + "toolsUsed": "Instrumente folosite", + "mcpConnectors": "Conectori MCP", + "copied": "Copiat!", + "noToolsUsedYet": "Niciun instrument folosit încă", + "toolsUsedLabel": "Instrumente folosite:", + "noFolderSelected": "Niciun folder selectat", + "expandPanel": "Extinde panoul", + "collapsePanel": "Restrânge panoul", + "queuedMessages": "Mesaje în coadă: {{count}}", + "stepsWillShow": "Pașii se vor afișa pe măsură ce sarcina se desfășoară.", + "noArtifactsYet": "Niciun artefact încă", + "revealFailed": "Nu se poate localiza fișierul. Te rog verifică dacă calea există.", + "fileCreated": "Fișier creat", + "callNumber": "Apel #{{number}}", + "input": "Intrare:", + "output": "Ieșire:", + "tokenUsage": "Utilizare token-uri", + "inputTokens": "Intrare", + "outputTokens": "Ieșire", + "totalTokens": "Total", + "changeDir": "Schimbă directorul", + "changeDirFailed": "Schimbarea directorului a eșuat", + "copyPath": "Copiază calea", + "openInFileManager": "Deschide în managerul de fișiere", + "contextUsage": "Utilizare context", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Cerere", + "queued": "În coadă", + "cancelled": "Anulat", + "emptyMessage": "Mesaj gol", + "emptyText": "(text gol)", + "copyMessage": "Copiază mesajul", + "revealInFolder": "Arată în folder", + "pastedContentAlt": "Conținut lipit", + "taskProgress": "Progresul sarcinii", + "noQuestions": "Nicio întrebare", + "question": "Întrebare", + "thinking": "Se gândește", + "executionTime": "Timp de execuție: {{time}}" + }, + "schedule": { + "createTitle": "Creează programare", + "editTitle": "Editează programarea", + "autoTitleLabel": "Titlu automat (folosit pentru identificarea sesiunilor)", + "autoTitleChangedHint": "Promptul s-a schimbat. Titlul va fi regenerat după salvare.", + "autoTitleUnchangedHint": "Dacă promptul rămâne la fel, titlul existent va fi păstrat.", + "autoTitleEditingChanged": "După salvare, titlul va fi regenerat din prompt cu prefixul [Scheduled Task].", + "autoTitleEditingUnchanged": "După salvare, titlul va fi generat cu prefixul [Scheduled Task].", + "autoTitleCreating": "După salvare, titlul va fi generat cu prefixul [Scheduled Task] și un rezumat de model.", + "promptPlaceholder": "Prompt de rulat automat la ora programată", + "cwdPlaceholder": "Director de lucru (implicit, spațiul de lucru curent)", + "executionTime": "Timing de rulare", + "executionTimeHint": "Programările noi preferă timing-ul cu mai multe sloturi; regulile cu interval vechi pot fi încă editate.", + "enabled": "Activată", + "mode": "Mod de rulare", + "weekday": "Zile ale săptămânii", + "weekdayPlaceholder": "Selectează zilele săptămânii", + "times": "Sloturi orare", + "timePlaceholder": "Selectează orele", + "legacyIntervalNotice": "Această sarcină provine dintr-o regulă veche cu interval fix și va păstra acel mod la salvare.", + "onceTimeLabel": "Alege ora de execuție unică", + "legacyStartTimeLabel": "Alege ora de pornire pentru regula veche cu interval", + "dailyHint": "Rulează automat la aceste ore în fiecare zi.", + "weeklyHint": "Rulează automat în zilele săptămânii și sloturile orare selectate.", + "saveChanges": "Salvează modificările", + "createTask": "Creează sarcina", + "cancelEdit": "Anulează editarea", + "listHint": "Dezactivarea blochează doar rulările automate viitoare. Sesiunile deja pornite trebuie oprite manual din lista de sesiuni.", + "empty": "Nicio programare încă", + "loadFailed": "Încărcarea programărilor a eșuat", + "promptRequired": "Introdu promptul de rulat", + "dailyTimesRequired": "Selectează cel puțin un slot orar zilnic", + "weeklyTimesRequired": "Selectează cel puțin un slot orar săptămânal", + "weekdayRequired": "Selectează cel puțin o zi a săptămânii", + "invalidTime": "Introdu o oră de execuție validă", + "nextRunCalculationFailed": "Regula curentă nu poate calcula următoarea oră de rulare", + "futureTimeRequired": "Ora de execuție trebuie să fie ulterioară momentului actual. Folosește Rulează acum dacă vrei să o declanșezi imediat.", + "taskMissing": "Sarcina nu mai există sau a fost ștearsă", + "updated": "Programare actualizată", + "created": "Programare creată", + "saveFailed": "Salvarea programării a eșuat", + "toggleFailed": "Comutarea stării programării a eșuat", + "runNowSuccess": "S-a declanșat o rulare imediată", + "runNowFailed": "Rularea imediată a eșuat", + "noSessionToStop": "Această sarcină nu are nicio sesiune de execuție de oprit", + "sessionNotRunning": "Această sarcină nu are momentan o sesiune în execuție", + "stopSent": "Comanda de oprire a fost trimisă", + "stopFailed": "Oprirea execuției a eșuat", + "deleteConfirm": "Ștergi programarea \"{{title}}\"?", + "deleted": "Programare ștearsă", + "deleteFailed": "Ștergerea programării a eșuat", + "statusRunning": "În execuție", + "statusFinished": "Finalizată", + "statusUnknown": "Necunoscută", + "statusNone": "Niciuna", + "taskEnabled": "Activată", + "taskDisabled": "Dezactivată", + "nextRun": "Următoarea rulare: {{value}}", + "nextRunNone": "Următoarea rulare: Niciuna", + "strategy": "Regulă de programare: {{value}}", + "lastRun": "Ultima rulare: {{value}}", + "lastRunNever": "Ultima rulare: Încă nerulată", + "recentSession": "Ultima sesiune: {{value}}", + "sessionStatus": "Starea sesiunii: {{value}}", + "cwd": "Director: {{value}}", + "lastError": "Ultima eroare: {{value}}", + "disable": "Dezactivează", + "enable": "Activează", + "runNow": "Rulează acum", + "stopExecution": "Oprește rularea", + "edit": "Editează", + "delete": "Șterge", + "stopRunTitleActive": "Oprește ultima sesiune de execuție pentru această sarcină", + "stopRunTitleIdle": "Această sarcină nu are momentan o sesiune în execuție", + "repeatEveryMinute_one": "La fiecare {{count}} minut", + "repeatEveryMinute_other": "La fiecare {{count}} minute", + "repeatEveryHour_one": "La fiecare {{count}} oră", + "repeatEveryHour_other": "La fiecare {{count}} ore", + "repeatEveryDay_one": "La fiecare {{count}} zi", + "repeatEveryDay_other": "La fiecare {{count}} zile", + "ruleDaily": "În fiecare zi la {{times}}", + "ruleWeekly": "În fiecare săptămână în {{weekdays}} la {{times}}", + "ruleOnce": "O singură dată", + "previewNextRun": "Următoarea rulare așteptată: {{value}}", + "previewSelectValidTime": "Alege o oră de execuție validă", + "previewSelectAtLeastOne": "Alege cel puțin un slot orar valid", + "previewAutoFind": "Sistemul va alege automat următoarea oră de rulare: {{value}}", + "weekdayMonday": "Lun", + "weekdayTuesday": "Mar", + "weekdayWednesday": "Mie", + "weekdayThursday": "Joi", + "weekdayFriday": "Vin", + "weekdaySaturday": "Sâm", + "weekdaySunday": "Dum", + "modeOnce": "O singură dată", + "modeDaily": "Zilnic", + "modeWeekly": "Săptămânal", + "repeatUnitMinute": "Minut", + "repeatUnitHour": "Oră", + "repeatUnitDay": "Zi", + "unknownWeekday": "Necunoscut", + "pickerEditTimes": "Editează sloturile orare", + "pickerAnyHHmm": "Poți introduce orice valoare `HH:mm`", + "pickerSelectedCount_one": "{{count}} selectat", + "pickerSelectedCount_other": "{{count}} selectate", + "pickerAdd": "Adaugă", + "pickerSelectedTimes": "Ore selectate", + "pickerNone": "Niciun slot orar selectat încă", + "pickerSuggestions": "Sugestii" + }, + "remote": { + "title": "Control la distanță", + "statusRunning": "În execuție. Disponibil prin Feishu.", + "statusStopped": "Oprit", + "startService": "Pornește serviciul", + "stopService": "Oprește serviciul", + "activeSessions": "Sesiuni active", + "authorizedUsers": "Utilizatori autorizați", + "pendingApprovals": "Aprobări în așteptare", + "pairingRequests": "Cereri de asociere în așteptarea aprobării", + "unknownUser": "Utilizator necunoscut", + "pairingCode": "Cod de asociere", + "approve": "Aprobă", + "stepFeishu": "Configurare Feishu", + "stepConnection": "Conexiune", + "stepAdvanced": "Avansat", + "feishuTitle": "Configurare bot Feishu", + "feishuDesc": "Creează o aplicație în Feishu Open Platform, apoi completează acreditările aici.", + "dmPolicy": "Politică de autorizare a mesajelor directe", + "policyPairing": "Verificare prin asociere", + "policyPairingDesc": "Utilizatorii trebuie să introducă un cod de asociere.", + "policyAllowlist": "Listă de permisiuni", + "policyAllowlistDesc": "Sunt permiși doar anumiți utilizatori.", + "policyOpen": "Acces deschis", + "policyOpenDesc": "Oricine poate folosi botul.", + "openFeishu": "Deschide Feishu Open Platform", + "slackTitle": "Configurare bot Slack", + "slackDesc": "Creează o aplicație Slack, instaleaz-o în spațiul tău de lucru, apoi completează acreditările aici.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (pentru Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Conectează-te către exterior la Slack. Nu este necesar un IP public.", + "openSlack": "Deschide Slack API", + "connectionTitle": "Mod de conexiune", + "connectionDesc": "Alege cum comunică serverele Feishu cu computerul tău.", + "longConnection": "Mod de conexiune lungă", + "recommended": "Recomandat", + "longConnectionDesc": "Aplicația se conectează către exterior la serverele Feishu. Nu este necesar un IP public sau ngrok.", + "noPublicInternet": "Nicio expunere la internetul public", + "outOfBox": "Funcționează din start", + "stableReliable": "Stabil și fiabil", + "webhookMode": "Mod webhook", + "webhookDesc": "Feishu împinge mesajele către serverul tău. Este necesară o adresă accesibilă public.", + "localWebhookUrl": "URL webhook local", + "useBuiltInNgrok": "Folosește ngrok încorporat", + "ngrokHelpPrefix": "Obține unul gratuit de la", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunel conectat", + "longConnectionHint": "În Feishu Open Platform, mergi la Events & Callbacks > Event Configuration și comută modul de abonare la conexiune lungă.", + "advancedTitle": "Setări avansate", + "advancedDesc": "Personalizează comportamentul controlului la distanță.", + "defaultWorkingDirectory": "Director de lucru implicit", + "defaultWorkingDirectoryPlaceholder": "De exemplu: C:\\Users\\numele-tau\\Projects", + "defaultWorkingDirectoryHint": "Acesta este directorul implicit pentru comenzile AI. Îl poți suprascrie și într-un mesaj cu `[cwd:path]`.", + "gatewayPort": "Port de serviciu", + "autoApproveSafeTools": "Aprobă automat instrumentele sigure", + "autoApproveSafeToolsDesc": "Permite automat instrumente sigure precum citirile de fișiere și operațiunile de browser.", + "saveConfig": "Salvează configurația", + "authorizedUsersTitle": "Utilizatori autorizați ({{count}})", + "revokeAccess": "Revocă accesul", + "quickStart": "Pornire rapidă", + "quickStartStep1": "Creează o aplicație în Feishu Open Platform și adaugă capabilitatea de Bot.", + "quickStartStep2": "Copiază App ID și App Secret în câmpurile de mai sus.", + "quickStartStep3": "Activează aceste permisiuni în setările de permisiuni:", + "quickStartStep4": "În Event Configuration din Feishu, alege modul de evenimente cu conexiune lungă.", + "quickStartStep5Prefix": "Abonează-te la evenimentul", + "quickStartStep5Suffix": ".", + "quickStartStep6": "Publică aplicația, apoi dă click pe Pornește serviciul.", + "started": "Control la distanță pornit", + "stopped": "Control la distanță oprit", + "actionFailed": "Operațiunea a eșuat", + "configSaved": "Configurație salvată", + "saveFailed": "Salvarea configurației a eșuat", + "pairingApproved": "Asociere aprobată", + "approveFailed": "Aprobarea asocierii a eșuat", + "reject": "Respinge", + "pairingRejected": "Asociere respinsă", + "rejectFailed": "Respingerea asocierii a eșuat", + "pairingGuideTitle": "Ghid de asociere", + "pairingGuideStep1": "Deschide Feishu și găsește botul", + "pairingGuideStep2": "Trimite orice mesaj pentru a iniția asocierea", + "pairingGuideStep3": "Aprobă cererea de asociere de mai jos", + "pairingGuideStep4": "Gata — utilizatorul poate acum conversa cu botul", + "waitingForPairing": "Se așteaptă ca utilizatorii să inițieze asocierea...", + "expiresIn": "Expiră în {{time}}", + "userRemoved": "Utilizator eliminat", + "revokeFailed": "Eliminarea utilizatorului a eșuat", + "copied": "Copiat" + }, + "time": { + "now": "acum" + }, + "permission": { + "permissionRequired": "Permisiune necesară", + "tool": "Instrument:", + "input": "Intrare:", + "warning": "Această acțiune poate modifica sistemul tău. Revizuiește cu atenție.", + "deny": "Refuză", + "allow": "Permite", + "alwaysAllow": "Permite întotdeauna acest instrument", + "useTool": "Folosește instrumentul {{toolName}}", + "toolDescriptions": { + "write": "Scrie în fișiere de pe sistemul tău", + "edit": "Editează fișiere existente de pe sistemul tău", + "bash": "Execută comenzi shell", + "webFetch": "Preia date de pe web", + "webSearch": "Caută pe web", + "read_file": "Citește fișiere în spațiul de lucru", + "write_file": "Scrie fișiere în spațiul de lucru", + "edit_file": "Editează fișiere în spațiul de lucru", + "list_directory": "Listează conținutul directorului în spațiul de lucru", + "execute_command": "Execută comenzi shell în spațiul de lucru", + "glob": "Caută fișiere după model", + "grep": "Caută în conținutul fișierelor" + } + }, + "sudo": { + "title": "Permisiune de administrator necesară", + "description": "Următoarea comandă necesită privilegii de administrator:", + "passwordLabel": "Parolă", + "passwordPlaceholder": "Introdu parola", + "cancel": "Anulează", + "execute": "Execută", + "warning": "Parola ta va fi folosită doar pentru această comandă și nu va fi stocată." + }, + "errorBoundary": { + "title": "Ceva nu a mers bine", + "description": "A apărut o eroare neașteptată în aplicație. Poți încerca să te recuperezi apăsând butonul de mai jos.", + "details": "Detalii despre eroare", + "retry": "Încearcă din nou" + } +} diff --git a/src/renderer/i18n/locales/sv.json b/src/renderer/i18n/locales/sv.json new file mode 100644 index 00000000..cf1ae43e --- /dev/null +++ b/src/renderer/i18n/locales/sv.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Spara", + "cancel": "Avbryt", + "delete": "Ta bort", + "edit": "Redigera", + "add": "Lägg till", + "close": "Stäng", + "loading": "Laddar...", + "error": "Fel", + "success": "Klart", + "saving": "Sparar...", + "saved": "Sparades!", + "sure": "Är du säker?", + "yes": "Ja", + "no": "Nej", + "enable": "Aktivera", + "disable": "Inaktivera", + "install": "Installera", + "optional": "valfritt", + "appLogoAlt": "Open Cowork-logotyp", + "pastedImageAlt": "Inklistrad {{index}}" + }, + "welcome": { + "title": "Hur kan jag hjälpa dig idag?", + "placeholder": "Beskriv vad du vill göra...", + "createFile": "Skapa en fil", + "crunchData": "Bearbeta data", + "organizeFiles": "Organisera filer", + "checkEmails": "Kolla e-post", + "searchPapers": "Sök och sammanfatta artiklar", + "summarizePapersToNotion": "Sammanfatta artiklar till Notion", + "selectWorkingFolder": "Välj arbetsmapp (obligatoriskt)", + "selectWorkingFolderFailed": "Det gick inte att välja arbetsmapp", + "attachFiles": "Bifoga filer", + "letsGo": "Kör igång", + "starting": "Startar...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Open Cowork-logotyp", + "pastedImageAlt": "Inklistrad {{index}}", + "quickPromptCreate": "Skapa en ny fil åt mig", + "quickPromptCrunch": "Hjälp mig att analysera och bearbeta data", + "quickPromptOrganize": "Hjälp mig att organisera mina filer och mappar", + "quickPromptEmail": "Hjälp mig att använda Chrome för att sammanfatta de nya e-postmeddelandena från de senaste tre dagarna i min Gmail och NetEase Mail. Observera att de sparade kontona redan innehåller hela e-postsuffixet. Om e-postsuffixet alltså redan är förifyllt på webbsidan eller i en skärmbild ska du inte ange det igen, för att undvika inloggningsfel. Kontrollera också först om motsvarande kontouppgifter är sparade. Om användarnamnet eller lösenordet för en viss e-posttjänst inte är sparat kan du hoppa över det e-postkontot.", + "quickPromptPapers": "Hjälp mig att använda Chrome för att söka efter och sammanfatta artiklar relaterade till [Agent] inom två dagar.\nKällwebbplatser:\n1. HuggingFace Daily Papers. Inkludera röstinformationen och en kort sammanfattning. Observera att den kanske inte inkluderar artiklar under helgen, så du kan behöva kontrollera artiklarna från tidigare dagar. Se dock till att det totalt blir två dagar.", + "quickPromptNotion": "Hjälp mig att efterforska tre representativa översiktsartiklar relaterade till agenter och lägg till dem under en Notion-sida med titeln \"Agent Survey\". För varje artikel ska du inkludera titel, författare, publiceringsforum/år och en kort sammanfattning av de viktigaste bidragen.", + "apiNotConfigured": "API:et är inte konfigurerat ännu. Gå till Inställningar för att konfigurera din API-leverantör och nyckel.", + "goToSettings": "Gå till Inställningar" + }, + "settings": { + "title": "Inställningar", + "apiSettings": "API-inställningar", + "apiSettingsDesc": "Konfigurera API-leverantör och nyckel", + "sandbox": "Sandlåda", + "sandboxDesc": "Isolerad körningsmiljö", + "connectors": "MCP-anslutningar", + "connectorsDesc": "Webbläsar- och verktygsintegrationer", + "skills": "Färdigheter", + "skillsDesc": "Hantera anpassade färdigheter", + "memory": "Minne", + "memoryDesc": "Hantera långtidsminne och arbetsyteerfarenhet", + "schedule": "Scheman", + "scheduleDesc": "Alarmliknande promptautomatisering", + "remote": "Fjärrstyrning", + "remoteDesc": "Använd Open Cowork från Feishu och andra kanaler", + "logs": "Loggar", + "logsDesc": "Visa och exportera programloggar", + "panelDesc": "Konfigurera din arbetsyta, dina verktyg och ditt kontobeteende.", + "general": "Allmänt", + "generalDesc": "Utseende, språk och inställningar" + }, + "general": { + "appearance": "Utseende", + "theme": "Tema", + "themeLight": "Ljust", + "themeDark": "Mörkt", + "themeSystem": "System", + "language": "Språk" + }, + "memory": { + "title": "Minne", + "description": "Det globala kärnminnet lagrar stabila inställningar, medan arbetsyteerfarenhetsminnet lagrar projektspecifik kunskap över flera turer.", + "enabled": "Aktiverat", + "disabled": "Inaktiverat", + "toggleHint": "Om du stänger av detta stoppas framtida inläsning och automatisk återkallning, men befintliga poster behålls.", + "enableAction": "Aktivera minne", + "disableAction": "Inaktivera minne", + "enabledStatus": "Minnet är aktiverat", + "disabledStatus": "Minnet är inaktiverat", + "coreCount": "Kärnposter", + "sessionCount": "Sessionssammanfattningar", + "chunkCount": "Erfarenhetssegment", + "workspaceCount": "Arbetsytor", + "latestIngestion": "Senaste inläsning", + "noIngestionYet": "Ingen inläsning registrerad ännu", + "health": "Hälsa", + "healthy": "Frisk, utan några nyligen inträffade fel", + "failedSessions": "{{count}} session(er) misslyckades med sin senaste inläsning", + "searchTitle": "Sök och granska", + "searchDescription": "Sök i minnet efter aktuell arbetsyta eller globalt, och granska sedan sammanfattningar och råa utdrag.", + "searchPlaceholder": "Sök inställningar, tidigare implementeringar, beslut...", + "searchAction": "Sök", + "scopeWorkspace": "Aktuell arbetsyta", + "scopeAll": "Allt minne", + "scopeGlobal": "Endast kärnminne", + "currentWorkspace": "Aktuell arbetsyta", + "groupCore": "Kärnminne", + "groupSessions": "Sessionssammanfattningar", + "groupChunks": "Segmentträffar", + "detailTitle": "Detalj", + "noSelection": "Välj ett resultat för att granska hela sammanfattningen och källutdraget.", + "noResults": "Inga resultat", + "maintenanceTitle": "Underhåll", + "maintenanceDescription": "Bygg om erfarenhetsminnet för den aktuella arbetsytan eller rensa sparade data.", + "rebuildWorkspace": "Bygg om aktuell arbetsyta", + "clearWorkspace": "Rensa aktuell arbetsyta", + "clearCore": "Rensa kärnminne", + "rebuildConfirm": "Bygga om erfarenhetsminnet för den aktuella arbetsytan? Detta skannar om historiska sessioner i den arbetsytan.", + "clearWorkspaceConfirm": "Rensa erfarenhetsminnet för den aktuella arbetsytan? Detta kan inte ångras.", + "clearCoreConfirm": "Rensa allt globalt kärnminne? Detta kan inte ångras.", + "rebuildSuccess": "Arbetsyteminnet ombyggt", + "clearWorkspaceSuccess": "Arbetsyteminnet rensat", + "clearCoreSuccess": "Kärnminnet rensat", + "runtimeTitle": "Körningskonfiguration", + "runtimeDescription": "Som standard ärver detta den för närvarande aktiva API-konfigurationen. Här finjusterar du främst navigeringsdjup, embedding och katalogen på disk.", + "runtimeSaved": "Körningskonfigurationen för minnet sparad", + "saveRuntime": "Spara körningskonfiguration", + "storageRoot": "Lagringsrot", + "noWorkspace": "Ingen arbetsyta ännu", + "maxNavSteps": "Navigeringssteg", + "ingestionConcurrency": "Ombyggnadssamtidighet", + "useEmbedding": "Aktivera embedding-hämtning", + "evalEnabled": "Aktivera utvärdering med riktig modell", + "evalArtifactsRoot": "Katalog för utvärderingsartefakter", + "evalMaxRounds": "Utvärderingsrundor", + "promptIterationRounds": "Promptiterationsrundor", + "llmConfig": "Minnes-LLM", + "embeddingConfig": "Embedding", + "inheritActive": "Ärv aktivt API", + "modelOverride": "Modellöverstyrning", + "baseUrlOverride": "Överstyrning av Base URL", + "apiKeyOverride": "Överstyrning av API-nyckel", + "allSources": "Alla källor", + "groupRawSessions": "Råa sessioner", + "sourceFile": "Källfil", + "inspectSession": "Granska sessionsminne", + "inspectSessionHint": "Välj en session eller ett segment från resultaten ovan för att granska det.", + "revealInFinder": "Visa i Finder", + "rebuildAll": "Bygg om allt minne", + "rebuildAllConfirm": "Detta rensar och bygger om allt minne. Fortsätta?", + "rebuildAllSuccess": "Byggde om allt minne: {{sessionCount}} session(er), {{workspaceCount}} källarbetsyta/-or", + "filesTitle": "Granskare för råfiler", + "filesDescription": "Visa artefakterna för core / unified experience / session_state / eval exakt som de skrivs till disk.", + "fileList": "Fillista", + "refreshFiles": "Uppdatera", + "noFiles": "Inga minnesfiler ännu", + "fileContent": "Filinnehåll", + "emptyFile": "Filen är tom", + "selectFileHint": "Välj en fil till vänster för att visa dess råa JSON." + }, + "language": { + "english": "Engelska", + "chinese": "Kinesiska", + "selectLanguage": "Välj språk", + "currentLanguage": "Aktuellt språk" + }, + "api": { + "firstRunTitle": "Konfigurera API", + "firstRunSubtitle": "Konfigurera en leverantör för att börja använda Open Cowork", + "settingsTitle": "API-inställningar", + "settingsSubtitle": "Hantera inställningar för leverantör, nyckel och modell", + "configSet": "Konfigurationsuppsättning", + "defaultSetTag": "Standard", + "saveAs": "Spara som", + "renameSet": "Byt namn", + "deleteSet": "Ta bort uppsättning", + "saveAndSwitch": "Spara och byt", + "discardAndSwitch": "Förkasta och byt", + "currentSetSavingHint": "\"Spara inställningar\" uppdaterar endast den för närvarande valda konfigurationsuppsättningen.", + "unsavedCurrentSetHint": "Den aktuella konfigurationsuppsättningen har osparade ändringar.", + "unsavedSwitchPrompt": "Den aktuella konfigurationsuppsättningen har osparade ändringar. Välj en åtgärd innan du byter till \"{{name}}\".", + "configSetSaveAsPrompt": "Ange ett namn för den nya konfigurationsuppsättningen", + "configSetRenamePrompt": "Ange ett nytt namn för denna konfigurationsuppsättning", + "configSetDeleteConfirm": "Ta bort konfigurationsuppsättningen \"{{name}}\"?", + "configSetNameRequired": "Konfigurationsuppsättningens namn krävs", + "configSetLimitReached": "Du kan spara upp till {{count}} konfigurationsuppsättningar", + "configSetCreated": "Konfigurationsuppsättning skapad", + "configSetRenamed": "Konfigurationsuppsättningen har bytt namn", + "configSetDeleted": "Konfigurationsuppsättning borttagen", + "configSetSwitched": "Konfigurationsuppsättning bytt", + "defaultConfigSetName": "Standard", + "configSetFallbackName": "Konfigurationsuppsättning {{index}}", + "provider": "API-leverantör", + "providerDescription": "Välj leverantörsfamiljen och den övergripande protokollstilen för denna arbetsyta.", + "apiKey": "API-nyckel", + "enterApiKey": "Ange din API-nyckel", + "apiKeyDescription": "Sparas lokalt och är begränsad till den aktiva konfigurationsuppsättningen.", + "protocol": "Protokoll", + "baseUrl": "Base URL", + "model": "Modell", + "usePreset": "Använd förinställning", + "custom": "Anpassad", + "moreModels": "Fler modeller", + "noModelsAvailable": "Inga modeller tillgängliga", + "selectProtocol": "Välj det kompatibla protokollet för tjänsten", + "enterOllamaUrl": "Ange URL till den OpenAI-kompatibla Ollama-tjänsten", + "enterOpenAIUrl": "Ange URL till OpenAI-kompatibel tjänst", + "enterAnthropicUrl": "Ange URL till Anthropic-kompatibel tjänst", + "enterGeminiUrl": "Ange en Gemini-kompatibel Base URL", + "enterModelId": "Ange modell-ID, t.ex. deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Välj en modell", + "contextWindow": "Kontextfönster", + "contextWindowPlaceholder": "Identifiera automatiskt", + "maxOutputTokens": "Max antal utdata-token", + "maxOutputTokensPlaceholder": "Identifiera automatiskt", + "contextWindowHint": "Lämna tomt för automatisk identifiering. Överstyr endast om modellen rapporterar felaktiga gränser.", + "saveFailed": "Det gick inte att spara inställningarna. Försök igen.", + "getStarted": "Kom igång", + "saveSettings": "Spara inställningar", + "openSettingsAction": "Öppna API-inställningar", + "configRequiredActiveSet": "Den aktuella konfigurationsuppsättningen har inga användbara autentiseringsuppgifter. Slutför konfigurationen i API-inställningar först.", + "testConnection": "Testa anslutning", + "testingConnection": "Testar...", + "refreshModels": "Uppdatera modeller", + "refreshingModels": "Uppdaterar...", + "refreshModelsFailed": "Det gick inte att uppdatera modellerna. Kontrollera URL:en eller tjänstens status.", + "manualModel": "Manuell modell", + "useDetectedModels": "Använd identifierade modeller", + "discoverLocalOllama": "Hitta lokal Ollama", + "discoveringLocalOllama": "Söker...", + "discoverLocalOllamaHint": "Ange din Ollama-slutpunkt först. Modeller hämtas automatiskt, och manuell inmatning behövs bara om identifieringen misslyckas.", + "localOllamaDiscovered": "Hittade lokal Ollama med {{count}} tillgänglig(a) modell(er).", + "localOllamaNotFound": "Ingen lokal Ollama-tjänst hittades. Starta den med `ollama serve` och försök igen.", + "localOllamaNoModels": "Hittade en lokal Ollama-tjänst, men den exponerar för närvarande inga modeller.", + "localOllamaModelUnavailable": "Hittade lokal Ollama, men modellen {{model}} kunde inte slutföra en minimal inferensförfrågan.", + "localOllamaModelLoading": "Hittade lokal Ollama, men modellen läses fortfarande in i minnet. Stora modeller kan ta upp till en minut.", + "enableThinking": "Aktivera tänkarläge", + "enableThinkingHint": "Visa Claudes tankeprocess steg för steg. Detta ger mer transparens men kan öka tokenanvändningen.", + "enableThinkingOllamaHint": "De flesta Ollama-modeller stöder inte tänkarläge. Aktivera endast om din modell uttryckligen stöder det.", + "testSuccess": "Anslutningen lyckades ({{ms}} ms)", + "testSuccessNeedSave": "Anslutningstestet godkändes. Spara inställningarna innan du startar en session.", + "testError": { + "missing_key": "API-nyckel krävs", + "missing_base_url": "Base URL krävs för denna leverantör", + "unauthorized": "Ogiltig API-nyckel eller obehörig", + "not_found": "Slutpunkten hittades inte. Kontrollera Base URL", + "rate_limited": "Hastighetsbegränsad eller kvot överskriden", + "server_error": "Tjänstefel. Försök igen senare", + "network_error": "Nätverksfel. Kontrollera din anslutning", + "ollama_not_running": "Det går inte att ansluta till Ollama. Se till att Ollama körs (ollama serve).", + "ollama_loading": "Ollama läser in modellen i minnet. Stora modeller kan ta 30–120 sekunder. Vänta och försök igen.", + "unknown": "Anslutningen misslyckades" + }, + "guidance": { + "commonSetupsTitle": "Vanliga leverantörskonfigurationer", + "commonSetupsHint": "Granska eller tillämpa en rekommenderad konfiguration", + "apply": "Tillämpa", + "detectedBadge": "Identifierad", + "preferProviderTab": "Identifierade {{service}}. Den här tjänsten är vanligtvis enklare att konfigurera från den dedikerade {{provider}}-fliken.", + "protocolMismatch": "Identifierade {{service}}. Rekommenderat protokoll: {{recommendedProtocol}}.", + "protocolLooksGood": "Identifierade {{service}}. Ditt aktuella protokoll matchar redan den rekommenderade {{recommendedProtocol}}-konfigurationen.", + "baseUrlHint": "Identifierade {{service}}. Rekommenderad {{recommendedProtocol}}-konfiguration: {{baseUrl}}. Exempelmodell: {{model}}.", + "genericBaseUrlHint": "Detta ser ut som en anpassad {{recommendedProtocol}}-kompatibel slutpunkt. Rekommenderat Base URL-format: {{baseUrl}}. Exempelmodell: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Tjänst", + "protocol": "Protokoll", + "baseUrl": "Base URL", + "model": "Exempelmodell", + "notes": "Anteckningar", + "action": "Åtgärd" + }, + "errorHints": { + "emptyProbeGeneric": "Slutpunkten returnerade ett tomt probningssvar. Detta betyder vanligtvis att det valda protokollet eller modellen är inkompatibel med tjänsten.", + "emptyProbeDetected": "{{service}} returnerade ett tomt probningssvar. Prova den rekommenderade {{recommendedProtocol}}-konfigurationen och verifiera modell-ID:t för den slutpunkten.", + "emptyProbePreferProvider": "{{service}} returnerade ett tomt probningssvar. Prova den dedikerade {{provider}}-fliken i stället för att konfigurera den som en allmän anpassad slutpunkt.", + "probeMismatchGeneric": "Slutpunkten svarade, men inte i det format som denna probning förväntade sig. Detta pekar vanligtvis på en inkompatibilitet i protokoll eller modell.", + "probeMismatchDetected": "{{service}} svarade med ett oväntat probningsformat. Prova den rekommenderade {{recommendedProtocol}}-konfigurationen och verifiera modell-ID:t för den slutpunkten." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Föredra den dedikerade OpenRouter-leverantörsfliken om du inte felsöker ett anpassat relä." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Använd OpenAI-kompatibelt läge och kopiera det exakta modell-ID:t från DeepSeek-dokumentationen." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Använd kodningsslutpunkten med Anthropic-kompatibelt läge. Dubbelkolla det exakta kodningsmodell-ID:t från Moonshot-dokumentationen." + }, + "glm": { + "name": "GLM / BigModel (Anthropic-rutt)", + "note": "Använd den Anthropic-kompatibla rutten när slutpunktssökvägen innehåller /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Föredra den dedikerade Ollama-leverantörsfliken för identifiering och uppdatering av lokala modeller." + }, + "gemini": { + "name": "Gemini anpassad slutpunkt", + "note": "Använd Gemini-kompatibelt läge och det exakta modell-ID som slutpunkten exponerar." + }, + "minimax": { + "name": "MiniMax", + "note": "Använd OpenAI-kompatibelt läge om inte din MiniMax-gateway dokumenterar ett annat protokoll." + }, + "genericOpenAI": { + "name": "Allmän OpenAI-kompatibel", + "note": "Använd detta för anpassade reläer, gateways eller inferensservrar som efterliknar OpenAI-API:et." + } + } + }, + "newSet": "Ny uppsättning", + "createSetTitle": "Skapa konfigurationsuppsättning", + "saveAsTitle": "Spara som konfigurationsuppsättning", + "createSetNamePlaceholder": "Ange namn på konfigurationsuppsättning", + "renameSetTitle": "Byt namn på konfigurationsuppsättning", + "unsavedBeforeActionPrompt": "Den aktuella konfigurationsuppsättningen har osparade ändringar. Välj en åtgärd innan \"{{action}}\".", + "newSetDefaultName": "Ny konfigurationsuppsättning", + "copyNameSuffix": "Kopia", + "currentSetLabel": "Aktuell uppsättning: ", + "unsavedBadge": "Osparat", + "saveAndContinue": "Spara och fortsätt", + "discardAndContinue": "Förkasta och fortsätt", + "currentSetName": "Uppsättningsnamn", + "renameInlineHint": "Redigera direkt. Tryck på Retur eller klicka utanför för att spara automatiskt", + "switchSetLabel": "Byt till en annan uppsättning", + "switchSetPlaceholder": "Välj en uppsättning att byta till", + "noOtherSetHint": "Ingen annan uppsättning tillgänglig", + "configSetMissing": "Konfigurationsuppsättningen hittades inte", + "configSetCloneSourceMissing": "Det gick inte att hitta en konfigurationsuppsättning att klona", + "configSetSystemDeleteForbidden": "Standardkonfigurationsuppsättningen kan inte tas bort", + "configSetKeepOne": "Behåll minst en konfigurationsuppsättning", + "diagnostic": { + "runDiagnostics": "Diagnostisera anslutning", + "runQuickDiagnostics": "Snabbdiagnostik", + "runDeepDiagnostics": "Djup inferenskontroll", + "running": "Diagnostiserar...", + "step": { + "dns": "DNS-uppslagning", + "tcp": "TCP-anslutning", + "tls": "TLS-handskakning", + "auth": "API-autentisering", + "model": "Modellverifiering" + }, + "status": { + "pending": "Väntar", + "running": "Kontrollerar...", + "ok": "OK", + "fail": "Misslyckades", + "skip": "Hoppades över" + }, + "overallSuccess": "Alla kontroller godkändes ({{ms}} ms)", + "overallFail": "Diagnostiken misslyckades vid {{step}}", + "advisory": { + "not_deep_verified": "Slutpunkten är nåbar och den valda modellen finns i listan, men ingen live-inferens har utförts ännu.", + "model_loading": "Slutpunkten är nåbar, men modellen läses kanske fortfarande in i minnet." + }, + "latency": "{{ms}} ms", + "fix": { + "dns_resolve_failed": "Det går inte att slå upp värdnamnet {{host}}. Kontrollera om URL:en är korrekt.", + "tcp_connect_failed": "Det går inte att ansluta till {{host}}. Kontrollera ditt nätverk eller dina brandväggsinställningar.", + "tls_handshake_failed": "TLS-handskakningen misslyckades. Detta kan bero på ett certifikatproblem eller proxystörning.", + "missing_api_key": "API-nyckeln saknas eller är ogiltig. Kontrollera din nyckel.", + "auth_invalid_key": "API-nyckeln är ogiltig eller har upphört att gälla. Kontrollera om nyckeln är korrekt.", + "auth_endpoint_not_found": "API-slutpunkten hittades inte. Kontrollera om Base URL är korrekt.", + "auth_request_failed": "Autentiseringsförfrågan misslyckades. Kontrollera din konfiguration.", + "model_network_error": "Det gick inte att nå modellen {{model}}. Kontrollera ditt nätverk samt VPN- eller proxyinställningar.", + "model_rate_limited": "Modellen {{model}} är för närvarande hastighetsbegränsad eller har slut på kvot. Försök igen senare.", + "model_request_failed": "Förfrågan till modellen {{model}} misslyckades på leverantörens sida. Försök igen senare.", + "model_unavailable": "Modellen {{model}} är inte tillgänglig. Verifiera modellnamnet.", + "ollama_no_models_loaded": "Slutpunkten är nåbar, men den returnerade inga modeller. Hämta en modell i Ollama först.", + "ollama_model_not_listed": "Modellen {{model}} finns inte i slutpunktens modellista. Välj en identifierad modell eller byt till manuell inmatning.", + "ollama_model_loading": "Modellen {{model}} läses kanske fortfarande in. Prova den djupa kontrollen igen om en stund.", + "model_cold_start": "Modellen läses kanske fortfarande in i GPU-/CPU-minnet. Stora modeller (7B+) kan ta 30–120 sekunder vid första användningen. Försök igen om en stund." + } + } + }, + "window": { + "minimize": "Minimera", + "maximize": "Maximera", + "restore": "Återställ", + "close": "Stäng" + }, + "sandbox": { + "title": "Sandlådemiljö", + "wslDesc": "Kör kommandon i WSL2 Linux-miljö för bättre isolering och säkerhet på Windows.", + "limaDesc": "Kör kommandon i Lima VM för bättre isolering och säkerhet på macOS.", + "nativeDesc": "Kommandon körs direkt på ditt system (Linux ursprungligt läge).", + "enableSandbox": "Aktivera sandlådeläge", + "comingSoon": "Kommer snart — under utveckling", + "readyStatus": "Sandlådan är klar och körs", + "notReadyStatus": "Sandlådan är aktiverad men inte helt konfigurerad", + "disabledStatus": "Sandlådan är inaktiverad – kommandon körs direkt på systemet", + "enabledWillSetup": "Sandlådan är aktiverad. Konfigurerar miljö...", + "disabled": "Sandlådeläget är inaktiverat", + "failedToLoad": "Det gick inte att läsa in sandlådestatus", + "failedToSave": "Det gick inte att spara sandlådeinställningar", + "statusRefreshed": "Status uppdaterad", + "checkFailed": "Det gick inte att kontrollera sandlådestatus", + "environmentStatus": "Miljöstatus", + "checkStatus": "Kontrollera status", + "platform": "Plattform", + "mode": "Läge", + "status": "Status", + "native": "Ursprunglig", + "wslAvailable": "WSL2 tillgängligt", + "limaAvailable": "Lima tillgängligt", + "vmCreated": "VM-instans skapad", + "vmRunning": "VM körs", + "wslNotInstalled": "WSL2 är inte installerat", + "wslInstallHint": "Installera WSL2 för bättre isolering. Kör det här kommandot i PowerShell som administratör:", + "limaNotInstalled": "Lima är inte installerat", + "limaInstallHint": "Installera Lima för bättre isolering. Kör det här kommandot i Terminal:", + "linuxNative": "Linux kör kommandon ursprungligt utan ytterligare sandlådehantering.", + "nodeInstalled": "Node.js installerades", + "nodeInstallFailed": "Det gick inte att installera Node.js", + "pythonInstalled": "Python installerades", + "pythonInstallFailed": "Det gick inte att installera Python", + "start": "Starta", + "stop": "Stoppa", + "limaStarted": "Lima VM startad", + "limaStartFailed": "Det gick inte att starta Lima VM", + "limaStopped": "Lima VM stoppad", + "limaStopFailed": "Det gick inte att stoppa Lima VM", + "settingUp": "Konfigurerar...", + "retrySetup": "Försök konfigurera igen", + "setupComplete": "Sandlådekonfigurationen klar", + "setupFailed": "Sandlådekonfigurationen misslyckades", + "helpText1": "Sandlådan tillhandahåller en isolerad miljö för att köra kommandon säkert.", + "helpText2": "WSL2 (Windows) eller Lima VM (macOS) krävs för fullständigt sandlådestöd.", + "setupTitle": "Konfigurerar sandlåda", + "setupSubtitle": "Vid första körningen krävs konfiguration av en säker körningsmiljö.", + "progressLabel": "Förlopp", + "continuingNative": "Fortsätter med ursprungligt körningsläge.", + "retryLima": "Försök starta om Lima", + "retryingLima": "Startar om Lima...", + "continueNative": "Fortsätt med ursprungligt läge", + "configuredSuccess": "Sandlådan konfigurerad. Kod kan nu köras säkert.", + "nativeFallbackSuccess": "Använder den ursprungliga systemmiljön för kommandokörning.", + "footerWsl": "WSL2-sandlåda", + "footerLima": "Lima-sandlåda", + "footerNative": "Ursprungligt läge", + "configuring": "Konfigurerar...", + "syncFiles_one": "{{count}} fil", + "syncFiles_other": "{{count}} filer", + "syncExplanation": "Synkroniserar projektfiler till den isolerade sandlådan för säker kodkörning.", + "syncFirst": "Första synkroniseringen är långsammare,", + "syncFollowup": "inkrementella synkroniseringar blir snabbare.", + "checkingWsl": "Kontrollerar WSL2-miljö...", + "checkingLima": "Kontrollerar Lima-miljö...", + "creatingLima": "Skapar Lima VM...", + "startingLima": "Startar Lima VM...", + "installingNode": "Installerar Node.js...", + "installingPython": "Installerar Python...", + "installingPip": "Installerar pip...", + "installingDeps": "Installerar färdighetsberoenden...", + "setupFailedMessage": "Sandlådekonfigurationen misslyckades", + "sandboxDisabledMessage": "Sandlådan inaktiverad", + "nativeModeMessage": "Använder ursprungligt körningsläge", + "wslNotDetectedMessage": "WSL2 upptäcktes inte, använder ursprungligt läge", + "limaNotDetectedMessage": "Lima upptäcktes inte, använder ursprungligt läge", + "nodeInstallFailedMessage": "Installationen av Node.js misslyckades", + "wslReadyMessage": "WSL2-sandlådan klar", + "limaReadyMessage": "Lima-sandlådan klar", + "limaCreateFailedMessage": "Skapandet av Lima VM misslyckades", + "limaStartFailedMessage": "Starten av Lima VM misslyckades", + "setupDetailSandboxDisabled": "Använder ursprungligt körningsläge (sandlådan inaktiverad i inställningarna)", + "setupDetailLinuxNative": "Linux kör kommandon direkt", + "setupDetailInstallWsl": "Installera WSL2 för bättre sandlådeisolering", + "setupDetailInstallNodeWsl": "Installera Node.js manuellt i WSL", + "setupDetailInstallNodeWslRuntime": "Installerar Node.js-körtid i {{distro}}", + "setupDetailInstallPythonWslRuntime": "Installerar Python-körtid i {{distro}}", + "setupDetailInstallPipWslRuntime": "Installerar Python-pakethanterare i {{distro}}", + "setupDetailInstallDeps": "Installerar markitdown, pypdf, pdfplumber för PDF/PPTX-färdigheter", + "setupDetailInstallLima": "Installera Lima för bättre sandlådeisolering (brew install lima)", + "setupDetailCreateLima": "Vid första körningen krävs nedladdning av avbildning och det kan ta några minuter", + "setupDetailStartLima": "VM-starten kan ta några minuter", + "setupDetailInstallNodeLima": "Installerar Node.js-körtid i Lima VM", + "setupDetailInstallPythonLima": "Installerar Python-körtid i Lima VM", + "syncingFilesMessage": "Synkroniserar filer till sandlådan...", + "syncingSkillsMessage": "Konfigurerar färdigheter...", + "syncReadyMessage": "Sandlådan klar", + "syncFailedMessage": "Sandlådesynkroniseringen misslyckades", + "syncDetailWsl": "Kopierar projektfiler till den isolerade WSL-miljön", + "syncDetailLima": "Kopierar projektfiler till den isolerade Lima-miljön", + "syncDetailSkills": "Kopierar inbyggda färdigheter till sandlådan", + "syncDetailFallback": "Återgår till läget för direktåtkomst (mindre säkert)", + "syncDetailCompleted": "Synkroniserade {{count}} filer" + }, + "mcp": { + "noConnectors": "Inga anslutningar konfigurerade", + "addConnector": "Lägg till en anslutning för att aktivera MCP-verktyg", + "toolsAvailable": "{{count}} verktyg tillgängligt", + "toolsAvailable_plural": "{{count}} verktyg tillgängliga", + "connected": "Ansluten", + "notConnected": "Inte ansluten", + "connecting": "Ansluter...", + "failed": "Anslutningen misslyckades", + "chromeHint": "Ett nytt Chrome-felsökningsfönster öppnas automatiskt om porten inte är tillgänglig", + "quickAddPresets": "Snabbtilläggsförinställningar", + "show": "Visa", + "hide": "Dölj", + "addCustomConnector": "Lägg till anpassad anslutning", + "configure": "Konfigurera", + "added": "Tillagd", + "requiresToken": "Kräver token", + "editConnector": "Redigera anslutning", + "addConnectorTitle": "Lägg till anpassad anslutning", + "name": "Namn", + "namePlaceholder": "Chrome MCP Server", + "type": "Typ", + "typeStdioLocal": "STDIO (lokal)", + "typeSseRemote": "SSE (fjärr)", + "typeStreamableHttp": "HTTP (strömningsbar)", + "command": "Kommando", + "commandPlaceholder": "npx", + "arguments": "Argument", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Mellanslagsseparerade argument", + "url": "URL", + "enableConnector": "Aktivera denna anslutning", + "presetAlreadyConfigured": "Anslutningen \"{{name}}\" är redan konfigurerad", + "envValuePlaceholder": "Ange värde", + "removeVar": "Ta bort", + "loadServersFailed": "Det gick inte att läsa in anslutningar", + "saveServerFailed": "Det gick inte att spara anslutningen", + "deleteServerFailed": "Det gick inte att ta bort anslutningen", + "deleteConnectorConfirm": "Ta bort denna anslutning?", + "commandRequired": "Kommando krävs", + "urlRequired": "URL krävs", + "toolCount": "{{count}} verktyg", + "callCount": "{{count}} anrop" + }, + "credentials": { + "envVars": "Miljövariabler", + "enterEnvVar": "Ange namn på miljövariabel (t.ex. NOTION_TOKEN):", + "usedForTokens": "Används för token och hemligheter (t.ex. NOTION_TOKEN)", + "noEnvVars": "Inga miljövariabler konfigurerade" + }, + "skills": { + "storagePathHint": "Välj var anpassade färdigheter ska lagras och hur appen uppdaterar dem.", + "builtinSkillsDesc": "Inbyggda färdigheter levereras med appen och kan slås på och av vid behov.", + "pluginsTitle": "Plugin-program och import", + "pluginsDesc": "Bläddra bland plugin-program på marknadsplatsen eller importera anpassade färdigheter från en lokal mapp.", + "title": "📦 Färdigheter", + "description": "Färdigheter utökar Claudes förmågor med specialiserad kunskap och specialiserade verktyg.", + "builtinSkills": "Inbyggda färdigheter", + "customSkills": "Anpassade färdigheter", + "noCustomSkills": "Inga anpassade färdigheter installerade", + "installSkillsDesc": "Installera färdigheter för att utöka Claudes förmågor", + "browsePlugins": "Bläddra bland plugin-program", + "pluginListTitle": "Bläddra på Claudes plugin-marknadsplats", + "pluginSkillCount": "Installerbara färdigheter: {{count}}", + "pluginComponents": "Komponenter: färdigheter {{skills}} · kommandon {{commands}} · agenter {{agents}} · hooks {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Komponentinformation blir tillgänglig efter installationen.", + "pluginInstall": "Installera", + "pluginInstalled": "Installerad", + "pluginInstallSuccess": "Plugin-programmet \"{{name}}\" installerades", + "pluginInstallFailed": "Det gick inte att installera plugin-programmet", + "pluginNoSkills": "Det här plugin-programmet har inga installerbara färdigheter i V1", + "pluginNoComponents": "Det här plugin-programmet har inga laddningsbara komponenter", + "pluginManage": "Hantera", + "pluginEnable": "Aktivera", + "pluginDisable": "Inaktivera", + "pluginUninstall": "Avinstallera plugin-programmet \"{{name}}\"?", + "pluginManageUninstall": "Avinstallera", + "pluginUninstalled": "Plugin-programmet \"{{name}}\" avinstallerades", + "pluginComponentHooksDisabledByDefault": "Det här plugin-programmet innehåller hooks. Hooks är inaktiverade som standard och kan aktiveras i hanteringsinställningarna efter installationen.", + "pluginComponentMcpDisabledByDefault": "Det här plugin-programmet innehåller MCP. MCP är inaktiverat som standard och kan aktiveras i hanteringsinställningarna efter installationen.", + "pluginAppliedInRuntime": "Plugin-inställningarna tillämpas för närvarande vid körning", + "pluginDisabled": "Plugin-programmet är för närvarande inaktiverat", + "noPluginsFound": "Inga plugin-program tillgängliga", + "storagePathTitle": "Lagringskatalog för färdigheter", + "storagePathUnavailable": "Lagringssökväg ej tillgänglig", + "selectStoragePath": "Välj katalog", + "openStoragePath": "Öppna katalog", + "refreshSkills": "Uppdatera färdigheter", + "storagePathUpdated": "Lagringen uppdaterad. Migrerade {{migrated}} färdigheter, hoppade över {{skipped}}", + "storagePathUpdateFailed": "Det gick inte att uppdatera lagringssökvägen för färdigheter", + "storagePathOpenFailed": "Det gick inte att öppna lagringssökvägen för färdigheter", + "storagePathFallback": "Återgick till standardkatalogen för färdigheter. Verifiera din konfigurerade sökväg.", + "storageWatcherError": "Fel i katalogbevakaren för färdigheter: {{message}} (avsökningsåtergång aktiverad).", + "installSkillFromFolder": "Installera färdighet från mapp", + "deleteSkill": "Ta bort färdigheten \"{{name}}\"?", + "failedToLoad": "Det gick inte att läsa in färdigheter", + "failedToInstall": "Det gick inte att installera färdigheten", + "failedToDelete": "Det gick inte att ta bort färdigheten", + "failedToToggle": "Det gick inte att växla färdigheten" + }, + "logs": { + "actionsTitle": "Loggåtgärder", + "title": "Programloggar", + "description": "Visa och exportera diagnostikpaket för felsökning. Loggar roteras automatiskt efter 10 MB, och exporter inkluderar även nyligen genererade session- och felsammanfattningar.", + "inventoryDescription": "Aktuellt logginventarium och lagringsfotavtryck.", + "recentDescription": "Nyligen genererade programloggar tillgängliga för granskning. Du kan fortfarande exportera ett diagnostikpaket även när det inte finns någon loggfil ännu.", + "directoryDescription": "Aktuell plats på disk för programloggar.", + "actionsDescription": "Exportera ett diagnostikpaket, visa loggkatalogen eller rensa loggfiler.", + "enableDevLogs": "Aktivera utvecklarloggar", + "enableDevLogsDesc": "Registrera detaljerade loggar för felsökning. Inaktivera för att minska diskanvändningen.", + "devLogsEnabled": "Utvecklarloggar aktiverade", + "devLogsDisabled": "Utvecklarloggar inaktiverade", + "toggleFailed": "Det gick inte att växla utvecklarloggar", + "logFiles": "Loggfiler", + "totalSize": "Total storlek", + "noLogFiles": "Inga loggfiler hittades", + "logsDirectory": "Loggkatalog:", + "exportZip": "Exportera diagnostik", + "openFolder": "Öppna mapp", + "clearAll": "Rensa allt", + "clearConfirm": "Är du säker på att du vill rensa alla loggfiler? Den här åtgärden kan inte ångras.", + "exportSuccess": "Diagnostiken exporterades till {{path}}", + "clearSuccess": "Rensade {{count}} loggfil(er)", + "exportFailed": "Det gick inte att exportera loggar", + "clearFailed": "Det gick inte att rensa loggar", + "helpText1": "Det exporterade diagnostikpaketet innehåller apploggar, en redigerad körningsögonblicksbild och session-/felsammanfattningar med endast metadata, utan meddelandetexter som standard.", + "helpText2": "Att dela det paketet hjälper oss vanligtvis att avgränsa problem mycket snabbare, oavsett om de kommer från användargränssnittet, verktygskörning eller den lokala miljön." + }, + "sidebar": { + "recents": "Senaste", + "expandToView": "Expandera för att visa uppgifter", + "noTasks": "Inga uppgifter ännu", + "noTasksHint": "Starta en ny chatt för att börja bygga, efterforska eller redigera filer.", + "search": "Sök i konversationer...", + "deleteAll": "Ta bort alla konversationer", + "localTasks": "Dessa uppgifter körs lokalt och synkroniseras inte mellan enheter.", + "apiConfigured": "API konfigurerat", + "apiNotConfigured": "API inte konfigurerat", + "user": "Användare", + "newTask": "Ny chatt", + "newTaskHint": "Starta en ny konversation", + "today": "Idag", + "yesterday": "Igår", + "previousWeek": "Föregående 7 dagar", + "older": "Äldre", + "settings": "Inställningar", + "themeToggle": "Växla tema", + "manage": "Hantera", + "selectAll": "Markera alla", + "deselectAll": "Avmarkera alla", + "nSelected": "{{count}} markerade", + "batchDeleteConfirm": "Ta bort {{count}} konversationer? Detta kan inte ångras.", + "cancel": "Avbryt", + "confirmDelete": "Ta bort" + }, + "chat": { + "sendMessage": "Skicka meddelande", + "stop": "Stoppa", + "processing": "Bearbetar...", + "typeMessage": "Skriv ett meddelande...", + "loadingConversation": "Läser in konversation...", + "startConversation": "Starta konversationen", + "startFailed": "Det gick inte att starta sessionen. Försök igen.", + "disclaimer": "Open Cowork är AI-driven och kan göra misstag. Dubbelkolla svaren.", + "noModel": "Ingen modell", + "connectorCount_one": "{{count}} anslutning", + "connectorCount_other": "{{count}} anslutningar" + }, + "context": { + "progress": "Förlopp", + "artifacts": "Artefakter", + "context": "Kontext", + "workingDirectory": "Arbetskatalog", + "toolsUsed": "Använda verktyg", + "mcpConnectors": "MCP-anslutningar", + "copied": "Kopierat!", + "noToolsUsedYet": "Inga verktyg använda ännu", + "toolsUsedLabel": "Använda verktyg:", + "noFolderSelected": "Ingen mapp vald", + "expandPanel": "Expandera panel", + "collapsePanel": "Fäll ihop panel", + "queuedMessages": "Köade meddelanden: {{count}}", + "stepsWillShow": "Steg visas allteftersom uppgiften fortskrider.", + "noArtifactsYet": "Inga artefakter ännu", + "revealFailed": "Det går inte att hitta filen. Kontrollera om sökvägen finns.", + "fileCreated": "Fil skapad", + "callNumber": "Anrop nr {{number}}", + "input": "Indata:", + "output": "Utdata:", + "tokenUsage": "Tokenanvändning", + "inputTokens": "Indata", + "outputTokens": "Utdata", + "totalTokens": "Totalt", + "changeDir": "Byt katalog", + "changeDirFailed": "Det gick inte att byta katalog", + "copyPath": "Kopiera sökväg", + "openInFileManager": "Öppna i filhanteraren", + "contextUsage": "Kontextanvändning", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Begäran", + "queued": "Köad", + "cancelled": "Avbruten", + "emptyMessage": "Tomt meddelande", + "emptyText": "(tom text)", + "copyMessage": "Kopiera meddelande", + "revealInFolder": "Visa i mapp", + "pastedContentAlt": "Inklistrat innehåll", + "taskProgress": "Uppgiftsförlopp", + "noQuestions": "Inga frågor", + "question": "Fråga", + "thinking": "Tänker", + "executionTime": "Körningstid: {{time}}" + }, + "schedule": { + "createTitle": "Skapa schema", + "editTitle": "Redigera schema", + "autoTitleLabel": "Automatisk titel (används för att identifiera sessioner)", + "autoTitleChangedHint": "Prompten ändrades. Titeln genereras om efter att du har sparat.", + "autoTitleUnchangedHint": "Om prompten förblir densamma behålls den befintliga titeln.", + "autoTitleEditingChanged": "Efter att du har sparat genereras titeln om från prompten med prefixet [Schemalagd uppgift].", + "autoTitleEditingUnchanged": "Efter att du har sparat genereras titeln med prefixet [Schemalagd uppgift].", + "autoTitleCreating": "Efter att du har sparat genereras titeln med prefixet [Schemalagd uppgift] och en modellsammanfattning.", + "promptPlaceholder": "Prompt att köra automatiskt vid den schemalagda tidpunkten", + "cwdPlaceholder": "Arbetskatalog (standard är den aktuella arbetsytan)", + "executionTime": "Körningstidpunkt", + "executionTimeHint": "Nya scheman föredrar tidpunkter med flera platser; äldre intervallregler kan fortfarande redigeras.", + "enabled": "Aktiverat", + "mode": "Körningsläge", + "weekday": "Veckodagar", + "weekdayPlaceholder": "Välj veckodagar", + "times": "Tidsluckor", + "timePlaceholder": "Välj tider", + "legacyIntervalNotice": "Den här uppgiften kommer från en äldre regel med fast intervall och behåller det läget när den sparas.", + "onceTimeLabel": "Välj tidpunkten för engångskörningen", + "legacyStartTimeLabel": "Välj starttid för den äldre intervallregeln", + "dailyHint": "Kör automatiskt vid dessa tider varje dag.", + "weeklyHint": "Kör automatiskt på de valda veckodagarna och tidsluckorna.", + "saveChanges": "Spara ändringar", + "createTask": "Skapa uppgift", + "cancelEdit": "Avbryt redigering", + "listHint": "Inaktivering blockerar endast framtida automatiska körningar. Redan startade sessioner måste stoppas manuellt från sessionslistan.", + "empty": "Inga scheman ännu", + "loadFailed": "Det gick inte att läsa in scheman", + "promptRequired": "Ange prompten som ska köras", + "dailyTimesRequired": "Välj minst en daglig tidslucka", + "weeklyTimesRequired": "Välj minst en veckovis tidslucka", + "weekdayRequired": "Välj minst en veckodag", + "invalidTime": "Ange en giltig körningstidpunkt", + "nextRunCalculationFailed": "Den aktuella regeln kan inte beräkna nästa körningstidpunkt", + "futureTimeRequired": "Körningstidpunkten måste vara senare än nu. Använd Kör nu om du vill utlösa den omedelbart.", + "taskMissing": "Uppgiften finns inte längre eller har tagits bort", + "updated": "Schemat uppdaterat", + "created": "Schemat skapat", + "saveFailed": "Det gick inte att spara schemat", + "toggleFailed": "Det gick inte att växla schematillstånd", + "runNowSuccess": "Utlöste en omedelbar körning", + "runNowFailed": "Det gick inte att köra omedelbart", + "noSessionToStop": "Den här uppgiften har ingen körningssession att stoppa", + "sessionNotRunning": "Den här uppgiften har för närvarande ingen körande session", + "stopSent": "Stoppkommando skickat", + "stopFailed": "Det gick inte att stoppa körningen", + "deleteConfirm": "Ta bort schemat \"{{title}}\"?", + "deleted": "Schemat borttaget", + "deleteFailed": "Det gick inte att ta bort schemat", + "statusRunning": "Körs", + "statusFinished": "Slutförd", + "statusUnknown": "Okänd", + "statusNone": "Ingen", + "taskEnabled": "Aktiverad", + "taskDisabled": "Inaktiverad", + "nextRun": "Nästa körning: {{value}}", + "nextRunNone": "Nästa körning: Ingen", + "strategy": "Schemaregel: {{value}}", + "lastRun": "Senaste körning: {{value}}", + "lastRunNever": "Senaste körning: Har inte körts ännu", + "recentSession": "Senaste session: {{value}}", + "sessionStatus": "Sessionsstatus: {{value}}", + "cwd": "Katalog: {{value}}", + "lastError": "Senaste fel: {{value}}", + "disable": "Inaktivera", + "enable": "Aktivera", + "runNow": "Kör nu", + "stopExecution": "Stoppa körning", + "edit": "Redigera", + "delete": "Ta bort", + "stopRunTitleActive": "Stoppa den senaste körningssessionen för den här uppgiften", + "stopRunTitleIdle": "Den här uppgiften har för närvarande ingen körande session", + "repeatEveryMinute_one": "Var {{count}} minut", + "repeatEveryMinute_other": "Var {{count}}:e minut", + "repeatEveryHour_one": "Var {{count}} timme", + "repeatEveryHour_other": "Var {{count}}:e timme", + "repeatEveryDay_one": "Var {{count}} dag", + "repeatEveryDay_other": "Var {{count}}:e dag", + "ruleDaily": "Varje dag kl. {{times}}", + "ruleWeekly": "Varje vecka på {{weekdays}} kl. {{times}}", + "ruleOnce": "Engång", + "previewNextRun": "Nästa förväntade körning: {{value}}", + "previewSelectValidTime": "Välj en giltig körningstidpunkt", + "previewSelectAtLeastOne": "Välj minst en giltig tidslucka", + "previewAutoFind": "Systemet väljer automatiskt nästa körningstidpunkt: {{value}}", + "weekdayMonday": "Mån", + "weekdayTuesday": "Tis", + "weekdayWednesday": "Ons", + "weekdayThursday": "Tor", + "weekdayFriday": "Fre", + "weekdaySaturday": "Lör", + "weekdaySunday": "Sön", + "modeOnce": "Engång", + "modeDaily": "Dagligen", + "modeWeekly": "Veckovis", + "repeatUnitMinute": "Minut", + "repeatUnitHour": "Timme", + "repeatUnitDay": "Dag", + "unknownWeekday": "Okänd", + "pickerEditTimes": "Redigera tidsluckor", + "pickerAnyHHmm": "Du kan ange valfritt `HH:mm`-värde", + "pickerSelectedCount_one": "{{count}} vald", + "pickerSelectedCount_other": "{{count}} valda", + "pickerAdd": "Lägg till", + "pickerSelectedTimes": "Valda tider", + "pickerNone": "Inga tidsluckor valda ännu", + "pickerSuggestions": "Förslag" + }, + "remote": { + "title": "Fjärrstyrning", + "statusRunning": "Körs. Tillgänglig via Feishu.", + "statusStopped": "Stoppad", + "startService": "Starta tjänst", + "stopService": "Stoppa tjänst", + "activeSessions": "Aktiva sessioner", + "authorizedUsers": "Behöriga användare", + "pendingApprovals": "Väntande godkännanden", + "pairingRequests": "Parkopplingsförfrågningar som väntar på godkännande", + "unknownUser": "Okänd användare", + "pairingCode": "Parkopplingskod", + "approve": "Godkänn", + "stepFeishu": "Feishu-konfiguration", + "stepConnection": "Anslutning", + "stepAdvanced": "Avancerat", + "feishuTitle": "Konfiguration av Feishu-bot", + "feishuDesc": "Skapa en app i Feishu Open Platform och fyll sedan i autentiseringsuppgifterna här.", + "dmPolicy": "Behörighetspolicy för direktmeddelanden", + "policyPairing": "Parkopplingsverifiering", + "policyPairingDesc": "Användare måste ange en parkopplingskod.", + "policyAllowlist": "Tillåtlista", + "policyAllowlistDesc": "Endast specifika användare tillåts.", + "policyOpen": "Öppen åtkomst", + "policyOpenDesc": "Vem som helst kan använda boten.", + "openFeishu": "Öppna Feishu Open Platform", + "slackTitle": "Konfiguration av Slack-bot", + "slackDesc": "Skapa en Slack-app, installera den i din arbetsyta och fyll sedan i autentiseringsuppgifterna här.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (för Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Anslut utåt till Slack. Ingen offentlig IP krävs.", + "openSlack": "Öppna Slack API", + "connectionTitle": "Anslutningsläge", + "connectionDesc": "Välj hur Feishu-servrarna kommunicerar med din dator.", + "longConnection": "Läge för långvarig anslutning", + "recommended": "Rekommenderas", + "longConnectionDesc": "Appen ansluter utåt till Feishu-servrarna. Ingen offentlig IP eller ngrok krävs.", + "noPublicInternet": "Ingen exponering mot det offentliga internet", + "outOfBox": "Fungerar direkt ur lådan", + "stableReliable": "Stabil och tillförlitlig", + "webhookMode": "Webhook-läge", + "webhookDesc": "Feishu skickar meddelanden till din server. En offentligt nåbar adress krävs.", + "localWebhookUrl": "Lokal webhook-URL", + "useBuiltInNgrok": "Använd inbyggd ngrok", + "ngrokHelpPrefix": "Skaffa en gratis från", + "ngrokHelpSuffix": "", + "tunnelConnected": "Tunnel ansluten", + "longConnectionHint": "I Feishu Open Platform går du till Events & Callbacks > Event Configuration och byter prenumerationsläget till långvarig anslutning.", + "advancedTitle": "Avancerade inställningar", + "advancedDesc": "Anpassa beteendet för fjärrstyrning.", + "defaultWorkingDirectory": "Standardarbetskatalog", + "defaultWorkingDirectoryPlaceholder": "Till exempel: C:\\Users\\ditt-namn\\Projects", + "defaultWorkingDirectoryHint": "Detta är standardkatalogen för AI-kommandon. Du kan också överstyra den i ett meddelande med `[cwd:path]`.", + "gatewayPort": "Tjänsteport", + "autoApproveSafeTools": "Godkänn säkra verktyg automatiskt", + "autoApproveSafeToolsDesc": "Tillåt automatiskt säkra verktyg som filläsningar och webbläsaråtgärder.", + "saveConfig": "Spara konfiguration", + "authorizedUsersTitle": "Behöriga användare ({{count}})", + "revokeAccess": "Återkalla åtkomst", + "quickStart": "Snabbstart", + "quickStartStep1": "Skapa en app i Feishu Open Platform och lägg till Bot-funktionen.", + "quickStartStep2": "Kopiera App ID och App Secret till fälten ovan.", + "quickStartStep3": "Aktivera dessa behörigheter i behörighetsinställningarna:", + "quickStartStep4": "I Feishus Event Configuration väljer du händelseläget för långvarig anslutning.", + "quickStartStep5Prefix": "Prenumerera på händelsen", + "quickStartStep5Suffix": ".", + "quickStartStep6": "Publicera appen och klicka sedan på Starta tjänst.", + "started": "Fjärrstyrning startad", + "stopped": "Fjärrstyrning stoppad", + "actionFailed": "Åtgärden misslyckades", + "configSaved": "Konfiguration sparad", + "saveFailed": "Det gick inte att spara konfigurationen", + "pairingApproved": "Parkoppling godkänd", + "approveFailed": "Det gick inte att godkänna parkopplingen", + "reject": "Avvisa", + "pairingRejected": "Parkoppling avvisad", + "rejectFailed": "Det gick inte att avvisa parkopplingen", + "pairingGuideTitle": "Parkopplingsguide", + "pairingGuideStep1": "Öppna Feishu och hitta boten", + "pairingGuideStep2": "Skicka valfritt meddelande för att inleda parkoppling", + "pairingGuideStep3": "Godkänn parkopplingsförfrågan nedan", + "pairingGuideStep4": "Klart — användaren kan nu chatta med boten", + "waitingForPairing": "Väntar på att användare ska inleda parkoppling...", + "expiresIn": "Upphör om {{time}}", + "userRemoved": "Användare borttagen", + "revokeFailed": "Det gick inte att ta bort användaren", + "copied": "Kopierat" + }, + "time": { + "now": "nu" + }, + "permission": { + "permissionRequired": "Behörighet krävs", + "tool": "Verktyg:", + "input": "Indata:", + "warning": "Den här åtgärden kan ändra ditt system. Granska noggrant.", + "deny": "Neka", + "allow": "Tillåt", + "alwaysAllow": "Tillåt alltid det här verktyget", + "useTool": "Använd verktyget {{toolName}}", + "toolDescriptions": { + "write": "Skriv till filer på ditt system", + "edit": "Redigera befintliga filer på ditt system", + "bash": "Kör skalkommandon", + "webFetch": "Hämta data från webben", + "webSearch": "Sök på webben", + "read_file": "Läs filer i arbetsytan", + "write_file": "Skriv filer i arbetsytan", + "edit_file": "Redigera filer i arbetsytan", + "list_directory": "Lista kataloginnehåll i arbetsytan", + "execute_command": "Kör skalkommandon i arbetsytan", + "glob": "Sök filer efter mönster", + "grep": "Sök i filinnehåll" + } + }, + "sudo": { + "title": "Administratörsbehörighet krävs", + "description": "Följande kommando kräver administratörsbehörighet:", + "passwordLabel": "Lösenord", + "passwordPlaceholder": "Ange ditt lösenord", + "cancel": "Avbryt", + "execute": "Kör", + "warning": "Ditt lösenord används endast för det här kommandot och lagras inte." + }, + "errorBoundary": { + "title": "Något gick fel", + "description": "Ett oväntat fel uppstod i programmet. Du kan försöka återställa genom att klicka på knappen nedan.", + "details": "Feldetaljer", + "retry": "Försök igen" + } +} diff --git a/src/renderer/i18n/locales/uk.json b/src/renderer/i18n/locales/uk.json new file mode 100644 index 00000000..d7aeafb5 --- /dev/null +++ b/src/renderer/i18n/locales/uk.json @@ -0,0 +1,954 @@ +{ + "common": { + "save": "Зберегти", + "cancel": "Скасувати", + "delete": "Видалити", + "edit": "Редагувати", + "add": "Додати", + "close": "Закрити", + "loading": "Завантаження...", + "error": "Помилка", + "success": "Успіх", + "saving": "Збереження...", + "saved": "Успішно збережено!", + "sure": "Ви впевнені?", + "yes": "Так", + "no": "Ні", + "enable": "Увімкнути", + "disable": "Вимкнути", + "install": "Встановити", + "optional": "необов'язково", + "appLogoAlt": "Логотип Open Cowork", + "pastedImageAlt": "Вставлено {{index}}" + }, + "welcome": { + "title": "Чим я можу допомогти вам сьогодні?", + "placeholder": "Опишіть, що ви хочете зробити...", + "createFile": "Створити файл", + "crunchData": "Обробити дані", + "organizeFiles": "Упорядкувати файли", + "checkEmails": "Перевірити пошту", + "searchPapers": "Пошук і резюме статей", + "summarizePapersToNotion": "Резюме статей у Notion", + "selectWorkingFolder": "Виберіть робочу теку (обов'язково)", + "selectWorkingFolderFailed": "Не вдалося вибрати робочу теку", + "attachFiles": "Прикріпити файли", + "letsGo": "Почнімо", + "starting": "Запуск...", + "chromeRequired": "Chrome", + "notionRequired": "Notion", + "logoAlt": "Логотип Open Cowork", + "pastedImageAlt": "Вставлено {{index}}", + "quickPromptCreate": "Створіть для мене новий файл", + "quickPromptCrunch": "Допоможіть мені проаналізувати та обробити дані", + "quickPromptOrganize": "Допоможіть мені впорядкувати мої файли та теки", + "quickPromptEmail": "Допоможіть мені скористатися Chrome, щоб зробити резюме нових листів за останні три дні в моїй пошті Gmail та NetEase Mail. Зверніть увагу, що збережені облікові записи вже містять повний суфікс електронної пошти. Тому, якщо суфікс електронної пошти вже попередньо заповнений на вебсторінці або на знімку екрана, не вводьте його повторно, щоб уникнути збою входу. Також спочатку перевірте, чи збережено відповідні дані облікового запису. Якщо ім'я користувача або пароль для певної поштової служби не збережено, ви можете пропустити цей обліковий запис.", + "quickPromptPapers": "Будь ласка, допоможіть мені скористатися Chrome, щоб знайти та зробити резюме статей, пов'язаних з [Agent], за два дні.\nДжерела:\n1. HuggingFace Daily Papers. Будь ласка, включіть інформацію про голоси та короткий опис. Зверніть увагу, що там можуть бути відсутні статті за вихідні, тож вам, можливо, доведеться перевірити статті за попередні дні. Але переконайтеся, що загалом охоплено два дні.", + "quickPromptNotion": "Допоможіть мені дослідити три репрезентативні оглядові статті, пов'язані з агентами, і додайте їх на сторінку Notion з назвою \"Agent Survey\". Для кожної статті вкажіть назву, авторів, місце/рік публікації та короткий опис основних внесків.", + "apiNotConfigured": "API ще не налаштовано. Перейдіть до Налаштувань, щоб налаштувати свого постачальника API та ключ.", + "goToSettings": "Перейти до Налаштувань" + }, + "settings": { + "title": "Налаштування", + "apiSettings": "Налаштування API", + "apiSettingsDesc": "Налаштування постачальника API та ключа", + "sandbox": "Пісочниця", + "sandboxDesc": "Ізольоване середовище виконання", + "connectors": "Конектори MCP", + "connectorsDesc": "Інтеграції браузера та інструментів", + "skills": "Навички", + "skillsDesc": "Керування користувацькими навичками", + "memory": "Пам'ять", + "memoryDesc": "Керування довготривалою пам'яттю та досвідом робочого простору", + "schedule": "Розклади", + "scheduleDesc": "Автоматизація запитів у стилі будильника", + "remote": "Віддалене керування", + "remoteDesc": "Використовуйте Open Cowork через Feishu та інші канали", + "logs": "Журнали", + "logsDesc": "Перегляд та експорт журналів застосунку", + "panelDesc": "Налаштуйте свій робочий простір, інструменти та поведінку облікового запису.", + "general": "Загальні", + "generalDesc": "Вигляд, мова та налаштування" + }, + "general": { + "appearance": "Вигляд", + "theme": "Тема", + "themeLight": "Світла", + "themeDark": "Темна", + "themeSystem": "Системна", + "language": "Мова" + }, + "memory": { + "title": "Пам'ять", + "description": "Глобальна основна пам'ять зберігає стабільні налаштування, а пам'ять досвіду робочого простору зберігає багаторазові знання про конкретний проєкт.", + "enabled": "Увімкнено", + "disabled": "Вимкнено", + "toggleHint": "Вимкнення цього зупиняє майбутнє накопичення та автоматичне пригадування, але зберігає наявні записи.", + "enableAction": "Увімкнути пам'ять", + "disableAction": "Вимкнути пам'ять", + "enabledStatus": "Пам'ять увімкнено", + "disabledStatus": "Пам'ять вимкнено", + "coreCount": "Основні записи", + "sessionCount": "Резюме сесій", + "chunkCount": "Фрагменти досвіду", + "workspaceCount": "Робочі простори", + "latestIngestion": "Останнє накопичення", + "noIngestionYet": "Накопичень ще не зафіксовано", + "health": "Стан", + "healthy": "Справний, без нещодавніх збоїв", + "failedSessions": "{{count}} сесій не змогли завершити останнє накопичення", + "searchTitle": "Пошук та перегляд", + "searchDescription": "Шукайте пам'ять за поточним робочим простором або глобально, потім переглядайте резюме та необроблені фрагменти.", + "searchPlaceholder": "Шукати налаштування, попередні реалізації, рішення...", + "searchAction": "Шукати", + "scopeWorkspace": "Поточний робочий простір", + "scopeAll": "Уся пам'ять", + "scopeGlobal": "Лише основна пам'ять", + "currentWorkspace": "Поточний робочий простір", + "groupCore": "Основна пам'ять", + "groupSessions": "Резюме сесій", + "groupChunks": "Збіги фрагментів", + "detailTitle": "Деталі", + "noSelection": "Виберіть результат, щоб переглянути повне резюме та фрагмент джерела.", + "noResults": "Немає результатів", + "maintenanceTitle": "Обслуговування", + "maintenanceDescription": "Перебудуйте пам'ять досвіду для поточного робочого простору або очистьте збережені дані.", + "rebuildWorkspace": "Перебудувати поточний робочий простір", + "clearWorkspace": "Очистити поточний робочий простір", + "clearCore": "Очистити основну пам'ять", + "rebuildConfirm": "Перебудувати пам'ять досвіду для поточного робочого простору? Це повторно сканує історичні сесії в цьому робочому просторі.", + "clearWorkspaceConfirm": "Очистити пам'ять досвіду для поточного робочого простору? Це неможливо скасувати.", + "clearCoreConfirm": "Очистити всю глобальну основну пам'ять? Це неможливо скасувати.", + "rebuildSuccess": "Пам'ять робочого простору перебудовано", + "clearWorkspaceSuccess": "Пам'ять робочого простору очищено", + "clearCoreSuccess": "Основну пам'ять очищено", + "runtimeTitle": "Конфігурація середовища виконання", + "runtimeDescription": "За замовчуванням це успадковує наразі активну конфігурацію API. Тут ви здебільшого налаштовуєте глибину навігації, embedding та теку на диску.", + "runtimeSaved": "Конфігурацію середовища виконання пам'яті збережено", + "saveRuntime": "Зберегти конфігурацію середовища виконання", + "storageRoot": "Корінь сховища", + "noWorkspace": "Робочого простору ще немає", + "maxNavSteps": "Кроки навігації", + "ingestionConcurrency": "Паралелізм перебудови", + "useEmbedding": "Увімкнути пошук за embedding", + "evalEnabled": "Увімкнути оцінювання на реальній моделі", + "evalArtifactsRoot": "Тека артефактів оцінювання", + "evalMaxRounds": "Раунди оцінювання", + "promptIterationRounds": "Раунди ітерації запиту", + "llmConfig": "LLM пам'яті", + "embeddingConfig": "Embedding", + "inheritActive": "Успадкувати активний API", + "modelOverride": "Перевизначення моделі", + "baseUrlOverride": "Перевизначення Base URL", + "apiKeyOverride": "Перевизначення API Key", + "allSources": "Усі джерела", + "groupRawSessions": "Необроблені сесії", + "sourceFile": "Файл джерела", + "inspectSession": "Переглянути пам'ять сесії", + "inspectSessionHint": "Виберіть сесію або фрагмент з результатів вище, щоб переглянути його.", + "revealInFinder": "Показати у Finder", + "rebuildAll": "Перебудувати всю пам'ять", + "rebuildAllConfirm": "Це очистить і перебудує всю пам'ять. Продовжити?", + "rebuildAllSuccess": "Перебудовано всю пам'ять: {{sessionCount}} сесій, {{workspaceCount}} вихідних робочих просторів", + "filesTitle": "Переглядач необроблених файлів", + "filesDescription": "Перегляньте артефакти core / unified experience / session_state / eval точно так, як вони записані на диск.", + "fileList": "Список файлів", + "refreshFiles": "Оновити", + "noFiles": "Файлів пам'яті ще немає", + "fileContent": "Вміст файлу", + "emptyFile": "Файл порожній", + "selectFileHint": "Виберіть файл ліворуч, щоб переглянути його необроблений JSON." + }, + "language": { + "english": "Англійська", + "chinese": "Китайська", + "selectLanguage": "Виберіть мову", + "currentLanguage": "Поточна мова" + }, + "api": { + "firstRunTitle": "Налаштувати API", + "firstRunSubtitle": "Налаштуйте постачальника, щоб почати користуватися Open Cowork", + "settingsTitle": "Налаштування API", + "settingsSubtitle": "Керування постачальником, ключем та налаштуваннями моделі", + "configSet": "Набір конфігурацій", + "defaultSetTag": "За замовчуванням", + "saveAs": "Зберегти як", + "renameSet": "Перейменувати", + "deleteSet": "Видалити набір", + "saveAndSwitch": "Зберегти та перемкнути", + "discardAndSwitch": "Відхилити та перемкнути", + "currentSetSavingHint": "\"Зберегти налаштування\" оновлює лише наразі вибраний набір конфігурацій.", + "unsavedCurrentSetHint": "Поточний набір конфігурацій має незбережені зміни.", + "unsavedSwitchPrompt": "Поточний набір конфігурацій має незбережені зміни. Виберіть дію перед перемиканням на \"{{name}}\".", + "configSetSaveAsPrompt": "Введіть назву для нового набору конфігурацій", + "configSetRenamePrompt": "Введіть нову назву для цього набору конфігурацій", + "configSetDeleteConfirm": "Видалити набір конфігурацій \"{{name}}\"?", + "configSetNameRequired": "Назва набору конфігурацій обов'язкова", + "configSetLimitReached": "Ви можете зберегти до {{count}} наборів конфігурацій", + "configSetCreated": "Набір конфігурацій створено", + "configSetRenamed": "Набір конфігурацій перейменовано", + "configSetDeleted": "Набір конфігурацій видалено", + "configSetSwitched": "Набір конфігурацій перемкнено", + "defaultConfigSetName": "За замовчуванням", + "configSetFallbackName": "Набір конфігурацій {{index}}", + "provider": "Постачальник API", + "providerDescription": "Виберіть сімейство постачальника та загальний стиль протоколу для цього робочого простору.", + "apiKey": "API Key", + "enterApiKey": "Введіть свій API Key", + "apiKeyDescription": "Зберігається локально та обмежується активним набором конфігурацій.", + "protocol": "Протокол", + "baseUrl": "Base URL", + "model": "Модель", + "usePreset": "Використати пресет", + "custom": "Власний", + "moreModels": "Більше моделей", + "noModelsAvailable": "Немає доступних моделей", + "selectProtocol": "Виберіть сумісний протокол для служби", + "enterOllamaUrl": "Введіть URL OpenAI-сумісної служби Ollama", + "enterOpenAIUrl": "Введіть URL OpenAI-сумісної служби", + "enterAnthropicUrl": "Введіть URL Anthropic-сумісної служби", + "enterGeminiUrl": "Введіть Gemini-сумісний base URL", + "enterModelId": "Введіть ID моделі, напр., deepseek-chat, kimi-k2-thinking, gpt-5.4", + "selectModelRequired": "Будь ласка, виберіть модель", + "contextWindow": "Контекстне вікно", + "contextWindowPlaceholder": "Автовизначення", + "maxOutputTokens": "Макс. вихідних токенів", + "maxOutputTokensPlaceholder": "Автовизначення", + "contextWindowHint": "Залиште порожнім для автовизначення. Перевизначайте лише якщо модель повідомляє некоректні обмеження.", + "saveFailed": "Не вдалося зберегти налаштування. Спробуйте ще раз.", + "getStarted": "Почати", + "saveSettings": "Зберегти налаштування", + "openSettingsAction": "Відкрити налаштування API", + "configRequiredActiveSet": "Поточний набір конфігурацій не має придатних облікових даних. Спершу завершіть налаштування в Налаштуваннях API.", + "testConnection": "Перевірити з'єднання", + "testingConnection": "Перевірка...", + "refreshModels": "Оновити моделі", + "refreshingModels": "Оновлення...", + "refreshModelsFailed": "Не вдалося оновити моделі. Перевірте URL або стан служби.", + "manualModel": "Модель вручну", + "useDetectedModels": "Використати виявлені моделі", + "discoverLocalOllama": "Знайти локальний Ollama", + "discoveringLocalOllama": "Пошук...", + "discoverLocalOllamaHint": "Спершу введіть свою кінцеву точку Ollama. Моделі буде отримано автоматично, а ручне введення потрібне лише якщо виявлення не вдасться.", + "localOllamaDiscovered": "Знайдено локальний Ollama з {{count}} доступними моделями.", + "localOllamaNotFound": "Локальну службу Ollama не знайдено. Запустіть її командою `ollama serve` і спробуйте ще раз.", + "localOllamaNoModels": "Знайдено локальну службу Ollama, але вона наразі не надає жодних моделей.", + "localOllamaModelUnavailable": "Знайдено локальний Ollama, але модель {{model}} не змогла завершити мінімальний запит на інференс.", + "localOllamaModelLoading": "Знайдено локальний Ollama, але модель все ще завантажується в пам'ять. Великі моделі можуть займати до хвилини.", + "enableThinking": "Увімкнути режим мислення", + "enableThinkingHint": "Показувати процес мислення Claude крок за кроком. Це забезпечує більшу прозорість, але може збільшити використання токенів.", + "enableThinkingOllamaHint": "Більшість моделей Ollama не підтримують режим мислення. Вмикайте лише якщо ваша модель явно його підтримує.", + "testSuccess": "З'єднання успішне ({{ms}} мс)", + "testSuccessNeedSave": "Перевірку з'єднання пройдено. Збережіть налаштування перед запуском сесії.", + "testError": { + "missing_key": "Потрібен API Key", + "missing_base_url": "Для цього постачальника потрібен Base URL", + "unauthorized": "Недійсний API Key або немає авторизації", + "not_found": "Кінцеву точку не знайдено. Перевірте Base URL", + "rate_limited": "Перевищено ліміт частоти або квоту", + "server_error": "Помилка служби. Спробуйте пізніше", + "network_error": "Помилка мережі. Перевірте з'єднання", + "ollama_not_running": "Не вдається підключитися до Ollama. Переконайтеся, що Ollama запущено (ollama serve).", + "ollama_loading": "Ollama завантажує модель у пам'ять. Великі моделі можуть займати 30–120 секунд. Зачекайте і спробуйте ще раз.", + "unknown": "Збій з'єднання" + }, + "guidance": { + "commonSetupsTitle": "Поширені налаштування постачальників", + "commonSetupsHint": "Перегляньте або застосуйте рекомендоване налаштування", + "apply": "Застосувати", + "detectedBadge": "Виявлено", + "preferProviderTab": "Виявлено {{service}}. Цю службу зазвичай легше налаштувати на спеціальній вкладці {{provider}}.", + "protocolMismatch": "Виявлено {{service}}. Рекомендований протокол: {{recommendedProtocol}}.", + "protocolLooksGood": "Виявлено {{service}}. Ваш поточний протокол уже відповідає рекомендованому налаштуванню {{recommendedProtocol}}.", + "baseUrlHint": "Виявлено {{service}}. Рекомендоване налаштування {{recommendedProtocol}}: {{baseUrl}}. Приклад моделі: {{model}}.", + "genericBaseUrlHint": "Це схоже на власну {{recommendedProtocol}}-сумісну кінцеву точку. Рекомендований формат base URL: {{baseUrl}}. Приклад моделі: {{model}}.", + "protocolLabels": { + "anthropic": "Anthropic", + "openai": "OpenAI", + "gemini": "Gemini" + }, + "columns": { + "service": "Служба", + "protocol": "Протокол", + "baseUrl": "Base URL", + "model": "Приклад моделі", + "notes": "Примітки", + "action": "Дія" + }, + "errorHints": { + "emptyProbeGeneric": "Кінцева точка повернула порожню відповідь на зондування. Зазвичай це означає, що вибраний протокол або модель несумісні зі службою.", + "emptyProbeDetected": "{{service}} повернув порожню відповідь на зондування. Спробуйте рекомендоване налаштування {{recommendedProtocol}} і перевірте ID моделі для цієї кінцевої точки.", + "emptyProbePreferProvider": "{{service}} повернув порожню відповідь на зондування. Спробуйте спеціальну вкладку {{provider}} замість налаштування його як загальної власної кінцевої точки.", + "probeMismatchGeneric": "Кінцева точка відповіла, але не у форматі, очікуваному цим зондуванням. Зазвичай це вказує на невідповідність протоколу або моделі.", + "probeMismatchDetected": "{{service}} відповів несподіваним форматом зондування. Спробуйте рекомендоване налаштування {{recommendedProtocol}} і перевірте ID моделі для цієї кінцевої точки." + }, + "setups": { + "openrouter": { + "name": "OpenRouter", + "note": "Віддавайте перевагу спеціальній вкладці постачальника OpenRouter, якщо тільки ви не налагоджуєте власний реле." + }, + "deepseek": { + "name": "DeepSeek API", + "note": "Використовуйте OpenAI-сумісний режим і скопіюйте точний ID моделі з документації DeepSeek." + }, + "kimi": { + "name": "Kimi Coding", + "note": "Використовуйте coding-кінцеву точку з Anthropic-сумісним режимом. Перевірте точний ID coding-моделі в документації Moonshot." + }, + "glm": { + "name": "GLM / BigModel (маршрут Anthropic)", + "note": "Використовуйте Anthropic-сумісний маршрут, коли шлях кінцевої точки містить /api/anthropic." + }, + "ollama": { + "name": "Ollama", + "note": "Віддавайте перевагу спеціальній вкладці постачальника Ollama для виявлення та оновлення локальних моделей." + }, + "gemini": { + "name": "Власна кінцева точка Gemini", + "note": "Використовуйте Gemini-сумісний режим і точний ID моделі, який надає кінцева точка." + }, + "minimax": { + "name": "MiniMax", + "note": "Використовуйте OpenAI-сумісний режим, якщо тільки ваш шлюз MiniMax не документує інший протокол." + }, + "genericOpenAI": { + "name": "Загальний OpenAI-сумісний", + "note": "Використовуйте це для власних реле, шлюзів або серверів інференсу, які імітують API OpenAI." + } + } + }, + "newSet": "Новий набір", + "createSetTitle": "Створити набір конфігурацій", + "saveAsTitle": "Зберегти як набір конфігурацій", + "createSetNamePlaceholder": "Введіть назву набору конфігурацій", + "renameSetTitle": "Перейменувати набір конфігурацій", + "unsavedBeforeActionPrompt": "Поточний набір конфігурацій має незбережені зміни. Виберіть дію перед \"{{action}}\".", + "newSetDefaultName": "Новий набір конфігурацій", + "copyNameSuffix": "Копія", + "currentSetLabel": "Поточний набір: ", + "unsavedBadge": "Незбережено", + "saveAndContinue": "Зберегти та продовжити", + "discardAndContinue": "Відхилити та продовжити", + "currentSetName": "Назва набору", + "renameInlineHint": "Редагуйте напряму. Натисніть Enter або зніміть фокус для автоматичного збереження", + "switchSetLabel": "Перемкнути на інший набір", + "switchSetPlaceholder": "Виберіть набір для перемикання", + "noOtherSetHint": "Інших наборів немає", + "configSetMissing": "Набір конфігурацій не знайдено", + "configSetCloneSourceMissing": "Не вдалося знайти набір конфігурацій для клонування", + "configSetSystemDeleteForbidden": "Набір конфігурацій за замовчуванням неможливо видалити", + "configSetKeepOne": "Залиште щонайменше один набір конфігурацій", + "diagnostic": { + "runDiagnostics": "Діагностувати з'єднання", + "runQuickDiagnostics": "Швидка діагностика", + "runDeepDiagnostics": "Глибока перевірка інференсу", + "running": "Діагностика...", + "step": { + "dns": "Розв'язання DNS", + "tcp": "З'єднання TCP", + "tls": "Рукостискання TLS", + "auth": "Автентифікація API", + "model": "Перевірка моделі" + }, + "status": { + "pending": "Очікування", + "running": "Перевірка...", + "ok": "OK", + "fail": "Невдало", + "skip": "Пропущено" + }, + "overallSuccess": "Усі перевірки пройдено ({{ms}} мс)", + "overallFail": "Діагностика не вдалася на кроці {{step}}", + "advisory": { + "not_deep_verified": "Кінцева точка доступна, а вибрана модель є у списку, але живий інференс ще не виконувався.", + "model_loading": "Кінцева точка доступна, але модель, можливо, все ще завантажується в пам'ять." + }, + "latency": "{{ms}} мс", + "fix": { + "dns_resolve_failed": "Не вдається розв'язати ім'я хосту {{host}}. Перевірте, чи правильний URL.", + "tcp_connect_failed": "Не вдається підключитися до {{host}}. Перевірте налаштування мережі або фаєрвола.", + "tls_handshake_failed": "Рукостискання TLS не вдалося. Це може бути спричинено проблемою з сертифікатом або втручанням проксі.", + "missing_api_key": "API Key відсутній або недійсний. Перевірте свій ключ.", + "auth_invalid_key": "API Key недійсний або прострочений. Перевірте, чи правильний ключ.", + "auth_endpoint_not_found": "Кінцеву точку API не знайдено. Перевірте, чи правильний Base URL.", + "auth_request_failed": "Запит автентифікації не вдався. Перевірте свою конфігурацію.", + "model_network_error": "Не вдалося зв'язатися з моделлю {{model}}. Перевірте мережу, VPN або налаштування проксі.", + "model_rate_limited": "Модель {{model}} наразі має обмеження частоти або вичерпала квоту. Спробуйте пізніше.", + "model_request_failed": "Запит до моделі {{model}} не вдався на боці постачальника. Спробуйте пізніше.", + "model_unavailable": "Модель {{model}} недоступна. Перевірте назву моделі.", + "ollama_no_models_loaded": "Кінцева точка доступна, але вона не повернула жодних моделей. Спершу завантажте модель в Ollama.", + "ollama_model_not_listed": "Модель {{model}} відсутня у списку моделей кінцевої точки. Виберіть виявлену модель або перейдіть на ручне введення.", + "ollama_model_loading": "Модель {{model}}, можливо, все ще завантажується. Спробуйте глибоку перевірку ще раз за мить.", + "model_cold_start": "Модель, можливо, все ще завантажується в пам'ять GPU/CPU. Великі моделі (7B+) можуть займати 30–120 секунд при першому використанні. Спробуйте незабаром." + } + } + }, + "window": { + "minimize": "Згорнути", + "maximize": "Розгорнути", + "restore": "Відновити", + "close": "Закрити" + }, + "sandbox": { + "title": "Середовище пісочниці", + "wslDesc": "Виконуйте команди в середовищі WSL2 Linux для кращої ізоляції та безпеки в Windows.", + "limaDesc": "Виконуйте команди у Lima VM для кращої ізоляції та безпеки в macOS.", + "nativeDesc": "Команди виконуються безпосередньо у вашій системі (нативний режим Linux).", + "enableSandbox": "Увімкнути режим пісочниці", + "comingSoon": "Незабаром — у розробці", + "readyStatus": "Пісочниця готова та працює", + "notReadyStatus": "Пісочницю увімкнено, але не повністю налаштовано", + "disabledStatus": "Пісочницю вимкнено — команди виконуються безпосередньо в системі", + "enabledWillSetup": "Пісочницю увімкнено. Налаштування середовища...", + "disabled": "Режим пісочниці вимкнено", + "failedToLoad": "Не вдалося завантажити стан пісочниці", + "failedToSave": "Не вдалося зберегти налаштування пісочниці", + "statusRefreshed": "Стан оновлено", + "checkFailed": "Не вдалося перевірити стан пісочниці", + "environmentStatus": "Стан середовища", + "checkStatus": "Перевірити стан", + "platform": "Платформа", + "mode": "Режим", + "status": "Стан", + "native": "Нативний", + "wslAvailable": "WSL2 доступний", + "limaAvailable": "Lima доступний", + "vmCreated": "Екземпляр VM створено", + "vmRunning": "VM працює", + "wslNotInstalled": "WSL2 не встановлено", + "wslInstallHint": "Встановіть WSL2 для кращої ізоляції. Виконайте цю команду в PowerShell від імені адміністратора:", + "limaNotInstalled": "Lima не встановлено", + "limaInstallHint": "Встановіть Lima для кращої ізоляції. Виконайте цю команду в Терміналі:", + "linuxNative": "Linux виконує команди нативно без додаткової пісочниці.", + "nodeInstalled": "Node.js успішно встановлено", + "nodeInstallFailed": "Не вдалося встановити Node.js", + "pythonInstalled": "Python успішно встановлено", + "pythonInstallFailed": "Не вдалося встановити Python", + "start": "Запустити", + "stop": "Зупинити", + "limaStarted": "Lima VM запущено", + "limaStartFailed": "Не вдалося запустити Lima VM", + "limaStopped": "Lima VM зупинено", + "limaStopFailed": "Не вдалося зупинити Lima VM", + "settingUp": "Налаштування...", + "retrySetup": "Повторити налаштування", + "setupComplete": "Налаштування пісочниці завершено", + "setupFailed": "Налаштування пісочниці не вдалося", + "helpText1": "Пісочниця надає ізольоване середовище для безпечного виконання команд.", + "helpText2": "Для повної підтримки пісочниці потрібен WSL2 (Windows) або Lima VM (macOS).", + "setupTitle": "Налаштування пісочниці", + "setupSubtitle": "Перший запуск вимагає налаштування безпечного середовища виконання.", + "progressLabel": "Прогрес", + "continuingNative": "Продовження в нативному режимі виконання.", + "retryLima": "Спробувати перезапустити Lima", + "retryingLima": "Перезапуск Lima...", + "continueNative": "Продовжити в нативному режимі", + "configuredSuccess": "Пісочницю налаштовано. Код тепер можна виконувати безпечно.", + "nativeFallbackSuccess": "Використання нативного системного середовища для виконання команд.", + "footerWsl": "Пісочниця WSL2", + "footerLima": "Пісочниця Lima", + "footerNative": "Нативний режим", + "configuring": "Налаштування...", + "syncFiles_one": "{{count}} файл", + "syncFiles_other": "{{count}} файлів", + "syncExplanation": "Синхронізація файлів проєкту до ізольованої пісочниці для безпечного виконання коду.", + "syncFirst": "Перша синхронізація повільніша,", + "syncFollowup": "наступні синхронізації будуть швидшими.", + "checkingWsl": "Перевірка середовища WSL2...", + "checkingLima": "Перевірка середовища Lima...", + "creatingLima": "Створення Lima VM...", + "startingLima": "Запуск Lima VM...", + "installingNode": "Встановлення Node.js...", + "installingPython": "Встановлення Python...", + "installingPip": "Встановлення pip...", + "installingDeps": "Встановлення залежностей навичок...", + "setupFailedMessage": "Налаштування пісочниці не вдалося", + "sandboxDisabledMessage": "Пісочницю вимкнено", + "nativeModeMessage": "Використання нативного режиму виконання", + "wslNotDetectedMessage": "WSL2 не виявлено, використання нативного режиму", + "limaNotDetectedMessage": "Lima не виявлено, використання нативного режиму", + "nodeInstallFailedMessage": "Встановлення Node.js не вдалося", + "wslReadyMessage": "Пісочниця WSL2 готова", + "limaReadyMessage": "Пісочниця Lima готова", + "limaCreateFailedMessage": "Створення Lima VM не вдалося", + "limaStartFailedMessage": "Запуск Lima VM не вдався", + "setupDetailSandboxDisabled": "Використання нативного режиму виконання (пісочницю вимкнено в налаштуваннях)", + "setupDetailLinuxNative": "Linux виконує команди безпосередньо", + "setupDetailInstallWsl": "Встановіть WSL2 для кращої ізоляції пісочниці", + "setupDetailInstallNodeWsl": "Будь ласка, встановіть Node.js вручну у WSL", + "setupDetailInstallNodeWslRuntime": "Встановлення середовища виконання Node.js у {{distro}}", + "setupDetailInstallPythonWslRuntime": "Встановлення середовища виконання Python у {{distro}}", + "setupDetailInstallPipWslRuntime": "Встановлення менеджера пакетів Python у {{distro}}", + "setupDetailInstallDeps": "Встановлення markitdown, pypdf, pdfplumber для навичок PDF/PPTX", + "setupDetailInstallLima": "Встановіть Lima для кращої ізоляції пісочниці (brew install lima)", + "setupDetailCreateLima": "Перший запуск вимагає завантаження образу та може зайняти кілька хвилин", + "setupDetailStartLima": "Запуск VM може зайняти кілька хвилин", + "setupDetailInstallNodeLima": "Встановлення середовища виконання Node.js у Lima VM", + "setupDetailInstallPythonLima": "Встановлення середовища виконання Python у Lima VM", + "syncingFilesMessage": "Синхронізація файлів до пісочниці...", + "syncingSkillsMessage": "Налаштування навичок...", + "syncReadyMessage": "Пісочниця готова", + "syncFailedMessage": "Синхронізація пісочниці не вдалася", + "syncDetailWsl": "Копіювання файлів проєкту до ізольованого середовища WSL", + "syncDetailLima": "Копіювання файлів проєкту до ізольованого середовища Lima", + "syncDetailSkills": "Копіювання вбудованих навичок до пісочниці", + "syncDetailFallback": "Перехід до режиму прямого доступу (менш безпечно)", + "syncDetailCompleted": "Синхронізовано {{count}} файлів" + }, + "mcp": { + "noConnectors": "Конекторів не налаштовано", + "addConnector": "Додайте конектор, щоб увімкнути інструменти MCP", + "toolsAvailable": "Доступний {{count}} інструмент", + "toolsAvailable_plural": "Доступно {{count}} інструментів", + "connected": "Підключено", + "notConnected": "Не підключено", + "connecting": "Підключення...", + "failed": "Збій з'єднання", + "chromeHint": "Нове вікно налагодження Chrome відкриється автоматично, якщо порт недоступний", + "quickAddPresets": "Швидке додавання пресетів", + "show": "Показати", + "hide": "Сховати", + "addCustomConnector": "Додати власний конектор", + "configure": "Налаштувати", + "added": "Додано", + "requiresToken": "Потрібен token", + "editConnector": "Редагувати конектор", + "addConnectorTitle": "Додати власний конектор", + "name": "Назва", + "namePlaceholder": "Chrome MCP Server", + "type": "Тип", + "typeStdioLocal": "STDIO (Локальний)", + "typeSseRemote": "SSE (Віддалений)", + "typeStreamableHttp": "HTTP (Streamable)", + "command": "Команда", + "commandPlaceholder": "npx", + "arguments": "Аргументи", + "argumentsPlaceholder": "-y chrome-devtools-mcp@latest --browser-url http://localhost:9222", + "spaceSeparated": "Аргументи, розділені пробілами", + "url": "URL", + "enableConnector": "Увімкнути цей конектор", + "presetAlreadyConfigured": "Конектор \"{{name}}\" уже налаштовано", + "envValuePlaceholder": "Введіть значення", + "removeVar": "Видалити", + "loadServersFailed": "Не вдалося завантажити конектори", + "saveServerFailed": "Не вдалося зберегти конектор", + "deleteServerFailed": "Не вдалося видалити конектор", + "deleteConnectorConfirm": "Видалити цей конектор?", + "commandRequired": "Команда обов'язкова", + "urlRequired": "URL обов'язковий", + "toolCount": "{{count}} інструментів", + "callCount": "{{count}} викликів" + }, + "credentials": { + "envVars": "Змінні середовища", + "enterEnvVar": "Введіть назву змінної середовища (напр., NOTION_TOKEN):", + "usedForTokens": "Використовується для token-ів та секретів (напр., NOTION_TOKEN)", + "noEnvVars": "Змінних середовища не налаштовано" + }, + "skills": { + "storagePathHint": "Виберіть, де зберігаються користувацькі навички та як застосунок їх оновлює.", + "builtinSkillsDesc": "Вбудовані навички постачаються із застосунком і можуть бути перемкнені за потреби.", + "pluginsTitle": "Плагіни та імпорти", + "pluginsDesc": "Переглядайте плагіни маркетплейсу або імпортуйте власні навички з локальної теки.", + "title": "📦 Навички", + "description": "Навички розширюють можливості Claude спеціалізованими знаннями та інструментами.", + "builtinSkills": "Вбудовані навички", + "customSkills": "Користувацькі навички", + "noCustomSkills": "Користувацьких навичок не встановлено", + "installSkillsDesc": "Встановіть навички, щоб розширити можливості Claude", + "browsePlugins": "Переглянути плагіни", + "pluginListTitle": "Переглянути маркетплейс плагінів Claude", + "pluginSkillCount": "Навичок для встановлення: {{count}}", + "pluginComponents": "Компоненти: навички {{skills}} · команди {{commands}} · агенти {{agents}} · хуки {{hooks}} · mcp {{mcp}}", + "pluginComponentsAvailableAfterInstall": "Деталі компонентів будуть доступні після встановлення.", + "pluginInstall": "Встановити", + "pluginInstalled": "Встановлено", + "pluginInstallSuccess": "Плагін \"{{name}}\" успішно встановлено", + "pluginInstallFailed": "Не вдалося встановити плагін", + "pluginNoSkills": "Цей плагін не має навичок для встановлення у V1", + "pluginNoComponents": "Цей плагін не має компонентів для завантаження", + "pluginManage": "Керувати", + "pluginEnable": "Увімкнути", + "pluginDisable": "Вимкнути", + "pluginUninstall": "Видалити плагін \"{{name}}\"?", + "pluginManageUninstall": "Видалити", + "pluginUninstalled": "Плагін \"{{name}}\" видалено", + "pluginComponentHooksDisabledByDefault": "Цей плагін містить хуки. Хуки вимкнено за замовчуванням і їх можна увімкнути в налаштуваннях керування після встановлення.", + "pluginComponentMcpDisabledByDefault": "Цей плагін містить MCP. MCP вимкнено за замовчуванням і його можна увімкнути в налаштуваннях керування після встановлення.", + "pluginAppliedInRuntime": "Налаштування плагіна наразі застосовано у середовищі виконання", + "pluginDisabled": "Плагін наразі вимкнено", + "noPluginsFound": "Немає доступних плагінів", + "storagePathTitle": "Тека сховища навичок", + "storagePathUnavailable": "Шлях сховища недоступний", + "selectStoragePath": "Вибрати теку", + "openStoragePath": "Відкрити теку", + "refreshSkills": "Оновити навички", + "storagePathUpdated": "Сховище оновлено. Перенесено {{migrated}} навичок, пропущено {{skipped}}", + "storagePathUpdateFailed": "Не вдалося оновити шлях сховища навичок", + "storagePathOpenFailed": "Не вдалося відкрити шлях сховища навичок", + "storagePathFallback": "Повернення до теки навичок за замовчуванням. Перевірте налаштований шлях.", + "storageWatcherError": "Помилка спостерігача теки навичок: {{message}} (увімкнено резервне опитування).", + "installSkillFromFolder": "Встановити навичку з теки", + "deleteSkill": "Видалити навичку \"{{name}}\"?", + "failedToLoad": "Не вдалося завантажити навички", + "failedToInstall": "Не вдалося встановити навичку", + "failedToDelete": "Не вдалося видалити навичку", + "failedToToggle": "Не вдалося перемкнути навичку" + }, + "logs": { + "actionsTitle": "Дії з журналами", + "title": "Журнали застосунку", + "description": "Переглядайте та експортуйте діагностичні набори для налагодження. Журнали автоматично ротуються після 10 МБ, а експорти також включають нещодавні резюме сесій та помилок.", + "inventoryDescription": "Поточний інвентар журналів та обсяг сховища.", + "recentDescription": "Нещодавні журнали застосунку, доступні для перегляду. Ви все одно можете експортувати діагностичний набір, навіть якщо файлу журналу ще не існує.", + "directoryDescription": "Поточне розташування журналів застосунку на диску.", + "actionsDescription": "Експортуйте діагностичний набір, покажіть теку журналів або очистьте файли журналів.", + "enableDevLogs": "Увімкнути журнали розробника", + "enableDevLogsDesc": "Записувати детальні журнали для налагодження. Вимкніть, щоб зменшити використання диска.", + "devLogsEnabled": "Журнали розробника увімкнено", + "devLogsDisabled": "Журнали розробника вимкнено", + "toggleFailed": "Не вдалося перемкнути журнали розробника", + "logFiles": "Файли журналів", + "totalSize": "Загальний розмір", + "noLogFiles": "Файлів журналів не знайдено", + "logsDirectory": "Тека журналів:", + "exportZip": "Експортувати діагностику", + "openFolder": "Відкрити теку", + "clearAll": "Очистити все", + "clearConfirm": "Ви впевнені, що хочете очистити всі файли журналів? Цю дію неможливо скасувати.", + "exportSuccess": "Діагностику успішно експортовано до {{path}}", + "clearSuccess": "Очищено {{count}} файлів журналів", + "exportFailed": "Не вдалося експортувати журнали", + "clearFailed": "Не вдалося очистити журнали", + "helpText1": "Експортований діагностичний набір за замовчуванням включає журнали застосунку, відредагований знімок середовища виконання та лише метадані резюме сесій/помилок без тіл повідомлень.", + "helpText2": "Поширення цього набору зазвичай дозволяє нам набагато швидше звузити проблеми, незалежно від того, чи виникають вони з інтерфейсу, виконання інструментів чи локального середовища." + }, + "sidebar": { + "recents": "Нещодавні", + "expandToView": "Розгорнути для перегляду завдань", + "noTasks": "Завдань ще немає", + "noTasksHint": "Почніть новий чат, щоб почати створювати, досліджувати або редагувати файли.", + "search": "Шукати розмови...", + "deleteAll": "Видалити всі розмови", + "localTasks": "Ці завдання виконуються локально та не синхронізуються між пристроями.", + "apiConfigured": "API налаштовано", + "apiNotConfigured": "API не налаштовано", + "user": "Користувач", + "newTask": "Новий чат", + "newTaskHint": "Почати нову розмову", + "today": "Сьогодні", + "yesterday": "Учора", + "previousWeek": "Попередні 7 днів", + "older": "Старіші", + "settings": "Налаштування", + "themeToggle": "Перемкнути тему", + "manage": "Керувати", + "selectAll": "Вибрати все", + "deselectAll": "Скасувати вибір усього", + "nSelected": "Вибрано: {{count}}", + "batchDeleteConfirm": "Видалити {{count}} розмов? Це неможливо скасувати.", + "cancel": "Скасувати", + "confirmDelete": "Видалити" + }, + "chat": { + "sendMessage": "Надіслати повідомлення", + "stop": "Зупинити", + "processing": "Обробка...", + "typeMessage": "Введіть повідомлення...", + "loadingConversation": "Завантаження розмови...", + "startConversation": "Почати розмову", + "startFailed": "Не вдалося запустити сесію. Спробуйте ще раз.", + "disclaimer": "Open Cowork працює на основі ШІ та може помилятися. Будь ласка, перевіряйте відповіді.", + "noModel": "Немає моделі", + "connectorCount_one": "{{count}} конектор", + "connectorCount_other": "{{count}} конекторів" + }, + "context": { + "progress": "Прогрес", + "artifacts": "Артефакти", + "context": "Контекст", + "workingDirectory": "Робоча тека", + "toolsUsed": "Використані інструменти", + "mcpConnectors": "Конектори MCP", + "copied": "Скопійовано!", + "noToolsUsedYet": "Інструментів ще не використано", + "toolsUsedLabel": "Використані інструменти:", + "noFolderSelected": "Теку не вибрано", + "expandPanel": "Розгорнути панель", + "collapsePanel": "Згорнути панель", + "queuedMessages": "Повідомлень у черзі: {{count}}", + "stepsWillShow": "Кроки відображатимуться в міру виконання завдання.", + "noArtifactsYet": "Артефактів ще немає", + "revealFailed": "Не вдалося знайти файл. Перевірте, чи існує шлях.", + "fileCreated": "Файл створено", + "callNumber": "Виклик №{{number}}", + "input": "Вхід:", + "output": "Вихід:", + "tokenUsage": "Використання token-ів", + "inputTokens": "Вхідні", + "outputTokens": "Вихідні", + "totalTokens": "Усього", + "changeDir": "Змінити теку", + "changeDirFailed": "Не вдалося змінити теку", + "copyPath": "Копіювати шлях", + "openInFileManager": "Відкрити у файловому менеджері", + "contextUsage": "Використання контексту", + "contextUsageLabel": "{{used}} / {{total}}" + }, + "messageCard": { + "request": "Запит", + "queued": "У черзі", + "cancelled": "Скасовано", + "emptyMessage": "Порожнє повідомлення", + "emptyText": "(порожній текст)", + "copyMessage": "Копіювати повідомлення", + "revealInFolder": "Показати в теці", + "pastedContentAlt": "Вставлений вміст", + "taskProgress": "Прогрес завдання", + "noQuestions": "Немає запитань", + "question": "Запитання", + "thinking": "Мислення", + "executionTime": "Час виконання: {{time}}" + }, + "schedule": { + "createTitle": "Створити розклад", + "editTitle": "Редагувати розклад", + "autoTitleLabel": "Автоматична назва (використовується для ідентифікації сесій)", + "autoTitleChangedHint": "Запит змінено. Назву буде перегенеровано після збереження.", + "autoTitleUnchangedHint": "Якщо запит залишиться незмінним, наявну назву буде збережено.", + "autoTitleEditingChanged": "Після збереження назву буде перегенеровано із запиту з префіксом [Scheduled Task].", + "autoTitleEditingUnchanged": "Після збереження назву буде згенеровано з префіксом [Scheduled Task].", + "autoTitleCreating": "Після збереження назву буде згенеровано з префіксом [Scheduled Task] та резюме моделі.", + "promptPlaceholder": "Запит для автоматичного виконання у запланований час", + "cwdPlaceholder": "Робоча тека (за замовчуванням — поточний робочий простір)", + "executionTime": "Час виконання", + "executionTimeHint": "Нові розклади віддають перевагу багатослотовому таймінгу; застарілі інтервальні правила все ще можна редагувати.", + "enabled": "Увімкнено", + "mode": "Режим виконання", + "weekday": "Дні тижня", + "weekdayPlaceholder": "Виберіть дні тижня", + "times": "Часові слоти", + "timePlaceholder": "Виберіть час", + "legacyIntervalNotice": "Це завдання походить із застарілого правила з фіксованим інтервалом і збереже цей режим при збереженні.", + "onceTimeLabel": "Виберіть час одноразового виконання", + "legacyStartTimeLabel": "Виберіть час початку для застарілого інтервального правила", + "dailyHint": "Запускати автоматично в цей час щодня.", + "weeklyHint": "Запускати автоматично у вибрані дні тижня та часові слоти.", + "saveChanges": "Зберегти зміни", + "createTask": "Створити завдання", + "cancelEdit": "Скасувати редагування", + "listHint": "Вимкнення лише блокує майбутні автоматичні запуски. Уже розпочаті сесії потрібно зупиняти вручну зі списку сесій.", + "empty": "Розкладів ще немає", + "loadFailed": "Не вдалося завантажити розклади", + "promptRequired": "Введіть запит для виконання", + "dailyTimesRequired": "Виберіть щонайменше один щоденний часовий слот", + "weeklyTimesRequired": "Виберіть щонайменше один щотижневий часовий слот", + "weekdayRequired": "Виберіть щонайменше один день тижня", + "invalidTime": "Введіть дійсний час виконання", + "nextRunCalculationFailed": "Поточне правило не може обчислити наступний час запуску", + "futureTimeRequired": "Час виконання має бути пізнішим за поточний. Скористайтеся \"Запустити зараз\", якщо хочете запустити негайно.", + "taskMissing": "Завдання більше не існує або було видалено", + "updated": "Розклад оновлено", + "created": "Розклад створено", + "saveFailed": "Не вдалося зберегти розклад", + "toggleFailed": "Не вдалося перемкнути стан розкладу", + "runNowSuccess": "Запущено негайне виконання", + "runNowFailed": "Не вдалося запустити негайно", + "noSessionToStop": "Це завдання не має сесії виконання для зупинки", + "sessionNotRunning": "Це завдання наразі не має запущеної сесії", + "stopSent": "Команду зупинки надіслано", + "stopFailed": "Не вдалося зупинити виконання", + "deleteConfirm": "Видалити розклад \"{{title}}\"?", + "deleted": "Розклад видалено", + "deleteFailed": "Не вдалося видалити розклад", + "statusRunning": "Виконується", + "statusFinished": "Завершено", + "statusUnknown": "Невідомо", + "statusNone": "Немає", + "taskEnabled": "Увімкнено", + "taskDisabled": "Вимкнено", + "nextRun": "Наступний запуск: {{value}}", + "nextRunNone": "Наступний запуск: Немає", + "strategy": "Правило розкладу: {{value}}", + "lastRun": "Останній запуск: {{value}}", + "lastRunNever": "Останній запуск: Ще не запускалося", + "recentSession": "Остання сесія: {{value}}", + "sessionStatus": "Стан сесії: {{value}}", + "cwd": "Тека: {{value}}", + "lastError": "Остання помилка: {{value}}", + "disable": "Вимкнути", + "enable": "Увімкнути", + "runNow": "Запустити зараз", + "stopExecution": "Зупинити виконання", + "edit": "Редагувати", + "delete": "Видалити", + "stopRunTitleActive": "Зупинити останню сесію виконання цього завдання", + "stopRunTitleIdle": "Це завдання наразі не має запущеної сесії", + "repeatEveryMinute_one": "Кожну {{count}} хвилину", + "repeatEveryMinute_other": "Кожні {{count}} хвилин", + "repeatEveryHour_one": "Кожну {{count}} годину", + "repeatEveryHour_other": "Кожні {{count}} годин", + "repeatEveryDay_one": "Кожен {{count}} день", + "repeatEveryDay_other": "Кожні {{count}} днів", + "ruleDaily": "Щодня о {{times}}", + "ruleWeekly": "Щотижня у {{weekdays}} о {{times}}", + "ruleOnce": "Одноразово", + "previewNextRun": "Очікуваний наступний запуск: {{value}}", + "previewSelectValidTime": "Виберіть дійсний час виконання", + "previewSelectAtLeastOne": "Виберіть щонайменше один дійсний часовий слот", + "previewAutoFind": "Система автоматично вибере наступний час запуску: {{value}}", + "weekdayMonday": "Пн", + "weekdayTuesday": "Вт", + "weekdayWednesday": "Ср", + "weekdayThursday": "Чт", + "weekdayFriday": "Пт", + "weekdaySaturday": "Сб", + "weekdaySunday": "Нд", + "modeOnce": "Одноразово", + "modeDaily": "Щодня", + "modeWeekly": "Щотижня", + "repeatUnitMinute": "Хвилина", + "repeatUnitHour": "Година", + "repeatUnitDay": "День", + "unknownWeekday": "Невідомо", + "pickerEditTimes": "Редагувати часові слоти", + "pickerAnyHHmm": "Ви можете ввести будь-яке значення `HH:mm`", + "pickerSelectedCount_one": "Вибрано: {{count}}", + "pickerSelectedCount_other": "Вибрано: {{count}}", + "pickerAdd": "Додати", + "pickerSelectedTimes": "Вибраний час", + "pickerNone": "Часові слоти ще не вибрано", + "pickerSuggestions": "Пропозиції" + }, + "remote": { + "title": "Віддалене керування", + "statusRunning": "Працює. Доступно через Feishu.", + "statusStopped": "Зупинено", + "startService": "Запустити службу", + "stopService": "Зупинити службу", + "activeSessions": "Активні сесії", + "authorizedUsers": "Авторизовані користувачі", + "pendingApprovals": "Очікують схвалення", + "pairingRequests": "Запити на з'єднання, що очікують схвалення", + "unknownUser": "Невідомий користувач", + "pairingCode": "Код з'єднання", + "approve": "Схвалити", + "stepFeishu": "Налаштування Feishu", + "stepConnection": "З'єднання", + "stepAdvanced": "Розширені", + "feishuTitle": "Налаштування бота Feishu", + "feishuDesc": "Створіть застосунок у Feishu Open Platform, потім заповніть облікові дані тут.", + "dmPolicy": "Політика авторизації особистих повідомлень", + "policyPairing": "Перевірка з'єднання", + "policyPairingDesc": "Користувачі повинні ввести код з'єднання.", + "policyAllowlist": "Список дозволених", + "policyAllowlistDesc": "Дозволено лише певним користувачам.", + "policyOpen": "Відкритий доступ", + "policyOpenDesc": "Будь-хто може використовувати бота.", + "openFeishu": "Відкрити Feishu Open Platform", + "slackTitle": "Налаштування бота Slack", + "slackDesc": "Створіть застосунок Slack, встановіть його у свій робочий простір, потім заповніть облікові дані тут.", + "slackBotToken": "Bot User OAuth Token", + "slackAppToken": "App-Level Token (для Socket Mode)", + "slackSocketMode": "Socket Mode", + "slackSocketModeDesc": "Підключення назовні до Slack. Публічна IP-адреса не потрібна.", + "openSlack": "Відкрити Slack API", + "connectionTitle": "Режим з'єднання", + "connectionDesc": "Виберіть, як сервери Feishu взаємодіють з вашим комп'ютером.", + "longConnection": "Режим тривалого з'єднання", + "recommended": "Рекомендовано", + "longConnectionDesc": "Застосунок підключається назовні до серверів Feishu. Публічна IP-адреса або ngrok не потрібні.", + "noPublicInternet": "Без публічного доступу з інтернету", + "outOfBox": "Працює одразу", + "stableReliable": "Стабільно та надійно", + "webhookMode": "Режим Webhook", + "webhookDesc": "Feishu надсилає повідомлення на ваш сервер. Потрібна публічно доступна адреса.", + "localWebhookUrl": "Локальний webhook URL", + "useBuiltInNgrok": "Використати вбудований ngrok", + "ngrokHelpPrefix": "Отримайте безкоштовно на", + "ngrokHelpSuffix": "", + "tunnelConnected": "Тунель підключено", + "longConnectionHint": "У Feishu Open Platform перейдіть до Events & Callbacks > Event Configuration і перемкніть режим підписки на тривале з'єднання.", + "advancedTitle": "Розширені налаштування", + "advancedDesc": "Налаштуйте поведінку віддаленого керування.", + "defaultWorkingDirectory": "Робоча тека за замовчуванням", + "defaultWorkingDirectoryPlaceholder": "Наприклад: C:\\Users\\your-name\\Projects", + "defaultWorkingDirectoryHint": "Це тека за замовчуванням для команд ШІ. Ви також можете перевизначити її в повідомленні за допомогою `[cwd:path]`.", + "gatewayPort": "Порт служби", + "autoApproveSafeTools": "Автосхвалення безпечних інструментів", + "autoApproveSafeToolsDesc": "Автоматично дозволяти безпечні інструменти, такі як читання файлів та операції браузера.", + "saveConfig": "Зберегти конфігурацію", + "authorizedUsersTitle": "Авторизовані користувачі ({{count}})", + "revokeAccess": "Відкликати доступ", + "quickStart": "Швидкий старт", + "quickStartStep1": "Створіть застосунок у Feishu Open Platform і додайте можливість Bot.", + "quickStartStep2": "Скопіюйте App ID та App Secret у поля вище.", + "quickStartStep3": "Увімкніть ці дозволи в налаштуваннях дозволів:", + "quickStartStep4": "В Event Configuration Feishu виберіть режим подій тривалого з'єднання.", + "quickStartStep5Prefix": "Підпишіться на подію", + "quickStartStep5Suffix": ".", + "quickStartStep6": "Опублікуйте застосунок, потім натисніть Запустити службу.", + "started": "Віддалене керування запущено", + "stopped": "Віддалене керування зупинено", + "actionFailed": "Операція не вдалася", + "configSaved": "Конфігурацію збережено", + "saveFailed": "Не вдалося зберегти конфігурацію", + "pairingApproved": "З'єднання схвалено", + "approveFailed": "Не вдалося схвалити з'єднання", + "reject": "Відхилити", + "pairingRejected": "З'єднання відхилено", + "rejectFailed": "Не вдалося відхилити з'єднання", + "pairingGuideTitle": "Посібник зі з'єднання", + "pairingGuideStep1": "Відкрийте Feishu і знайдіть бота", + "pairingGuideStep2": "Надішліть будь-яке повідомлення, щоб ініціювати з'єднання", + "pairingGuideStep3": "Схваліть запит на з'єднання нижче", + "pairingGuideStep4": "Готово — користувач тепер може спілкуватися з ботом", + "waitingForPairing": "Очікування на ініціювання з'єднання користувачами...", + "expiresIn": "Закінчується через {{time}}", + "userRemoved": "Користувача видалено", + "revokeFailed": "Не вдалося видалити користувача", + "copied": "Скопійовано" + }, + "time": { + "now": "зараз" + }, + "permission": { + "permissionRequired": "Потрібен дозвіл", + "tool": "Інструмент:", + "input": "Вхід:", + "warning": "Ця дія може змінити вашу систему. Уважно перегляньте.", + "deny": "Відхилити", + "allow": "Дозволити", + "alwaysAllow": "Завжди дозволяти цей інструмент", + "useTool": "Використати інструмент {{toolName}}", + "toolDescriptions": { + "write": "Записувати у файли вашої системи", + "edit": "Редагувати наявні файли вашої системи", + "bash": "Виконувати команди оболонки", + "webFetch": "Отримувати дані з вебу", + "webSearch": "Шукати в вебі", + "read_file": "Читати файли в робочому просторі", + "write_file": "Записувати файли в робочому просторі", + "edit_file": "Редагувати файли в робочому просторі", + "list_directory": "Переглядати вміст теки в робочому просторі", + "execute_command": "Виконувати команди оболонки в робочому просторі", + "glob": "Шукати файли за шаблоном", + "grep": "Шукати у вмісті файлів" + } + }, + "sudo": { + "title": "Потрібен дозвіл адміністратора", + "description": "Наступна команда вимагає прав адміністратора:", + "passwordLabel": "Пароль", + "passwordPlaceholder": "Введіть свій пароль", + "cancel": "Скасувати", + "execute": "Виконати", + "warning": "Ваш пароль буде використано лише для цієї команди і не буде збережено." + }, + "errorBoundary": { + "title": "Щось пішло не так", + "description": "У застосунку сталася неочікувана помилка. Ви можете спробувати відновити роботу, натиснувши кнопку нижче.", + "details": "Деталі помилки", + "retry": "Спробувати ще раз" + } +} From 301c60b3ed44333809aea19c332a8a6678326c1e Mon Sep 17 00:00:00 2001 From: Craig Allan-McWilliams Date: Tue, 16 Jun 2026 16:53:16 +0100 Subject: [PATCH 2/2] fix(i18n): address review feedback on European locales - Fix the active-language highlight in SettingsGeneral: the old `startsWith('zh') ? 'zh' : 'en'` logic never matched the new languages. Normalize to the base code (es-ES -> es, zh-CN -> zh) and map Norwegian nb/nn -> the shipped `no` locale. - Add nb/nn -> no fallback and `nonExplicitSupportedLngs` so browser region variants (e.g. es-ES, de-DE, nb-NO) resolve to the right locale. - Restore the original Chinese comments in i18n/config.ts (only functional changes remain in the diff). - Add memory.* and api.* keys to en.json/zh.json so all 12 locales share an identical key set (these mirror #246). - Add a Vitest key-parity test (src/tests/i18n/) asserting every locale has exactly the same keys as en.json, to catch future drift. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../components/settings/SettingsGeneral.tsx | 6 +- src/renderer/i18n/config.ts | 68 +++++++++++++------ src/renderer/i18n/locales/en.json | 40 ++++++++++- src/renderer/i18n/locales/zh.json | 40 ++++++++++- src/tests/i18n/locale-key-parity.test.ts | 58 ++++++++++++++++ 5 files changed, 188 insertions(+), 24 deletions(-) create mode 100644 src/tests/i18n/locale-key-parity.test.ts diff --git a/src/renderer/components/settings/SettingsGeneral.tsx b/src/renderer/components/settings/SettingsGeneral.tsx index cc941213..c0d95e4c 100644 --- a/src/renderer/components/settings/SettingsGeneral.tsx +++ b/src/renderer/components/settings/SettingsGeneral.tsx @@ -6,7 +6,11 @@ export function SettingsGeneral() { const { i18n, t } = useTranslation(); const settings = useAppStore((s) => s.settings); const updateSettings = useAppStore((s) => s.updateSettings); - const currentLang = i18n.language.startsWith('zh') ? 'zh' : 'en'; + // Normalize the active language to its base code so the highlight matches + // every supported language (e.g. "es-ES" -> "es", "zh-CN" -> "zh"), and map + // Norwegian variants (nb/nn) to the "no" locale we ship. + const baseLang = i18n.language.split('-')[0]; + const currentLang = baseLang === 'nb' || baseLang === 'nn' ? 'no' : baseLang; const [appVer, setAppVer] = useState(''); useEffect(() => { try { diff --git a/src/renderer/i18n/config.ts b/src/renderer/i18n/config.ts index 60836607..fb0a5d8b 100644 --- a/src/renderer/i18n/config.ts +++ b/src/renderer/i18n/config.ts @@ -16,33 +16,59 @@ import nlTranslations from './locales/nl.json'; import roTranslations from './locales/ro.json'; i18n - .use(LanguageDetector) // auto-detect the browser/UI language - .use(initReactI18next) // initialize react-i18next + .use(LanguageDetector) // 自动检测浏览器语言 + .use(initReactI18next) // 初始化 react-i18next .init({ resources: { - en: { translation: enTranslations }, - zh: { translation: zhTranslations }, - es: { translation: esTranslations }, - fr: { translation: frTranslations }, - de: { translation: deTranslations }, - it: { translation: itTranslations }, - uk: { translation: ukTranslations }, - pl: { translation: plTranslations }, - sv: { translation: svTranslations }, - no: { translation: noTranslations }, - nl: { translation: nlTranslations }, - ro: { translation: roTranslations }, + en: { + translation: enTranslations, + }, + zh: { + translation: zhTranslations, + }, + es: { + translation: esTranslations, + }, + fr: { + translation: frTranslations, + }, + de: { + translation: deTranslations, + }, + it: { + translation: itTranslations, + }, + uk: { + translation: ukTranslations, + }, + pl: { + translation: plTranslations, + }, + sv: { + translation: svTranslations, + }, + no: { + translation: noTranslations, + }, + nl: { + translation: nlTranslations, + }, + ro: { + translation: roTranslations, + }, }, - fallbackLng: 'en', // default language - supportedLngs: ['en', 'zh', 'es', 'fr', 'de', 'it', 'uk', 'pl', 'sv', 'no', 'nl', 'ro'], + // 默认语言;挪威语 nb/nn 回退到 no + fallbackLng: { nb: ['no'], nn: ['no'], default: ['en'] }, + supportedLngs: ['en', 'zh', 'es', 'fr', 'de', 'it', 'uk', 'pl', 'sv', 'no', 'nl', 'ro'], // 支持的语言 + nonExplicitSupportedLngs: true, // 接受区域变体,例如 es-ES → es、zh-CN → zh interpolation: { - escapeValue: false, // React already guards against XSS + escapeValue: false, // React 已经处理了 XSS }, - pluralSeparator: '_', // plural separator - contextSeparator: '_', // context separator + pluralSeparator: '_', // 复数分隔符 + contextSeparator: '_', // 上下文分隔符 detection: { - order: ['localStorage', 'navigator'], // check localStorage first, then the browser language - caches: ['localStorage'], // persist the language choice to localStorage + order: ['localStorage', 'navigator'], // 先检查 localStorage,再检查浏览器语言 + caches: ['localStorage'], // 将语言选择保存到 localStorage lookupLocalStorage: 'i18nextLng', // localStorage key }, }); diff --git a/src/renderer/i18n/locales/en.json b/src/renderer/i18n/locales/en.json index d99edc05..4fe49217 100644 --- a/src/renderer/i18n/locales/en.json +++ b/src/renderer/i18n/locales/en.json @@ -121,7 +121,43 @@ "clearCoreConfirm": "Clear all global core memory? This cannot be undone.", "rebuildSuccess": "Workspace memory rebuilt", "clearWorkspaceSuccess": "Workspace memory cleared", - "clearCoreSuccess": "Core memory cleared" + "clearCoreSuccess": "Core memory cleared", + "runtimeTitle": "Runtime configuration", + "runtimeDescription": "By default this inherits the currently active API configuration. Here you mainly tune navigation depth, embedding, and the on-disk directory.", + "runtimeSaved": "Memory runtime configuration saved", + "saveRuntime": "Save runtime configuration", + "storageRoot": "Storage root", + "noWorkspace": "No workspace yet", + "maxNavSteps": "Navigation steps", + "ingestionConcurrency": "Rebuild concurrency", + "useEmbedding": "Enable embedding retrieval", + "evalEnabled": "Enable real-model evaluation", + "evalArtifactsRoot": "Evaluation artifacts directory", + "evalMaxRounds": "Evaluation rounds", + "promptIterationRounds": "Prompt iteration rounds", + "llmConfig": "Memory LLM", + "embeddingConfig": "Embedding", + "inheritActive": "Inherit active API", + "modelOverride": "Model override", + "baseUrlOverride": "Base URL override", + "apiKeyOverride": "API Key override", + "allSources": "All sources", + "groupRawSessions": "Raw sessions", + "sourceFile": "Source file", + "inspectSession": "Inspect session memory", + "inspectSessionHint": "Select a session or chunk from the results above to inspect it.", + "revealInFinder": "Reveal in Finder", + "rebuildAll": "Rebuild all memory", + "rebuildAllConfirm": "This will clear and rebuild all memory. Continue?", + "rebuildAllSuccess": "Rebuilt all memory: {{sessionCount}} session(s), {{workspaceCount}} source workspace(s)", + "filesTitle": "Raw file viewer", + "filesDescription": "View the core / unified experience / session_state / eval artifacts exactly as they are written to disk.", + "fileList": "File list", + "refreshFiles": "Refresh", + "noFiles": "No memory files yet", + "fileContent": "File content", + "emptyFile": "File is empty", + "selectFileHint": "Select a file on the left to view its raw JSON." }, "language": { "english": "English", @@ -153,6 +189,8 @@ "configSetRenamed": "Config set renamed", "configSetDeleted": "Config set deleted", "configSetSwitched": "Config set switched", + "defaultConfigSetName": "Default", + "configSetFallbackName": "Config set {{index}}", "provider": "API Provider", "providerDescription": "Choose the provider family and the broad protocol style for this workspace.", "apiKey": "API Key", diff --git a/src/renderer/i18n/locales/zh.json b/src/renderer/i18n/locales/zh.json index 299df1ab..ac10a400 100644 --- a/src/renderer/i18n/locales/zh.json +++ b/src/renderer/i18n/locales/zh.json @@ -121,7 +121,43 @@ "clearCoreConfirm": "确认清空全局 core memory?此操作不可撤销。", "rebuildSuccess": "工作区记忆已重建", "clearWorkspaceSuccess": "当前工作区记忆已清空", - "clearCoreSuccess": "Core memory 已清空" + "clearCoreSuccess": "Core memory 已清空", + "runtimeTitle": "运行时配置", + "runtimeDescription": "默认继承当前激活的 API 配置。这里主要调节导航深度、embedding 和落盘目录。", + "runtimeSaved": "记忆运行时配置已保存", + "saveRuntime": "保存运行时配置", + "storageRoot": "存储根目录", + "noWorkspace": "暂无工作区", + "maxNavSteps": "导航步数", + "ingestionConcurrency": "重建并发度", + "useEmbedding": "启用 embedding 检索", + "evalEnabled": "启用真实模型评测", + "evalArtifactsRoot": "评测产物目录", + "evalMaxRounds": "评测轮数", + "promptIterationRounds": "Prompt 迭代轮数", + "llmConfig": "Memory LLM", + "embeddingConfig": "Embedding", + "inheritActive": "继承当前激活 API", + "modelOverride": "模型覆盖", + "baseUrlOverride": "Base URL 覆盖", + "apiKeyOverride": "API Key 覆盖", + "allSources": "全部来源", + "groupRawSessions": "原始会话", + "sourceFile": "来源文件", + "inspectSession": "查看会话记忆", + "inspectSessionHint": "从上方搜索结果中选择一个 session 或 chunk 后查看", + "revealInFinder": "在 Finder 中显示", + "rebuildAll": "重建全部记忆", + "rebuildAllConfirm": "这会清空并重建全部记忆,是否继续?", + "rebuildAllSuccess": "已重建全部记忆:{{sessionCount}} 个会话,{{workspaceCount}} 个来源工作区", + "filesTitle": "原始文件查看", + "filesDescription": "直接查看实际落盘的 core / unified experience / session_state / eval artifacts。", + "fileList": "文件列表", + "refreshFiles": "刷新", + "noFiles": "还没有记忆文件", + "fileContent": "文件内容", + "emptyFile": "文件为空", + "selectFileHint": "选择左侧文件后即可查看原始 JSON。" }, "language": { "english": "English", @@ -153,6 +189,8 @@ "configSetRenamed": "配置方案已重命名", "configSetDeleted": "配置方案已删除", "configSetSwitched": "已切换配置方案", + "defaultConfigSetName": "默认方案", + "configSetFallbackName": "配置方案 {{index}}", "provider": "API 提供商", "providerDescription": "为当前工作区选择提供商家族和协议风格。", "apiKey": "API 密钥", diff --git a/src/tests/i18n/locale-key-parity.test.ts b/src/tests/i18n/locale-key-parity.test.ts new file mode 100644 index 00000000..b4012b7d --- /dev/null +++ b/src/tests/i18n/locale-key-parity.test.ts @@ -0,0 +1,58 @@ +import { describe, expect, it } from 'vitest'; + +import en from '../../renderer/i18n/locales/en.json'; +import zh from '../../renderer/i18n/locales/zh.json'; +import es from '../../renderer/i18n/locales/es.json'; +import fr from '../../renderer/i18n/locales/fr.json'; +import de from '../../renderer/i18n/locales/de.json'; +import itLocale from '../../renderer/i18n/locales/it.json'; +import uk from '../../renderer/i18n/locales/uk.json'; +import pl from '../../renderer/i18n/locales/pl.json'; +import sv from '../../renderer/i18n/locales/sv.json'; +import no from '../../renderer/i18n/locales/no.json'; +import nl from '../../renderer/i18n/locales/nl.json'; +import ro from '../../renderer/i18n/locales/ro.json'; + +type JsonObject = Record; + +/** Collect the dotted paths of every leaf value in a locale object. */ +function flattenKeys(obj: JsonObject, prefix = '', out: string[] = []): string[] { + for (const [key, value] of Object.entries(obj)) { + const path = prefix ? `${prefix}.${key}` : key; + if (value !== null && typeof value === 'object' && !Array.isArray(value)) { + flattenKeys(value as JsonObject, path, out); + } else { + out.push(path); + } + } + return out; +} + +const enKeys = new Set(flattenKeys(en as unknown as JsonObject)); + +// en.json is the source of truth; every other locale must match it exactly so +// no UI string silently goes untranslated (or a stale key lingers) after edits. +const locales: Record = { + zh: zh as unknown as JsonObject, + es: es as unknown as JsonObject, + fr: fr as unknown as JsonObject, + de: de as unknown as JsonObject, + it: itLocale as unknown as JsonObject, + uk: uk as unknown as JsonObject, + pl: pl as unknown as JsonObject, + sv: sv as unknown as JsonObject, + no: no as unknown as JsonObject, + nl: nl as unknown as JsonObject, + ro: ro as unknown as JsonObject, +}; + +describe('locale key parity', () => { + for (const [code, data] of Object.entries(locales)) { + it(`${code}.json has exactly the same keys as en.json`, () => { + const keys = new Set(flattenKeys(data)); + const missing = [...enKeys].filter((key) => !keys.has(key)); + const extra = [...keys].filter((key) => !enKeys.has(key)); + expect({ missing, extra }).toEqual({ missing: [], extra: [] }); + }); + } +});