diff --git a/go.mod b/go.mod index c3c05f96d..89e25c598 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/aws/aws-sdk-go-v2/config v1.32.17 github.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.6 github.com/bwmarrin/discordgo v0.29.0 - github.com/caarlos0/env/v11 v11.4.0 + github.com/caarlos0/env/v11 v11.4.1 github.com/charmbracelet/lipgloss v1.1.0 github.com/creack/pty v1.1.24 github.com/eclipse/paho.mqtt.golang v1.5.1 @@ -31,7 +31,7 @@ require ( github.com/mymmrac/telego v1.9.0 github.com/open-dingtalk/dingtalk-stream-sdk-go v0.9.1 github.com/openai/openai-go/v3 v3.22.0 - github.com/pion/rtp v1.10.1 + github.com/pion/rtp v1.10.2 github.com/pion/webrtc/v3 v3.3.6 github.com/pmezard/go-difflib v1.0.0 github.com/rs/zerolog v1.35.1 diff --git a/go.sum b/go.sum index 27fbdab1d..d680a6f08 100644 --- a/go.sum +++ b/go.sum @@ -63,8 +63,8 @@ github.com/bytedance/sonic v1.15.1 h1:nJD5PmM0vY7J8CT6MxoqbVAAMhkSmV2HgRAUrrpLoO github.com/bytedance/sonic v1.15.1/go.mod h1:mT2NbXunuaEbnZ+mRIX/vYqKISmgEuHFDI4UzmKx2SA= github.com/bytedance/sonic/loader v0.5.1 h1:Ygpfa9zwRCCKSlrp5bBP/b/Xzc3VxsAW+5NIYXrOOpI= github.com/bytedance/sonic/loader v0.5.1/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= -github.com/caarlos0/env/v11 v11.4.0 h1:Kcb6t5kIIr4XkoQC9AF2j+8E1Jsrl3Wz/hhm1LtoGAc= -github.com/caarlos0/env/v11 v11.4.0/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U= +github.com/caarlos0/env/v11 v11.4.1 h1:fYwH0sWEsBSMPG7t4e/PEfTFzrWrpjyygXyUnWiSwEw= +github.com/caarlos0/env/v11 v11.4.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= @@ -221,8 +221,8 @@ github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81 h1:WDsQxOJDy0N1VR github.com/petermattis/goid v0.0.0-20260330135022-df67b199bc81/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtp v1.10.1 h1:xP1prZcCTUuhO2c83XtxyOHJteISg6o8iPsE2acaMtA= -github.com/pion/rtp v1.10.1/go.mod h1:rF5nS1GqbR7H/TCpKwylzeq6yDM+MM6k+On5EgeThEM= +github.com/pion/rtp v1.10.2 h1:l+f6tTDcAH6xwepaAoW791ddhuYsJlqRATOzirO04Mo= +github.com/pion/rtp v1.10.2/go.mod h1:Au8fc6cEByy8RLTwKTQTEeQqDB/SJDxwL4mZuxYA5Pk= github.com/pion/webrtc/v3 v3.3.6 h1:7XAh4RPtlY1Vul6/GmZrv7z+NnxKA6If0KStXBI2ZLE= github.com/pion/webrtc/v3 v3.3.6/go.mod h1:zyN7th4mZpV27eXybfR/cnUf3J2DRy8zw/mdjD9JTNM= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -354,8 +354,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -390,8 +388,6 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/web/frontend/src/components/app-header.tsx b/web/frontend/src/components/app-header.tsx index 700cc21e0..30c05ee45 100644 --- a/web/frontend/src/components/app-header.tsx +++ b/web/frontend/src/components/app-header.tsx @@ -294,6 +294,9 @@ export function AppHeader() { i18n.changeLanguage("zh")}> 简体中文 + i18n.changeLanguage("cs")}> + Čeština + diff --git a/web/frontend/src/i18n/index.ts b/web/frontend/src/i18n/index.ts index 4da7b3f0d..8c0248915 100644 --- a/web/frontend/src/i18n/index.ts +++ b/web/frontend/src/i18n/index.ts @@ -1,4 +1,5 @@ import dayjs from "dayjs" +import "dayjs/locale/cs" import "dayjs/locale/en" import "dayjs/locale/pt-br" import "dayjs/locale/zh-cn" @@ -11,6 +12,7 @@ import { initReactI18next } from "react-i18next" import en from "./locales/en.json" import ptBr from "./locales/pt-br.json" import zh from "./locales/zh.json" +import cs from "./locales/cs.json" dayjs.extend(relativeTime) dayjs.extend(localizedFormat) @@ -34,6 +36,9 @@ i18n zh: { translation: zh, }, + cs: { + translation: cs, + }, }, fallbackLng: "en", debug: false, @@ -48,6 +53,8 @@ i18n.on("languageChanged", (lng) => { dayjs.locale("zh-cn") } else if (lng.startsWith("pt")) { dayjs.locale("pt-br") + } else if (lng.startsWith("cs")) { + dayjs.locale("cs") } else { dayjs.locale("en") } diff --git a/web/frontend/src/i18n/locales/cs.json b/web/frontend/src/i18n/locales/cs.json new file mode 100644 index 000000000..8f3fa9a25 --- /dev/null +++ b/web/frontend/src/i18n/locales/cs.json @@ -0,0 +1,958 @@ +{ + "navigation": { + "chat": "Chat", + "model_group": "Modely", + "models": "Modely", + "credentials": "Přihlašovací údaje", + "agent_group": "Agent", + "hub": "Hub", + "skills": "Dovednosti", + "tools": "Nástroje", + "services": "Služby", + "channels_group": "Kanály", + "show_more_channels": "Více", + "show_less_channels": "Méně", + "config": "Nastavení", + "logs": "Logy" + }, + "launcherLogin": { + "title": "Přihlášení", + "description": "Zadejte heslo k dashboardu pro pokračení.", + "passwordLabel": "Heslo", + "passwordPlaceholder": "Zadejte heslo", + "submit": "Přihlásit se", + "errorInvalid": "Nesprávné heslo. Zkuste to znovu.", + "errorNetwork": "Chyba sítě. Zkuste to znovu." + }, + "launcherSetup": { + "title": "Nastavení hesla k dashboardu", + "description": "Zvolte heslo pro ochranu přístupu k dashboardu. Budete ho zadávat při každém přihlášení.", + "passwordLabel": "Heslo", + "passwordPlaceholder": "Alespoň 8 znaků", + "confirmLabel": "Potvrzení hesla", + "confirmPlaceholder": "Zopakujte heslo", + "submit": "Nastavit heslo", + "errorMismatch": "Hesla se neshodují.", + "errorNetwork": "Chyba sítě. Zkuste to znovu." + }, + "chat": { + "welcome": "Jak vám mohu dnes pomoci?", + "welcomeDesc": "Zeptejte se mě na počasí, nastavení nebo jiné úkoly. Jsem tu, abych vám pomohl.", + "placeholder": "Napište zprávu...", + "disabledPlaceholder": { + "gatewayUnknown": "Chat nedostupný: stav gateway se stále zjišťuje. Počkejte chvíli, pak stránku obnovte nebo restartujte Launcher.", + "gatewayStarting": "Chat nedostupný: gateway se spouští. Počkejte na dokončení spuštění a zkuste to znovu.", + "gatewayRestarting": "Chat nedostupný: gateway se restartuje. Počkejte na dokončení restartu.", + "gatewayStopping": "Chat nedostupný: gateway se zastavuje. Počkejte na zastavení a pak gateway spusťte znovu.", + "gatewayStopped": "Chat nedostupný: gateway není spuštěna. Klikněte na Spustit gateway v horní liště a zkuste to znovu.", + "gatewayError": "Chat nedostupný: gateway je ve stavu chyby. Zkontrolujte logy a restartujte gateway nebo Launcher.", + "websocketConnecting": "Připojování ke chat službě... Čekejte prosím.", + "websocketDisconnected": "Chat nedostupný: WebSocket spojení bylo přerušeno. Zkontrolujte síť a stav gateway, obnovte stránku nebo restartujte Launcher.", + "websocketError": "Chat nedostupný: WebSocket spojení selhalo. Zkontrolujte síť a stav gateway a zkuste to znovu.", + "noDefaultModel": "Chat nedostupný: žádný výchozí model není vybrán. Nastavte výchozí model na stránce Modely." + }, + "newChat": "Nový chat", + "notConnected": "Gateway není spuštěna. Spusťte ji pro zahájení chatu.", + "thinking": { + "step1": "Přemýšlím...", + "step2": "Analyzuji váš požadavek...", + "step3": "Připravuji odpověď...", + "step4": "Už brzy..." + }, + "reasoningLabel": "Uvažování", + "toolCallsLabel": "Volání nástrojů", + "toolCallExplanationLabel": "Poznámka k volání", + "toolCallFunctionLabel": "Shrnutí volání", + "toolCallArgumentsLabel": "Argumenty", + "showAssistantDetails": "Zobrazit úvahy a volání nástrojů", + "assistantDetailVisibility": { + "none": "Skrýt oboje", + "thought": "Zobrazit jen úvahy", + "toolCalls": "Zobrazit jen volání nástrojů", + "all": "Zobrazit oboje" + }, + "toolLabel": "Nástroj", + "codeLabel": "Kód", + "copyMessage": "Kopírovat zprávu", + "copyCode": "Kopírovat kód", + "copiedLabel": "Zkopírováno", + "expandCode": "Rozbalit kód", + "collapseCode": "Sbalit kód", + "history": "Historie", + "noHistory": "Zatím žádná historie chatu", + "historyLoadFailed": "Načtení historie chatu selhalo", + "historyOpenFailed": "Otevření historie chatu selhalo", + "loadingMore": "Načítám další...", + "deleteSession": "Smazat relaci", + "messagesCount": "{{count}} zpráv", + "noModel": "Vyberte model", + "inputDisabled": { + "notConnected": "Gateway není spuštěna. Spusťte ji pro zahájení chatu.", + "noModel": "Žádný výchozí model není nastaven. Přejděte na stránku Modely." + }, + "sendMessage": "Odeslat zprávu", + "sendHint": "Enter pro odeslání\nShift + Enter pro nový řádek", + "contextTitle": "Kontext", + "contextDetail": "Zobrazit detail", + "attachImage": "Přidat obrázky", + "removeImage": "Odebrat obrázek", + "uploadedImage": "Nahraný obrázek", + "invalidImage": "\"{{name}}\" není podporovaný formát obrázku.", + "imageTooLarge": "\"{{name}}\" překračuje limit {{size}}.", + "imageReadFailed": "Čtení souboru \"{{name}}\" selhalo.", + "empty": { + "noConfiguredModel": "Žádný model není nakonfigurován", + "noConfiguredModelDescription": "Před zahájením chatu musíte nakonfigurovat alespoň jeden AI model s API klíčem.", + "goToModels": "Přejít na Modely", + "noSelectedModel": "Žádný model není vybrán", + "noSelectedModelDescription": "Máte nakonfigurované modely, ale žádný není nastaven jako výchozí. Před zahájením chatu vyberte model.", + "notRunning": "Gateway není spuštěna", + "notRunningDescription": "Pro zahájení chatu spusťte gateway. Použijte tlačítko Spustit gateway v horní liště." + }, + "modelGroup": { + "apikey": "API Key", + "oauth": "OAuth", + "local": "Lokální" + } + }, + "header": { + "logout": { + "tooltip": "Odhlásit se", + "confirm": "Odhlásit se", + "description": "Opravdu se chcete odhlásit z dashboardu?" + }, + "gateway": { + "stopDialog": { + "title": "Zastavit gateway?", + "description": "Opravdu chcete gateway zastavit? Tím se ukončí aktivní chat relace a zastaví inference.", + "confirm": "Zastavit gateway" + }, + "action": { + "start": "Spustit gateway", + "stop": "Zastavit gateway", + "restart": "Restartovat gateway" + }, + "status": { + "starting": "Spouštění gateway...", + "restarting": "Restartování gateway...", + "stopping": "Zastavování gateway..." + }, + "restartRequired": "Změny konfigurace se projeví až po restartu gateway." + } + }, + "common": { + "cancel": "Zrušit", + "close": "Zavřít", + "save": "Uložit", + "saving": "Ukládám...", + "reset": "Resetovat", + "confirm": "Potvrdit", + "fix": "Opravit", + "saveChangesTitle": "Máte neuložené změny konfigurace", + "restartRequiredTitle": "Vyžadován restart gateway", + "restartRequiredDesc": "Nejnovější konfigurace {{name}} byla uložena. Pro aktivaci restartujte gateway." + }, + "labels": { + "loading": "Načítám..." + }, + "footer": { + "version": "Verze", + "commit": "Commit", + "build": "Build", + "version_unknown": "Neznámá" + }, + "credentials": { + "description": "Správa OAuth a token přihlašovacích údajů pro podporované providery.", + "loading": "Načítám přihlašovací údaje...", + "providers": { + "openai": { + "description": "Podporuje browser OAuth, device code a token přihlášení." + }, + "anthropic": { + "description": "Používá token přihlášení pro přístup ke Claude." + }, + "antigravity": { + "description": "Používá browser OAuth pro Google Cloud Code Assist." + } + }, + "status": { + "connected": "Připojeno", + "needsRefresh": "Vyžaduje obnovení", + "expired": "Vypršelo", + "notLoggedIn": "Nepřihlášeno" + }, + "actions": { + "browser": "Browser OAuth", + "deviceCode": "Device Code", + "stopLoading": "Zastavit načítání", + "saveToken": "Uložit", + "logout": "Odhlásit" + }, + "logoutDialog": { + "title": "Odhlásit providera?", + "description": "Tím se odstraní uložené přihlašovací údaje pro {{provider}}." + }, + "fields": { + "openaiToken": "OpenAI token", + "anthropicToken": "Anthropic token" + }, + "labels": { + "account": "Účet", + "email": "E-mail", + "project": "Projekt" + }, + "errors": { + "loadFailed": "Načtení přihlašovacích údajů selhalo", + "flowFailed": "Ověření auth flow selhalo", + "loginFailed": "Přihlášení selhalo", + "logoutFailed": "Odhlášení selhalo", + "invalidBrowserResponse": "Neplatná odpověď browser přihlášení", + "invalidDeviceResponse": "Neplatná odpověď device code", + "popupBlocked": "Nelze otevřít novou záložku. Povolte prosím pop-upy a zkuste to znovu." + }, + "flow": { + "current": "Aktuální stav autentizace", + "pending": "Čekám na autorizaci...", + "success": "Autentizace úspěšná", + "error": "Autentizace selhala", + "expired": "Autentizační relace vypršela" + }, + "device": { + "title": "OpenAI Device Login", + "description": "Otevřete ověřovací stránku a zadejte níže uvedený kód. Tato stránka se obnoví automaticky.", + "code": "Uživatelský kód", + "url": "Ověřovací URL", + "polling": "Zjišťuji stav přihlášení...", + "open": "Otevřít ověřovací stránku" + } + }, + "models": { + "description": "Nastavení API klíčů pro AI providery. V chatu jsou dostupné pouze nakonfigurované modely.", + "defaultChangeSuccess": "Výchozí model aktualizován.", + "unsavedPrompt": "Tato změna ještě nebyla uložena. Uložte ji do konfigurace modelu.", + "restartHint": "Změny konfigurace modelu se projeví po restartu gateway.", + "loadError": "Načtení modelů selhalo", + "retry": "Zkusit znovu", + "providerCatalogUnavailable": "Katalog poskytovatelů backendu není dostupný. Výběr nových poskytovatelů je zakázán, dokud se API modelů úspěšně nenačte.", + "noDefaultHintPrefix": "Zatím není nastaven žádný výchozí model. Klikněte na", + "noDefaultHintSuffix": "pro nastavení.", + "status": { + "available": "Dostupný", + "unconfigured": "Nenakonfigurován", + "unreachable": "Služba nedostupná" + }, + "badge": { + "default": "Výchozí", + "virtual": "Virtuální" + }, + "action": { + "edit": "Upravit API klíč", + "setDefault": "Nastavit jako výchozí", + "delete": "Smazat model", + "setDefaultDisabled": { + "setting": "Nastavuji jako výchozí...", + "unavailable": "Nedostupný model nelze nastavit jako výchozí", + "isDefault": "Již je výchozím modelem", + "isVirtual": "Virtuální model nelze nastavit jako výchozí", + "unsupportedProvider": "Tento poskytovatel podporuje pouze ASR a nemůže být výchozím modelem chatu." + }, + "deleteDisabled": { + "isDefault": "Výchozí model nelze smazat" + } + }, + "defaultOnSave": { + "label": "Výchozí model", + "description": "Po uložení automaticky nastavit tento model jako výchozí.", + "unsupportedProvider": "Tento poskytovatel může být uložen v seznamu modelů, ale nemůže být použit jako výchozí model chatu." + }, + "add": { + "button": "Přidat model", + "title": "Přidat vlastní model", + "description": "Přidejte OpenAI-kompatibilní nebo nativní endpoint modelu.", + "modelName": "Alias modelu", + "modelNamePlaceholder": "např. my-gpt4", + "modelNameHint": "Krátký název pro identifikaci modelu v konverzacích.", + "modelId": "Identifikátor modelu", + "modelIdPlaceholder": "např. gpt-4o nebo openai/gpt-4o", + "modelIdHint": "Pokud není uveden Provider, hodnoty jako openai/gpt-4o se interpretují ve formátu provider/model. Je-li Provider uveden, toto pole se bere jako kanonické ID modelu a neparsuje se z něj prefix providera.", + "errorRequired": "Toto pole je povinné.", + "errorDuplicateModelName": "Alias modelu již existuje. Použijte jiný název.", + "saveError": "Přidání modelu selhalo", + "saveSuccess": "Model přidán.", + "confirm": "Přidat model" + }, + "delete": { + "title": "Smazat model?", + "description": "\"{{name}}\" bude trvale odstraněn ze seznamu modelů. Tuto akci nelze vrátit.", + "confirm": "Smazat" + }, + "advanced": { + "toggle": "Pokročilé možnosti" + }, + "field": { + "provider": "Provider", + "providerPlaceholder": "např. openai", + "providerHint": "Volitelné. Pokud je uvedeno, použije se jako skutečný provider a Identifikátor modelu se bere jako kanonické ID.", + "providerInvalid": "Aktuální poskytovatel je neplatný. Vyberte podporovaného poskytovatele.", + "selectProviderFirst": "Nejprve vyberte poskytovatele", + "apiBase": "API Base URL", + "apiKey": "API Key", + "apiKeyPlaceholder": "Zadejte API klíč", + "apiKeyPlaceholderSet": "Ponechte prázdné pro zachování stávajícího klíče", + "proxy": "HTTP Proxy", + "proxyHint": "Volitelné. např. http://127.0.0.1:7890", + "authMethod": "Metoda autentizace", + "authMethodHint": "Metoda autentizace: oauth, token. Ponechte prázdné pro autentizaci API klíčem.", + "authMethodManagedHint": "Tento poskytovatel spravuje režim ověřování automaticky.", + "connectMode": "Režim připojení", + "connectModeHint": "Režim připojení pro CLI-based providery: stdio nebo grpc.", + "workspace": "Cesta k workspace", + "workspaceHint": "Pracovní adresář pro CLI-based providery (např. GitHub Copilot).", + "requestTimeout": "Timeout požadavku (s)", + "requestTimeoutHint": "Maximální počet sekund čekání na odpověď. 0 = použít výchozí.", + "rpm": "Rate Limit (RPM)", + "rpmHint": "Maximální počet požadavků za minutu. 0 = bez omezení.", + "thinkingLevel": "Úroveň uvažování", + "thinkingLevelHint": "Rozšířený thinking budget: off, low, medium, high, xhigh, adaptive.", + "providerDefault": "výchozí poskytovatele", + "maxTokensField": "Pole Max Tokens", + "maxTokensFieldHint": "Přepsat název pole požadavku pro max tokens, např. max_completion_tokens.", + "toolSchemaTransform": "Transformace schématu nástroje", + "toolSchemaTransformHint": "Volitelná transformace kompatibility pro JSON schémata nástrojů. Ponechte prázdné pro nativní chování. Podporované hodnoty: simple.", + "streamingEnabled": "Streamované výstupy", + "streamingEnabledHint": "Povolit tomuto modelu streamované požadavky. Musí být rovněž povoleno streamování v nastavení kanálu.", + "extraBody": "Extra Body", + "extraBodyHint": "Dodatečná JSON pole pro vložení do těla požadavku, např. {\"reasoning_split\": true}.", + "customHeaders": "Vlastní hlavičky", + "customHeadersHint": "Dodatečné HTTP hlavičky vkládané do každého požadavku, např. {\"X-Source\": \"coding-plan\"}.", + "invalidJson": "Neplatný formát JSON" + }, + "edit": { + "title": "Nastavení {{name}}", + "apiKeyHint": "Klíč je již nastaven. Ponechte prázdné pro zachování beze změny.", + "oauthNote": "Tento provider používá OAuth — API klíč není vyžadován.", + "saveError": "Uložení selhalo", + "saveSuccess": "Konfigurace modelu uložena." + }, + "fetch": { + "title": "Načíst dostupné modely", + "description": "Načíst seznam modelů od poskytovatele.", + "providerLabel": "Poskytovatel:", + "needApiKey": "Nejprve zadejte API klíč pro načtení modelů.", + "fetching": "Načítání modelů...", + "retry": "Zkusit znovu", + "filterPlaceholder": "Filtrovat modely...", + "found": "Nalezen {{count}} model", + "found_plural": "Nalezeno {{count}} modelů", + "shown": "(zobrazeno {{count}})", + "selectAll": "Vybrat vše", + "deselectAll": "Zrušit výběr všech", + "fill": "Doplnit {{count}} vybraný model", + "fill_plural": "Doplnit {{count}} vybrané modely", + "failed": "Načtení modelů selhalo" + }, + "catalog": { + "button": "Uložené katalogy", + "title": "Uložené katalogy modelů", + "description": "Dříve načtené seznamy modelů, uložené podle API klíče. Vyberte modely a přidejte je do konfigurace.", + "loading": "Načítání katalogů...", + "empty": "Zatím žádné uložené katalogy. Načtěte modely od poskytovatele a uložte katalog.", + "filterPlaceholder": "Filtrovat modely...", + "models": "modely", + "fetchedAt": "Načteno", + "delete": "Smazat katalog", + "refresh": "Aktualizovat ze zdroje", + "found": "Nalezen {{count}} model", + "found_plural": "Nalezeno {{count}} modelů", + "selectAll": "Vybrat vše", + "deselectAll": "Zrušit výběr všech", + "addSelected": "Přidat {{count}} vybrané", + "addSuccess": "Přidáno {{count}} modelů do konfigurace.", + "needApiKey": "Tyto modely vyžadují API klíč. Po importu bude nutné nastavit přihlašovací údaje." + }, + "test": { + "title": "Test připojení modelu", + "description": "Ověřit, že je endpoint modelu dostupný a správně nakonfigurovaný.", + "modelLabel": "Model:", + "identifierLabel": "Identifikátor:", + "endpointLabel": "Endpoint:", + "testConnection": "Testovat připojení", + "testing": "Testuji připojení...", + "success": "Připojení úspěšné", + "responseTime": "Doba odezvy: {{ms}} ms", + "failed": "Připojení selhalo", + "status": "Stav: {{status}}", + "testFailed": "Test selhal", + "testAgain": "Testovat znovu" + }, + "validation": { + "whitespace": "Identifikátor modelu nesmí obsahovat mezery", + "leadingSlash": "Nesmí začínat lomítkem /", + "consecutiveSlash": "Nesmí obsahovat po sobě jdoucí lomítka /", + "useProvider": "Bude použit '{{provider}}' jako poskytovatel", + "defaultToOpenAI": "Žádný poskytovatel nezadán, výchozí je OpenAI", + "emptyModel": "Název modelu nesmí být prázdný", + "shouldUse": "'{{provider}}' by měl používat '{{alias}}'", + "didYouMean": "Mysleli jste '{{closest}}'?", + "unknownProvider": "Neznámý poskytovatel '{{provider}}'", + "parsed": "poskytovatel={{provider}}, model={{model}}" + }, + "combobox": { + "selectProvider": "Vyberte poskytovatele...", + "searchProvider": "Hledat poskytovatele...", + "noProvider": "Žádný poskytovatel nenalezen.", + "noCatalog": "Katalog poskytovatele není dostupný.", + "local": "lokální" + } + }, + "channels": { + "loadError": "Načtení kanálů selhalo", + "name": { + "telegram": "Telegram", + "discord": "Discord", + "slack": "Slack", + "feishu": "Feishu", + "dingtalk": "DingTalk", + "line": "LINE", + "qq": "QQ", + "onebot": "OneBot", + "wecom": "WeCom", + "whatsapp": "WhatsApp", + "whatsapp_native": "WhatsApp Native", + "pico": "Web", + "maixcam": "MaixCam", + "matrix": "Matrix", + "irc": "IRC", + "weixin": "WeChat", + "mqtt": "MQTT" + }, + "weixin": { + "bindTitle": "Propojení účtu WeChat", + "bindDesc": "Naskenujte QR kód pomocí WeChat pro propojení osobního účtu.", + "bind": "Propojit WeChat", + "rebind": "Znovu propojit", + "bound": "WeChat propojen", + "notBound": "Účet WeChat zatím není propojen.", + "generating": "Generuji QR kód...", + "scanHint": "Otevřete WeChat a naskenujte QR kód", + "scanned": "Naskenováno — potvrďte ve WeChat", + "expired": "QR kód vypršel", + "retry": "Zkusit znovu", + "refresh": "Obnovit QR", + "errorGeneric": "Nastala chyba. Zkuste to znovu." + }, + "wecom": { + "bindTitle": "Propojení WeCom", + "bindDesc": "Naskenujte QR kód pomocí WeCom pro propojení AI Bota.", + "bind": "Propojit WeCom", + "rebind": "Znovu propojit", + "bound": "WeCom propojen", + "notBound": "WeCom AI Bot zatím není propojen.", + "generating": "Generuji QR kód...", + "scanHint": "Otevřete WeCom a naskenujte QR kód", + "scanned": "Naskenováno, potvrďte ve WeCom", + "expired": "QR kód vypršel", + "retry": "Zkusit znovu", + "refresh": "Obnovit QR", + "errorGeneric": "Nastala chyba. Zkuste to znovu." + }, + "field": { + "token": "Bot Token", + "tokenPlaceholder": "Zadejte bot token", + "botToken": "Bot Token", + "appToken": "App Token", + "appId": "App ID", + "appSecret": "App Secret", + "verificationToken": "Verification Token", + "encryptKey": "Encrypt Key", + "baseUrl": "API Base URL", + "proxy": "HTTP Proxy", + "mentionOnly": "Pouze při zmínce", + "typingEnabled": "Indikátor psaní", + "placeholderEnabled": "Placeholder zpráva", + "placeholderText": "Text placeholderu", + "streamingEnabled": "Streamované výstupy", + "streamingThrottleSeconds": "Interval aktualizací (s)", + "streamingMinGrowthChars": "Minimální přírůstek znaků", + "groupTriggerMentionOnly": "Pouze zmínka ve skupině", + "groupTriggerPrefixes": "Prefixy pro spuštění ve skupině", + "groupTriggerPrefixesPlaceholder": "např. /, !, ?", + "randomReactionEmoji": "Náhodná emoji reakce", + "randomReactionEmojiPlaceholder": "např. THUMBSUP, HEART, SMILE", + "isLark": "Lark (mezinárodní)", + "allowFrom": "Povolit od", + "allowFromPlaceholder": "např. 123456, 789012", + "allowOrigins": "Povolené originy", + "allowOriginsPlaceholder": "např. https://example.com, http://localhost:5173", + "removeListItem": "Odebrat {{value}}", + "secretPlaceholder": "Zadejte secret", + "secretHintSet": "Hodnota je již nastavena. Ponechte prázdné pro zachování beze změny." + }, + "page": { + "notFound": "Kanál \"{{name}}\" není podporován.", + "saveSuccess": "Nastavení kanálu uloženo.", + "saveError": "Uložení nastavení kanálu selhalo", + "savePrompt": "Tato změna ještě nebyla uložena. Uložte ji do konfigurace kanálu.", + "docLink": "Dokumentace", + "enableLabel": "Aktivovat kanál", + "restartRequiredTitle": "Vyžadován restart gateway", + "restartRequiredDesc": "Poslední nastavení {{name}} bylo uloženo. Pro aktivaci restartujte gateway." + }, + "form": { + "desc": { + "token": "Přístupový token bota pro připojení k API platformy.", + "botToken": "Token bota pro odesílání a příjem zpráv.", + "appToken": "Token aplikace pro Socket Mode připojení.", + "appId": "Unikátní ID aplikace pro autentizaci.", + "appSecret": "Secret aplikace pro podepisování a autentizaci.", + "verificationToken": "Verification token pro event callbacky.", + "encryptKey": "Šifrovací klíč pro dešifrování callback payloadů.", + "baseUrl": "Základní URL API platformy. Výchozí je oficální endpoint.", + "proxy": "Adresa HTTP proxy pro odchozí síťový provoz.", + "mentionOnly": "Reagovat pouze při explicitní zmínce bota ve skupinových chatech.", + "typingEnabled": "Zobrazovat stav psaní během generování odpovědi.", + "placeholderEnabled": "Aktivovat dočasné placeholder zprávy před odesláním finální odpovědi.", + "streamingEnabled": "Povolit tomuto kanálu zobrazovat streamované výstupy poskytovatele. Musí být rovněž povoleno streamování v nastavení modelu.", + "streamingThrottleSeconds": "Minimální interval mezi průběžnými aktualizacemi streamu. 0 znamená použít výchozí hodnotu. Finální odpovědi nejsou omezovány.", + "streamingMinGrowthChars": "Minimální přírůstek textu před odesláním další průběžné aktualizace streamu. 0 znamená použít výchozí hodnotu. Finální odpovědi nejsou omezovány.", + "groupTriggerMentionOnly": "Ve skupinových chatech reagovat pouze při zmínce bota.", + "groupTriggerPrefixes": "Vlastní prefixy pro spuštění ve skupinovém chatu. Přidávejte položky po jedné nebo vložte více hodnot najednou.", + "randomReactionEmoji": "PicoClaw přidává emoji reakce na zprávy uživatelů jako potvrzení přijetí. Příklady: \"THUMBSUP\", \"HEART\", \"SMILE\". Ponechte prázdné pro výchozí emoji \"Pin\".", + "isLark": "Použít mezinárodní doménu Lark (open.larksuite.com) místo domény Feishu (open.feishu.cn).", + "allowFrom": "Povolená ID uživatelů nebo skupin. Přidávejte po jednom nebo vložte více hodnot najednou.", + "allowOrigins": "Povolené origin domény. Přidávejte po jednom nebo vložte více hodnot najednou.", + "wsUrl": "URL WebSocket služby.", + "reconnectInterval": "Interval pro opětovné připojení po výpadku (sekundy).", + "bridgeUrl": "URL bridge služby.", + "sessionStorePath": "Lokální cesta pro uložení relací.", + "useNative": "Zda použít nativní klientský režim.", + "host": "Adresa hostitele služby.", + "port": "Port služby.", + "homeserver": "URL Matrix homeserveru.", + "userId": "Uživatelské ID účtu.", + "deviceId": "ID zařízení.", + "joinOnInvite": "Automaticky vstoupit do místností při pozvání.", + "clientId": "Client ID pro autentizaci platformy.", + "corpId": "Corp ID organizace.", + "agentId": "Agent ID podnikové aplikace.", + "webhookUrl": "Celá URL webhooku.", + "webhookHost": "Hostitel pro naslouchání webhooku.", + "webhookPort": "Port pro naslouchání webhooku.", + "webhookPath": "Cesta route webhooku.", + "replyTimeout": "Timeout odpovědi v sekundách.", + "maxSteps": "Maximální počet kroků zpracování.", + "welcomeMessage": "Obsah uvítací zprávy pro nové relace.", + "allowTokenQuery": "Povolit token v URL query parametrech.", + "pingInterval": "Interval heartbeatu připojení v sekundách.", + "readTimeout": "Timeout čtení v sekundách.", + "writeTimeout": "Timeout zápisu v sekundách.", + "maxConnections": "Maximální počet souběžných připojení.", + "server": "Adresa IRC serveru.", + "tls": "Zda aktivovat TLS.", + "nick": "Přezdívka bota.", + "user": "IRC uživatelské jméno.", + "realName": "Zobrazované celé jméno.", + "channels": "IRC kanály pro připojení.", + "requestCaps": "Seznam IRC capabilities požadovaných při připojení.", + "maxBase64FileSizeMiB": "Maximální velikost v MiB pro převod lokálních souborů do base64 před nahráním. 0 znamená bez omezení. Platí pouze pro lokální soubory, ne pro URL uploady.", + "genericField": "Slouží ke konfiguraci {{field}}.", + "broker": "Adresa MQTT brokeru.", + "mqttAgentId": "Jedinečný identifikátor této instance, používá se k sestavení cesty tématu.", + "topicPrefix": "Prefix tématu. Výchozí hodnota je /picoclaw.", + "mqttUsername": "Uživatelské jméno pro ověření u brokeru (volitelné).", + "mqttPassword": "Heslo pro ověření u brokeru (volitelné).", + "mqttClientId": "ID MQTT klienta. Ponechte prázdné pro automatické generování.", + "keepAlive": "Interval keepalive v sekundách. Výchozí hodnota je 60.", + "qos": "Úroveň QoS zpráv: 0 = nejvýše jednou, 1 = alespoň jednou, 2 = přesně jednou." + } + }, + "validation": { + "requiredField": "Toto pole je povinné." + }, + "mqtt": { + "protocolTitle": "Referenční příručka protokolu", + "protocolDesc": "Klienti odesílají a přijímají zprávy pomocí následujícího formátu tématu a obsahu.", + "uplink": "Uplink (Klient → Agent)", + "downlink": "Downlink (Agent → Klient)", + "topicParams": "Parametry tématu", + "fieldText": "text", + "uplinkTextDesc": "Přirozený pokyn od uživatele (povinné).", + "downlinkTextDesc": "Text odpovědi agenta. V režimu streamování zřetězte více zpráv ve správném pořadí pro úplnou odpověď.", + "topicPrefixDesc": "Prefix tématu, odpovídá výše uvedené konfiguraci.", + "agentIdDesc": "ID agenta, odpovídá výše uvedené konfiguraci.", + "clientIdDesc": "Identifikátor definovaný klientem. Doporučení: vygenerujte UUID při prvním spuštění a uložte jej, aby stejné zařízení vždy používalo stejné ID.", + "clientIdPlaceholder": "Automaticky generováno, pokud je prázdné", + "secretSet": "Již nakonfigurováno. Ponechte prázdné pro zachování stávající hodnoty.", + "secretEmpty": "Není nakonfigurováno" + } + }, + "pages": { + "agent": { + "load_error": "Načtení informací o podpoře agenta selhalo.", + "skills": { + "empty": "Žádné dovednosti nejsou aktuálně dostupné.", + "install_success": "{{name}} nainstalováno.", + "install_error": "Instalace dovednosti selhala.", + "search_placeholder": "Hledat podle názvu, popisu nebo registru", + "source_label": "Typ", + "sort_label": "Řadit", + "import": "Importovat dovednost", + "import_success": "Dovednost importována.", + "import_error": "Import dovednosti selhal.", + "import_invalid_type": "Podporovány jsou pouze soubory dovedností ve formátu Markdown nebo ZIP.", + "import_invalid_size": "Soubor dovednosti musí být menší než 1 MB.", + "import_constraints": "Import souboru dovednosti ve formátu Markdown nebo ZIP, max. 1 MB", + "view": "Zobrazit", + "delete": "Smazat", + "delete_title": "Smazat dovednost?", + "delete_description": "\"{{name}}\" bude odstraněna z dovedností workspace.", + "delete_confirm": "Smazat", + "delete_success": "Dovednost smazána.", + "delete_error": "Smazání dovednosti selhalo.", + "viewer_title": "Obsah dovednosti", + "viewer_description": "Zde si přečtěte aktuální obsah SKILL.md.", + "load_detail_error": "Načtení obsahu dovednosti selhalo.", + "no_description": "Popis není k dispozici.", + "no_results": "Žádné dovednosti neodpovídají aktuálním filtrům.", + "dropzone_title": "Importovat do workspace", + "dropzone_description": "Přetáhněte soubor dovednosti nebo vyberte ze disku.", + "dropzone_label": "Přetáhněte soubor dovednosti sem", + "dropzone_active": "Pusťte pro import dovednosti", + "dropzone_release": "Dovednost bude normalizována a uložena do adresáře dovedností workspace.", + "marketplace_title": "Objevit dovednosti", + "marketplace_description": "Prohledejte registry dovedností a nainstalujte užitečné dovednosti do tohoto workspace", + "marketplace_search_placeholder": "Hledat schopnosti jako github, docker, database...", + "marketplace_search_action": "Hledat", + "marketplace_search_status": "Stav hledání", + "marketplace_install_status": "Stav instalace", + "marketplace_notice_title": "Bezpečnostní upozornění", + "marketplace_notice_body": "Dovednosti z registru jsou obsah třetích stran. Před instalací zkontrolujte autora, URL stránky, instrukce a veškerý požadovaný kód nebo přihlašovací údaje.", + "marketplace_status_disabled": "Zakázáno. Nejprve aktivujte příslušný nástroj na stránce Nástroje.", + "marketplace_status_enable_hint": "Nejprve aktivujte příslušný nástroj na stránce Nástroje.", + "marketplace_search_error": "Prohledání registrů selhalo.", + "marketplace_loading_results": "Hledám dovednosti...", + "marketplace_loading_more": "Načítám další dovednosti...", + "marketplace_results_title": "{{count}} výsledků pro \"{{query}}\"", + "marketplace_results_hint": "Výsledky z registru se instalují do aktuálního workspace.", + "marketplace_install_action": "Instalovat", + "marketplace_installed": "Nainstalováno", + "marketplace_view_installed": "Zobrazit lokální", + "marketplace_installed_hint": "Již dostupné v tomto workspace jako \"{{name}}\".", + "marketplace_empty_results": "Žádné instalovatelné dovednosti neodpovídají \"{{query}}\".", + "marketplace_idle": "Hledejte schopnost pro zobrazení instalovatelných dovedností z nakonfigurovaných registrů.", + "marketplace_unavailable": "Prohledávání registrů je momentálně nedostupné. Zkontrolujte nastavení nástrojů Dovednosti.", + "sort": { + "name_asc": "Název (A-Z)", + "name_desc": "Název (Z-A)", + "source": "Typ" + }, + "origin": { + "all": "Všechny typy", + "builtin": "Vestavěné", + "third_party": "Třetí strany", + "manual": "Ruční" + }, + "summary": { + "total": "Celkem dovedností" + }, + "detail_tabs": { + "preview": "Náhled", + "raw": "Zdrojový text", + "meta": "Metadata" + }, + "metadata": { + "name": "Název", + "description": "Popis", + "registry": "Registr", + "url": "URL", + "version": "Nainstalovaná verze", + "lines": "Počet řádků", + "characters": "Počet znaků" + }, + "marketplace_installDisabled": { + "installing": "Instaluji...", + "installed": "Již nainstalováno", + "cannotInstall": "Nelze nainstalovat: příslušný nástroj není aktivní" + } + }, + "tools": { + "search_placeholder": "Hledat nástroje...", + "no_results": "Žádné nástroje neodpovídají kritériím.", + "filter": { + "all": "Všechny stavy", + "enabled": "Aktivní", + "disabled": "Neaktivní", + "blocked": "Blokované" + }, + "empty": "Žádné nástroje nejsou dostupné.", + "enable_success": "Nástroj aktivován.", + "disable_success": "Nástroj deaktivován.", + "toggle_error": "Aktualizace stavu nástroje selhala.", + "library_title": "Knihovna nástrojů", + "library_description": "Procházejte a spravujte sadu nástrojů dostupných pro vaše AI agenty.", + "web_search": { + "title": "Webové vyhledávání", + "description": "Poskytuje agentům schopnost webového vyhledávání pro nalezení aktuálních informací. Automaticky směruje na optimálního aktivního providera.", + "unsaved_prompt": "Tato změna ještě nebyla uložena. Uložte ji do konfigurace webového vyhledávání.", + "global_settings": "Obecné", + "providers_config": "Integrace", + "load_error": "Načtení nastavení webového vyhledávání selhalo.", + "save": "Uložit změny", + "open_settings": "Otevřít nastavení", + "save_success": "Nastavení úspěšně uloženo.", + "save_error": "Uložení nastavení selhalo.", + "provider": "Primární provider", + "provider_description": "Vyberte výchozího providera pro zpracování požadavků webového vyhledávání.", + "proxy": "HTTPS Proxy", + "proxy_description": "Volitelná globální HTTP/S proxy pro podkladové webové požadavky.", + "prefer_native": "Preferovat nativní vyhledávání", + "prefer_native_hint": "Pokud je aktivní, model může použít vlastní vestavěnou schopnost vyhledávání místo nakonfigurovaného seznamu providerů.", + "provider_hint": "Aktivujte tohoto providera a vyplňte požadovaná nastavení připojení.", + "max_results": "Max výsledků", + "base_url": "Base URL", + "base_url_placeholder": "Volitelné přepsání endpointu", + "api_key": "API Key / Token", + "api_key_placeholder": "Zadejte API klíč, ponechte prázdné pro zachování stávajícího", + "none": "Nedostupné" + }, + "status": { + "enabled": "Aktivní", + "disabled": "Neaktivní", + "blocked": "Blokováno" + }, + "categories": { + "automation": "Automatizace", + "filesystem": "Souborový systém", + "web": "Web", + "communication": "Komunikace", + "skills": "Dovednosti", + "agents": "Agenti", + "hardware": "Hardware", + "discovery": "Discovery" + }, + "reasons": { + "requires_linux": "Tento nástroj funguje pouze na Linux hostech s potřebnými soubory zařízení.", + "requires_serial_platform": "Tento nástroj aktuálně podporuje hostitele Linux, macOS a Windows s dostupnými sériovými porty.", + "requires_skills": "Nejprve aktivujte `tools.skills`, aby byl tento nástroj registru dovedností dostupný.", + "requires_subagent": "Nejprve aktivujte `tools.subagent`, aby nástroj spawn mohl delegovat práci.", + "requires_mcp_discovery": "Nejprve aktivujte `tools.mcp.discovery`, aby byly nástroje MCP discovery dostupné.", + "requires_web_search_provider": "Nakonfigurujte alespoň jednoho připraveného externího providera webového vyhledávání." + } + } + }, + "config": { + "load_error": "Načtení konfigurace selhalo. Obnovte stránku a zkuste to znovu.", + "workspace": "Adresář workspace", + "workspace_hint": "Základní adresář pro operace s agentovými soubory.", + "restrict_workspace": "Omezit na workspace", + "restrict_workspace_hint": "Povolit operace se soubory pouze uvnitř workspace.", + "split_on_marker": "Chatty režim", + "split_on_marker_hint": "Rozděluje dlouhé zprávy na krátké jako při skutečném lidském chatu.", + "tool_feedback_enabled": "Tool Feedback", + "tool_feedback_enabled_hint": "Odeslat krátkou poznámku o provedení do aktuálního chatu před spuštěním každého nástroje.", + "tool_feedback_separate_messages": "Oddělené zprávy zpětné vazby", + "tool_feedback_separate_messages_hint": "Každou aktualizaci zpětné vazby nástroje uchovejte jako samostatnou zprávu chatu místo opakovaného použití jediné průběžné zprávy.", + "tool_feedback_max_args_length": "Délka Tool Feedbacku", + "tool_feedback_max_args_length_hint": "Maximální počet znaků zobrazených v každé tool feedback zprávě. Nastavte 0 pro výchozí hodnotu.", + "exec_enabled": "Povolit příkazy", + "exec_enabled_hint": "Aktivuje nebo deaktivuje spouštění příkazů. Pokud je deaktivováno, žádné příkazy se nespustí.", + "allow_remote": "Povolit vzdálené příkazy", + "allow_remote_hint": "Pokud je aktivní, vzdálené relace nebo ne-lokální kontexty mohou také spouštět příkazy. Pokud je deaktivováno, spouštění příkazů je omezeno na lokální bezpečné kontexty.", + "enable_deny_patterns": "Aktivovat blacklist", + "enable_deny_patterns_hint": "Pokud je aktivní, aplikace blokuje příkazy odpovídající vestavěným nebezpečným vzorům a vlastnímu blacklistu příkazů níže.", + "exec_timeout_seconds": "Timeout příkazu (sekundy)", + "exec_timeout_seconds_hint": "Maximální doba běhu příkazů. Nastavte 0 pro výchozí timeout.", + "custom_deny_patterns": "Blacklist příkazů", + "custom_deny_patterns_hint": "Přidejte vlastní pravidla pro blokování příkazů, jeden regulární výraz na řádek. Příkaz odpovídající jakémukoli pravidlu bude zablokován.", + "custom_allow_patterns": "Whitelist příkazů", + "custom_allow_patterns_hint": "Přidejte vlastní pravidla pro povolení příkazů, jeden regulární výraz na řádek. Příkaz odpovídající jakémukoli pravidlu přeskočí blacklist, ale ostatní bezpečnostní limity stále platí.", + "custom_patterns_placeholder": "^rm\\s+-rf\\b\n^git\\s+push\\b", + "pattern_detector_title": "Nástroj pro testování vzorů", + "pattern_detector_hint": "Zadejte příkaz pro otestování, zda odpovídá některému vzoru blacklistu nebo whitelistu.", + "pattern_detector_input_placeholder": "Zadejte příkaz pro test, např. rm -rf /tmp", + "pattern_detector_test_button": "Testovat", + "pattern_detector_result_allowed": "Povoleno (odpovídá whitelistu)", + "pattern_detector_result_blocked": "Blokováno (odpovídá blacklistu)", + "pattern_detector_result_no_match": "Žádná shoda (použijí se výchozí pravidla)", + "allow_shell_execution": "Povolit naplánované příkazy", + "allow_shell_execution_hint": "Povolit naplánovaným úlohám výchozí spouštění příkazů. Pokud je deaktivováno, uživatelé musí předat command_confirm=true pro naplánování příkazu.", + "cron_exec_timeout": "Timeout naplánovaného příkazu (minuty)", + "cron_exec_timeout_hint": "Maximální doba běhu naplánovaných příkazů. Nastavte 0 pro deaktivaci timeoutu.", + "max_tokens": "Max Tokens", + "max_tokens_hint": "Horní limit tokenů na odpověď modelu.", + "context_window": "Context Window", + "context_window_hint": "Kapacita kontextového okna modelu v tokenech. Ponechte prázdné pro výchozí (4× max tokens).", + "max_tool_iterations": "Max Tool Iterations", + "max_tool_iterations_hint": "Maximální počet smyček volání nástrojů v jednom úkolu.", + "summarize_threshold": "Práh pro sumarizaci zpráv", + "summarize_threshold_hint": "Spustit sumarizaci po tomto počtu zpráv.", + "summarize_token_percent": "Procento tokenů pro sumarizaci", + "summarize_token_percent_hint": "Používá se při spuštění sumarizace konverzace.", + "turn_profile": "Zásady kontextu požadavku", + "turn_profile_hint": "Řídí, jaký kontext nese každý požadavek. Ponechte zakázáno pro zachování běžného chování chatu.", + "turn_profile_enabled": "Povolit zásadu", + "turn_profile_enabled_hint": "Pokud je povoleno, tato zásada se použije na každý nový tah. Pokud je zakázáno, PicoClaw používá původní chování kontextu.", + "turn_profile_mode_default": "Výchozí", + "turn_profile_mode_off": "Vypnuto", + "turn_profile_mode_custom": "Povolený seznam", + "turn_profile_history": "Historický kontext", + "turn_profile_history_hint": "Výchozí nastavení zahrnuje předchozí zprávy z této session. Vypnutí způsobí, že tah bude fungovat jako nový chat a jeho výsledek se neuloží do historie.", + "turn_profile_system_prompt": "Systémový kontext", + "turn_profile_system_prompt_hint": "Výchozí nastavení zahrnuje identitu PicoClaw, workspace, paměť a instrukce runtime. Vypnuto zachová pouze systémové prompty explicitně dodané požadavkem.", + "turn_profile_skills": "Dovednostní prompty", + "turn_profile_skills_hint": "Výchozí nastavení zahrnuje dostupné dovednosti a aktivní instrukce. Vypnuto je skryje. Povolený seznam zachová jen dovednosti zadané jeden název na řádek.", + "turn_profile_skills_allow_placeholder": "název-dovednosti\ndalší-dovednost", + "turn_profile_tools": "Volatelné nástroje", + "turn_profile_tools_hint": "Výchozí nastavení zpřístupní běžné nástroje. Vypnuto zabrání volání nástrojů. Povolený seznam zachová pouze nástroje zadané jeden název na řádek, například web_search.", + "turn_profile_tools_allow_placeholder": "web_search\nweb_fetch", + "session_scope": "Rozsah relace", + "session_scope_hint": "Způsob izolace kontextu chatu mezi partnery/kanály.", + "session_scope_per_channel_peer": "Podle kanálu + partnera", + "session_scope_per_channel_peer_desc": "Oddělený kontext pro každého uživatele v každém kanálu.", + "session_scope_per_channel": "Podle kanálu", + "session_scope_per_channel_desc": "Jeden sdílený kontext na kanál.", + "session_scope_per_peer": "Podle partnera", + "session_scope_per_peer_desc": "Jeden kontext na uživatele napříč kanály.", + "session_scope_global": "Globální", + "session_scope_global_desc": "Všechny zprávy sdílejí jeden globální kontext.", + "heartbeat_enabled": "Heartbeat", + "heartbeat_enabled_hint": "Odesílat pravidelné heartbeat zprávy.", + "heartbeat_interval": "Interval heartbeatu (minuty)", + "heartbeat_interval_hint": "Interval v minutách mezi heartbeat signály.", + "devices_enabled": "Aktivovat zařízení", + "devices_enabled_hint": "Aktivovat integrace hardwarových zařízení.", + "monitor_usb": "Sledovat USB", + "monitor_usb_hint": "Sledovat události připojení/odpojení USB při aktivních zařízeních.", + "autostart_label": "Spustit při přihlášení", + "autostart_hint": "Automaticky spustit PicoClaw Web při přihlášení.", + "autostart_unsupported": "Spuštění při přihlášení není na této platformě podporováno.", + "autostart_load_error": "Načtení stavu spuštění při přihlášení selhalo.", + "server_port": "Port služby", + "server_port_hint": "HTTP port používaný PicoClaw Web.", + "launcher_section_hint": "Změny v této sekci se projeví až po restartu launcheru.", + "gateway_restart_hint": "Změny v této části se projeví po restartu gateway.", + "dashboard_password": "Přihlašovací heslo", + "dashboard_password_hint": "Nastavit nové přihlašovací heslo.", + "dashboard_password_placeholder": "Alespoň 8 znaků", + "dashboard_password_confirm": "Potvrzení nového hesla", + "dashboard_password_confirm_hint": "Zadejte nové přihlašovací heslo znovu.", + "dashboard_password_confirm_placeholder": "Zopakujte heslo", + "dashboard_password_required": "Zadejte a potvrďte nové přihlašovací heslo.", + "dashboard_password_mismatch": "Přihlašovací hesla se neshodují.", + "dashboard_password_min_length": "Přihlašovací heslo musí mít alespoň 8 znaků.", + "lan_access": "Aktivovat přístup z LAN", + "lan_access_hint": "Povolit přístup z ostatních zařízení v lokální síti.", + "allowed_cidrs": "Povolené síťové CIDRy", + "allowed_cidrs_hint": "Ke službě mají přístup pouze klienti z těchto CIDR rozsahů. Jeden na řádek nebo oddělené čárkou. Ponechte prázdné pro povolení všech.", + "allowed_cidrs_placeholder": "192.168.1.0/24\n10.0.0.0/8", + "evolution_section_hint": "Nechte agenta učit se z dokončených tahů a připravovat vylepšení dovedností.", + "evolution_enabled": "Povolit evoluci", + "evolution_enabled_hint": "Zaznamenávat data učení pro dokončené tahy. Režimy Návrh a Aplikovat mohou také generovat aktualizace dovedností.", + "evolution_mode": "Režim evoluce", + "evolution_mode_hint": "Pozorovat — pouze zaznamenává data. Návrh — připravuje kandidátní dovednosti. Aplikovat — může zapsat přijaté návrhy do dovedností workspace.", + "evolution_mode_observe": "Sledování", + "evolution_mode_draft": "Návrh", + "evolution_mode_apply": "Aplikace", + "evolution_state_dir": "Adresář stavu", + "evolution_state_dir_hint": "Volitelný adresář pro stav evoluce. Ponechte prázdné pro použití výchozího workspace.", + "evolution_min_task_count": "Minimální počet úloh", + "evolution_min_task_count_hint": "Minimální počet příbuzných úloh, než může vzor vytvořit návrh.", + "evolution_min_success_ratio": "Minimální poměr úspěšnosti", + "evolution_min_success_ratio_hint": "Požadovaný poměr úspěšnosti pro seskupené úlohy. Zadejte hodnotu větší než 0 a nejvýše 1.", + "evolution_cold_path_trigger": "Spouštěč zpracování", + "evolution_cold_path_trigger_hint": "Zvolte, kdy se spustí generování návrhů pro způsobilé záznamy učení.", + "evolution_cold_path_after_turn": "Po každém tahu", + "evolution_cold_path_scheduled": "Plánovaně", + "evolution_cold_path_manual": "Vypnuto", + "evolution_cold_path_times": "Plánované časy", + "evolution_cold_path_times_hint": "Časy spuštění plánovaného zpracování. Zadejte jednu hodnotu HH:MM na řádek.", + "mcp_section_hint": "Konfigurujte MCP servery bez ruční úpravy souboru config.json.", + "mcp_enabled": "Povolit MCP", + "mcp_enabled_hint": "Zapnout nebo vypnout integraci MCP serverů.", + "mcp_discovery_enabled": "Povolit MCP Discovery", + "mcp_discovery_enabled_hint": "Povolit nástrojům MCP Discovery prohledávat registrované MCP servery.", + "mcp_discovery_ttl": "TTL odemčení nástrojů discovery", + "mcp_discovery_ttl_hint": "Počet TTL tiků, po které zůstávají nalezené nástroje dostupné po vyhledávání.", + "mcp_discovery_max_results": "Maximální počet výsledků discovery", + "mcp_discovery_max_results_hint": "Maximální počet shod MCP discovery vrácených na dotaz.", + "mcp_discovery_use_bm25": "Použít BM25 řazení", + "mcp_discovery_use_bm25_hint": "Použít lexikální skórování BM25 pro výsledky MCP discovery.", + "mcp_discovery_use_regex": "Povolit regex vyhledávání", + "mcp_discovery_use_regex_hint": "Povolit shodu na základě regulárních výrazů v MCP discovery.", + "mcp_servers": "MCP servery", + "mcp_servers_hint": "Přidávejte, upravujte nebo odebírejte MCP servery.", + "mcp_server_new": "Nový MCP server", + "mcp_server_add": "Přidat server", + "mcp_server_remove": "Odebrat", + "mcp_server_enabled": "Povoleno", + "mcp_server_discovery_mode": "Režim discovery", + "mcp_server_discovery_mode_inherit": "Sledovat globální režim discovery", + "mcp_server_discovery_mode_deferred": "Odložené discovery", + "mcp_server_discovery_mode_eager": "Okamžitá registrace", + "mcp_server_name_placeholder": "Název serveru (např. github)", + "mcp_server_url_placeholder": "URL serveru (např. https://example.com/mcp)", + "mcp_server_command_placeholder": "Příkaz (např. npx)", + "mcp_server_env_file_placeholder": "Cesta k souboru prostředí (volitelné)", + "mcp_server_args_placeholder": "Argumenty, jeden na řádek", + "mcp_server_env_placeholder": "JSON objekt prostředí", + "mcp_server_headers_placeholder": "JSON objekt hlaviček", + "sections": { + "agent": "Agent", + "runtime": "Runtime", + "evolution": "Evoluce", + "mcp": "MCP", + "exec": "Spouštění příkazů", + "cron": "Cron úlohy", + "launcher": "Launcher", + "devices": "Zařízení" + }, + "open_raw": "Raw konfigurace", + "back_to_visual": "Vizuální konfigurace", + "raw_json_title": "Raw JSON konfigurace", + "json_placeholder": "Zadejte platnou JSON konfiguraci...", + "save_success": "Konfigurace úspěšně uložena.", + "save_error": "Uložení konfigurace selhalo.", + "reset_confirm_title": "Resetovat změny", + "reset_confirm_desc": "Opravdu chcete zahodit neuložené změny a vrátit se k poslednímu uloženému stavu?", + "reset_success": "Změny byly obnoveny na poslední uložený stav.", + "invalid_json": "Neplatný formát JSON.", + "format_success": "JSON úspěšně naformátován.", + "format_error": "Neplatný formát JSON.", + "format": "Formátovat", + "unsaved_changes": "Máte neuložené změny.", + "factory_reset": "Tovární nastavení", + "factory_reset_confirm_title": "Obnovit tovární nastavení", + "factory_reset_confirm_desc": "Tímto obnovíte veškerou konfiguraci na tovární nastavení. API klíče a bezpečnostní údaje budou zachovány. Záloha aktuální konfigurace bude vytvořena.", + "factory_reset_confirm": "Obnovit výchozí nastavení", + "factory_reset_success": "Konfigurace byla obnovena na tovární nastavení.", + "factory_reset_error": "Obnovení konfigurace selhalo." + }, + "logs": { + "log_level_error": "Aktualizace úrovně logování selhala.", + "clear": "Vymazat logy", + "empty": "Čekám na logy..." + } + }, + "tour": { + "skip": "Přeskočit průvodce", + "prev": "Předchozí", + "next": "Další", + "finish": "Dokončit", + "welcome": { + "title": "Vítejte v PicoClaw", + "description": "PicoClaw je výkonná platforma pro AI asistenty. Pojďme si dát chvíli na dokončení základního nastavení." + }, + "models": { + "title": "Nakonfigurujte modely", + "description": "Klikněte na nabídku \"Modely\" vlevo pro nastavení API klíčů pro AI providery. V chatu lze použít pouze nakonfigurované modely." + }, + "gateway": { + "title": "Spusťte gateway", + "description": "Po nakonfigurování modelů klikněte na tlačítko \"Spustit gateway\" nahoře pro zahájení chatu s AI." + }, + "docs": { + "title": "Zobrazit dokumentaci", + "description": "Potřebujete další pomoc? Klikněte na tlačítko dokumentace v pravém horním rohu pro zobrazení podrobných průvodců a dokumentace ke konfiguraci." + } + } +}